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.
Workspace layout toggle (Super+L) reports success but reverts after reload when a leftover workspace-rule file loads after defaults
Reported by DanielBeaudryGIThub · filed Oct 8, 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.4-1, the workspace layout toggle (Super + L, menu item "Workspace Layout") reports success — notification says Workspace layout set to dwindle — but after any Hyprland config reload workspace 1 snaps back to a custom lua:omarchy-wsl-even layout. The persisted toggle state is written correctly; it just loses to a rule that loads later.
Side effect that surfaced it: that stale layout is a fixed 50/50 ratio layout that force-places windows on every recalculate, so window resizing (mouse drag, keyboard expand/shrink) silently did nothing on workspace 1 while every other workspace (dwindle) worked.
Root cause
Two things write workspace rules on load, and the stale one runs last:
default/hypr/workspace-layouts.luarestores~/.local/state/omarchy/workspace-layouts/<ws>.lua(the toggle's persistence) — early, during default config load.- A leftover loader line in the user's
~/.config/hypr/hyprland.luaruns after all defaults:
-- Added by the Omarchy Workspace Layout plugin: registers its Lua tiling layouts.
do local path = ... "/hypr/omarchy-workspace-layout.lua"; ... dofile(path) end endThat generated file (~/.config/hypr/omarchy-workspace-layout.lua, header: "Generated by the Omarchy Workspace Layout plugin. Do not edit.") ends with:
W.set_workspace("1", "lua:omarchy-wsl-even")
W.set_workspace("2", "dwindle")
...plus a companion ~/.config/omarchy/workspace-layout.json with "assignments": { "1": "even" }.
The plugin that generated these files is gone — not in omarchy plugin list, no generator anywhere on disk (files dated Sep 6), and there is no workspace-layout plugin or omarchy-wsl code anywhere in this repo (checked the tree at quattro) or in omarchy plugin catalog. Nothing cleans these leftovers up: the loader line keeps running, and every reload re-applies the stale rule over the toggle's saved state.
State observed
~/.local/state/omarchy/workspace-layouts/1.luasayslayout = "dwindle"(written by the toggle on Oct 7)hyprctl workspacesafter a reload: workspace 1tiledLayout: lua:omarchy-wsl-even- Both windows on ws1 pinned at exactly 1261/1261 (50/50) no matter what resize was dispatched; the same dispatch on a dwindle workspace changed geometry and stuck
Workaround applied locally
Removed the stale pin (W.set_workspace("1", ...) → "dwindle", and cleared the json assignment), then hyprctl reload — toggle now sticks. Backups kept.
Steps to reproduce
- Have a user file loaded after defaults add a workspace rule (here: the leftover
omarchy-workspace-layout.luaviahyprland.lua). - Focus workspace 1, press
Super + L→ notification "Workspace layout set to dwindle", layout switches immediately. hyprctl reloadhyprctl workspaces→ workspace 1 is back tolua:omarchy-wsl-even, while~/.local/state/omarchy/workspace-layouts/1.luastill says dwindle.
Expected
- Removing a plugin should remove the loader line it added to
hyprland.luaand its generated files (migration on update), or at least stop loading them. - The toggle should be authoritative or at least verify: after applying, check
hyprctl activeworkspace -j | .tiledLayoutand warn if it didn't stick instead of always reporting success.
System
- Omarchy 4.0.4-1
- Hyprland 0.56.2
- (Note:
omarchy debug --no-sudo --printdoesn't exist in this version — no debug command found viaomarchy commands --all.)
View raw text
**What happened**
On Omarchy 4.0.4-1, the workspace layout toggle (`Super + L`, menu item "Workspace Layout") reports success — notification says `Workspace layout set to dwindle` — but after any Hyprland config reload workspace 1 snaps back to a custom `lua:omarchy-wsl-even` layout. The persisted toggle state is written correctly; it just loses to a rule that loads later.
Side effect that surfaced it: that stale layout is a fixed 50/50 ratio layout that force-places windows on every recalculate, so window resizing (mouse drag, keyboard expand/shrink) silently did nothing on workspace 1 while every other workspace (dwindle) worked.
**Root cause**
Two things write workspace rules on load, and the stale one runs last:
1. `default/hypr/workspace-layouts.lua` restores `~/.local/state/omarchy/workspace-layouts/<ws>.lua` (the toggle's persistence) — early, during default config load.
2. A leftover loader line in the user's `~/.config/hypr/hyprland.lua` runs after all defaults:
```lua
-- Added by the Omarchy Workspace Layout plugin: registers its Lua tiling layouts.
do local path = ... "/hypr/omarchy-workspace-layout.lua"; ... dofile(path) end end
```
That generated file (`~/.config/hypr/omarchy-workspace-layout.lua`, header: "Generated by the Omarchy Workspace Layout plugin. Do not edit.") ends with:
```lua
W.set_workspace("1", "lua:omarchy-wsl-even")
W.set_workspace("2", "dwindle")
...
```
plus a companion `~/.config/omarchy/workspace-layout.json` with `"assignments": { "1": "even" }`.
The plugin that generated these files is gone — not in `omarchy plugin list`, no generator anywhere on disk (files dated Sep 6), and there is no workspace-layout plugin or `omarchy-wsl` code anywhere in this repo (checked the tree at `quattro`) or in `omarchy plugin catalog`. Nothing cleans these leftovers up: the loader line keeps running, and every reload re-applies the stale rule over the toggle's saved state.
**State observed**
- `~/.local/state/omarchy/workspace-layouts/1.lua` says `layout = "dwindle"` (written by the toggle on Oct 7)
- `hyprctl workspaces` after a reload: workspace 1 `tiledLayout: lua:omarchy-wsl-even`
- Both windows on ws1 pinned at exactly 1261/1261 (50/50) no matter what resize was dispatched; the same dispatch on a dwindle workspace changed geometry and stuck
**Workaround applied locally**
Removed the stale pin (`W.set_workspace("1", ...)` → `"dwindle"`, and cleared the json assignment), then `hyprctl reload` — toggle now sticks. Backups kept.
**Steps to reproduce**
1. Have a user file loaded after defaults add a workspace rule (here: the leftover `omarchy-workspace-layout.lua` via `hyprland.lua`).
2. Focus workspace 1, press `Super + L` → notification "Workspace layout set to dwindle", layout switches immediately.
3. `hyprctl reload`
4. `hyprctl workspaces` → workspace 1 is back to `lua:omarchy-wsl-even`, while `~/.local/state/omarchy/workspace-layouts/1.lua` still says dwindle.
**Expected**
- Removing a plugin should remove the loader line it added to `hyprland.lua` and its generated files (migration on update), or at least stop loading them.
- The toggle should be authoritative or at least verify: after applying, check `hyprctl activeworkspace -j | .tiledLayout` and warn if it didn't stick instead of always reporting success.
**System**
- Omarchy 4.0.4-1
- Hyprland 0.56.2
- (Note: `omarchy debug --no-sudo --print` doesn't exist in this version — no debug command found via `omarchy commands --all`.)
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 22:59 UTC