#!/bin/sh # modified from pystardust, GPLv3 license: https://github.com/pystardust/sbar # INIT sec=0 # MODULES update_time () { time="$(date '+%a %m/%d %H:%M') $(TZ=Asia/Shanghai date '+/%d %H:') $(date -u '+/%d %H:')" } #update_cap () { # cap="$(if xset q | grep -q "Caps Lock: *on"; then echo A; else echo a; fi)" #} update_net () { net="$(if nmcli -t --fields type,state device | grep -q '^\(ethernet\|wifi\):connected$'; then echo 1; else echo 0; fi)" case "$(nmcli -t --fields device,state device)" in *wg_aa:connected*) wg=A;; *wg_ca:connected*) wg=C;; *wg_ia:connected*) wg=I;; *wg_mydefault:connected*) wg=D;; *wg_studio:connected*) wg=S;; *) wg=0;; esac } update_vol () { # $(NF-1) for both alsa and pulseaudio vol="$(amixer get Master | awk -F'[][]' 'END{printf("%d %s",($(NF-1)=="on")?1:0,$2)}')" } update_mic () { # $(NF-1) for both alsa and pulseaudio mic="$(amixer get Capture | awk -F '[][]' 'END{print ($(NF-1)=="on")?1:0}')" } update_bat () { bat="$(cat /sys/class/power_supply/BAT0/capacity)%" } update_gpu () { gpu="$(envycontrol -q | awk 'END{print toupper(substr($NF,0,1))}')" } display () { xsetroot -name "$time | N $net W $wg | M $vol C $mic | $gpu | $bat" } # modules that don't update on their own need to be run at the start for getting their initial value update_net update_vol update_mic update_gpu # SIGNALLING # trap ";display" "RTMIN+n" trap "update_mic;display" "RTMIN" trap "update_vol;display" "RTMIN+1" # xev can't read my toggle internet keyboard key, don't know what key to use in sxhkd to send signal # used in /etc/NetworkManager/dispatcher.d/90-sbar trap "update_net;display" "RTMIN+2" # to update it from external commands ## kill -m $(pidof -x sbar) # where m = 34 + n while :; do sleep 1 & wait [ $((sec % 5 )) -eq 0 ] && update_time # update time every 5 seconds [ $((sec % 60)) -eq 0 ] && update_net [ $((sec % 60)) -eq 0 ] && update_bat # zoom turn on my mic on start, so need to monitor the change [ $((sec % 60 )) -eq 0 ] && update_mic # how often the display updates ( 5 seconds ) [ $((sec % 5 )) -eq 0 ] && display sec=$((sec + 1)) done