112 lines
1.6 KiB
Bash
Executable File
112 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
CONFIG="$HOME/.config/waybar/config-dock.jsonc"
|
|
STYLE="$HOME/.config/waybar/style-dock.css"
|
|
PIDFILE="/tmp/waybar-dock.pid"
|
|
|
|
is_running() {
|
|
if [[ -f "$PIDFILE" ]]; then
|
|
local pid
|
|
pid="$(cat "$PIDFILE" 2>/dev/null || true)"
|
|
if [[ -n "${pid:-}" ]] && kill -0 "$pid" 2>/dev/null; then
|
|
return 0
|
|
fi
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
cleanup_pidfile() {
|
|
if [[ -f "$PIDFILE" ]]; then
|
|
local pid
|
|
pid="$(cat "$PIDFILE" 2>/dev/null || true)"
|
|
if [[ -z "${pid:-}" ]] || ! kill -0 "$pid" 2>/dev/null; then
|
|
rm -f "$PIDFILE"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
show() {
|
|
cleanup_pidfile
|
|
|
|
if is_running; then
|
|
exit 0
|
|
fi
|
|
|
|
waybar -c "$CONFIG" -s "$STYLE" >/dev/null 2>&1 &
|
|
local pid=$!
|
|
|
|
echo "$pid" >"$PIDFILE"
|
|
|
|
# kurz prüfen, ob der Prozess wirklich lebt
|
|
sleep 0.1
|
|
if ! kill -0 "$pid" 2>/dev/null; then
|
|
rm -f "$PIDFILE"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
hide() {
|
|
cleanup_pidfile
|
|
|
|
if ! is_running; then
|
|
exit 0
|
|
fi
|
|
|
|
local pid
|
|
pid="$(cat "$PIDFILE")"
|
|
|
|
kill "$pid" 2>/dev/null || true
|
|
|
|
# kurz warten, dann ggf. härter beenden
|
|
for _ in {1..10}; do
|
|
if ! kill -0 "$pid" 2>/dev/null; then
|
|
rm -f "$PIDFILE"
|
|
exit 0
|
|
fi
|
|
sleep 0.05
|
|
done
|
|
|
|
kill -9 "$pid" 2>/dev/null || true
|
|
rm -f "$PIDFILE"
|
|
}
|
|
|
|
toggle() {
|
|
cleanup_pidfile
|
|
|
|
if is_running; then
|
|
hide
|
|
else
|
|
show
|
|
fi
|
|
}
|
|
|
|
status() {
|
|
cleanup_pidfile
|
|
if is_running; then
|
|
echo "visible"
|
|
else
|
|
echo "hidden"
|
|
fi
|
|
}
|
|
|
|
case "${1:-toggle}" in
|
|
show)
|
|
show
|
|
;;
|
|
hide)
|
|
hide
|
|
;;
|
|
toggle)
|
|
toggle
|
|
;;
|
|
status)
|
|
status
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {show|hide|toggle|status}"
|
|
exit 1
|
|
;;
|
|
esac
|