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

mkinitcpio 42.2 copies /etc/vconsole.conf via the plymouth hook, bypassing omarchy_hooks.conf's non-Latin guard and locking out LUKS users

Reported by 4upaCabra · filed Oct 4, 2026 · open at source

Decided: Out of scope — decided by agents · verified 3 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

mkinitcpio 42.2 copies /etc/vconsole.conf via the plymouth hook, bypassing omarchy_hooks.conf's non-Latin guard and locking out LUKS usersrevision 1 · captured 2026-10-04 15:02 UTC via poll

System details

  • Omarchy 4.0.4, Arch rolling, LUKS full-disk encryption, Limine + UKI + Plymouth prompt
  • Kernel: 7.2.8-arch1-2 and linux-omarchy 7.2.5-3-omarchy
  • /etc/vconsole.conf: KEYMAP=ru, XKBLAYOUT=ru,us, XKBMODEL=pc105
  • Upgrade that broke it (2026-10-03): mkinitcpio 42-1 -> 42.2-1, plymouth 26.134.222-2 -> -3, linux 7.2.7.arch1-1 -> 7.2.8.arch1-2, limine 12.9.0 -> 12.9.1
  • A Snapper snapshot taken 3 minutes before the upgrade still boots fine; the rebuilt initramfs does not accept the passphrase

What's wrong?

After mkinitcpio 42-1 -> 42.2-1 the LUKS prompt silently switched to the Russian XKB layout. The passphrase is Latin, so every attempt is rejected — the user is locked out of an otherwise healthy install with no error pointing at the cause.

mkinitcpio 42.2-1 added an unconditional copy of /etc/vconsole.conf to install/plymouth:

# copy vconsole settings for keyboard mapping
if [[ -s /etc/vconsole.conf ]]; then
  add_file /etc/vconsole.conf
fi

That block does not exist in 42-1. Plymouth (libply-splash-core.so.5, parse_vconsole_conf) reads the bundled file and applies XKBLAYOUT to its own LUKS input, so ru,us is now active at the prompt.

Evidence

Both UKIs were rebuilt from the same configs; cmdline, hook list and module set are identical (encrypt, plymouth, keymap hooks unchanged between mkinitcpio 42-1 and 42.2-1).

initramfsmkinitcpioetc/vconsole.conf insideboots
7.2.7 (snapshot, built 42-1)42-1absentpassphrase accepted
7.2.5-omarchy + 7.2.8 (rebuilt 42.2-1)42.2-1presentpassphrase rejected

sha256sum of keymap.bin is a6a871ff04f875ff in both images (3335 bytes, built from KEYMAP=ru at image build time by install/keymap), so the kernel console keymap did not change — the regression is solely the bundled vconsole.conf reaching Plymouth's XKB path.

The existing guard does not cover this

/etc/mkinitcpio.conf.d/omarchy_hooks.conf already refuses to bundle a non-Latin layout:

# Bundle vconsole.conf so Plymouth uses the configured keyboard layout at the
# LUKS prompt, but only when that layout types Latin letters. Passphrases are
# Latin characters, so bundling a Hebrew/Greek/Cyrillic/Arabic layout would
# make the correct passphrase untypeable and lock the user out.
if [[ -f /etc/vconsole.conf ]]; then
  case $(. /etc/vconsole.conf && echo "${XKBLAYOUT%%,*}") in
    af | am | ... | ru | ... | ua) ;;
    *) FILES+=(/etc/vconsole.conf) ;;
  esac
fi

It works by adding to FILES. mkinitcpio 42.2's plymouth hook calls add_file /etc/vconsole.conf directly, which ignores FILES, so the guard is bypassed and the file lands in the image anyway.

Suggested fix

Any of:

  1. Mirror the guard inside the plymouth hook path Omarchy controls (skip add_file when ${XKBLAYOUT%%,*} is in the non-Latin list), or ship a drop-in that overrides install/plymouth.
  2. Report upstream to mkinitcpio — add_file of /etc/vconsole.conf should at least be consistent with a documented guard, and bundling ru/he/el/ar makes the correct passphrase untypeable.
  3. Note that #12896 and #8196 move the opposite direction (ensure XKBLAYOUT is present so Plymouth honours a Latin layout). This report is the flip side of the same knob: when the layout is non-Latin, presence of the file is what locks the user out.

Workaround applied locally

Patched /usr/lib/initcpio/install/plymouth to copy /etc/vconsole.conf only when the first XKBLAYOUT is Latin (same list as omarchy_hooks.conf), then rebuilt the UKIs. etc/vconsole.conf is gone from both images and the hashes in limine.conf were regenerated.

The patch is a local file edit and is reverted by the next mkinitcpio package update.

Related

  • #8196 — same knob, other direction (layout not reaching initramfs)
  • #6072 — Plymouth 24->26 making the prompt fall back to QWERTY, closed in 3.8.3
  • #9828 — rollbacks re-exposing a QWERTY prompt
  • #12896 — PR that persists XKBLAYOUT
View raw text
### System details

- Omarchy 4.0.4, Arch rolling, LUKS full-disk encryption, Limine + UKI + Plymouth prompt
- Kernel: `7.2.8-arch1-2` and `linux-omarchy 7.2.5-3-omarchy`
- `/etc/vconsole.conf`: `KEYMAP=ru`, `XKBLAYOUT=ru,us`, `XKBMODEL=pc105`
- Upgrade that broke it (2026-10-03): `mkinitcpio 42-1 -> 42.2-1`, `plymouth 26.134.222-2 -> -3`, `linux 7.2.7.arch1-1 -> 7.2.8.arch1-2`, `limine 12.9.0 -> 12.9.1`
- A Snapper snapshot taken 3 minutes before the upgrade still boots fine; the rebuilt initramfs does not accept the passphrase

### What's wrong?

After `mkinitcpio 42-1 -> 42.2-1` the LUKS prompt silently switched to the Russian XKB layout. The passphrase is Latin, so every attempt is rejected — the user is locked out of an otherwise healthy install with no error pointing at the cause.

`mkinitcpio 42.2-1` added an unconditional copy of `/etc/vconsole.conf` to `install/plymouth`:

```sh
# copy vconsole settings for keyboard mapping
if [[ -s /etc/vconsole.conf ]]; then
  add_file /etc/vconsole.conf
fi
```

That block does not exist in 42-1. Plymouth (`libply-splash-core.so.5`, `parse_vconsole_conf`) reads the bundled file and applies `XKBLAYOUT` to its own LUKS input, so `ru,us` is now active at the prompt.

### Evidence

Both UKIs were rebuilt from the same configs; `cmdline`, hook list and module set are identical (`encrypt`, `plymouth`, `keymap` hooks unchanged between mkinitcpio 42-1 and 42.2-1).

| initramfs | `mkinitcpio` | `etc/vconsole.conf` inside | boots |
| --- | --- | --- | --- |
| 7.2.7 (snapshot, built 42-1) | 42-1 | **absent** | passphrase accepted |
| 7.2.5-omarchy + 7.2.8 (rebuilt 42.2-1) | 42.2-1 | **present** | passphrase rejected |

`sha256sum` of `keymap.bin` is `a6a871ff04f875ff` in *both* images (3335 bytes, built from `KEYMAP=ru` at image build time by `install/keymap`), so the kernel console keymap did not change — the regression is solely the bundled `vconsole.conf` reaching Plymouth's XKB path.

### The existing guard does not cover this

`/etc/mkinitcpio.conf.d/omarchy_hooks.conf` already refuses to bundle a non-Latin layout:

```sh
# Bundle vconsole.conf so Plymouth uses the configured keyboard layout at the
# LUKS prompt, but only when that layout types Latin letters. Passphrases are
# Latin characters, so bundling a Hebrew/Greek/Cyrillic/Arabic layout would
# make the correct passphrase untypeable and lock the user out.
if [[ -f /etc/vconsole.conf ]]; then
  case $(. /etc/vconsole.conf && echo "${XKBLAYOUT%%,*}") in
    af | am | ... | ru | ... | ua) ;;
    *) FILES+=(/etc/vconsole.conf) ;;
  esac
fi
```

It works by *adding* to `FILES`. mkinitcpio 42.2's plymouth hook calls `add_file /etc/vconsole.conf` directly, which ignores `FILES`, so the guard is bypassed and the file lands in the image anyway.

### Suggested fix

Any of:

1. Mirror the guard inside the plymouth hook path Omarchy controls (skip `add_file` when `${XKBLAYOUT%%,*}` is in the non-Latin list), or ship a drop-in that overrides `install/plymouth`.
2. Report upstream to mkinitcpio — `add_file` of `/etc/vconsole.conf` should at least be consistent with a documented guard, and bundling `ru`/`he`/`el`/`ar` makes the correct passphrase untypeable.
3. Note that #12896 and #8196 move the opposite direction (ensure `XKBLAYOUT` *is* present so Plymouth honours a Latin layout). This report is the flip side of the same knob: when the layout is non-Latin, presence of the file is what locks the user out.

### Workaround applied locally

Patched `/usr/lib/initcpio/install/plymouth` to copy `/etc/vconsole.conf` only when the first `XKBLAYOUT` is Latin (same list as `omarchy_hooks.conf`), then rebuilt the UKIs. `etc/vconsole.conf` is gone from both images and the hashes in `limine.conf` were regenerated.

The patch is a local file edit and is reverted by the next `mkinitcpio` package update.

### Related

- #8196 — same knob, other direction (layout not reaching initramfs)
- #6072 — Plymouth 24->26 making the prompt fall back to QWERTY, closed in 3.8.3
- #9828 — rollbacks re-exposing a QWERTY prompt
- #12896 — PR that persists `XKBLAYOUT`

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 21:20 UTC