Named drop-down scratchpads for Omarchy v4 ("Quattro") on Hyprland: one bar chip per slot — click to summon, click to dismiss, and if the app is not running it launches straight into place.
Each slot is a named Hyprland special workspace (special:pad-<name>), so
summon/dismiss uses the compositor's native special-workspace animation and
Super+S-style semantics. Windows land floated, centered, and sized via a
named runtime window rule — no Hyprland config file is ever touched, and
the rules re-register automatically after every config reload.
- Chips — one per slot; lit while its scratchpad is visible, dimmed while nothing is running in it. Tooltips show the state.
- Spawn-if-missing — clicking a dead slot launches its command
(terminal slots via
xdg-terminal-execwith a per-slot app id, GUI slots via their own window class) and reveals the workspace as it appears. - Event-driven — visibility and liveness ride the Hyprland socket2 event stream; the widget never polls.
omarchy plugin add https://github.com/devmobasa/omarchy-scratchpad-deck --enableIf the widget does not appear, add { "id": "community.scratchpad-deck" }
to a bar section in ~/.config/omarchy/shell.json.
Defaults (no configuration needed): a plain terminal, btop, and a second
terminal for notes. Configure your own inline on the widget's entry in
~/.config/omarchy/shell.json:
{
"id": "community.scratchpad-deck",
"settings": {
"slots": [
{ "name": "term", "icon": "", "command": "", "kind": "tui" },
{ "name": "notes", "icon": "", "command": "nvim ~/notes.md", "kind": "tui" },
{ "name": "music", "icon": "", "command": "spotify", "kind": "gui", "class": "Spotify" },
{ "name": "mixer", "command": "wiremix", "kind": "tui", "width": 0.5, "height": 0.5 }
]
}
}| Field | Default | Meaning |
|---|---|---|
name |
required | Slot id, [a-z0-9-], unique; also the workspace name special:pad-<name> |
command |
"" |
What to run when the slot is dead; empty tui command = a plain terminal |
kind |
"tui" |
tui runs in a terminal with a per-slot app id; gui launches the command directly |
class |
pad app id | For gui slots: the window class to capture into the slot |
icon |
| Chip glyph |
width / height |
0.62 / 0.6 |
Window size as a fraction of the monitor (0.2–0.95) |
Up to six slots; invalid entries are dropped.
Every slot is scriptable, so you can bind chips to keys in
~/.config/hypr/bindings.lua:
o.bind("SUPER + T", "Terminal scratchpad", "omarchy-shell community.scratchpad-deck toggle term")omarchy-shell community.scratchpad-deck status reports every slot as JSON.
- Only one special workspace is visible per monitor — summoning one slot hides another, which is the expected deck behavior.
- Hyprland closes a special workspace when its last window exits
(
misc:close_special_on_empty), so a slot whose app quits simply shows as dead again. - Omarchy's default
Super+Sscratchpad (special:scratchpad) is separate and unaffected.
./test/all # node model + contract + static QML checks, manifest, qmllint