nix-best-practices
Use when working with Nix flakes, overlays, shell.nix, or flake.nix files.
By alleneubank · 513 installs
npx skills add alleneubank/claude-code --skill nix-best-practices
Source repository · Upstream listing
Nix Best Practices
Flake Structure
Standard flake.nix structure:
Follows Pattern (Avoid Duplicate Nixpkgs)
When adding overlay inputs, use follows to share the parent nixpkgs and avoid downloading multiple versions:
All inputs must be listed in outputs function even if not directly used:
Applying Overlays
Overlays modify or add packages to nixpkgs:
Handling Unfree Packages
Option 1: nixpkgs unfree (Recommended for Teams)
Use numtide/nixpkgs unfree for EULA licensed packages without requiring user config:
This chains: proprietary tool → nixpkgs unfree → nixpkgs
Option 2: User Config
Users add to ~/.config/nixpkgs/config.nix :
Option 3: Specific Packages (Flake)
Note: config.allowUnfree in flake.nix doesn't work with nix develop use nixpkgs unfree or user config.
Creating Binary Overlay Repos
When nixpkgs builds a community version lacking features (common with open core tools), create an overlay that fetches official binaries.
Pattern (see 0xBigBoss/atlas overlay, 0xBigBoss/bun overlay)
Getting SHA256 Hashes
Or use SRI directly:
Dev Shell Patterns
Basic Shell
With Environment Variables
Native Dependencies (C Libraries)
Direnv Integration
.envrc for flake projects:
For unfree packages without nixpkgs unfree:
Common Commands
Troubleshooting
"unexpected argument" Error
All inputs must be listed in outputs function:
Unfree Package Errors with nix develop
config.allowUnfree in flake.nix doesn't propagate to nix develop . Use:
1. nixpkgs unfree input (recommended)
2. User's ~/.config/nixpkgs/config.nix
3. NIXPKGS ALLOW UNFREE=1 nix develop impure
Duplicate Nixpkgs Downloads
Use follows to chain inputs to a single nixpkgs source.
Overlay Not Applied
Ensure overlay is in the overlays list when importing nixpkgs:
Hash Mismatch
Re fetch with nix prefetch url and update the hash. Hashes change when upstream updates binaries at the same URL.