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.
omarchy-menu-keybindings: code: binds always displayed with US symbol names (xkbcli compile-keymap ignores the active layout)
Reported by danicatalan00 · filed Aug 29, 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?
- 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. So far: in the audited area (menu) — decided by agents · verified; matches no known issue — decided by agents · verified. The outcome (valid, duplicate, not a bug, …) is not decided yet. See the decision.
Original report
System details
- Omarchy Quattro 4.0.1-1
- Hyprland 0.56.2
- libxkbcommon 1.13.2-1
- Intel Core i5-1035G1 / Intel Iris Plus Graphics G1 (Ice Lake)
- Keyboard layout:
es(Spanish), reported by Hyprland asactive keymap: Spanish
What's wrong?
The SUPER K keybindings menu renders every code: binding using **US symbol
names**, regardless of the layout the user selected during installation. On a
Spanish keyboard the menu advertises shortcuts that cannot be typed.
The resize bindings in default/hypr/bindings/tiling.lua are bound by keycode:
o.bind("SUPER + code:20", "Expand window left", ...)
o.bind("SUPER + code:21", "Shrink window left", ...)omarchy menu keybindings --print displays them as:
SUPER + MINUS → Expand window left
SUPER + EQUAL → Shrink window left
SUPER ALT + MINUS → Expand window left a little
SUPER ALT + EQUAL → Shrink window left a littleBut code:20/code:21 are <AE11>/<AE12>, and on the es layout those
positions are not -/=:
| keycode | XKB name | us | es |
|---|---|---|---|
code:20 | <AE11> | minus | apostrophe (') |
code:21 | <AE12> | equal | exclamdown (¡) |
So the working shortcut is SUPER + ', while the menu says SUPER + MINUS.
Pressing the key labelled - does nothing. This affects every code: binding
in the fallback table (10–21, 59, 60, 61), so digits happen to look
correct while the punctuation keys are wrong on most non-US layouts.
This is a discoverability bug rather than a functional one: the binds fire
correctly on the right physical key. The menu is the only place that tells a
user which key that is, and it names the wrong one.
Steps to reproduce
- Install Omarchy selecting a non-US keyboard layout (e.g. Spanish).
- Run
omarchy menu keybindings --print(or pressSUPER K). - Observe
SUPER + MINUS → Expand window left. - Press
SUPER+-. Nothing happens. - Press
SUPER+'(the key at<AE11>). The window resizes.
Expected
The menu should name the key as it exists on the active layout, e.g.SUPER + APOSTROPHE on es.
Root cause
bin/omarchy-menu-keybindings, parse_keycodes() (line ~25) resolves keycodes
with:
keymap_cmd = "xkbcli compile-keymap </dev/null"Invoked with no arguments, xkbcli compile-keymap compiles the default
keymap (US) rather than the compositor's active one:
$ xkbcli compile-keymap </dev/null | grep -m1 -A1 'key <AE11>'
key <AE11> { [ minus, underscore ] };
key <AE12> { [ equal, plus ] };The resolver therefore always agrees with the hardcoded US fallback on line 18
(20=MINUS 21=EQUAL ...), and the fallback never visibly "fails" — it is simply
always wrong for non-US users.
Passing the real layout produces the correct symbols:
$ xkbcli compile-keymap --layout es </dev/null | grep -m1 -A1 'key <AE11>'
key <AE11> { [ apostrophe, question, backslash, questiondown ] };
key <AE12> { [ exclamdown, questiondown, dead_cedilla, dead_ogonek ] };Suggested fix
The script already knows the active keymap — keybindings_cache_key() (line
~462) reads it to invalidate the cache:
hyprctl devices 2>/dev/null | grep -F 'active keymap:'The cache key is layout-aware but the resolver is not, so the layout is
available and simply never threaded into parse_keycodes(). Passing it toxkbcli compile-keymap --layout "$layout" (falling back to the current
no-argument call when it cannot be determined) should be enough. The layout code
can be read from hyprctl getoption input:kb_layout or from the layout field
of hyprctl devices -j.
Related
- #8603 — the inverse case: binds declared by symbol (
SUPER + SHIFT + SLASH)
that cannot be typed on some layouts, where the suggested fix is to switch to
keycodes. Worth noting the two interact: moving more binds to code: form
fixes triggering but widens this display bug, so it would be good to land the
keycode→symbol resolution before converting further bindings.
View raw text
### System details
- Omarchy Quattro 4.0.1-1
- Hyprland 0.56.2
- libxkbcommon 1.13.2-1
- Intel Core i5-1035G1 / Intel Iris Plus Graphics G1 (Ice Lake)
- Keyboard layout: `es` (Spanish), reported by Hyprland as `active keymap: Spanish`
### What's wrong?
The `SUPER K` keybindings menu renders every `code:` binding using **US symbol
names**, regardless of the layout the user selected during installation. On a
Spanish keyboard the menu advertises shortcuts that cannot be typed.
The resize bindings in `default/hypr/bindings/tiling.lua` are bound by keycode:
```lua
o.bind("SUPER + code:20", "Expand window left", ...)
o.bind("SUPER + code:21", "Shrink window left", ...)
```
`omarchy menu keybindings --print` displays them as:
```
SUPER + MINUS → Expand window left
SUPER + EQUAL → Shrink window left
SUPER ALT + MINUS → Expand window left a little
SUPER ALT + EQUAL → Shrink window left a little
```
But `code:20`/`code:21` are `<AE11>`/`<AE12>`, and on the `es` layout those
positions are **not** `-`/`=`:
| keycode | XKB name | `us` | `es` |
|---------|----------|------|------|
| `code:20` | `<AE11>` | `minus` | `apostrophe` (`'`) |
| `code:21` | `<AE12>` | `equal` | `exclamdown` (`¡`) |
So the working shortcut is `SUPER + '`, while the menu says `SUPER + MINUS`.
Pressing the key labelled `-` does nothing. This affects every `code:` binding
in the fallback table (`10`–`21`, `59`, `60`, `61`), so digits happen to look
correct while the punctuation keys are wrong on most non-US layouts.
This is a discoverability bug rather than a functional one: the binds fire
correctly on the right physical key. The menu is the only place that tells a
user which key that is, and it names the wrong one.
### Steps to reproduce
1. Install Omarchy selecting a non-US keyboard layout (e.g. Spanish).
2. Run `omarchy menu keybindings --print` (or press `SUPER K`).
3. Observe `SUPER + MINUS → Expand window left`.
4. Press `SUPER` + `-`. Nothing happens.
5. Press `SUPER` + `'` (the key at `<AE11>`). The window resizes.
### Expected
The menu should name the key as it exists on the active layout, e.g.
`SUPER + APOSTROPHE` on `es`.
### Root cause
`bin/omarchy-menu-keybindings`, `parse_keycodes()` (line ~25) resolves keycodes
with:
```awk
keymap_cmd = "xkbcli compile-keymap </dev/null"
```
Invoked with no arguments, `xkbcli compile-keymap` compiles the **default**
keymap (US) rather than the compositor's active one:
```console
$ xkbcli compile-keymap </dev/null | grep -m1 -A1 'key <AE11>'
key <AE11> { [ minus, underscore ] };
key <AE12> { [ equal, plus ] };
```
The resolver therefore always agrees with the hardcoded US fallback on line 18
(`20=MINUS 21=EQUAL ...`), and the fallback never visibly "fails" — it is simply
always wrong for non-US users.
Passing the real layout produces the correct symbols:
```console
$ xkbcli compile-keymap --layout es </dev/null | grep -m1 -A1 'key <AE11>'
key <AE11> { [ apostrophe, question, backslash, questiondown ] };
key <AE12> { [ exclamdown, questiondown, dead_cedilla, dead_ogonek ] };
```
### Suggested fix
The script already knows the active keymap — `keybindings_cache_key()` (line
~462) reads it to invalidate the cache:
```bash
hyprctl devices 2>/dev/null | grep -F 'active keymap:'
```
The cache key is layout-aware but the resolver is not, so the layout is
available and simply never threaded into `parse_keycodes()`. Passing it to
`xkbcli compile-keymap --layout "$layout"` (falling back to the current
no-argument call when it cannot be determined) should be enough. The layout code
can be read from `hyprctl getoption input:kb_layout` or from the `layout` field
of `hyprctl devices -j`.
### Related
- #8603 — the inverse case: binds declared by *symbol* (`SUPER + SHIFT + SLASH`)
that cannot be typed on some layouts, where the suggested fix is to switch to
keycodes. Worth noting the two interact: moving more binds to `code:` form
fixes triggering but widens this display bug, so it would be good to land the
keycode→symbol resolution before converting further bindings.
Also reported as
This defect is tracked under R-1248 (filed Aug 29, 2026). 2 other reports describe the same defect.
Earliest report of this defect: R-2029 (filed Jan 9, 2026).
- Aug 29, 2026R-1248 · this report— tracked here
- ·Decided by agents · verified
Open upstream.
- Sep 6, 2026[JIS keyboard] Window resize shortcuts are misleading because they use US physical key labels R-907·Decided by agents · verified
Open upstream.
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
- Related PRpr/12676· confirmed
- Fixed bypr/14423· confirmed
- Fixed bypr/5881· confirmed
- Related PRpr/8229· confirmed
- Fixed bypr/10468· 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.
- Decided by agents · verified: in the audited area (menu)
- Decided by agents · verified: matches no known issue
The outcome (valid, duplicate, not a bug, …) is not decided yet.