Add modules.toolkit, an aggregator that enables fish, tmux, nvim, git, and direnv as one unit, and makes fish the login shell, 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 and its explicit default-shell line, keeping the Host a flat checklist.
2.1 KiB
2.1 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 bundle also sets
modules.fish.defaultShell, so fish is the login shell wherever the toolkit is enabled — part of making any Host or Guest shell feel identical. This ismkDefault, so a Host can still opt out.neogaia's previously explicitdefaultShellline is therefore dropped. - 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.