126 lines
3.2 KiB
Bash
Executable File
126 lines
3.2 KiB
Bash
Executable File
#!/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")"
|
|
if grep -qv Discharging "$dir/status"; then
|
|
bat=" $cap%"
|
|
elif [ "$cap" -gt 80 ]; then bat=" $cap%"
|
|
elif [ "$cap" -gt 60 ]; then bat=" $cap%"
|
|
elif [ "$cap" -gt 40 ]; then bat=" $cap%"
|
|
elif [ "$cap" -gt 20 ]; then bat=" $cap%"
|
|
else bat=" $cap%"
|
|
fi
|
|
}
|
|
|
|
function update_sink_vol() {
|
|
local vol mute
|
|
|
|
read -r vol mute < <(wpctl get-volume '@DEFAULT_AUDIO_SINK@')
|
|
vol="$((10#${vol/./}))"
|
|
if [ -n "$mute" ]; then sink_vol='🔇'
|
|
elif [ "$vol" -gt 67 ]; then sink_vol=" $vol"
|
|
elif [ "$vol" -gt 33 ]; then sink_vol=" $vol"
|
|
else sink_vol=" $vol"
|
|
fi
|
|
}
|
|
|
|
function update_source_vol() {
|
|
local vol mute
|
|
|
|
read -r vol mute < <(wpctl get-volume '@DEFAULT_AUDIO_SOURCE@')
|
|
vol="$((10#${vol/./}))"
|
|
if [ -n "$mute" ]; then source_vol='🔇'
|
|
else source_vol=" $vol"
|
|
fi
|
|
}
|
|
|
|
function update_net() {
|
|
local dev j ssid sig
|
|
|
|
dev="$(ip route | grep -oP 'default.*dev\s+\K[^\s]+')"
|
|
j="$(networkctl status "$dev" --json=short)"
|
|
case "$(jq -r .Type <<< "$j")" in
|
|
ether)
|
|
net="🌐 $dev"
|
|
;;
|
|
wlan)
|
|
ssid="$(jq -r .SSID <<< "$j")"
|
|
sig="$(awk "/$dev/{printf \"%.0f\", \$3}" /proc/net/wireless)"
|
|
if [ "$sig" -gt 56 ]; then net="▂▄▆█ $ssid"
|
|
elif [ "$sig" -gt 38 ]; then net="▂▄▆_ $ssid"
|
|
elif [ "$sig" -gt 21 ]; then net="▂▄__ $ssid"
|
|
elif [ "$sig" -gt 3 ]; then net="▂___ $ssid"
|
|
else net="____ $ssid"
|
|
fi
|
|
;;
|
|
*)
|
|
net='⚠'
|
|
;;
|
|
esac
|
|
}
|
|
|
|
function update_time() {
|
|
time="$(TZ=Asia/Makassar date '+%R %Z') - $(date -u '+%a %m-%d %R')"
|
|
}
|
|
|
|
function reload() {
|
|
sec=0
|
|
}
|
|
|
|
function display() {
|
|
"${DISPLAYCMD[@]}" "$crypto | $cpu | $memory | $sink_vol $source_vol | $net | $bat | $time"
|
|
}
|
|
|
|
if [ "$XDG_SESSION_TYPE" = wayland ]; then
|
|
DISPLAYCMD=(echo)
|
|
else
|
|
DISPLAYCMD=(xsetroot -name)
|
|
fi
|
|
|
|
# SIGNALING
|
|
# trap '<function>;display;wait' 'RTMIN+n'
|
|
trap 'reload' 'RTMIN'
|
|
trap 'update_sink_vol;display;wait' 'RTMIN+1'
|
|
trap 'update_source_vol;display;wait' 'RTMIN+2'
|
|
trap 'update_net;display;wait' 'RTMIN+3'
|
|
# to update it from external commands
|
|
## kill -m "$(cat ~/.cache/pidofbar)"
|
|
# where m = 34 + n
|
|
|
|
echo "$$" > "$HOME/.cache/pidofbar"
|
|
|
|
sec=0
|
|
while true; do
|
|
[ "$((sec % 300))" -eq 5 ] && update_crypto
|
|
[ "$((sec % 5))" -eq 0 ] && {
|
|
update_cpu
|
|
update_memory
|
|
update_sink_vol
|
|
update_source_vol
|
|
update_net
|
|
update_bat
|
|
update_time
|
|
display
|
|
}
|
|
((sec += 5))
|
|
awk "@load \"time\"; BEGIN {d=5; s=$(date '+%S.%N'); sleep(d - s % d)}" &
|
|
wait
|
|
done
|