SHOW:
|
|
- or go back to the newest paste.
1 | --[[ | |
2 | This conky config reEdit by despot77 at http://gnome-look.org/content/show.php/Conky+lua?content=139024 | |
3 | ||
4 | This script draws percentage meters as rings, and also draws clock hands if you want! It is fully customisable; all options are described in the script. This script is based off a combination of my clock.lua script and my rings.lua script. | |
5 | ||
6 | 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 on line 145 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. | |
7 | ||
8 | To call this script in Conky, use the following (assuming that you save this script to ~/scripts/rings.lua): | |
9 | lua_load ~/scripts/clock_rings.lua | |
10 | lua_draw_hook_pre clock_rings | |
11 | ||
12 | Original Conky : | |
13 | 2011mint -- reEdit despot77 (18.02.2011) | |
14 | ]] | |
15 | ||
16 | settings_table = { | |
17 | { | |
18 | -- Edit this table to customise your rings. | |
19 | -- You can create more rings simply by adding more elements to settings_table. | |
20 | -- "name" is the type of stat to display; you can choose from 'cpu', 'memperc', 'fs_used_perc', 'battery_used_perc'. | |
21 | name='time', | |
22 | -- "arg" is the argument to the stat type, e.g. if in Conky you would write ${cpu cpu0}, 'cpu0' would be the argument. If you would not use an argument in the Conky variable, use ''. | |
23 | arg='%I.%M', | |
24 | -- "max" is the maximum value of the ring. If the Conky variable outputs a percentage, use 100. | |
25 | max=12, | |
26 | -- "bg_colour" is the colour of the base ring. | |
27 | bg_colour=0xffffff, | |
28 | -- "bg_alpha" is the alpha value of the base ring. | |
29 | bg_alpha=0.1, | |
30 | -- "fg_colour" is the colour of the indicator part of the ring. | |
31 | fg_colour=0x4EC6DE, | |
32 | -- "fg_alpha" is the alpha value of the indicator part of the ring. | |
33 | fg_alpha=0.2, | |
34 | -- "x" and "y" are the x and y coordinates of the centre of the ring, relative to the top left corner of the Conky window. | |
35 | x=100, y=150, | |
36 | -- "radius" is the radius of the ring. | |
37 | radius=50, | |
38 | -- "thickness" is the thickness of the ring, centred around the radius. | |
39 | thickness=5, | |
40 | -- "start_angle" is the starting angle of the ring, in degrees, clockwise from top. Value can be either positive or negative. | |
41 | start_angle=0, | |
42 | -- "end_angle" is the ending angle of the ring, in degrees, clockwise from top. Value can be either positive or negative, but must be larger than start_angle. | |
43 | end_angle=360 | |
44 | }, | |
45 | { | |
46 | name='time', | |
47 | arg='%M.%S', | |
48 | max=60, | |
49 | bg_colour=0xffffff, | |
50 | bg_alpha=0.1, | |
51 | fg_colour=0x4EC6DE, | |
52 | fg_alpha=0.4, | |
53 | x=100, y=150, | |
54 | radius=56, | |
55 | thickness=5, | |
56 | start_angle=0, | |
57 | end_angle=360 | |
58 | }, | |
59 | { | |
60 | name='time', | |
61 | arg='%S', | |
62 | max=60, | |
63 | bg_colour=0xffffff, | |
64 | bg_alpha=0.1, | |
65 | fg_colour=0x4EC6DE, | |
66 | fg_alpha=0.6, | |
67 | x=100, y=150, | |
68 | radius=62, | |
69 | thickness=5, | |
70 | start_angle=0, | |
71 | end_angle=360 | |
72 | }, | |
73 | { | |
74 | name='time', | |
75 | arg='%d', | |
76 | max=31, | |
77 | bg_colour=0xffffff, | |
78 | bg_alpha=0.1, | |
79 | fg_colour=0x4EC6DE, | |
80 | fg_alpha=0.8, | |
81 | x=100, y=150, | |
82 | radius=70, | |
83 | thickness=5, | |
84 | start_angle=-90, | |
85 | end_angle=90 | |
86 | }, | |
87 | { | |
88 | name='time', | |
89 | arg='%m', | |
90 | max=12, | |
91 | bg_colour=0xffffff, | |
92 | bg_alpha=0.1, | |
93 | fg_colour=0x4EC6DE, | |
94 | fg_alpha=1, | |
95 | x=100, y=150, | |
96 | radius=76, | |
97 | thickness=5, | |
98 | start_angle=-90, | |
99 | end_angle=90 | |
100 | }, | |
101 | { | |
102 | name='cpu', | |
103 | arg='cpu1', | |
104 | max=100, | |
105 | bg_colour=0xffffff, | |
106 | bg_alpha=0.2, | |
107 | fg_colour=0x4EC6DE, | |
108 | fg_alpha=0.8, | |
109 | x=120, y=270, | |
110 | radius=30, | |
111 | thickness=5, | |
112 | start_angle=-80, | |
113 | end_angle=160 | |
114 | }, | |
115 | { | |
116 | name='cpu', | |
117 | arg='cpu0', | |
118 | max=100, | |
119 | bg_colour=0xffffff, | |
120 | bg_alpha=0.2, | |
121 | fg_colour=0x4EC6DE, | |
122 | fg_alpha=0.8, | |
123 | x=120, y=270, | |
124 | radius=45, | |
125 | thickness=5, | |
126 | start_angle=-100, | |
127 | end_angle=200 | |
128 | }, | |
129 | { | |
130 | name='memperc', | |
131 | arg='', | |
132 | max=100, | |
133 | bg_colour=0xffffff, | |
134 | bg_alpha=0.2, | |
135 | fg_colour=0x4EC6DE, | |
136 | fg_alpha=0.8, | |
137 | x=40, y=330, | |
138 | radius=35, | |
139 | thickness=5, | |
140 | start_angle=-120, | |
141 | end_angle=180 | |
142 | }, | |
143 | { | |
144 | name='acpitemp', | |
145 | arg='', | |
146 | max=212, | |
147 | bg_colour=0xffffff, | |
148 | bg_alpha=0.2, | |
149 | fg_colour=0x4EC6DE, | |
150 | fg_alpha=0.8, | |
151 | x=100, y=390, | |
152 | radius=30, | |
153 | thickness=5, | |
154 | start_angle=-100, | |
155 | end_angle=180 | |
156 | }, | |
157 | { | |
158 | name='fs_used_perc', | |
159 | arg='/', | |
160 | max=100, | |
161 | bg_colour=0xffffff, | |
162 | bg_alpha=0.2, | |
163 | fg_colour=0x4EC6DE, | |
164 | fg_alpha=0.8, | |
165 | x=30, y=455, | |
166 | radius=25, | |
167 | thickness=5, | |
168 | start_angle=-90, | |
169 | end_angle=180 | |
170 | }, | |
171 | { | |
172 | name='fs_used_perc', | |
173 | arg='/home', | |
174 | max=100, | |
175 | bg_colour=0xffffff, | |
176 | bg_alpha=0.2, | |
177 | fg_colour=0x4EC6DE, | |
178 | fg_alpha=0.8, | |
179 | x=90, y=455, | |
180 | radius=25, | |
181 | thickness=5, | |
182 | start_angle=-90, | |
183 | end_angle=180 | |
184 | }, | |
185 | { | |
186 | name='battery_percent', | |
187 | arg='C23B', | |
188 | max=100, | |
189 | bg_colour=0xffffff, | |
190 | bg_alpha=0.2, | |
191 | fg_colour=0x4EC6DE, | |
192 | fg_alpha=0.8, | |
193 | x=150, y=455, | |
194 | radius=25, | |
195 | thickness=5, | |
196 | start_angle=-90, | |
197 | end_angle=180 | |
198 | }, | |
199 | { | |
200 | name='downspeedf', | |
201 | arg='eth0', | |
202 | max=100, | |
203 | bg_colour=0xffffff, | |
204 | bg_alpha=0.2, | |
205 | fg_colour=0x4EC6DE, | |
206 | fg_alpha=0.8, | |
207 | x=130, y=510, | |
208 | radius=25, | |
209 | thickness=4, | |
210 | start_angle=-90, | |
211 | end_angle=180 | |
212 | }, | |
213 | { | |
214 | name='upspeedf', | |
215 | arg='eth0', | |
216 | max=100, | |
217 | bg_colour=0xffffff, | |
218 | bg_alpha=0.2, | |
219 | fg_colour=0x4EC6DE, | |
220 | fg_alpha=0.8, | |
221 | x=130, y=510, | |
222 | radius=20, | |
223 | thickness=4, | |
224 | start_angle=-90, | |
225 | end_angle=180 | |
226 | }, | |
227 | { | |
228 | name='downspeedf', | |
229 | arg='wlp16s0', | |
230 | max=100, | |
231 | bg_colour=0xffffff, | |
232 | bg_alpha=0.2, | |
233 | fg_colour=0x4EC6DE, | |
234 | fg_alpha=0.8, | |
235 | x=50, y=510, | |
236 | radius=25, | |
237 | thickness=4, | |
238 | start_angle=-90, | |
239 | end_angle=180 | |
240 | }, | |
241 | { | |
242 | name='upspeedf', | |
243 | arg='wlp16s0', | |
244 | max=100, | |
245 | bg_colour=0xffffff, | |
246 | bg_alpha=0.2, | |
247 | fg_colour=0x4EC6DE, | |
248 | fg_alpha=0.8, | |
249 | x=50, y=510, | |
250 | radius=20, | |
251 | thickness=4, | |
252 | start_angle=-90, | |
253 | end_angle=180 | |
254 | }, | |
255 | { | |
256 | name='wireless_link_qual', | |
257 | arg='wlp16s0', | |
258 | max=100, | |
259 | bg_colour=0xffffff, | |
260 | bg_alpha=0.2, | |
261 | fg_colour=0x4EC6DE, | |
262 | fg_alpha=0.8, | |
263 | x=90, y=560, | |
264 | radius=25, | |
265 | thickness=4, | |
266 | start_angle=-90, | |
267 | end_angle=180 | |
268 | }, | |
269 | { | |
270 | name='wireless_link_qual', | |
271 | arg='wlp16s0', | |
272 | max=100, | |
273 | bg_colour=0xffffff, | |
274 | bg_alpha=0.2, | |
275 | fg_colour=0x4EC6DE, | |
276 | fg_alpha=0.8, | |
277 | x=90, y=560, | |
278 | radius=20, | |
279 | thickness=4, | |
280 | start_angle=-90, | |
281 | end_angle=180 | |
282 | }, | |
283 | } | |
284 | ||
285 | -- Use these settings to define the origin and extent of your clock. | |
286 | ||
287 | clock_r=65 | |
288 | ||
289 | -- "clock_x" and "clock_y" are the coordinates of the centre of the clock, in pixels, from the top left of the Conky window. | |
290 | ||
291 | clock_x=100 | |
292 | clock_y=150 | |
293 | ||
294 | show_seconds=true | |
295 | ||
296 | require 'cairo' | |
297 | ||
298 | function rgb_to_r_g_b(colour,alpha) | |
299 | return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha | |
300 | end | |
301 | ||
302 | function draw_ring(cr,t,pt) | |
303 | local w,h=conky_window.width,conky_window.height | |
304 | ||
305 | local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle'] | |
306 | local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha'] | |
307 | ||
308 | local angle_0=sa*(2*math.pi/360)-math.pi/2 | |
309 | local angle_f=ea*(2*math.pi/360)-math.pi/2 | |
310 | local t_arc=t*(angle_f-angle_0) | |
311 | ||
312 | -- Draw background ring | |
313 | ||
314 | cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f) | |
315 | cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga)) | |
316 | cairo_set_line_width(cr,ring_w) | |
317 | cairo_stroke(cr) | |
318 | ||
319 | -- Draw indicator ring | |
320 | ||
321 | cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc) | |
322 | cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga)) | |
323 | cairo_stroke(cr) | |
324 | end | |
325 | ||
326 | function draw_clock_hands(cr,xc,yc) | |
327 | local secs,mins,hours,secs_arc,mins_arc,hours_arc | |
328 | local xh,yh,xm,ym,xs,ys | |
329 | ||
330 | secs=os.date("%S") | |
331 | mins=os.date("%M") | |
332 | hours=os.date("%I") | |
333 | ||
334 | secs_arc=(2*math.pi/60)*secs | |
335 | mins_arc=(2*math.pi/60)*mins+secs_arc/60 | |
336 | hours_arc=(2*math.pi/12)*hours+mins_arc/12 | |
337 | ||
338 | -- Draw hour hand | |
339 | ||
340 | xh=xc+0.7*clock_r*math.sin(hours_arc) | |
341 | yh=yc-0.7*clock_r*math.cos(hours_arc) | |
342 | cairo_move_to(cr,xc,yc) | |
343 | cairo_line_to(cr,xh,yh) | |
344 | ||
345 | cairo_set_line_cap(cr,CAIRO_LINE_CAP_ROUND) | |
346 | cairo_set_line_width(cr,5) | |
347 | cairo_set_source_rgba(cr,1.0,1.0,1.0,1.0) | |
348 | cairo_stroke(cr) | |
349 | ||
350 | -- Draw minute hand | |
351 | ||
352 | xm=xc+clock_r*math.sin(mins_arc) | |
353 | ym=yc-clock_r*math.cos(mins_arc) | |
354 | cairo_move_to(cr,xc,yc) | |
355 | cairo_line_to(cr,xm,ym) | |
356 | ||
357 | cairo_set_line_width(cr,3) | |
358 | cairo_stroke(cr) | |
359 | ||
360 | -- Draw seconds hand | |
361 | ||
362 | if show_seconds then | |
363 | xs=xc+clock_r*math.sin(secs_arc) | |
364 | ys=yc-clock_r*math.cos(secs_arc) | |
365 | cairo_move_to(cr,xc,yc) | |
366 | cairo_line_to(cr,xs,ys) | |
367 | ||
368 | cairo_set_line_width(cr,1) | |
369 | cairo_stroke(cr) | |
370 | end | |
371 | end | |
372 | ||
373 | function conky_clock_rings() | |
374 | local function setup_rings(cr,pt) | |
375 | local str='' | |
376 | local value=0 | |
377 | ||
378 | str=string.format('${%s %s}',pt['name'],pt['arg']) | |
379 | str=conky_parse(str) | |
380 | ||
381 | value=tonumber(str) | |
382 | pct=value/pt['max'] | |
383 | ||
384 | draw_ring(cr,pct,pt) | |
385 | end | |
386 | ||
387 | -- Check that Conky has been running for at least 5s | |
388 | ||
389 | if conky_window==nil then return end | |
390 | local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height) | |
391 | ||
392 | local cr=cairo_create(cs) | |
393 | ||
394 | local updates=conky_parse('${updates}') | |
395 | update_num=tonumber(updates) | |
396 | ||
397 | if update_num>5 then | |
398 | for i in pairs(settings_table) do | |
399 | setup_rings(cr,settings_table[i]) | |
400 | end | |
401 | end | |
402 | ||
403 | draw_clock_hands(cr,clock_x,clock_y) | |
404 | end |