#!/bin/bash function update_crypto() { local c c="$(crypto 2> /dev/null)" && crypto="$c" } function update_cpu() { cpu=" $(awk '{print $1}' /proc/loadavg)" } function update_memory() { memory=" $(free -h | awk '/^Mem:/ {print $3}')" } function update_bat() { local dir cap dir='/sys/class/power_supply/BAT0' cap="$(cat "$dir/capacity")" { grep -qv Discharging "$dir/status" && bat=" $cap%"; } || { [ "$cap" -gt 80 ] && bat=" $cap%"; } || { [ "$cap" -gt 60 ] && bat=" $cap%"; } || { [ "$cap" -gt 40 ] && bat=" $cap%"; } || { [ "$cap" -gt 20 ] && bat=" $cap%"; } || { bat=" $cap%"; } } function update_sink_vol() { local sink vol sink="$(wpctl get-volume '@DEFAULT_AUDIO_SINK@')" if grep -q MUTED <<< "$sink"; then sink_vol='🔇' return fi vol="$(awk '{print int($2 * 100)}' <<< "$sink")" { [ "$vol" -gt 67 ] && sink_vol=" $vol"; } || { [ "$vol" -gt 33 ] && sink_vol=" $vol"; } || { sink_vol=" $vol"; } } function update_source_vol() { local source vol source="$(wpctl get-volume '@DEFAULT_AUDIO_SOURCE@')" if grep -q MUTED <<< "$source"; then source_vol='' return fi source_vol=" $(awk '{print int($2 * 100)}' <<< "$source")" } function update_wlp() { local sig ssid sig="$(awk '/^wlp/ {print int($3)}' /proc/net/wireless)" if [ -z "$sig" ]; then wlp='⚠' return fi ssid="$(nmcli device wifi show-password | sed -n 's/^SSID:\s*//p')" { [ "$sig" -gt 56 ] && wlp="▂▄▆█ $ssid"; } || { [ "$sig" -gt 38 ] && wlp="▂▄▆_ $ssid"; } || { [ "$sig" -gt 21 ] && wlp="▂▄__ $ssid"; } || { [ "$sig" -gt 3 ] && wlp="▂___ $ssid"; } || { wlp="____ $ssid"; } } function update_time() { time="$(date "+%a %m-%d %R")" } function display() { "${DISPLAYCMD[@]}" "$crypto | $cpu | $memory | $sink_vol $source_vol | $wlp | $bat | $time" } if [ "$XDG_SESSION_TYPE" = wayland ]; then DISPLAYCMD=(echo) else DISPLAYCMD=(xsetroot -name) fi # SIGNALING # trap ';display' 'RTMIN+n' trap 'update_sink_vol;display' 'RTMIN' # to update it from external commands ## kill -m "$(cat ~/.cache/pidofbar)" # where m = 34 + n echo "$$" > "$HOME/.cache/pidofbar" sec=0 while true; do wait && { [ "$((sec % 300))" = 0 ] && update_crypto [ "$((sec % 10))" = 0 ] && { update_cpu update_memory update_sink_vol update_source_vol update_wlp update_bat update_time display } sec="$((sec + 10))" } awk '@load "time"; BEGIN {d=10; s=system("date \"+%S.%N\""); sleep(d - s % d)}' & done