dotfiles/.config/bspwm/lemonbar.sh
2023-11-05 12:22:05 +01:00

254 lines
7.6 KiB
Bash
Executable File

#!/bin/ksh
trap 'trap - TERM; kill 0' INT TERM QUIT EXIT
FONT="-zevv-peep-medium-r-normal--14-130-75-75-c-70-iso8859-15"
DEFAULT_FG="#222222"
DEFAULT_BG="#CCCCCC"
MONITOR_FG="#8dbcdf"
MONITOR_BG="#333232"
FOCUSED_MONITOR_FG="#b1d0e8"
FOCUSED_MONITOR_BG="#144b6c"
FREE_FG="#737171"
FREE_BG="#333232"
FOCUSED_FREE_FG="#000000"
FOCUSED_FREE_BG="#504e4e"
OCCUPIED_FG="#a7a5a5"
OCCUPIED_BG="#333232"
FOCUSED_OCCUPIED_FG="#d6d3d2"
FOCUSED_OCCUPIED_BG="#504e4e"
URGENT_FG="#f15d66"
URGENT_BG="#333232"
FOCUSED_URGENT_FG="#501d1f"
FOCUSED_URGENT_BG="#d5443e"
STATE_FG="#89b09c"
STATE_BG="#333232"
TITLE_FG="#a8a2c0"
TITLE_BG="#333232"
SYS_FG="#b1a57d"
SYS_BG="#333232"
BG="%{F#CCCCCC}"
FG="%{F#222222}"
CLEAR="%{F-}%{B-}"
_battery() {
ADAPTER=$(apm -a)
if [ $ADAPTER = 0 ] ; then
printf ">"
elif [ $ADAPTER = 1 ] ; then
printf "="
else
printf "?"
fi
BATTERY=$(apm -l)
if [ $BATTERY -gt 66 ] ; then
printf "$BATTERY%%"
elif [ $BATTERY -gt 33 ] ; then
printf "$BATTERY%%"
else
printf "$BATTERY%%"
fi
BATTERY=$(apm -m)
[[ "$BATTERY" != "unknown" ]] && printf " ($BATTERY m)"
}
_cputemp() {
printf "$(sysctl -n hw.sensors.cpu0.temp0 | cut -d"." -f1)°C"
}
_netload() {
set -A if_load $(ifstat -n -i trunk0 -b 0.1 1 | sed '1,2d')
printf "In: ${if_load[0]} kb/s Out: ${if_load[1]} kb/s "
}
_backlight() {
LIGHT=$(xbacklight | cut -d"." -f1)
printf "$LIGHT%%"
}
_volume() {
MUTE=$(mixerctl outputs.master.mute | awk -F '=' '{ print $2 }')
#LSPK=$(($(mixerctl outputs.master | awk -F '(=|,)' '{ print $2 }')*100/255))
RSPK=$(($(mixerctl outputs.master | awk -F '(=|,)' '{ print $2 }')*100/255))
if [ "$MUTE" = "on" ] ; then
printf "muted"
else
printf "$RSPK%%"
fi
}
_wlan() {
WLANSTAT=$(ifconfig iwn0 | awk '/status:/ { print $2 }')
WLANID=$(ifconfig iwn0 | awk '/(nwid|join)/ { print $3 }')
if [ "$WLANSTAT" = "active" ] ; then
printf '%s' "$WLANID"
else
printf '%s' "no-wifi"
fi
}
_datetime() {
printf '%s' "$(date +"%Y-%m-%d %H:%M")"
}
num_mon=$(bspc query -M | wc -l)
# INITIAL SETUP
cputemp=$(_cputemp)
battery=$(_battery)
date=$(_datetime)
backlight=$(_backlight)
volume=$(_volume)
wlan=$(_wlan)
netload=$(_netload)
datetime=$(_datetime)
mkfifo /tmp/panel-fifo
bspc subscribe report > /tmp/panel-fifo &
# TICK COUNTER FOR AUTOMATIC UPDATES
while true;
do
TICK=$(($TICK + 1))
case $TICK in
1)
printf '%s\n' "UBAT" > "$PANEL_FIFO"
printf '%s\n' "UBL" > "$PANEL_FIFO"
printf '%s\n' "UNETLOAD" > "$PANEL_FIFO"
;;
2)
printf '%s\n' "UCPU" > "$PANEL_FIFO"
;;
5)
printf '%s\n' "UWLAN" > "$PANEL_FIFO"
;;
10)
printf '%s\n' "UDATE" > "$PANEL_FIFO"
TICK=0
;;
esac
sleep 5
done &
# READ FIFO EVENTS
while read -r line;
do
case $line in
UVOL)
volume=$(_volume) ;;
UDATE)
datetime=$(_datetime) ;;
UBAT)
battery=$(_battery) ;;
UBL)
backlight=$(_backlight) ;;
UCPU)
cputemp=$(_cputemp) ;;
UWLAN)
wlan=$(_wlan) ;;
UNETLOAD)
netload=$(_netload) ;;
S*)
sys=${line#?}
;;
W*)
# BSPWM STATE
wm=
IFS=':'
set -- ${line#?}
while [ $# -gt 0 ] ; do
item=$1
name=${item#?}
case $item in
[mM]*)
case $item in
m*)
# monitor
FG=$MONITOR_FG
BG=$MONITOR_BG
on_focused_monitor=
;;
M*)
# focused monitor
FG=$FOCUSED_MONITOR_FG
BG=$FOCUSED_MONITOR_BG
on_focused_monitor=1
;;
esac
[ $num_mon -lt 2 ] && shift && continue
wm="${wm}%{F${FG}}%{B${BG}}%{A:bspc monitor -f ${name}:} ${name} %{A}%{B-}%{F-}"
;;
[fFoOuU]*)
case $item in
f*)
# free desktop
FG=$FREE_FG
BG=$FREE_BG
UL=$BG
;;
F*)
if [ "$on_focused_monitor" ] ; then
# focused free desktop
FG=$FOCUSED_FREE_FG
BG=$FOCUSED_FREE_BG
UL=$BG
else
# active free desktop
FG=$FREE_FG
BG=$FREE_BG
UL=$FOCUSED_FREE_BG
fi
;;
o*)
# occupied desktop
FG=$OCCUPIED_FG
BG=$OCCUPIED_BG
UL=$BG
;;
O*)
if [ "$on_focused_monitor" ] ; then
# focused occupied desktop
FG=$FOCUSED_OCCUPIED_FG
BG=$FOCUSED_OCCUPIED_BG
UL=$BG
else
# active occupied desktop
FG=$OCCUPIED_FG
BG=$OCCUPIED_BG
UL=$FOCUSED_OCCUPIED_BG
fi
;;
u*)
# urgent desktop
FG=$URGENT_FG
BG=$URGENT_BG
UL=$BG
;;
U*)
if [ "$on_focused_monitor" ] ; then
# focused urgent desktop
FG=$FOCUSED_URGENT_FG
BG=$FOCUSED_URGENT_BG
UL=$BG
else
# active urgent desktop
FG=$URGENT_FG
BG=$URGENT_BG
UL=$FOCUSED_URGENT_BG
fi
;;
esac
wm="${wm}%{F${FG}}%{B${BG}}%{U${UL}}%{+u}%{A:bspc desktop -f ${name}:} ${name} %{A}%{B-}%{F-}%{-u}"
;;
[LTG]*)
# layout, state and flags
wm="${wm}%{F$STATE_FG}%{B$STATE_BG} ${name} %{B-}%{F-}"
esac
shift
done
;;
esac
printf "%s\n" "%{l}${wm}%{c}%{r}$cputemp $backlight $volume $wlan $netload $battery $datetime "
done < "$PANEL_FIFO" | lemonbar -f "$FONT" -B "$DEFAULT_FG" -F "$DEFAULT_BG" -u 8 | sh