This skill should be used when the user asks to "add a new package", "configure a new program", "troubleshoot Nix build errors", "update flake inputs", "add a new host", "manage secrets with SOPS", "create out-of-store symlink", "use nvfetcher", "use claude-code-overlay", or mentions Nix, Home Manager, or nix-darwin configuration in this dotfiles repository.
Provide guidance for managing Nix configurations in this dotfiles repository.
This dotfiles repository uses:
.
├── flake.nix # Entry point (inputs, outputs, host configurations)
├── hosts/ # Machine-specific configurations
│ ├── kohei-m4-mac-mini/ # Personal machine config
│ └── SC-N-843/ # Work machine config
├── nix-darwin/ # System-level macOS configurations
│ ├── default.nix # Full configuration (personal machines)
│ └── minimum-for-work.nix # Minimal configuration (work machines)
├── home-manager/ # User-level configurations
│ ├── programs/ # Individual program configurations
│ ├── pkgs/ # Package list (default.nix)
│ ├── services/ # User-level services
│ └── files.nix # Out-of-store symlink configuration
├── configs/ # Raw configuration files (Neovim, WezTerm, etc.)
├── secrets/ # SOPS-encrypted secrets
└── _sources/ # Auto-generated by nvfetcher
Edit home-manager/pkgs/default.nix:
home.packages = with pkgs; [
# ... existing packages
new-package-name
];
See references/package-management.md for nvfetcher and external package patterns.
home-manager/programs/<program-name>/default.nix:{ pkgs, ... }:
{
programs.<program-name> = {
enable = true;
# Configuration options
};
}
home-manager/programs/default.nix:let
new-program = import ./new-program { inherit pkgs; };
in
[
# ... existing programs
new-program
]
See examples/new-program.nix.example for complete examples.
Use out-of-store symlinks for configs that need editing without Nix rebuild.
configs/.config/<app-name>/home-manager/files.nix:xdg.configFile."app-name" = {
source = symlink /${rootDir}/.config/app-name;
recursive = true;
};
See examples/out-of-store-symlink.nix.example for patterns.
Edit encrypted secrets:
sops secrets/default.yaml
Define in module:
sops.secrets.my-secret = { };
Use the secret path:
config.sops.secrets.my-secret.path
See references/secrets-management.md for detailed SOPS workflow.
# Apply configuration for specific host
sudo darwin-rebuild switch --flake .#kohei-m4-mac-mini
sudo darwin-rebuild switch --flake .#SC-N-843
# Format all Nix and Lua files
nix fmt
# Update all flake inputs
nix run .#update
# Run pre-commit hooks
nix develop -c pre-commit run --all-files
Each host defines a userConfig object passed to all modules:
userConfig = {
username = "thinceller";
homeDir = "/Users/${username}";
hostname = "kohei-m4-mac-mini";
dotfilesDir = homeDir + "/.dotfiles";
};
Access in modules via specialArgs:
{ userConfig, ... }:
{
home.username = userConfig.username;
}
Programs return lists for flexible composition:
# home-manager/default.nix
imports = programs ++ files ++ packages ++ services;
nvfetcher.tomlnvfetcher to generate _sources/generated.nixsources = pkgs.callPackage ../_sources/generated.nix { };
package = sources.package-name;
See references/package-management.md for detailed examples.
# Validate flake
nix flake check
# Show detailed error
nix build --show-trace
# Test configuration without applying
darwin-rebuild build --flake .#<hostname>
| Issue | Solution |
|-------|----------|
| Package not found | Verify name in nixpkgs or use nvfetcher |
| Import errors | Check module path and return type (list vs attrset) |
| Symlink conflicts | Remove existing files before rebuild |
| SOPS decryption fails | Verify age key at ~/.config/sops/age/keys.txt |
# Update specific input
nix flake lock --update-input <input-name>
# Update all inputs
nix run .#update
hosts/<hostname>/default.nixuserConfig:userConfig = {
username = "username";
homeDir = "/Users/${username}";
hostname = "<hostname>";
dotfilesDir = homeDir + "/.dotfiles";
};
flake.nix darwinConfigurationsSee examples/new-host.nix.example for complete template.
references/package-management.md - nvfetcher, claude-code-overlay, external packagesreferences/secrets-management.md - SOPS workflow and best practicesreferences/home-manager-patterns.md - Program configuration patternsexamples/new-program.nix.example - Program configuration templateexamples/new-host.nix.example - Host configuration templateexamples/out-of-store-symlink.nix.example - Symlink configuration patternsSearch for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer