Latest conky with lua



This is the .conkyrc
background yes
use_xft yes
xftfont Sans:bold:size=8
xftalpha 1
update_interval 1.0
total_run_times 0
own_window yes
own_window_transparent yes
own_window_conky
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
double_buffer yes
minimum_size 290 750
maximum_size 290 760
maximum_width 290
draw_shades yes
draw_outline no
draw_borders no
draw_graph_borders yes
default_color white
default_shade_color black
default_outline_color white
alignment top_left
gap_x 5
gap_y -30
no_buffers yes
uppercase no
cpu_avg_samples 2
override_utf8_locale no
lua_load /home/{link to your file}/bargraph_small.lua
lua_draw_hook_post main_bars
#
#${image ~/.conky/.images/base.png -p -10,40 -s 383x195}
#
TEXT
${goto
 32}${font openlogos:size=80}${color red}v${font}${voffset -65}${goto 
170}${font Ubuntu:Bold:size=25}${color red}${pre_exec cat /etc/*release |
 grep 'RELEASE' | awk -F'=' '{print $2}'}${color}${font}

${font sans-serif:bold:size=8}${color yellow}SYSTEM ${hr 2}$color
${font OpenLogos:size=12}${color red}t${color white}${font sans-serif:bold:size=8}${sysname} ${kernel}:$alignr$nodename
${font
 OpenLogos:size=12}${color red}Z${color white}${font 
sans-serif:bold:size=8}4x Intel(R) Core(TM) i5-2410M $alignr${freq_g 
cpu0}Ghz
${font StyleBats:size=12}${color red}q${color white}${font sans-serif:bold:size=8}Uptime:$alignr$uptime
${font Poky:size=12}${color red}y${color white}${font sans-serif:bold:size=8}File System: $alignr${fs_type}
#
${font sans-serif:bold:size=8}${color yellow}DATE ${hr 2}
${goto 30}${font RadioSpace:size=28}${time %I:%M:%S}${goto 200}${time %p}${font}
${alignc}${font sans-serif:bold:size=8}${Time %A %m/%d/%Y}$color
#
${font sans-serif:bold:size=8}${color yellow}PROCESSORS ${hr 2}$color
${voffset
 2}${font StyleBats:bold:size=9.9}${color red}k${font}${color}${font 
sans-serif:bold:size=8} CPU1${goto 57}: ${cpu cpu1}% 
${voffset 
2}${font StyleBats:bold:size=9.9}${color red}k${font}${color}${font 
sans-serif:bold:size=8} CPU2${goto 57}: ${cpu cpu2}%
${voffset 
2}${font StyleBats:bold:size=9.9}${color red}k${font}${color}${font 
sans-serif:bold:size=8} CPU3${goto 57}: ${cpu cpu3}%
${voffset 
2}${font StyleBats:bold:size=9.9}${color red}k${font}${color}${font 
sans-serif:bold:size=8} CPU4${goto 57}: ${cpu cpu4}%
${voffset 
2}${font StyleBats:size=10}${color red}l${color}${font 
sans-serif:bold:size=8} RAM${goto 57}: $memperc% ${goto 190}$mem / 
$alignr$memmax 
${voffset 2}${font StyleBats:size=9.9}${color 
red}x${font}${color}${font sans-serif:bold:size=8} DISK${goto 57}: 
${fs_used_perc /}%${goto 190}${fs_used /} / $alignr${fs_size /} 
${voffset
 2}${font StyleBats:size=9.9}${color red}x${font}${color}${font 
sans-serif:bold:size=8} SWAP${goto 57}: ${swapperc}% ${goto 190}${swap} 
${goto 240}/ $alignr${swapmax}  
#
${voffset 3}${font sans-serif:bold:size=8}${color yellow}TEMPERATURE ${voffset 2}${hr 2}$color
${voffset
 0}${goto 8}${font Weather:size=14}${color red}y${font}$color${font 
sans-serif:bold:size=8} CORE0${goto 57}: ${hwmon 1 temp 1}${iconv_start 
UTF-8 ISO_8859-1}°${iconv_stop}C
${voffset 0}${goto 8}${font 
Weather:size=14}${color red}y${font}$color${font sans-serif:bold:size=8}
 CORE1${goto 57}: ${hwmon 2 temp 1}${iconv_start UTF-8 
ISO_8859-1}°${iconv_stop}C
${voffset 0}${goto 8}${font 
Weather:size=14}${color red}y${font}$color${font sans-serif:bold:size=8}
 PCI${goto 57}: ${hwmon 1 temp 2}${iconv_start UTF-8 
ISO_8859-1}°${iconv_stop}C
${voffset 0}${goto 8}${font 
Weather:size=14}${color red}y${font}$color${font sans-serif:bold:size=8}
 ACPI${goto 57}: ${acpitemp}${iconv_start UTF-8 
ISO_8859-1}°${iconv_stop}C
#
${voffset 3}${font sans-serif:bold:size=8}${color yellow}TOP PROCESSES${goto 154}PID${goto 197}CPU%${goto 255}MEM%$color
${font
 StyleBats:size=9.9}${color red}i$color ${font 
sans-serif:bold:size=8}${top name 1} ${goto 144} ${top pid 1}${goto 
197}${top cpu 1}${goto 250}${top mem 1}
${font 
StyleBats:size=9.9}${color red}i$color ${font 
sans-serif:bold:size=8}${top name 2} ${goto 144} ${top pid 2}${goto 
197}${top cpu 2}${goto 250}${top mem 2}
${font 
StyleBats:size=9.9}${color red}i$color ${font 
sans-serif:bold:size=8}${top name 3} ${goto 144} ${top pid 3}${goto 
197}${top cpu 3}${goto 250}${top mem 3}
${font 
StyleBats:size=9.9}${color red}i$color ${font 
sans-serif:bold:size=8}${top name 4} ${goto 144} ${top pid 4}${goto 
197}${top cpu 4}${goto 250}${top mem 4}
${font 
StyleBats:size=9.9}${color red}i$color ${font 
sans-serif:bold:size=8}${top name 3} ${goto 144} ${top pid 5}${goto 
197}${top cpu 5}${goto 250}${top mem 5}
#
${voffset 3}${font sans-serif:bold:size=8}${color yellow}TOP MEMORIES${goto 154}PID${goto 197}CPU%${goto 255}MEM%$color
${voffset
 2}${font StyleBats:size=9.9}${color red}v${font}$color ${top_mem name 
1}${goto 144}${top_mem pid 1}${goto 197}${top_mem cpu 1}${goto 
250}${top_mem mem 1}
${voffset 2}${font StyleBats:size=9.9}${color 
red}v${font}$color ${top_mem name 2}${goto 144}${top_mem pid 2}${goto 
197}${top_mem cpu 2}${goto 250}${top_mem mem 2}
${voffset 2}${font 
StyleBats:size=9.9}${color red}v${font}$color ${top_mem name 3}${goto 
144}${top_mem pid 3}${goto 197}${top_mem cpu 3}${goto 250}${top_mem mem 
3}
${voffset 2}${font StyleBats:size=9.9}${color red}v${font}$color 
${top_mem name 4}${goto 144}${top_mem pid 4}${goto 197}${top_mem cpu 
4}${goto 250}${top_mem mem 4}
${voffset 2}${font 
StyleBats:size=9.9}${color red}v${font}$color ${top_mem name 5}${goto 
144}${top_mem pid 5}${goto 197}${top_mem cpu 5}${goto 250}${top_mem mem 
5}
#
${voffset 3}${font sans-serif:bold:size=8}${color yellow}NETWORK ${hr 2}$color${if_existing /proc/net/route ppp0}
${gw_iface}$alignc ....Berukband....
${voffset 2}${font PizzaDudeBullets:size=9.5}${color red}a${font}${color} Public IP: $alignr ${addr ppp0}
${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 ppp0}/s
${voffset 2}${font PizzaDudeBullets:size=9.5}${color red}N${font}${color} Uploads:${goto 237}${upspeed ppp0}/s
Total:
 Downloads:${goto 118}${color green}${totaldown ppp0}${color}${goto 185}
 Uploads:${color red}${goto 243}${totalup ppp0}${color}
#${wireless_link_qual ppp0}%
#
${else}${if_existing /proc/net/route wlan0}$
$alignc ....Wireless....
${voffset
 2}${font PizzaDudeBullets:size=9.5}${color red}a${font}${color}WAN 
IP:$alignr${execi 3600 wget -O- http://whatismyip.org/ | tail}
${voffset 2}${font PizzaDudeBullets:size=9.5}${color red}a${font}${color}IP address: $alignr ${addr wlan0}
${voffset 2}${font PizzaDudeBullets:size=9.5}${color red}a${font}${color}ESSID: $alignr ${wireless_essid wlan0}
${voffset
 2}${font PizzaDudeBullets:size=9.5}${color 
red}a${font}${color}Connection quality: $alignr 
${wireless_link_qual_perc wlan0}%
Downloads:$alignr${downspeed wlan0}/s
${downspeedgraph wlan0 20,290 F57900 FCAF3E}
Total Downloads:$alignr${totaldown wlan0}
Uploads:$alignr${upspeed wlan0}/s
${upspeedgraph wlan0 20,290 F57900 FCAF3E}
Total Uploads:$alignr${totalup wlan0}
#
${else}${if_existing /proc/net/route eth1}
$alignc ....Wireless....
WAN IP:$alignr${execi 3600 wget -O- http://whatismyip.org/ | tail}
IP address: $alignr ${addr eth1}
ESSID: $alignr ${wireless_essid eth1}
Connection quality: $alignr ${wireless_link_qual_perc eth1}%
Downloads:$alignr${downspeed eth1}/s
${downspeedgraph eth1 20,290 F57900 FCAF3E}
Total Downloads:$alignr$${totaldown eth1}
Uploads:$alignr${upspeed eth1}/s
${upspeedgraph eth1 20,290 F57900 FCAF3E}
Total Uploads:$alignr${totalup eth1}
#
${else}${if_existing /proc/net/route eth0}
$alignc ....Cable....
WAN IP:$alignr${execi 3600 wget -O- http://whatismyip.org/ | tail}
IP address: $alignr ${addr eth0}
ESSID: $alignr ${wireless_essid eth0}
Connection quality: $alignr ${wireless_link_qual_perc eth0}%
Downloads:$alignr${downspeed eth0}/s
${downspeedgraph eth1 8,290 F57900 FCAF3E}
Total Downloads:$alignr$${totaldown eth0}
Uploads:$alignr${upspeed eth0}/s
${upspeedgraph eth0 8,290 F57900 FCAF3E}
Total Uploads:$alignr${totalup eth0}
${else}${font sans-serif:bold:size=8}${font}Takdok Internet Pulok Wei${endif}
This is the lua... with the credit to the original source
i just edit a little.
#
 --[[
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={
        {    --[ Graph for CPU1 ]--
            name="cpu",
            arg="cpu1",
            max=100,
            alarm=50,
            alarm_colour={0xFF0000,0.72},
            bg_colour={0xFFFFFF,0.13},
            fg_colour={0x00FF00,0.55},
            mid_colour={{0.45,0xFFFF00,0.70}},
            x=96,y=242,
            blocks=66,
            space=1,
            height=2,width=12,
            angle=90,
            smooth=true
            },
        {    --[ Graph for CPU2 ]--
            name="cpu",
            arg="cpu2",
            max=100,
            alarm=50,
            alarm_colour={0xFF0000,0.72},
            bg_colour={0xFFFFFF,0.13},
            fg_colour={0x00FF00,0.55},
            mid_colour={{0.45,0xFFFF00,0.70}},
            x=96,y=258,
            blocks=66,
            space=1,
            height=2,width=12,
            angle=90,
            smooth=true
            },
        {    --[ Graph for CPU2 ]--
            name="cpu",
            arg="cpu3",
            max=100,
            alarm=50,
            alarm_colour={0xFF0000,0.72},
            bg_colour={0xFFFFFF,0.13},
            fg_colour={0x00FF00,0.55},
            mid_colour={{0.45,0xFFFF00,0.70}},
            x=96,y=273,
            blocks=66,
            space=1,
            height=2,width=12,
            angle=90,
            smooth=true
            },
        {    --[ Graph for CPU2 ]--
            name="cpu",
            arg="cpu4",
            max=100,
            alarm=50,
            alarm_colour={0xFF0000,0.72},
            bg_colour={0xFFFFFF,0.13},
            fg_colour={0x00FF00,0.55},
            mid_colour={{0.45,0xFFFF00,0.70}},
            x=96,y=289,
            blocks=66,
            space=1,
            height=2,width=12,
            angle=90,
            smooth=true
            },
                {    --[ Graph for Memory ]--
            name="memperc",
            arg="",
            max=100,
            alarm=50,
            alarm_colour={0xFF0000,0.72},
            bg_colour={0xFFFFFF,0.13},
            fg_colour={0x00FF00,0.55},
            mid_colour={{0.45,0xFFFF00,0.70}},
            x=96,y=305,
            blocks=66,
            space=1,
            height=2,width=12,
            angle=90,
            smooth=true
            },
        {    --[ Graph for Home ]--
            name="fs_used_perc",
            arg="/home",
            max=100,
            alarm=50,
            alarm_colour={0xFF0000,0.72},
            bg_colour={0xFFFFFF,0.13},
            fg_colour={0x00FF00,0.55},
            mid_colour={{0.45,0xFFFF00,0.70}},
            x=96,y=321,
            blocks=66,
            space=1,
            height=2,width=12,
            angle=90,
            smooth=true
            },
        {    --[ Graph for Swap ]--
            name="swapperc",
            arg="",
            max=100,
            alarm=50,
            alarm_colour={0xFF0000,0.72},
            bg_colour={0xFFFFFF,0.13},
            fg_colour={0x00FF00,0.55},
            mid_colour={{0.45,0xFFFF00,0.70}},
            x=96,y=337,
            blocks=66,
            space=1,
            height=2,width=12,
            angle=90,
            smooth=true
            },
                {    --[ Graph for hwmon temp 1 ]--
            name="hwmon 1 temp 1",
            arg="hwmon 1 temp 1",
            max=100,
            alarm=86,
            alarm_colour={0xFF0000,0.60},
            bg_colour={0xFFFFFF,0.13},
            fg_colour={0x00FF00,0.55},
            mid_colour={{0.45,0xFFFF00,0.70}},
            x=96,y=375,
            blocks=66,
                        space=1,
            height=2,width=12,
            angle=90,
                        smooth=true
            },
              {    --[ Graph for hwmon temp 1 ]--
            name="hwmon 2 temp 1",
            arg="hwmon 2 temp 1",
            max=100,
            alarm=86,
            alarm_colour={0xFF0000,0.60},
            bg_colour={0xFFFFFF,0.13},
            fg_colour={0x00FF00,0.55},
            mid_colour={{0.45,0xFFFF00,0.70}},
            x=96,y=394,
            blocks=66,
                        space=1,
            height=2,width=12,
            angle=90,
                        smooth=true
            },
        {    --[ Graph for hwmon temp 1 ]--
            name="hwmon 1 temp 2",
            arg="hwmon 1 temp 2",
            max=100,
            alarm=86,
            alarm_colour={0xFF0000,0.60},
            bg_colour={0xFFFFFF,0.13},
            fg_colour={0x00FF00,0.55},
            mid_colour={{0.45,0xFFFF00,0.70}},
            x=96,y=413,
            blocks=66,
                        space=1,
            height=2,width=12,
            angle=90,
                        smooth=true
            },
        {    --[ Graph for network ]--
            name="downspeedf",
            arg="ppp0",
            max=250,
            alarm=200,
            alarm_colour={0xFF0000,0.60},
            bg_colour={0xFFFFFF,0.13},
            fg_colour={0x00FF00,0.55},
            mid_colour={{0.45,0xFFFF00,0.70}},
            x=96,y=690,
            blocks=66,
                        space=1,
            height=2,width=12,
            angle=90,
                        smooth=true
            },
        {    --[ Graph for network ]--
            name="upspeedf",
            arg="ppp0",
            max=250,
            alarm=200,
            alarm_colour={0xFF0000,0.60},
            bg_colour={0xFFFFFF,0.13},
            fg_colour={0x00FF00,0.55},
            mid_colour={{0.45,0xFFFF00,0.70}},
            x=96,y=707,
            blocks=66,
                        space=1,
            height=2,width=12,
            angle=90,
                        smooth=true
            },
         }   
-----------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

#

put .conkyrc in home folder, make it executable
put bargraph_small.lua anywhere you like, but make sure you got the path right.
make sure you got the right font....please refer to your .conkyrc

I didn't fully make it perfect so please edit it to suit you needs.
Enjoy.

No comments:

Post a Comment

Find Us On Facebook

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