diff --git a/docs/nix.md b/docs/nix.md index 8e2fdf0..d27b792 100644 --- a/docs/nix.md +++ b/docs/nix.md @@ -66,6 +66,44 @@ A module is self-contained configuration under `modules/`. A module configures one program, service, or subsystem. Files under `hosts/`, `guests/`, and `modules/` return NixOS modules. +### Use `default.nix` for module directories with support files + +Use `default.nix` as the primary module when a module directory owns support files. +Keep sibling files for data or code read by that primary module. + +Avoid: + +```text +modules/shell/fish/fish.nix +modules/shell/fish/config.fish +``` + +Use: + +```text +modules/shell/fish/default.nix +modules/shell/fish/config.fish +``` + +### Use non-module `default.nix` files only for directory assembly + +Outside `modules/`, use `default.nix` to connect files in its directory. +Do not define primary assembly functions in `default.nix`. +Put primary assembly functions in named files. + +Avoid: + +```text +flake/default.nix # defines mkHost +``` + +Use: + +```text +flake/default.nix # imports ./hosts.nix +flake/hosts.nix # defines mkHost +``` + ## Function Arguments ### Use closed interfaces for assembly files and library files