feat(flake): #134 — unstable.<pkg> in the downstream, one input, no hand pins
All checks were successful
Check / eval (push) Successful in 4m16s

Nomarchy now carries a nixpkgs-unstable input and exposes it through
overlays.default as an `unstable` attrset: in the template's
`home.packages = with pkgs; [ … ]` a user writes `unstable.lmstudio`
and is done. Downstream stays one locked input; nomarchy-pull moves it.
lib.nix needed zero changes — mkFlake's pkgs already applies the
overlay. The import is plain and non-recursive, so configs that never
reference unstable. pay nothing beyond the input fetch; allowUnfree
mirrors the base set so the motivating lmstudio resolves.

Home packages are the supported surface (documented convention). Costs
stated in the README, not hidden: you own the pinned+unstable
combination; a second toolchain lands in your closure (~690 of ~4k
paths shared, measured on lmstudio); it moves when the lock moves.
Lock bumps now move two channels — VERIFICATION §5 and CONVENTIONS
updated accordingly. flake.lock gained exactly one node
(nixos-unstable @ 753cc8a); nothing else moved.

Verification: V1 — nix flake check --no-build green; new eval-only
checks.unstable-seam green (26.05pre vs 26.11pre lib.version, no
builds); template HM activation built via mkFlake with unstable.hello
enabled and its closure carries the unstable store path (pg2zfr… vs
pinned nm7p8w…). Implementation by a Sonnet subagent; design and
review on Fable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 15:16:29 +01:00
parent 2f5c1c8b99
commit 07400ab4f9
9 changed files with 108 additions and 28 deletions

View File

@@ -89,29 +89,6 @@ 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
- **Wallpapers artifact split** (ROADMAP § Faster switches — decided,
@@ -312,7 +289,7 @@ decide. **Resolved** entries stay for history; agents treat them as closed.
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.
Shipped the same day (ROADMAP § `unstable.<pkg>` in the downstream).
- **#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.