Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A 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.

Inbox
ReportR-4887GitHub issuePublicFixed

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.

Received and recorded verbatim. Nothing has been checked yet.

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

omarchy-menu-keybindings hangs (100% CPU) when a user config iterates hl.get_loaded_plugins()revision 1 · captured 2026-10-04 12:10 UTC via poll

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
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.

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.