Files
dotfiles/dot_local/bin/executable_omarchy-toggle-scratch
T

46 lines
1.4 KiB
Bash
Executable File

#!/bin/bash
# omarchy:summary=Toggle the scratchpad, starting the kitty/herdr scratch terminal when it holds no windows.
set -uo pipefail
NAME="scratchpad"
WORKSPACE="special:$NAME"
CLASS="kitty-herdr"
LAUNCH="kitty --class=$CLASS --config $HOME/.config/kitty/herdr.conf"
# Windows living on the scratchpad, whether it is shown or hidden.
scratch_windows() {
hyprctl clients -j | jq --arg ws "$WORKSPACE" '[.[] | select(.workspace.name == $ws)] | length'
}
# True when some monitor currently displays the scratchpad.
scratch_visible() {
hyprctl monitors -j | jq -e --arg ws "$WORKSPACE" 'any(.[]; .specialWorkspace.name == $ws)' >/dev/null
}
# Hyprland's lua config takes lua expressions on `hyprctl dispatch`; the
# classic dispatcher is the pre-lua fallback (same shape as omarchy-cycle).
toggle() {
hyprctl dispatch "hl.dsp.workspace.toggle_special(\"$NAME\")" >/dev/null 2>&1 ||
hyprctl dispatch togglespecialworkspace "$NAME" >/dev/null
}
if (($(scratch_windows) > 0)); then
toggle
exit 0
fi
# Empty scratchpad: there is nothing to toggle into view, so start the herdr
# terminal instead. hypr/hyprland.lua pins kitty-herdr to the scratchpad, so
# only the reveal is left here — and deciding it after the window lands keeps
# this correct whether or not the rule already showed the workspace.
setsid uwsm-app -- $LAUNCH >/dev/null 2>&1 &
for _ in {1..40}; do
sleep 0.1
(($(scratch_windows) > 0)) && break
done
scratch_visible || toggle