docs: #114 ships as document-only; record 2026-07-17 triage rulings
All checks were successful
Check / eval (push) Successful in 3m50s
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:
@@ -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.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 |
|
| `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`
|
**Always-on, no toggle by design:** `services.cliphist`, `services.udiskie`
|
||||||
(automount + safe-removal toasts) and `services.easyeffects` (mic noise
|
(automount + safe-removal toasts) and `services.easyeffects` (mic noise
|
||||||
cancellation) ship unconditionally — small, low-risk pieces with no
|
cancellation) ship unconditionally — small, low-risk pieces with no
|
||||||
|
|||||||
@@ -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
|
**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
|
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.
|
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.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
|
## 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
|
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
|
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).
|
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.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[<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
|
- **NVIDIA first-class options** — **deferred past v1** (Bernardo
|
||||||
2026-07-10). Keep #59 commented install guidance; no
|
2026-07-10). Keep #59 commented install guidance; no
|
||||||
`nomarchy.hardware.nvidia.*` until a hybrid maintainer + queue.
|
`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
|
Open calls only Bernardo can make; agents add options/evidence but never
|
||||||
decide. **Resolved** entries stay for history; agents treat them as closed.
|
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)
|
### Resolved (2026-07-10)
|
||||||
|
|
||||||
- **Docs site vs Markdown-in-repo** — **markdown in-repo for now**
|
- **Docs site vs Markdown-in-repo** — **markdown in-repo for now**
|
||||||
|
|||||||
@@ -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
|
## 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
|
- **Task:** Bernardo said "do #147 first, then #146". Both dissolved under
|
||||||
investigation, and taking them apart disproved the #127 *cause* I had shipped
|
investigation, and taking them apart disproved the #127 *cause* I had shipped
|
||||||
|
|||||||
@@ -49,6 +49,9 @@ journalctl --user -b # Hyprland + the user services
|
|||||||
|
|
||||||
- Rolling back the *desktop* half is §1 (works from the TTY).
|
- Rolling back the *desktop* half is §1 (works from the TTY).
|
||||||
- If greetd/tuigreet itself is broken, that's system-side → §3.
|
- 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,
|
- In a **VM**, a black screen is almost always missing guest OpenGL,
|
||||||
not your config — see docs/TESTING.md §5.
|
not your config — see docs/TESTING.md §5.
|
||||||
- First boot after an install came up *unthemed*: read
|
- First boot after an install came up *unthemed*: read
|
||||||
|
|||||||
@@ -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
|
**#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 —
|
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
|
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
|
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
|
(the script plugin has no keyboard API), fed from `XKBLAYOUT` in
|
||||||
`/etc/vconsole.conf` — which **NixOS never writes** (this box has only
|
`/etc/vconsole.conf` — which **NixOS never writes** (this box has only
|
||||||
|
|||||||
Reference in New Issue
Block a user