Conky Thread 2020

Share your conky thread

Share what ever you use for conky - just remember - credit where credit is due.

Basic guidelines

If your conky script is based on another conky - your header should use something like this

conky.config = {
-- original author https://github.com/altinukshini/conky_blue
-- modified by linux-aarhus
...

When you post large amounts of code

  1. Use code fence - select your code and click the </> in the post toolbar
  2. Use the details tag - select your fenced code and click :gear:Hide details

Conky clock for FHD (1920x1080)

This is a multi part conky. It is using a lua script for the clock, a bash script for weather, and a wallpaper. The wallpaper can be found at Computer Love Conky Pack. - Gnome-look.org - the result looks like this

The conky is created for 1920x1080. The location of your system panel may also influence on the placement of the conky - it may require additional tweaking for other screen sizes and other layouts.

Save this file in ~/.config/conky as flatred-computer.conkyrc

Conky
conky.config = {
-- original author https://github.com/altinukshini/conky_blue
-- modified by linux-aarhus
-- BEGIN VARIABLES --
-- edit the templates to match your system
-- to change the weatherlocation see ~/.config/conky/README.md

-- location template
	template0 = 'LINUX AARHUS',

-- find your interface names
-- $ ip a | grep ' state UP' | cut -d' ' -f2 | cut -d':' -f1

-- ethernet interface template
	template1 = 'eno1',

-- wireless interface template
	template2 = 'wlp0s20f0u10',

-- END VARIABLES --
--
-- Conky settings #
	background = true,
	update_interval = 1,
	cpu_avg_samples = 2,
	net_avg_samples = 2,
	override_utf8_locale = true,
	double_buffer = true,
	no_buffers = true,
	text_buffer_size = 2048,
	format_human_readable = true,

-- Window specifications #
	own_window = true,
	own_window_type = 'override',
	own_window_transparent = true,
	own_window_hints = 'undecorated,sticky,skip_taskbar,skip_pager,below',
	own_window_argb_value = 0,
	own_window_colour = '#000000',
	border_inner_margin = 0,
	border_outer_margin = 0,
	minimum_width = 400, minimum_height = 600,
	maximum_width = 600,
	alignment = 'middle_middle',
	gap_y = 01,
	gap_x = -10,

-- Graphics settings #
	draw_shades = false,
	draw_outline = false,
	draw_borders = false,
	draw_graph_borders = false,

-- Text settings #
	use_xft = true,
	override_utf8_locale = true,
	font = 'DejaVu Sans Mono:style=Book:size=10',
	xftalpha = 0.8,
	uppercase = false,
	temperature_unit = 'celsius',
	default_color = '#FFFFFF',
	--color0 = '#ff3333',
	--color1 = '#818181',
	--color2 = '#1994D1',
	--color3 = '#1994D1',

-- Lua script
	lua_load = '~/.config/conky/clock/KvFlatRed.lua',
	lua_draw_hook_pre = 'conky_clock_rings',

};

conky.text = [[
### Time and data
${voffset 140}${font Radio Space:size=16}${color B90004}${time %A}${font}${color}${font Radio Space:size=38}${goto 167}${voffset -8} ${time %e}${font}
${font Radio Space:size=18}${voffset -30}${time %b}${font}${voffset -3}${font Radio Space:size=20}${time %Y}${font}${color B90004}${voffset 3} ${hr 2}
### Battery if present
${goto 209}${voffset 34}${if_match ${battery_percent} != 0}${color FFFFFF}${battery_percent}%${endif}
${goto 202}${voffset 25}${if_match ${battery_percent} != 0}${color B90004}Battery${endif}
### Weather
${font conkyweather:size=35}${color FFFFFF}${goto 200}${voffset 20}${execi 600 sed -n '2p' ${HOME}/.config/conky/accu_weather/weather}${color}${font}${font Radio Space:size=11}${color B90004}${goto 155}${alignr}${voffset -17}${template0}
${execi 600 bash ${HOME}/.config/conky/accu_weather/acc_rss}${font Radio Space:size=13}${goto 145}${alignr}${execi 600 sed -n '1p' ${HOME}/.config/conky/accu_weather/weather|awk '{print $2" "$3}'}${font}${color}
${goto -50}${color B90004}${hr 1}${color}
### System
${font :size=8}uptime${alignr}${uptime_short}
kernel${color}${alignr}${exec "uname -r | cut -d'-' -f1"} ${machine}${color}
os${alignr}${exec "lsb_release -d | awk '{print $2" "$3}'"}
### PUBLIC IP
${if_gw}wan ip${alignr}${execi 10 curl -s https://get.geojs.io/v1/ip}${else}  network down${endif}
### Ethernet interface in template1 is up
${voffset -5}${if_existing /proc/net/route ${template1}}
LAN${goto 40}ip${color} ${alignr}${addr ${template1}}
${goto 40}speed up${alignr}${upspeedf ${template1}}KiB
${goto 40}speed down${alignr}${downspeedf ${template1}}KiB
${goto 40}total up${alignr}${totalup ${template1}}
${goto 40}total down${alignr}${totaldown ${template1}}
${endif}
### Wireless interface template2 is up
${voffset -15}${if_existing /proc/net/route ${template2}}
WIFI${goto 40}ip${alignr}${addr ${template2}}
${goto 40}ssid${alignr}${wireless_essid ${template2}}
${goto 40}quality${goto 110}${wireless_link_bar 8,100
${goto 40}${template2}}${alignr}${wireless_link_qual_perc ${template2}}%
${goto 40}link up${alignr}${upspeedf ${template2}}KiB
${goto 40}link down${alignr}${downspeedf ${template2}}KiB
${goto 40}data up${alignr}${totalup ${template2}}
${goto 40}data down${alignr}${totaldown ${template2}}
${endif}
]];

Save this file in ~/.config/conky/clock as KvFlatRed.lua

Lua script
--[[
#
# Renamed and edited by linux-aarhus 2020
# Clock Rings by Linux Mint (2012) reEdited by Altin.
#
# https://github.com/altinukshini/conky_blue
#
# This script draws percentage meters as rings, and also draws clock hands if you want!
# It is fully customisable; all options are described in the script.
# This script is based off a combination of my clock.lua script and my rings.lua script.
#
# IMPORTANT: If you are using the 'cpu' function, it will cause a segmentation fault if it tries to draw a ring straight away.
#                     The if statement on line 324 uses a delay to make sure that this doesn't happen.
#                     It calculates the length of the delay by the number of updates since Conky started.
#                     Generally, a value of 5s is long enough, so if you update Conky every 1s,
#                     use update_num>5 in that if statement (the default).
#                     If you only update Conky every 2s, you should change it to update_num>3;
#                     conversely if you update Conky every 0.5s, you should use update_num>10.
#                     ALSO, if you change your Conky, is it best to use "killall conky; conky" to update it,
#                     otherwise the update_num will not be reset and you will get an error.
#
# To call this script in Conky, use the following in your conkyrc:
#
#   lua_load ~/.conky/clock01_rings.lua
#   lua_draw_hook_pre clock_rings
#
# Changelog:
#   * v1.0 -->  Original release (30.09.2009)
#   * v1.1p -->   Jpope edit londonali1010 (05.10.2009)
#   * vX 2011mint --> reEdit despot77 (18.02.2011)
#   * vX 2012 --> Altin reEdit (22.07.2012)
#   * Added weather function (Accu Weather)
#   * Added battery monitoring
#   * Syslog monitoring
#   * Running processes monitoring
#   * Rearanged rings
#   * Exctra network functions/monitoring
#   * Changed Fonts
]]

settings_table = {
    {
        -- Edit this table to customise your rings.
        -- You can create more rings simply by adding more elements to settings_table.
        -- "name" is the type of stat to display; you can choose from 'cpu', 'memperc', 'fs_used_perc', 'battery_used_perc'.
        name='time',
        -- "arg" is the argument to the stat type, e.g. if in Conky you would write ${cpu cpu0}, 'cpu0' would be the argument. If you would not use an argument in the Conky variable, use ''.
        arg='%I.%M',
        -- "max" is the maximum value of the ring. If the Conky variable outputs a percentage, use 100.
        max=12,
        -- "bg_colour" is the colour of the base ring.
        bg_colour=0xffffff,
        -- "bg_alpha" is the alpha value of the base ring.
        bg_alpha=0.15,
        -- "fg_colour" is the colour of the indicator part of the ring.
        fg_colour=0xB90004,
        -- "fg_alpha" is the alpha value of the indicator part of the ring.
        fg_alpha=0.3,
        -- "x" and "y" are the x and y coordinates of the centre of the ring, relative to the top left corner of the Conky window.
        x=100, y=290,
        -- "radius" is the radius of the ring.
        radius=50,
        -- "thickness" is the thickness of the ring, centred around the radius.
        thickness=5,
        -- "start_angle" is the starting angle of the ring, in degrees, clockwise from top. Value can be either positive or negative.
        start_angle=0,
        -- "end_angle" is the ending angle of the ring, in degrees, clockwise from top. Value can be either positive or negative, but must be larger than start_angle.
        end_angle=360
    },
    {
        name='battery_percent',
        arg='',
        max=100,
        bg_colour=0xffffff,
        bg_alpha=0.2,
        fg_colour=0xB90004,
        fg_alpha=0.8,
        x=222, y=110,
        radius=27,
        thickness=5,
        start_angle=-90,
        end_angle=270
    },
    {
        name='time',
        arg='%M.%S',
        max=60,
        bg_colour=0xffffff,
        bg_alpha=0.1,
        fg_colour=0xB90004,
        fg_alpha=0.4,
        x=100, y=290,
        radius=66,
        thickness=5,
        start_angle=0,
        end_angle=360
    },
    {
        name='time',
        arg='%S',
        max=60,
        bg_colour=0xffffff,
        bg_alpha=0.1,
        fg_colour=0xB90004,
        fg_alpha=0.6,
        x=100, y=290,
        radius=72,
        thickness=5,
        start_angle=0,
        end_angle=360
    },
    {
        name='time',
        arg='%d',
        max=31,
        bg_colour=0xffffff,
        bg_alpha=0.1,
        fg_colour=0xB90004,
        fg_alpha=0.8,
        x=100, y=290,
        radius=80,
        thickness=5,
        start_angle=-90,
        end_angle=90
    },
    {
        name='time',
        arg='%m',
        max=12,
        bg_colour=0xffffff,
        bg_alpha=0.1,
        fg_colour=0xB90004,
        fg_alpha=1,
        x=100, y=290,
        radius=86,
        thickness=5,
        start_angle=-90,
        end_angle=90
    },
}

-- Use these settings to define the origin and extent of your clock.

clock_r=65

-- "clock_x" and "clock_y" are the coordinates of the centre of the clock, in pixels, from the top left of the Conky window.

clock_x=100
clock_y=300

show_seconds=false -- Change to true if you want the seconds hand

require 'cairo'

function rgb_to_r_g_b(colour, alpha)
    return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end

function window_background(colour, alpha)
    return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end

function draw_ring(cr, t, pt)
    local w, h=conky_window.width, conky_window.height

    local xc, yc, ring_r, ring_w, sa, ea=pt['x'], pt['y'], pt['radius'], pt['thickness'], pt['start_angle'], pt['end_angle']
    local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']

    local angle_0=sa*(2*math.pi/360)-math.pi/2
    local angle_f=ea*(2*math.pi/360)-math.pi/2
    local t_arc=t*(angle_f-angle_0)

    -- Draw background ring

    cairo_arc(cr, xc, yc, ring_r, angle_0, angle_f)
    cairo_set_source_rgba(cr, rgb_to_r_g_b(bgc, bga))
    cairo_set_line_width(cr, ring_w)
    cairo_stroke(cr)

    -- Draw indicator ring

    cairo_arc(cr, xc, yc, ring_r, angle_0, angle_0+t_arc)
    cairo_set_source_rgba(cr, rgb_to_r_g_b(fgc, fga))
    cairo_stroke(cr)
end

function draw_clock_hands(cr, xc, yc)
    local secs, mins, hours, secs_arc, mins_arc, hours_arc
    local xh, yh, xm, ym, xs, ys

    secs=os.date("%S")
    mins=os.date("%M")
    hours=os.date("%I")

    secs_arc=(2*math.pi/60)*secs
    mins_arc=(2*math.pi/60)*mins+secs_arc/60
    hours_arc=(2*math.pi/12)*hours+mins_arc/12

    -- Draw hour hand

    xh=xc+0.76*clock_r*math.sin(hours_arc)
    yh=yc-0.72*clock_r*math.cos(hours_arc)
    cairo_move_to(cr, xc, yc)
    cairo_line_to(cr, xh, yh)

    cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND)
    cairo_set_line_width(cr, 5)
    cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 1.0)
    cairo_stroke(cr)

    -- Draw minute hand

    xm=xc+0.98*clock_r*math.sin(mins_arc)
    ym=yc-1.02*clock_r*math.cos(mins_arc)
    cairo_move_to(cr, xc, yc)
    cairo_line_to(cr, xm, ym)

    cairo_set_line_width(cr, 3)
    cairo_stroke(cr)

    -- Draw seconds hand

    if show_seconds then
        xs=xc+1.1*clock_r*math.sin(secs_arc)
        ys=yc-clock_r*math.cos(secs_arc)
        cairo_move_to(cr, xc, yc)
        cairo_line_to(cr, xs, ys)

        cairo_set_line_width(cr, 1)
        cairo_stroke(cr)
    end
end

function conky_clock_rings()
    local function setup_rings(cr, pt)
        local str=''
        local value=0

        str=string.format('${%s %s}', pt['name'], pt['arg'])
        str=conky_parse(str)

        value=tonumber(str)
        if value == 0 and pt['name'] == 'battery_percent' then
            pt['bg_alpha'] = 0
        end
        pct=value/pt['max']

        draw_ring(cr, pct, pt)
    end

    -- Check that Conky has been running for at least 5s

    if conky_window==nil then return end
    local cs=cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)

    local cr=cairo_create(cs)

    local updates=conky_parse('${updates}')
    update_num=tonumber(updates)

    if update_num>5 then
        for i in pairs(settings_table) do

            setup_rings(cr, settings_table[i])
        end
    end

    draw_clock_hands(cr, clock_x, clock_y)
end

Save the bash script in the folder ~/.config/conky/accu_weather/ as acc_rss - remember to make it executable (instructions for setting your own location can be found a tutorial on Openbox

$ chmod +x ~/.config/conky/accu_weather/acc_rss
accu_weather rss script
#!/bin/bash
# unknown author
# modified by linux-aarhus
#function: test_image
test_image () {
    case $1 in
     1|01)
       echo a
     ;;
     2|02)
       echo b
     ;;
     3|03)
       echo c
     ;;
     4|04)
       echo c
     ;;
     5|05)
       echo c
     ;;
     6|06)
       echo d
     ;;
     7|07)
       echo e
     ;;
     8|08)
       echo e
     ;;
     11)
       echo 0
     ;;
     12)
       echo h
     ;;
     13|14)
       echo g
     ;;
     15)
       echo l
     ;;
     16|17)
       echo k
     ;;
     18|26)
       echo i
     ;;
     19)
       echo p
     ;;
     20|21|23)
       echo o
     ;;
     22)
       echo r
     ;;
     24|31)
       echo E
     ;;
     25)
       echo u
     ;;
     29)
       echo v
     ;;
     30)
       echo 5
     ;;
     32)
       echo 6
     ;;
     33)
       echo A
     ;;
     34|36|37)
       echo B
     ;;
     35|38)
       echo C
     ;;
     39|40)
       echo G
     ;;
     41|42)
       echo K
     ;;
     43|44)
       echo O
     ;;
    esac
}

# PUT YOUR LOCATIONS PARAMETERS IN THE VARIABLES BELOW
REGION_ID="EUR"
COUNTRY_ID="DK"
LOCATION_KEY="124594"
LOCALIZED_NAME="AARHUS"

address="https://rss.accuweather.com/rss/liveweather_rss.asp?metric=1&locCode=${REGION_ID}|${COUNTRY_ID}|${LOCATION_KEY}|${LOCALIZED_NAME}"

killall wget
wget -O ~/.config/conky/accu_weather/weather_raw $address


if [[ -s ~/.config/conky/accu_weather/weather_raw ]]; then

    egrep 'Currently|Forecast<\/title>|_31x31.gif' ~/.config/conky/accu_weather/weather_raw > ~/.config/conky/accu_weather/weather
    sed -i '/AccuWeather\|Currently in/d' ~/.config/conky/accu_weather/weather
    sed -i -e 's/^[ \t]*//g' -e 's/<title>\|<\/title>\|<description>\|<\/description>//g' ~/.config/conky/accu_weather/weather
    sed -i -e 's/&lt;img src="/\n/g' ~/.config/conky/accu_weather/weather
    sed -i '/^$/d' ~/.config/conky/accu_weather/weather
    sed -i -e 's/_31x31.*$//g' -e 's/^.*\/icons\///g' ~/.config/conky/accu_weather/weather
    sed -i -e '1s/.$//' -e '3s/.$//' -e '6s/.$//' ~/.config/conky/accu_weather/weather
    for (( i=2; i<=8; i+=3 ))
        do
            im=$(sed -n ${i}p ~/.config/conky/accu_weather/weather)
            sed -i $i"s/^.*$/$(test_image $im)/" ~/.config/conky/accu_weather/weather
        done
fi

Run the conky using

$ conky -d -c ~/.config/conky/flatred-computer.conkyrc
14 Likes

A post was split to a new topic: Question on conky thread 2020

This post was flagged by the community and is temporarily hidden.

My Conky output isn’t as spectacular as linux-aarhus’s one:

but it is very compact and has some nifty tricks in its configuration file: (full code at the bottom of this post)

  1. It runs in one window on one desktop (which is the way I like it to be)

    Code snippet
    own_window_class = 'Conky',
    own_window_type = 'normal',
    
  2. It defines the Manjaro colours identical to the Breath2 theme:

    Code snippet
    default_color = '#1abc9c',  -- Same HTML as current terminal
    color1 = '#709080',         -- Kakhi
    color2 = '#dca3a3',         -- Salmon
    color3 = '#72d5a3',         -- Light Green
    color4 = '#f0dfaf',         -- Yellow
    color5 = '#7eb2e6',         -- Metal blue
    color6 = '#a45ec1',         -- Light aubergine
    

    and if you would have another theme, just go to your terminal settings and choose the colours you like from your theme!

  3. If my NAS is mounted, it will show said NAS and otherwise it will show nothing (not even an empty line). You can use the same system for E.G. an external disk:

    Code snippet
    # Don't show NAS if not mounted
    ${if_existing /media/NAS/home/}
    ${color} /media/NAS  ${color1}${fs_used /media/NAS}/${fs_size /media/NAS} ${fs_bar 6 /media/NAS}${endif}
    ${color}$hr
    

    Obviously this is done by testing for the existence of a single directory on the NAS. I.E. if that directory is not present, the NAS is not mounted and the same goes for your external disk.

  4. Depending on whether I’m hooked up by WiFi or Ethernet, it will show the WiFi statistics, the Ethernet statistics, both or none on a logarithmic scale!

    Code snippet
    # Networking section will not show anything if no NICS are up
    # Will show speed and graph per NIC if they are up
    ${if_existing /sys/class/net/enp3s0/operstate up}${color}Ethernet
    ${color}Down: ${color1}${downspeed enp3s0}s ${alignr}${color}Up: ${color1}${upspeed enp3s0}/s
    ${downspeedgraph enp3s0 50,200 dca3a3 ffffff -l -t} ${alignr}${color1}${upspeedgraph enp3s0 50,200 dca3a3 ffffff -l -t}
    ${color}Total: ${color1}${totaldown enp3s0} ${alignr}${color}Total: ${color1}${totalup enp3s0}
    ${endif}${if_existing /sys/class/net/wlp2s0/operstate up}${color}WiFi
    ${color}Down: ${color1}${downspeed wlp2s0}/s ${alignr}${color}${color}Up: ${color1}${upspeed wlp2s0}/s
    ${downspeedgraph wlp2s0 50,200 dddddd ffffff -l -t} ${alignr}${color1}${upspeedgraph wlp2s0 50,200 dddddd ffffff -l -t}
    ${color}Total: ${color1}${totaldown wlp2s0} ${alignr}${color}Total: ${color1}${totalup wlp2s0}${endif}
    

    Obviously, you’ll have to change wlp2s0 and enp3s0 to the devices your system uses:

    nmcli device show | grep ".DEVICE"
    GENERAL.DEVICE:                         wlp2s0
    GENERAL.DEVICE:                         p2p-dev-wlp2s0
    GENERAL.DEVICE:                         enp3s0
    GENERAL.DEVICE:                         lo
    

    The logarithmic scale means that you can still distinguish Bytes/second, KiloBytes/s, MB/s, GB/s or whatever TB/s the future might bring in one single graph:grin:

  5. It shows the HDD T° as per this topic

Entire configuration file:

here
conky.config =
{
  console_bar_fill   = '»',
  console_bar_unfill = ' ',

  alignment = 'top_left',
  background = false,
  border_width = 2,
  cpu_avg_samples = 2,
  -- define Manjaro colours:
  default_color = '#1abc9c',  -- Same HTML as current terminal
  color1 = '#709080',         -- Kakhi
  color2 = '#dca3a3',         -- Salmon
  color3 = '#72d5a3',         -- Light Green
  color4 = '#f0dfaf',         -- Yellow
  color5 = '#7eb2e6',         -- Metal blue
  color6 = '#a45ec1',         -- Light aubergine
  font   = 'Envy Code R:bold:size=8',
  default_outline_color = '#1abc9c',  -- Same HTML as current terminal
  default_shade_color = '#1abc9c',  -- Same HTML as current terminal
  double_buffer = true,
  draw_borders = false,
  draw_graph_borders = true,
  draw_outline = false,
  draw_shades = false,
  extra_newline = false,
  format_human_readable=true,
  gap_x = 25,
  gap_y = 25,
  minimum_height = 200,
  minimum_width = 200,
  net_avg_samples = 2,
  no_buffers = true,
  out_to_console = false,
  out_to_ncurses = false,
  out_to_stderr = false,
  out_to_x = true,
  own_window = true,
  own_window_class = 'Conky',
  own_window_type = 'normal',
  own_window_transparent = false,
  -- set transparency:
  own_window_argb_visual = true, own_window_argb_value = 100,
  show_graph_range = false,
  show_graph_scale = false,
  stippled_borders = 0,
  update_interval = 2.0,
  uppercase = false,
  use_spacer = 'none',
  use_xft = true,
  #lua_load = '~/.config/conky/MyFunctions.lua',
  #lua_draw_hook_post = "main",
}
conky.text = [[
${color}Info:${color1} ${scroll 32 $nodename $kernel}
${color}$hr
${color}Uptime    :${color1} $uptime
${color}Frequency :${color1} $freq ${color}MHz
#${color}RAM Usage :${color1} ${lua conky_RoundUp ${mem} }/${lua conky_RoundUp ${memmax} } ${membar 4}
${color}RAM Usage :${color1} ${mem}/${memmax} ${membar 4}
#${color}Swap Usage:${color1} ${lua conky_RoundUp ${swap} }/${lua conky_RoundUp ${swapmax} } ${swapbar 4}
${color}Swap Usage:${color1} ${swap}/${swapmax} ${swapbar 4}
${color}CPU Usage :${color1} $cpu% ${cpubar 4}
${color}Processes :${color1} $processes  ${color}Load:${color1} $loadavg
${color}Name                 CPU%   MEM%   PID
${color1} ${top name 1} ${color2} ${top cpu 1} ${top mem 1} ${top pid 1}
${color1} ${top name 2} ${color2} ${top cpu 2} ${top mem 2} ${top pid 2}
${color1} ${top name 3} ${color2} ${top cpu 3} ${top mem 3} ${top pid 3}
${color1} ${top name 4} ${color2} ${top cpu 4} ${top mem 4} ${top pid 4}
${color}$hr
${color}File systems:
${color} /           ${color1}${fs_used /}/${fs_size /} ${fs_bar 6 /}
${color} /home       ${color1}${fs_used /home}/${fs_size /home} ${fs_bar 6 /home}
${color} /media/Data ${color1}${fs_used /media/Data}/${fs_size /media/Data} ${fs_bar 6 /media/Data}\
# Don't show NAS if not mounted
${if_existing /media/NAS/home/}
${color} /media/NAS  ${color1}${fs_used /media/NAS}/${fs_size /media/NAS} ${fs_bar 6 /media/NAS}${endif}
${color}$hr
# Networking section will not show anything if no NICS are up
# Will show speed and graph per NIC if they are up
${if_existing /sys/class/net/enp3s0/operstate up}${color}Ethernet
${color}Down: ${color1}${downspeed enp3s0}s ${alignr}${color}Up: ${color1}${upspeed enp3s0}/s
${downspeedgraph enp3s0 50,200 dca3a3 ffffff -l -t} ${alignr}${color1}${upspeedgraph enp3s0 50,200 dca3a3 ffffff -l -t}
${color}Total: ${color1}${totaldown enp3s0} ${alignr}${color}Total: ${color1}${totalup enp3s0}
${endif}${if_existing /sys/class/net/wlp2s0/operstate up}${color}WiFi
${color}Down: ${color1}${downspeed wlp2s0}/s ${alignr}${color}${color}Up: ${color1}${upspeed wlp2s0}/s
${downspeedgraph wlp2s0 50,200 dddddd ffffff -l -t} ${alignr}${color1}${upspeedgraph wlp2s0 50,200 dddddd ffffff -l -t}
${color}Total: ${color1}${totaldown wlp2s0} ${alignr}${color}Total: ${color1}${totalup wlp2s0}${endif}
${color}$hr
${color}Temperature:
${color} ISA     ${color1}${exec sensors | awk ' /Package/ {print $4}'}${alignr}${alignr}${color}CPU     ${color1}${exec sensors | grep 'Core 0' | awk '{print $3}'}
${color} ACPI    ${color1}${exec sensors | grep --after-context=2 'acpitz' | awk 'FNR ==3 {print $2}'}${alignr}${color}WiFi    ${color1}${exec sensors | grep --after-context=2 'ath10k' | awk 'FNR ==3 {print $2}'}
${color} GPU     ${color1}+${exec nvidia-settings --query=gpucoretemp 2>/dev/null | grep 'GPUCoreTemp' | grep "\[gpu:0\]" | awk '{print $4}'}0°C
${color} SSD     ${color1}+${hddtemp /dev/sda}.0°C${alignr}${color}HDD     ${color1}+${hddtemp /dev/sdc}.0°C
${color2}${execgraph "sensors | grep 'Core 0' | awk '{print $3}' | cut -b2,3"}
]]

Note 1: One of the things I struggled with was that in the { } definition section you have to use -- to start a comment whether in the [[ ]] code section you have to use # to start a comment. :man_facepalming:
Note 2: Because Conky is so popular it’s hard to find the original documentation maintained by the authors of Conky, so here is the original Wiki that I followed to understand what’s going on.
Note 3: If you want to design your own dials, progress-bars, or use advanced widgets from someone else, you shouldn’t install standard conky but should pamac install conky-cairo instead!

5 Likes

Thanks for your config! I added the code to hide my NAS folders when i’m away from home. Way cool!
i wish i could hide the entire entry (because that space is still occupied with a blank line)

3 Likes

Ok, I’ll post mine too. Actually these are 3 conky’s. I have the main conky on the right of the screen. The upper one is my connection conky and below we have the log. Normally this one is to display error messages, but at this time there aren’t any so I switched to an RSS feed. Just so I can show it. I’m not going to write a lot about it, cause I don’t have much time now. If there is a question I will hear it.

Right part of the screen shows some info about the system itself.

Main conky
 conky.config = {

--######################
-- - Update settings - #
--######################

	update_interval = 2.0,
	total_run_times = 0,
	net_avg_samples = 2,
	cpu_avg_samples = 2,

	double_buffer = true,
	no_buffers = true,

--####################
-- - Text settings - #
--####################

	use_xft = true,
	font = 'Ubuntu:size=12',
	override_utf8_locale = true,

	default_color = '#cccccc',
	color0 = 'darkgrey',
	color1 = '#77507b',
	color2 = 'white',
	color3 = '#35805f',
	color4 = '#4e4141',

--############################
-- - Window specifications - #
--############################

	own_window_class = 'Conky',
	own_window = true,
	own_window_type = 'normal',
	own_window_argb_visual = true,
	own_window_transparent = true,
	own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',

	alignment = 'top_right',
	gap_x = 40,
	gap_y = 40,
	minimum_width = 250, minimum_height = 600,
	maximum_width = 250,

	draw_shades = false,

};

conky.text = [[
${color3}${font :BOLD:}SYSTEM $hr${color}${font}
${goto 32}${color0}Kernel: ${alignr}${color2}${kernel}${color}

${goto 32}${color0}CPU : ${color1}${goto 100}${font :BOLD:}${cpu cpu0}%${font}${color}
${goto 32}${color0}Temp : ${color1}${goto 100}${font :BOLD:}${hwmon 0 temp 1} °C${color}${font}
${goto 32}${color0}Freq : ${color1}${goto 100}${font :BOLD:}${freq_g cpu0} GHz${font}

${color4}${goto 60}${top name 1}${alignr}${top cpu 1}
${goto 60}${top name 2}${alignr}${top cpu 2}
${goto 60}${top name 3}${alignr}${top cpu 3}

${goto 32}${color0}RAM : ${font :BOLD:}${color1}${goto 100}$memperc%${alignr}${mem}${font}
${goto 32}${color0}Swap : ${goto 100}${color1}${font :BOLD:}${swap}${color0}${color}${font}

${color4}${goto 60}${top_mem name 1}${alignr}${top_mem mem 1}
${goto 60}${top_mem name 2}${alignr}${top_mem mem 2}
${goto 60}${top_mem name 3}${alignr}${top_mem mem 3}
#
#${goto 32}${color0}GPU : ${font :BOLD:}${color1}${goto 100}${hwmon 4 temp 1}°C${color}${font}

${color3}${font :BOLD:}DATA $hr${color}${font}

${goto 32}${color0}System total : ${goto 155}${fs_size /}
${goto 32}${color0}System used : ${goto 155}${color1}${font :BOLD:}${fs_used /}${color}${font}

${goto 32}${color0}Backup total : ${goto 155}${fs_size /run/media/lunix/Backup/}
${goto 32}${color0}Backup used : ${goto 155}${color1}${font :BOLD:}${fs_used /run/media/lunix/Backup/}${font}

${goto 32}${color0}SSD Temp : ${goto 155}${color1}${font :BOLD:}${hddtemp /dev/sda}.0 °C${font}

${color3}${font :BOLD:}NETWORK $hr${color}${font}

${goto 32}${color0}Up: ${color1}${goto 100}${upspeed wlp3s0}${color}
${goto 32}${color0}Today: ${color2}${goto 100}${execi 30 vnstat | grep "today" | awk '{print $5 $6}'}${color}

${goto 32}${color0}Down: ${color1}${goto 100}${downspeed wlp3s0}${color}
${goto 32}${color0}Today: ${color2}${goto 100}${execi 30 vnstat | grep "today" | awk '{print $2 $3}'}

${goto 32}${color0}Signal: ${color1}${goto 100}${wireless_link_qual_perc wlp3s0}%${alignr}
 
${goto 32}${color0}Local IP: ${alignr}${color2}${addr wlp3s0}
${goto 32}${color0}Public IP: ${alignr}${color2}${execi 30 wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]\|.]//g'}
]];

The one above is to monitor my incoming and outgoing connections.

Connections
conky.config = {

--######################
-- - Update settings - #
--######################

	update_interval = 2.0,
	total_run_times = 0,
	net_avg_samples = 2,
	cpu_avg_samples = 2,

	double_buffer = true,
	no_buffers = true,

--####################
-- - Text settings - #
--####################

	use_xft = true,
	font = 'Ubuntu:size=12',
	override_utf8_locale = true,
    uppercase = false,

--############################
-- - Window specifications - #
--############################

	own_window_class = 'Conky',
	own_window = true,
	own_window_type = 'normal',
	own_window_argb_visual = true,
	own_window_transparent = true,
	own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',

	alignment = 'top_left',
	gap_x = 100,
	gap_y = 40,

	draw_shades = false,
	draw_outline = false,
	draw_borders = false,
	draw_graph_borders = false,
	default_color = 'white',

	no_buffers = true,
	use_spacer = 'left',

	minimum_width = 0, minimum_height = 0,
};

conky.text = [[
${color 35805f}${font :BOLD:}CONNECTIONS     IN $color${tcp_portmon 1 32767 count}${color 35805f}     OUT $color${tcp_portmon 32768 61000 count}

${color a497a0}${font comic:pixelsize=12}
${offset 12}${tcp_portmon 1 65535 rhost 0}${goto 500}${tcp_portmon 1 65535 rip 0}${goto 700}${tcp_portmon 1 65535 rport 0}${goto 800}${tcp_portmon 1 65535 rservice 0}${goto 900}${tcp_portmon 1 65535 lport 0}
${offset 12}${tcp_portmon 1 65535 rhost 1}${goto 500}${tcp_portmon 1 65535 rip 1}${goto 700}${tcp_portmon 1 65535 rport 1}${goto 800}${tcp_portmon 1 65535 rservice 1}${goto 900}${tcp_portmon 1 65535 lport 1}
${offset 12}${tcp_portmon 1 65535 rhost 2}${goto 500}${tcp_portmon 1 65535 rip 2}${goto 700}${tcp_portmon 1 65535 rport 2}${goto 800}${tcp_portmon 1 65535 rservice 2}${goto 900}${tcp_portmon 1 65535 lport 2}
${offset 12}${tcp_portmon 1 65535 rhost 3}${goto 500}${tcp_portmon 1 65535 rip 3}${goto 700}${tcp_portmon 1 65535 rport 3}${goto 800}${tcp_portmon 1 65535 rservice 3}${goto 900}${tcp_portmon 1 65535 lport 3}
${offset 12}${tcp_portmon 1 65535 rhost 4}${goto 500}${tcp_portmon 1 65535 rip 4}${goto 700}${tcp_portmon 1 65535 rport 4}${goto 800}${tcp_portmon 1 65535 rservice 4}${goto 900}${tcp_portmon 1 65535 lport 4}
${offset 12}${tcp_portmon 1 65535 rhost 5}${goto 500}${tcp_portmon 1 65535 rip 5}${goto 700}${tcp_portmon 1 65535 rport 5}${goto 800}${tcp_portmon 1 65535 rservice 5}${goto 900}${tcp_portmon 1 65535 lport 5}
${offset 12}${tcp_portmon 1 65535 rhost 6}${goto 500}${tcp_portmon 1 65535 rip 6}${goto 700}${tcp_portmon 1 65535 rport 6}${goto 800}${tcp_portmon 1 65535 rservice 6}${goto 900}${tcp_portmon 1 65535 lport 6}
${offset 12}${tcp_portmon 1 65535 rhost 7}${goto 500}${tcp_portmon 1 65535 rip 7}${goto 700}${tcp_portmon 1 65535 rport 7}${goto 800}${tcp_portmon 1 65535 rservice 7}${goto 900}${tcp_portmon 1 65535 lport 7}
${offset 12}${tcp_portmon 1 65535 rhost 8}${goto 500}${tcp_portmon 1 65535 rip 8}${goto 700}${tcp_portmon 1 65535 rport 8}${goto 800}${tcp_portmon 1 65535 rservice 8}${goto 900}${tcp_portmon 1 65535 lport 8}
${offset 12}${tcp_portmon 1 65535 rhost 9}${goto 500}${tcp_portmon 1 65535 rip 9}${goto 700}${tcp_portmon 1 65535 rport 9}${goto 800}${tcp_portmon 1 65535 rservice 9}${goto 900}${tcp_portmon 1 65535 lport 9}

]];

The one on the bottom of the screen is actually for displaying error messages if they exists. On the example I’ve used RSS feed to show were the messages would appear on the screen.

Log
conky.config = {

--######################
-- - Update settings - #
--######################

	update_interval = 2.0,
	total_run_times = 0,
	net_avg_samples = 2,
	cpu_avg_samples = 2,

	double_buffer = true,
	no_buffers = true,

--####################
-- - Text settings - #
--####################

	use_xft = true,
	font = 'Ubuntu:size=12',
	override_utf8_locale = true,
	default_color = '#cccccc',

--############################
-- - Window specifications - #
--############################

	own_window_class = 'Conky',
	own_window = true,
	own_window_type = 'normal',
	own_window_argb_visual = true,
	own_window_transparent = true,
	own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',

	alignment = 'bottom_left',
	gap_x = 100,
	gap_y = 20,
	minimum_width = 1400, minimum_height = 100,
	maximum_width = 1200,

	draw_shades = false,

};

conky.text = [[
${font :BOLD:}${color 35805f}LOG${color}${font comic:pixelsize=12}
${exec dmesg --level=err,warn}
#${exec journalctl -p 3 -xb | tail -n10 | fold -s -w1000}
${rss https://forum.manjaro.org/c/announcements/testing-updates.rss 1 item_titles 4}
]];

It could be that there are a few things in the script that could be adjusted. But I only have converted my old one to the new conky script and didn’t pay much attention on it.

To install

For this one, I have chosen the simplistic method. Which means, I used conky-manager2 from the AUR. I’ve saved the above codeblocks to 3 different files. Mine are .conkyrc, Connection and Log, but you can name it whatever you want. They are located in my ~/.conky/ directory, but you can save them wherever you want to. All you have to do is select the files and let it startup every time. Et Voila.

:+1: for @Fabby because I saw his topic about the HDD temp and I have to admit, I used that info. Yes sir ! :grin:

3 Likes

You’ll notice that my ${endif} is on the same line:

${if_existing /media/NAS/home/}
${color} /media/NAS  ${color1}${fs_used /media/NAS}/${fs_size /media/NAS} ${fs_bar 6 /media/NAS}${endif}

I’m betting a :champagne: yours is not:

${if_existing /media/NAS/home/}
${color} /media/NAS  ${color1}${fs_used /media/NAS}/${fs_size /media/NAS} ${fs_bar 6 /media/NAS}
${endif}

:grin:

1 Like

Here is my conky consisting of two parts, a part for system information an one for network information:

Config for system:

conky.config = {
    alignment = 'top_right',
    border_width = 1,
    border_inner_margin = 10,
    cpu_avg_samples = 2,
	default_color = '#B7B7B7',
    default_outline_color = '#B7B7B7',
    default_shade_color = '#B7B7B7',
    draw_borders = true,
    draw_graph_borders = true,
    draw_shades = false,
	double_buffer = true,
    use_xft = true,
    font = 'Inconsolata Regular:size=10',
    gap_x = 30,
    gap_y = 20,
    minimum_height = 100,
	minimum_width = 240,
	maximum_width = 270,
    net_avg_samples = 2,
    no_buffers = true,
    out_to_console = false,
    out_to_stderr = false,
    extra_newline = false,
    own_window = true,
    own_window_class = 'Conky',
    own_window_type = 'desktop',
	own_window_colour = '#303030',
	own_window_argb_visual = true,
	own_window_argb_value = 190,
    update_interval = 1.0,
    uppercase = false,
    use_spacer = 'none',
    xftalpha = 0.8,
    times_in_seconds = true,
    color1 = 'FFFFFF',
    color2 = 'BFBFBF'
}

conky.text = [[
${font :size=40}${color #FFFFFF}${alignc}${time %H:%M}${font}
${voffset 10}${color #BFBFBF}${alignc}${time %A}, ${time %d}. ${time  %b} ${time %Y}
#${voffset 5}
${color #FFFFFF}${hr}
${font :bold:size=11}System
${font :normal:size=10}
${color #B7B7B7}Kernel: ${alignr}${kernel}${voffset 5}
Battery ${alignr}${format_time ${battery_time BAT0} "\hh \mm"} ${if_match "${acpiacadapter ADP1}" == "on-line"}until fully charged ${else}until fully discharged ${endif} (${battery_percent BAT0}%)
${if_match ${battery_percent BAT0} <=20}${color #FF0000}${else}${if_match ${battery_percent BAT0} <=50}${color #FF8000}${else}${if_match ${battery_percent BAT0} <=70}${color #FAF151}${else}${color #01DF01}${endif}${endif}${endif}${battery_bar 5,270}
${color #B7B7B7}Processor ${alignr}${cpu cpu0}% | ${freq_g (1)} GHz
${color #FFFFFF}${alignr}${cpubar 5,270}
${color #B7B7B7}RAM ${alignr}${mem} ($memperc%) / ${memmax}
${color #FFFFFF}${membar 5,270}
#------------
${color #FFFFFF}${hr}
${font :bold:size=11}Partitionen${font :normal:size=10}${color #B7B7B7}${alignr}belegt (%) / max.

${color #B7B7B7}Swap ${alignr}${swap}($swapperc%) / ${swapmax}
${color #FFFFFF}${swapbar 5,270}
${color #B7B7B7}Boot ${alignr}${fs_used /boot} (${fs_used_perc /boot}%) / ${fs_size /boot}
${color #FFFFFF}${alignr}${fs_bar 5,270 /boot}
${color #B7B7B7}Root ${alignr}${fs_used /} (${fs_used_perc /}%) / ${fs_size /}
${color #FFFFFF}${alignr}${fs_bar 5,270 /}
${color #B7B7B7}Home ${alignr}${fs_used /home} (${fs_used_perc /home}%) / ${fs_size /home}
${color #FFFFFF}${fs_bar 5,270 /home}
#------------
${color #FFFFFF}${hr}
${font :bold:size=11}New Mails (Inbox)
${font :normal:size=10}
${color #B7B7B7}GMail${goto 200}${execpi 1800 python ~/.conky/conky_scripts/gmail.py}
${color #B7B7B7}Hotmail${goto 200}${execpi 1800 python ~/.conky/conky_scripts/hotmail.py}
${color #B7B7B7}GMX${goto 200}${execpi 1800 python ~/.conky/conky_scripts/gmx.py}
${color #B7B7B7}Mailbox${goto 200}${execpi 1800 python ~/.conky/conky_scripts/mailbox.py}
]]

and the config for the network part:

conky.config = {
    alignment = 'bottom_right',
    border_width = 1,
    border_inner_margin = 10,
    cpu_avg_samples = 2,
	default_color = '#B7B7B7',
    default_outline_color = '#B7B7B7',
    default_shade_color = '#B7B7B7',
    draw_borders = true,
    draw_graph_borders = true,
    draw_shades = false,
	double_buffer = true,
    use_xft = true,
    font = 'Inconsolata Regular:size=10',
    gap_x = 30,
    gap_y = 20,
    minimum_height = 100,
	minimum_width = 270,
	maximum_width = 270,
    net_avg_samples = 2,
    no_buffers = true,
    out_to_console = false,
    out_to_stderr = false,
    extra_newline = false,
    own_window = true,
    own_window_class = 'Conky',
    own_window_type = 'desktop',
	own_window_colour = '#303030',
	own_window_argb_visual = true,
	own_window_argb_value = 190,
    update_interval = 600.0,
    uppercase = false,
    use_spacer = 'none',
    xftalpha = 0.8,
    times_in_seconds = true,
    color1 = 'FFFFFF',
    color2 = 'BFBFBF'
}
conky.text = [[
    ${color1}${font :bold:size=10}Netzwerk
    ${font :normal:size=10}${color2}
    ${color1}WLAN${color} (${wireless_essid wlp0s20u2}) ${alignr}${addr wlp0s20u2}
 
    ${color1}Fritzbox${color2} (DSL)
    ${texeci 7200 /home/focmb/.conky/conky_scripts/fritzbox_values/getValues.sh}
    
    ${color1}NAS${color2} (172.16.1.5)${alignr}${execpi 600 /home/focmb/.conky/conky_scripts/pingtest.sh 172.16.1.5}
    HDD${alignr}${execi 7200 sshpass -p verkehrsing ssh admin@172.16.1.5 df -h /dev/md2 | awk 'FNR==2 {print "max: "$2" frei: "$4}'}
    Temperatur${alignr}${texeci 7200 sh ~/.conky/conky_scripts/nastemp.sh}° C
    
    ${color1}Pi4${color2} (172.16.1.4)${alignr}${execpi 600 /home/focmb/.conky/conky_scripts/pingtest.sh 172.16.1.4}
    ${execpi 3600 ssh focmb@172.16.1.4 "/home/focmb/scripts/status_colorless.sh"}
    
    ${color1}Pi3${color2} (172.16.1.8)${alignr}${execpi 600 /home/focmb/.conky/conky_scripts/pingtest.sh 172.16.1.8}
    ${execpi 3600 ssh focmb@172.16.1.8 "/home/focmb/scripts/status_colorless.sh"}
]]

Script for testing if a network device is reachable (pingtest.sh):

#!/bin/bash
if ping -c 1 -W 2 $1 > /dev/null; then
    echo 'Up'
else
    echo '${color red}Down ${color}'
fi

Script for testing services (must run on the server side) (status_colorless.sh):

#!/bin/bash
# Service list
SERVICES=("dropbear" "nginx" "callmon" "gitea" "ccnet-server" "seaf-server")
# Service names
NAMES=("Dropbear SSH" "Nginx Webserver" "Fritzbox Callmonitor" "Gitea Server" "Seafile ccnet" "Seafile Server")
aLen=${#SERVICES[@]}
for (( i=0; i<${aLen}; i++)); do
    # Check status and give output
    if [ "$(pgrep ${SERVICES[$i]})" ]; then
        STATE="[Running]"
    else
        STATE="[Stopped]"
    fi
    # Provide Service Names after status
    if [ $i = 0 ]; then
                echo -e ""
    fi
    if [ $STATE = "[Running]" ]; then
        echo -e '${color green}'"\t$STATE"'${color}'"\t${NAMES[$i]}"
    else
        echo -e '${color red}'"\t$STATE"'${color}' "\t${NAMES[$i]}"
    fi
done
3 Likes

Nice! I’d be interested in the fritzbox_values/getValues.sh script too?

:grin:

Here is the content of getValues.sh which is called in the conkyrc:

#!/bin/bash

fritzbixIp="172.16.1.1"
xmlFile="/home/NAME/.conky/conky_scripts/fritzbox_values/dsl.xml"

tmpS=$(curl -s "http://$fritzbixIp:49000/igdupnp/control/WANCommonIFC1" -H "Content-Type: text/xml; charset=\"utf-8"\" -H "SoapAction:urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1#GetCommonLinkProperties" -d "@$xmlFile")

downLink=${tmpS#*"DownstreamMaxBitRate>"}
downLink=${downLink%"</NewLayer1DownstreamMaxBitRate"*}
down=`echo "scale=1 ; $downLink/1000000" | bc`

upLink=${tmpS#*"UpstreamMaxBitRate>"}
upLink=${upLink%"</NewLayer1UpstreamMaxBitRate"*}
up=`echo "scale=1 ; $upLink/1000000" | bc`

echo  "Down: $down MBit/s - Up: $up MBit/s"

And here is the content of the xml file which is called in the getValues.sh:

<?xml version="1.0" encoding="utf-8" ?>
    <s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
        <s:Body>
            <u:GetCommonLinkProperties xmlns:u="urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1" />
        </s:Body>
    </s:Envelope>
2 Likes