Nix-based configuration management for macOS (nix-darwin) and NixOS systems.
Run from .config/nix/:
just darwin # Build and switch Darwin config
just update # Update flake.lock
just gc # Garbage collection
just fmt # Format Nix files with alejandraShell aliases (available after config applied):
dswitch # darwin-rebuild switch
nswitch # nixos-rebuild switch
stow . # Symlink dotfiles from repo root- Nix Flakes + Home Manager - Declarative, reproducible configuration
- Hosts: Macbook-Airborne, Mac-Minicore (aarch64-darwin), Mini-Rover (x86_64-linux)
- Package tiers: Nix (stable CLI tools), UV (Python tools), Homebrew (GUI apps, C libraries)
- Theme system: Defined in
themes.nix, selected per-host in host configs
.config/nix/
├── flake.nix # Entry point
├── home/ # Home Manager modules
│ ├── core.nix # Essential packages
│ ├── shell/ # Zsh, aliases, environment
│ └── themes.nix # Color schemes, fonts
├── hosts/ # Host-specific configs
│ ├── macbook-airborne/
│ ├── mac-minicore/
│ └── mini-rover/
└── modules/ # System-level modules
├── darwin/ # macOS-specific
├── nixos/ # NixOS-specific
└── shared/ # Cross-platform
.bin/ # Custom shell scripts
- Nix: Format with
alejandra(runjust fmt) - Commits: Conventional format -
type(scope): message - R: Tidyverse, native pipe (
|>), 2-space indent - Python: Ruff formatting, 4-space indent
- Bash: POSIX-compliant, 2-space indent
- CLI tools: Add to
.config/nix/home/core.nix - GUI apps (macOS): Add to host's
homebrew.casksin.config/nix/hosts/*/default.nix - Python tools: Use
uv tool install <package>
Add a new shell alias: Edit .config/nix/home/shell/default.nix
Change theme: Modify selectedTheme in the host's config file
Add a new host: Create directory in hosts/, add to flake.nix outputs