User-contributed article: Using conky with i3bar
+ ++As explained in the i3 documentation, itâs possible to use an +external program to build the status information displayed +by i3bar. +One of those programs is conky, a free, +light-weight system monitor. +
+ ++Since conky does not support the i3bar protocol by default, we could use the +plain text output format, but then we cannot have i3bar display colors. This +article shows how to configure conky to have colors with i3bar. +
+ ++As explained in more detail in the i3bar protocol description, +i3bar can receive input serialized as JSON, and this way has color support, +among other things (urgency flag, shortening description if more space is needed). +
+ +Example of colored status with conky
+ ++First of all we have to understand how i3bar expects JSON input: +We have to provide an "infinite array", each element on that array is a "status +line" that is displayed at a certain moment by i3bar. +
+ ++Let's make a short example. +We want to build a very simple status that displays the amunt of free space in +home folder and the percentage of used RAM. +Here's a sample JSON text for achieving our goal: +
+ +{ "version": 1 }
+[
+ [].
+
+ [ { "full_text":"Home 84.0G Free", "color":"#ffffff" },
+ { "full_text":"RAM 32%" , "color":"#ffffff" } ],
+
+ [ { "full_text":"Home 84.0G Free", "color":"#ffffff" },
+ { "full_text":"RAM 34%" , "color":"#ffffff" } ],
+
+ [....],
+ [....],
+ ...
+
++The first line tells i3bar that we are using JSON input. +The second line is the opening of the "infinite array". +Each line after second is one "instance status" to be displayed in i3bar, +
+ +Wrapper script
+ ++To obtain this output with conky we have to use it in combination with a short script. +The script will write down the "fixed" part of the output (first and second line), then it will call conky. +It will be conkyâs duty to write each of the "instances". +
+ ++The script is quite simple: +
+ +#!/bin/sh
+
+# Send the header so that i3bar knows we want to use JSON:
+echo '{ "version": 1 }'
+
+# Begin the endless array.
+echo '['
+
+# We send an empty first array of blocks to make the loop simpler:
+echo '[],'
+
+# Now send blocks with information forever:
+exec conky -c $HOME/.conkyrc
+
++Let's save this script as conky-i3bar in $HOME/bin. +In the i3 config file the bar config will be something like that +
+ +bar {
+ status_command $HOME/bin/conky-i3bar
+}
+
+conky configuration
+ ++Now we have to write a ~/.conkyrc file in order to obtain the desired status: +
+ +[{ "full_text":"Home 84.0G Free" , "color":"#ffffff" },
+ { "full_text":"RAM 32%" , "color":"#ffffff" }],
+
++Here's a sample conkyrc that updates every 2 seconds. Just to make things a litte bit more exciting +we put a condition in the script in order to write the occupied RAM in red if the amount is more than 90%: +
+ +out_to_x no
+own_window no
+out_to_console yes
+background no
+max_text_width 0
+
+# Update interval in seconds
+update_interval 2.0
+
+# This is the number of times Conky will update before quitting.
+# Set to zero to run forever.
+total_run_times 0
+
+# Shortens units to a single character (kiB->k, GiB->G, etc.). Default is off.
+short_units yes
+
+# How strict should if_up be when testing an interface for being up?
+# The value is one of up, link or address, to check for the interface
+# being solely up, being up and having link or being up, having link
+# and an assigned IP address.
+if_up_strictness address
+
+# Add spaces to keep things from moving about? This only affects certain objects.
+# use_spacer should have an argument of left, right, or none
+use_spacer left
+
+# Force UTF8? note that UTF8 support required XFT
+override_utf8_locale no
+
+# number of cpu samples to average
+# set to 1 to disable averaging
+cpu_avg_samples 2
+
+# Stuff after 'TEXT' will be formatted on screen
+TEXT
+
+# JSON for i3bar
+<%text filter="h">
+ [{ "full_text" : "Home ${fs_free /home} Free" , "color" : "\#ffffff" } ,
+ { "full_text" : "RAM ${memperc}%" , "color" :
+ ${if_match ${memperc}<90}"\#ffffff"${else}"\#ff0000"${endif} } ,
+%text>
+]
--
2.39.5