Add modules.toolkit, an aggregator that enables fish, tmux, nvim, git, and direnv as one unit, so any Host or Guest shell feels identical. Each member is set via mkDefault, so a Host can still override any single piece while the one flag brings up the whole bundle. neogaia now enables the bundle as a single line in place of its five individual enables, keeping the Host a flat checklist.
1.9 KiB
1.9 KiB
spec
| spec |
|---|
| guests |
What to build
A new bundle Module, modules.toolkit, that turns on the baseline interactive environment — fish, tmux, nvim, git, and direnv — as one unit.
Enabling it on a Host brings up all five together, so any Host or Guest shell feels identical.
This is a deliberate bundle wanted as a unit, distinct from the grouping-directory aggregate enables ADR 0004 rejected.
Acceptance criteria
modules.toolkitdeclares anenableoption following the Enable convention and lives at a path its file location mirrors, per the Namespace convention.- Enabling
modules.toolkitturns on fish, tmux, nvim, git, and direnv as a group. - A Host that enables
modules.toolkitstill reads as a flat checklist — the bundle is one line, not a hidden group of five. - A Host enabling
modules.toolkitbuilds vianix flake check, and the five underlying Modules are enabled (verifiable bynix evalof theirenablevalues).
Implementation Notes
modules/toolkit.nixfollows the sanctioned aggregator pattern ofmodules/desktop/desktop.nix: an index node whoseenablesets each member'senable = lib.mkDefault true, so a Host can still override any single piece while the one flag brings up the bundle.neogaiawas converted as the demonstrating Host: its five individualmodules.{fish,git,direnv,tmux,nvim}.enable = truelines collapse to onemodules.toolkit.enable = true. The host-specificmodules.fish.defaultShell = truestays, since it is placement beyond the bundle's baseline enable.- Verified:
nix flake checkbuildschecks.x86_64-linux.neogaia, andnix evalof each of the five members'enableon neogaia returnstrue. - The working tree also carries
.claude/CONTEXT.md, ADR 0006, and theguestsspec — planning artifacts for the widerguestsspec, not this task. They are deliberately left out of this task's commit and staged separately by the broader work.