Code:
--[[
Clock Rings by londonali1010 (2009)
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.
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.
Clock Rings Mod by Proxess (2009)
This modification permits you to add warning colours on both countdown values (batteries, wlan, etc) and status percentages (cpu, file system usage, etc).
+ v0.3 -- Fixed some seriously stupid errors from my part. Added some awesomeness by making the most precise conky clock! Also added individual clock hand alpha. Removed some redundant code.
+ v0.2 -- Intermediate, testing.
+ v0.1 -- Added Background colouring and alphaing.
Clock Rings Mod Mod by Crinos512 (2009)
+ v0.1 -- This modification adds alpha to the warning colours.
]]
settings_table = {
{
name='time', arg='%I',
max=43200,
x=1248, y=36,
radius=14, thickness=1,
start_angle=0, end_angle=360,
bg_colour=0x7C807C, bg_alpha=0.8,
fg_colour=0x7C807C, fg_alpha=0.8,
colour_coding=false, coding_direction=false,
warning=0, warning_colour=0xE38513, warning_alpha=0.5,
danger=0, danger_colour=0x840000, danger_alpha=0.8
},
{
name='time', arg='%M.%S',
max=3600,
x=1248, y=36,
radius=18, thickness=1,
start_angle=0, end_angle=360,
bg_colour=0x7C807C, bg_alpha=0.8,
fg_colour=0x7C807C, fg_alpha=0.8,
colour_coding=false, coding_direction=false,
warning=0, danger=0,
warning_bgc=0xE38513, warning_bga=0.2,
warning_colour=0xE38513, warning_alpha=0.5,
danger_bgc=0x840000, danger_bga=0.2,
danger_colour=0x840000, danger_alpha=0.8
},
{
name='time', arg='%S',
max=60,
x=1248, y=36,
radius=22, thickness=1,
start_angle=0, end_angle=360,
bg_colour=0x7C807C, bg_alpha=0.8,
fg_colour=0x7C807C, fg_alpha=0.8,
colour_coding=false, coding_direction=false,
warning=0, danger=0,
warning_bgc=0xE38513, warning_bga=0.2,
warning_colour=0xE38513, warning_alpha=0.5,
danger_bgc=0x840000, danger_bga=0.2,
danger_colour=0x840000, danger_alpha=0.8
},
{
name='cpu', arg='cpu1',
max=100,
x=1180, y=0,
radius=36, thickness=10,
start_angle=90, end_angle=180,
bg_colour=0x7C807C, bg_alpha=0.2,
fg_colour=0x7C807C, fg_alpha=0.8,
colour_coding=true, coding_direction=true,
warning=70, danger=90,
warning_bgc=0xE38513, warning_bga=0.2,
warning_colour=0xE38513, warning_alpha=0.5,
danger_bgc=0x840000, danger_bga=0.2,
danger_colour=0x840000, danger_alpha=0.8
},
{
name='cpu', arg='cpu2',
max=100,
x=1180, y=72,
radius=36, thickness=10,
start_angle=0, end_angle=90,
bg_colour=0x7C807C, bg_alpha=0.2,
fg_colour=0x7C807C, fg_alpha=0.8,
colour_coding=true, coding_direction=true,
warning=70, danger=90,
warning_bgc=0xE38513, warning_bga=0.2,
warning_colour=0xE38513, warning_alpha=0.5,
danger_bgc=0x840000, danger_bga=0.2,
danger_colour=0x840000, danger_alpha=0.8
},
{
name='battery_percent', arg='BAT0',
max=100,
x=1120, y=0,
radius=36, thickness=10,
start_angle=90, end_angle=180,
bg_colour=0x7C807C, bg_alpha=0.2,
fg_colour=0x7C807C, fg_alpha=0.8,
colour_coding=true, coding_direction=false,
warning=30, danger=10,
warning_bgc=0xE38513, warning_bga=0.2,
warning_colour=0xE38513, warning_alpha=0.5,
danger_bgc=0x840000, danger_bga=0.2,
danger_colour=0x840000, danger_alpha=0.8
},
{
name='wireless_link_qual_perc', arg='wlan0',
max=100,
x=1120, y=72,
radius=36, thickness=10,
start_angle=0, end_angle=90,
bg_colour=0x7C807C, bg_alpha=0.2,
fg_colour=0x7C807C, fg_alpha=0.8,
colour_coding=true, coding_direction=false,
warning=30, danger=10,
warning_bgc=0xE38513, warning_bga=0.2,
warning_colour=0xE38513, warning_alpha=0.5,
danger_bgc=0x840000, danger_bga=0.2,
danger_colour=0x840000, danger_alpha=0.8
},
{
name='memperc', arg='',
max=100,
x=1060, y=0,
radius=36, thickness=10,
start_angle=90, end_angle=180,
bg_colour=0x7C807C, bg_alpha=0.2,
fg_colour=0x7C807C, fg_alpha=0.8,
colour_coding=true, coding_direction=true,
warning=70, danger=90,
warning_bgc=0xE38513, warning_bga=0.2,
warning_colour=0xE38513, warning_alpha=0.5,
danger_bgc=0x840000, danger_bga=0.2,
danger_colour=0x840000, danger_alpha=0.8
},
{
name='swapperc', arg='',
max=100,
x=1060, y=72,
radius=36, thickness=10,
start_angle=0, end_angle=90,
bg_colour=0x7C807C, bg_alpha=0.2,
fg_colour=0x7C807C, fg_alpha=0.8,
colour_coding=true, coding_direction=true,
warning=70, danger=90,
warning_bgc=0xE38513, warning_bga=0.2,
warning_colour=0xE38513, warning_alpha=0.5,
danger_bgc=0x840000, danger_bga=0.2,
danger_colour=0x840000, danger_alpha=0.8
},
{
name='fs_free_perc', arg='/',
max=100,
x=236, y=0,
radius=36, thickness=10,
start_angle=180, end_angle=270,
bg_colour=0x7C807C, bg_alpha=0.2,
fg_colour=0x7C807C, fg_alpha=0.8,
colour_coding=true, coding_direction=false,
warning=30, danger=10,
warning_bgc=0xE38513, warning_bga=0.2,
warning_colour=0xE38513, warning_alpha=0.5,
danger_bgc=0x840000, danger_bga=0.2,
danger_colour=0x840000, danger_alpha=0.8
},
{
name='fs_free_perc', arg='/media/G',
max=100,
x=236, y=72,
radius=36, thickness=10,
start_angle=270, end_angle=360,
bg_colour=0x7C807C, bg_alpha=0.2,
fg_colour=0x7C807C, fg_alpha=0.8,
colour_coding=true, coding_direction=false,
warning=30, danger=10,
warning_bgc=0xE38513, warning_bga=0.2,
warning_colour=0xE38513, warning_alpha=0.5,
danger_bgc=0x840000, danger_bga=0.2,
danger_colour=0x840000, danger_alpha=0.8
}
}
-- Use these settings to define the origin and extent of your clock.
clock_r=24
-- "clock_x" and "clock_y" are the coordinates of the centre of the clock, in pixels, from the top left of the Conky window.
clock_x=1248
clock_y=36
-- Colour & alpha of the clock hands
hour_colour=0x7C807C
hour_alpha=0.5
minute_colour=0x7C807C
minute_alpha=0.5
second_colour=0x7C807C
second_alpha=0.3
-- Do you want to show the seconds hand?
show_seconds=true
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,value)
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)
local cc, cd=pt['colour_coding'], pt['coding_direction']
local wn, dn=pt['warning'], pt['danger']
local wbgc, wbga, wc, wa=pt['warning_bgc'], pt['warning_bga'], pt['warning_colour'], pt['warning_alpha']
local dbgc, dbga, dc, da=pt['danger_bgc'], pt['danger_bga'], pt['danger_colour'], pt['danger_alpha']
-- Draw background ring
cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
cairo_set_line_width(cr,ring_w)
if cc == false then
cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
else
if cd == true then
if value < wn then
cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
elseif value >= dn then
cairo_set_source_rgba(cr,rgb_to_r_g_b(dbgc,dbga))
else
cairo_set_source_rgba(cr,rgb_to_r_g_b(wbgc,wbga))
end
else
if value > wn then
cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
elseif value <= dn then
cairo_set_source_rgba(cr,rgb_to_r_g_b(dbgc,dbga))
else
cairo_set_source_rgba(cr,rgb_to_r_g_b(wbgc,wbga))
end
end
end
cairo_stroke(cr)
-- Draw indicator ring
cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc)
if cc == false then
cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
else
if cd == true then
if value < wn then
cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
elseif value >= dn then
cairo_set_source_rgba(cr,rgb_to_r_g_b(dc,da))
else
cairo_set_source_rgba(cr,rgb_to_r_g_b(wc,wa))
end
else
if value > wn then
cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
elseif value <= dn then
cairo_set_source_rgba(cr,rgb_to_r_g_b(dc,da))
else
cairo_set_source_rgba(cr,rgb_to_r_g_b(wc,wa))
end
end
end
cairo_stroke(cr)
end
function draw_clock_hands(cr,xc,yc)
local secs,mins,hours,secs_arc,mins_arc,hours_arc
local xh,yh,xm,ym,xs,ys
secs=os.date("%S")
mins=os.date("%M")
hours=os.date("%I")
secs_arc=(2*math.pi/60)*secs
mins_arc=(2*math.pi/60)*mins+secs_arc/60
hours_arc=(2*math.pi/12)*hours+mins_arc/12
-- Draw hour hand
xh=xc+0.5*clock_r*math.sin(hours_arc)
yh=yc-0.5*clock_r*math.cos(hours_arc)
cairo_move_to(cr,xc,yc)
cairo_line_to(cr,xh,yh)
cairo_set_line_cap(cr,CAIRO_LINE_CAP_ROUND)
cairo_set_line_width(cr,5)
cairo_set_source_rgba(cr,rgb_to_r_g_b(hour_colour,hour_alpha))
cairo_stroke(cr)
-- Draw minute hand
xm=xc+0.7*clock_r*math.sin(mins_arc)
ym=yc-0.7*clock_r*math.cos(mins_arc)
cairo_move_to(cr,xc,yc)
cairo_line_to(cr,xm,ym)
cairo_set_line_width(cr,3)
cairo_set_source_rgba(cr,rgb_to_r_g_b(minute_colour,minute_alpha))
cairo_stroke(cr)
-- Draw seconds hand
if show_seconds then
xs=xc+0.9*clock_r*math.sin(secs_arc)
ys=yc-0.9*clock_r*math.cos(secs_arc)
cairo_move_to(cr,xc,yc)
cairo_line_to(cr,xs,ys)
cairo_set_line_width(cr,1)
cairo_set_source_rgba(cr,rgb_to_r_g_b(second_colour,second_alpha))
cairo_stroke(cr)
end
end
function conky_clock_rings()
local function setup_rings(cr,pt)
local str=''
local value=0
str=string.format('${%s %s}',pt['name'],pt['arg'])
str=conky_parse(str)
if pt['name'] == 'time' and pt['arg'] == '%I' then
local his=tonumber(str)*60*60
local mis=tonumber(conky_parse('${time %M.%S}'))*60
local secs=tonumber(conky_parse('${time %S}'))
value=his+mis+secs
elseif pt['name'] == 'time' and pt['arg'] == '%M.%S' then
local mis=tonumber(str)*60
local secs=tonumber(conky_parse('${time %S}'))
value=mis+secs
else
value=tonumber(str)
end
pct=value/pt['max']
draw_ring(cr,pct,pt,value)
end
-- Check that Conky has been running for at least 5s
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
setup_rings(cr,settings_table[i])
end
end
draw_clock_hands(cr,clock_x,clock_y)
end
--[[
Background by londonali1010 (2009)
This script draws a background to the Conky window. It covers the whole of the Conky window, but you can specify rounded corners, if you wish.
Changelog:
+ v1.0 -- Original release.
Corner Mod by Proxess (2009)
+ v0.1 -- Added seperate corners radius.
]]
-- Set Corner's Radius.
corner_r_tr=35
corner_r_br=0
corner_r_tl=35
corner_r_bl=0
-- Set colour and transparency.
bg_colour=0x000000
bg_alpha=0.6
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_tr,0)
cairo_line_to(cr,w-corner_r_tr,0)
cairo_curve_to(cr,w,0,w,0,w,corner_r_tl)
cairo_line_to(cr,w,h-corner_r_br)
cairo_curve_to(cr,w,h,w,h,w-corner_r_br,h)
cairo_line_to(cr,corner_r_bl,h)
cairo_curve_to(cr,0,h,0,h,0,h-corner_r_bl)
cairo_line_to(cr,0,corner_r_tl)
cairo_curve_to(cr,0,0,0,0,corner_r_tl,0)
cairo_close_path(cr)
cairo_set_source_rgba(cr,rgb_to_r_g_b(bg_colour,bg_alpha))
cairo_fill(cr)
end
-- DRAW IT ALL
function conky_all()
conky_draw_bg()
conky_clock_rings()
end
Bookmarks