#!/bin/sh power_prefix="/sys/class/power_supply/" [ -d "${power_prefix}sbs-20-000b" ] && bat="sbs-20-000b" [ -d "${power_prefix}BAT0" ] && bat="BAT0" [ "$(pgrep -c pulseaudio)" -eq 1 ] && ss="pulse" || ss="alsa" mod_bspwm () { used_desk=$(bspc query -D -d .occupied --names | tr '\n' ' ') current_desk=$(bspc query -D -d .focused --names) final_string="" current_printed=0 cur_char='>' for i in $used_desk; do [ "$i" = "$current_desk" ] && \ final_string=${final_string}"$cur_char$i " && \ current_printed=1 || \ final_string=${final_string}"$i " done [ $current_printed -eq 0 ] && final_string=${final_string}"$cur_char$current_desk " printf "%s" "$final_string" } mod_period () { nextclass } mod_sensors () { sensors | grep 'Core 0' | awk -F' ' '{print $3}' | tr -d '\n' } mod_power () { [ -z "$bat" ] || tr -d '\n' < /sys/class/power_supply/$bat/capacity sed 's/Charging/↑/g;s/Not charging/-/g;s/Discharging/↓/g;s/Full/-/g' < /sys/class/power_supply/$bat/status } mod_vol () { [ "$ss" = "pulse" ] && pactl list sinks | awk -F' ' '$1 == "Volume:" {print "pv" $5}' [ "$ss" = "alsa" ] && amixer | grep '^ Front' | awk -F'[' '{ORS = ""; print "av" substr($2, 1, 3); exit}' } mod_date_time () { date '+%m%d-%H:%M' | tr '\n' ' ' } update_mod () { output="$(eval "mod_$1")" eval "output_$1=\"$output\"" } get_mod () { eval "printf '%s' \${output_$1}" } echo_bar () { left="$(get_mod "bspwm")" right="$(get_mod "date_time")$(get_mod "period") $(get_mod "sensors") $(get_mod "power") $(get_mod "vol")" width="$(tput cols)" rightwidth="${#right}" # print left side printf "\033[2J\033[H%s" "$left" # print right side printf "\033[1;%if%s" "$((width - rightwidth + 1))" "$right" } register_sigs () { trap "update_mod vol" USR2 trap "update_mod bspwm" USR1 } update_all () { update_mod power update_mod vol update_mod bspwm update_mod date_time update_mod period update_mod sensors } tput civis register_sigs update_all i=0 while true; do sleep 0.25 [ "$i" -eq $((29 * 4)) ] && update_all && i=0 echo_bar i="$((i + 1))" done