#!/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 .)