Prefer the most ephemeral install that still meets the tool’s real requirements. Promote upward only when running on demand is too slow.Across the four Nix repos and the ephemeral options on top, every tool has exactly one correct home. The matrix below is ordered the same way you should read it: always-on at the top, ephemeral at the bottom. Work upward from the bottom and stop at the first row that actually satisfies the tool’s needs.
Placement decision matrix
Critical rules
homebrew.brews stays in nix-darwin. Home-manager (nix-ai, nix-home) cannot declare
Homebrew formulas: homebrew.* is a nix-darwin option only. Group AI-adjacent brew tools with a # AI tools comment block for logical clarity, not a repo move.
Pre-commit hooks with language: system require the tool on PATH. If a tool is used as a
language: system pre-commit hook, it must stay in nix-home’s home.packages even if it feels
project-specific (lychee, for example).
IDE linters stay global. Tools like pyright that IDEs invoke as background processes must be
in home.packages (always on PATH). Moving them to a project devenv shell breaks editor integration
because IDEs activate the system environment, not a project shell.
Provider adapters follow the endpoint. If an AI command-line tool is generally useful, package
it in nix-ai. Its config might instead bake in a private gateway URL, model aliases, or a token
source. If so, put that adapter module in the consuming host or workstation flake instead.
The public package stays reusable, and the private topology stays out of shared package docs.
On-demand patterns
Repo responsibilities
Full package lists live in each repo; this page carries placement logic only. Adding a repo to this
set means updating the preceding matrix categories and the
AGENTS.md of every consumer repo that
references the rule.
Where to go next
Nix Ecosystem overview
The four-repo split and how the layers compose at activation time.
nix-darwin
macOS system config: where
homebrew.brews legitimately lives.nix-ai
AI tool ecosystem: what
home.packages carries in the AI tier.nix-devenv
Reusable per-language project shells and importable modules.