Files
dev/src/skills/style/nix/rules/general.md

1.7 KiB

Discover Nix files

Rule

Use util.collectNixFiles to discover Nix files. Do not use builtins.readDir with a .nix suffix filter for this purpose. Pass util to Nix functions that need the helper.

Rationale

util.collectNixFiles centralizes recursive discovery of Nix files. Repository Nix code uses one implementation.

Remove Nix file suffixes with the utility

Rule

Use util.removeNixSuffix to derive a Nix name from a path. 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.<name>.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.<name> for Home Manager tools. Use config.programs.<name>.package when a NixOS module owns the package selection. Do not read config.home-manager.users.<user>.programs.<name>.package for command paths.

Rationale

Home Manager uses the NixOS package set in this repository. pkgs.<name> avoids dependency paths through the user tree under Home Manager. Configured NixOS package options preserve package selection when a module owns the tool.