fix(install): normalize empty keyboard variants
All checks were successful
Check / eval (push) Successful in 3m18s

Treat the picker-only (none) row as an empty XKB variant at the shared input boundary and again in the template patcher. Guard the real downstream output and console keymap, and carry the sentinel through the offline installer VM.

Verified: V0 full flake evaluation plus shell/Python/Nix/diff checks; V1 installer-keyboard, installer-safety, and template-SoT builds; V2 full KVM offline LUKS+swap install and themed first boot. No V3 required.
This commit is contained in:
2026-07-13 15:01:51 +01:00
parent 7bfe1af5b1
commit 9d0abe5422
9 changed files with 179 additions and 23 deletions

View File

@@ -30,22 +30,17 @@ These are separate queue items from one real install/session pass. Preserve
that separation when fixing them: the installer blocker, unclear installer
copy, and post-install desktop failures have different verification paths.
### 91. Installer: empty keyboard variant becomes literal `(none)` and blocks installation
The generated system fails at `xkb-console-keymap.drv` with
`WARNING: Can not find "(none)" in "us"` followed by ckbcomp's `bad include
list`; every later system derivation is only a cascading dependency failure.
Normalize the picker's “no variant” value to the empty string before writing
Nix, and add an installer regression case for `us` + no variant. Pass = the
generated console/XKB configuration builds and the install proceeds.
### 92. Installer: keyboard selection is confusing
Make the layout/variant relationship and the “no variant” choice explicit;
show a human-readable preview/current choice before confirmation. Keep the
simple default path short. Pass = a user can deliberately choose US with no
variant without knowing XKB terminology, and the generated values are shown
before installation.
show a human-readable preview/current choice before confirmation. Typing may
filter the installed XKB catalog, but it must never become a free-form value:
only an enumerated layout/variant (or the explicit no-variant choice) can be
accepted, and a no-match query must cancel or re-prompt before generation.
Keep the simple default path short. Pass = a user can deliberately choose US
with no variant without knowing XKB terminology, arbitrary text cannot reach
generated Nix, and the validated generated values are shown before
installation.
### 93. Installer: swap-size field lacks a clear prompt/explanation