devlinkspad for Omarchy
Fullscreen command palette for Omarchy Quattro. Type stripe webhook, apple team id, or vercel tokens and Enter opens that dashboard in your browser.
Same catalog as devlinkspad.com. Search is local. Checkout never runs inside Omarchy.
Plugin id: 920four.devlinkspad (overlay). Modeled on omarchy.emojis / omarchy.clipboard.
Install
omarchy plugin add https://github.com/920four4/omarchy-devlinkspad.git --enable
Then:
omarchy-shell shell toggle 920four.devlinkspad '{}'
Escape closes it. Type to filter, arrows to move, Enter to open.
Keybind
Super + K is Omarchy’s keybinding cheatsheet. Bind Super + Shift + L:
-- ~/.config/hypr/bindings.lua
o.bind("SUPER + SHIFT + L", "devlinkspad",
"omarchy-shell shell toggle 920four.devlinkspad '{}'")
Reload Hyprland (omarchy restart hyprland or log out/in) if the bind does not take immediately.
Prefill a query:
omarchy-shell shell summon 920four.devlinkspad '{"q":"apple team id"}'
Usage
- Type to search the bundled catalog
↑↓/PageUpPageDown/HomeEndEnteropens the URL withxdg-openEscapeclears the query, then closes- Click the dimmed scrim to dismiss
- 20 free jumps. Click Sign in for unlimited to open devlinkspad.com in your browser. If you already have Pro, sign in and this computer unlocks. If not, Pro is $5/year — payment is never collected inside the plugin.
Remove
omarchy plugin remove 920four.devlinkspad
That disables the plugin and deletes the git checkout. It does not edit Hyprland binds or touch other Omarchy config. Optional leftover: ~/.local/state/omarchy/devlinkspad.json (device pairing + free-jump count). The plugin walks $HOME/.local/state/omarchy refusing a symlink at any step, pins that directory with a file descriptor, and reads/writes the state file only through that fd (O_NOFOLLOW|O_NONBLOCK on open; exclusive 0600 temp + renameat on write). The path is not re-resolved after the pin. Delete that file if you want a clean slate.
If you added the Super+Shift+L bind yourself, remove it from ~/.config/hypr/bindings.lua.
External dependencies
No sudo, no install hooks, no extra packages.
| Dependency | Why |
|---|---|
xdg-open |
Open dashboard URLs and the sign-in page in your default browser |
curl |
Optional Pro license check against https://devlinkspad.com. The bearer token is passed through curl’s stdin config (-K -), not process argv. Responses are capped at 8 KiB. |
python3 |
Pin ~/.local/state/omarchy and data/ with a directory fd; read/write through that fd (O_NOFOLLOW, O_NONBLOCK, mode 0600 from the first create) |
openssl |
Random device id for pairing (falls back if missing) |
The catalog ships in data/services.json. Network is used only for Pro pairing / license refresh, not for search. License HTTP bodies are capped at 8 KiB. The catalog and persisted state file are both read through a pinned directory fd (O_NOFOLLOW|O_NONBLOCK) with a byte ceiling, so a replaced file or FIFO cannot grow or stall the keep-loaded overlay. xdg-open only receives https:// URLs.
Files
| File | Role |
|---|---|
manifest.json |
Quattro overlay contract (keepLoaded) |
Overlay.qml |
Fullscreen palette |
Search.js |
Local catalog scoring |
License.js |
Free-jump counter + Pro pairing state |
save-state.py |
Walk + pin dirfds; owner-only no-follow I/O for the license state file and catalog |
data/services.json |
Bundled deep links |
Not affiliated with Apple, Stripe, Vercel, or Expo. Dashboard URLs belong to those products.