diff --git a/README.md b/README.md index 83517d8..c92a53a 100644 --- a/README.md +++ b/README.md @@ -276,6 +276,15 @@ two tables below are split along exactly that line. | `nomarchy.themesDir` | Nomarchy's `themes/` | Where per-theme app overrides are probed | | `nomarchy.package` | overlay's `nomarchy-state-sync` | The theme/state tool package, overridable if you fork it | +**Greeter keyboard layout:** tuigreet runs on a kernel VT, which has exactly +one keymap — `console.useXkbConfig` follows `services.xserver.xkb.layout` +(`nomarchy.keyboard.layout`), not Hyprland's per-device `kb_layout` binding. +Per-device layouts (`nomarchy.keyboard.devices`) only take effect once the +Hyprland session starts, so at the login prompt an external keyboard types +the **system** layout, not its remembered one — if your password comes out +wrong there, type it as if on the system layout, or use the laptop's own +keyboard. A VT constraint, not a bug. + **Always-on, no toggle by design:** `services.cliphist`, `services.udiskie` (automount + safe-removal toasts) and `services.easyeffects` (mic noise cancellation) ship unconditionally — small, low-risk pieces with no diff --git a/agent/BACKLOG.md b/agent/BACKLOG.md index b4482c2..da87310 100644 --- a/agent/BACKLOG.md +++ b/agent/BACKLOG.md @@ -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.` 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.7–4k 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.` 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.7–4k 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[]: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** diff --git a/agent/JOURNAL.md b/agent/JOURNAL.md index 9900eb5..81dfb52 100644 --- a/agent/JOURNAL.md +++ b/agent/JOURNAL.md @@ -19,6 +19,20 @@ Template: --- +## 2026-07-17 — Live triage with Bernardo: #114 ships as docs; rulings on #120/#134; #143 checked +- **Task:** Bernardo triaged PROPOSED in-session: #148/#147/hardware-hints + promoted (in flight as separate commits), #120 re-affirmed deferred, #134 + decided (Nomarchy carries unstable, home-scope) → NEXT, #114 = document only. +- **Did:** README "Greeter keyboard layout" note + RECOVERY.md §2 pointer + (#114); BACKLOG: #114 deleted, #134 rewritten into NEXT with the decided + shape, Resolved-2026-07-17 block added; ROADMAP #145 cross-ref updated; + rofi#2317 checked — still open, noted under #143. +- **Verified:** V0 (docs/backlog only; prose reviewed in place). +- **Pending:** #148 fix, #147 doctor drift check, hardware hints — this + session; #127 boot -4 forensics (the incident is likely the *unclean* boot + end at Jul 15 10:54:22, not the 12:51 window) being re-ground. +- **Next suggestion:** build #134; close out #127 with the corrected timeline. + ## 2026-07-16 — RETRACTION: the #127 diagnosis was as wrong as the test it replaced - **Task:** Bernardo said "do #147 first, then #146". Both dissolved under investigation, and taking them apart disproved the #127 *cause* I had shipped diff --git a/docs/RECOVERY.md b/docs/RECOVERY.md index fc96ddb..2b1e5e0 100644 --- a/docs/RECOVERY.md +++ b/docs/RECOVERY.md @@ -49,6 +49,9 @@ journalctl --user -b # Hyprland + the user services - Rolling back the *desktop* half is §1 (works from the TTY). - If greetd/tuigreet itself is broken, that's system-side → §3. +- Password rejected on an external keyboard but definitely correct? The + greeter uses the system keyboard layout, not a remembered per-device one + — see the "Greeter keyboard layout" note in README.md § options. - In a **VM**, a black screen is almost always missing guest OpenGL, not your config — see docs/TESTING.md §5. - First boot after an install came up *unthemed*: read diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index ce3ea89..3db0f4a 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -476,7 +476,8 @@ Design/decision records and a running log of shipped work (items marked **#145** rides along: a VT loads exactly one keymap and knows nothing of per-device layouts, so the passphrase box types with the console layout — worth stating before three wrong tries on a disk nobody can read yet (the same - gap as #114, one step earlier in the boot). Fedora's own mechanism does not + gap as #114, one step earlier in the boot — #114 closed 2026-07-17 as + document-only: README's "Greeter keyboard layout" note). Fedora's own mechanism does not port: its label is `ply_keymap_icon`, a **C widget** in the two-step plugin (the script plugin has no keyboard API), fed from `XKBLAYOUT` in `/etc/vconsole.conf` — which **NixOS never writes** (this box has only