Personal dotfiles for my macOS environment.
  • Nix 91.1%
  • Shell 8.9%
Find a file
2026-11-02 20:01:18 +01:00
.github style(nix): add nix fmt formatter, format tree, drop unused arg 2026-10-26 19:15:46 +01:00
dependencies 🚑 fix: update bash-toolbox subproject commit reference 2025-12-13 12:19:20 +01:00
docs docs(upgrading): add macOS and Xcode update pitfalls 2026-11-02 19:53:48 +01:00
hosts/concord refactor: split modules by paradigm (nix-darwin vs home-manager) 2026-06-08 13:42:00 +02:00
modules style(ssh): translate keychain service comments to English 2026-11-02 19:53:48 +01:00
scripts fix(bootstrap): pin bash-toolbox, fail on download errors, handle unset hostname 2026-10-26 19:15:46 +01:00
.gitignore 🌟 feat: remove flake.lock from .gitignore and add flake.lock file 2025-10-29 11:27:07 +01:00
.gitmodules 📦(dep) update source submodule 2024-10-31 15:11:07 +01:00
flake.lock feat(nix): update lock 2026-11-02 20:01:18 +01:00
flake.nix fix(homebrew): declare tap trust in the Brewfile so bundle cleanup keeps it 2026-10-28 10:55:07 +01:00
LICENSE.md :docs update extension 2024-03-09 22:41:05 +00:00
README.md fix(nix): drop needless --impure, the flake evaluates purely 2026-10-26 19:15:46 +01:00

.dotfiles

Declarative setup for my Mac (concord): nix-darwin + Home Manager + Homebrew, one flake.

screenshot

What's inside

Area Tools Where
System macOS defaults, Touch ID sudo, Spotlight aliases for Nix apps modules/macos/system, modules/macos/user.nix
Packages Homebrew formulae & casks, nix system packages modules/macos/homebrew.nix, modules/macos/packages.nix
Window management yabai, skhd, SketchyBar, JankyBorders modules/macos/services/
Shell zsh, starship, nushell, tmux modules/home-manager/apps/, modules/home-manager/shell/
Terminals WezTerm, Ghostty modules/home-manager/apps/{wezterm,ghostty}
Dev git (+ emoji commit hooks), VS Code, conda modules/home-manager/apps/{git,vscode,conda}
SSH keychain-backed agent loaded at login modules/macos/services/ssh-add-keychain

Layout

flake.nix                  inputs (nixpkgs / nix-darwin / home-manager 26.05, nix-homebrew)
hosts/concord/             host-specific settings
modules/macos/             nix-darwin: system, packages, Homebrew, launchd services
modules/home-manager/      user config: HM programs + raw symlinks (symlinks.nix)
dependencies/bash-toolbox/ submodule: logging helpers used by the shell scripts
scripts/bootstrap.sh       first-install script
docs/                      policies and runbooks

Install

Requirements: Apple Silicon Mac on macOS 26 (Tahoe), internet access.

curl -fsSL https://raw.githubusercontent.com/MorganKryze/.dotfiles/main/scripts/bootstrap.sh | zsh

The script sets the hostname, installs the Xcode CLT, Rosetta and Nix, clones this repo to ~/.dotfiles, then runs the first darwin-rebuild switch. It stops after installing Nix: open a new terminal and run it again.

After the first switch

  1. Open the Objective-See apps (LuLu, BlockBlock, …) and grant their permissions.
  2. Open the other apps once to sign in and configure them.
  3. Once Bitwarden and the browser are set up, create the Git SSH connections: create-git-ssh-connections.
  4. Start the window manager and grant its permissions: yabai-start.

Daily use

Task Command
Update inputs and apply nix-update
Apply local changes only sudo darwin-rebuild switch --flake ~/.dotfiles#concord
Check a change builds, without activating nix build ~/.dotfiles#darwinConfigurations.concord.system
Roll back sudo darwin-rebuild --rollback

Warning

Homebrew runs with cleanup = "zap": anything installed by hand with brew install is removed on the next switch. Add it to modules/macos/homebrew.nix instead.

Docs

Credits

Started from mathiasbynens/dotfiles and supersedes my earlier Easy-Git, Easy-Env, Yabai-Setup and Mac-Setup. Third-party licences are in ACKNOWLEDGMENTS.

License

MIT, see LICENSE.