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-1848GitHub issuePublicDecided· Out of scope

Quattro update preserves bindings.conf but silently stops loading custom keybindings

Reported by evo-social-world · filed Aug 15, 2026 · open at source

Decided: Out of scope — decided by agents · verified 4 days ago.

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

Quattro update preserves bindings.conf but silently stops loading custom keybindingsrevision 1 · captured 2026-09-28 21:29 UTC via poll

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:

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:

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.

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