#!/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 dev=wlan0 sig="$(awk "/$dev/{print int(\$3)}" /proc/net/wireless)" if [ -z "$sig" ]; then wlp='⚠' return fi ssid="$(networkctl status "$dev" | grep -Po 'Wi-Fi access point:\s*\K\w+')" { [ "$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;wait' 'RTMIN+n' trap 'update_sink_vol;display;wait' 'RTMIN' trap 'update_wlp;display;wait' 'RTMIN+1' # 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))" = 10 ] && 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=$(date '+%S.%N'); sleep(d - s % d)}" & done