149 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
 | 
						|
if [ "$1" = "-k" ]; then
 | 
						|
    pkill -f '^bash .+/panel$'
 | 
						|
    exit
 | 
						|
fi
 | 
						|
 | 
						|
CWD=$(dirname $0)
 | 
						|
. $CWD/panel-config
 | 
						|
 | 
						|
#
 | 
						|
cleanup() { rm -rf "$PANEL_FIFO"; pkill -P $$; }
 | 
						|
 | 
						|
#
 | 
						|
trap cleanup INT TERM QUIT EXIT
 | 
						|
[ -e "$PANEL_FIFO" ] && rm "$PANEL_FIFO"
 | 
						|
mkfifo "$PANEL_FIFO"
 | 
						|
echo "MKFIFO $PANEL_FIFO"
 | 
						|
 | 
						|
if pgrep lemonbar >/dev/null; then
 | 
						|
    >&2 echo "Lemonbar is already running"
 | 
						|
    exit 1
 | 
						|
fi
 | 
						|
 | 
						|
 | 
						|
#
 | 
						|
# Bootstrap panel(s)
 | 
						|
#
 | 
						|
 | 
						|
clock -sf "T${ICON_DATE} %A, %b %d   ${ICON_TIME} %I:%M %p" > "${PANEL_FIFO}" &
 | 
						|
xtitle -sf 'X%s' > "${PANEL_FIFO}" &
 | 
						|
bspc subscribe report > "${PANEL_FIFO}" &
 | 
						|
 | 
						|
for lemon in $CWD/lemons/*; do
 | 
						|
    echo "INIT ${lemon##*/}"
 | 
						|
    $lemon > "${PANEL_FIFO}" &
 | 
						|
done
 | 
						|
 | 
						|
#
 | 
						|
parse() {
 | 
						|
    num_mon=$(bspc query -M | wc -l)
 | 
						|
    while read -r line; do
 | 
						|
        data="${line#?}"
 | 
						|
        case $line in
 | 
						|
            # Minimal icons
 | 
						|
            B*) battery="$data"
 | 
						|
                ;;
 | 
						|
            U*) updates=" $data"
 | 
						|
                ;;
 | 
						|
            M*) mail=" $data"
 | 
						|
                ;;
 | 
						|
            V*) vol=" %{A:vol toggle:}$data${A}"
 | 
						|
                ;;
 | 
						|
            I*) wifi=" $data"
 | 
						|
                ;;
 | 
						|
 | 
						|
            # Full segments
 | 
						|
            X*) xtitle="$data"
 | 
						|
                ;;
 | 
						|
            T*) datetime="   $data"
 | 
						|
                ;;
 | 
						|
            S*) song="$data "
 | 
						|
                ;;
 | 
						|
            W*) # bspwm's state
 | 
						|
                wm=""
 | 
						|
                IFS=':'
 | 
						|
                set -- $data
 | 
						|
                while [ "$#" -gt 0 ]
 | 
						|
                do
 | 
						|
                    id=$1
 | 
						|
                    name=${id#?}
 | 
						|
                    case $id in
 | 
						|
                        [mM]*)
 | 
						|
                            M="$name"
 | 
						|
                            [[ $M != "C" ]] && M=
 | 
						|
                            # [ "$num_mon" -lt 2 ] && shift && continue
 | 
						|
                            # case $id in
 | 
						|
                            #     m*) # monitor
 | 
						|
                            #         _FG=$COLOR_MONITOR_FG
 | 
						|
                            #         _BG=$COLOR_MONITOR_BG
 | 
						|
                            #         ;;
 | 
						|
                            #     M*) # focused monitor
 | 
						|
                            #         _FG=$COLOR_FOCUSED_MONITOR_FG
 | 
						|
                            #         _BG=$COLOR_FOCUSED_MONITOR_BG
 | 
						|
                            #         ;;
 | 
						|
                            # esac
 | 
						|
                            # wm="${wm}%{F$_FG}%{B$_BG}%{A:bspc monitor -f ${name}:} ${name} %{A}%{B-}%{F-}"
 | 
						|
                            ;;
 | 
						|
                        [fFoOuU]*)
 | 
						|
                            if [[ $M ]]; then
 | 
						|
                                icon="$ICON_NONE"
 | 
						|
                                case $id in
 | 
						|
                                    f*) # free desktop
 | 
						|
                                        _FG=$COLOR_FREE_FG
 | 
						|
                                        _BG=$COLOR_FREE_BG
 | 
						|
                                        ;;
 | 
						|
                                    F*) # focused free desktop
 | 
						|
                                        _FG=$COLOR_FOCUSED_FREE_FG
 | 
						|
                                        _BG=$COLOR_FOCUSED_FREE_BG
 | 
						|
                                        ;;
 | 
						|
                                    o*) # occupied desktop
 | 
						|
                                        _FG=$COLOR_OCCUPIED_FG
 | 
						|
                                        _BG=$COLOR_OCCUPIED_BG
 | 
						|
                                        icon="$ICON_FULL"
 | 
						|
                                        ;;
 | 
						|
                                    O*) # focused occupied desktop
 | 
						|
                                        _FG=$COLOR_FOCUSED_OCCUPIED_FG
 | 
						|
                                        _BG=$COLOR_FOCUSED_OCCUPIED_BG
 | 
						|
                                        icon="$ICON_FULL"
 | 
						|
                                        ;;
 | 
						|
                                    u*) # urgent desktop
 | 
						|
                                        _FG=$COLOR_URGENT_FG
 | 
						|
                                        _BG=$COLOR_URGENT_BG
 | 
						|
                                        icon="$ICON_FULL"
 | 
						|
                                        ;;
 | 
						|
                                    U*) # focused urgent desktop
 | 
						|
                                        _FG=$COLOR_FOCUSED_URGENT_FG
 | 
						|
                                        _BG=$COLOR_FOCUSED_URGENT_BG
 | 
						|
                                        icon="$ICON_FULL"
 | 
						|
                                        ;;
 | 
						|
                                esac
 | 
						|
                                # eval "icon=\$ICON_$(echo ${name#??} | tr '[:lower:]' '[:upper:]')"
 | 
						|
                                wm="${wm}%{F$_FG}%{B$_BG}%{A:bspc desktop -f ${name}:}  ${icon:-$name}  %{A}%{B-}%{F-}"
 | 
						|
                            fi
 | 
						|
                            ;;
 | 
						|
                    esac
 | 
						|
                    shift
 | 
						|
                done
 | 
						|
                ;;
 | 
						|
        esac
 | 
						|
        echo -e \
 | 
						|
            "%{l}${wm}${song}" \
 | 
						|
            "%{c}${xtitle}" \
 | 
						|
            "%{r}${battery}${mail}${updates}${vol}${wifi}${datetime}  "
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
parse < "${PANEL_FIFO}" | \
 | 
						|
    lemonbar \
 | 
						|
    -a 32 \
 | 
						|
    -g 2560x$PANEL_HEIGHT+1200+0 \
 | 
						|
    -f "$PANEL_FONT" \
 | 
						|
    -f "$ICON_FONT" \
 | 
						|
    -F "$COLOR_FG" \
 | 
						|
    -B "$COLOR_BG" \
 | 
						|
    | sh &
 | 
						|
 | 
						|
wait
 |