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

Quattro upgrade rewrites kb_options, replacing grp:alt_shift_toggle with grp:alts_toggle and breaking AltGr on single-layout keyboards

Reported by oslobowl · filed Aug 30, 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 upgrade rewrites kb_options, replacing grp:alt_shift_toggle with grp:alts_toggle and breaking AltGr on single-layout keyboardsrevision 1 · captured 2026-09-28 21:24 UTC via poll

What happened

Upgrading to Quattro generated ~/.config/hypr/input.lua from my pre-Quattro ~/.config/hypr/input.conf. kb_layout was carried over correctly, but kb_options was not — my group-toggle option was replaced with grp:alts_toggle, which I have never had in any config.

Before (~/.config/hypr/input.conf, mtime 2026-06-02, my own file):

kb_layout = no
kb_options = compose:caps,grp:alt_shift_toggle

After (~/.config/hypr/input.lua, mtime 2026-08-30 08:18, created by the upgrade):

kb_layout = "no",
kb_options = "compose:caps,shift:both_capslock_cancel,grp:alts_toggle",

Every .lua file in ~/.config/hypr/ has an mtime of 2026-08-30 08:18:00, i.e. they were all written by the upgrade run; the .conf files retain their original dates.

Why this breaks the keyboard

grp:alts_toggle binds layout-group switching to Left Alt + Right Alt, which reassigns Right Alt away from ISO_Level3_Shift. On a single-layout non-US Latin keyboard there is no second group to switch to, so the only effect is that AltGr stops working entirely — every level-3 symbol becomes unreachable.

On a Norwegian layout that means ~, @, $, \, {, }, [, ] and | can no longer be typed. I noticed it because AltGr + ¨ no longer produced a tilde.

Reproducible with xkbcli alone, no Omarchy needed:

$ xkbcli compile-keymap --layout no --options "compose:caps,shift:both_capslock_cancel,grp:alts_toggle" | grep -A3 'key <RALT>'
	key <RALT>               {
		type= "PC_ALT_LEVEL2",
		symbols[1]= [           Alt_R,  ISO_Next_Group ]
	};

$ xkbcli compile-keymap --layout no --options "compose:caps,shift:both_capslock_cancel" | grep -A3 'key <RALT>'
	key <RALT>               {	[ ISO_Level3_Shift ] };

$ xkbcli compile-keymap --layout no --options "compose:caps,grp:alt_shift_toggle" | grep -A3 'key <RALT>'
	key <RALT>               {	[ ISO_Level3_Shift,  ISO_Next_Group ]	};

dead_tilde sits at level 3 of <AD12> in the no layout, and level 3 requires ISO_Level3_Shift. My original grp:alt_shift_toggle used Alt+Shift for group switching and left Right Alt's level-3 role intact, which is why this worked before the upgrade and not after.

Steps to reproduce

  1. On pre-Quattro Omarchy, set in ~/.config/hypr/input.conf:

kb_layout = no and kb_options = compose:caps,grp:alt_shift_toggle
2. Upgrade to Quattro.
3. Inspect the generated ~/.config/hypr/input.lua — kb_options now ends in grp:alts_toggle.
4. Press AltGr + ¨, then space. No tilde is produced. Same for every other AltGr symbol.

Expected

The upgrade should carry kb_options across as faithfully as it carries kb_layout — or, if it must rewrite the option string, it should not introduce a group-toggle option for a single-layout configuration. grp:alts_toggle is only meaningful with two or more layouts, and it silently costs the user AltGr when there is only one.

Note that grp:alts_toggle appears in the shipped template at config/hypr/input.lua:10, where it is paired with the multi-layout example kb_layout = "us,dk,eu". The generated file kept that option string while substituting a single-layout kb_layout, which is the combination that breaks.

Omarchy's own default logic in default/hypr/input.lua only appends grp:alts_toggle when it has prepended us, for a non-Latin layout — so it correctly avoids this for a layout like no. The upgrade path does not apply the same restraint.

Workaround

Remove the group-toggle option from ~/.config/hypr/input.lua and hyprctl reload:

kb_options = "compose:caps,shift:both_capslock_cancel",

Restarting omarchy-fcitx5.service afterwards is also needed, since the already-registered hl-virtual-keyboard-fcitx5 device keeps the stale options until fcitx5 re-registers.

Possibly related

  • #6878 — Quattro upgrade drops non-US kb_layout when vconsole.conf has only KEYMAP. Different symptom (my kb_layout migrated fine, my kb_options did not), but the same "upgrade doesn't faithfully carry legacy input config" area. My /etc/vconsole.conf did also lack XKBLAYOUT.
  • #7255 — Quattro migration doesn't update kb_options, trapping Caps Lock ON. The inverse of this report: there kb_options was left untouched, here it was rewritten and lost a user value.

System

  • Omarchy 4.0.1-1
  • Hyprland 0.56.2-1, xkeyboard-config 2.48-1, libxkbcommon 1.13.2-1
  • Kernel 7.1.9-arch1-2, Dell Latitude 7300, Intel Core i7-8665U
  • Norwegian layout, single layout, no multi-layout setup
View raw text
### What happened

Upgrading to Quattro generated `~/.config/hypr/input.lua` from my pre-Quattro `~/.config/hypr/input.conf`. `kb_layout` was carried over correctly, but `kb_options` was **not** — my group-toggle option was replaced with `grp:alts_toggle`, which I have never had in any config.

Before (`~/.config/hypr/input.conf`, mtime 2026-06-02, my own file):

```
kb_layout = no
kb_options = compose:caps,grp:alt_shift_toggle
```

After (`~/.config/hypr/input.lua`, mtime 2026-08-30 08:18, created by the upgrade):

```lua
kb_layout = "no",
kb_options = "compose:caps,shift:both_capslock_cancel,grp:alts_toggle",
```

Every `.lua` file in `~/.config/hypr/` has an mtime of 2026-08-30 08:18:00, i.e. they were all written by the upgrade run; the `.conf` files retain their original dates.

### Why this breaks the keyboard

`grp:alts_toggle` binds layout-group switching to Left Alt + Right Alt, which reassigns Right Alt away from `ISO_Level3_Shift`. On a single-layout non-US Latin keyboard there is no second group to switch to, so the only effect is that **AltGr stops working entirely** — every level-3 symbol becomes unreachable.

On a Norwegian layout that means `~`, `@`, `$`, `\`, `{`, `}`, `[`, `]` and `|` can no longer be typed. I noticed it because AltGr + `¨` no longer produced a tilde.

Reproducible with `xkbcli` alone, no Omarchy needed:

```
$ xkbcli compile-keymap --layout no --options "compose:caps,shift:both_capslock_cancel,grp:alts_toggle" | grep -A3 'key <RALT>'
	key <RALT>               {
		type= "PC_ALT_LEVEL2",
		symbols[1]= [           Alt_R,  ISO_Next_Group ]
	};

$ xkbcli compile-keymap --layout no --options "compose:caps,shift:both_capslock_cancel" | grep -A3 'key <RALT>'
	key <RALT>               {	[ ISO_Level3_Shift ] };

$ xkbcli compile-keymap --layout no --options "compose:caps,grp:alt_shift_toggle" | grep -A3 'key <RALT>'
	key <RALT>               {	[ ISO_Level3_Shift,  ISO_Next_Group ]	};
```

`dead_tilde` sits at level 3 of `<AD12>` in the `no` layout, and level 3 requires `ISO_Level3_Shift`. My original `grp:alt_shift_toggle` used Alt+Shift for group switching and left Right Alt's level-3 role intact, which is why this worked before the upgrade and not after.

### Steps to reproduce

1. On pre-Quattro Omarchy, set in `~/.config/hypr/input.conf`:
   `kb_layout = no` and `kb_options = compose:caps,grp:alt_shift_toggle`
2. Upgrade to Quattro.
3. Inspect the generated `~/.config/hypr/input.lua` — `kb_options` now ends in `grp:alts_toggle`.
4. Press AltGr + `¨`, then space. No tilde is produced. Same for every other AltGr symbol.

### Expected

The upgrade should carry `kb_options` across as faithfully as it carries `kb_layout` — or, if it must rewrite the option string, it should not introduce a group-toggle option for a single-layout configuration. `grp:alts_toggle` is only meaningful with two or more layouts, and it silently costs the user AltGr when there is only one.

Note that `grp:alts_toggle` appears in the shipped template at `config/hypr/input.lua:10`, where it is paired with the multi-layout example `kb_layout = "us,dk,eu"`. The generated file kept that option string while substituting a single-layout `kb_layout`, which is the combination that breaks.

Omarchy's own default logic in `default/hypr/input.lua` only appends `grp:alts_toggle` when it has prepended `us,` for a non-Latin layout — so it correctly avoids this for a layout like `no`. The upgrade path does not apply the same restraint.

### Workaround

Remove the group-toggle option from `~/.config/hypr/input.lua` and `hyprctl reload`:

```lua
kb_options = "compose:caps,shift:both_capslock_cancel",
```

Restarting `omarchy-fcitx5.service` afterwards is also needed, since the already-registered `hl-virtual-keyboard-fcitx5` device keeps the stale options until fcitx5 re-registers.

### Possibly related

- #6878 — Quattro upgrade drops non-US `kb_layout` when `vconsole.conf` has only `KEYMAP`. Different symptom (my `kb_layout` migrated fine, my `kb_options` did not), but the same "upgrade doesn't faithfully carry legacy input config" area. My `/etc/vconsole.conf` did also lack `XKBLAYOUT`.
- #7255 — Quattro migration doesn't update `kb_options`, trapping Caps Lock ON. The inverse of this report: there `kb_options` was left untouched, here it was rewritten and lost a user value.

### System

- Omarchy 4.0.1-1
- Hyprland 0.56.2-1, xkeyboard-config 2.48-1, libxkbcommon 1.13.2-1
- Kernel 7.1.9-arch1-2, Dell Latitude 7300, Intel Core i7-8665U
- Norwegian layout, single layout, no multi-layout setup

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 10:06 UTC