#!/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:')" } 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)" vpn="$(if nmcli -t --fields type,state device | grep -q 'tun:connected'; then echo 1; else echo 0; fi)" } 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)%" } display () { xsetroot -name "$time | N $net V $vpn | M $vol C $mic | $cap | $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 # 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 trap "update_net;display" "RTMIN+2" trap "update_cap;display" "RTMIN+3" # 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 update_cap [ $((sec % 60)) -eq 0 ] && update_bat # how often the display updates ( 5 seconds ) [ $((sec % 5 )) -eq 0 ] && display sec=$((sec + 1)) done