My macOS development setup, managed with nix-darwin and Home Manager.
This repo configures my Apple Silicon MacBook Pro: mbp.
If necessary it should be easily expandable by creating a new host in
the hosts/ directory.
.
├── flake.nix
├── flake.lock
├── hosts/
│ └── mbp/
├── modules/
│ ├── common/
│ └── darwin/
├── pkgs/
├── scripts/
└── justfile
hosts/mbp/contains the host entry point.modules/common/contains shared user and development tooling.modules/darwin/contains macOS system settings and packages.pkgs/contains packages that are not sourced directly from nixpkgs.scripts/contains checks and update helpers.
Install Nix and clone the repository, then run:
just bootstrapThe host defaults to mbp. To pass it explicitly:
just bootstrap mbpIf nh is installed, bootstrap uses it. Otherwise it falls back to nix-darwin directly.
Check the flake and build the configuration without activating it:
just checkActivate the configuration:
just switchFormat the Nix files:
just fmtRun the flake checks:
just lintCheck tools and configuration that live outside Nix:
just doctorUpdate the Grok CLI pin and flake inputs without activating anything:
just updateThe update allows uncommitted changes to flake.lock and the Grok CLI pin, but refuses changes to other files.
Update Pi extensions and Homebrew packages:
just update-extrasRun the full update workflow:
just rebuild-updateThis runs four stages in order:
- Update repository pins.
- Check the flake and build the host.
- Activate the configuration.
- Update Pi extensions and Homebrew packages.
Each stage is available separately, so a failed update does not force the whole workflow to be repeated.
- Shell and terminal tooling
- Git and Jujutsu
- Editors and language tooling
- Zellij
- Shared packages
- Theme and user configuration
- macOS defaults
- System and security settings
- AeroSpace
- GPG
- Homebrew
- Zed
- macOS-specific packages
The setup is Nix-first, not Nix-only.
Stable CLI tools, development tools, and shared configuration belong in Nix. Homebrew handles GUI apps, vendor tools, and packages that currently work better outside nixpkgs.
Zed is installed as a macOS app, while its settings are managed declaratively.
The Neovim configuration still lives in ~/Code/.dotfiles and is linked into ~/.config/nvim. just doctor verifies that link and the external tools the editor expects.