diff --git a/src/skills/style/nix/rules/general.md b/src/skills/style/nix/rules/general.md index e0d0a58..ed367ef 100644 --- a/src/skills/style/nix/rules/general.md +++ b/src/skills/style/nix/rules/general.md @@ -21,3 +21,32 @@ Do not call `lib.removeSuffix ".nix"` outside the utility definition. ### Rationale The utility centralizes Nix file-name normalization. + +## Use executable helpers for package commands + +### Rule + +Use `lib.getExe` for a package's main executable. +Use `lib.getExe'` for a package's non-main executable. +Do not build executable paths with `"${pkg}/bin/name"` when an executable helper names the target. +Use `lib.getExe' config.programs..package "tool"` when a command follows a configured package option. + +### Rationale + +Executable helpers select the package output that contains binaries. +They make package ownership explicit. +`lib.getExe'` prevents calls to a package's main executable when code needs another tool. + +## Prefer NixOS package ownership for commands + +### Rule + +Use `pkgs.` for Home Manager tools. +Use `config.programs..package` when a NixOS module owns the package selection. +Do not read `config.home-manager.users..programs..package` for command paths. + +### Rationale + +Home Manager uses the NixOS package set in this repository. +`pkgs.` avoids dependency paths through the user tree under Home Manager. +Configured NixOS package options preserve package selection when a module owns the tool.