Latest conky lua, rings and weather

The .conkyrc
background yes
use_xft yes
xftfont Sans:bold:size=8
xftalpha 1
update_interval 0.2
total_run_times 0
own_window yes
own_window_transparent yes
own_window_class override
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager       
double_buffer yes
minimum_size 350 900
#maximum_length 720
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders yes
default_color white
default_shade_color black
default_outline_color white
alignment top_right
gap_x 10
gap_y 0
no_buffers no
uppercase no
cpu_avg_samples 2
override_utf8_locale yes
uppercase no
lua_load /path to/bargraphl.lua
lua_draw_hook_post main_bars
lua_load /path to/rings.lua
lua_draw_hook_pre main_rings

TEXT
${image ~/.conky/base.png -p 1,1 -s 380x90}${image ~/.conky/base.png -p 1,75 -s 380x86}${image ~/.conky/base.png -p 1,140 -s 380x132}${image ~/.conky/base.png -p 1,251 -s 380x90}${image ~/.conky/base.png -p 1,325 -s 380x82}${image ~/.conky/base.png -p 1,392 -s 380x82}${image ~/.conky/base.png -p 1,455 -s 380x122}${image ~/.conky/base.png -p 1,544 -s 380x205}${if_existing /etc/SuSE-release}${image ~/.conky/Icons/OS/opensuse.png -p 18,25 -s 45x45}${else}${if_existing /etc/fedora-release}${image ~/.conky/Icons/OS/fedora.png -p 18,25 -s 45x45}${else}${if_existing /etc/gentoo-release}${image ~/.conky/Icons/OS/gentoo.png -p 18,25 -s 45x45}${else}${if_existing /etc/issue Ubuntu}${image ~/.conky/Icons/OS/ubuntu.png -p 18,25 -s 45x45}${else}${if_existing /etc/slackware-version}${image ~/.conky/Icons/OS/slackware.png -p 18,25 -s 45x45}${else}${if_existing /etc/issue Mint}${image ~/.conky/Icons/OS/mint.png -p 18,25 -s 45x45}${else}${if_existing /etc/issue Arch}${image ~/.conky/Icons/OS/archlinux.png -p 18,25 -s 45x45}${else}${image ~/.conky/Icons/OS/setting.png -p 18,25 -s 45x45}${endif}${endif}${endif}${endif}${endif}${endif}${endif}${if_existing /proc/net/route wlan0}${image ~/.conky/Icons/Network/wlan.png -p 18,481 -s 45x45}${else}${if_existing /proc/net/route ppp0}${image ~/.conky/Icons/Network/ppp.png -p 18,481 -s 45x45}${else}${if_existing /proc/net/route eth0}${image ~/.conky/Icons/Network/lan.png -p 18,481 -s 45x45}${else}${image ~/.conky/Icons/Network/disconnected.png -p 18,481 -s 45x45}${endif}${endif}${endif}${image ~/.conky/Icons/Memory.png -p 18,170 -s 45x45}${image ~/.conky/Icons/Clock.png -p 18,100 -s 45x45}${image ~/.conky/Icons/temp.png -p 18,275 -s 45x45}${image ~/.conky/Icons/Task_Manager.png -p 18,350 -s 45x45}
#${image ~/.conky/Icons/Weather.png -p 18,626 -s 45x45}
${goto 18}${font sans-serif:bold:size=8}${color yellow}SYSTEM ${hr 2}$color
${goto 70}${exec lsb_release -d -s}
${goto 70}${color white}${font sans-serif:bold:size=8}${sysname} ${kernel}:$alignr$nodename
${goto 70}${color white}${font sans-serif:bold:size=8}4x Intel(R) Core(TM) i5-2410M $alignr${freq_g cpu0}Ghz
${goto 70}${color white}${font sans-serif:bold:size=8}Uptime:$alignr$uptime
#
${voffset 10}${goto 18}${font sans-serif:bold:size=8}${color yellow}TIME & DATE ${hr 2}
${goto 95}${font  LCDMono:bold:size=28}${time %I:%M:%S}${goto 255}${time %p}${font}
${goto 125}${font sans-serif:bold:size=8}${Time %A %d/%B/%Y}$color
#
${voffset 8}${goto 18}${font sans-serif:bold:size=8}${color yellow}PROCESSORS ${hr 2}$color
${goto 115}${font sans-serif:bold:size=11}${color red}1${goto 178}2${goto 247}3${goto 315}4${color}${font}
${goto 114}${cpu cpu1}%${goto 177}${cpu cpu2}%${goto 245}${cpu cpu3}%${goto 310}${cpu cpu4}%
${voffset 16}${goto 22}${font sans-serif:bold:size=8} RAM${goto 63}: $memperc% ${goto 190}$mem / $alignr$memmax
${goto 22}${font sans-serif:bold:size=8} DISK${goto 63}: ${fs_used_perc /}%${goto 190}${fs_used /} / $alignr${fs_size /}
${goto 22}${font sans-serif:bold:size=8} SWAP${goto 63}: ${swapperc}%${goto 190}${swap} ${goto 240}/ $alignr${swapmax}
#
${voffset 5}${goto 18}${font sans-serif:bold:size=8}${color yellow}TEMPERATURE ${voffset 2}${hr 2}$color
${goto 65}${font sans-serif:bold:size=8} PCI${goto 109}: ${hwmon 1 temp 1}°C
${goto 65}${font sans-serif:bold:size=8} CORE0${goto 109}: ${hwmon 1 temp 2}°C
${goto 65}${font sans-serif:bold:size=8} CORE1${goto 109}: ${hwmon 1 temp 3}°C
${goto 65}${font sans-serif:bold:size=8} DISK${goto 109}: ${execpi 10 hddtemp -n /dev/sda }°C
#
${voffset 10}${goto 18}${font sans-serif:bold:size=8}${color yellow}TOP PROCESSES${goto 174}PID${goto 227}CPU%${goto 280}MEM%$color
${goto 70}${font sans-serif:bold:size=8}${top name 1} ${goto 174} ${top pid 1}${goto 227}${top cpu 1}${goto 280}${top mem 1}
${goto 70}${font sans-serif:bold:size=8}${top name 2} ${goto 174} ${top pid 2}${goto 227}${top cpu 2}${goto 280}${top mem 2}
${goto 70}${font sans-serif:bold:size=8}${top name 3} ${goto 174} ${top pid 3}${goto 227}${top cpu 3}${goto 280}${top mem 3}
#${goto 70}${font sans-serif:bold:size=8}${top name 4} ${goto 174} ${top pid 4}${goto 227}${top cpu 4}${goto 280}${top mem 4}
#${goto 70}${font sans-serif:bold:size=8}${top name 3} ${goto 174} ${top pid 5}${goto 227}${top cpu 5}${goto 280}${top mem 5}
#
${voffset 13}${goto 18}${font sans-serif:bold:size=8}${color yellow}TOP MEMORY${goto 174}PID${goto 227}CPU%${goto 280}MEM%$color
${goto 70}${top_mem name 1}${goto 174}${top_mem pid 1}${goto 227}${top_mem cpu 1}${goto 280}${top_mem mem 1}
${goto 70}${top_mem name 2}${goto 174}${top_mem pid 2}${goto 227}${top_mem cpu 2}${goto 280}${top_mem mem 2}
${goto 70}${top_mem name 3}${goto 174}${top_mem pid 3}${goto 227}${top_mem cpu 3}${goto 280}${top_mem mem 3}
#${goto 70}${top_mem name 4}${goto 174}${top_mem pid 4}${goto 227}${top_mem cpu 4}${goto 280}${top_mem mem 4}
#${goto 70}${top_mem name 5}${goto 174}${top_mem pid 5}${goto 227}${top_mem cpu 5}${goto 280}${top_mem mem 5}
#
#
${voffset 13}${goto 18}${font sans-serif:bold:size=8}${color yellow}NETWORK ${hr 2}$color${if_existing /proc/net/route wwan0}
$alignc ....Berukband....
${voffset 2}${font PizzaDudeBullets:size=9.5}${color red}a${font}${color} Public IP: $alignr ${addr wwan0}
${voffset 2}${font PizzaDudeBullets:size=9.5}${color red}a${font}${color} Private IP:${alignr}${execi 1800 wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]\|.]//g'}
${voffset 2}${font PizzaDudeBullets:size=9.5}${color red}T${font}${color} Downloads:${goto 237}${downspeed wwan0}/s
${voffset 2}${font PizzaDudeBullets:size=9.5}${color red}N${font}${color} Uploads:${goto 237}${upspeed wwan0}/s
Total: Downloads:${goto 128}${color green}${totaldown wwan0}${color}${goto 185} Uploads:${color red}${goto 243}${totalup wwan0}${color}
#${wireless_link_qual wwan0}%
#
${else}${if_existing /proc/net/route ppp0}
${goto 130} ${color yellow} ....Berukband....$color
${goto 70}Public IP:$alignr ${addr ppp0}
${goto 70}Private IP:${alignr}${execi 1800 wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]\|.]//g'}
${goto 70}Downloads:${goto 237}${downspeed ppp0}/s
${goto 70}Uploads:${goto 237}${upspeed ppp0}/s
${goto 70}Total: Downloads::${goto 188}${color green}${totaldown ppp0}${color}${goto 230} Uploads${color red}${goto 287}${totalup ppp0}${color}
#
${else}${if_existing /proc/net/route wlan0}
${voffset -91}${goto 180}${color yellow} ....Wireless....$color
#${voffset 2}${font PizzaDudeBullets:size=9.5}${color red}a${font}${color}WAN IP:$alignr${execi 3600 wget -O- http://whatismyip.org/ | tail}
${goto 70}${font}${color}IP address: $alignr ${addr wlan0}
${goto 70}${font}${color}ESSID: $alignr ${wireless_essid wlan0}
${goto 70}${font}${color} Downloads:${goto 237}${downspeed wlan0}/s
${goto 70}${font}${color} Uploads:${goto 237}${upspeed wlan0}/s
${goto 70}Total: Downloads:${goto 178}${color green}${totaldown wlan0}${color}${goto 230} Uploads:${color red}${goto 287}${totalup wlan0}${color}
#${voffset 2}${font PizzaDudeBullets:size=9.5}${color red}a${font}${color}Connection quality: $alignr ${wireless_link_qual_perc wlan0}%
#
${else}${if_existing /proc/net/route eth0}
${voffset -91}$alignc ....Cable....
${goto 70}${font}${color}IP address: $alignr ${addr eth0}
${goto 70}${font}${color}ESSID: $alignr ${wireless_essid eth0}
${goto 70}${font}${color} Downloads:${goto 237}${downspeed eth0}/s
${goto 70}${font}${color} Uploads:${goto 237}${upspeed eth0}/s
${goto 70}Total: Downloads:${goto 178}${color green}${totaldown eth0}${color}${goto 230} Uploads:${color red}${goto 287}${totalup eth0}${color}
#${voffset 2}${font PizzaDudeBullets:size=9.5}${color red}a${font}${color}Connection quality: $alignr ${wireless_link_qual_perc eth0}%
#
${else}${if_existing /proc/net/route eth1}
${voffset -91}$alignc ....Cable....
${goto 70}${font}${color}IP address: $alignr ${addr eth1}
${goto 70}${font}${color}ESSID: $alignr ${wireless_essid eth1}
${goto 70}${font}${color} Downloads:${goto 237}${downspeed eth1}/s
${goto 70}${font}${color} Uploads:${goto 237}${upspeed eth1}/s
${goto 70}Total: Downloads:${goto 178}${color green}${totaldown eth1}${color}${goto 230} Uploads:${color red}${goto 287}${totalup eth1}${color}
#${voffset 2}${font PizzaDudeBullets:size=9.5}${color red}a${font}${color}Connection quality: $alignr ${wireless_link_qual_perc eth1}%
#
${else}${goto 120}${font sans-serif:bold:size=8}${color yellow}
$alignc ..Takdok Internet Wei.. ${endif}





${endif}${endif}${endif}${endif}
#
${voffset -7}${goto 18}${font sans-serif:bold:size=8}${color yellow}WEATHER SUNGAI KOYAN ${hr 2}$color${font}${texeci 500 bash $HOME/1b1_accuweather_images/1b1}
${image $HOME/1b1_accuweather_images/cc.png -p 0,595 -s 130x70}
${voffset -10}${goto 22}${font sans-serif:bold:size=7}${color yellow}${execpi 600 sed -n '1p' $HOME/1b1_accuweather_images/messages}${font}${goto 200}${font sans-serif:bold:size=5}${color yellow}TEMPERATURE: $color${alignr}${execpi 600 sed -n '29p' $HOME/1b1_accuweather_images/curr_cond}°C (${execpi 600 sed -n '30p' $HOME/1b1_accuweather_images/curr_cond}°C)
${goto 200}${color yellow}WIND: $color${alignr}${execpi 600 sed -n '31p' $HOME/1b1_accuweather_images/curr_cond} ${execpi 600 sed -n '32p' $HOME/1b1_accuweather_images/curr_cond}
${goto 200}${color yellow}HUMIDITY: $color${alignr}${execpi 600 sed -n '33p' $HOME/1b1_accuweather_images/curr_cond}
${goto 200}${color yellow}DEW POINT: $color${alignr}${execpi 600 sed -n '37p' $HOME/1b1_accuweather_images/curr_cond}°C
${goto 200}${color yellow}PREASURE: $color${alignr}${execpi 600 sed -n '34p' $HOME/1b1_accuweather_images/curr_cond}
${goto 200}${color yellow}VISIBILITY: $color${alignr}${execpi 600 sed -n '38p' $HOME/1b1_accuweather_images/curr_cond}
${goto 200}${color yellow}CLOUD COVER: $color${alignr}${execpi 600 sed -n '35p' $HOME/1b1_accuweather_images/curr_cond}
${goto 200}${color yellow}UV INDEX: $color${alignr}${execpi 600 sed -n '36p' $HOME/1b1_accuweather_images/curr_cond} 
${goto 200}${color yellow}SUN/MOON RISE: $color${alignr}${execpi 600 sed -n '39p' $HOME/1b1_accuweather_images/curr_cond}/${execpi 600 sed -n '41p' $HOME/1b1_accuweather_images/curr_cond}
${goto 200}${color yellow}SUN/MOON SET: $color${alignr}${execpi 600 sed -n '40p' $HOME/1b1_accuweather_images/curr_cond}/${execpi 600 sed -n '42p' $HOME/1b1_accuweather_images/curr_cond}
${voffset -90}${goto 135}${font sans-serif:bold:size=5}${color yellow}TODAY${voffset 50}${goto 135}TONIGHT$font${color}${image $HOME/1b1_accuweather_images/tod.png -p 117,593 -s 60x36}${image $HOME/1b1_accuweather_images/ton.png -p 117,640 -s 60x36}
${voffset -60}${goto 175}${font sans-serif:bold:size=5}${execpi 600 sed -n '26p' $HOME/1b1_accuweather_images/first_days}°C${voffset 50}${goto 175}${execpi 600 sed -n '31p' $HOME/1b1_accuweather_images/first_days}°C
${voffset -50}${color gold3}${goto 173}(${execpi 600 sed -n '27p' $HOME/1b1_accuweather_images/first_days}°C)${voffset 50}${goto 173}(${execpi 600 sed -n '32p' $HOME/1b1_accuweather_images/first_days}°C)$color
${voffset 15}${goto 20}${color yellow}${hr 0.25}$color${color yellow}${hr 1}$color
${font sans-serif:bold:size=5}${goto 20}${execpi 600 sed -n '5p' $HOME/1b1_accuweather_images/first_days}${goto 80}${execpi 600 sed -n '10p' $HOME/1b1_accuweather_images/first_days}${goto 140}${execpi 600 sed -n '15p' $HOME/1b1_accuweather_images/first_days}${goto 200}${execpi 600 sed -n '20p' $HOME/1b1_accuweather_images/first_days}${goto 260}${execpi 600 sed -n '1p' $HOME/1b1_accuweather_images/last_days}${goto 320}${execpi 600 sed -n '6p' $HOME/1b1_accuweather_images/last_days}$color${font}${image $HOME/1b1_accuweather_images/6.png -p 10,690 -s 60x36}${image $HOME/1b1_accuweather_images/11.png -p 70,690 -s 60x36}${image $HOME/1b1_accuweather_images/16.png -p 130,690 -s 60x36}${image $HOME/1b1_accuweather_images/21.png -p 190,690 -s 60x36}${image $HOME/1b1_accuweather_images/last_2.png -p 250,690 -s 60x36}${image $HOME/1b1_accuweather_images/last_7.png -p 310,690 -s 60x36}
${voffset 20}${font sans-serif:bold:size=5}${goto 20}${execpi 600 sed -n '8p' $HOME/1b1_accuweather_images/first_days}°C${goto 80}${execpi 600 sed -n '13p' $HOME/1b1_accuweather_images/first_days}°C${goto 140}${execpi 600 sed -n '18p' $HOME/1b1_accuweather_images/first_days}°C${goto 200}${execpi 600 sed -n '23p' $HOME/1b1_accuweather_images/first_days}°C${goto 260}${execpi 600 sed -n '4p' $HOME/1b1_accuweather_images/last_days}°C${goto 320}${execpi 600 sed -n '9p' $HOME/1b1_accuweather_images/last_days}°C${goto 320}${execpi 600 sed -n '14p' $HOME/1b1_accuweather_images/last_days}°C
${voffset -9}${goto 43}${color gold3}(${execpi 600 sed -n '9p' $HOME/1b1_accuweather_images/first_days}°C)${font sans-serif:bold:size=5}${goto 103}(${execpi 600 sed -n '14p' $HOME/1b1_accuweather_images/first_days}°C)${goto 163}(${execpi 600 sed -n '19p' $HOME/1b1_accuweather_images/first_days}°C)${goto 223}(${execpi 600 sed -n '24p' $HOME/1b1_accuweather_images/first_days}°C)${goto 283}(${execpi 600 sed -n '5p' $HOME/1b1_accuweather_images/last_days}°C)${goto 343}(${execpi 600 sed -n '10p' $HOME/1b1_accuweather_images/last_days}°C)
the bargraph lua...
--[[
BARGRAPH WIDGET
v2.1 by wlourf (07 Jan. 2011)
this widget draws a bargraph with different effects 
http://u-scripts.blogspot.com/2010/07/bargraph-widget.html
 
To call the script in a conky, use, before TEXT
 lua_load /home/akubuntu/conkyJed/bargraph.lua
 lua_draw_hook_pre main_rings
and add one line (blank or not) after TEXT
 
Parameters are :
3 parameters are mandatory
name - the name of the conky variable to display, for example for {$cpu cpu0}, just write name="cpu"
arg  - the argument of the above variable, for example for {$cpu cpu0}, just write arg="cpu0"
       arg can be a numerical value if name=""
max  - the maximum value the above variable can reach, for example, for {$cpu cpu0}, just write max=100
 
Optional parameters:
x,y   - coordinates of the starting point of the bar, default = middle of the conky window
cap   - end of cap line, ossibles values are r,b,s (for round, butt, square), default="b"
     http://www.cairographics.org/samples/set_line_cap/
angle   - angle of rotation of the bar in degress, default = 0 (i.e. a vertical bar)
     set to 90 for an horizontal bar
skew_x   - skew bar around x axis, default = 0
skew_y   - skew bar around y axis, default = 0
blocks    - number of blocks to display for a bar (values >0) , default= 10
height   - height of a block, default=10 pixels
width   - width of a block, default=20 pixels
space   - space between 2 blocks, default=2 pixels
angle_bar - this angle is used to draw a bar on a circular way (ok, this is no more a bar !) default=0
radius   - for cicular bars, internal radius, default=0
     with radius, parameter width has no more effect.

Colours below are defined into braces {colour in hexadecimal, alpha}
fg_colour    - colour of a block ON, default= {0x00FF00,1}
bg_colour    - colour of a block OFF, default = {0x00FF00,0.5}
alarm      - threshold, values after this threshold will use alarm_colour colour , default=max
alarm_colour - colour of a block greater than alarm, default=fg_colour
smooth      - (true or false), create a gradient from fg_colour to bg_colour, default=false 
mid_colour   - colours to add to gradient, with this syntax {position into the gradient (0 to1), colour hexa, alpha}
        for example, this table {{0.25,0xff0000,1},{0.5,0x00ff00,1},{0.75,0x0000ff,1}} will add
        3 colours to gradient created by fg_colour and alarm_colour, default=no mid_colour
led_effect   - add LED effects to each block, default=no led_effect
        if smooth=true, led_effect is not used
        possibles values : "r","a","e" for radial, parallel, perdendicular to the bar (just try!)
        led_effect has to be used with theses colours :
fg_led      - middle colour of a block ON, default = fg_colour
bg_led      - middle colour of a block OFF, default = bg_colour
alarm_led    - middle colour of a block > ALARM,  default = alarm_colour

reflection parameters, not available for circular bars
reflection_alpha  - add a reflection effect (values from 0 to 1) default = 0 = no reflection
      other values = starting opacity
reflection_scale  - scale of the reflection (default = 1 = height of text)
reflection_length - length of reflection, define where the opacity will be set to zero
      values from 0 to 1, default =1
reflection   - position of reflection, relative to a vertical bar, default="b"
      possibles values are : "b","t","l","r" for bottom, top, left, right
draw_me        - if set to false, text is not drawn (default = true or 1)
      it can be used with a conky string, if the string returns 1, the text is drawn :
      example : "${if_empty ${wireless_essid wlan0}}${else}1$endif",

v1.0 (10 Feb. 2010) original release
v1.1 (13 Feb. 2010) numeric values can be passed instead conky stats with parameters name="", arg = numeric_value 
v1.2 (28 Feb. 2010) just renamed the widget to bargraph
v1.3 (03 Mar. 2010) added parameters radius & angle_bar to draw the bar in a circular way
v2.0 (12 Jul. 2010) rewrite script + add reflection effects and parameters are now set into tables
v2.1 (07 Jan. 2011) Add draw_me parameter and correct memory leaks, thanks to "Creamy Goodness"

--      This program is free software; you can redistribute it and/or modify
--      it under the terms of the GNU General Public License as published by
--      the Free Software Foundation version 3 (GPLv3)
--     
--      This program is distributed in the hope that it will be useful,
--      but WITHOUT ANY WARRANTY; without even the implied warranty of
--      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--      GNU General Public License for more details.
--     
--      You should have received a copy of the GNU General Public License
--      along with this program; if not, write to the Free Software
--      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
--      MA 02110-1301, USA.  

]]

require 'cairo'

----------------START OF PARAMETERS ----------
function conky_main_bars()
 local bars_settings={
          {-- single block bar, skew and with reflecting + gradient
   name="memperc",
   arg="",
   max=100,
   alarm=70,
   alarm_colour={0xFF0000,0.60},
   bg_colour={0x0000FF,0},
   fg_colour={0xffff00,0},
   bg_led={0x0000FF,0.5},
   fg_led={0xffff00,1},
   led_effect="r",
   blocks=1,--20,
   x=96,
   y=223,
   height=277,--,
   width=6,
   angle=90,
   led_effect="e",
   reflection_alpha=1,
   reflection="r",
   space=1,
   skew_x=0,
  },
  { --[ Graph for Home ]--
   name="fs_used_perc",
   arg="/home",
   max=100,
   alarm=56,
   alarm_colour={0xFF0000,0.60},
   bg_colour={0x0000FF,0},
   fg_colour={0xffff00,0},
   bg_led={0x0000FF,0.5},
   fg_led={0xffff00,1},
   led_effect="r",
   blocks=1,--20,
   x=96,
   y=236,
   height=277,--,
   width=6,
   angle=90,
   led_effect="e",
   reflection_alpha=1,
   reflection="r",
   space=1,
   skew_x=0,
  },
  { --[ Graph for Swap ]--
   name="swapperc",
   arg="",
   max=100,
   alarm=70,
   alarm_colour={0xFF0000,0.60},
   bg_colour={0x0000FF,0},
   fg_colour={0xffff00,0},
   bg_led={0x0000FF,0.5},
   fg_led={0xffff00,1},
   led_effect="r",
   blocks=1,--20,
   x=96,
   y=249,
   height=277,--,
   width=6,
   angle=90,
   led_effect="e",
   reflection_alpha=1,
   reflection="r",
   space=1,
   skew_x=0,
  },
                { --[ Graph for hwmon temp 1 ]--
   name="hwmon 1 temp 1",
   arg="hwmon 1 temp 1",
   max=100,
   alarm=79,
   alarm_colour={0xFF0000,0.60},
   bg_colour={0x0000FF,0},
   fg_colour={0xffff00,0},
   bg_led={0x0000FF,0.5},
   fg_led={0xffff00,1},
   led_effect="r",
   blocks=1,--20,
   x=145,
   y=283,
   height=225,--,
   width=5,
   angle=90,
   led_effect="e",
   reflection_alpha=1,
   reflection="r",
   space=1,
   skew_x=0,
  },
        { --[ Graph for hwmon temp 1 ]--
   name="hwmon 1 temp 2",
   arg="hwmon 1 temp 2",
   max=100,
   alarm=76,
   alarm_colour={0xFF0000,0.60},
   bg_colour={0x0000FF,0},
   fg_colour={0xffff00,0},
   bg_led={0x0000FF,0.5},
   fg_led={0xffff00,1},
   led_effect="r",
   blocks=1,--20,
   x=145,
   y=296,
   height=225,--,
   width=5,
   angle=90,
   led_effect="e",
   reflection_alpha=1,
   reflection="r",
   space=1,
   skew_x=0,
  },
  { --[ Graph for hwmon temp 1 ]--
   name="hwmon 1 temp 3",
   arg="hwmon 1 temp 3",
   max=100,
   alarm=76,
   alarm_colour={0xFF0000,0.60},
   bg_colour={0x0000FF,0},
   fg_colour={0xffff00,0},
   bg_led={0x0000FF,0.5},
   fg_led={0xffff00,1},
   led_effect="r",
   blocks=1,--20,
   x=145,
   y=309,
   height=225,--,
   width=5,
   angle=90,
   led_effect="e",
   reflection_alpha=1,
   reflection="r",
   space=1,
   skew_x=0,
  },
{ --[ Graph for hwmon temp 1 ]--
   name="hddtemp",
   arg="hddtemp",
   max=100,
   alarm=76,
   alarm_colour={0xFF0000,0.60},
   bg_colour={0x0000FF,0},
   fg_colour={0xffff00,0},
   bg_led={0x0000FF,0.5},
   fg_led={0xffff00,1},
   led_effect="r",
   blocks=1,--20,
   x=145,
   y=322,
   height=225,--,
   width=5,
   angle=90,
   led_effect="e",
   reflection_alpha=1,
   reflection="r",
   space=1,
   skew_x=0,
  },
  { --[ Graph for network ]--
   name="downspeedf",
   arg="ppp0",
   max=250,
   alarm=200,
   alarm_colour={0xFF0000,0.60},
   bg_colour={0x0000FF,0.07},
   fg_colour={0xffff00,0.07},
   bg_led={0x0000FF,0.5},
   fg_led={0xffff00,1},
   led_effect="r",
   blocks=1,--20,
   x=145,
   y=527,
   height=228,--,
   width=6,
   angle=90,
   led_effect="e",
   reflection_alpha=1,
   reflection="r",
   space=1,
   skew_x=0,
  },
  { --[ Graph for network ]--
   name="upspeedf",
   arg="ppp0",
   max=250,
   alarm=200,
   alarm_colour={0xFF0000,0.60},
   bg_colour={0x0000FF,0.07},
   fg_colour={0xffff00,0.07},
   bg_led={0x0000FF,0.5},
   fg_led={0xffff00,1},
   led_effect="r",
   blocks=1,--20,
   x=145,
   y=540,
   height=228,--,
   width=6,
   angle=90,
   led_effect="e",
   reflection_alpha=1,
   reflection="r",
   space=1,
   skew_x=0,
  },
    

   } 
-----------END OF PARAMETERS--------------


    
 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)
 
 cr = cairo_create(cs)    
 --prevent segmentation error when reading cpu state
    if tonumber(conky_parse('${updates}'))>3 then
        for i in pairs(bars_settings) do
         
         draw_multi_bar_graph(bars_settings[i])
         
        end
    end
 cairo_destroy(cr)
 cairo_surface_destroy(cs)
 cr=nil

end



function draw_multi_bar_graph(t)
 cairo_save(cr)
 --check values
 if t.draw_me == true then t.draw_me = nil end
 if t.draw_me ~= nil and conky_parse(tostring(t.draw_me)) ~= "1" then return end 
 if t.name==nil and t.arg==nil then 
  print ("No input values ... use parameters 'name' with 'arg' or only parameter 'arg' ") 
  return
 end
 if t.max==nil then
  print ("No maximum value defined, use 'max'")
  return
 end
 if t.name==nil then t.name="" end
 if t.arg==nil then t.arg="" end

 --set default values 
 if t.x == nil  then t.x = conky_window.width/2 end
 if t.y == nil  then t.y = conky_window.height/2 end
 if t.blocks == nil then t.blocks=10 end
 if t.height == nil then t.height=10 end
 if t.angle == nil  then t.angle=0 end
 t.angle = t.angle*math.pi/180
 --line cap style
 if t.cap==nil  then t.cap = "b" end
 local cap="b"
 for i,v in ipairs({"s","r","b"}) do 
  if v==t.cap then cap=v end
 end
 local delta=0
 if t.cap=="r" or t.cap=="s" then delta = t.height end
 if cap=="s" then  cap = CAIRO_LINE_CAP_SQUARE
 elseif cap=="r" then
  cap = CAIRO_LINE_CAP_ROUND
 elseif cap=="b" then
  cap = CAIRO_LINE_CAP_BUTT
 end
 --end line cap style
 --if t.led_effect == nil then t.led_effect="r" end
 if t.width == nil then t.width=20 end
 if t.space == nil then t.space=2 end
 if t.radius == nil then t.radius=0 end
 if t.angle_bar == nil then t.angle_bar=0 end
 t.angle_bar = t.angle_bar*math.pi/360 --halt angle
 
 --colours
 if t.bg_colour == nil  then t.bg_colour = {0x00FF00,0.5} end
 if #t.bg_colour~=2   then t.bg_colour = {0x00FF00,0.5} end
 if t.fg_colour == nil  then t.fg_colour = {0x00FF00,1} end
 if #t.fg_colour~=2   then t.fg_colour = {0x00FF00,1} end
 if t.alarm_colour == nil  then t.alarm_colour = t.fg_colour end
 if #t.alarm_colour~=2   then t.alarm_colour = t.fg_colour end

 if t.mid_colour ~= nil then 
  for i=1, #t.mid_colour do    
      if #t.mid_colour[i]~=3 then 
       print ("error in mid_color table")
       t.mid_colour[i]={1,0xFFFFFF,1} 
      end
  end
    end
    
 if t.bg_led ~= nil and #t.bg_led~=2 then t.bg_led = t.bg_colour end
 if t.fg_led ~= nil and #t.fg_led~=2 then t.fg_led = t.fg_colour end
 if t.alarm_led~= nil and #t.alarm_led~=2 then t.alarm_led = t.fg_led end
 
 if t.led_effect~=nil then
  if t.bg_led == nil then t.bg_led = t.bg_colour end
  if t.fg_led == nil  then t.fg_led = t.fg_colour end
  if t.alarm_led == nil  then t.alarm_led = t.fg_led end
 end
 

 if t.alarm==nil then t.alarm = t.max end --0.8*t.max end
 if t.smooth == nil then t.smooth = false end

 if t.skew_x == nil then 
  t.skew_x=0 
 else
  t.skew_x = math.pi*t.skew_x/180 
 end
 if t.skew_y == nil then 
  t.skew_y=0
 else
  t.skew_y = math.pi*t.skew_y/180 
 end
 
 if t.reflection_alpha==nil then t.reflection_alpha=0 end
 if t.reflection_length==nil then t.reflection_length=1 end
 if t.reflection_scale==nil then t.reflection_scale=1 end
 
 --end of default values
 

  local function rgb_to_r_g_b(col_a)
  return ((col_a[1] / 0x10000) % 0x100) / 255., ((col_a[1] / 0x100) % 0x100) / 255., (col_a[1] % 0x100) / 255., col_a[2]
 end
 
 
 --functions used to create patterns

 local function create_smooth_linear_gradient(x0,y0,x1,y1)
  local pat = cairo_pattern_create_linear (x0,y0,x1,y1)
  cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(t.fg_colour))
  cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(t.alarm_colour))
  if t.mid_colour ~=nil then
   for i=1, #t.mid_colour do
    cairo_pattern_add_color_stop_rgba (pat, t.mid_colour[i][1], rgb_to_r_g_b({t.mid_colour[i][2],t.mid_colour[i][3]}))
   end
  end
  return pat
 end

 local function create_smooth_radial_gradient(x0,y0,r0,x1,y1,r1)
  local pat =  cairo_pattern_create_radial (x0,y0,r0,x1,y1,r1)
  cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(t.fg_colour))
  cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(t.alarm_colour))
  if t.mid_colour ~=nil then
   for i=1, #t.mid_colour do
    cairo_pattern_add_color_stop_rgba (pat, t.mid_colour[i][1], rgb_to_r_g_b({t.mid_colour[i][2],t.mid_colour[i][3]}))
   end
  end
  return pat
 end
 
 local function create_led_linear_gradient(x0,y0,x1,y1,col_alp,col_led)
  local pat = cairo_pattern_create_linear (x0,y0,x1,y1) ---delta, 0,delta+ t.width,0)
  cairo_pattern_add_color_stop_rgba (pat, 0.0, rgb_to_r_g_b(col_alp))
  cairo_pattern_add_color_stop_rgba (pat, 0.5, rgb_to_r_g_b(col_led))
  cairo_pattern_add_color_stop_rgba (pat, 1.0, rgb_to_r_g_b(col_alp))
  return pat
 end

 local function create_led_radial_gradient(x0,y0,r0,x1,y1,r1,col_alp,col_led,mode)
  local pat = cairo_pattern_create_radial (x0,y0,r0,x1,y1,r1)
  if mode==3 then
   cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(col_alp))    
   cairo_pattern_add_color_stop_rgba (pat, 0.5, rgb_to_r_g_b(col_led))
   cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(col_alp))    
  else
   cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(col_led))
   cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(col_alp))    
  end
  return pat
 end






 local function draw_single_bar()
  --this fucntion is used for bars with a single block (blocks=1) but 
  --the drawing is cut in 3 blocks : value/alarm/background
  --not zvzimzblr for circular bar
  local function create_pattern(col_alp,col_led,bg)
   local pat
   
   if not t.smooth then
    if t.led_effect=="e" then
     pat = create_led_linear_gradient (-delta, 0,delta+ t.width,0,col_alp,col_led)
    elseif t.led_effect=="a" then
     pat = create_led_linear_gradient (t.width/2, 0,t.width/2,-t.height,col_alp,col_led)
    elseif  t.led_effect=="r" then
     pat = create_led_radial_gradient (t.width/2, -t.height/2, 0, t.width/2,-t.height/2,t.height/1.5,col_alp,col_led,2)
    else
     pat = cairo_pattern_create_rgba  (rgb_to_r_g_b(col_alp))
    end
   else
    if bg then
     pat = cairo_pattern_create_rgba  (rgb_to_r_g_b(t.bg_colour))
    else
     pat = create_smooth_linear_gradient(t.width/2, 0, t.width/2,-t.height)
    end
   end
   return pat
  end
  
  local y1=-t.height*pct/100
  local y2,y3
  if pct>(100*t.alarm/t.max) then 
   y1 = -t.height*t.alarm/100
   y2 = -t.height*pct/100
   if t.smooth then y1=y2 end
  end
  
  if t.angle_bar==0 then
  
   --block for fg value
   local pat = create_pattern(t.fg_colour,t.fg_led,false)
   cairo_set_source(cr,pat)
   cairo_rectangle(cr,0,0,t.width,y1)
   cairo_fill(cr)
   cairo_pattern_destroy(pat)
  
   -- block for alarm value   
   if not t.smooth and y2 ~=nil then 
    pat = create_pattern(t.alarm_colour,t.alarm_led,false)
    cairo_set_source(cr,pat)
    cairo_rectangle(cr,0,y1,t.width,y2-y1)
    cairo_fill(cr)
    y3=y2
    cairo_pattern_destroy(pat)
   else
    y2,y3=y1,y1
   end
   -- block for bg value
   cairo_rectangle(cr,0,y2,t.width,-t.height-y3)
   pat = create_pattern(t.bg_colour,t.bg_led,true)
   cairo_set_source(cr,pat)
   cairo_pattern_destroy(pat)
   cairo_fill(cr)
  end  
 end  --end single bar
 





 local function draw_multi_bar()
  --function used for bars with 2 or more blocks
  for pt = 1,t.blocks do 
   --set block y
   local y1 = -(pt-1)*(t.height+t.space)
   local light_on=false
   
   --set colors
   local col_alp = t.bg_colour
   local col_led = t.bg_led
   if pct>=(100/t.blocks) or pct>0 then --ligth on or not the block
    if pct>=(pcb*(pt-1))  then 
     light_on = true
     col_alp = t.fg_colour
     col_led = t.fg_led
     if pct>=(100*t.alarm/t.max) and (pcb*pt)>(100*t.alarm/t.max) then 
      col_alp = t.alarm_colour 
      col_led = t.alarm_led 
     end
    end
   end

   --set colors
   --have to try to create gradients outside the loop ?
   local pat 
   
   if not t.smooth then
    if t.angle_bar==0 then
     if t.led_effect=="e" then
      pat = create_led_linear_gradient (-delta, 0,delta+ t.width,0,col_alp,col_led)
     elseif t.led_effect=="a" then
      pat = create_led_linear_gradient (t.width/2, -t.height/2+y1,t.width/2,0+t.height/2+y1,col_alp,col_led)     
     elseif  t.led_effect=="r" then
      pat = create_led_radial_gradient (t.width/2, y1, 0, t.width/2,y1,t.width/1.5,col_alp,col_led,2) 
     else
      pat = cairo_pattern_create_rgba  (rgb_to_r_g_b(col_alp))
     end
    else
      if t.led_effect=="a"  then
       pat = create_led_radial_gradient (0, 0, t.radius+(t.height+t.space)*(pt-1),
               0, 0, t.radius+(t.height+t.space)*(pt),       
            col_alp,col_led,3) 
     else
      pat = cairo_pattern_create_rgba  (rgb_to_r_g_b(col_alp))     
     end
     
    end
   else
    
    if light_on then
     if t.angle_bar==0 then
      pat = create_smooth_linear_gradient(t.width/2, t.height/2, t.width/2,-(t.blocks-0.5)*(t.height+t.space))
     else
      pat = create_smooth_radial_gradient(0, 0, (t.height+t.space),  0,0,(t.blocks+1)*(t.height+t.space),2)
     end
    else  
     pat = cairo_pattern_create_rgba  (rgb_to_r_g_b(t.bg_colour))
    end
   end
   cairo_set_source (cr, pat)
   cairo_pattern_destroy(pat)

   --draw a block
   if t.angle_bar==0 then
    cairo_move_to(cr,0,y1)
    cairo_line_to(cr,t.width,y1)
   else  
    cairo_arc( cr,0,0,
     t.radius+(t.height+t.space)*(pt)-t.height/2,
      -t.angle_bar -math.pi/2 ,
      t.angle_bar -math.pi/2)
   end
   cairo_stroke(cr)
  end 
 end
 
 
 
 
 local function setup_bar_graph()
  --function used to retrieve the value to display and to set the cairo structure
  if t.blocks ~=1 then t.y=t.y-t.height/2 end
  
  local value = 0
  if t.name ~="" then
   value = tonumber(conky_parse(string.format('${%s %s}', t.name, t.arg)))
   --$to_bytes doesn't work when value has a decimal point,
   --https://garage.maemo.org/plugins/ggit/browse.php/?p=monky;a=commitdiff;h=174c256c81a027a2ea406f5f37dc036fac0a524b;hp=d75e2db5ed3fc788fb8514121f67316ac3e5f29f
   --http://sourceforge.net/tracker/index.php?func=detail&aid=3000865&group_id=143975&atid=757310
   --conky bug?
   --value = (conky_parse(string.format('${%s %s}', t.name, t.arg)))
   --if string.match(value,"%w") then
   -- value = conky_parse(string.format('${to_bytes %s}',value))
   --end
  else
   value = tonumber(t.arg)
  end

  if value==nil then value =0 end
  
  pct = 100*value/t.max
  pcb = 100/t.blocks
  
  cairo_set_line_width (cr, t.height)
  cairo_set_line_cap  (cr, cap)
  cairo_translate(cr,t.x,t.y)
  cairo_rotate(cr,t.angle)

  local matrix0 = cairo_matrix_t:create()
  tolua.takeownership(matrix0)
  cairo_matrix_init (matrix0, 1,t.skew_y,t.skew_x,1,0,0)
  cairo_transform(cr,matrix0)

 
  
  --call the drawing function for blocks
  if t.blocks==1 and t.angle_bar==0 then
   draw_single_bar()
   if t.reflection=="t" or t.reflection=="b" then cairo_translate(cr,0,-t.height) end
  else
   draw_multi_bar()
  end

  --dot for reminder
  --[[
  if t.blocks ~=1 then
   cairo_set_source_rgba(cr,1,0,0,1)
   cairo_arc(cr,0,t.height/2,3,0,2*math.pi)
   cairo_fill(cr)
  else
   cairo_set_source_rgba(cr,1,0,0,1)
   cairo_arc(cr,0,0,3,0,2*math.pi)
   cairo_fill(cr)
  end]]
  
  --call the drawing function for reflection and prepare the mask used  
  if t.reflection_alpha>0 and t.angle_bar==0 then
   local pat2
   local matrix1 = cairo_matrix_t:create()
   tolua.takeownership(matrix1)
   if t.angle_bar==0 then
    pts={-delta/2,(t.height+t.space)/2,t.width+delta,-(t.height+t.space)*(t.blocks)}
    if t.reflection=="t" then
     cairo_matrix_init (matrix1,1,0,0,-t.reflection_scale,0,-(t.height+t.space)*(t.blocks-0.5)*2*(t.reflection_scale+1)/2)
     pat2 = cairo_pattern_create_linear (t.width/2,-(t.height+t.space)*(t.blocks),t.width/2,(t.height+t.space)/2)
    elseif t.reflection=="r" then
     cairo_matrix_init (matrix1,-t.reflection_scale,0,0,1,delta+2*t.width,0)
     pat2 = cairo_pattern_create_linear (delta/2+t.width,0,-delta/2,0)
    elseif t.reflection=="l" then
     cairo_matrix_init (matrix1,-t.reflection_scale,0,0,1,-delta,0)
     pat2 = cairo_pattern_create_linear (-delta/2,0,delta/2+t.width,-0)
    else --bottom
     cairo_matrix_init (matrix1,1,0,0,-1*t.reflection_scale,0,(t.height+t.space)*(t.reflection_scale+1)/2)
     pat2 = cairo_pattern_create_linear (t.width/2,(t.height+t.space)/2,t.width/2,-(t.height+t.space)*(t.blocks))
    end
   end
   cairo_transform(cr,matrix1)

   if t.blocks==1 and t.angle_bar==0 then
    draw_single_bar()
    cairo_translate(cr,0,-t.height/2) 
   else
    draw_multi_bar()
   end
   
   
   cairo_set_line_width(cr,0.01)
   cairo_pattern_add_color_stop_rgba (pat2, 0,0,0,0,1-t.reflection_alpha)
   cairo_pattern_add_color_stop_rgba (pat2, t.reflection_length,0,0,0,1)
   if t.angle_bar==0 then
    cairo_rectangle(cr,pts[1],pts[2],pts[3],pts[4])
   end
   cairo_clip_preserve(cr)
   cairo_set_operator(cr,CAIRO_OPERATOR_CLEAR)
   cairo_stroke(cr)
   cairo_mask(cr,pat2)
   cairo_pattern_destroy(pat2)
   cairo_set_operator(cr,CAIRO_OPERATOR_OVER)
   
  end --reflection
  pct,pcb=nil
 end --setup_bar_graph()
 
 --start here !
 setup_bar_graph()
 cairo_restore(cr)
end
The ring lua

--[[ RINGS with SECTORS widget
 v1.1 by wlourf (07 Jan. 2011)
 this widget draws a ring with differents effects 
 http://u-scripts.blogspot.com/2010/08/rings-sectors-widgets.html
 
To call the script in a conky, use, before TEXT
 lua_load /path/to/the/script/rings.lua
 lua_draw_hook_pre main_rings
and add one line (blank or not) after TEXT


Parameters are :
3 parameters are mandatory
name  - the name of the conky variable to display,
     for example for {$cpu cpu0}, just write name="cpu"
arg   - the argument of the above variable,
     for example for {$cpu cpu0}, just write arg="cpu0"
       arg can be a numerical value if name=""
max   - the maximum value the above variable can reach,
     for example for {$cpu cpu0}, just write max=100
 
Optional parameters:
xc,yc  - coordinates of the center of the ring,
     default = middle of the conky window
radius  - external radius of the ring, in pixels,
     default = quarter of the width of the conky window
thickness - thickness of the ring, in pixels, default = 10 pixels
start_angle - starting angle of the ring, in degrees, value can be negative,
     default = 0 degree
end_angle - ending angle of the ring, in degrees,
     value must be greater than start_angle, default = 360 degrees
sectors  - number of sectors in the ring, default = 10
gap_sectors - gap between two sectors, in pixels, default = 1 pixel
cap   - the way to close a sector, available values are
    "p" for parallel , default value 
    "r" for radial (follow the radius)
inverse_arc - if set to true, arc will be anticlockwise, default=false
border_size - size of the border, in pixels, default = 0 pixel i.e. no border
fill_sector - if set to true, each sector will be completely filled,
     default=false, this parameter is inoperate if sectors=1
background - if set to false, background will not be drawn, default=true
foreground - if set to false, foreground will not be drawn, default=true

Colours tables below are defined into braces :
{position in the gradient (0 to 1), colour in hexadecimal, alpha (0 to 1)}
example for a single colour table : 
{{0,0xFFAA00,1}} position parameter doesn't matter
example for a two-colours table : 
{{0,0xFFAA00,1},{1,0x00AA00,1}} or {{0.5,0xFFAA00,1},{1,0x00AA00,1}}
example for a three-colours table : 
{{0,0xFFAA00,1},{0.5,0xFF0000,1},{1,0x00AA00,1}}

bg_colour1 - colour table for background,
     default = {{0,0x00ffff,0.1},{0.5,0x00FFFF,0.5},{1,0x00FFFF,0.1}}
fg_colour1 - colour table for foreground,
     default = {{0,0x00FF00,0.1},{0.5,0x00FF00,1},{1,0x00FF00,0.1}}
bd_colour1 - colour table for border,
     default = {{0,0xFFFF00,0.5},{0.5,0xFFFF00,1},{1,0xFFFF00,0.5}}     

Seconds tables for radials gradients :
bg_colour2 - second colour table for background, default = no second colour
fg_colour2 - second colour table for foreground, default = no second colour
bd_colour2 - second colour table for border, default = no second colour

draw_me     - if set to false, text is not drawn (default = true or 1)
              it can be used with a conky string, if the string returns 1, the text is drawn :
              example : "${if_empty ${wireless_essid wlan0}}${else}1$endif",

v1.0 (08 Aug. 2010) original release
v1.1 (07 Jan. 2011) Add draw_me parameter and correct memory leaks, thanks to "Creamy Goodness"
                    text is parsed inside the function, not in the array of settings

--      This program is free software; you can redistribute it and/or modify
--      it under the terms of the GNU General Public License as published by
--      the Free Software Foundation version 3 (GPLv3)
--     
--      This program is distributed in the hope that it will be useful,
--      but WITHOUT ANY WARRANTY; without even the implied warranty of
--      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--      GNU General Public License for more details.
--     
--      You should have received a copy of the GNU General Public License
--      along with this program; if not, write to the Free Software
--      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
--      MA 02110-1301, USA.  

]]


require 'cairo'

function conky_main_rings()
-- START PARAMETERS HERE
local rings_settings={
 --line1
 {
 name="cpu",
 arg="cpu1",
 max=100,
 xc=120,
 yc=205,
 radius=30,
 thickness=15,
 start_angle=-120,
 sectors=1,
 end_angle=120,
 bg_colour1={{0,0x0000FF,0.1},{0.5,0x0000FF,0.5},{1,0x0000FF,0.1}},
 fg_colour1={{0,0xFFFF00,0.1},{0.5,0xFFFF00,1.0},{1,0xFFFF00,0.1}},
 fg_colour2={{0,0xFF0000,0.1},{0.5,0xFF0000,1.0},{1,0xFF0000,0.1}},
 },
 {
 name="cpu",
 arg="cpu2",
 max=100,
 xc=185,
 yc=205,
 radius=30,
 thickness=15,
 start_angle=-120,
 sectors=1,
 end_angle=120,
 bg_colour1={{0,0x0000FF,0.1},{0.5,0x0000FF,0.5},{1,0x0000FF,0.1}},
 fg_colour1={{0,0xFFFF00,0.1},{0.5,0xFFFF00,1.0},{1,0xFFFF00,0.1}},
 fg_colour2={{0,0xFF0000,0.1},{0.5,0xFF0000,1.0},{1,0xFF0000,0.1}},
 },
 {
 name="cpu",
 arg="cpu3",
 max=100,
 xc=253,
 yc=205,
 radius=30,
 thickness=15,
 start_angle=-120,
 sectors=1,
 end_angle=120,
 bg_colour1={{0,0x0000FF,0.1},{0.5,0x0000FF,0.5},{1,0x0000FF,0.1}},
 fg_colour1={{0,0xFFFF00,0.1},{0.5,0xFFFF00,1.0},{1,0xFFFF00,0.1}},
 fg_colour2={{0,0xFF0000,0.1},{0.5,0xFF0000,1.0},{1,0xFF0000,0.1}},
 },
 {
 name="cpu",
 arg="cpu4",
 max=100,
 xc=320,
 yc=205,
 radius=30,
 thickness=15,
 start_angle=-120,
 sectors=1,
 end_angle=120,
 bg_colour1={{0,0x0000FF,0.1},{0.5,0x0000FF,0.5},{1,0x0000FF,0.1}},
 fg_colour1={{0,0xFFFF00,0.1},{0.5,0xFFFF00,1.0},{1,0xFFFF00,0.1}},
 fg_colour2={{0,0xFF0000,0.1},{0.5,0xFF0000,1.0},{1,0xFF0000,0.1}},
 },
 
  
}
--END OF PARAMETERS HERE

--main function

 --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)

 if tonumber(conky_parse('${updates}'))>3 then
  for i in pairs(rings_settings) do
   draw_ring(cr,rings_settings[i])
  end
 end

 cairo_destroy(cr)

end




function draw_ring(cr, t)

 local function rgba_to_r_g_b_a(tcolour)
  local colour,alpha=tcolour[2],tcolour[3]
  return ((colour / 0x10000) % 0x100) / 255., 
   ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
 end
   
   
 local function calc_delta(tcol1,tcol2)
  --calculate deltas P R G B A to table_colour 1

  for x = 1, #tcol1 do
   tcol1[x].dA = 0
   tcol1[x].dP = 0
    tcol1[x].dR = 0
   tcol1[x].dG = 0
   tcol1[x].dB = 0
   if tcol2~=nil and #tcol1 == #tcol2 then
    local r1,g1,b1,a1 = rgba_to_r_g_b_a(tcol1[x])
    local r2,g2,b2,a2 = rgba_to_r_g_b_a(tcol2[x])
    tcol1[x].dP = (tcol2[x][1]-tcol1[x][1])/t.sectors
     tcol1[x].dR = (r2-r1)/t.sectors
    tcol1[x].dG = (g2-g1)/t.sectors
    tcol1[x].dB = (b2-b1)/t.sectors
    tcol1[x].dA = (a2-a1)/t.sectors  
    
   end
  end
  
  return tcol1
 end

 --check values
 local function setup(t)
  if t.name==nil and t.arg==nil then 
   print ("No input values ... use parameters 'name'" +
    " with 'arg' or only parameter 'arg' ") 
   return
  end

  if t.max==nil then
   print ("No maximum value defined, use 'max'")
   print ("for name=" .. t.name)
   print ("with arg=" .. t.arg)
   return
  end
  if t.name==nil then t.name="" end
  if t.arg==nil then t.arg="" end

  if t.xc==nil then t.xc=conky_window.width/2 end
  if t.yc==nil then t.yc=conky_window.height/2 end
  if t.thickness ==nil then t.thickness = 10 end
  if t.radius ==nil then t.radius =conky_window.width/4 end
  if t.start_angle==nil then t.start_angle =0 end
  if t.end_angle==nil then t.end_angle=360 end
  if t.bg_colour1==nil then 
   t.bg_colour1={{0,0x00ffff,0.1},{0.5,0x00FFFF,0.5},{1,0x00FFFF,0.1}}
  end
  if t.fg_colour1==nil then
   t.fg_colour1={{0,0x00FF00,0.1},{0.5,0x00FF00,1},{1,0x00FF00,0.1}}
  end
  if t.bd_colour1==nil then
   t.bd_colour1={{0,0xFFFF00,0.5},{0.5,0xFFFF00,1},{1,0xFFFF00,0.5}}
  end
  if t.sectors==nil then t.sectors=10 end
  if t.gap_sectors==nil then t.gap_sectors=1 end 
  if t.fill_sector==nil then t.fill_sector=false end
  if t.sectors==1 then t.fill_sector=false end
  if t.border_size==nil then t.border_size=0 end
  if t.cap==nil then t.cap="p" end
  --some checks
  if t.thickness>t.radius then t.thickness=t.radius*0.1 end
  t.int_radius = t.radius-t.thickness

  --check colors tables 
  for i=1, #t.bg_colour1 do 
   if #t.bg_colour1[i]~=3 then t.bg_colour1[i]={1,0xFFFFFF,0.5} end
  end
  for i=1, #t.fg_colour1 do 
   if #t.fg_colour1[i]~=3 then t.fg_colour1[i]={1,0xFF0000,1} end
  end
  for i=1, #t.bd_colour1 do 
   if #t.bd_colour1[i]~=3 then t.bd_colour1[i]={1,0xFFFF00,1} end
  end
 
  if t.bg_colour2~=nil then
   for i=1, #t.bg_colour2 do 
    if #t.bg_colour2[i]~=3 then t.bg_colour2[i]={1,0xFFFFFF,0.5} end
   end
  end
  if t.fg_colour2~=nil then
   for i=1, #t.fg_colour2 do 
    if #t.fg_colour2[i]~=3 then t.fg_colour2[i]={1,0xFF0000,1} end
   end
  end
  if t.bd_colour2~=nil then
   for i=1, #t.bd_colour2 do 
    if #t.bd_colour2[i]~=3 then t.bd_colour2[i]={1,0xFFFF00,1} end
   end
  end  
  
  if t.start_angle>=t.end_angle then
   local tmp_angle=t.end_angle
   t.end_angle= t.start_angle
   t.start_angle = tmp_angle
   -- print ("inversed angles")
   if t.end_angle-t.start_angle>360 and t.start_angle>0 then
    t.end_angle=360+t.start_angle
    print ("reduce angles")
   end
  
   if t.end_angle+t.start_angle>360 and t.start_angle<=0 then
    t.end_angle=360+t.start_angle
    print ("reduce angles")
   end
  
   if t.int_radius<0 then t.int_radius =0 end
   if t.int_radius>t.radius then
    local tmp_radius=t.radius
    t.radius=t.int_radius
    t.int_radius=tmp_radius
    print ("inversed radius")
   end
   if t.int_radius==t.radius then
    t.int_radius=0
    print ("int radius set to 0")
   end 
  end
  
  t.fg_colour1 = calc_delta(t.fg_colour1,t.fg_colour2)
  t.bg_colour1 = calc_delta(t.bg_colour1,t.bg_colour2)
  t.bd_colour1 = calc_delta(t.bd_colour1,t.bd_colour2)
 end
 
 if t.draw_me == true then t.draw_me = nil end
 if t.draw_me ~= nil and conky_parse(tostring(t.draw_me)) ~= "1" then return end 
 --initialize table
 setup(t)
 
 --initialize cairo context
 cairo_save(cr)
 cairo_translate(cr,t.xc,t.yc)
 cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND)
 cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND)

 --get value
 local value = 0
 if t.name ~="" then
  value = tonumber(conky_parse(string.format('${%s %s}', t.name, t.arg)))
 else
  value = tonumber(t.arg)
 end
 if value==nil then value =0 end

 --initialize sectors
 --angle of a sector :
 local angleA = ((t.end_angle-t.start_angle)/t.sectors)*math.pi/180
 --value of a sector : 
 local valueA = t.max/t.sectors
 --first angle of a sector : 
 local lastAngle = t.start_angle*math.pi/180


 local function draw_sector(type_arc,angle0,angle,valpc, idx)
  
  --this function draws a portion of arc
   --type of arc, angle0 = strating angle, angle= angle of sector,
   --valpc = percentage inside the sector, idx = sctor number #
   local tcolor
   if type_arc=="bg" then   --background
    if valpc==1 then return end
    tcolor=t.bg_colour1
   elseif type_arc=="fg" then --foreground
    if valpc==0 then return end
    tcolor=t.fg_colour1
   elseif type_arc=="bd" then --border
    tcolor=t.bd_colour1
   end 

  --angles equivalents to gap_sector
  local ext_delta=math.atan(t.gap_sectors/(2*t.radius))
  local int_delta=math.atan(t.gap_sectors/(2*t.int_radius))

  --angles of arcs
  local ext_angle=(angle-ext_delta*2)*valpc
  local int_angle=(angle-int_delta*2)*valpc

  --define colours to use for this sector
  if #tcolor==1 then 
   --plain color
   local vR,vG,vB,vA = rgba_to_r_g_b_a(tcolor[1])
   cairo_set_source_rgba(cr,vR+tcolor[1].dR*idx,
         vG+tcolor[1].dG*idx,
         vB+tcolor[1].dB*idx,
         vA+tcolor[1].dA*idx )
  else
   --radient color
   local pat=cairo_pattern_create_radial(0,0,t.int_radius,0,0,t.radius)
   for i=1, #tcolor do
    local vP,vR,vG,vB,vA = tcolor[i][1], rgba_to_r_g_b_a(tcolor[i])
    cairo_pattern_add_color_stop_rgba (pat, 
         vP+tcolor[i].dP*idx,
         vR+tcolor[i].dR*idx,
         vG+tcolor[i].dG*idx,
         vB+tcolor[i].dB*idx,
         vA+tcolor[i].dA*idx )
   end
   cairo_set_source (cr, pat)
   cairo_pattern_destroy(pat)
  end

  --start drawing
   cairo_save(cr)
  --x axis is parrallel to start of sector
  cairo_rotate(cr,angle0-math.pi/2)

  local ri,re = t.int_radius ,t.radius

  --point A 
  local angle_a
 
  if t.cap == "p" then 
   angle_a = int_delta
   if t.inverse_arc and type_arc ~="bg" then
    angle_a = angle-int_angle-int_delta
   end
   if not(t.inverse_arc) and type_arc =="bg" then
    angle_a = int_delta+int_angle
   end
  else --t.cap=="r"
   angle_a = ext_delta
   if t.inverse_arc and type_arc~="bg" then
    angle_a = angle-ext_angle-ext_delta
   end
   if not(t.inverse_arc) and type_arc=="bg" then
    angle_a = ext_delta+ext_angle
   end
  end
  local ax,ay = ri*math.cos(angle_a),ri*math.sin(angle_a)


  --point B
  local angle_b = ext_delta
  if t.cap == "p" then 
   if t.inverse_arc and type_arc ~="bg" then
    angle_b = angle-ext_angle-ext_delta
   end
   if not(t.inverse_arc) and type_arc=="bg" then
    angle_b = ext_delta+ext_angle
   end
  else
   if t.inverse_arc and type_arc ~="bg" then
    angle_b = angle-ext_angle-ext_delta
   end
   if not(t.inverse_arc) and type_arc=="bg" then
    angle_b = ext_delta+ext_angle
   end
  end
  local bx,by = re*math.cos(angle_b),re*math.sin(angle_b)

  -- EXTERNAL ARC B --> C
  local b0,b1
  if t.inverse_arc then
   if type_arc=="bg" then
    b0,b1= ext_delta, angle-ext_delta-ext_angle
   else
    b0,b1= angle-ext_angle-ext_delta, angle-ext_delta
   end
  else
   if type_arc=="bg" then
    b0,b1= ext_delta+ext_angle, angle-ext_delta
   else
    b0,b1= ext_delta, ext_angle+ext_delta
   end
  end
  
  ---POINT D
  local angle_c, angle_d
  if t.cap == "p" then 
   angle_d = angle-int_delta
   if t.inverse_arc and type_arc=="bg" then
    angle_d = angle-int_delta-int_angle 
   end
   if not(t.inverse_arc) and type_arc~="bg" then
    angle_d=int_delta+int_angle
   end
  else
   angle_d = angle-ext_delta
   if t.inverse_arc and type_arc=="bg" then
    angle_d =angle-ext_delta-ext_angle
   end
   if not(t.inverse_arc) and type_arc~="bg" then
    angle_d = ext_angle+ext_delta
   end
  end
  local dx,dy = ri*math.cos(angle_d),ri*math.sin(angle_d)
  
  -- INTERNAL ARC D --> A
  local d0,d1
  if t.cap=="p" then 
   if t.inverse_arc then 
    if type_arc=="bg" then
     d0,d1= angle-int_delta-int_angle,int_delta
    else
     d0,d1= angle-int_delta, angle- int_angle-int_delta
    end
   else
    if type_arc=="bg" then
     d0,d1= angle-int_delta, int_delta+int_angle
    else
     d0,d1= int_delta+int_angle, int_delta
    end
   end
  else
   if t.inverse_arc then 
    if type_arc=="bg" then 
     d0,d1= angle-ext_delta-ext_angle,ext_delta
    else
     d0,d1= angle-ext_delta, angle- ext_angle-ext_delta
    end
   else
    if type_arc=="bg" then 
     d0,d1= angle-ext_delta,ext_delta+ext_angle
    else 
     d0,d1= ext_angle+ext_delta, ext_delta
    end
   end   
  end
   
  --draw sector
  cairo_move_to(cr,ax,ay)
  cairo_line_to(cr,bx,by)
  cairo_arc(cr,0,0,re,b0,b1)
  cairo_line_to(cr,dx,dy) 
  cairo_arc_negative(cr,0,0,ri,d0,d1)
   cairo_close_path (cr);

  --stroke or fill sector
   if type_arc=="bd" then
    cairo_set_line_width(cr,t.border_size)
    cairo_stroke(cr)
   else
    cairo_fill(cr)
   end

   cairo_restore(cr)

  end
 --draw sectors
 local n0,n1,n2 = 1,t.sectors,1
 if t.inverse_arc then n0,n1,n2 = t.sectors,1,-1 end
 local index = 0
 for i = n0,n1,n2 do 
  index = index +1
  local valueZ=1
  local cstA, cstB = (i-1),i
  if t.inverse_arc then cstA,cstB = (t.sectors-i), (t.sectors-i+1) end
  
  if value>valueA *cstA and value<valueA*cstB then
   if not t.fill_sector then
    valueZ = (value-valueA*cstA)/valueA
   end
  else
   if value<valueA*cstB then valueZ=0 end
  end
  
  local start_angle= lastAngle+(i-1)*angleA
  if t.foreground ~= false then 
   draw_sector("fg",start_angle,angleA,valueZ, index)
  end
  if t.background ~= false then 
   draw_sector("bg",start_angle,angleA,valueZ, i)
  end
  if t.border_size>0 then draw_sector("bd",start_angle,angleA,1, i) end
 end

 cairo_restore(cr)
end


--[[END OF RING-SECTORS WIDGET]]
 the background (or choose your own)
the icons..

http://www.4shared.com/zip/kZ6isXjkce/morning_light_0_2_by_inyourfac.html

you must select what you want to use..

the weather file..

http://bit.ly/1b1_12-2-14

that's all, if i miss anything let me know.

Enjoy

the credit goes to:
weather conky by TeoBigusGeekus,
Conky jed,
Morning_light_0_2_by_inyourface09,
Bargraph_widget_for_Conky_3_by_wlourf, rings_and_sectors_conky_1_1_by_wlourf,
and all that i forgot, you're the great... i'm the copy paster....


Find Us On Facebook

Related Posts Plugin for WordPress, Blogger... Linux Directory