Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
Quickshell launch OSD and NextKey overlay can stick forever under load / interrupted launches
Reported by gjouret · filed Sep 15, 2026 · open at source
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- AreaOutside the audited area· Decided by agents · verified
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
What happened?
On Omarchy 4.0.3 (Hyprland + Quickshell), two full-screen overlay layers stayed mapped indefinitely and could not be dismissed with Escape/click:
- Launch OSD — banner like
Launching Voxtype Configure…(omarchy-osdlayer) - NextKey — Super-key shortcut overlay stuck visible (
next-keylayer, full monitor size)
Neither was a normal Hyprland client window. Clearing required omarchy-restart-shell.
This followed a high memory-pressure session (≈3.3 GB RAM machine thrashing) while Voxtype setup/service restarts were interrupted. The point is not that Voxtype failed — overlays owned by the shell should not remain stuck when a launch is interrupted or Super release is lost.
Expected
- Launch OSD auto-dismisses even if the launched app never appears / is cancelled / shell is under load.
- NextKey hides if Super is no longer held (or after a short failsafe timeout), and never leaves a permanent full-screen layer.
Actual
hyprctl layersshowed sticky overlays:namespace: omarchy-osd(fullscreen)namespace: next-key(fullscreen)- No normal windows for those UIs; Escape did nothing.
Relevant code (dev checkout)
Launch OSD (shell/services/AppLibrary.qml):
- Shows with `duration: 0`, so the OSD does not self-expire; only
closeLaunchFeedback()→omarchy-shell osd closeclears it. - There is a 15s
launchTimeout, but under severe load timers / IPC can fail, and ifosd closeis missed there is no secondary failsafe on the OSD service itself. - Comment in-file: "the OSD shows with duration 0, so only closeLaunchFeedback() takes it down".
NextKey (next-key plugin hypr/shortcut-hints.lua):
on_show/on_hidego throughomarchy-shell -q next-key …IPC.- Hide depends on Super release being delivered through
input.keyboard.key+ deferred modifier sampling. If release is dropped under load, state can remainVISIBLEwith no timeout to force-hide when modifiers are actually up.
Suggested directions
- Give launch OSD a hard max duration (even if
duration: 0means “until closed”), or make the OSD service itself expire sticky launch messages. - Treat failed/
non-zeroomarchy-shell osd closeas retryable; don’t leavelaunchOsdOpenand the layer out of sync. - NextKey: periodic failsafe — if overlay visible and Super not down, send
hide. - Optional: Escape / click-outside dismisses stuck shell overlays.
Environment
- Omarchy
4.0.3 - Hyprland + Quickshell shell from linked checkout
- NextKey plugin installed
- Low-RAM host (severe zram pressure when this reproduced)
Happy to add logs/hyprctl layers dumps if useful.
View raw text
### What happened? On Omarchy 4.0.3 (Hyprland + Quickshell), two full-screen overlay layers stayed mapped indefinitely and could not be dismissed with Escape/click: 1. **Launch OSD** — banner like `Launching Voxtype Configure…` (`omarchy-osd` layer) 2. **NextKey** — Super-key shortcut overlay stuck visible (`next-key` layer, full monitor size) Neither was a normal Hyprland client window. Clearing required `omarchy-restart-shell`. This followed a high memory-pressure session (≈3.3 GB RAM machine thrashing) while Voxtype setup/service restarts were interrupted. The point is not that Voxtype failed — overlays owned by the shell should not remain stuck when a launch is interrupted or Super release is lost. ### Expected - Launch OSD auto-dismisses even if the launched app never appears / is cancelled / shell is under load. - NextKey hides if Super is no longer held (or after a short failsafe timeout), and never leaves a permanent full-screen layer. ### Actual - `hyprctl layers` showed sticky overlays: - `namespace: omarchy-osd` (fullscreen) - `namespace: next-key` (fullscreen) - No normal windows for those UIs; Escape did nothing. ### Relevant code (dev checkout) **Launch OSD** (`shell/services/AppLibrary.qml`): - Shows with **`duration: 0`**, so the OSD does not self-expire; only `closeLaunchFeedback()` → `omarchy-shell osd close` clears it. - There is a 15s `launchTimeout`, but under severe load timers / IPC can fail, and if `osd close` is missed there is no secondary failsafe on the OSD service itself. - Comment in-file: *"the OSD shows with duration 0, so only closeLaunchFeedback() takes it down"*. **NextKey** (`next-key` plugin `hypr/shortcut-hints.lua`): - `on_show` / `on_hide` go through `omarchy-shell -q next-key …` IPC. - Hide depends on Super release being delivered through `input.keyboard.key` + deferred modifier sampling. If release is dropped under load, state can remain `VISIBLE` with no timeout to force-hide when modifiers are actually up. ### Suggested directions 1. Give launch OSD a hard max duration (even if `duration: 0` means “until closed”), or make the OSD service itself expire sticky launch messages. 2. Treat failed/`non-zero` `omarchy-shell osd close` as retryable; don’t leave `launchOsdOpen` and the layer out of sync. 3. NextKey: periodic failsafe — if overlay visible and Super not down, send `hide`. 4. Optional: Escape / click-outside dismisses stuck shell overlays. ### Environment - Omarchy `4.0.3` - Hyprland + Quickshell shell from linked checkout - NextKey plugin installed - Low-RAM host (severe zram pressure when this reproduced) Happy to add logs/`hyprctl layers` dumps if useful.
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
Not linked to any known issue, other report or change yet.
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
- Out of scopeDecided by agents · verified · 2026-10-09 13:37 UTC