#!/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