88 lines
2.2 KiB
Bash
Executable File
88 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# INIT
|
|
echo "$$" > "$HOME/.cache/pidofbar"
|
|
|
|
# MODULES
|
|
update_crypto() {
|
|
crypto="$(crypto)"
|
|
}
|
|
|
|
update_cpu() {
|
|
cpu=" $(grep -o "^[^ ]*" /proc/loadavg)"
|
|
}
|
|
|
|
update_memory() {
|
|
memory=" $(free -h | sed -n '2s/\([^ ]* *\)\{2\}\([^ ]*\).*/\2/p')"
|
|
}
|
|
|
|
update_bat() {
|
|
local dir="$(echo /sys/class/power_supply/BAT* | sort -n | tail -n1)"
|
|
bat="$(grep -q Charging "$dir/status" && printf '' || printf '')"
|
|
bat="$bat $(cat "$dir/capacity")%"
|
|
}
|
|
|
|
update_vol() {
|
|
local v; v="$(wpctl get-volume '@DEFAULT_AUDIO_SINK@')"
|
|
|
|
if grep -q 'MUTED' <<< "$v"; then
|
|
vol='🔇'
|
|
else
|
|
vol=" $((10#$(tr -dc '0-9' <<< "$v")))"
|
|
fi
|
|
}
|
|
|
|
update_backlight() {
|
|
local actual_brightness
|
|
local max_brightness
|
|
|
|
read -r actual_brightness </sys/class/backlight/*/actual_brightness
|
|
read -r max_brightness </sys/class/backlight/*/max_brightness
|
|
backlight=" $((actual_brightness * 100 / max_brightness))%"
|
|
}
|
|
|
|
update_time() {
|
|
time="$(date "+%a %m/%d %R")"
|
|
}
|
|
|
|
# For calcurse users, refer https://github.com/pystardust/automeet
|
|
#update_event () {
|
|
# event="$(calcurse -n | sed 1d | \
|
|
# sed -E "s_^ *\[(.*):(.*)\] ([^\t]*)\t?.*_[\1h \2m->\3]_")"
|
|
# [ "[]" = "$event" ] && event=""
|
|
#}
|
|
|
|
# modules that don't update on their own need to be run at the start for getting their initial value
|
|
while [ -z "$(wpctl get-volume '@DEFAULT_AUDIO_SINK@')" ]; do
|
|
sleep 1
|
|
done
|
|
update_vol
|
|
update_backlight
|
|
|
|
display() {
|
|
xsetroot -name "$crypto | $cpu | $memory | $vol | $backlight | $bat | $time"
|
|
}
|
|
|
|
# SIGNALING
|
|
# trap "<function>;display" "RTMIN+n"
|
|
trap "update_vol;display" "RTMIN"
|
|
trap "update_backlight;display" "RTMIN+1"
|
|
trap "update_bat;display" "RTMIN+2"
|
|
# to update it from external commands
|
|
## kill -m "$(cat ~/.cache/pidofbar)"
|
|
# where m = 34 + n
|
|
|
|
sec=0
|
|
while true; do
|
|
sleep 1 & wait && {
|
|
[ $((sec % 3600)) -eq 0 ] && update_crypto
|
|
[ $((sec % 5 )) -eq 0 ] && update_time
|
|
[ $((sec % 5 )) -eq 0 ] && update_cpu
|
|
[ $((sec % 5 )) -eq 0 ] && update_memory
|
|
[ $((sec % 5 )) -eq 0 ] && update_bat
|
|
[ $((sec % 5 )) -eq 0 ] && display
|
|
|
|
sec="$((sec + 1))"
|
|
}
|
|
done
|