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 upgrade drops non-US keyboard layout when vconsole.conf only has KEYMAP
Reported by cempack · filed Aug 14, 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
- Omarchy 4.0.0-1 (Quattro stable), upgraded from a pre-Quattro installation
- Linux 7.1.8-arch1-3
- Intel Core Ultra 5 228V
- Intel Arc Graphics 130V/140V
- French/AZERTY keyboard layout
What's wrong?
After upgrading an existing Omarchy installation to Quattro and rebooting, the Hyprland session uses the US/QWERTY layout instead of the previously configured French/AZERTY layout.
Before the upgrade, the active legacy config contained:
# ~/.config/hypr/input.conf
input {
kb_layout = fr
kb_options = compose:caps
}The system console config contains:
# /etc/vconsole.conf
KEYMAP=frIt does not contain XKBLAYOUT, which is valid: vconsole.conf only guarantees the console KEYMAP setting.
The Quattro upgrade leaves the legacy input.conf in place but switches Hyprland to the new Lua entry points. It always installs a stock ~/.config/hypr/input.lua, and that file has no active keyboard-layout override. The packaged default/hypr/input.lua then does:
local kb_layout = vconsole.XKBLAYOUT or "us"Because this installation has KEYMAP=fr but no XKBLAYOUT, the effective layout silently falls back to us. The migration 1781485962.sh also sees the stock input.lua and leaves/replaces it with the packaged version, so the old kb_layout = fr is never carried over.
Steps to reproduce
- Start with a pre-Quattro Omarchy installation where:
~/.config/hypr/input.confcontainskb_layout = fr/etc/vconsole.confcontains onlyKEYMAP=fr
- Upgrade to Quattro.
- Reboot into the new Lua-based Hyprland configuration.
- Type in any application.
- Observe that the session uses US/QWERTY instead of French/AZERTY.
Expected behavior
The Quattro upgrade should preserve the explicitly configured keyboard layout from the legacy input.conf.
Actual behavior
The explicit legacy layout is ignored, and the new default falls back to us.
Workaround
Adding this to ~/.config/hypr/input.lua restores the correct layout:
hl.config({
input = {
kb_layout = "fr",
},
})Suggested fix
During omarchy-upgrade-to-quattro, migrate active kb_layout, kb_variant, and kb_options values from the legacy ~/.config/hypr/input.conf into the new input.lua before switching entry points. Alternatively, ensure the upgrade populates an appropriate XKBLAYOUT when only KEYMAP exists, while accounting for console/XKB naming differences.
A regression test could cover a legacy input.conf with kb_layout = fr plus a vconsole.conf containing only KEYMAP=fr.
View raw text
### System details
- Omarchy 4.0.0-1 (Quattro stable), upgraded from a pre-Quattro installation
- Linux 7.1.8-arch1-3
- Intel Core Ultra 5 228V
- Intel Arc Graphics 130V/140V
- French/AZERTY keyboard layout
### What's wrong?
After upgrading an existing Omarchy installation to Quattro and rebooting, the Hyprland session uses the US/QWERTY layout instead of the previously configured French/AZERTY layout.
Before the upgrade, the active legacy config contained:
```conf
# ~/.config/hypr/input.conf
input {
kb_layout = fr
kb_options = compose:caps
}
```
The system console config contains:
```conf
# /etc/vconsole.conf
KEYMAP=fr
```
It does not contain `XKBLAYOUT`, which is valid: `vconsole.conf` only guarantees the console `KEYMAP` setting.
The Quattro upgrade leaves the legacy `input.conf` in place but switches Hyprland to the new Lua entry points. It always installs a stock `~/.config/hypr/input.lua`, and that file has no active keyboard-layout override. The packaged `default/hypr/input.lua` then does:
```lua
local kb_layout = vconsole.XKBLAYOUT or "us"
```
Because this installation has `KEYMAP=fr` but no `XKBLAYOUT`, the effective layout silently falls back to `us`. The migration `1781485962.sh` also sees the stock `input.lua` and leaves/replaces it with the packaged version, so the old `kb_layout = fr` is never carried over.
#### Steps to reproduce
1. Start with a pre-Quattro Omarchy installation where:
- `~/.config/hypr/input.conf` contains `kb_layout = fr`
- `/etc/vconsole.conf` contains only `KEYMAP=fr`
2. Upgrade to Quattro.
3. Reboot into the new Lua-based Hyprland configuration.
4. Type in any application.
5. Observe that the session uses US/QWERTY instead of French/AZERTY.
#### Expected behavior
The Quattro upgrade should preserve the explicitly configured keyboard layout from the legacy `input.conf`.
#### Actual behavior
The explicit legacy layout is ignored, and the new default falls back to `us`.
#### Workaround
Adding this to `~/.config/hypr/input.lua` restores the correct layout:
```lua
hl.config({
input = {
kb_layout = "fr",
},
})
```
#### Suggested fix
During `omarchy-upgrade-to-quattro`, migrate active `kb_layout`, `kb_variant`, and `kb_options` values from the legacy `~/.config/hypr/input.conf` into the new `input.lua` before switching entry points. Alternatively, ensure the upgrade populates an appropriate `XKBLAYOUT` when only `KEYMAP` exists, while accounting for console/XKB naming differences.
A regression test could cover a legacy `input.conf` with `kb_layout = fr` plus a `vconsole.conf` containing only `KEYMAP=fr`.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:04 UTC