docs: #114 ships as document-only; record 2026-07-17 triage rulings
All checks were successful
Check / eval (push) Successful in 3m50s

Live triage with Bernardo. #114 (greeter ignores per-device layouts):
ruled document-only — a kernel VT has exactly one keymap, so tuigreet
structurally cannot honour settings.keyboard.devices. README gets the
"Greeter keyboard layout" note after the home.nix options table,
RECOVERY.md §2 a one-line pointer for the password-rejected case,
ROADMAP's #145 cross-ref updated, BACKLOG entry deleted.

Also recorded: #120 stays deferred (cachix likely first step when
promoted); #134 decided — Nomarchy carries nixpkgs-unstable, unstable.*
via overlay, home-scope only — rewritten into NEXT; #143 upstream check
(rofi#2317 still open, no response) noted in the item.

Verification: V0 — docs and backlog only, prose reviewed in place.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 07:39:17 +01:00
parent bdc86d0f41
commit 8fc0a9bc29
5 changed files with 62 additions and 53 deletions

View File

@@ -125,7 +125,30 @@ cost for an annoyance with a free workaround (glance before you press Enter).
**This item is now a watch, not work:** the only thing to do is check
rofi#2317, and take the fix when a release carries it. If it is still open at
the next lock bump, that is fine — nothing here rots meanwhile.
*Last checked 2026-07-17: open, no maintainer response, no linked PR.*
### 134. `unstable.<pkg>` in the downstream — decided, build it
**Decided 2026-07-17 (Bernardo): Nomarchy carries the channel.** Add a
`nixpkgs-unstable` input to the distro flake and expose it through
`overlays.default` as an `unstable` attrset, so
`home.packages = [ unstable.lmstudio ];` just works — downstream stays one
locked input and `nomarchy-pull` still moves it. Scope is **home packages
only**; no `unstable.*` surface in system.nix, no `stable.` synonym for now.
The input rides in the eval unconditionally (an unused input still locks +
fetches — accepted). Original diagnosis stands: `mkFlake` has no overlay
seam and `homeConfigurations` uses mkFlake's own `pkgs`, so nothing short of
the distro carrying the channel keeps the user out of `fetchTarball` pinning.
Costs accepted with the ruling, to be stated in docs, not hidden: lock bumps
now move two channels (VERIFICATION §5 full-checklist applies to both); a
user who reaches for `unstable.` pays a second stdenv/glibc in their closure
(measured: lmstudio shares only ~690 of ~3.74k paths); and nothing upstream
tests pinned-Nomarchy + unstable-app together — the README needs an explicit
"you own this combination" paragraph. Ship with a commented example in
`templates/downstream/home.nix` (opt-in convention) and a README table note.
Pass = flake check green + a V1 build of the template HM closure with one
`unstable.` package enabled. Related: #133.
## LATER
@@ -367,58 +390,6 @@ Pass = a second, documented ISO target that is *substantially* smaller (state
the measured number, both ISOs built from one tree), installs successfully with
a network in a QEMU run, says clearly at boot that it needs one, and leaves the
offline ISO's behaviour untouched (`checks.*` for the offline path stay green).
### 134. `unstable.<pkg>` in the downstream — a newer app without a second flake
Bernardo 2026-07-15, wanting a newer LM Studio (pinned 0.4.15-2 vs unstable
0.4.19-2) and disliking the only path that works today. There is **no seam**:
`mkFlake` takes `src`/`username`/`hardwareProfile`/`system` only, and
`homeConfigurations` is built from mkFlake's own `pkgs` (`inherit pkgs`), so a
`nixpkgs.overlays` in system.nix cannot reach a home package. The user is left
hand-pinning a `fetchTarball` rev+sha256 in home.nix (verified working) — a
second pin with no lock, which is exactly the Nix expertise the distro exists
to spare them. Sketch: `home.packages = [ unstable.lmstudio ];`, and maybe
`stable.` as an explicit synonym for today's bare `pkgs`.
The shape that keeps the promises: Nomarchy carries the `nixpkgs-unstable`
input **itself** and exposes it through `overlays.default` as an `unstable`
attrset, so downstream stays **one input**, stays locked, and `nomarchy-pull`
still moves it. Cost/questions to settle before building:
- Lock churn: every lock bump now moves two channels, and the full-checklist
rule (VERIFICATION §5) applies to both.
- Duplication: measured — pinned vs unstable lmstudio build closures share
only 690 of ~3.74k paths (separate stdenv bootstrap). Opt-in per package,
but a user who reaches for it pays a second glibc/stack in the closure.
- "Tested together upstream" weakens by construction: nothing validates
pinned-Nomarchy + unstable-app. Needs an explicit, documented "you own this
combination" line, not silence.
- Does `unstable` belong in the eval by default, or only when referenced?
(An unused input still locks + fetches.)
- Scope: home packages only, or system.nix too?
Alternative if that is too much surface: give `mkFlake` an `overlays ? []`
param (one-line seam, user still owns their own input/pin — cheaper for us,
still expert-only for them). Related: #133.
### 114. Greeter ignores per-device keyboard layouts
Found by Bernardo 2026-07-14: logging out while docked lands on tuigreet,
where his external keyboard (remembered as `us` via
`settings.keyboard.devices`) types the session layout `gb` — so the password
prompt fights him. Not a regression and not docking-related: per-device
layouts are applied with `hyprctl keyword device[<name>]:kb_layout`, which
only exists inside a running Hyprland session, while tuigreet draws on a
kernel VT whose single keymap comes from `console.useXkbConfig`
`services.xserver.xkb.layout`. A VT structurally cannot do per-device
layouts, so this is a design gap, not a bug to patch. Options, cheapest
first: (a) document it and stop there; (b) a greeter layout-cycle key
(tuigreet has no such feature — would need the keymap swapped under it);
(c) host tuigreet inside a small Wayland compositor (cage/labwc), which
*does* get per-device XKB and would let the greeter honour the same
in-flake state the session uses — real work, and it changes the greeter's
whole rendering path (`modules/nixos/greeter.nix` themes tuigreet through
the 16 ANSI console slots, so (c) is not a drop-in). Worth deciding whether
the greeter is meant to be layout-aware at all before costing it.
- **NVIDIA first-class options** — **deferred past v1** (Bernardo
2026-07-10). Keep #59 commented install guidance; no
`nomarchy.hardware.nvidia.*` until a hybrid maintainer + queue.
@@ -451,6 +422,17 @@ Standing calls: browser = Chromium; power = PPD.
Open calls only Bernardo can make; agents add options/evidence but never
decide. **Resolved** entries stay for history; agents treat them as closed.
### Resolved (2026-07-17)
- **#120 netinstall** — stays deferred in PROPOSED (re-affirmed). When it
is promoted, a public binary cache (cachix) is the likely first step.
- **#134 unstable packages** — build it: Nomarchy carries the
`nixpkgs-unstable` input, `unstable.*` via the overlay, home-scope only.
Moved to NEXT with the full decided shape.
- **#114 greeter layouts** — document only: a VT has one keymap by design,
so tuigreet cannot honour per-device layouts. Shipped as the README
"Greeter keyboard layout" note + a RECOVERY.md pointer; entry deleted.
### Resolved (2026-07-10)
- **Docs site vs Markdown-in-repo** — **markdown in-repo for now**