while looking quite similar to the flower conky I posted a little while ago, I have made some significant changes.
Previously the flower color change "effect" was created by placing a circle that changed size in response to a numerical input from say, cpu usage, behind a flower "cutout".
That's why it was on a black background, and would only work on a flat monotone background. Otherwise you would have this:

it was all an illusion!
...but i still really like this version
but with the updated version I have used the data output to transform some much more complicated shapes so that the "cutout" is no longer needed.
each flower has 4 components, background "petals" bg, indicator "petals" in, middle circle, md and a single back flower shape bk. I included bk so that on busy wallpapers you could set bka (alpha) high to allow the bg petal overlap, if thats what you wanted, without the wallpaper showing through.
here is the code:
--[[flowers version2 by mrpeachy (2010)]]
require 'cairo'
function string:split(delimiter)
local result = { }
local from = 1
local delim_from, delim_to = string.find( self, delimiter, from )
while delim_from do
table.insert( result, string.sub( self, from , delim_from-1 ) )
from = delim_to + 1
delim_from, delim_to = string.find( self, delimiter, from )
end
table.insert( result, string.sub( self, from ) )
return result
end
function circlewriting(cr, text, font, fsize, radi, horiz, verti, tred, tgreen, tblue, talpha, start, finish, var1)
local inum=string.len(text)
range=finish
deg=(finish-start)/(inum-1)
degrads=1*(math.pi/180)
local textcut=string.gsub(text, ".", "%1@@@")
texttable=string.split(textcut, "@@@")
for i = 1,inum do
ival=i
interval=(degrads*(start+(deg*(i-1))))+var1
interval2=degrads*(start+(deg*(i-1)))
txs=0+radi*(math.sin(interval))
tys=0-radi*(math.cos(interval))
cairo_select_font_face (cr, font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size (cr, fsize);
cairo_set_source_rgba (cr, tred, tgreen, tblue, talpha);
cairo_move_to (cr, txs+horiz, tys+verti);
cairo_rotate (cr, interval2)
cairo_show_text (cr, (texttable[i]))
cairo_rotate (cr, -interval2)
end
end
function circlewritingdown(cr, text, font, fsize, radi, horiz, verti, tred, tgreen, tblue, talpha, start, finish, var1)
local inum=string.len(text)
deg=(start-finish)/(inum-1)
degrads=1*(math.pi/180)
local textcut=string.gsub(text, ".", "%1@@@")
texttable=string.split(textcut, "@@@")
for i = 1,inum do
ival=i
interval=(degrads*(start-(deg*(i-1))))+var1
interval2=degrads*(start-(deg*(i-1)))
txs=0+radi*(math.sin(interval))
tys=0-radi*(math.cos(interval))
cairo_select_font_face (cr, font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size (cr, fsize);
cairo_set_source_rgba (cr, tred, tgreen, tblue, talpha);
cairo_move_to (cr, txs+horiz, tys+verti);
cairo_rotate (cr, interval2+(180*math.pi/180))
cairo_show_text (cr, (texttable[i]))
cairo_rotate (cr, -interval2-(180*math.pi/180))
end
end
function flower(cr, co, hori, vert, scale, rot, bgr, bgg, bgb, bga, inr, ing, inb, ina, mdr, mdg, mdb, mda, bkr, bkg, bkb, bka, bumps, petals)
inner=167
outer1=260
outer2=251
outer3=265
varth1=0.53
varth2=0.42
cairo_move_to (cr, 0, 0)
cairo_translate (cr, hori, vert)
cairo_scale (cr, scale, scale)
cairo_rotate (cr, (rot*(math.pi/180)))
--flower background
--inner arc from
cairo_set_source_rgba (cr, bkr, bkg, bkb, bka);
text_arc=((2*math.pi/12)*(3))
txs1=0+inner*(math.sin(text_arc))
tys1=0-inner*(math.cos(text_arc))
--outer arc through
text_arc=((2*math.pi/12)*(3+varth1))
txs2=0+outer1*(math.sin(text_arc))
tys2=0-outer1*(math.cos(text_arc))
--outer arc to
text_arc=((2*math.pi/12)*(4))
txs3=0+outer2*(math.sin(text_arc))
tys3=0-outer2*(math.cos(text_arc))
cairo_move_to (cr, txs1, tys1)
cairo_curve_to (cr, txs1, tys1, txs2, tys2, txs3, tys3)
--outer arc through
text_arc=((2*math.pi/12)*(4+varth2))
txs4=0+outer3*(math.sin(text_arc))
tys4=0-outer3*(math.cos(text_arc))
--outer arc to
text_arc=((2*math.pi/12)*(5))
txs5=0+inner*(math.sin(text_arc))
tys5=0-inner*(math.cos(text_arc))
cairo_curve_to (cr, txs3, tys3, txs4, tys4, txs5, tys5)
--outer arc through
text_arc=((2*math.pi/12)*(5+varth1))
txs6=0+outer1*(math.sin(text_arc))
tys6=0-outer1*(math.cos(text_arc))
--outer arc to
text_arc=((2*math.pi/12)*(6))
txs7=0+outer2*(math.sin(text_arc))
tys7=0-outer2*(math.cos(text_arc))
cairo_curve_to (cr, txs5, tys5, txs6, tys6, txs7, tys7)
--outer arc through
text_arc=((2*math.pi/12)*(6+varth2))
txs8=0+outer3*(math.sin(text_arc))
tys8=0-outer3*(math.cos(text_arc))
--outer arc to
text_arc=((2*math.pi/12)*(7))
txs9=0+inner*(math.sin(text_arc))
tys9=0-inner*(math.cos(text_arc))
cairo_curve_to (cr, txs7, tys7, txs8, tys8, txs9, tys9)
--outer arc through
text_arc=((2*math.pi/12)*(7+varth1))
txs10=0+outer1*(math.sin(text_arc))
tys10=0-outer1*(math.cos(text_arc))
--outer arc to
text_arc=((2*math.pi/12)*(8))
txs11=0+outer2*(math.sin(text_arc))
tys11=0-outer2*(math.cos(text_arc))
cairo_curve_to (cr, txs9, tys9, txs10, tys10, txs11, tys11)
--outer arc through
text_arc=((2*math.pi/12)*(8+varth2))
txs12=0+outer3*(math.sin(text_arc))
tys12=0-outer3*(math.cos(text_arc))
--outer arc to
text_arc=((2*math.pi/12)*(9))
txs13=0+inner*(math.sin(text_arc))
tys13=0-inner*(math.cos(text_arc))
cairo_curve_to (cr, txs11, tys11, txs12, tys12, txs13, tys13)
--outer arc through
text_arc=((2*math.pi/12)*(9+varth1))
txs14=0+outer1*(math.sin(text_arc))
tys14=0-outer1*(math.cos(text_arc))
--outer arc to
text_arc=((2*math.pi/12)*(10))
txs15=0+outer2*(math.sin(text_arc))
tys15=0-outer2*(math.cos(text_arc))
cairo_curve_to (cr, txs13, tys13, txs14, tys14, txs15, tys15)
--outer arc through
text_arc=((2*math.pi/12)*(10+varth2))
txs16=0+outer3*(math.sin(text_arc))
tys16=0-outer3*(math.cos(text_arc))
--outer arc to
text_arc=((2*math.pi/12)*(11))
txs17=0+inner*(math.sin(text_arc))
tys17=0-inner*(math.cos(text_arc))
cairo_curve_to (cr, txs15, tys15, txs16, tys16, txs17, tys17)
--outer arc through
text_arc=((2*math.pi/12)*(11+varth1))
txs18=0+outer1*(math.sin(text_arc))
tys18=0-outer1*(math.cos(text_arc))
--outer arc to
text_arc=((2*math.pi/12)*(12))
txs19=0+outer2*(math.sin(text_arc))
tys19=0-outer2*(math.cos(text_arc))
cairo_curve_to (cr, txs17, tys17, txs18, tys18, txs19, tys19)
--outer arc through
text_arc=((2*math.pi/12)*(12+varth2))
txs20=0+outer3*(math.sin(text_arc))
tys20=0-outer3*(math.cos(text_arc))
--outer arc to
text_arc=((2*math.pi/12)*(13))
txs21=0+inner*(math.sin(text_arc))
tys21=0-inner*(math.cos(text_arc))
cairo_curve_to (cr, txs19, tys19, txs20, tys20, txs21, tys21)
--outer arc through
text_arc=((2*math.pi/12)*(13+varth1))
txs22=0+outer1*(math.sin(text_arc))
tys22=0-outer1*(math.cos(text_arc))
--outer arc to
text_arc=((2*math.pi/12)*(14))
txs23=0+outer2*(math.sin(text_arc))
tys23=0-outer2*(math.cos(text_arc))
cairo_curve_to (cr, txs21, tys21, txs22, tys22, txs23, tys23)
--outer arc through
text_arc=((2*math.pi/12)*(14+varth2))
txs24=0+outer3*(math.sin(text_arc))
tys24=0-outer3*(math.cos(text_arc))
--outer arc to
text_arc=((2*math.pi/12)*(15))
txs25=0+inner*(math.sin(text_arc))
tys25=0-inner*(math.cos(text_arc))
cairo_curve_to (cr, txs23, tys23, txs24, tys24, txs25, tys25)
cairo_close_path (cr)
cairo_fill (cr)
--petal background
cpu=150
petals=petals
for i = 1,petals do
cairo_set_source_rgba (cr, bgr, bgg, bgb, bga)
rotate=(i-1)*(360/petals)
cairo_rotate (cr, (rotate*(math.pi/180)))
cairo_curve_to (cr, -100, 0, -100, -1*(100+cpu), 0, -1*(100+cpu))
cairo_line_to (cr, 0, -100)
cairo_arc_negative (cr, 0, 0, 100, (-90*(math.pi/180)), (180*(math.pi/180)))
cairo_close_path (cr)
cairo_fill (cr)
cairo_curve_to (cr, 100, 0, 100, -1*(100+cpu), 0, -1*(100+cpu))
cairo_line_to (cr, 0, -100)
cairo_arc (cr, 0, 0, 100, (270*(math.pi/180)), (0*(math.pi/180)))
cairo_close_path (cr)
cairo_fill (cr)
cairo_rotate (cr, (-rotate*(math.pi/180)))
end
--indicator flower
cpu=co*1.5
if cpu==0 then
ina=0
end
petals=petals
for i = 1,petals do
cairo_set_source_rgba (cr, inr, ing, inb, ina)
rotate=(i-1)*(360/petals)
cairo_rotate (cr, (rotate*(math.pi/180)))
cairo_curve_to (cr, -100, 0, -100, -1*(100+cpu), 0, -1*(100+cpu))
cairo_line_to (cr, 0, -100)
cairo_arc_negative (cr, 0, 0, 100, (-90*(math.pi/180)), (180*(math.pi/180)))
cairo_close_path (cr)
cairo_fill (cr)
cairo_curve_to (cr, 100, 0, 100, -1*(100+cpu), 0, -1*(100+cpu))
cairo_line_to (cr, 0, -100)
cairo_arc (cr, 0, 0, 100, (270*(math.pi/180)), (0*(math.pi/180)))
cairo_close_path (cr)
cairo_fill (cr)
cairo_rotate (cr, (-rotate*(math.pi/180)))
end
--draw center circle
circrad=100
circx=0
circy=0
cairo_move_to (cr, 100, 100);
cairo_arc(cr,circx,circy,circrad,0,2*math.pi)
cairo_close_path(cr)
cairo_set_source_rgba (cr, mdr, mdg, mdb, mda);
cairo_fill (cr);
if bumps==1 then
inner=100
outer1=120
outer2=115
outer3=120
varth1=0.5
varth2=0.5
number=2*petals
for i = 1,number do
cairo_set_source_rgba (cr, mdr, mdg, mdb, mda);
--inner arc from
text_arc=((2*math.pi/number)*(i+2))
txs1=0+inner*(math.sin(text_arc))
tys1=0-inner*(math.cos(text_arc))
--outer arc through bump1
text_arc=((2*math.pi/number)*((i+2)+varth1))
txs2=0+outer1*(math.sin(text_arc))
tys2=0-outer1*(math.cos(text_arc))
--outer arc to
text_arc=((2*math.pi/number)*(i+3))
txs3=0+outer2*(math.sin(text_arc))
tys3=0-outer2*(math.cos(text_arc))
cairo_move_to (cr, 0, 0)
cairo_line_to (cr, txs1, tys1)
cairo_curve_to (cr, txs1, tys1, txs2, tys2, txs3, tys3)
--outer arc through
text_arc=((2*math.pi/number)*((i+3)+varth2))
txs4=0+outer3*(math.sin(text_arc))
tys4=0-outer3*(math.cos(text_arc))
--outer arc to
text_arc=((2*math.pi/number)*(i+4))
txs5=0+inner*(math.sin(text_arc))
tys5=0-inner*(math.cos(text_arc))
cairo_curve_to (cr, txs3, tys3, txs4, tys4, txs5, tys5)
end
cairo_close_path (cr)
cairo_fill (cr)
end
cairo_rotate (cr, rot*-1*(math.pi/180))
cairo_scale (cr, 1/scale, 1/scale)
cairo_translate (cr, -hori, -vert)
end
function conky_draw_flower()
local updates=conky_parse('${updates}')
update_num=tonumber(updates)
if update_num > 5 then
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)
--FLOWER 1 SETUP----------------------------------------------------------------------------------------------------------------------------------
num=tonumber(conky_parse('${cpu}'))
xpos=150
ypos=110
bgr=234/255
bgg=86/255
bgb=162/255
bga=0.5
inr=197/255
ing=29/255
inb=106/255
ina=0.9
mdr=241/255
mdg=219/255
mdb=107/255
mda=1
bkr=1
bkg=1
bkb=1
bka=0
bumps=1
petals=8
flower(cr, num, xpos, ypos, 0.4, 50, bgr, bgg, bgb, bga, inr, ing, inb, ina, mdr, mdg, mdb, mda, bkr, bkg, bkb, bka, bumps, petals)
--circlewriting variable
--text must be in quotes
text=("CENTRAL PROCESSOR")
--font name must be in quotes
font="White Rabbit"
fontsize=12
radius=30
positionx=xpos
positiony=ypos
colorred=inr
colorgreen=ing
colorblue=inb
coloralpha=1
--to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
--eg if you want to go from 270 to 90, then you will input 270 to 450. Finish has to be greater than start.
start=270
finish=450
letterposition=-0.1
circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
--FLOWER 2 SETUP----------------------------------------------------------------------------------------------------------------------------------
num=tonumber(conky_parse('${memperc}'))
xpos=350
ypos=110
bgr=149/255
bgg=140/255
bgb=203/255
bga=0.5
inr=110/255
ing=107/255
inb=212/255
ina=0.9
mdr=245/255
mdg=227/255
mdb=101/255
mda=1
bkr=1
bkg=1
bkb=1
bka=0
bumps=1
petals=6
flower(cr, num, xpos, ypos, 0.4, 10, bgr, bgg, bgb, bga, inr, ing, inb, ina, mdr, mdg, mdb, mda, bkr, bkg, bkb, bka, bumps, petals)
--circlewriting variable
--text must be in quotes
text=("RANDOM ACCESS")
--font name must be in quotes
font="White Rabbit"
fontsize=12
radius=30
positionx=xpos
positiony=ypos
colorred=inr
colorgreen=ing
colorblue=inb
coloralpha=1
--to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
--eg if you want to go from 270 to 90, then you will input 270 to 450. Finish has to be greater than start.
start=270
finish=450
letterposition=-0.1
circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
--circlewriting variable
--text must be in quotes
text=(" MEMORY ")
--font name must be in quotes
font="White Rabbit"
fontsize=12
radius=37
positionx=xpos
positiony=ypos
colorred=inr
colorgreen=ing
colorblue=inb
coloralpha=1
--to set start and finish values for circlewritingdown, if the text will cross 0 degrees then you must calculate for 0-finish degrees
--eg if you want to go from 90 to 270, then you will input 90 to -90. Start has to be greater than finish
start=270
finish=90
letterposition=0
circlewritingdown(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
--FLOWER 3 SETUP-------------------------------------------------------------------------------------------------------------------------------------
num=tonumber(conky_parse('${fs_used_perc /}'))
xpos=550
ypos=110
bgr=241/255
bgg=169/255
bgb=58/255
bga=0.5
inr=224/255
ing=115/255
inb=12/255
ina=0.9
mdr=242/255
mdg=184/255
mdb=160/255
mda=1
bkr=1
bkg=1
bkb=1
bka=0
bumps=1
petals=7
flower(cr, num, xpos, ypos, 0.4, 50, bgr, bgg, bgb, bga, inr, ing, inb, ina, mdr, mdg, mdb, mda, bkr, bkg, bkb, bka, bumps, petals)
--circlewriting variable
--text must be in quotes
text=("FILESYSTEM USED")
--font name must be in quotes
font="White Rabbit"
fontsize=12
radius=30
positionx=xpos
positiony=ypos
colorred=inr
colorgreen=ing
colorblue=inb
coloralpha=1
--to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
--eg if you want to go from 270 to 90, then you will input 270 to 450. Finish has to be greater than start.
start=270
finish=450
letterposition=-0.1
circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
--FLOWER 4 SETUP----------------------------------------------------------------------------------------------------------------------------------
num=tonumber(conky_parse('${swapperc}'))
xpos=350
ypos=310
bgr=225/255
bgg=225/255
bgb=0/255
bga=0.5
inr=200/255
ing=100/255
inb=100/255
ina=0.9
mdr=226/255
mdg=198/255
mdb=197/255
mda=1
bkr=1
bkg=1
bkb=1
bka=0
bumps=1
petals=9
flower(cr, num, xpos, ypos, 0.4, 20, bgr, bgg, bgb, bga, inr, ing, inb, ina, mdr, mdg, mdb, mda, bkr, bkg, bkb, bka, bumps, petals)
--circlewriting variable
--text must be in quotes
text=("SWAP PARTITION")
--font name must be in quotes
font="White Rabbit"
fontsize=12
radius=30
positionx=xpos
positiony=ypos
colorred=inr
colorgreen=ing
colorblue=inb
coloralpha=1
--to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
--eg if you want to go from 270 to 90, then you will input 270 to 450. Finish has to be greater than start.
start=270
finish=450
letterposition=-0.1
circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
--FLOWER 4 SETUP----------------------------------------------------------------------------------------------------------------------------------
num=tonumber(conky_parse('${wireless_link_qual}'))
xpos=550
ypos=310
bgr=230/255
bgg=160/255
bgb=108/255
bga=0.5
inr=238/255
ing=95/255
inb=141/255
ina=0.9
mdr=253/255
mdg=250/255
mdb=209/255
mda=1
bkr=1
bkg=1
bkb=1
bka=0
bumps=1
petals=6
flower(cr, num, xpos, ypos, 0.4, 10, bgr, bgg, bgb, bga, inr, ing, inb, ina, mdr, mdg, mdb, mda, bkr, bkg, bkb, bka, bumps, petals)
--circlewriting variable
--text must be in quotes
text=("WIFI CONNECTION")
--font name must be in quotes
font="White Rabbit"
fontsize=12
radius=30
positionx=xpos
positiony=ypos
colorred=inr
colorgreen=ing
colorblue=inb
coloralpha=1
--to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
--eg if you want to go from 270 to 90, then you will input 270 to 450. Finish has to be greater than start.
start=270
finish=450
letterposition=-0.1
circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
--FLOWER 6 SETUP----------------------------------------------------------------------------------------------------------------------------------
num=tonumber(conky_parse('${battery_percent}'))
xpos=550
ypos=510
bgr=80/255
bgg=74/255
bgb=180/255
bga=0.5
inr=190/255
ing=128/255
inb=202/255
ina=0.9
mdr=251/255
mdg=208/255
mdb=225/255
mda=1
bkr=1
bkg=1
bkb=1
bka=0
bumps=1
petals=5
flower(cr, num, xpos, ypos, 0.4, 35, bgr, bgg, bgb, bga, inr, ing, inb, ina, mdr, mdg, mdb, mda, bkr, bkg, bkb, bka, bumps, petals)
--circlewriting variable
--text must be in quotes
text=("BATTERY CHARGE")
--font name must be in quotes
font="White Rabbit"
fontsize=12
radius=30
positionx=xpos
positiony=ypos
colorred=inr
colorgreen=ing
colorblue=inb
coloralpha=1
--to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
--eg if you want to go from 270 to 90, then you will input 270 to 450. Finish has to be greater than start.
start=270
finish=450
letterposition=-0.1
circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
--END OF FLOWER SETUP----------------------------------------------------------------------------------------------------------------------------
end
end