Voila enfin un conky basé sur le logo Fedora. voici le rendu sur mon bureau :




donc j'ai trois fichiers : le conkyrc « conky_fedora » :
background no
update_interval 1
 
cpu_avg_samples 2
net_avg_samples 2

override_utf8_locale yes

double_buffer yes
no_buffers yes

text_buffer_size 2048
imlib_cache_size 0

own_window false
own_window_type desktop
own_window_transparent yes
own_window_hints undecorated,sticky,skip_taskbar,skip_pager,below

border_inner_margin 0
border_outer_margin 0
stippled_borders 0

minimum_size 250 250
maximum_width 250
 
alignment top_left
gap_x 100
gap_y 400

draw_shades yes
default_shade_color 000000
draw_outline no
draw_borders no
draw_graph_borders no

use_xft yes
xftfont LCDMono2:size=10
xftalpha 0.4

uppercase no

default_color 9B9B9B

#Rouge sombre
color1 671010

#Gris foncé
color2 1F1F1F

#Gris clair (defaut)
color3 9B9B9B

lua_load ~/.conky/conky_fedora/conky_fedora.lua
lua_load ~/.conky/conky_fedora/conky_fedora_text.lua

lua_draw_hook_pre main_rings
lua_draw_hook_post draw_text

TEXT
${image ~/.conky/conky_fedora/bg.png -p 0,0 -f 86400}
les anneaux lua (piqué l'original sur le forum Ubuntu-fr) « conky_fedora.lua » :
--[[ RINGS with SECTORS widget
    v1.0 by wlourf (08.08.2010)
    this widget draws a ring with differents effects 
    http://u-scripts.blogspot.com/2010/08/rings-sectors-widgets.html
    
To call the script in a conky, use, before TEXT
    lua_load /path/to/the/script/rings.lua
    lua_draw_hook_pre main_rings
and add one line (blank or not) after TEXT


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

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

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

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

v1.0 (08 Aug. 2010) original release

]]


require 'cairo'
function conky_main_rings()
-- START PARAMETERS HERE
rings_settings={

    {
    --seconds
    name="time",
    arg="%S",
    max=60,
    xc=162,
    yc=468,
    radius=25,
    thickness=5,
    start_angle=-115,
    end_angle=205,
    sectors=29,
    gap_sectors=1,
    fill_sector=true,
    bg_colour1={{0,0x000000,0.3},{0.5,0xFFFFFF,0.4}, {1,0x000000,0.3}},
    fg_colour1={{0,0X5E0000,0.1},{0.5,0xFFFFFF,0.5}, {1,0x5E0000,0.1}},
    fg_colour2={{0,0X5E0000,0.5},{0.5,0xE67373,1}, {1,0x5E0000,0.5}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

    {
    --cpu0
    name="cpu",
    arg="cpu0",
    max=100,
    xc=171,
    yc=578,
    radius=47,
    thickness=6,
    start_angle=-150,
    end_angle=-3,
    sectors=10,
    inverse_arc=true,
    bg_colour1={{0,0x999999,0},{0.5,0x999999,1}, {1,0x999999,0}},
    fg_colour1={{0,0XFFFFFF,0},{0.5,0xFFFFFF,1}, {1,0xFFFFFF,0}},
    fg_colour2={{0,0X5E0000,0},{0.5,0x5E0000,1}, {1,0x5E0000,0}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

    {
    --cpu1
    name="cpu",
    arg="cpu1",
    max=100,
    xc=171,
    yc=578,
    radius=54,
    thickness=6,
    start_angle=-153,
    end_angle=-3,
    sectors=30,
    inverse_arc=true,
    bg_colour1={{0,0x999999,0},{0.5,0x999999,1}, {1,0x999999,0}},
    fg_colour1={{0,0XFFFFFF,0},{0.5,0xFFFFFF,1}, {1,0xFFFFFF,0}},
    fg_colour2={{0,0X5E0000,0},{0.5,0x5E0000,1}, {1,0x5E0000,0}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },
    
    {
    --cpu2
    name="cpu",
    arg="cpu2",
    max=100,
    xc=171,
    yc=578,
    radius=40,
    thickness=6,
    start_angle=-150,
    end_angle=-3,
    sectors=20,
    inverse_arc=true,
    bg_colour1={{0,0x999999,0},{0.5,0x999999,1}, {1,0x999999,0}},
    fg_colour1={{0,0XFFFFFF,0},{0.5,0xFFFFFF,1}, {1,0xFFFFFF,0}},
    fg_colour2={{0,0X5E0000,0},{0.5,0x5E0000,1}, {1,0x5E0000,0}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

    {
    --ram
    name="memperc",
    arg="",
    max=100,
    xc=263,
    yc=488,
    radius=54,
    thickness=20,
    start_angle=25,
    end_angle=170,
    sectors=20,
    bg_colour1={{0,0x999999,0},{0.5,0x999999,1}, {1,0x999999,0}},
    fg_colour1={{0,0XFFFFFF,0},{0.5,0xFFFFFF,1}, {1,0xFFFFFF,0}},
    fg_colour2={{0,0X5E0000,0},{0.5,0x5E0000,1}, {1,0x5E0000,0}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },
        
    {
    --right half ring 5 : download speed
    name="downspeedf",
    arg="eth0",
    max=1500,
    xc=171,
    yc=576,
    radius=60,
    thickness=28,
    start_angle=90,
    end_angle=180,
    sectors=20,
    fill_sector=true,
    gap_sectors=1,
    bg_colour1={{0,0x999999,0},{0.5,0x999999,1}, {1,0x111111,0.2}},
    fg_colour1={{0,0XE67373,0},{0.5,0x5E0000,1}, {1,0x5E0000,0.2}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },
    
    
    {
    --left half ring 5 : upload speed
    name="upspeedf",
    arg="eth0",
    max=400,
    xc=263,
    yc=490,
    radius=60,
    thickness=28,
    start_angle=270,
    end_angle=360,
    sectors=20,
    fill_sector=true,
    gap_sectors=1,
    bg_colour1={{0,0x111111,0.2},{0.5,0x999999,1}, {1,0x999999,0}},
    fg_colour1={{0,0X5E0000,0.2},{0.5,0x5E0000,1}, {1,0xE67373,0}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

}
--END OF PARAMETERS HERE

--main function

    if conky_window==nil then return end

    local cs=cairo_xlib_surface_create(conky_window.display,
        conky_window.drawable, 
        conky_window.visual, conky_window.width, conky_window.height)
    cr=cairo_create(cs)

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

    cairo_destroy(cr)

end




function draw_ring(t)

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

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

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

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

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

        --check colors tables 
        for i=1, #t.bg_colour1 do 
            if #t.bg_colour1[i]~=3 then t.bg_colour1[i]={1,0xFFFFFF,0.5} end
        end
        for i=1, #t.fg_colour1 do 
            if #t.fg_colour1[i]~=3 then t.fg_colour1[i]={1,0xFF0000,1} end
        end
        for i=1, #t.bd_colour1 do 
            if #t.bd_colour1[i]~=3 then t.bd_colour1[i]={1,0xFFFF00,1} end
        end
    
        if t.bg_colour2~=nil then
            for i=1, #t.bg_colour2 do 
                if #t.bg_colour2[i]~=3 then t.bg_colour2[i]={1,0xFFFFFF,0.5} end
            end
        end
        if t.fg_colour2~=nil then
            for i=1, #t.fg_colour2 do 
                if #t.fg_colour2[i]~=3 then t.fg_colour2[i]={1,0xFF0000,1} end
            end
        end
        if t.bd_colour2~=nil then
            for i=1, #t.bd_colour2 do 
                if #t.bd_colour2[i]~=3 then t.bd_colour2[i]={1,0xFFFF00,1} end
            end
        end     
        
        if t.start_angle>=t.end_angle then
         local tmp_angle=t.end_angle
         t.end_angle= t.start_angle
         t.start_angle = tmp_angle
         -- print ("inversed angles")
            if t.end_angle-t.start_angle>360 and t.start_angle>0 then
                t.end_angle=360+t.start_angle
                print ("reduce angles")
            end
        
            if t.end_angle+t.start_angle>360 and t.start_angle<=0 then
                t.end_angle=360+t.start_angle
                print ("reduce angles")
            end
        
            if t.int_radius<0 then t.int_radius =0 end
            if t.int_radius>t.radius then
                local tmp_radius=t.radius
                t.radius=t.int_radius
                t.int_radius=tmp_radius
                print ("inversed radius")
            end
            if t.int_radius==t.radius then
                t.int_radius=0
                print ("int radius set to 0")
            end 
        end
        
        t.fg_colour1 = calc_delta(t.fg_colour1,t.fg_colour2)
        t.bg_colour1 = calc_delta(t.bg_colour1,t.bg_colour2)
        t.bd_colour1 = calc_delta(t.bd_colour1,t.bd_colour2)
    end
    
    --initialize table
    setup(t)
    --[[grid
    h=conky_window.height
    w=conky_window.width
    cairo_set_source_rgba(cr,1,1,1,1)
    cairo_set_line_width(cr,0.5)
    cairo_move_to(cr,0,t.yc)
    cairo_line_to(cr,w,t.yc)
    cairo_stroke(cr)
    cairo_move_to(cr,t.xc,0)
    cairo_line_to(cr,t.xc,h)
    cairo_stroke(cr)
    cairo_move_to(cr,t.xc,t.yc)
    cairo_line_to(cr,t.xc+200*math.sin(math.pi/4),t.yc-200*math.cos(math.pi/4))
    cairo_stroke(cr)
    cairo_move_to(cr,0,t.yc-t.radius)
    cairo_line_to(cr,w,t.yc-t.radius)
    cairo_stroke(cr)
    cairo_move_to(cr,0,t.yc-t.int_radius)
    cairo_line_to(cr,w,t.yc-t.int_radius)
    cairo_stroke(cr)
    cairo_move_to(cr,0,t.yc-t.gap_sectors)
    cairo_line_to(cr,w,t.yc-t.gap_sectors)
    cairo_stroke(cr)
    cairo_set_source_rgba(cr,1,0,0,0.5)
    cairo_arc(cr,t.xc,t.yc,t.radius,0,2*math.pi)
    cairo_stroke(cr)
    cairo_arc(cr,t.xc,t.yc,t.int_radius,0,2*math.pi)    
    cairo_stroke(cr)    
    cairo_set_source_rgba(cr,0,1,0,1)    
    cairo_move_to(cr,t.xc+t.gap_sectors,t.yc-t.gap_sectors)
    cairo_line_to(cr,t.xc+400*math.sin(math.pi/4),t.yc-400*math.cos(math.pi/4))
    cairo_stroke(cr)
    --END GRID
    ]]
    
    --initialize cairo context
    cairo_save(cr)
    cairo_translate(cr,t.xc,t.yc)
    cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND)
    cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND)

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

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


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

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

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

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

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

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

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


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

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

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

         cairo_restore(cr)

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

    cairo_restore(cr)
end


--[[END OF RING-SECTORS WIDGET]]


function axis(ctx,alpha)
    cairo_set_line_width(ctx,1)
    cairo_set_source_rgba(ctx,1,0,0,alpha)
    cairo_move_to(ctx,0,0)
    cairo_line_to(ctx,150,0)
    cairo_stroke(ctx)
    cairo_set_source_rgba(ctx,0,1,0,alpha)
    cairo_move_to(ctx,0,0)
    cairo_line_to(ctx,0,150)
    cairo_stroke(ctx)
end    
et enfin le texte (via lua également) « conky_fedora_text.lua » :
--[[TEXT WIDGET v1.3 by Wlourf 25/06/2010
This widget can drawn texts set in the "text_settings" table with some parameters
http://u-scripts.blogspot.com/2010/06/text-widget.html

The parameters (all optionals) are :
text        - text to display, default = "Conky is good for you"
              use conky_parse to display conky value ie text=conly_parse("${cpu cpu1}")
            - coordinates below are relative to top left corner of the conky window
x           - x coordinate of first letter (bottom-left), default = center of conky window
y           - y coordinate of first letter (bottom-left), default = center of conky window
h_align        - horizontal alignement of text relative to point (x,y), default="l"
              available values are "l": left, "c" : center, "r" : right
v_align        - vertical alignment of text relative to point (x,y), default="b"
              available values "t" : top, "m" : middle, "b" : bottom
font_name   - name of font to use, default = Free Sans
font_size   - size of font to use, default = 14
italic      - display text in italic (true/false), default=false
oblique     - display text in oblique (true/false), default=false (I don' see the difference with italic!)
bold        - display text in bold (true/false), default=false
angle       - rotation of text in degrees, default = 0 (horizontal)
colour      - table of colours for text, default = plain white {{1,0xFFFFFF,1}}
              this table contains one or more tables with format {P,C,A}
              P=position of gradient (0 = beginning of text, 1= end of text)
              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}}
              or {{0.5,0x00FF00,1},{1,0x000033,1}} -with this one, gradient will start in the middle of the text
              for a gradient with three colours {{0,0x00FF00,0.5},{0.5,0x000033,1},{1,0x440033,1}}
              and so on ...
orientation    - in case of gradient, "orientation" defines the starting point of the gradient, default="ww"
              there are 8 available starting points : "nw","nn","ne","ee","se","ss","sw","ww"
              (n for north, w for west ...)
              theses 8 points are the 4 corners + the 4 middles of text's outline
              so a gradient "nn" will go from "nn" to "ss" (top to bottom, parallele to text)
              a gradient "nw" will go from "nw" to "se" (left-top corner to right-bottom corner)
radial        - define a radial gradient (if present at the same time as "orientation", "orientation" will have no effect)
              this parameter is a table with 6 numbers : {xa,ya,ra,xb,yb,rb}
              they define two circle for the gradient :
              xa, ya, xb and yb are relative to x and y values above
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
skew_x,skew_y    - skew text around x or y axis
              

Needs conky 1.8.0 

To call this script in the conkyrc, in before-TEXT section:
    lua_load /path/to/the/lua/script/text.lua
    lua_draw_hook_pre draw_text
 
v1.0    07/06/2010, Original release
v1.1    10/06/2010    Add "orientation" parameter
v1.2    15/06/2010  Add "h_align", "v_align" and "radial" parameters
v1.3    25/06/2010  Add "reflection_alpha", "reflection_length", "reflection_scale", 
                    "skew_x" et "skew_y"


]]
require 'cairo'

function conky_draw_text()
    --BEGIN OF PARAMETRES
    text_settings={

        {
            text=conky_parse("${time %H:%M}"),
            font_name="LCDMono2",
            font_size=18,
            h_align="c",
            bold=true,
            x=157,
            y=483,
            angle=-45,
            orientation="nn",
            colour={{0,0X5E0000,0.5},{0.5,0x5E0000,0.3}, {1,0x5E0000,0.5}},
        },
        
        {
            text=conky_parse("${cpu cpu0}"),
            font_name="LCDMono2",
            font_size=14,
            h_align="c",
            bold=true,
            angle=-45,
            x=123,
            y=634,
            colour={{0,0XE67373,0.5},{0.5,0xE67373,1}, {1,0xE67373,0.5}},
        },
        {
            text=conky_parse("${cpu cpu1}"),
            font_name="LCDMono2",
            font_size=12,
            h_align="c",
            bold=true,
            angle=-45,
            x=116,
            y=620,
            orientation="nn",
            colour={{0,0X5E0000,0.5},{0.5,0x5E0000,1}, {1,0x5E0000,0.5}},
        },

        {
            text=conky_parse("${cpu cpu2}"),
            font_name="LCDMono2",
            font_size=12,
            h_align="c",
            bold=true,
            angle=-45,
            x=134,
            y=642,
            orientation="nn",
            colour={{0,0X5E0000,0.5},{0.5,0x5E0000,1}, {1,0x5E0000,0.5}},
        },
        
        {
            text=conky_parse("$mem"),
            font_name="LCDMono2",
            font_size=14,
            h_align="c",
            bold=true,
            angle=-45,
            x=320,
            y=530,
            colour={{0,0X5E0000,0.5},{0.5,0x5E0000,1}, {1,0x5E0000,0.5}},
        },    

        {
            text="u",
            font_name="Marlett",
            font_size=26,
            h_align="c",
            bold=true,
            x=157,
            y=635,
            colour={{0,0XE67373,0.5},{0.5,0xE67373,1}, {1,0xE67373,0.5}},
        },

        {
            text=conky_parse("${downspeedf eth0} k"),
            font_name="LCDMono2",
            font_size=14,
            h_align="c",
            bold=true,
            x=225,
            y=626,
            angle=-45,
            colour={{0,0XE67373,0.5},{0.5,0xE67373,1}, {1,0xE67373,0.5}},
        },
        {
            text="t",
            font_name="Marlett",
            font_size=26,
            h_align="c",
            bold=true,
            x=270,
            y=458,
            colour={{0,0XE67373,0.5},{0.5,0xE67373,1}, {1,0xE67373,0.5}},
        },

        {
            text=conky_parse("${upspeedf eth0} k"),
            font_name="LCDMono2",
            font_size=14,
            h_align="r",
            bold=true,
            x=245,
            y=416,
            angle=-45,
            colour={{0,0X5E0000,0.5},{0.5,0x5E0000,1}, {1,0x5E0000,0.5}},
        },

        {
            text=conky_parse("$uptime"),
            font_name="LCDMono2",
            font_size=14,
            h_align="r",
            bold=true,
            x=255,
            y=539,
            colour={{0,0X5E0000,0.5},{0.5,0x5E0000,1}, {1,0x5E0000,0.5}},
        },    
    }
    
 
           
    
    
--------------END OF PARAMETERES----------------
    if conky_window == nil then return end
    if tonumber(conky_parse("$updates"))<3 then return end
       
    local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)

    for i,v in pairs(text_settings) do    
        cr = cairo_create (cs)
        display_text(v)
        cairo_destroy(cr)
    end
    
    cairo_surface_destroy(cs)
    


end

function rgb_to_r_g_b2(tcolour)
    colour,alpha=tcolour[2],tcolour[3]
    return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end

function display_text(t)

    local function set_pattern()
        --this function set the pattern
        if #t.colour==1 then 
            cairo_set_source_rgba(cr,rgb_to_r_g_b2(t.colour[1]))
        else
            local pat
            
            if t.radial==nil then
                local pts=linear_orientation(t,te)
                pat = cairo_pattern_create_linear (pts[1],pts[2],pts[3],pts[4])
            else
                pat = cairo_pattern_create_radial (t.radial[1],t.radial[2],t.radial[3],t.radial[4],t.radial[5],t.radial[6])
            end
        
            for i=1, #t.colour do
                cairo_pattern_add_color_stop_rgba (pat, t.colour[i][1], rgb_to_r_g_b2(t.colour[i]))
            end
            cairo_set_source (cr, pat)
        end
    end
    
    --set default values if needed
    if t.text==nil then t.text="Conky is good for you !" end
    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.colour==nil then t.colour={{1,0xFFFFFF,1}} end
    if t.font_name==nil then t.font_name="Free Sans" end
    if t.font_size==nil then t.font_size=14 end
    if t.angle==nil then t.angle=0 end
    if t.italic==nil then t.italic=false end
    if t.oblique==nil then t.oblique=false end
    if t.bold==nil then t.bold=false end
    if t.radial ~= nil then
        if #t.radial~=6 then 
            print ("error in radial table")
            t.radial=nil 
        end
    end
    if t.orientation==nil then t.orientation="ww" end
    if t.h_align==nil then t.h_align="l" end
    if t.v_align==nil then t.v_align="b" 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
    if t.skew_x==nil then t.skew_x=0 end
    if t.skew_y==nil then t.skew_y=0 end    
    cairo_translate(cr,t.x,t.y)
    cairo_rotate(cr,t.angle*math.pi/180)
    cairo_save(cr)       
     
 

    local slant = CAIRO_FONT_SLANT_NORMAL
    local weight =CAIRO_FONT_WEIGHT_NORMAL
    if t.italic then slant = CAIRO_FONT_SLANT_ITALIC end
    if t.oblique then slant = CAIRO_FONT_SLANT_OBLIQUE end
    if t.bold then weight = CAIRO_FONT_WEIGHT_BOLD end
    
    cairo_select_font_face(cr, t.font_name, slant,weight)
 
    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

    local matrix0 = cairo_matrix_t:create()
    skew_x,skew_y=t.skew_x/t.font_size,t.skew_y/t.font_size
    cairo_matrix_init (matrix0, 1,skew_y,skew_x,1,0,0)
    cairo_transform(cr,matrix0)
    cairo_set_font_size(cr,t.font_size)
    te=cairo_text_extents_t:create()
    cairo_text_extents (cr,t.text,te)
    
    set_pattern()


            
    mx,my=0,0
    
    if t.h_align=="c" then
        mx=-te.width/2
    elseif t.h_align=="r" then
        mx=-te.width
    end
    if t.v_align=="m" then
        my=-te.height/2-te.y_bearing
    elseif t.v_align=="t" then
        my=-te.y_bearing
    end
    cairo_move_to(cr,mx,my)
    
    cairo_show_text(cr,t.text)

     
        
        
   if t.reflection_alpha ~= 0 then 
        local matrix1 = cairo_matrix_t:create()
        cairo_set_font_size(cr,t.font_size)

        cairo_matrix_init (matrix1,1,0,0,-1*t.reflection_scale,0,(te.height+te.y_bearing+my)*(1+t.reflection_scale))
        cairo_set_font_size(cr,t.font_size)
        te=cairo_text_extents_t:create()
        cairo_text_extents (cr,t.text,te)
        
                
        cairo_transform(cr,matrix1)
        set_pattern()
        cairo_move_to(cr,mx,my)
        cairo_show_text(cr,t.text)

        local pat2 = cairo_pattern_create_linear (0,
                                        (te.y_bearing+te.height+my),
                                        0,
                                        te.y_bearing+my)
        cairo_pattern_add_color_stop_rgba (pat2, 0,1,0,0,1-t.reflection_alpha)
        cairo_pattern_add_color_stop_rgba (pat2, t.reflection_length,0,0,0,1)    
        
        
        cairo_set_line_width(cr,1)
        dy=te.x_bearing
        if dy<0 then dy=dy*(-1) end
        cairo_rectangle(cr,mx+te.x_bearing,te.y_bearing+te.height+my,te.width+dy,-te.height*1.05)
        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
    
end


function linear_orientation(t,te)
    local w,h=te.width,te.height
    local xb,yb=te.x_bearing,te.y_bearing
    
    if t.h_align=="c" then
        xb=xb-w/2
    elseif t.h_align=="r" then
        xb=xb-w
       end    
    if t.v_align=="m" then
        yb=-h/2
    elseif t.v_align=="t" then
        yb=0
       end    
       
    if t.orientation=="nn" then
        p={xb+w/2,yb,xb+w/2,yb+h}
    elseif t.orientation=="ne" then
        p={xb+w,yb,xb,yb+h}
    elseif t.orientation=="ww" then
        p={xb,h/2,xb+w,h/2}
    elseif vorientation=="se" then
        p={xb+w,yb+h,xb,yb}
    elseif t.orientation=="ss" then
        p={xb+w/2,yb+h,xb+w/2,yb}
    elseif vorientation=="ee" then
        p={xb+w,h/2,xb,h/2}        
    elseif t.orientation=="sw" then
        p={xb,yb+h,xb+w,yb}
    elseif t.orientation=="nw" then
        p={xb,yb,xb+w,yb+h}
    end
    return p
end
Bon pour changer les couleurs, à part du rechercher/remplacer + modif de l' image d'arrière plan, ça risque d'être un peu long :-D
pfiou Papsou on t'arrête plus avec lua !! super intégration en tout cas bravo !
MErci ! J'ai un peu de temps libre au boulot, donc je m'occupe :-P
@PapsOu
C'est très bien fait et bien intégré au bureau...
Tu vas dire que je chipote, mais n'y aurait-il pas un moyen d'avoir les chiffres qui épousent les formes du logo?
chepioq wrote:@PapsOu
C'est très bien fait et bien intégré au bureau...
Tu vas dire que je chipote, mais n'y aurait-il pas un moyen d'avoir les chiffres qui épousent les formes du logo?
Bah écoute, c'était à la base ma première idée, j'ai essayé "skew_x,skew_y" mais le résultat n'était pas au rendez-vous (étant donné que ça veut dire "pencher").

En tout cas ce doit être très certainement possible, seulement je ne sais pas comment le faire.

Je chercherai à l'occasion, histoire de peaufiner ce petit conky.

Si quelqu'un à ce petit tuyau, je suis preneur :-P
7 jours plus tard
@PapsOu
Pour le texte en courbe, j'ai trouvé ici: http://crunchbanglinux.org/forums/post/55708/#p55708 post 892.
Tel quel, il fonctionne avec une erreur, je te met la version qui fonctionne sans problème:
--[[circlewriting by mrpeachy (2010)]]
require 'cairo'
function addzero100(num)
if num==nil then num=0 end
if tonumber(num) < 10 then
return "00" .. num
elseif tonumber(num) <100 then
return "0" .. num
else
return num
end
end
function string:split(delimiter)
local result = { }
local from  = 1
local delim_from, delim_to = string.find( self, delimiter, from  )
while delim_from do
table.insert( result, string.sub( self, from , delim_from-1 ) )
from  = delim_to + 1
delim_from, delim_to = string.find( self, delimiter, from  )
end
table.insert( result, string.sub( self, from  ) )
return result
end
function circlewriting(cr, text, font, fsize, radi, horiz, verti, tred, tgreen, tblue, talpha, start, finish, var1)
local inum=string.len(text)
range=finish
deg=(finish-start)/(inum-1)
degrads=1*(math.pi/180)
local textcut=string.gsub(text, ".", "%1@@@")
texttable=string.split(textcut, "@@@")
for i = 1,inum do
ival=i
interval=(degrads*(start+(deg*(i-1))))+var1
interval2=degrads*(start+(deg*(i-1)))
txs=0+radi*(math.sin(interval))
tys=0-radi*(math.cos(interval))
cairo_select_font_face (cr, font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size (cr, fsize);
cairo_set_source_rgba (cr, tred, tgreen, tblue, talpha);
cairo_move_to (cr, txs+horiz, tys+verti);
cairo_rotate (cr, interval2)
cairo_show_text (cr, (texttable[i]))
cairo_rotate (cr, -interval2)
end
end
function circlewritingdown(cr, text, font, fsize, radi, horiz, verti, tred, tgreen, tblue, talpha, start, finish, var1)
local inum=string.len(text)
deg=(start-finish)/(inum-1)
degrads=1*(math.pi/180)
local textcut=string.gsub(text, ".", "%1@@@")
texttable=string.split(textcut, "@@@")
for i = 1,inum do
ival=i
interval=(degrads*(start-(deg*(i-1))))+var1
interval2=degrads*(start-(deg*(i-1)))
txs=0+radi*(math.sin(interval))
tys=0-radi*(math.cos(interval))
cairo_select_font_face (cr, font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size (cr, fsize);
cairo_set_source_rgba (cr, tred, tgreen, tblue, talpha);
cairo_move_to (cr, txs+horiz, tys+verti);
cairo_rotate (cr, interval2+(180*math.pi/180))
cairo_show_text (cr, (texttable[i]))
cairo_rotate (cr, -interval2-(180*math.pi/180))
end
end
function conky_draw_text()
local updates=conky_parse('${updates}')
update_num=tonumber(updates)
if update_num > 5 then
if conky_window==nil then return end
local w=conky_window.width
local h=conky_window.height
local cs=cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, w, h)
cr=cairo_create(cs)



--circlewriting variable
cpu=tonumber(conky_parse('${cpu}'))
--text must be in quotes
text=("CPU " .. (addzero100(cpu)) .. "%") 
--font name must be in quotes
font="White Rabbit"
fontsize=18
radius=80
positionx=100
positiony=150
colorred=1
colorgreen=1
colorblue=1
coloralpha=1
--to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
--eg if you want to go from 270 to 90, then you will input 270 to 450.  Finish has to be greater than start.
start=0
finish=120
letterposition=0
circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)

--circlewritingdown variables
mem=tonumber(conky_parse('${memperc}'))
--text must be in quotes
text=("MEMORY " .. (addzero100(mem)) .. "%")
--font name must be in quotes
font="White Rabbit"
fontsize=18
radius=90
positionx=230
positiony=270
colorred=1
colorgreen=1
colorblue=1
coloralpha=1
--to set start and finish values for circlewritingdown, if the text will cross 0 degrees then you must calculate for 0-finish degrees
--eg if you want to go from 90 to 270, then you will input 90 to -90.  Start has to be greater than finish
start=300
finish=180
letterposition=0
circlewritingdown(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)

--circlewritingdown variable
hdd=tonumber(conky_parse('${fs_used_perc /}'))
--text must be in quotes
text=("FILESYS " .. (addzero100(hdd)) .. "%") 
--font name must be in quotes
font="White Rabbit"
fontsize=18
radius=80
positionx=260
positiony=280
colorred=1
colorgreen=1
colorblue=1
coloralpha=1
--to set start and finish values for circlewritingdown, if the text will cross 0 degrees then you must calculate for 0-finish degrees
--eg if you want to go from 90 to 270, then you will input 90 to -90.  Start has to be greater than finish
start=180
finish=0
letterposition=0.06
circlewritingdown(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)

--circlewriting variables
swap=tonumber(conky_parse('${swapperc}'))
--text must be in quotes
text=("SWAP " .. (addzero100(swap)) .. "% ") 
--font name must be in quotes
font="White Rabbit"
fontsize=18
radius=60
positionx=105
positiony=130
colorred=1
colorgreen=1
colorblue=1
coloralpha=1
--to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
--eg if you want to go from 270 to 90, then you will input 270 to 450.  Finish has to be greater than start.
start=200
finish=340
letterposition=0
circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)


end
end

Je ne sais pas si tu pourra l'intégrer à ton script lua, mais cela ne devrai pas trop poser de soucis...
Ah super merci, c'est ce qu'il me fallait. Maintenant reste à savoir comment charger plus de deux fichiers .lua. Ou sinon je vais me casser la tronche à merger les deux main function, mais c'est pas gagné. Je regarde ça de plus près dans la semaine

Un grand merci à toi chepioq !
Merci pour la technique. Seulement, je vais devoir me creuser le crane pour faire fonctionner les trois script en parallèle (j'ai une erreur : attempt to call a nil value) bref, je crois que les script entrent en conflit.

Je vais tenter, dans un premier temps de bien comprendre le code pour le texte courbé, et ensuite essayer de l'intégrer au lua texte que j'utilise actuellement (voir mon post #292).

Aller hop, au boulot !

Merci encore chepioq !
Bon du coup j'ai réussi à modifier un peu les script de texte courbé, seulement le rendu n'est pas au rendez-vous, ça ne me plait pas trop. Je garderai donc cette version :


Quand il me restera un peu de temps libre, je ferai une même version mais avec les bleus officiels de Fedora
6 jours plus tard
Bon, comme prévu, voici la version bleu façon Fedora de ce même conky.



L'image de fond (le logo Fedora) :
Les trois scripts :

le conky_fedora (le conkyrc en gros) :
background no
update_interval 1
 
cpu_avg_samples 2
net_avg_samples 2

override_utf8_locale yes

double_buffer yes
no_buffers yes

text_buffer_size 2048
imlib_cache_size 0

own_window false
own_window_type desktop
own_window_transparent yes
own_window_hints undecorated,sticky,skip_taskbar,skip_pager,below

border_inner_margin 0
border_outer_margin 0
stippled_borders 0

minimum_size 250 250
maximum_width 250
 
alignment top_left
gap_x 100
gap_y 370

draw_shades yes
default_shade_color 000000
draw_outline no
draw_borders no
draw_graph_borders no

use_xft yes
xftfont LCDMono2:size=10
xftalpha 0.4

lua_load ~/.conky/conky_fedora/conky_fedora_bleu.lua
lua_load ~/.conky/conky_fedora/conky_fedora_text_bleu.lua

lua_draw_hook_pre main_rings
lua_draw_hook_post draw_text

TEXT
${image ~/.conky/conky_fedora/bg_bleu.png -p 0,0 -f 86400}
conky_fedora_bleau.lua (Les anneaux lua) :
require 'cairo'
function conky_main_rings()
-- START PARAMETERS HERE
rings_settings={

    {
    --seconds
    name="time",
    arg="%S",
    max=60,
    xc=262,
    yc=458,
    radius=28,
    thickness=5,
    start_angle=-115,
    end_angle=205,
    sectors=29,
    gap_sectors=1,
    fill_sector=true,
    bg_colour1={{0,0x000000,0},{0.5,0x000000,0.1}, {1,0x000000,0}},
    fg_colour1={{0,0X294172,0.3},{0.5,0xFFFFFF,0.7}, {1,0x294172,0.3}},
    fg_colour2={{0,0X294172,0.4},{0.5,0x294172,0.7}, {1,0x294172,0.4}},
    bd_colour1={{0,0X000000,1},{0.5,0x000000,1}, {1,0x000000,1}},
    },

    {
    --cpu0
    name="cpu",
    arg="cpu0",
    max=100,
    xc=171,
    yc=548,
    radius=46,
    thickness=4,
    start_angle=-150,
    end_angle=-3,
    sectors=8,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0.2},{0.5,0x000000,0.2}, {1,0x000000,0.2}},
    fg_colour1={{0,0XFFFFFF,0.7},{0.5,0xFFFFFF,1}, {1,0xFFFFFF,0.7}},
    fg_colour2={{0,0X294172,0.7},{0.5,0x294172,1}, {1,0x294172,0.7}},
    bd_colour1={{0,0X000000,1},{0.5,0x000000,1}, {1,0x000000,1}},
    },

    {
    --cpu1
    name="cpu",
    arg="cpu1",
    max=100,
    xc=171,
    yc=548,
    radius=57,
    thickness=10,
    start_angle=-150,
    end_angle=-3,
    sectors=16,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0.2},{0.5,0x000000,0.1}, {1,0x000000,0}},
    fg_colour1={{0,0XFFFFFF,0.7},{0.5,0xFFFFFF,0.5}, {1,0xFFFFFF,0.1}},
    fg_colour2={{0,0X294172,0.7},{0.5,0x294172,1}, {1,0x294172,0.5}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },
    
    {
    --cpu2
    name="cpu",
    arg="cpu2",
    max=100,
    xc=171,
    yc=548,
    radius=41,
    thickness=10,
    start_angle=-150,
    end_angle=-3,
    sectors=16,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0},{0.5,0x000000,0.1}, {1,0x000000,0.2}},
    fg_colour1={{0,0XFFFFFF,0.1},{0.5,0xFFFFFF,0.5}, {1,0xFFFFFF,0.7}},
    fg_colour2={{0,0X294172,0.5},{0.5,0x294172,1}, {1,0x294172,0.7}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

    {
    --ram
    name="memperc",
    arg="",
    max=100,
    xc=263,
    yc=459,
    radius=43,
    thickness=12,
    start_angle=30,
    end_angle=177,
    sectors=20,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0},{0.5,0x000000,0.1}, {1,0x000000,0.2}},
    fg_colour1={{0,0XFFFFFF,0.1},{0.5,0xFFFFFF,0.5}, {1,0xFFFFFF,0.7}},
    fg_colour2={{0,0X294172,0.1},{0.5,0x294172,0.7}, {1,0x294172,1}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

    {
    --fs_used
    name="fs_used_perc",
    arg="/",
    max=100,
    xc=263,
    yc=459,
    radius=56,
    thickness=12,
    start_angle=30,
    end_angle=177,
    sectors=20,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0.2},{0.5,0x000000,0.1}, {1,0x000000,0}},
    fg_colour1={{0,0XFFFFFF,0.7},{0.5,0xFFFFFF,0.5}, {1,0xFFFFFF,0.1}},
    fg_colour2={{0,0X294172,1},{0.5,0x294172,0.7}, {1,0x294172,0.3}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },
        
    {
    --download speed
    name="downspeedf",
    arg="eth0",
    max=1500,
    xc=171,
    yc=546,
    radius=60,
    thickness=28,
    start_angle=90,
    end_angle=180,
    sectors=20,
    fill_sector=true,
    gap_sectors=1,
    bg_colour1={{0,0x000000,0},{0.5,0x333333,0.5}, {1,0x111111,0.2}},
    fg_colour1={{0,0X294172,0},{0.5,0x294172,1}, {1,0x294172,0.2}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },
    
    
    {
    --upload speed
    name="upspeedf",
    arg="eth0",
    max=400,
    xc=263,
    yc=460,
    radius=60,
    thickness=28,
    start_angle=270,
    end_angle=360,
    sectors=20,
    fill_sector=true,
    gap_sectors=1,
    bg_colour1={{0,0x111111,0.2},{0.5,0x333333,0.5}, {1,0x000000,0}},
    fg_colour1={{0,0X294172,0.2},{0.5,0x294172,1}, {1,0x294172,0}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

    {
    --Top cpu 1
    name="top cpu",
    arg="1",
    max=100,
    xc=226,
    yc=496,
    radius=138,
    thickness=11,
    start_angle=-90,
    end_angle=-45,
    sectors=25,
    inverse_arc=false,
    bg_colour1={{0,0x000000,0},{0.5,0x000000,0}, {1,0x000000,0}},
    fg_colour1={{0,0XFFFFFF,0.7},{0.5,0xFFFFFF,0.5}, {1,0xFFFFFF,0.3}},
    fg_colour2={{0,0X294172,0.7},{0.5,0x294172,0.5}, {1,0x294172,0.3}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

    {
    --Top cpu 2
    name="top cpu",
    arg="2",
    max=100,
    xc=226,
    yc=496,
    radius=149,
    thickness=11,
    start_angle=-90,
    end_angle=-45,
    sectors=25,
    inverse_arc=false,
    bg_colour1={{0,0x000000,0},{0.5,0x000000,0}, {1,0x000000,0}},
    fg_colour1={{0,0XFFFFFF,0.6},{0.5,0xFFFFFF,0.4}, {1,0xFFFFFF,0.2}},
    fg_colour2={{0,0X294172,0.6},{0.5,0x294172,0.4}, {1,0x294172,0.2}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },
    
    {
    --Top cpu 3
    name="top cpu",
    arg="3",
    max=100,
    xc=226,
    yc=496,
    radius=160,
    thickness=11,
    start_angle=-90,
    end_angle=-45,
    sectors=25,
    inverse_arc=false,
    bg_colour1={{0,0x000000,0},{0.5,0x000000,0}, {1,0x000000,0}},
    fg_colour1={{0,0XFFFFFF,0.4},{0.5,0xFFFFFF,0.2}, {1,0xFFFFFF,0}},
    fg_colour2={{0,0X294172,0.4},{0.5,0x294172,0.2}, {1,0x294172,0}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

    {
    --Top mem 1
    name="top mem",
    arg="1",
    max=100,
    xc=125,
    yc=596,
    radius=35,
    thickness=11,
    start_angle=-90,
    end_angle=-180,
    sectors=8,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0},{0.5,0x000000,0}, {1,0x000000,0}},
    fg_colour1={{0,0XFFFFFF,0.7},{0.5,0xFFFFFF,0.5}, {1,0xFFFFFF,0.3}},
    fg_colour2={{0,0X294172,0.7},{0.5,0x294172,0.5}, {1,0x294172,0.3}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

    {
    --Top mem 2
    name="top mem",
    arg="2",
    max=100,
    xc=125,
    yc=596,
    radius=46,
    thickness=11,
    start_angle=-90,
    end_angle=-180,
    sectors=8,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0},{0.5,0x000000,0}, {1,0x000000,0}},
    fg_colour1={{0,0XFFFFFF,0.6},{0.5,0xFFFFFF,0.4}, {1,0xFFFFFF,0.2}},
    fg_colour2={{0,0X294172,0.6},{0.5,0x294172,0.4}, {1,0x294172,0.2}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },
    
    {
    --Top mem 3
    name="top mem",
    arg="3",
    max=100,
    xc=125,
    yc=596,
    radius=57,
    thickness=11,
    start_angle=-90,
    end_angle=-180,
    sectors=8,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0},{0.5,0x000000,0}, {1,0x000000,0}},
    fg_colour1={{0,0XFFFFFF,0.4},{0.5,0xFFFFFF,0.2}, {1,0xFFFFFF,0}},
    fg_colour2={{0,0X294172,0.4},{0.5,0x294172,0.2}, {1,0x294172,0}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

    {
    --Battery
    name="battery_percent",
    arg="",
    max=100,
    xc=225,
    yc=495,
    radius=157,
    thickness=32,
    start_angle=-45,
    end_angle=180,
    sectors=100,
    inverse_arc=true,
    bg_colour1={{0,0XFFFFFF,0.7},{0.5,0xFFFFFF,0.4}, {1,0xFFFFFF,0}},
    fg_colour2={{0,0X294172,0.7},{0.5,0x294172,0.4}, {1,0x294172,0}},
    fg_colour1={{0,0X294172,0.7},{0.5,0x294172,0.4}, {1,0x294172,0}},
    bd_colour1={{0,0X00FF00,0.3},{0.5,0x00FF00,0.2}, {1,0x00FF00,0}},
    },
}
--END OF PARAMETERS HERE

--main function

    if conky_window==nil then return end

    local cs=cairo_xlib_surface_create(conky_window.display,
        conky_window.drawable, 
        conky_window.visual, conky_window.width, conky_window.height)
    cr=cairo_create(cs)

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

    cairo_destroy(cr)

end




function draw_ring(t)

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

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

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

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

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

        --check colors tables 
        for i=1, #t.bg_colour1 do 
            if #t.bg_colour1[i]~=3 then t.bg_colour1[i]={1,0xFFFFFF,0.5} end
        end
        for i=1, #t.fg_colour1 do 
            if #t.fg_colour1[i]~=3 then t.fg_colour1[i]={1,0xFF0000,1} end
        end
        for i=1, #t.bd_colour1 do 
            if #t.bd_colour1[i]~=3 then t.bd_colour1[i]={1,0xFFFF00,1} end
        end
    
        if t.bg_colour2~=nil then
            for i=1, #t.bg_colour2 do 
                if #t.bg_colour2[i]~=3 then t.bg_colour2[i]={1,0xFFFFFF,0.5} end
            end
        end
        if t.fg_colour2~=nil then
            for i=1, #t.fg_colour2 do 
                if #t.fg_colour2[i]~=3 then t.fg_colour2[i]={1,0xFF0000,1} end
            end
        end
        if t.bd_colour2~=nil then
            for i=1, #t.bd_colour2 do 
                if #t.bd_colour2[i]~=3 then t.bd_colour2[i]={1,0xFFFF00,1} end
            end
        end     
        
        if t.start_angle>=t.end_angle then
         local tmp_angle=t.end_angle
         t.end_angle= t.start_angle
         t.start_angle = tmp_angle
         -- print ("inversed angles")
            if t.end_angle-t.start_angle>360 and t.start_angle>0 then
                t.end_angle=360+t.start_angle
                print ("reduce angles")
            end
        
            if t.end_angle+t.start_angle>360 and t.start_angle<=0 then
                t.end_angle=360+t.start_angle
                print ("reduce angles")
            end
        
            if t.int_radius<0 then t.int_radius =0 end
            if t.int_radius>t.radius then
                local tmp_radius=t.radius
                t.radius=t.int_radius
                t.int_radius=tmp_radius
                print ("inversed radius")
            end
            if t.int_radius==t.radius then
                t.int_radius=0
                print ("int radius set to 0")
            end 
        end
        
        t.fg_colour1 = calc_delta(t.fg_colour1,t.fg_colour2)
        t.bg_colour1 = calc_delta(t.bg_colour1,t.bg_colour2)
        t.bd_colour1 = calc_delta(t.bd_colour1,t.bd_colour2)
    end
    
    --initialize table
    setup(t)
    --[[grid
    h=conky_window.height
    w=conky_window.width
    cairo_set_source_rgba(cr,1,1,1,1)
    cairo_set_line_width(cr,0.5)
    cairo_move_to(cr,0,t.yc)
    cairo_line_to(cr,w,t.yc)
    cairo_stroke(cr)
    cairo_move_to(cr,t.xc,0)
    cairo_line_to(cr,t.xc,h)
    cairo_stroke(cr)
    cairo_move_to(cr,t.xc,t.yc)
    cairo_line_to(cr,t.xc+200*math.sin(math.pi/4),t.yc-200*math.cos(math.pi/4))
    cairo_stroke(cr)
    cairo_move_to(cr,0,t.yc-t.radius)
    cairo_line_to(cr,w,t.yc-t.radius)
    cairo_stroke(cr)
    cairo_move_to(cr,0,t.yc-t.int_radius)
    cairo_line_to(cr,w,t.yc-t.int_radius)
    cairo_stroke(cr)
    cairo_move_to(cr,0,t.yc-t.gap_sectors)
    cairo_line_to(cr,w,t.yc-t.gap_sectors)
    cairo_stroke(cr)
    cairo_set_source_rgba(cr,1,0,0,0.5)
    cairo_arc(cr,t.xc,t.yc,t.radius,0,2*math.pi)
    cairo_stroke(cr)
    cairo_arc(cr,t.xc,t.yc,t.int_radius,0,2*math.pi)    
    cairo_stroke(cr)    
    cairo_set_source_rgba(cr,0,1,0,1)    
    cairo_move_to(cr,t.xc+t.gap_sectors,t.yc-t.gap_sectors)
    cairo_line_to(cr,t.xc+400*math.sin(math.pi/4),t.yc-400*math.cos(math.pi/4))
    cairo_stroke(cr)
    --END GRID
    ]]
    
    --initialize cairo context
    cairo_save(cr)
    cairo_translate(cr,t.xc,t.yc)
    cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND)
    cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND)

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

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


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

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

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

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

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

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

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


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

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

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

         cairo_restore(cr)

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

    cairo_restore(cr)
end


--[[END OF RING-SECTORS WIDGET]]


function axis(ctx,alpha)
    cairo_set_line_width(ctx,1)
    cairo_set_source_rgba(ctx,1,0,0,alpha)
    cairo_move_to(ctx,0,0)
    cairo_line_to(ctx,150,0)
    cairo_stroke(ctx)
    cairo_set_source_rgba(ctx,0,1,0,alpha)
    cairo_move_to(ctx,0,0)
    cairo_line_to(ctx,0,150)
    cairo_stroke(ctx)
end
et conky_fedora_text_bleu.lua (les valeurs textuelles):

Vous aurez besoin des polices StyleBats, LCDMono2 et OpenLogos (disponibles sur DaFont)
require 'cairo'
function conky_draw_text()
    --BEGIN OF PARAMETRES
    text_settings={


        {
            text="B",
            font_name="StyleBats",
            font_size=40,
            h_align="c",
            orientation="ww",
            angle=-90,
            x=185,
            y=551,
            colour={{0,0X3C6EB4,0.1},{0.5,0x3C6EB4,0.3}, {1,0x3C6EB4,0.5}},
        },

        {
            text=conky_parse("${time %d}   ${time %m}"),
            font_name="LCDMono2",
            font_size=12,
            h_align="l",
            x=166,
            y=561,
            angle=-45,
            orientation="nn",
            colour={{0,0XFFFFFF,0.5},{0.5,0xFFFFFF,0.3}, {1,0x3C6EB4,0.5}},
        },

        {
            text=conky_parse("${time %H:%M}"),
            font_name="LCDMono2",
            font_size=18,
            h_align="c",
            bold=true,
            x=260,
            y=470,
            angle=-45,
            orientation="nn",
            colour={{0,0XFFFFFF,0.5},{0.5,0xFFFFFF,0.3}, {1,0x3C6EB4,0.5}},
        },
        
        {
            text=conky_parse("${cpu cpu0}"),
            font_name="LCDMono2",
            font_size=10,
            h_align="r",
            bold=true,
            x=182,
            y=508,
            colour={{0,0X294172,0.5},{0.5,0x294172,1}, {1,0x294172,0.5}},
        },

        {
            text=conky_parse("${cpu cpu1}"),
            font_name="LCDMono2",
            font_size=10,
            h_align="r",
            bold=true,
            x=206,
            y=503,
            orientation="nn",
            colour={{0,0X294172,0.5},{0.5,0x294172,1}, {1,0x294172,0.5}},
        },

        {
            text=conky_parse("${cpu cpu2}"),
            font_name="LCDMono2",
            font_size=10,
            h_align="r",
            bold=true,
            x=206,
            y=512,
            orientation="nn",
            colour={{0,0X294172,0.5},{0.5,0x294172,1}, {1,0x294172,0.5}},
        },    

        {
            text="D",
            font_name="StyleBats",
            font_size=28,
            h_align="c",
            x=187,
            y=515,
            orientation="nn",
            colour={{0,0X3C6EB4,0.5},{0.5,0x3C6EB4,1}, {1,0x3C6EB4,0.5}},
        },    

        {
            text=conky_parse("$memperc"),
            font_name="LCDMono2",
            font_size=10,
            h_align="r",
            bold=true,
            orientation="nn",
            x=248,
            y=499,
            colour={{0,0X294172,0.5},{0.5,0x294172,1}, {1,0x294172,0.5}},
        },

        {
            text=conky_parse("$fs_used_perc"),
            font_name="LCDMono2",
            font_size=10,
            h_align="r",
            bold=true,
            orientation="nn",
            x=248,
            y=516,
            colour={{0,0X294172,0.5},{0.5,0x294172,1}, {1,0x294172,0.5}},
        },

        {
            text="W",
            font_name="StyleBats",
            font_size=26,
            h_align="c",
            x=240,
            y=503,
            angle=90,
            orientation="nn",
            colour={{0,0X3C6EB4,0.5},{0.5,0x3C6EB4,1}, {1,0x3C6EB4,0.5}},
        },

        {
            text="R",
            font_name="StyleBats",
            font_size=22,
            h_align="c",
            angle=90,
            x=150,
            y=595,
            colour={{0,0X3C6EB4,0.5},{0.5,0x3C6EB4,1}, {1,0x3C6EB4,0.5}},
        },

        {
            text=conky_parse("${downspeedf eth0}"),
            font_name="LCDMono2",
            font_size=14,
            h_align="l",
            bold=true,
            x=222,
            y=544,
            angle=-90,
            colour={{0,0X294172,0.5},{0.5,0x294172,1}, {1,0x294172,0.5}},
        },

        {
            text="R",
            font_name="StyleBats",
            font_size=22,
            h_align="c",
            angle=-90,
            x=284,
            y=411,
            colour={{0,0X3C6EB4,0.5},{0.5,0x3C6EB4,1}, {1,0x3C6EB4,0.5}},
        },

        {
            text=conky_parse("${upspeedf eth0}"),
            font_name="LCDMono2",
            font_size=14,
            h_align="r",
            bold=true,
            x=223,
            y=462,
            angle=-90,
            colour={{0,0X294172,0.5},{0.5,0x294172,1}, {1,0x294172,0.5}},
        },

        {
            text=conky_parse("$uptime"),
            font_name="LCDMono2",
            font_size=14,
            h_align="c",
            bold=true,
            orientation="nn",
            angle=-45,
            x=290,
            y=570,
            colour={{0,0XAAAAAA,0.2},{0.5,0xCCCCCC,0.5}, {1,0xAAAAAA,0.2}},
        },    

        {
            text=conky_parse("$kernel"),
            font_name="LCDMono2",
            font_size=12,
            h_align="c",
            bold=true,
            orientation="nn",
            angle=-45,
            x=280,
            y=550,
            colour={{0,0XAAAAAA,0.2},{0.5,0xCCCCCC,0.5}, {1,0xAAAAAA,0.2}},
        },    


        {
            text="t",
            font_name="OpenLogos",
            font_size=90,
            h_align="c",
            v_align="m",
            x=155,
            y=445,
            angle=-45,
            orientation="nn",
            colour={{0,0X294172,0.1},{0.5,0x294172,0.1}, {1,0x294172,0.1}},
        },

        {
            text=conky_parse("${top name 1}"),
            font_name="LCDMono2",
            font_size=12,
            h_align="r",
            bold=true,
            orientation="nn",
            angle=-90,
            x=100,
            y=500,
            colour={{0,0X294172,0.3},{0.5,0x294172,0.5}, {1,0x294172,0.3}},
        },    

        {
            text=conky_parse("${top name 2}"),
            font_name="LCDMono2",
            font_size=12,
            h_align="r",
            bold=true,
            orientation="nn",
            angle=-90,
            x=89,
            y=500,
            colour={{0,0X6C86AD,0.4},{0.5,0x6C86AD,0.6}, {1,0x6C86AD,0.4}},
        },    

        {
            text=conky_parse("${top name 3}"),
            font_name="LCDMono2",
            font_size=12,
            h_align="r",
            bold=true,
            orientation="nn",
            angle=-90,
            x=78,
            y=500,
            colour={{0,0XFFFFFF,0.2},{0.5,0xFFFFFF,0.5}, {1,0xFFFFFF,0.2}},
        },

        {
            text=conky_parse("${battery_time}"),
            font_name="LCDMono2",
            font_size=14,
            h_align="c",
            bold=true,
            orientation="nn",
            angle=0,
            x=175,
            y=640,
            colour={{0,0XFFFFFF,0.1},{0.5,0xFFFFFF,0.3}, {1,0xFFFFFF,0.1}},
        },
    }
    
    
--------------END OF PARAMETERES----------------
    if conky_window == nil then return end
    if tonumber(conky_parse("$updates"))<3 then return end
       
    local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)

    for i,v in pairs(text_settings) do    
        cr = cairo_create (cs)
        display_text(v)
        cairo_destroy(cr)
    end
    
    cairo_surface_destroy(cs)
    


end

function rgb_to_r_g_b2(tcolour)
    colour,alpha=tcolour[2],tcolour[3]
    return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end

function display_text(t)

    local function set_pattern()
        --this function set the pattern
        if #t.colour==1 then 
            cairo_set_source_rgba(cr,rgb_to_r_g_b2(t.colour[1]))
        else
            local pat
            
            if t.radial==nil then
                local pts=linear_orientation(t,te)
                pat = cairo_pattern_create_linear (pts[1],pts[2],pts[3],pts[4])
            else
                pat = cairo_pattern_create_radial (t.radial[1],t.radial[2],t.radial[3],t.radial[4],t.radial[5],t.radial[6])
            end
        
            for i=1, #t.colour do
                cairo_pattern_add_color_stop_rgba (pat, t.colour[i][1], rgb_to_r_g_b2(t.colour[i]))
            end
            cairo_set_source (cr, pat)
        end
    end
    
    --set default values if needed
    if t.text==nil then t.text="Conky is good for you !" end
    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.colour==nil then t.colour={{1,0xFFFFFF,1}} end
    if t.font_name==nil then t.font_name="Free Sans" end
    if t.font_size==nil then t.font_size=14 end
    if t.angle==nil then t.angle=0 end
    if t.italic==nil then t.italic=false end
    if t.oblique==nil then t.oblique=false end
    if t.bold==nil then t.bold=false end
    if t.radial ~= nil then
        if #t.radial~=6 then 
            print ("error in radial table")
            t.radial=nil 
        end
    end
    if t.orientation==nil then t.orientation="ww" end
    if t.h_align==nil then t.h_align="l" end
    if t.v_align==nil then t.v_align="b" 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
    if t.skew_x==nil then t.skew_x=0 end
    if t.skew_y==nil then t.skew_y=0 end    
    cairo_translate(cr,t.x,t.y)
    cairo_rotate(cr,t.angle*math.pi/180)
    cairo_save(cr)       
     
 

    local slant = CAIRO_FONT_SLANT_NORMAL
    local weight =CAIRO_FONT_WEIGHT_NORMAL
    if t.italic then slant = CAIRO_FONT_SLANT_ITALIC end
    if t.oblique then slant = CAIRO_FONT_SLANT_OBLIQUE end
    if t.bold then weight = CAIRO_FONT_WEIGHT_BOLD end
    
    cairo_select_font_face(cr, t.font_name, slant,weight)
 
    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

    local matrix0 = cairo_matrix_t:create()
    skew_x,skew_y=t.skew_x/t.font_size,t.skew_y/t.font_size
    cairo_matrix_init (matrix0, 1,skew_y,skew_x,1,0,0)
    cairo_transform(cr,matrix0)
    cairo_set_font_size(cr,t.font_size)
    te=cairo_text_extents_t:create()
    cairo_text_extents (cr,t.text,te)
    
    set_pattern()


            
    mx,my=0,0
    
    if t.h_align=="c" then
        mx=-te.width/2
    elseif t.h_align=="r" then
        mx=-te.width
    end
    if t.v_align=="m" then
        my=-te.height/2-te.y_bearing
    elseif t.v_align=="t" then
        my=-te.y_bearing
    end
    cairo_move_to(cr,mx,my)
    
    cairo_show_text(cr,t.text)

     
        
        
   if t.reflection_alpha ~= 0 then 
        local matrix1 = cairo_matrix_t:create()
        cairo_set_font_size(cr,t.font_size)

        cairo_matrix_init (matrix1,1,0,0,-1*t.reflection_scale,0,(te.height+te.y_bearing+my)*(1+t.reflection_scale))
        cairo_set_font_size(cr,t.font_size)
        te=cairo_text_extents_t:create()
        cairo_text_extents (cr,t.text,te)
        
                
        cairo_transform(cr,matrix1)
        set_pattern()
        cairo_move_to(cr,mx,my)
        cairo_show_text(cr,t.text)

        local pat2 = cairo_pattern_create_linear (0,
                                        (te.y_bearing+te.height+my),
                                        0,
                                        te.y_bearing+my)
        cairo_pattern_add_color_stop_rgba (pat2, 0,1,0,0,1-t.reflection_alpha)
        cairo_pattern_add_color_stop_rgba (pat2, t.reflection_length,0,0,0,1)    
        
        
        cairo_set_line_width(cr,1)
        dy=te.x_bearing
        if dy<0 then dy=dy*(-1) end
        cairo_rectangle(cr,mx+te.x_bearing,te.y_bearing+te.height+my,te.width+dy,-te.height*1.05)
        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
    
end


function linear_orientation(t,te)
    local w,h=te.width,te.height
    local xb,yb=te.x_bearing,te.y_bearing
    
    if t.h_align=="c" then
        xb=xb-w/2
    elseif t.h_align=="r" then
        xb=xb-w
       end    
    if t.v_align=="m" then
        yb=-h/2
    elseif t.v_align=="t" then
        yb=0
       end    
       
    if t.orientation=="nn" then
        p={xb+w/2,yb,xb+w/2,yb+h}
    elseif t.orientation=="ne" then
        p={xb+w,yb,xb,yb+h}
    elseif t.orientation=="ww" then
        p={xb,h/2,xb+w,h/2}
    elseif vorientation=="se" then
        p={xb+w,yb+h,xb,yb}
    elseif t.orientation=="ss" then
        p={xb+w/2,yb+h,xb+w/2,yb}
    elseif vorientation=="ee" then
        p={xb+w,h/2,xb,h/2}        
    elseif t.orientation=="sw" then
        p={xb,yb+h,xb+w,yb}
    elseif t.orientation=="nw" then
        p={xb,yb,xb+w,yb+h}
    end
    return p
end
[edit] Petit changement de couleur pour les jauges CPU TOP{1 à 3} RAM BATTERY et FS_USED
Mec, je ne sais pas comment tu as fait ça… Mais bravo en tout cas, c'est très beau et très bien fait, trop bien fait ! Jamais je n'aurais pensé cela possible… Je vais l'adopter je le sens, c'est trop beau.
Renault wrote:Mec, je ne sais pas comment tu as fait ça… Mais bravo en tout cas, c'est très beau et très bien fait, trop bien fait ! Jamais je n'aurais pensé cela possible… Je vais l'adopter je le sens, c'est trop beau.
Merci des compliments ! Ne pas oublier qu'il faut conky v1.8 (donc le compiler sois-même pour que les scripts lua fonctionnent)

J'ai réussi à faire ça en tâtonnant, en bidouillant les paramètres de configuration des anneaux. Et chaque jour, je modifie des détails (j'ai pas encore mis à jour le post, mais ça ne saurai tarder)

Maintenant pour rigoler, faudrai que je fasse pareil pour les logos des autres distro (genre Ubuntu, Arch, Debian) se serai sympa.
4 jours plus tard
Comme prévu, la dernière mise à jour de ce conky. Au taf, ça donne ça avec le wallpaper de F14 (mais sous F12...)


Donc le background :
Vous pouvez toujours garder la précédente version (sans l'extension bleu_transparente)

le conky_rc :
background no
update_interval 1
 
cpu_avg_samples 2
net_avg_samples 2

override_utf8_locale yes

double_buffer yes
no_buffers yes

text_buffer_size 2048
imlib_cache_size 0

own_window false
own_window_type desktop
own_window_transparent yes
own_window_hints undecorated,sticky,skip_taskbar,skip_pager,below

border_inner_margin 0
border_outer_margin 0
stippled_borders 0

minimum_size 250 250
maximum_width 250
 
alignment top_left
gap_x 1100
gap_y 500

draw_shades yes
default_shade_color 000000
draw_outline no
draw_borders no
draw_graph_borders no

use_xft yes
xftfont LCDMono2:size=10
xftalpha 0.4

lua_load ~/.conky/conky_fedora/conky_fedora_bleu.lua
lua_load ~/.conky/conky_fedora/conky_fedora_text_bleu.lua

lua_draw_hook_pre main_rings
lua_draw_hook_post draw_text

TEXT
${image ~/.conky/conky_fedora/bg_bleu.png -p 0,0 -f 86400}
le script lua pour les anneaux (j'ai remis la paternité histoire d'être « propre ») :
--[[ RINGS with SECTORS widget
    v1.0 by wlourf (08.08.2010)
    this widget draws a ring with differents effects 
    http://u-scripts.blogspot.com/2010/08/rings-sectors-widgets.html
    v1.0 (08 Aug. 2010) original release
]]
require 'cairo'
function conky_main_rings()
-- START PARAMETERS HERE
    
    --Gap conky window
    gap_conky_x=1100
    gap_conky_y=500

rings_settings={

    {
    --seconds
    name="time",
    arg="%S",
    max=60,
    xc=196,
    yc=88,
    radius=27,
    thickness=10,
    start_angle=-115,
    end_angle=205,
    sectors=30,
    gap_sectors=2,
    fill_sector=true,
    bg_colour1={{0,0x000000,0},{0.5,0x000000,0.1}, {1,0x000000,0}},
    fg_colour1={{0,0XFFFFFF,0},{0.7,0xFFFFFF,0.2}, {1,0xFFFFFF,0.5}},
    fg_colour2={{0,0XFFFFFF,0},{0.7,0xFFFFFF,0.2}, {1,0xFFFFFF,0.5}},
    bd_colour1={{0,0X000000,1},{0.5,0x000000,1}, {1,0x000000,1}},
    },

    {
    --cpu0
    name="cpu",
    arg="cpu0",
    max=100,
    xc=105,
    yc=178,
    radius=46,
    thickness=4,
    start_angle=-150,
    end_angle=-3,
    sectors=10,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0.2},{0.5,0x000000,0.2}, {1,0x000000,0.2}},
    fg_colour1={{0,0XFFFFFF,0.7},{0.5,0xFFFFFF,1}, {1,0xFFFFFF,0.7}},
    fg_colour2={{0,0XFFFFFF,0.7},{0.5,0xD6E0EF,1}, {1,0xFFFFFF,0.7}},
    --fg_colour2={{0,0X294172,0.7},{0.5,0x294172,1}, {1,0x294172,0.7}},
    bd_colour1={{0,0X000000,1},{0.5,0x000000,1}, {1,0x000000,1}},
    },

    {
    --cpu1
    name="cpu",
    arg="cpu1",
    max=100,
    xc=105,
    yc=178,
    radius=57,
    thickness=10,
    start_angle=-150,
    end_angle=-3,
    sectors=20,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0.2},{0.5,0x000000,0.1}, {1,0x000000,0}},
    fg_colour1={{0,0XFFFFFF,0.7},{0.5,0xFFFFFF,0.5}, {1,0xFFFFFF,0.1}},
    fg_colour2={{0,0XD6E0EF,0.7},{0.5,0xFFFFFF,0.5}, {1,0xFFFFFF,0.1}},
    --fg_colour2={{0,0X294172,0.7},{0.5,0x294172,1}, {1,0x294172,0.5}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },
    
    {
    --cpu2
    name="cpu",
    arg="cpu2",
    max=100,
    xc=105,
    yc=178,
    radius=41,
    thickness=10,
    start_angle=-150,
    end_angle=-3,
    sectors=20,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0},{0.5,0x000000,0.1}, {1,0x000000,0.2}},
    fg_colour1={{0,0XFFFFFF,0.1},{0.5,0xFFFFFF,0.5}, {1,0xFFFFFF,0.7}},
    fg_colour2={{0,0XFFFFFF,0.1},{0.5,0xFFFFFF,0.5}, {1,0xD6E0EF,0.7}},
    --fg_colour2={{0,0X294172,0.5},{0.5,0x294172,1}, {1,0x294172,0.7}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

    {
    --ram
    name="memperc",
    arg="",
    max=100,
    xc=197,
    yc=89,
    radius=41,
    thickness=10,
    start_angle=30,
    end_angle=177,
    sectors=20,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0},{0.5,0x000000,0.1}, {1,0x000000,0.2}},
    fg_colour1={{0,0XFFFFFF,0.1},{0.5,0xFFFFFF,0.5}, {1,0xFFFFFF,0.7}},
    fg_colour2={{0,0XFFFFFF,0.1},{0.5,0xFFFFFF,0.5}, {1,0xD6E0EF,0.7}},
    --fg_colour2={{0,0X294172,0.1},{0.5,0x294172,0.7}, {1,0x294172,1}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

    {
    --load avg
    name="loadavg",
    arg="1",
    max=3,
    xc=197,
    yc=89,
    radius=46,
    thickness=4,
    start_angle=30,
    end_angle=177,
    sectors=10,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0.2},{0.5,0x000000,0.2}, {1,0x000000,0.2}},
    fg_colour1={{0,0XFFFFFF,0.7},{0.5,0xFFFFFF,1}, {1,0xFFFFFF,0.7}},
    fg_colour2={{0,0XFFFFFF,0.7},{0.5,0xD6E0EF,1}, {1,0xFFFFFF,0.7}},
    --fg_colour2={{0,0X294172,0.1},{0.5,0x294172,0.7}, {1,0x294172,1}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

    {
    --fs_used
    name="fs_used_perc",
    arg="/",
    max=100,
    xc=197,
    yc=89,
    radius=57,
    thickness=10,
    start_angle=30,
    end_angle=177,
    sectors=20,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0.2},{0.5,0x000000,0.1}, {1,0x000000,0}},
    fg_colour1={{0,0XFFFFFF,0.7},{0.5,0xFFFFFF,0.5}, {1,0xFFFFFF,0.1}},
    fg_colour2={{0,0XD6E0EF,0.7},{0.5,0xFFFFFF,0.5}, {1,0xFFFFFF,0.1}},
    --fg_colour2={{0,0X294172,1},{0.5,0x294172,0.7}, {1,0x294172,0.3}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },
        
    {
    --download speed
    name="downspeedf",
    arg="eth0",
    max=1500,
    xc=105,
    yc=176,
    radius=60,
    thickness=28,
    start_angle=90,
    end_angle=180,
    sectors=15,
    fill_sector=true,
    gap_sectors=1,
    bg_colour1={{0,0x000000,0},{0.7,0x333333,0.3}, {1,0x111111,0.1}},
    fg_colour1={{0,0X294172,0},{0.7,0x294172,1}, {1,0x294172,0.2}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },
    
    
    {
    --upload speed
    name="upspeedf",
    arg="eth0",
    max=400,
    xc=197,
    yc=90,
    radius=60,
    thickness=28,
    start_angle=270,
    end_angle=360,
    sectors=15,
    fill_sector=true,
    gap_sectors=1,
    bg_colour1={{0,0x111111,0.1},{0.3,0x333333,0.3}, {1,0x000000,0}},
    fg_colour1={{0,0X294172,0.2},{0.3,0x294172,1}, {1,0x294172,0}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

    {
    --Top cpu 1
    name="top cpu",
    arg="1",
    max=100,
    xc=59,
    yc=226,
    radius=35,
    thickness=11,
    start_angle=-90,
    end_angle=-180,
    sectors=10,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0},{0.5,0x000000,0}, {1,0x000000,0}},
    fg_colour1={{0,0XD6E0EF,0.8},{0.5,0xFFFFFF,0.5}, {1,0xFFFFFF,0.3}},
    fg_colour2={{0,0XD6E0EF,0.8},{0.5,0xFFFFFF,0.5}, {1,0xFFFFFF,0.3}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

    {
    --Top cpu 2
    name="top cpu",
    arg="2",
    max=100,
    xc=59,
    yc=226,
    radius=46,
    thickness=11,
    start_angle=-90,
    end_angle=-180,
    sectors=10,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0},{0.5,0x000000,0}, {1,0x000000,0}},
    fg_colour1={{0,0XD6E0EF,0.6},{0.5,0xFFFFFF,0.4}, {1,0xFFFFFF,0.2}},
    fg_colour2={{0,0XD6E0EF,0.6},{0.5,0xFFFFFF,0.4}, {1,0xFFFFFF,0.2}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },
    
    {
    --Top cpu 3
    name="top cpu",
    arg="3",
    max=100,
    xc=59,
    yc=226,
    radius=57,
    thickness=11,
    start_angle=-90,
    end_angle=-180,
    sectors=10,
    inverse_arc=true,
    bg_colour1={{0,0x000000,0},{0.5,0x000000,0}, {1,0x000000,0}},
    fg_colour1={{0,0XD6E0EF,0.4},{0.5,0xFFFFFF,0.2}, {1,0xFFFFFF,0}},
    fg_colour2={{0,0XD6E0EF,0.4},{0.5,0xFFFFFF,0.2}, {1,0xFFFFFF,0}},
    bd_colour1={{0,0X00FF00,1},{0.5,0x00FF00,1}, {1,0x00FF00,1}},
    },

    {
    --Battery
    name="battery_percent",
    arg="",
    max=100,
    xc=159,
    yc=125,
    radius=140,
    thickness=15,
    start_angle=-90,
    end_angle=180,
    sectors=100,
    inverse_arc=true,
    bg_colour1={{0,0X294172,0.5},{0.5,0x294172,0.2}, {1,0x294172,0}},
    fg_colour2={{0,0XD6E0EF,0.5},{0.5,0xFFFFFF,0.2}, {1,0xFFFFFF,0}},
    fg_colour1={{0,0XD6E0EF,0.5},{0.5,0xFFFFFF,0.2}, {1,0xFFFFFF,0}},
    bd_colour1={{0,0X00FF00,0.3},{0.5,0x00FF00,0.2}, {1,0x00FF00,0}},
    },
}
--END OF PARAMETERS HERE

--main function

    if conky_window==nil then return end

    local cs=cairo_xlib_surface_create(conky_window.display,
        conky_window.drawable, 
        conky_window.visual, conky_window.width, conky_window.height)
    cr=cairo_create(cs)

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

    cairo_destroy(cr)

end




function draw_ring(t)

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

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

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

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

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

        --check colors tables 
        for i=1, #t.bg_colour1 do 
            if #t.bg_colour1[i]~=3 then t.bg_colour1[i]={1,0xFFFFFF,0.5} end
        end
        for i=1, #t.fg_colour1 do 
            if #t.fg_colour1[i]~=3 then t.fg_colour1[i]={1,0xFF0000,1} end
        end
        for i=1, #t.bd_colour1 do 
            if #t.bd_colour1[i]~=3 then t.bd_colour1[i]={1,0xFFFF00,1} end
        end
    
        if t.bg_colour2~=nil then
            for i=1, #t.bg_colour2 do 
                if #t.bg_colour2[i]~=3 then t.bg_colour2[i]={1,0xFFFFFF,0.5} end
            end
        end
        if t.fg_colour2~=nil then
            for i=1, #t.fg_colour2 do 
                if #t.fg_colour2[i]~=3 then t.fg_colour2[i]={1,0xFF0000,1} end
            end
        end
        if t.bd_colour2~=nil then
            for i=1, #t.bd_colour2 do 
                if #t.bd_colour2[i]~=3 then t.bd_colour2[i]={1,0xFFFF00,1} end
            end
        end     
        
        if t.start_angle>=t.end_angle then
         local tmp_angle=t.end_angle
         t.end_angle= t.start_angle
         t.start_angle = tmp_angle
         -- print ("inversed angles")
            if t.end_angle-t.start_angle>360 and t.start_angle>0 then
                t.end_angle=360+t.start_angle
                print ("reduce angles")
            end
        
            if t.end_angle+t.start_angle>360 and t.start_angle<=0 then
                t.end_angle=360+t.start_angle
                print ("reduce angles")
            end
        
            if t.int_radius<0 then t.int_radius =0 end
            if t.int_radius>t.radius then
                local tmp_radius=t.radius
                t.radius=t.int_radius
                t.int_radius=tmp_radius
                print ("inversed radius")
            end
            if t.int_radius==t.radius then
                t.int_radius=0
                print ("int radius set to 0")
            end 
        end
        
        t.fg_colour1 = calc_delta(t.fg_colour1,t.fg_colour2)
        t.bg_colour1 = calc_delta(t.bg_colour1,t.bg_colour2)
        t.bd_colour1 = calc_delta(t.bd_colour1,t.bd_colour2)
    end
    
    --initialize table
    setup(t)
    --[[grid
    h=conky_window.height
    w=conky_window.width
    cairo_set_source_rgba(cr,1,1,1,1)
    cairo_set_line_width(cr,0.5)
    cairo_move_to(cr,0,t.yc)
    cairo_line_to(cr,w,t.yc)
    cairo_stroke(cr)
    cairo_move_to(cr,t.xc,0)
    cairo_line_to(cr,t.xc,h)
    cairo_stroke(cr)
    cairo_move_to(cr,t.xc,t.yc)
    cairo_line_to(cr,t.xc+200*math.sin(math.pi/4),t.yc-200*math.cos(math.pi/4))
    cairo_stroke(cr)
    cairo_move_to(cr,0,t.yc-t.radius)
    cairo_line_to(cr,w,t.yc-t.radius)
    cairo_stroke(cr)
    cairo_move_to(cr,0,t.yc-t.int_radius)
    cairo_line_to(cr,w,t.yc-t.int_radius)
    cairo_stroke(cr)
    cairo_move_to(cr,0,t.yc-t.gap_sectors)
    cairo_line_to(cr,w,t.yc-t.gap_sectors)
    cairo_stroke(cr)
    cairo_set_source_rgba(cr,1,0,0,0.5)
    cairo_arc(cr,t.xc,t.yc,t.radius,0,2*math.pi)
    cairo_stroke(cr)
    cairo_arc(cr,t.xc,t.yc,t.int_radius,0,2*math.pi)    
    cairo_stroke(cr)    
    cairo_set_source_rgba(cr,0,1,0,1)    
    cairo_move_to(cr,t.xc+t.gap_sectors,t.yc-t.gap_sectors)
    cairo_line_to(cr,t.xc+400*math.sin(math.pi/4),t.yc-400*math.cos(math.pi/4))
    cairo_stroke(cr)
    --END GRID
    ]]
    
    --initialize cairo context
    cairo_save(cr)
    cairo_translate(cr,(t.xc+gap_conky_x),(t.yc+gap_conky_y))
    cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND)
    cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND)

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

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


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

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

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

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

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

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

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


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

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

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

         cairo_restore(cr)

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

    cairo_restore(cr)
end


--[[END OF RING-SECTORS WIDGET]]


function axis(ctx,alpha)
    cairo_set_line_width(ctx,1)
    cairo_set_source_rgba(ctx,1,0,0,alpha)
    cairo_move_to(ctx,0,0)
    cairo_line_to(ctx,150,0)
    cairo_stroke(ctx)
    cairo_set_source_rgba(ctx,0,1,0,alpha)
    cairo_move_to(ctx,0,0)
    cairo_line_to(ctx,0,150)
    cairo_stroke(ctx)
end    
et le script lua du texte :
--[[ RINGS with SECTORS widget
    v1.0 by wlourf (08.08.2010)
    this widget draws a ring with differents effects 
    http://u-scripts.blogspot.com/2010/08/rings-sectors-widgets.html
    v1.0 (08 Aug. 2010) original release
]]
require 'cairo'
function conky_draw_text()
    --BEGIN OF PARAMETRES

    --Gap conky window
    gap_conky_x=1100
    gap_conky_y=500

        text_settings={


        {
            text="B",
            font_name="StyleBats",
            font_size=40,
            h_align="c",
            orientation="ww",
            angle=90,
            x=101,
            y=167,
            colour={{0,0X3C6EB4,0.1},{0.5,0x3C6EB4,0.3}, {1,0x3C6EB4,0.5}},
        },

        {
            text=conky_parse("${time %d}     ${time %m}"),
            font_name="DS-Digital",
            font_size=18,
            h_align="l",
            x=94,
            y=198,
            angle=-45,
            orientation="nn",
            colour={{0,0XFFFFFF,0.5},{0.5,0xFFFFFF,0.3}, {1,0x3C6EB4,0.5}},
        },

        {
            text=conky_parse("${time %H:%M}"),
            font_name="DS-Digital",
            font_size=22,
            h_align="c",
            bold=false,
            x=196,
            y=98,
            angle=-45,
            orientation="nn",
            colour={{0,0XFFFFFF,0.5},{0.5,0xFFFFFF,0.3}, {1,0x3C6EB4,0.5}},
        },

        {
            text="i",
            font_name="StyleBats",
            font_size=28,
            h_align="c",
            x=114,
            y=145,
            orientation="nn",
            colour={{0,0X3C6EB4,0.3},{0.5,0x3C6EB4,0.3}, {1,0x3C6EB4,0.3}},
        },    

        {
            text="Y",
            font_name="StyleBats",
            font_size=26,
            h_align="c",
            x=174,
            y=133,
            angle=90,
            orientation="nn",
            colour={{0,0X3C6EB4,0.3},{0.5,0x3C6EB4,0.3}, {1,0x3C6EB4,0.3}},
        },

        {
            text="R",
            font_name="StyleBats",
            font_size=22,
            h_align="c",
            angle=90,
            x=84,
            y=225,
            colour={{0,0X3C6EB4,0.3},{0.5,0x3C6EB4,0.3}, {1,0x3C6EB4,0.3}},
        },

        {
            text=conky_parse("${downspeedf eth0}"),
            font_name="DS-Digital",
            font_size=14,
            h_align="l",
            bold=false,
            x=156,
            y=174,
            angle=-90,
            colour={{0,0X294172,0.5},{0.5,0x294172,1}, {1,0x294172,0.5}},
        },

        {
            text="R",
            font_name="StyleBats",
            font_size=22,
            h_align="c",
            angle=-90,
            x=218,
            y=41,
            colour={{0,0X3C6EB4,0.3},{0.5,0x3C6EB4,0.3}, {1,0x3C6EB4,0.3}},
        },

        {
            text=conky_parse("${upspeedf eth0}"),
            font_name="DS-Digital",
            font_size=14,
            h_align="r",
            bold=false,
            x=157,
            y=92,
            angle=-90,
            colour={{0,0X294172,0.5},{0.5,0x294172,1}, {1,0x294172,0.5}},
        },

        {
            text=conky_parse("$uptime"),
            font_name="DS-Digital",
            font_size=20,
            h_align="c",
            bold=false,
            orientation="nn",
            angle=-45,
            x=224,
            y=200,
            colour={{0,0XAAAAAA,0.2},{0.5,0xCCCCCC,0.5}, {1,0xAAAAAA,0.2}},
        },    

        {
            text=conky_parse("$kernel"),
            font_name="DS-Digital",
            font_size=18,
            h_align="c",
            bold=false,
            orientation="nn",
            angle=-45,
            x=214,
            y=180,
            colour={{0,0XAAAAAA,0.2},{0.5,0xCCCCCC,0.5}, {1,0xAAAAAA,0.2}},
        },    
        
        {
            text="FC12",
            font_name="DS-Digital",
            font_size=50,
            h_align="c",
            v_align="m",
            x=94,
            y=70,
            angle=-45,
            bold="true",
            orientation="nn",
            colour={{0,0X294172,0.3},{0.5,0x294172,0.1}, {1,0x294172,0.3}},
        },
        
        {
            text=conky_parse("${top name 1}"),
            font_name="DS-Digital",
            font_size=16,
            h_align="l",
            bold=false,
            orientation="nn",
            angle=-90,
            x=34,
            y=225,
            colour={{0,0X294172,0.3},{0.5,0x294172,0.5}, {1,0x294172,0.3}},
        },    

        {
            text=conky_parse("${top name 2}"),
            font_name="DS-Digital",
            font_size=16,
            h_align="l",
            bold=false,
            orientation="nn",
            angle=-90,
            x=23,
            y=225,
            colour={{0,0X294172,0.2},{0.5,0x294172,0.3}, {1,0x294172,0.2}},
        },    

        {
            text=conky_parse("${top name 3}"),
            font_name="DS-Digital",
            font_size=16,
            h_align="l",
            bold=false,
            orientation="nn",
            angle=-90,
            x=12,
            y=225,
            colour={{0,0XFFFFFF,0.2},{0.5,0xFFFFFF,0.3}, {1,0xFFFFFF,0.2}},
        },

        {
            text=conky_parse("${battery_time}"),
            font_name="DS-Digital",
            font_size=18,
            h_align="r",
            bold=false,
            orientation="nn",
            angle=-45,
            x=139,
            y=66,
            colour={{0,0XFFFFFF,0.3},{0.5,0xFFFFFF,0.6}, {1,0xFFFFFF,0.3}},
        },

        {
            text=conky_parse("${battery}"),
            font_name="DS-Digital",
            font_size=18,
            h_align="r",
            bold=false,
            orientation="nn",
            angle=0,
            x=156,
            y=263,
            colour={{0,0XFFFFFF,0},{0.5,0xFFFFFF,0.3}, {1,0xFFFFFF,0.1}},
        },
    }
    
    
--------------END OF PARAMETERES----------------
    if conky_window == nil then return end
    if tonumber(conky_parse("$updates"))<3 then return end
       
    local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)

    for i,v in pairs(text_settings) do    
        cr = cairo_create (cs)
        display_text(v)
        cairo_destroy(cr)
    end
    
    cairo_surface_destroy(cs)
    


end

function rgb_to_r_g_b2(tcolour)
    colour,alpha=tcolour[2],tcolour[3]
    return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end

function display_text(t)

    local function set_pattern()
        --this function set the pattern
        if #t.colour==1 then 
            cairo_set_source_rgba(cr,rgb_to_r_g_b2(t.colour[1]))
        else
            local pat
            
            if t.radial==nil then
                local pts=linear_orientation(t,te)
                pat = cairo_pattern_create_linear (pts[1],pts[2],pts[3],pts[4])
            else
                pat = cairo_pattern_create_radial (t.radial[1],t.radial[2],t.radial[3],t.radial[4],t.radial[5],t.radial[6])
            end
        
            for i=1, #t.colour do
                cairo_pattern_add_color_stop_rgba (pat, t.colour[i][1], rgb_to_r_g_b2(t.colour[i]))
            end
            cairo_set_source (cr, pat)
        end
    end
    
    --set default values if needed
    if t.text==nil then t.text="Conky is good for you !" end
    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.colour==nil then t.colour={{1,0xFFFFFF,1}} end
    if t.font_name==nil then t.font_name="Free Sans" end
    if t.font_size==nil then t.font_size=14 end
    if t.angle==nil then t.angle=0 end
    if t.italic==nil then t.italic=false end
    if t.oblique==nil then t.oblique=false end
    if t.bold==nil then t.bold=false end
    if t.radial ~= nil then
        if #t.radial~=6 then 
            print ("error in radial table")
            t.radial=nil 
        end
    end
    if t.orientation==nil then t.orientation="ww" end
    if t.h_align==nil then t.h_align="l" end
    if t.v_align==nil then t.v_align="b" 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
    if t.skew_x==nil then t.skew_x=0 end
    if t.skew_y==nil then t.skew_y=0 end    
    cairo_translate(cr,(t.x+gap_conky_x),(t.y+gap_conky_y))
    cairo_rotate(cr,t.angle*math.pi/180)
    cairo_save(cr)       
     
 

    local slant = CAIRO_FONT_SLANT_NORMAL
    local weight =CAIRO_FONT_WEIGHT_NORMAL
    if t.italic then slant = CAIRO_FONT_SLANT_ITALIC end
    if t.oblique then slant = CAIRO_FONT_SLANT_OBLIQUE end
    if t.bold then weight = CAIRO_FONT_WEIGHT_BOLD end
    
    cairo_select_font_face(cr, t.font_name, slant,weight)
 
    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

    local matrix0 = cairo_matrix_t:create()
    skew_x,skew_y=t.skew_x/t.font_size,t.skew_y/t.font_size
    cairo_matrix_init (matrix0, 1,skew_y,skew_x,1,0,0)
    cairo_transform(cr,matrix0)
    cairo_set_font_size(cr,t.font_size)
    te=cairo_text_extents_t:create()
    cairo_text_extents (cr,t.text,te)
    
    set_pattern()


            
    mx,my=0,0
    
    if t.h_align=="c" then
        mx=-te.width/2
    elseif t.h_align=="r" then
        mx=-te.width
    end
    if t.v_align=="m" then
        my=-te.height/2-te.y_bearing
    elseif t.v_align=="t" then
        my=-te.y_bearing
    end
    cairo_move_to(cr,mx,my)
    
    cairo_show_text(cr,t.text)

     
        
        
   if t.reflection_alpha ~= 0 then 
        local matrix1 = cairo_matrix_t:create()
        cairo_set_font_size(cr,t.font_size)

        cairo_matrix_init (matrix1,1,0,0,-1*t.reflection_scale,0,(te.height+te.y_bearing+my)*(1+t.reflection_scale))
        cairo_set_font_size(cr,t.font_size)
        te=cairo_text_extents_t:create()
        cairo_text_extents (cr,t.text,te)
        
                
        cairo_transform(cr,matrix1)
        set_pattern()
        cairo_move_to(cr,mx,my)
        cairo_show_text(cr,t.text)

        local pat2 = cairo_pattern_create_linear (0,
                                        (te.y_bearing+te.height+my),
                                        0,
                                        te.y_bearing+my)
        cairo_pattern_add_color_stop_rgba (pat2, 0,1,0,0,1-t.reflection_alpha)
        cairo_pattern_add_color_stop_rgba (pat2, t.reflection_length,0,0,0,1)    
        
        
        cairo_set_line_width(cr,1)
        dy=te.x_bearing
        if dy<0 then dy=dy*(-1) end
        cairo_rectangle(cr,mx+te.x_bearing,te.y_bearing+te.height+my,te.width+dy,-te.height*1.05)
        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
    
end


function linear_orientation(t,te)
    local w,h=te.width,te.height
    local xb,yb=te.x_bearing,te.y_bearing
    
    if t.h_align=="c" then
        xb=xb-w/2
    elseif t.h_align=="r" then
        xb=xb-w
       end    
    if t.v_align=="m" then
        yb=-h/2
    elseif t.v_align=="t" then
        yb=0
       end    
       
    if t.orientation=="nn" then
        p={xb+w/2,yb,xb+w/2,yb+h}
    elseif t.orientation=="ne" then
        p={xb+w,yb,xb,yb+h}
    elseif t.orientation=="ww" then
        p={xb,h/2,xb+w,h/2}
    elseif vorientation=="se" then
        p={xb+w,yb+h,xb,yb}
    elseif t.orientation=="ss" then
        p={xb+w/2,yb+h,xb+w/2,yb}
    elseif vorientation=="ee" then
        p={xb+w,h/2,xb,h/2}        
    elseif t.orientation=="sw" then
        p={xb,yb+h,xb+w,yb}
    elseif t.orientation=="nw" then
        p={xb,yb,xb+w,yb+h}
    end
    return p
end
La petite nouveauté, j'ai rajouté deux variables (gap_conky_x et y) pour spécifier le décalage de la fenêtre conky (histoire que, si vous voulez décaler votre conky, vous ayez que deux variables à changer. C'est mieux que se retaper toutes les coordonnées pour tous les éléments).

J'ai également changé de police pour la typo LCD : DS-Digital (dispo sur DaFont). Ce qui fait juste StyleBats et DS-Digital à installer.

Pour ceux qui veulent approfondir les scripts originaux, faites un tour sur le site du développer du script, y a pleins d'exemples (je viens même de découvrir l'histoire des bordures d'anneaux :-P )

J'ai commencé un conky avec le logo Ubuntu, mais je manque cruellement d'inspiration... Donc ça va très probablement passer à la trappe... 🙂
20 jours plus tard
Salut,

Vous savez si il est possible avec conky d'avoir des graphs aussi fluides que ceux de Gnome ? (Système > A propos de cet ordinateur > onglet Ressourcces)
A part en réduisant l'intervalle de rafraichissement de conky, je ne voit pas trop (et qui dit diminution de l'intervalle, dit augmentation de la charge de conky)
Donc si tu as une bécane puissante, tu peux faire ça, sinon, sur une config faiblarde, je déconseil vivement un intervalle inférieur à 1s (voir 0.5s)
Ok merci 🙂

Mais dans ce cas, est-ce possible de récupérer les graphs de Gnome?
21 jours plus tard
Ton travail Papsou est magnifique ! Mon seul regret c'est que tu a privilégié l'esthétisme à la visibilité... Je recherche qqc de plus visible.
llaumgui wrote:Ton travail Papsou est magnifique ! Mon seul regret c'est que tu a privilégié l'esthétisme à la visibilité... Je recherche qqc de plus visible.
T'as tout dis, j'ai privilégié l'esthétisme... Pour la visibilité, je ne me suis pas posé la question étant donné que j'avais tout le temps la tête dans le script, je connaissait les emplacements des jauges sur le bout des doigts. Et puis les valeurs exactes des taux ne m'intéressaient pas.

Peux être qu'une version plus grande pourra résoudre cela, ou sinon, virer des jauges qui ne sont pas forcément utiles... (mais lesquelles...)

En tout cas, pour ma part, je ne l'utilise plus du fait qu'au bout d'une ou deux heures, le process xorg monte en flèche et dépasse Virtualbox (qui est à 30% en utilisation CPU). Et je ne sais vraiment pas à quoi c'est dû... Mais une chose est sûr, sans utiliser de script lua, le process xorg reste normal toute la journée.

Et qu'entends-tu par ? :
llaumgui wrote:Je recherche qqc de plus visible.
Un logo plus gros pour avoir plus de place pour les taux en % , couleurs pas assez contrastées ?