From 270655afe0f549e4ebf4893134f90a401032a5cd Mon Sep 17 00:00:00 2001 From: meliurwen Date: Sun, 6 Mar 2022 15:06:39 +0100 Subject: [PATCH] More stable and deterministic polybar launch script --- polybar/.config/polybar/launch.sh | 49 +++++++++++++++++++------------ 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/polybar/.config/polybar/launch.sh b/polybar/.config/polybar/launch.sh index 1b6ff2d..af647ec 100755 --- a/polybar/.config/polybar/launch.sh +++ b/polybar/.config/polybar/launch.sh @@ -1,33 +1,46 @@ #!/bin/sh -# Terminate already running bar instances -killall -q polybar - -# Wait until the processes have been shut down -while pgrep -u "$(id -u)" -x polybar >/dev/null; do sleep 1; done - -# Launch polybar -#polybar main -c $HOME/.config/polybar/config & - -# Set Monitors -#xrandr --output HDMI1 --auto --left-of LVDS1 - -POLY_IFACES="$(ip link show | awk '/^[0-9]+:/ {sub(/:/,"",$2); print $2}')" +set -e + +# If at least one polybar process is running send a SIGTERM to all: +# - Give a grace period of N cycles to all processes to terminate gracefully +# - When the grace period is expired, send a SIGKILL to all +cycle=0 +while pgrep -u "$(id -u)" -x polybar >/dev/null +do + if [ $cycle -eq 0 ]; then + # Terminate already running bar instances + pkill -U "$(id -u)" -15 polybar + elif [ $cycle -eq 4 ]; then + # At the 5th cylcle SIGKILL + pkill -U "$(id -u)" -9 polybar + fi + sleep 1 + cycle=$((cycle + 1)) +done +unset cycle -for NET_IFACE in $POLY_IFACES ; do +NET_IFACES="$(ip link show | awk '/^[0-9]+:/ {sub(/:/,"",$2); print $2}')" +for NET_IFACE in $NET_IFACES ; do case $NET_IFACE in wlp* ) POLY_WLP=$NET_IFACE ;; enp* ) POLY_ENP=$NET_IFACE ;; esac done +unset NET_IFACES -HWMON_BASEDIR="$(find "/sys/devices/platform/coretemp.0/hwmon/" -maxdepth 1 -type d -name 'hwmon*' | tail -n +2 | head -1)" -POLY_HWMON="$HWMON_BASEDIR"/temp1_input +HWMON_MODULE="/sys/devices/platform/coretemp.0/hwmon/" +if [ -d "$HWMON_MODULE" ]; then + HWMON_BASEDIR="$(find "$HWMON_MODULE" -maxdepth 1 -type d -name 'hwmon*' | tail -n +2 | head -1)" + POLY_HWMON="$HWMON_BASEDIR"/temp1_input + unset HWMON_BASEDIR +fi +unset HWMON_MODULE if type "xrandr"; then for m in $(xrandr --query | grep " connected" | cut -d" " -f1); do POLY_WLP=$POLY_WLP POLY_ENP=$POLY_ENP POLY_HWMON=$POLY_HWMON MONITOR=$m polybar main -c "$HOME/.config/polybar/config" & done -else - POLY_WLP=$POLY_WLP POLY_ENP=$POLY_ENP POLY_HWMON=$POLY_HWMON MONITOR=$m polybar main -c "$HOME/.config/polybar/config" & fi + +unset POLY_WLP POLY_ENP POLY_HWMON