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