summaryrefslogtreecommitdiff
path: root/dotfiles/hyprland/.local/bin/toggle-scratchpad
blob: b3da6b46ff346a9c363e54f4f0cd6568548e335f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/sh
# Toggle a special workspace from waybar click
# Tracks state to handle focus-loss auto-close issue
# Usage: toggle-scratchpad <name>

NAME="$1"
if [ -z "$NAME" ]; then
    echo "Usage: toggle-scratchpad <name>"
    exit 1
fi

# Auto-detect current Hyprland socket if env var is stale
if ! hyprctl version >/dev/null 2>&1; then
    # Find the most recent Hyprland instance with a socket
    for dir in /run/user/"$(id -u)"/hypr/*/; do
        if [ -S "${dir}.socket.sock" ]; then
            export HYPRLAND_INSTANCE_SIGNATURE="$(basename "$dir")"
            break
        fi
    done
fi

STATEFILE="/tmp/scratchpad-$NAME-open"
NOW=$(date +%s)

# If state file exists and recent, scratchpad was open and just closed by focus loss
# Don't reopen it - user intended to close
if [ -f "$STATEFILE" ]; then
    LAST=$(cat "$STATEFILE")
    AGE=$((NOW - LAST))
    rm -f "$STATEFILE"
    if [ "$AGE" -lt 2 ]; then
        # Was just open, user clicked to close - don't reopen
        exit 0
    fi
fi

# Opening the scratchpad - mark timestamp
echo "$NOW" > "$STATEFILE"
hyprctl dispatch togglespecialworkspace "$NAME"