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.
omarchy-menu-keybindings hangs (100% CPU) when a user config iterates hl.get_loaded_plugins()
Reported by evariste1963 · filed Sep 4, 2026Closed upstream on 2026-09-20 by bjarneo via an automated message, as a duplicate of #7025 (R-1816). GitHub close reason: completed.
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?
- Not yet mapped to any requirement or component.
- 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?
- Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.
Original report
Environment
- Omarchy 4.0.2-1
- Hyprland 0.56.2 (commit efb50993780)
- CPU: AMD Ryzen 5 5600H, Arch (kernel 7.1.9-arch1-2)
What happened
Pressing SUPER + K (bound to omarchy menu keybindings) opens nothing while a lua child of omarchy-menu-keybindings pins a CPU core at ~100% (observed 99.9%). omarchy menu keybindings --print never returns.
Triggered by any user config that iterates a list accessor on hl, e.g. the generated border-fx.lua from the wmfeht.border-fx plugin:
for _, p in ipairs(hl.get_loaded_plugins()) do
if p.name == "hypr-shiny-border" then return true end
endExpected
The keybindings menu opens and the scan terminates. Unstubbed hl accessors should read as empty, not loop forever.
Root cause
The Lua bind scanner parses ~/.config/hypr/hyprland.lua under a stubbed hl. Unknown accessors fall back to a noop object whose __index returns itself for every key, including numeric indices — so ipairs() over a stubbed accessor never sees nil and spins.
Steps to reproduce
- Add a
~/.config/hypr/spin.luawith theipairs(hl.get_loaded_plugins())loop above (loaded viapcall(require, "hypr.spin")). - Run
omarchy menu keybindings --print(or press SUPER+K). - Watch the
luachild peg a core; the command never returns.
Fix
PR #10212 makes the noop metatable return nil for numeric keys so sequences terminate, with a regression test. Attachments (via drag-and-drop): reproduction capture noting lua at 100% CPU and timeout exit 124, plus environment details.
View raw text
## Environment - Omarchy 4.0.2-1 - Hyprland 0.56.2 (commit efb50993780) - CPU: AMD Ryzen 5 5600H, Arch (kernel 7.1.9-arch1-2) ## What happened Pressing `SUPER + K` (bound to `omarchy menu keybindings`) opens nothing while a `lua` child of `omarchy-menu-keybindings` pins a CPU core at ~100% (observed 99.9%). `omarchy menu keybindings --print` never returns. Triggered by any user config that iterates a list accessor on `hl`, e.g. the generated `border-fx.lua` from the `wmfeht.border-fx` plugin: ```lua for _, p in ipairs(hl.get_loaded_plugins()) do if p.name == "hypr-shiny-border" then return true end end ``` ## Expected The keybindings menu opens and the scan terminates. Unstubbed `hl` accessors should read as empty, not loop forever. ## Root cause The Lua bind scanner parses `~/.config/hypr/hyprland.lua` under a stubbed `hl`. Unknown accessors fall back to a `noop` object whose `__index` returns itself for **every** key, including numeric indices — so `ipairs()` over a stubbed accessor never sees `nil` and spins. ## Steps to reproduce 1. Add a `~/.config/hypr/spin.lua` with the `ipairs(hl.get_loaded_plugins())` loop above (loaded via `pcall(require, "hypr.spin")`). 2. Run `omarchy menu keybindings --print` (or press SUPER+K). 3. Watch the `lua` child peg a core; the command never returns. ## Fix PR #10212 makes the `noop` metatable return `nil` for numeric keys so sequences terminate, with a regression test. Attachments (via drag-and-drop): reproduction capture noting `lua` at 100% CPU and timeout exit 124, plus environment details.
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
- Fixed bypr/12712· confirmed
- Fixed bypr/7564· confirmed
- Fixed bypr/11733· confirmed
- Fixed bypr/12155· confirmed
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.
No decision has been recorded yet.