You are not logged in.

#951 2018-03-18 05:23:53

manuel-909
Member
Registered: 2017-10-09
Posts: 50

Re: Show us your conky

weather now:
2018-03-18-01-21-57_scrot.th.png

Offline

#952 2018-03-18 18:27:16

PackRat
Member
Registered: 2015-10-02
Posts: 700

Re: Show us your conky

ohnonot wrote:

hello everyone,
i need to learn some lua-conky!
could you please point me to a well-written, well-maintained conky that uses lua?

The BL conky thread

conky at deviant art

arch linux conky thread

plenty of conky with lua there.

You just looking to hack/learn some lua, or you after something in particular?

Last edited by PackRat (2018-03-18 18:27:38)


It is difficult to get a man to understand something when his salary depends upon his not understanding it.
                                                                                                                                       Upton Sinclair

Offline

#953 2018-03-18 19:31:53

loutch
Member
Registered: 2015-12-12
Posts: 202

Re: Show us your conky

unklar wrote:

Hello, loutch,

remember what you did here about system formatting?

I have

LANG=de_DE.UTF-8

and made all changes proposed by @damo. Still, I can't see any wind. The error message is always

/home/unklarer/damo-weather/lua-weather.sh: Zeile 99: printf: 12.92: Ungültige Zahl
/home/unklarer/damo-weather/lua-weather.sh: Zeile 100: printf: 50.83: Ungültige Zahl
/home/unklarer/damo-weather/lua-weather.sh: Zeile 115: printf: 15.5: Ungültige Zahl
/home/loutch/2b_Wunderground_API/scripts/lua-weather.sh: ligne 100 : printf: 7.07: nombre non valable

This is my weather.sh

#!/bin/bash
#
## lua-weather.sh by <damo> July 2016
## Adapted from bunsenweather.sh, which was based on ideas from 
## weatherbang.sh version 1.0, 2013 by Ryan Fantus
##
## Requires:
##          'jq' (sudo apt-get install jq);
##          API Key from http://openweathermap.org/api
##
## USAGE: Call this script from Conky with ( replace "<t>" with the update interval)
##          ${execpi <t> /path/to/lua-weather.sh [location]}


#### User configurables:  ##############################################

# Get API KEY by registering for one at http://openweathermap.org/api
api="xxxxxxxxxxxxxxxxxxxxxxxx"

# Either set the location manually here, or by passing it as a script parameter in the Conky.
# "yourlocation" must be a name (which doesn't have spaces), or a numeric id.
#
# id's can be obtained from http://bulk.openweathermap.org/sample/city.list.json.gz
# Download and extract the json file, then simply search for an id with grep. 
#   For example:   grep "New York" city.list.json
#
# If $place is not set, then the script attempts to get a geolocation from the IP address.
LANG="en_GB.UTF-8"
#place="$1"              # Get $place from script parameter.
place="2940132"   # Uncomment and add name or id. NB If the name has spaces, then you must use the id.

# Choose fahrenheit/Imperial or Celcius/metric:
#metric='imperial'
metric='metric'

# data file
datafile="/tmp/weather.txt"

#########################################################################
connectiontest() {
    local -i i attempts=${1-0}
    for (( i=0; i < attempts || attempts == 0; i++ )); do
        if wget -O - 'http://ftp.debian.org/debian/README' &> /dev/null; then
            return 0
        fi
        if (( i == attempts - 1 )); then # if last attempt
            return 1
        fi
    done
}

placeholder() {
    if (( $1 == 1 )) &>/dev/null;then
        echo "No internet connection"
        echo "Weather information unavailable"
    else
        echo "No API key"
        echo "Weather information unavailable"
    fi
}

if [[ $metric == metric ]] &>/dev/null;then
    scaleT="°C"
    scaleV="m/s"
else
    scaleT="°F"
    scaleV="mph"
fi

if [[ -z "$api" ]] &>/dev/null;then
    placeholder 0 && exit 1
else
    connectiontest 10
    
    # If latlong is preferred then don't set a value for $place
    if (( $? == 0 )) &>/dev/null;then
        if [[ -z $place ]] &>/dev/null;then
            # Geolocate IP:
            ipinfo=$(curl -s ipinfo.io)
            latlong=$(echo "$ipinfo" | jq -r '.loc')
            # Parse the latitude and longitude
            lat=${latlong%,*}
            long=${latlong#*,}
            location="lat=$lat&lon=$long"
        else
            # check if numeric id, or placename is being used
            [[ ${place##*[!0-9]*} ]] &>/dev/null && location="id=$place" || location="q=$place"
        fi

        # get json data from openweathermap:
        weather=$(curl -s http://api.openweathermap.org/data/2.5/weather\?APPID=$api\&"$location"\&units=$metric)
        city=$(echo "$weather" | jq -r '.name') # In case location has spaces in the name
        weather_desc=$(echo "$weather" | jq -r '.weather[0].description')   # In case description has spaces in the name

        # load values into array:
        all=($(echo "$weather" | jq -r '.coord.lon,.coord.lat,.weather[0].main,.main.temp,.main.pressure,.main.temp_min,.main.temp_max,.wind.speed,.wind.deg,.clouds.all,.sys.sunrise,.sys.sunset'))
        #                   ARRAY INDEX  0          1          2                3          4              5              6              7           8         9           10           11

        longitude=$(printf '%06.1f' ${all[0]})
        latitude=$(printf '%+.1f' ${all[1]})
        condition="${all[2]}"
        temperature=$(printf '%+.1f%s' ${all[3]} $scaleT)
        pressure=$(printf '%.f %s' ${all[4]} mb)
        temperature_min=$(printf '%+.1f%s' ${all[5]} $scaleT)
        temperature_max=$(printf '%+.1f%s' ${all[6]} $scaleT)
        cloud_cover=$(printf '%d%s' ${all[9]} %)
        sunrise=$(date -d @${all[10]} +"%R")
        sunset=$(date -d @${all[11]} +"%R")
        description="$weather_desc"
        winddir=$(printf '%3.f%s' ${all[8]} °)
        
        winddir=${all[8]}
        echo ${winddir%.*} > "$datafile"
        windspeed=$(echo ${all[7]}*1.9 | bc)
        windspeed=$(printf '%01.1f %s' "$windspeed" "kn")
        echo "$windspeed" | sed 's/,/./' >> "$datafile"
        echo "$sunrise" | sed 's/://' >> "$datafile"
        echo "$sunset" | sed 's/://'>> "$datafile"
        temp_degrees=$(printf '%.1f' ${all[3]})
        echo "$temp_degrees" >> "$datafile"
        echo "$city" >> "$datafile" 
        echo "$description" >> "$datafile"

    else
        placeholder 1
    fi
fi

exit 

Hello

Sorry i can help you ,i launch this conky & like you i have errors in konsole.

i think that the site has changed anythink

@+

Offline

#954 2018-03-19 07:14:53

ohnonot
...again
Registered: 2015-09-29
Posts: 2,558
Website

Re: Show us your conky

PackRat wrote:

You just looking to hack/learn some lua, or you after something in particular?

thanks packrat & unklar!
i want to learn some lua (with conky).
it's kind of overdue, been hacking conky for so long, never tackled lua.
in the long term i hope to visually improve my weather conky.
i was hoping there were some maintained repositories or something, but of course i'll just sift through various forum threads if there's no other way.

Offline

#955 2018-03-19 08:29:20

unklar
Member
Registered: 2015-10-31
Posts: 668

Re: Show us your conky

@loutch

Merci pour votre réponse.
Je pensais que vous aviez la solution....   big_smile


@ohnonot

I wish you success.   wink

Offline

#956 2018-03-20 00:32:01

PackRat
Member
Registered: 2015-10-02
Posts: 700

Re: Show us your conky

ohnonot wrote:

i was hoping there were some maintained repositories or something, but of course i'll just sift through various forum threads if there's no other way.

S11 came about as close to a maintained repository as it gets.

And the main conky site has some new configurations posted.


It is difficult to get a man to understand something when his salary depends upon his not understanding it.
                                                                                                                                       Upton Sinclair

Offline

#957 2018-03-20 05:46:30

ohnonot
...again
Registered: 2015-09-29
Posts: 2,558
Website

Re: Show us your conky

i haven't found any content from after 2013...
also are you sure this is actually S11's site? he's not french, and to my knowledge never claimed to be the owner.

that looks ok.
and it mentions one of the bl forum threads cool
although it's not curated afaics...

but hey, thanks for the info.

i just wanted to make sure before i start trawling various forum threads.

Offline

#958 2018-03-20 09:49:25

PackRat
Member
Registered: 2015-10-02
Posts: 700

Re: Show us your conky

^ I think that site was maintained by S11, wlorf (I think he is French), and mrpeachy. I thought there were some lua howto pages in there.

Wlorf did a lot of lua scripting in conky including interactive conky. Spot his work on DeviantArt or in a forum they're worth a look. His scripts are usually well documented.


It is difficult to get a man to understand something when his salary depends upon his not understanding it.
                                                                                                                                       Upton Sinclair

Offline

#959 2018-03-20 17:11:44

ohnonot
...again
Registered: 2015-09-29
Posts: 2,558
Website

Re: Show us your conky

ok i can see the lua stuff on pitstop now: http://conky.pitstop.free.fr/wiki/index … #Lua_Links
wlourf's blog seems to have stopped around 2011.
well, i'll see how i get started, i think i have enough now.

Offline

#960 2018-03-28 18:48:10

manuel-909
Member
Registered: 2017-10-09
Posts: 50

Re: Show us your conky

a little update on my desktop...
2018-03-28-14-45-26_scrot.th.png

Offline

#961 2018-05-14 18:10:39

unklar
Member
Registered: 2015-10-31
Posts: 668

Re: Show us your conky

This is about the radiotray-conky from @loutch

In the new helium the terminal shows me the following error:

Conky: desktop window (4a5) is root window
Conky: window type - normal
Conky: drawing to created window (0x3800002)
Conky: drawing to double buffer
sh: 1: qdbus: not found
sh: 1: qdbus: not found
sh: 1: qdbus: not found
sh: 1: qdbus: not found
...

What is different in hydrogen than here in helium, am I missing a package or have I overslept something else?
There were no problems in Hydrogen.

Offline

#962 2018-05-14 20:47:26

unklar
Member
Registered: 2015-10-31
Posts: 668

Re: Show us your conky

I was able to solve this problem with my "aunt" myself.  big_smile

It's hard to believe, but the qdbus package was simply missing in this installation of helium.

Offline

#963 2018-05-15 00:37:58

johnraff
nullglob
From: Nagoya, Japan
Registered: 2015-09-09
Posts: 4,023
Website

Re: Show us your conky

unklar wrote:

It's hard to believe, but the qdbus package was simply missing in this installation of helium.

I don't know why it would be hard to believe. qdbus was not in the Hydrogen install list either. It must have been brought in as a dependency of something you installed.


John
--------------------
( a boring Japan blog , Japan Links, idle twitterings  and GitStuff )
In case you forget, the rules.

Offline

#964 2018-05-18 09:38:09

unklar
Member
Registered: 2015-10-31
Posts: 668

Re: Show us your conky

@john
where he is right, he is right  devil

Thank you

Offline

#965 2018-05-18 11:08:22

ragamatrix
Member
Registered: 2015-10-04
Posts: 259

Re: Show us your conky

@unklar The top conky
conkyrc-v10:

conky.config = {
-- Conky configuration
-- Edited by ragamatrix 2016

-- Use Xft?
	use_xft = true,
	font = 'White Rabbit:Bold:pixel:size=8',
	xftalpha = 0.8,
	text_buffer_size = 2048,
	background = true,
-- Update interval in seconds
	update_interval = 1,
	xftalpha = 0.8,
--#############################################
--## ARGB can be used for real transparency ###
--own_window_argb_visual = true,--#
--own_window_argb_value = 0,--#
--#############################################
-- This is the number of times Conky will update before quitting.
-- Set to zero to run forever.
	total_run_times = 0,

-- Create own window instead of using desktop (required in nautilus)
	own_window = true,
	own_window_transparent = true,
	own_window_type = 'desktop',
	own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',

-- Use double buffering (reduces flicker, may not work for everyone)
	double_buffer = true,

-- Minimum size of text area
	minimum_width = 950, minimum_height = 50,

-- Draw shades?
	draw_shades = false,

-- Draw outlines?
	draw_outline = false,

-- Draw borders around text
	draw_borders = false,

-- Stippled borders?
	stippled_borders = 0,


-- own_window_colour white
--    couleurs utilisées par le script colorize.sh

-- Subtract file system buffers from used memory?
	no_buffers = true,

-- set to yes if you want all text to be in uppercase
	uppercase = false,

-- number of cpu samples to average
-- set to 1 to disable averaging
	cpu_avg_samples = 2,

-- number of net samples to average
-- set to 1 to disable averaging
	net_avg_samples = 2,

-- Force UTF8? note that UTF8 support required XFT
	override_utf8_locale = true,

-- Add spaces to keep things from moving about?  This only affects certain objects.
	use_spacer = 'none',
-- Default colors and also border colors
	default_color = '#EBF1F2',
	color1 = '#1E90FF',
	color2 = '#FF3939',
	color3 = '#696969',
	color4 = 'DeepSkyBlue',
	color5 = 'DodgerBlue3',
	color6 = '#3C3C3C',--gris foncé
	color7 = 'green3',
	color8 = '#F8F8FF',
	color9 = '#9FB6CD',--#SlateGrey
--borders
	draw_borders = false,
--border_margin 4
-- border width
	border_width = 1,
--position
	gap_x = 10,
	gap_y = 10,
	alignment = 'top_middle',

-- -- Lua load -- #
	lua_load = '/home/raphix/.conky/script/box/call_multi.lua',
	lua_draw_hook_pre = 'main',

};

conky.text = [[
${voffset 16}${color9}${font }${offset 5}CPU ${offset 45}${color9}${font Digital-7 Mono :style=Bold:size=8}${hwmon 0 temp 1}°${font }${color}${offset 5}${color9}${cpu cpu0}% \
${offset 5}MEM ${offset 45}${color9}${memperc}% \
${offset 5}HDD ${offset 45}${color9}${fs_used_perc /}% \
${offset 5}STK ${offset 45}${color9}${fs_used_perc /media/stock/}% \
${offset 5}ROOT ${offset 45}${color9}${fs_used_perc /}% \
${offset 5}SHR ${offset 45}${color9}${fs_used_perc /media/share}% \
${voffset -3}${goto 620}UP ${offset 45} ${totalup enp0s25} @ ${font }[${upspeedf enp0s25}kb/s]${color} 
${goto 621}${color9}DL ${offset 45} ${totaldown enp0s25} @ ${font }[${downspeedf enp0s25}kb/s]${color} \
${goto 835}${font }${color9}${execi 600 python /home/raphix/.conky/gmail.py > ~/.gm}${exec tail -n 1 ~/.gm} Mail(s)\
${goto 895}${voffset 2}${color9}${if_match ${exec tail -n 1 ~/.gm} >0}${color2}${endif}*\
]];

call_multi.lua:

function conky_main()

	dofile ('/home/raphix/.conky/script/box/box_HR_leds.lua')
    dofile ('/home/raphix/.conky/script/box/box_HR_graph.lua')
--dofile ('/home/raphix/.conky/script/box/netgraph.lua')
    
    
    
	
	conky_main_box()
	conky_main_bars()	
--conky_main_graph()
    
end

box_HR_graph.lua:

--[[BOX WIDGET v1.1 by Wlourf 27/01/2011
This widget can drawn some boxes, even circles in your conky window
http://u-scripts.blogspot.com/2011/01/box-widget.html)

Inspired by Background by londonali1010 (2009), thanks ;-) 

The parameters (all optionals) are :
x           - x coordinate of top-left corner of the box, default = 0 = (top-left corner of conky window)
y           - y coordinate of top-left corner of the box, default = 0 = (top-left corner of conky window)
w           - width of the box, default = width of the conky window
h           - height of the box, default = height of the conky window
corners     - corners is a table for the four corners in this order : top-left, top-right,bottom-right, bottom-left
              each corner is defined in a table with a shape and a radius, available shapes are : "curve","circle","line"
              example for the same shapes for all corners:
              { {"circle",10} }
              example for first corner different from the three others
              { {"circle",10}, {"circle",5}  }              
              example for top corners differents from bottom corners
              { {"circle",10}, {"circle",10}, {"line",0}  }   
              default = { {"line",0} } i.e=no corner
operator    - set the compositing operator (needs in the conkyrc : own_window_argb_visual yes)                          
              see http://cairographics.org/operators/
              available operators are :
              "clear","source","over","in","out","atop","dest","dest_over","dest_in","dest_out","dest_atop","xor","add","saturate"
              default = "over"
border      - if border>0, the script draws only the border, like a frame, default=0
dash        - if border>0 and dash>0, the border is draw with dashes, default=0
skew_x      - skew box around x axis, default = 0
skew_y      - skew box around y axis, default = 0
scale_x     - rescale the x axis, default=1, useful for drawing elipses ...
scale_y     - rescale the x axis, default=1
angle	    - angle of rotation of the box in degrees, default = 0
              i.e. a horizontal graph
rot_x       - x point of rotation's axis, default = 0,
              relative to top-left corner of the box, (not the conky window)
rot_y       - y point of rotation's axis, default = 0              
              relative to top-left corner of the box, (not the conky window)
draw_me     - if set to false, box is not drawn (default = true or 1)
              it can be used with a conky string, if the string returns 1, the box is drawn :
              example : "${if_empty ${wireless_essid wlan0}}${else}1$endif",              
              
linear_gradient - table with the coordinates of two points to define a linear gradient,
                  points are relative to top-left corner of the box, (not the conky window)
                  {x1,y1,x2,y2}
radial_gradient - table with the coordinates of two circle to define a radial gradient,
                  points are relative to top-left corner of the box, (not the conky window)
                  {x1,y1,r1,x2,y2,r2} (r=radius)
colour      - table of colours, default = plain white {{1,0xFFFFFF,0.5}}
              this table contains one or more tables with format {P,C,A}
              P=position of gradient (0 = start of the gradient, 1= end of the gradient)
              C=hexadecimal colour 
              A=alpha (opacity) of color (0=invisible,1=opacity 100%)
              Examples :
              for a plain color {{1,0x00FF00,0.5}}
              for a gradient with two colours {{0,0x00FF00,0.5},{1,0x000033,1}}        {x=80,y=150,w=20,h=20,
        radial_gradient={20,20,0,20,20,20},
        colour={{0.5,0xFFFFFF,1},{1,0x000000,0}},
              or {{0.5,0x00FF00,1},{1,0x000033,1}} -with this one, gradient will start in the middle
              for a gradient with three colours {{0,0x00FF00,0.5},{0.5,0x000033,1},{1,0x440033,1}}
              and so on ...



To call this script in Conky, use (assuming you have saved this script to ~/scripts/):
    lua_load ~/scripts/box.lua
    lua_draw_hook_pre main_box
    
And leave one line blank or not after TEXT

Changelog:
+ v1.0 -- Original release (19.12.2010)
+ v1.1 -- Adding parameters: operator, dash, angle, skew_x, skew_y, draw_me
          corners are described in a table

--      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.		0x000000 0x2C2C2C


]]

  
require 'cairo'
    
function conky_main_box()

    if conky_window==nil then return end
    
	---------------------- PARAMETERS BEGIN HERE
    local boxes_settings={
        {x=2,y=7,w=910,h=40, colour= { {0.5,0xBABABA,0.5}},
        corners={ {"circle",10} }, },
        {x=3,y=8,w=908,h=38, corners={ {"circle",8} },
        colour= { {0.9,0x000000,0.8}, {0.2,0x2C2C2C,0.5} },
        linear_gradient = {0,0,0,25} },
        
        }
    ---------------------------- PARAMETERS END HERE
    
    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"))<5 then return end
    for i in pairs(boxes_settings) do
        draw_box (cr,boxes_settings[i])
    end
    cairo_destroy(cr)
    cairo_surface_destroy(cs)    
end

    
function draw_box(cr,t)

	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	

    local table_corners={"circle","curve","line"}

    local t_operators={
        clear   = CAIRO_OPERATOR_CLEAR,
        source  = CAIRO_OPERATOR_SOURCE,
        over    = CAIRO_OPERATOR_OVER,
        ["in"]      = CAIRO_OPERATOR_IN,
        out     = CAIRO_OPERATOR_OUT,
        atop    = CAIRO_OPERATOR_ATOP,
        dest    = CAIRO_OPERATOR_DEST,
        dest_over   = CAIRO_OPERATOR_DEST_OVER,
        dest_in = CAIRO_OPERATOR_DEST_IN,
        dest_out = CAIRO_OPERATOR_DEST_OUT,
        dest_atop = CAIRO_OPERATOR_DEST_ATOP,
        xor = CAIRO_OPERATOR_XOR,
        add = CAIRO_OPERATOR_ADD,
        saturate =  CAIRO_OPERATOR_SATURATE,
    }
        
    function rgba_to_r_g_b_a(tc)
        --tc={position,colour,alpha}
        local colour = tc[2]
        local alpha = tc[3]
        return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
    end

    function table.copy(t)
      local t2 = {}
      for k,v in pairs(t) do
       t2[k] = {v[1],v[2]}
      end
      return t2
    end

    function draw_corner(num,t)
        local shape=t[1]
        local radius=t[2]
        local x,y = t[3],t[4]
        if shape=="line" then
            if num == 1 then cairo_line_to(cr,radius,0) 
                elseif num == 2 then cairo_line_to(cr,x,radius) 
                elseif num == 3 then cairo_line_to(cr,x-radius,y)
                elseif num == 4 then cairo_line_to(cr,0,y-radius)
            end
        end
        if shape=="circle" then
		    local PI = math.pi
           if num == 1 then cairo_arc(cr,radius,radius,radius,-PI,-PI/2)
                elseif num == 2 then cairo_arc(cr,x-radius,y+radius,radius,-PI/2,0)
                elseif num == 3 then cairo_arc(cr,x-radius,y-radius,radius,0,PI/2) 
                elseif num == 4 then cairo_arc(cr,radius,y-radius,radius,PI/2,-PI)
            end
        end
        if shape=="curve" then
            if num == 1 then cairo_curve_to(cr,0,radius ,0,0 ,radius,0) 
                elseif num == 2 then cairo_curve_to(cr,x-radius,0, x,y, x,radius)
                elseif num == 3 then cairo_curve_to(cr,x,y-radius, x,y, x-radius,y)
                elseif num == 4 then cairo_curve_to(cr,radius,y, x,y, 0,y-radius)
            end
        end        
    end   

    --check values and set default values
    if t.x == nil then t.x = 0 end
    if t.y == nil then t.y = 0 end
    if t.w == nil then t.w = conky_window.width end
    if t.h == nil then t.h = conky_window.height end
    if t.radius == nil then t.radius = 0 end
    if t.border == nil then t.border = 0 end
    if t.colour==nil then t.colour={{1,0xFFFFFF,0.5}} end
    if t.linear_gradient ~= nil then 
        if #t.linear_gradient ~= 4 then
            t.linear_gradient = {t.x,t.y,t.width,t.height}
        end
    end 
    if t.angle==nil then t.angle = 0 end

	if t.skew_x == nil then t.skew_x=0  end
	if t.skew_y == nil then  t.skew_y=0 end
	if t.scale_x==nil then t.scale_x=1 end
	if t.scale_y==nil then t.scale_y=1 end	
	if t.rot_x == nil then t.rot_x=0  end
	if t.rot_y == nil then  t.rot_y=0 end
    
    if t.operator == nil then t.operator = "over" end
    if (t_operators[t.operator]) == nil then
        print ("wrong operator :",t.operator)
        t.operator = "over"
    end
    
    if t.radial_gradient ~= nil then 
        if #t.radial_gradient ~= 6 then
            t.radial_gradient = {t.x,t.y,0, t.x,t.y, t.width}
        end
    end 
    
    for i=1, #t.colour do    
        if #t.colour[i]~=3 then 
            print ("error in color table")
            t.colour[i]={1,0xFFFFFF,1} 
        end
    end

    if t.corners == nil then t.corners={ {"line",0} } end
    local t_corners = {}
    local t_corners = table.copy(t.corners)
    --don't use t_corners=t.corners otherwise t.corners is altered

    --complete the t_corners table if needed
    for i=#t_corners+1,4 do    
        t_corners[i]=t_corners[#t_corners]
        local flag=false
        for j,v in pairs(table_corners) do flag=flag or (t_corners[i][1]==v) end 
        if not flag then print ("error in corners table :",t_corners[i][1]);t_corners[i][1]="curve"  end
    end

    --this way :    
    --    t_corners[1][4]=x    
    --    t_corners[2][3]=y
    --doesn't work
    t_corners[1]={t_corners[1][1],t_corners[1][2],0,0}
    t_corners[2]={t_corners[2][1],t_corners[2][2],t.w,0}
    t_corners[3]={t_corners[3][1],t_corners[3][2],t.w,t.h}    
    t_corners[4]={t_corners[4][1],t_corners[4][2],0,t.h}        

    t.no_gradient = (t.linear_gradient == nil ) and (t.radial_gradient == nil )

    cairo_save(cr)
    cairo_translate(cr, t.x, t.y)
    if t.rot_x~=0 or t.rot_y~=0 or t.angle~=0 then
        cairo_translate(cr,t.rot_x,t.rot_y)
        cairo_rotate(cr,t.angle*math.pi/180)
        cairo_translate(cr,-t.rot_x,-t.rot_y)
    end
    if t.scale_x~=1 or t.scale_y~=1 or t.skew_x~=0 or t.skew_y~=0 then
	    local matrix0 = cairo_matrix_t:create()
	    tolua.takeownership(matrix0)
	    cairo_matrix_init (matrix0, t.scale_x,math.pi*t.skew_y/180	, math.pi*t.skew_x/180	,t.scale_y,0,0)
	    cairo_transform(cr,matrix0)    
    end
    
    local tc=t_corners
    cairo_move_to(cr,tc[1][2],0)
    cairo_line_to(cr,t.w-tc[2][2],0)
    draw_corner(2,tc[2])
    cairo_line_to(cr,t.w,t.h-tc[3][2])
    draw_corner(3,tc[3])
    cairo_line_to(cr,tc[4][2],t.h)
    draw_corner(4,tc[4])
    cairo_line_to(cr,0,tc[1][2])
    draw_corner(1,tc[1])
    
    if t.no_gradient then
        cairo_set_source_rgba(cr,rgba_to_r_g_b_a(t.colour[1]))
    else
        if t.linear_gradient ~= nil then
            pat = cairo_pattern_create_linear (t.linear_gradient[1],t.linear_gradient[2],t.linear_gradient[3],t.linear_gradient[4])
        elseif t.radial_gradient ~= nil then
            pat = cairo_pattern_create_radial (t.radial_gradient[1],t.radial_gradient[2],t.radial_gradient[3],
            	t.radial_gradient[4],t.radial_gradient[5],t.radial_gradient[6])
        end
        for i=1, #t.colour do
            cairo_pattern_add_color_stop_rgba (pat, t.colour[i][1], rgba_to_r_g_b_a(t.colour[i]))
        end
        cairo_set_source (cr, pat)
        cairo_pattern_destroy(pat)
    end 
     
    cairo_set_operator(cr,t_operators[t.operator]) 

    if t.border>0 then
        cairo_close_path(cr)
        if t.dash ~= nil then cairo_set_dash(cr, t.dash, 1, 0.0) end
        cairo_set_line_width(cr,t.border)
        cairo_stroke(cr)
    else
        cairo_fill(cr)
    end

    cairo_restore(cr)
end

box_HR_leds.lua:

--[[ BARGRAPH WIDGET
	v2.1 by wlourf (07 Jan. 2011)
	edited by Caymus
	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 /path/to/the/script/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 colurs 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, parallelel, 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 avaimable 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
					  calues 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={
		
	{
			name="fs_used_perc",
			arg="/",
			max=100,
			alarm=80,
			bg_colour={0xFFFFFF,0.25},
			fg_colour={0xFFFFFF,1},
			alarm_colour={0xff0000,1},
			x=447,y=25,
			blocks=13,
			height=1,width=2,
			angle=90,
			smooth=false,
			cap="e",
			skew_y=5,
			mid_colour={{0.5,0x9FB6CD,1}},
		},
--sdb1
{
			name="fs_used_perc",
			arg="/media/share",
			max=100,
			alarm=80,
			bg_colour={0xFFFFFF,0.25},
			fg_colour={0xFFFFFF,1},
			alarm_colour={0xff0000,1},
			x=545,y=25,
			blocks=13,
			height=1,width=2,
			angle=90,
			smooth=false,
			cap="e",
			skew_y=5,
			mid_colour={{0.5,0x9FB6CD,1}},
		},				
--sdb3
{
			name="fs_used_perc",
			arg="/media/stock",
			max=100,
			alarm=80,
			bg_colour={0xFFFFFF,0.25},
			fg_colour={0xFFFFFF,1},
			alarm_colour={0xff0000,1},
			x=342,y=25,
			blocks=13,
			height=1,width=2,
			angle=90,
			smooth=false,
			cap="e",
			skew_y=5,
			mid_colour={{0.5,0x9FB6CD,1}},
		},				
		{
			name="cpu",
			arg="cpu1",
			max=100,
			alarm=80,
			bg_colour={0xFFFFFF,0.25},
			fg_colour={0xFFFFFF,1},
			alarm_colour={0xff0000,1},
			x=33,y=25,
			blocks=13,
			height=1,width=2,
			angle=90,
			smooth=false,
			cap="e",
			skew_y=5,
			mid_colour={{0.5,0x9FB6CD,1}},
		},				
		
		{
			name="memperc",
			arg="%S",
			max=100,
			alarm=80,
			bg_colour={0xFFFFFF,0.25},
			fg_colour={0xFFFFFF,1},
			alarm_colour={0xff0000,1},
			x=148,y=25,
			blocks=13,
			height=1,width=2,
			angle=90,
			smooth=true,
			cap="e",
			skew_y=5,
			mid_colour={{0.5,0x9FB6CD,1}},
		},		
	{
			name="fs_used_perc",
			arg="/home",
			max=100,
			alarm=80,
			bg_colour={0xFFFFFF,0.25},
			fg_colour={0xFFFFFF,1},
			alarm_colour={0xff0000,1},
			x=244,y=25,
			blocks=13,
			height=1,width=2,
			angle=90,
			smooth=true,
			cap="e",
			skew_y=5,
			mid_colour={{0.5,0x9FB6CD,1}},
		},

			
	{
			name="downspeedf",
			arg="enp0s25",
			max=500,
			alarm=250,
			bg_colour={0xFFFFFF,0.25},
			fg_colour={0xFFFFFF,1},
			alarm_colour={0xff0000,1},
			x=639,y=33,
			blocks=13,
			height=1,width=2,
			angle=90,
			smooth=true,
			cap="e",
			skew_y=5,
			mid_colour={{0.5,0x9FB6CD,1}},
		},

				{
			name="upspeedf",
			arg="enp0s25",
			max=500,
			alarm=250,
			bg_colour={0xFFFFFF,0.25},
			fg_colour={0xFFFFFF,1},
			alarm_colour={0xff0000,1},
			x=639,y=23,
			blocks=13,
			height=1,width=2,
			angle=90,
			smooth=true,
			cap="e",
			skew_y=5,
			mid_colour={{0.5,0x9FB6CD,1}},
		},
		
						
	}
	
-----------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

function conky_main_box()

    if conky_window==nil then return end
    
	---------------------- PARAMETERS BEGIN HERE
    local boxes_settings={
	{x=0,y=50,w=200,h=60, corners={ {"circle",10} },colour={ {0,0x1F1F1F,0.5} },operator="atop" } ,
	{x=0,y=195,w=200,h=60, corners={ {"circle",10} },colour={ {0,0x1F1F1F,0.5} },operator="atop" } ,
	{x=0,y=320,w=200,h=60, corners={ {"circle",10} },colour={ {0,0x1F1F1F,0.5} },operator="atop" } ,
	{x=0,y=410,w=200,h=60, corners={ {"circle",10} },colour={ {0,0x1F1F1F,0.5} },operator="atop" } ,
	{x=0,y=520,w=200,h=60, corners={ {"circle",10} },colour={ {0,0x1F1F1F,0.5} },operator="atop" } ,
	{x=0,y=615,w=200,h=150, corners={ {"circle",10} },colour={ {0,0x1F1F1F,0.5} },operator="atop" } ,
    }


    ---------------------------- PARAMETERS END HERE
    
    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"))<5 then return end
    for i in pairs(boxes_settings) do
        draw_box (cr,boxes_settings[i])
    end
    cairo_destroy(cr)
    cairo_surface_destroy(cs)    
end

    
function draw_box(cr,t)

	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	

    local table_corners={"circle","curve","line"}

    local t_operators={
        clear   = CAIRO_OPERATOR_CLEAR,
        source  = CAIRO_OPERATOR_SOURCE,
        over    = CAIRO_OPERATOR_OVER,
        ["in"]      = CAIRO_OPERATOR_IN,
        out     = CAIRO_OPERATOR_OUT,
        atop    = CAIRO_OPERATOR_ATOP,
        dest    = CAIRO_OPERATOR_DEST,
        dest_over   = CAIRO_OPERATOR_DEST_OVER,
        dest_in = CAIRO_OPERATOR_DEST_IN,
        dest_out = CAIRO_OPERATOR_DEST_OUT,
        dest_atop = CAIRO_OPERATOR_DEST_ATOP,
        xor = CAIRO_OPERATOR_XOR,
        add = CAIRO_OPERATOR_ADD,
        saturate =  CAIRO_OPERATOR_SATURATE,
    }
        
    function rgba_to_r_g_b_a(tc)
        --tc={position,colour,alpha}
        local colour = tc[2]
        local alpha = tc[3]
        return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
    end

    function table.copy(t)
      local t2 = {}
      for k,v in pairs(t) do
       t2[k] = {v[1],v[2]}
      end
      return t2
    end

    function draw_corner(num,t)
        local shape=t[1]
        local radius=t[2]
        local x,y = t[3],t[4]
        if shape=="line" then
            if num == 1 then cairo_line_to(cr,radius,0) 
                elseif num == 2 then cairo_line_to(cr,x,radius) 
                elseif num == 3 then cairo_line_to(cr,x-radius,y)
                elseif num == 4 then cairo_line_to(cr,0,y-radius)
            end
        end
        if shape=="circle" then
		    local PI = math.pi
           if num == 1 then cairo_arc(cr,radius,radius,radius,-PI,-PI/2)
                elseif num == 2 then cairo_arc(cr,x-radius,y+radius,radius,-PI/2,0)
                elseif num == 3 then cairo_arc(cr,x-radius,y-radius,radius,0,PI/2) 
                elseif num == 4 then cairo_arc(cr,radius,y-radius,radius,PI/2,-PI)
            end
        end
        if shape=="curve" then
            if num == 1 then cairo_curve_to(cr,0,radius ,0,0 ,radius,0) 
                elseif num == 2 then cairo_curve_to(cr,x-radius,0, x,y, x,radius)
                elseif num == 3 then cairo_curve_to(cr,x,y-radius, x,y, x-radius,y)
                elseif num == 4 then cairo_curve_to(cr,radius,y, x,y, 0,y-radius)
            end
        end        
    end   

    --check values and set default values
    if t.x == nil then t.x = 0 end
    if t.y == nil then t.y = 0 end
    if t.w == nil then t.w = conky_window.width end
    if t.h == nil then t.h = conky_window.height end
    if t.radius == nil then t.radius = 0 end
    if t.border == nil then t.border = 0 end
    if t.colour==nil then t.colour={{1,0xFFFFFF,0.5}} end
    if t.linear_gradient ~= nil then 
        if #t.linear_gradient ~= 4 then
            t.linear_gradient = {t.x,t.y,t.width,t.height}
        end
    end 
    if t.angle==nil then t.angle = 0 end

	if t.skew_x == nil then t.skew_x=0  end
	if t.skew_y == nil then  t.skew_y=0 end
	if t.scale_x==nil then t.scale_x=1 end
	if t.scale_y==nil then t.scale_y=1 end	
	if t.rot_x == nil then t.rot_x=0  end
	if t.rot_y == nil then  t.rot_y=0 end
    
    if t.operator == nil then t.operator = "over" end
    if (t_operators[t.operator]) == nil then
        print ("wrong operator :",t.operator)
        t.operator = "over"
    end
    
    if t.radial_gradient ~= nil then 
        if #t.radial_gradient ~= 6 then
            t.radial_gradient = {t.x,t.y,0, t.x,t.y, t.width}
        end
    end 
    
    for i=1, #t.colour do    
        if #t.colour[i]~=3 then 
            print ("error in color table")
            t.colour[i]={1,0xFFFFFF,1} 
        end
    end

    if t.corners == nil then t.corners={ {"line",0} } end
    local t_corners = {}
    local t_corners = table.copy(t.corners)
    --don't use t_corners=t.corners otherwise t.corners is altered

    --complete the t_corners table if needed
    for i=#t_corners+1,4 do    
        t_corners[i]=t_corners[#t_corners]
        local flag=false
        for j,v in pairs(table_corners) do flag=flag or (t_corners[i][1]==v) end 
        if not flag then print ("error in corners table :",t_corners[i][1]);t_corners[i][1]="curve"  end
    end

    --this way :    
    --    t_corners[1][4]=x    
    --    t_corners[2][3]=y
    --doesn't work
    t_corners[1]={t_corners[1][1],t_corners[1][2],0,0}
    t_corners[2]={t_corners[2][1],t_corners[2][2],t.w,0}
    t_corners[3]={t_corners[3][1],t_corners[3][2],t.w,t.h}    
    t_corners[4]={t_corners[4][1],t_corners[4][2],0,t.h}        

    t.no_gradient = (t.linear_gradient == nil ) and (t.radial_gradient == nil )

    cairo_save(cr)
    cairo_translate(cr, t.x, t.y)
    if t.rot_x~=0 or t.rot_y~=0 or t.angle~=0 then
        cairo_translate(cr,t.rot_x,t.rot_y)
        cairo_rotate(cr,t.angle*math.pi/180)
        cairo_translate(cr,-t.rot_x,-t.rot_y)
    end
    if t.scale_x~=1 or t.scale_y~=1 or t.skew_x~=0 or t.skew_y~=0 then
	    local matrix0 = cairo_matrix_t:create()
	    tolua.takeownership(matrix0)
	    cairo_matrix_init (matrix0, t.scale_x,math.pi*t.skew_y/180	, math.pi*t.skew_x/180	,t.scale_y,0,0)
	    cairo_transform(cr,matrix0)    
    end
    
    local tc=t_corners
    cairo_move_to(cr,tc[1][2],0)
    cairo_line_to(cr,t.w-tc[2][2],0)
    draw_corner(2,tc[2])
    cairo_line_to(cr,t.w,t.h-tc[3][2])
    draw_corner(3,tc[3])
    cairo_line_to(cr,tc[4][2],t.h)
    draw_corner(4,tc[4])
    cairo_line_to(cr,0,tc[1][2])
    draw_corner(1,tc[1])
    
    if t.no_gradient then
        cairo_set_source_rgba(cr,rgba_to_r_g_b_a(t.colour[1]))
    else
        if t.linear_gradient ~= nil then
            pat = cairo_pattern_create_linear (t.linear_gradient[1],t.linear_gradient[2],t.linear_gradient[3],t.linear_gradient[4])
        elseif t.radial_gradient ~= nil then
            pat = cairo_pattern_create_radial (t.radial_gradient[1],t.radial_gradient[2],t.radial_gradient[3],
            	t.radial_gradient[4],t.radial_gradient[5],t.radial_gradient[6])
        end
        for i=1, #t.colour do
            cairo_pattern_add_color_stop_rgba (pat, t.colour[i][1], rgba_to_r_g_b_a(t.colour[i]))
        end
        cairo_set_source (cr, pat)
        cairo_pattern_destroy(pat)
    end 
     
    cairo_set_operator(cr,t_operators[t.operator]) 

    if t.border>0 then
        cairo_close_path(cr)
        if t.dash ~= nil then cairo_set_dash(cr, t.dash, 1, 0.0) end
        cairo_set_line_width(cr,t.border)
        cairo_stroke(cr)
    else
        cairo_fill(cr)
    end

    cairo_restore(cr)
end

gmail.py:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import sys, imaplib

port = 993
server = 'imap.gmail.com'

username = 'agentSmith@gmail.com'
passwd = '50cl=1Pint'

imap_server = imaplib.IMAP4_SSL(server, port)
try:
    imap_server.login(username, passwd)
except:
    print('?? new')
    sys.exit( 1 )

typ, data = imap_server.select ('Inbox', True)
if typ == 'OK':
    total = int(data[0])
    typ, data = imap_server.search (None, 'SEEN')
    if typ == 'OK':
        seen = len(data[0].split())
        print('{}'.format(total - seen))

if typ != 'OK':
    print('?? new')

imap_server.logout()

and modify your pathes in the differents configs, that all wink and take the White Rabbit font or change it

Last edited by ragamatrix (2018-05-18 11:11:31)

Offline

#966 2018-05-18 19:43:10

unklar
Member
Registered: 2015-10-31
Posts: 668

Re: Show us your conky

@ragamatrix

Bonjour mon ami,
merci de partager vos fichiers, ils sont entre de bonnes mains.   cool  wink

Offline

#967 2018-05-19 20:54:04

altman
Member
From: Canada
Registered: 2015-10-24
Posts: 122

Re: Show us your conky

Nice Conkies fellas !


HP Pavilion dv7 Notebook/Intel Core i7-2670QM/ BunsenLab Helium
Dell Inspiron 1720/Intel Core2 Duo T5450/ ArchLabs 2018.05

Offline

#968 2018-05-24 07:18:49

Hervé Moustache
New Member
Registered: 2018-05-24
Posts: 1

Re: Show us your conky

Hi Everybody!

I've just made one of my first (more or less) usefull script for conky.
It shows yours Strava (kind of sport social network) info on your desktop.
The script is not as clean as I would like but I'll work on it and at least it works.
On Github
Here it is:
7ca069459500f2a17c9e4f22ff396485.th.png

The Script:

#!/bin/bash
#
#   stravonky.sh: a strava script for conky (or others) 
#   Copyright (C) 2018 Hervé Moustache
#
#   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, either version 3 of the License, or
#   (at your option) any later version.
#
#   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, see <http://www.gnu.org/licenses/>.

#version 2018-05-24-08-20

##### TO DO #####
#- Read athlete_id/access_token/cliend_id/client_secret from a file
#- Obtain an access_token if needed
#- Verify if the athlete_id & the access_token are well linked
#- Get the names of the JSON variables in a proper way (curl | jq -> in array | 2 bash arrays ?)
#- Change time/distance/speed scale in a proper way
#- Chose which stats to show in a proper way

## Requires:
##          'jq' (sudo apt install jq);
##          API Keys from Strava (https://strava.com/settings/api)
##

#### Athlete id & access_token from Strava ###
#athlete_id as a number, access_token as a sentence (with quotes'')
athlete_id=
access_token=

#########################################################################
connectiontest() {
    local -i i attempts=${1-0}
    for (( i=0; i < attempts || attempts == 0; i++ )); do
        if wget -O - 'http://ftp.debian.org/debian/README' &> /dev/null; then
            return 0
        fi
        if (( i == attempts - 1 )); then # if last attempt
            return 1
        fi
    done
}

placeholder() {
    if (( $1 == 1 )) &>/dev/null;then
        echo "No internet connection"
        echo "Strava information unavailable"
    else
        echo "No API key"
        echo "Strava information unavailable"
    fi
}


#### Scale to show ####
#/!\ not finished yet. Do not convert, only change few names print, the other have to be changed manually (watch below)
scalet="h"

if [[ $metric == metric ]] &>/dev/null;then
    scaleD="m"
    scaleV="m/s"
else
    scaleT="miles"
    scaleV="mph"
fi


#
if [[ -z "$access_token" ]] || [[ -z "$athlete_id" ]] &>/dev/null;then
    placeholder 0 && exit 1
else
    connectiontest 10

    
    if (( $? == 0 )) &>/dev/null;then
        

        # get json data from strava:
        athlete_stats=$(curl -s https://www.strava.com/api/v3/athletes/$athlete_id/stats\?access_token=$access_token)
   
        # load values into array:
        #               	    ARRAY INDEX  0          1          2                3          4              5              6              7           8         9           10           11          12 -> 49
		all=($(echo "$athlete_stats" | jq -r '.biggest_ride_distance,.biggest_climb_elevation_gain,.recent_ride_totals.count,.recent_ride_totals.distance,.recent_ride_totals.moving_time,.recent_ride_totals.elapsed_time,.recent_ride_totals.elevation_gain,.recent_ride_totals.achievement_count,.recent_run_totals.count,.recent_run_totals.distance,.recent_run_totals.moving_time,.recent_run_totals.elapsed_time,.recent_run_totals.elevation_gain,.recent_run_totals.achievement_count,.recent_swim_totals.count,.recent_swim_totals.distance,.recent_swim_totals.moving_time,.recent_swim_totals.elapsed_time,.recent_swim_totals.elevation_gain,.recent_swim_totals.achievement_count,.ytd_ride_totals.count,.ytd_ride_totals.distance,.ytd_ride_totals.moving_time,.ytd_ride_totals.elapsed_time,.ytd_ride_totals.elevation_gain,.ytd_run_totals.count,.ytd_run_totals.distance,.ytd_run_totals.moving_time,.ytd_run_totals.elapsed_time,.ytd_run_totals.elevation_gain,.ytd_swim_totals.count,.ytd_swim_totals.distance,.ytd_swim_totals.moving_time,.ytd_swim_totals.elapsed_time,.ytd_swim_totals.elevation_gain,.all_ride_totals.count,.all_ride_totals.distance,.all_ride_totals.moving_time,.all_ride_totals.elapsed_time,.all_ride_totals.elevation_gain,.all_run_totals.count,.all_run_totals.distance,.all_run_totals.moving_time,.all_run_totals.elapsed_time,.all_run_totals.elevation_gain,.all_swim_totals.count,.all_swim_totals.distance,.all_swim_totals.moving_time,.all_swim_totals.elapsed_time,.all_swim_totals.elevation_gain'))
		
		#Fix an issue due the figures after the dot
		for i in `seq 0 49`;
		do
			all[$i]=${all[$i]%.*}
		done
				
		#converting m in km
		let "all[0] = all[0] / 1000"
		let "all[9] = all[9] / 1000"
		let "all[15] = all[15] / 1000"
		let "all[21] = all[21] / 1000"
		let "all[26] = all[26] / 1000"
		let "all[31] = all[31] / 1000"
		let "all[36] = all[36] / 1000"
		let "all[41] = all[41] / 1000"
		let "all[46] = all[46] / 1000"
		
		#converting s in hour
		let "all[10] = all[10] / 3600"
		let "all[11] = all[11] / 3600"
		let "all[16] = all[16] / 3600"
		let "all[17] = all[17] / 3600"
		let "all[22] = all[22] / 3600"
		let "all[23] = all[23] / 3600"
		let "all[27] = all[27] / 3600"
		let "all[28] = all[28] / 3600"
		let "all[32] = all[32] / 3600"
		let "all[33] = all[33] / 3600"
		let "all[37] = all[37] / 3600"
		let "all[38] = all[38] / 3600"
		let "all[38] = all[38] / 3600"
		let "all[42] = all[42] / 3600"
		let "all[43] = all[43] / 3600"
		let "all[47] = all[47] / 3600"
		let "all[48] = all[48] / 3600"
		
		#building sentences
		biggest_ride_distance=$(printf '%g km' ${all[0]})
		biggest_climb_elevation_gain=$(printf '%g %s' ${all[1]} $scaleD)
		recent_ride_totals__count=$(printf '%g' ${all[2]})
		recent_ride_totals__distance=$(printf '%g km' ${all[3]})
		recent_ride_totals__moving_time=$(printf '%d%s' ${all[4]} $scalet)
		recent_ride_totals__elapsed_time=$(printf '%g %s' ${all[5]} $scalet)
		recent_ride_totals__elevation_gain=$(printf '%g %s' ${all[6]} $scaleD)
		recent_ride_totals__achievement_count=$(printf '%g %s' ${all[7]})
		recent_run_totals__count=$(printf '%g' ${all[8]})
		recent_run_totals__distance=$(printf '%g km' ${all[9]})
		recent_run_totals__moving_time=$(printf '%g %s' ${all[10]} $scalet)
		recent_run_totals__elapsed_time=$(printf '%g %s' ${all[11]} $scalet)
		recent_run_totals__elevation_gain=$(printf '%g %s' ${all[12]} $scaleD)
		recent_run_totals__achievement_count=$(printf '%g %s' ${all[13]})
		recent_swim_totals__count=$(printf '%g' ${all[14]})
		recent_swim_totals__distance=$(printf '%g km' ${all[15]})
		recent_swim_totals__moving_time=$(printf '%g %s' ${all[16]} $scalet)
		recent_swim_totals__elapsed_time=$(printf '%g %s' ${all[17]} $scalet)
		recent_swim_totals__elevation_gain=$(printf '%g %s' ${all[18]} $scaleD)
		recent_swim_totals__achievement_count=$(printf '%g %s' ${all[19]} )
		ytd_ride_totals__count=$(printf '%g' ${all[20]})
		ytd_ride_totals__distance=$(printf '%g km' ${all[21]})
		ytd_ride_totals__moving_time=$(printf '%g %s' ${all[22]} $scalet)
		ytd_ride_totals__elapsed_time=$(printf '%g %s' ${all[23]} $scalet)
		ytd_ride_totals__elevation_gain=$(printf '%g %s' ${all[24]} $scaleD)
		ytd_run_totals__count=$(printf '%g' ${all[25]})
		ytd_run_totals__distance=$(printf '%g km' ${all[26]})
		ytd_run_totals__moving_time=$(printf '%g %s' ${all[27]} $scalet)
		ytd_run_totals__elapsed_time=$(printf '%g %s' ${all[28]} $scalet)
		ytd_run_totals__elevation_gain=$(printf '%g %s' ${all[29]} $scaleD)
		ytd_swim_totals__count=$(printf '%g' ${all[30]})
		ytd_swim_totals__distance=$(printf '%g km' ${all[31]})
		ytd_swim_totals__moving_time=$(printf '%g %s' ${all[32]} $scalet)
		ytd_swim_totals__elapsed_time=$(printf '%g %s' ${all[33]} $scalet)
		ytd_swim_totals__elevation_gain=$(printf '%g %s' ${all[34]} $scaleD)
		all_ride_totals__count=$(printf '%g' ${all[35]})
		all_ride_totals__distance=$(printf '%g km' ${all[36]})
		all_ride_totals__moving_time=$(printf '%g %s' ${all[37]} $scalet)
		all_ride_totals__elapsed_time=$(printf '%g %s' ${all[38]} $scalet)
		all_ride_totals__elevation_gain=$(printf '%g %s' ${all[39]} $scaleD)
		all_run_totals__count=$(printf '%g' ${all[40]})
		all_run_totals__distance=$(printf '%g km' ${all[41]})
		all_run_totals__moving_time=$(printf '%g %s' ${all[42]} $scalet)
		all_run_totals__elapsed_time=$(printf '%g %s' ${all[43]} $scalet)
		all_run_totals__elevation_gain=$(printf '%g %s' ${all[44]} $scaleD)
		all_swim_totals__count=$(printf '%g' ${all[45]})
		all_swim_totals__distance=$(printf '%g km' ${all[46]})
		all_swim_totals__moving_time=$(printf '%g %s' ${all[47]} $scalet)
		all_swim_totals__elapsed_time=$(printf '%g %s' ${all[48]} $scalet)
		all_swim_totals__elevation_gain=$(printf '%g %s' ${all[49]} $scaleD)
		
		#Final show: Comment lines you don't need
        printf "Biggest ride distance: %s\n" "$biggest_ride_distance"
        printf "Biggest climb elevation: %s\n" "$biggest_climb_elevation_gain"
        #printf ": %s\n" "$recent_ride_totals__count"
		printf "Recent ride distance: %s\n" "$recent_ride_totals__distance"
		printf "Recent ride moving time: %s\n" "$recent_ride_totals__moving_time"
		#printf ": %s\n" "$recent_ride_totals__elapsed_time"
		printf "Recent ride elevation gain: %s\n" "$recent_ride_totals__elevation_gain"
		#printf ": %s\n" "$recent_ride_totals__achievement_count"
		#printf ": %s\n" "$recent_run_totals__count"
		printf "Recent run distance: %s\n" "$recent_run_totals__distance"
		printf "Recent run moving time: %s\n" "$recent_run_totals__moving_time"
		#printf ": %s\n" "$recent_run_totals__elapsed_time"
		printf "Recent run elevation gain: %s\n" "$recent_run_totals__elevation_gain"
		#printf ": %s\n" "$recent_run_totals__achievement_count"
		#printf ": %s\n" "$recent_swim_totals__count"
		#printf ": %s\n" "$recent_swim_totals__distance"
		#printf ": %s\n" "$recent_swim_totals__moving_time"
		#printf ": %s\n" "$recent_swim_totals__elapsed_time"
		#printf ": %s\n" "$recent_swim_totals__elevation_gain"
		#printf ": %s\n" "$recent_swim_totals__achievement_count"
		printf "Year total rides: %s\n" "$ytd_ride_totals__count"
		printf "Year total ride distance: %s\n" "$ytd_ride_totals__distance"
		printf "Year total ride moving time: %s\n" "$ytd_ride_totals__moving_time"
		#printf ": %s\n" "$ytd_ride_totals__elapsed_time"
		printf "Year total ride elevation gain: %s\n" "$ytd_ride_totals__elevation_gain"
		#printf ": %s\n" "$ytd_run_totals__count"
		printf "Year total run distance: %s\n" "$ytd_run_totals__distance"
		printf "Year total run moving time: %s\n" "$ytd_run_totals__moving_time"
		#printf ": %s\n" "$ytd_run_totals__elapsed_time"
		printf "Year total run elevation gain: %s\n" "$ytd_run_totals__elevation_gain"
		#printf ": %s\n" "$ytd_swim_totals__count"
		#printf ": %s\n" "$ytd_swim_totals__distance"
		#printf ": %s\n" "$ytd_swim_totals__moving_time"
		#printf ": %s\n" "$ytd_swim_totals__elapsed_time"
		#printf ": %s\n" "$ytd_swim_totals__elevation_gain"
		printf "All ride count: %s\n" "$all_ride_totals__count"
		printf "All ride distance: %s\n" "$all_ride_totals__distance"
		printf "All ride moving time: %s\n" "$all_ride_totals__moving_time"
		#printf ": %s\n" "$all_ride_totals__elapsed_time"
		printf "All ride elevation gain: %s\n" "$all_ride_totals__elevation_gain"
		#printf ": %s\n" "$all_run_totals__count"
		printf "All run distance: %s\n" "$all_run_totals__distance"
		printf "All run moving time: %s\n" "$all_run_totals__moving_time"
		#printf ": %s\n" "$all_run_totals__elapsed_time"
		printf "All run elevation gain: %s\n" "$all_run_totals__elevation_gain"
		#printf ": %s\n" "$all_swim_totals__count"
		#printf ": %s\n" "$all_swim_totals__distance"
		#printf ": %s\n" "$all_swim_totals__moving_time"
		#printf ": %s\n" "$all_swim_totals__elapsed_time"
		#printf ": %s\n" "$all_swim_totals__elevation_gain"

    else
        placeholder 1
    fi
fi

exit

The conkyrc line to add:

${alignr}A T H L E T I C    I N F O
${membar 0}
${execpi 600 $HOME/.config/conky/scripts/stravonky-0.1.sh}

Hope you'll enjoy it.

Offline

Board footer

Powered by FluxBB