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.
Quattro update preserves bindings.conf but silently stops loading custom keybindings
Reported by evo-social-world · filed Aug 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
System details
Reproduced on two independent Omarchy machines after the Quattro update:
- Desktop: Omarchy
4.0.0-1, Hyprland0.56.2, kernel7.1.7-arch1-1 - MSI laptop: Omarchy
4.0.0-1, Hyprland0.56.2, kernel7.1.8-arch1-3
What's wrong?
The Quattro update moves the active user Hyprland configuration from .conf files to Lua, but existing custom entries in ~/.config/hypr/bindings.conf are only preserved on disk. They are not migrated into ~/.config/hypr/bindings.lua, and the new hyprland.lua does not source the old bindings.conf.
This silently disables existing user hotkeys. There is no hyprctl configerrors output because the old file is simply no longer loaded.
This reproduced identically on both machines. Each had a working pre-update custom binding in bindings.conf:
binddr = SUPER, GRAVE, Toggle dictation, exec, voxtype record toggleAfter updating:
bindings.confstill contained the custom binding.bindings.luacontained only the new stock comments/examples.hyprland.lualoadedrequire("hypr.bindings")but did not sourcebindings.conf.hyprctl binds -jshowed no liveSUPER + GRAVEbinding.- Pressing the previously configured hotkey did nothing.
The workaround was to manually translate the binding into bindings.lua, reload Hyprland, and verify the new live entries:
hl.unbind("SUPER + code:49")
o.bind("SUPER + code:49", "Consume dictation toggle press", "/bin/true")
o.bind(
"SUPER + code:49",
"Toggle dictation on release",
"voxtype record toggle --auto-submit",
{ release = true }
)This is not specific to VoxType; any user customization left only in the former bindings.conf is affected.
Expected behavior
The update should not silently deactivate existing user keybindings. One of these would preserve the user contract:
- migrate custom
bindings.confentries into the Lua override when possible; - retain a compatibility source/include for the old user file; or
- detect non-default content in
bindings.confand show a clear post-update warning with the required migration path.
The preserved old file makes the configuration appear intact while its bindings are inactive, which makes this difficult to diagnose.
Steps to reproduce
- On a pre-Quattro installation, add a custom binding to
~/.config/hypr/bindings.confand verify it works. - Update to Omarchy
4.0.0-1/ Quattro. - Confirm the old
bindings.confremains and still contains the custom entry. - Inspect the new
bindings.luaandhyprland.lua. - Run
hyprctl binds -j; the custom binding is absent. - Press the custom shortcut; nothing happens.
Related issue search
I searched the Omarchy issue tracker for bindings.conf, bindings.lua, Quattro custom binding migration, and recent update-related keybinding failures. I did not find an existing report for this exact silent migration gap. #5879 and #5911 are related examples of missing Lua-era migrations, but concern loading default.hypr.helpers, not preservation of user bindings.
View raw text
### System details
Reproduced on two independent Omarchy machines after the Quattro update:
1. Desktop: Omarchy `4.0.0-1`, Hyprland `0.56.2`, kernel `7.1.7-arch1-1`
2. MSI laptop: Omarchy `4.0.0-1`, Hyprland `0.56.2`, kernel `7.1.8-arch1-3`
### What's wrong?
The Quattro update moves the active user Hyprland configuration from `.conf` files to Lua, but existing custom entries in `~/.config/hypr/bindings.conf` are only preserved on disk. They are not migrated into `~/.config/hypr/bindings.lua`, and the new `hyprland.lua` does not source the old `bindings.conf`.
This silently disables existing user hotkeys. There is no `hyprctl configerrors` output because the old file is simply no longer loaded.
This reproduced identically on both machines. Each had a working pre-update custom binding in `bindings.conf`:
```ini
binddr = SUPER, GRAVE, Toggle dictation, exec, voxtype record toggle
```
After updating:
- `bindings.conf` still contained the custom binding.
- `bindings.lua` contained only the new stock comments/examples.
- `hyprland.lua` loaded `require("hypr.bindings")` but did not source `bindings.conf`.
- `hyprctl binds -j` showed no live `SUPER + GRAVE` binding.
- Pressing the previously configured hotkey did nothing.
The workaround was to manually translate the binding into `bindings.lua`, reload Hyprland, and verify the new live entries:
```lua
hl.unbind("SUPER + code:49")
o.bind("SUPER + code:49", "Consume dictation toggle press", "/bin/true")
o.bind(
"SUPER + code:49",
"Toggle dictation on release",
"voxtype record toggle --auto-submit",
{ release = true }
)
```
This is not specific to VoxType; any user customization left only in the former `bindings.conf` is affected.
### Expected behavior
The update should not silently deactivate existing user keybindings. One of these would preserve the user contract:
- migrate custom `bindings.conf` entries into the Lua override when possible;
- retain a compatibility source/include for the old user file; or
- detect non-default content in `bindings.conf` and show a clear post-update warning with the required migration path.
The preserved old file makes the configuration appear intact while its bindings are inactive, which makes this difficult to diagnose.
### Steps to reproduce
1. On a pre-Quattro installation, add a custom binding to `~/.config/hypr/bindings.conf` and verify it works.
2. Update to Omarchy `4.0.0-1` / Quattro.
3. Confirm the old `bindings.conf` remains and still contains the custom entry.
4. Inspect the new `bindings.lua` and `hyprland.lua`.
5. Run `hyprctl binds -j`; the custom binding is absent.
6. Press the custom shortcut; nothing happens.
### Related issue search
I searched the Omarchy issue tracker for `bindings.conf`, `bindings.lua`, Quattro custom binding migration, and recent update-related keybinding failures. I did not find an existing report for this exact silent migration gap. #5879 and #5911 are related examples of missing Lua-era migrations, but concern loading `default.hypr.helpers`, not preservation of user bindings.
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 04:07 UTC