122 lines
2.6 KiB
Bash
Executable File
122 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
scrypto() {
|
|
local tmp
|
|
|
|
tmp="$(crypto 2> /dev/null)" && echo "$tmp" > crypto
|
|
}
|
|
|
|
scpu() {
|
|
awk '{print " "$1}' /proc/loadavg > cpu
|
|
}
|
|
|
|
smemory() {
|
|
free -h | awk '/^Mem:/{print " "$3}' > memory
|
|
}
|
|
|
|
sbat() {
|
|
local cap; cap="$(< /sys/class/power_supply/BAT0/capacity)"
|
|
|
|
if grep -qv Discharging /sys/class/power_supply/BAT0/status; then
|
|
echo " $cap%"
|
|
else
|
|
echo " $cap%"
|
|
fi > bat
|
|
}
|
|
|
|
svol() {
|
|
local st i v m vol=('' ' ')
|
|
|
|
mapfile -t st <<< "$(wpctl status | sed -n 's/.*\*.*\[vol: \(.*\)]/\1/p')"
|
|
for i in "${!vol[@]}"; do
|
|
read -r v m <<< "${st[$i]}"
|
|
if [ -z "$v" ]; then
|
|
break
|
|
fi
|
|
v="${vol[$i]} $((10#${v/./}))"
|
|
echo -n "${v//?/&${m:+$'\U0336'}}"
|
|
done > vol
|
|
}
|
|
|
|
snet() {
|
|
local if sig
|
|
|
|
mapfile -t if < <(networkctl --json=short | jq -r '.Interfaces[] | select(.Routes) | select(.Routes[].Gateway) | .Type, .Name, .SSID')
|
|
case "${if[0]}" in
|
|
ether)
|
|
echo "🌐 ${if[1]}"
|
|
;;
|
|
wlan)
|
|
sig="$(awk "/${if[1]}/{printf \"%.0f\", \$3}" /proc/net/wireless)"
|
|
if [ "$sig" -gt 56 ]; then sig='▂▄▆█'
|
|
elif [ "$sig" -gt 38 ]; then sig='▂▄▆_'
|
|
elif [ "$sig" -gt 21 ]; then sig='▂▄__'
|
|
elif [ "$sig" -gt 3 ]; then sig='▂___'
|
|
else sig='____'
|
|
fi
|
|
echo "$sig ${if[2]}"
|
|
;;
|
|
*)
|
|
echo '⚠'
|
|
;;
|
|
esac > net
|
|
}
|
|
|
|
svpn() {
|
|
ip -br link show type wireguard | awk '{print " 🔒 "$1}' > vpn
|
|
}
|
|
|
|
_tz() {
|
|
local j if f="$XDG_CACHE_HOME/tz"
|
|
|
|
mapfile -t if < <(ip -j route show default | jq -r '.[] | .prefsrc, .dev')
|
|
if ! [ -s "$f" ] || [ "${if[0]}" != "$(< ip)" ]; then
|
|
echo "${if[0]}" > ip
|
|
if j="$(curl -s 'https://ipapi.co/json')"; then
|
|
jq -r '.timezone, "\(.latitude):\(.longitude)"' <<< "$j" > "$f"
|
|
head -1 "$f"
|
|
fi
|
|
else
|
|
head -1 "$f"
|
|
fi
|
|
}
|
|
stime() {
|
|
TZ="$(_tz)" date '+%a %m-%d %R%:::z' > 'time'
|
|
}
|
|
|
|
display() {
|
|
declare -A v
|
|
for f in *; do
|
|
v[$f]=$(< "$f")
|
|
done
|
|
xsetroot -name "${v[crypto]} | ${v[cpu]} | ${v[memory]} | ${v[vol]} | ${v[net]}${v[vpn]} | ${v[bat]} | ${v[time]}"
|
|
}
|
|
|
|
trap "kill 0" INT
|
|
|
|
mkdir -p "$XDG_RUNTIME_DIR/sbar"
|
|
cd "$XDG_RUNTIME_DIR/sbar" || exit 1
|
|
|
|
while :; do
|
|
scrypto
|
|
sleep 300
|
|
done &
|
|
|
|
touch ip
|
|
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 .)
|