My new conky clock
Recently i’ve found out that conky can be displayed as rings, and other forms using an lua script.

My new conky clock
Well here you have my clock drawn with conky. It also show the wireless and battery status, cpu and mem load, and disk space used.
Is really beautifull, dont you think??
It uses the last version of conky (1.7.2). Down here you’ll find the conkyrc and the lua script. I left the comments on the code, so you can customize it.
Thanks to londonali1010 for the script and the comments
Clock-Rings.lua
--[[
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.
To call this script in Conky, use the following (assuming that you save this script to ~/scripts/rings.lua):
lua_load ~/scripts/clock_rings.lua
lua_draw_hook_pre clock_rings
Changelog:
+ v1.0 -- Original release (30.09.2009)
]]
settings_table = {
{
name='cpu',
arg='cpu0',
max=100,
bg_colour=0x353535,
bg_alpha=0,
fg_colour=0x353535,
fg_alpha=0.8,
x=195, y=195,
radius=137.5,
thickness=15,
start_angle=0,
end_angle=360
},
{
name='memperc',
arg='',
max=100,
bg_colour=0xd8d8d8,
bg_alpha=0.1,
fg_colour=0xd8d8d8,
fg_alpha=0.5,
x=195, y=195,
radius=157,
thickness=13,
start_angle=0,
end_angle=360
},
{
name='fs_used_perc',
arg='/',
max=100,
bg_colour=0x353535,
bg_alpha=0,
fg_colour=0x353535,
fg_alpha=0.5,
x=195, y=195,
radius=100,
thickness=20,
start_angle=0,
end_angle=360
},
{
name='battery_percent',
arg='BAT0',
max=100,
bg_colour=0x353535,
bg_alpha=0.4,
fg_colour=0xd8d8d8,
fg_alpha=1,
x=195, y=195,
radius=120,
thickness=10,
start_angle=0,
end_angle=360
},
{
name='wireless_link_qual_perc',
arg='wlan0',
max=100,
bg_colour=0x353535,
bg_alpha=0.1,
fg_colour=0x353535,
fg_alpha=0.9,
x=195, y=195,
radius=80,
thickness=12.5,
start_angle=0,
end_angle=360
},
{
name='time',
arg='%I',
max=12,
bg_colour=0x868686,
bg_alpha=0.1,
fg_colour=0x868686,
fg_alpha=0.9,
x=195, y=195,
radius=28,
thickness=3.5,
start_angle=0,
end_angle=360
},
{
name='time',
arg='%M',
max=60,
bg_colour=0x868686,
bg_alpha=0.1,
fg_colour=0x868686,
fg_alpha=0.95,
x=195, y=195,
radius=33,
thickness=3.5,
start_angle=0,
end_angle=360
},
{
name='time',
arg='%S',
max=60,
bg_colour=0x868686,
bg_alpha=0.1,
fg_colour=0x868686,
fg_alpha=1.0,
x=195, y=195,
radius=13.5,
thickness=23,
start_angle=0,
end_angle=360
},
}
-- Use these settings to define the origin and extent of your clock.
clock_r=125
-- "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=195
clock_y=195
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)
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 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.7*clock_r*math.sin(hours_arc)
yh=yc-0.7*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,1,1,1,0.8)
cairo_stroke(cr)
-- Draw minute hand
xm=xc+clock_r*math.sin(mins_arc)
ym=yc-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_stroke(cr)
-- Draw seconds hand
if show_seconds then
xs=xc+clock_r*math.sin(secs_arc)
ys=yc-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_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)
value=tonumber(str)
pct=value/pt['max']
draw_ring(cr,pct,pt)
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
conkyrc
alignment top_left
background no
border_inner_margin 0
border_outer_margin 0
cpu_avg_samples 2
default_color 94959C
default_outline_color 94959C
default_shade_color 94959C
double_buffer yes
draw_borders no
draw_graph_borders no
draw_outline no
draw_shades no
gap_x 0
gap_y 0
maximum_width 500
max_port_monitor_connections 64
max_specials 512
max_user_text 16384
minimum_size 400 400
net_avg_samples 2
no_buffers yes
out_to_console no
own_window_colour black
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_transparent yes
own_window_type normal
own_window yes
update_interval 0.4
uppercase no
use_spacer none
use_xft yes
xftalpha 0.8
xftfont Purisa:size=7
# -- Lua load -- #
lua_load ~/clock.lua
lua_draw_hook_pre clock_rings
TEXT

[...] La verdad, estoy muy contenta con mi nuevo conky
http://archlinux.me/aymara/2009/10/10/my-new-conky-clock/ [...]