dotfiles/.local/bin/sbar
2025-05-29 07:52:56 +00:00

128 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
function scrypto() {
local tmp
tmp="$(crypto 2> /dev/null)" && echo "$tmp" > crypto
}
function scpu() {
echo "$(awk '{print $1}' /proc/loadavg)" > cpu
}
function smemory() {
echo "$(free -h | awk '/^Mem:/{print $3}')" > memory
}
function sbat() {
local cap; cap="$(cat /sys/class/power_supply/BAT0/capacity)"
if grep -qv Discharging /sys/class/power_supply/BAT0/status; then
echo "$cap%"
else
echo "$cap%"
fi > bat
}
function svol() {
local st v m vol=('' ' ') mut=('🔇' ' ')
mapfile -t st <<< "$(wpctl status | sed -n 's/.*\*.*\[vol: \(.*\)]/\1/p')"
if [ -z "${st[0]}" ]; then
return > vol
fi
for i in "${!vol[@]}"; do
read -r v m <<< "${st[$i]}"
if [ -n "$m" ]; then
echo -n "${mut[$i]}"
else
echo -n "${vol[$i]} $((10#${v/./}))"
fi
done > vol
}
function snet() {
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)
echo "🌐 $dev"
;;
wlan)
ssid="$(jq -r .SSID <<< "$j")"
sig="$(awk "/$dev/{printf \"%.0f\", \$3}" /proc/net/wireless)"
if [ "$sig" -gt 56 ]; then echo "▂▄▆█ $ssid"
elif [ "$sig" -gt 38 ]; then echo "▂▄▆_ $ssid"
elif [ "$sig" -gt 21 ]; then echo "▂▄__ $ssid"
elif [ "$sig" -gt 3 ]; then echo "▂___ $ssid"
else echo "____ $ssid"
fi
;;
*)
echo '⚠'
;;
esac > net
}
function svpn() {
local v; v="$(ip -br link show type wireguard | awk '{print $1}')"
if [ -n "$v" ]; then
echo " 🔒 $v"
fi > vpn
}
function stz() {
local tmp ip; ip="$(ip route | grep -oP '^default.*src\s+\K[^\s]+')"
if [ "$ip" != "$(cat ip)" ]; then
tmp="$(curl -s --interface wlan0 'https://ipapi.co/timezone')" \
&& echo "$tmp" > tz
echo "$ip" > ip
fi
}
function stime() {
# shellcheck disable=SC2238
TZ="$(cat tz)" date '+%a %m-%d %R%:::z' > time
}
function display() {
for f in *; do
local - "$f"="$(cat "$f")"
done
# shellcheck disable=SC2128,SC2154
xsetroot -name "$crypto | $cpu | $memory | $vol | $net$vpn | $bat | $time"
}
# TODO
#trap 'kill -INT 0; wait' INT
mkdir -p "$XDG_RUNTIME_DIR/sbar"
cd "$XDG_RUNTIME_DIR/sbar" || exit 1
(while :; do
scrypto
stz
sleep 300
done &)
(while :; do
scpu
smemory
sbat
svol
snet
svpn
stime
display
sleep $((5 - 10#$(date '+%S') % 5))
done &)
while read -r _ _ f; do
"s$f"
display
done < <(inotifywait -qme attrib .)