-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathrings-v2_tpl
356 lines (307 loc) · 8.95 KB
/
rings-v2_tpl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
--[[
Ring Meters by londonali1010 (2009)
Modified by La-Manoue (2016)
Automation template by popi (2017)
This script draws percentage meters as rings. It is fully customisable; all options are described in the script.
IMPORTANT: if you are using the 'cpu' function, it will cause a segmentation fault if it tries to draw a ring straight away. The if statement near the end of the script uses a delay to make sure that this doesn't happen. It calculates the length of the delay by the number of updates since Conky started. Generally, a value of 5s is long enough, so if you update Conky every 1s, use update_num > 5 in that if statement (the default). If you only update Conky every 2s, you should change it to update_num > 3; conversely if you update Conky every 0.5s, you should use update_num > 10. ALSO, if you change your Conky, is it best to use "killall conky; conky" to update it, otherwise the update_num will not be reset and you will get an error.
To call this script in Conky, use the following (assuming that you save this script to ~/scripts/rings.lua):
lua_load ~/conky/rings-v2_local.lua
lua_draw_hook_pre ring_stats
Changelog:
+ v2.1.1 -- addedd IO_WAIT ring
+ v2.1.0 -- templated for automation,
+ v2.0.0 -- Changed some values for ArchLinux
+ v1.2.2 -- Added color change for near-limits values / modified placement
+ v1.2.1 -- Fixed minor bug that caused script to crash if conky_parse() returns a nil value (20.10.2009)
+ v1.2 -- Added option for the ending angle of the rings (07.10.2009)
+ v1.1 -- Added options for the starting angle of the rings, and added the "max" variable, to allow for variables that output a numerical value rather than a percentage (29.09.2009)
+ v1.0 -- Original release (28.09.2009)
]]
normal="0x34cdff"
warn="0xff7200"
crit="0xff000d"
-- seulement quand fond nécessaire
corner_r=35
bg_colour=0x3b3b3b
bg_alpha=0.2
-- blue | 0x34cdff
-- red | 0xff1d2b
-- green | 0x1dff22
-- pink | 0xff1d9f
-- orange | 0xff8523
-- skyblue | 0x008cff
-- darkgray | 0x323232
settings_table_io = {
{
name='top_io io_perc 1',
arg='',
max=100,
bg_colour=0x3b3b3b,
bg_alpha=0.8,
fg_colour=0x34cdff,
fg_alpha=0.8,
x=370, y=98,
radius=55,
thickness=12,
start_angle=120,
end_angle=360
},
{
name='top_io io_perc 2',
arg='',
max=100,
bg_colour=0x3b3b3b,
bg_alpha=0.6,
fg_colour=0x34cdff,
fg_alpha=0.8,
x=370, y=98,
radius=42,
thickness=11,
start_angle=120,
end_angle=360
},
{
name='top_io io_perc 3',
arg='',
max=100,
bg_colour=0x3b3b3b,
bg_alpha=0.4,
fg_colour=0x34cdff,
fg_alpha=0.8,
x=370, y=98,
radius=30,
thickness=10,
start_angle=120,
end_angle=360
}
}
settings_table = {
--{{ TEMPERATURE }}
--{{ CPU }}
{
name='memperc',
arg='',
max=100,
bg_colour=0x3b3b3b,
bg_alpha=0.8,
fg_colour=0x34cdff,
fg_alpha=0.8,
x=340, y=234,
radius=60,
thickness=15,
start_angle=180,
end_angle=420
},
{
name='swapperc',
arg='',
max=100,
bg_colour=0x3b3b3b,
bg_alpha=0.4,
fg_colour=0x34cdff,
fg_alpha=0.8,
x=340, y=234,
radius=45,
thickness=12,
start_angle=180,
end_angle=420
},
--{{ FILESYSTEM }}
--{{ NETWORK }}
{
name='time',
arg='%H',
max=24,
bg_colour=0x3b3b3b,
bg_alpha=0.4,
fg_colour=0x34cdff,
fg_alpha=0.8,
x=230, y=406,
radius=10,
thickness=6,
start_angle=0,
end_angle=240
},
{
name='time',
arg='%M',
max=60,
bg_colour=0x3b3b3b,
bg_alpha=0.6,
fg_colour=0x34cdff,
fg_alpha=0.8,
x=230, y=406,
radius=19,
thickness=9,
start_angle=0,
end_angle=240
},
{
name='time',
arg='%S',
max=60,
bg_colour=0x3b3b3b,
bg_alpha=0.8,
fg_colour=0x34cdff,
fg_alpha=0.8,
x=230, y=406,
radius=31,
thickness=12,
start_angle=0,
end_angle=240
},
--{{ BATTERY }}
{
name='kernel', --just to avoid unknown viariable '$' in console
arg='',
max=100,
bg_colour=0x3b3b3b,
bg_alpha=0.6,
fg_colour=0x34cdff,
fg_alpha=0.6,
x=274, y=464,
radius=5,
thickness=13,
start_angle=0,
end_angle=360
},
}
require 'cairo'
function rgb_to_r_g_b(colour,alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
function draw_ring(cr,t,pt)
local w,h=conky_window.width,conky_window.height
local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle']
local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']
local angle_0=sa*(2*math.pi/360)-math.pi/2
local angle_f=ea*(2*math.pi/360)-math.pi/2
local t_arc=t*(angle_f-angle_0)
-- Draw background ring
cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
cairo_set_line_width(cr,ring_w)
cairo_stroke(cr)
-- Draw indicator ring
cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc)
cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
cairo_stroke(cr)
end
function conky_ring_stats()
-- 20170715 IO_WAIT
local function setup_rings_io(cr,pt)
local str=''
local value=0
local warn_value=50
local crit_value=70
str=string.format('${%s %s}',pt['name'],pt['arg'])
iowait=0
ioused=tonumber(conky_parse(str))
if ioused>0 then
iowait=100 - ioused
end
value=tonumber(iowait)
if value == nil then value = 0 end
pct=value/pt['max']
draw_ring(cr,pct,pt)
end
local function setup_rings(cr,pt)
local str=''
local value=0
str=string.format('${%s %s}',pt['name'],pt['arg'])
str=conky_parse(str)
value=tonumber(str)
if value == nil then value = 0 end
pct=value/pt['max']
draw_ring(cr,pct,pt)
end
if conky_window==nil then return end
local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height)
local cr=cairo_create(cs)
local updates=conky_parse('${updates}')
update_num=tonumber(updates)
if update_num>5 then
for i in pairs(settings_table) do
display_temp=temp_watch()
setup_rings(cr,settings_table[i])
end
-- IO_WAIT
for i in pairs(settings_table_io) do
setup_rings_io(cr,settings_table_io[i])
end
end
cairo_surface_destroy(cs)
cairo_destroy(cr)
end
-- Contrôle de l'espace disque
function disk_watch()
warn_disk=93
crit_disk=98
-- poser une boucle plus tard... pas simple
--{{ DISK_WATCH }}
end
-- Contrôle de la température
function temp_watch()
warn_value=70
crit_value=80
--{{ TEMPERATURE_WATCH }}
if temperature<warn_value then
settings_table[1]['fg_colour']=normal
elseif temperature<crit_value then
settings_table[1]['fg_colour']=warn
else
settings_table[1]['fg_colour']=crit
end
end
-- Battery color control
function battery_watch()
warn_value=30
crit_value=10
--{{ BATTERY_WATCH }}
if battery>warn_value then
settings_table[index]['fg_colour']=normal
elseif battery>crit_value then
settings_table[index]['fg_colour']=warn
else
settings_table[index]['fg_colour']=crit
end
end
-- Contrôle de l'interface active
-- choice to not probe network interface once conky is running.
-- just call again create_conky.py to update if gateway interface has changed
--function iface_watch()
--
-- iface=conky_parse("${if_existing /proc/net/route enp1s0f2}enp1s0f2${else}wlan0${endif}")
--
-- settings_table[11]['arg']=iface
-- settings_table[12]['arg']=iface
--end
function conky_draw_bg()
if conky_window==nil then return end
local w=conky_window.width
local h=conky_window.height
local cs=cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, w, h)
cr=cairo_create(cs)
cairo_move_to(cr,corner_r,0)
cairo_line_to(cr,w-corner_r,0)
cairo_curve_to(cr,w,0,w,0,w,corner_r)
cairo_line_to(cr,w,h-corner_r)
cairo_curve_to(cr,w,h,w,h,w-corner_r,h)
cairo_line_to(cr,corner_r,h)
cairo_curve_to(cr,0,h,0,h,0,h-corner_r)
cairo_line_to(cr,0,corner_r)
cairo_curve_to(cr,0,0,0,0,corner_r,0)
cairo_close_path(cr)
cairo_set_source_rgba(cr,rgb_to_r_g_b(bg_colour,bg_alpha))
cairo_fill(cr)
end
function conky_main()
temp_watch()
disk_watch()
--iface_watch()
-- if a battery is found
--{{ BATTERY_ACTIVATE }}
conky_ring_stats()
-- quand fond nécessaire
-- conky_draw_bg()
end