System monitoring polybar modules
Modified version of system monitor scripts
Polybar modules
A couple of days ago I sumbled upon this video by Luke Smith where he presented a couple of scripts to display CPU, memory and temperature information in i3blocks. Since I use polybar due to it working much better in tandem with my dual-monitor setup with different DPIs, I decided I’d adapt and change the scripts to work in polybar. Polybar already comes with memory, CPU and temperature modules by default, but they don’t include a popup showing the top-consuming processes, which is a nice feature to have.
You can find all these files in my dotfiles repo.
For this setup we need two bash scripts, memory.sh
and cpu.sh
, and a few extra lines in the polybar config file ~/.config/polybar/config
to set up the modules. Let’s see the details.
memory.sh
This script prints the amount of used memory with respect to the total available memory (uG/tG). If invoked with --popup
, it brings up a notify-send popup with the top 10 memory intensive processes in the system.
#!/bin/sh
case "$1" in
--popup)
notify-send "Memory (%)" "$(ps axch -o cmd:10,pmem k -pmem | head | awk '$0=$0"%"' )"
;;
*)
echo " $(free -h --si | awk '/^Mem:/ {print $3 "/" $2}')"
;;
esac
cpu.sh
This is very similar to the memory script. It prints CPU usage and temperature, and a popup with a list of the top 10 CPU processes when invoked with --popup
.
#!/bin/sh
case "$1" in
--popup)
notify-send "CPU time (%)" "$(ps axch -o cmd:10,pcpu k -pcpu | head | awk '$0=$0"%"' )"
;;
*)
echo " $(grep 'cpu ' /proc/stat | awk '{cpu_usage=($2+$4)*100/($2+$4+$5)}
END {printf "%0.2f%", cpu_usage}')
$(sensors | grep temp1 | head -1 | awk '{print $2}')"
;;
esac
Polybar configuration
Finally, in our polybar configuration file, we need to create the modules like this:
[bar/my-bar]
...
modules-right = [...] memory-info cpu-info [...]
[module/memory-info]
type = custom/script
exec = ~/.config/polybar/scripts/memory.sh
click-left = ~/.config/polybar/scripts/memory.sh --popup
format-underline = ${colors.primary}
[module/cpu-info]
type = custom/script
exec = ~/.config/polybar/scripts/cpu.sh
click-left = ~/.config/polybar/scripts/cpu.sh --popup
format-underline = ${colors.primary}
That is all, just remember to modify the path to the script files.