#!/bin/sh title() { # Grab focused window's ID if [ -n "$1" ]; then ID="$(printf "%s" "$1" | cut -f 2)" else ID="$(xprop -root '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)" fi # Grabs focused window's title if [ "$ID" = "0x0" ]; then TITLE="" else TITLE="$(xprop -id "$ID" ' $0' WM_NAME | awk '{ $1=""; $0=substr($0, 3, length($0) - 3); if (length($0) <= 75) print $0 else print substr($0, 1, 72)"..." }')" fi printf "%s\n" "title$TITLE" } clock() { # Grabs date in 11:59 A/PM format DATETIME=$(date "+%I:%M %p") printf "%s\n" "clock $DATETIME" } bar() { lemonbar \ -a 20 -g x"$PANEL_HEIGHT" -n "$PANEL_NAME" \ -f "DejaVu Sans-8" -o 0 \ -f "FontAwesome5Free Solid-8" -o -3 \ -f "FontAwesome5Free Regular-8" -o -3 \ -f "FontAwesome5 Brands-8" -o -3 \ -B "$BGCOLOR_INACTIVE" -F "$COLOR15" } start() { # Kill existing panel while [ "$(pgrep -cx lemonbar.sh)" -gt 1 ]; do pkill -ox -9 lemonbar.sh; done pkill xprop pkill sleep # Trap all subshells trap 'trap - TERM; kill 0' INT TERM QUIT EXIT # Create named pipe [ -p $PANEL_PIPE ] && rm "$PANEL_PIPE" mkfifo "$PANEL_PIPE" # Directory of this script DIR="$(dirname "$0")" # Setup workspaces block with xprop events xprop -root -spy _NET_CURRENT_DESKTOP _NET_NUMBER_OF_DESKTOPS | while read -r line; do "$DIR"/workspaces.sh done > "$PANEL_PIPE" & # Setup window title block with xprop events xprop -root -spy '\t$0\n' _NET_ACTIVE_WINDOW | while read -r line; do title "$line" done > "$PANEL_PIPE" & # Setup interrupt blocks "$DIR"/volume.sh "$DIR"/brightness.sh # Setup block timers while :; do title; sleep 1; done > "$PANEL_PIPE" & while :; do "$DIR"/wifi.sh; sleep 10; done > "$PANEL_PIPE" & while :; do "$DIR"/iface.sh; sleep 10; done > "$PANEL_PIPE" & while :; do "$DIR"/battery.sh; sleep 30; done > "$PANEL_PIPE" & while :; do clock; sleep 5; done > "$PANEL_PIPE" & while read -r line ; do case $line in workspaces*) workspaces=${line#workspaces} ;; title*) title=${line#title} ;; volume*) volume=${line#volume} ;; brightness*) brightness=${line#brightness} ;; wifi*) wifi=${line#wifi} ;; iface*) iface=${line#iface} ;; battery*) battery=${line#battery} ;; clock*) clock=${line#clock} ;; esac printf "%s\n" "%{l}$workspaces%{c}$title%{r}$volume $brightness $wifi $iface $battery $clock " done < "$PANEL_PIPE" | bar | sh & # Tray and panel on top of the root window, fixes fullscreen programs if [ "$WM" = "bspwm" ];then ROOT="$(xdo id -N Bspwm -n root | sort | head -n 1)" PANEL_ID=$(xdo id -m -a "$PANEL_NAME") TRAY_ID=$(xdo id -a "stalonetray") xdo above -t "$ROOT" "$TRAY_ID" "$PANEL_ID" fi wait } case "$1" in start) "$1" ;; "") start ;; esac