My macOS setup, declared as a Nix flake: nix-darwin for the system and Homebrew, home-manager for dotfile symlinks, and devenv for per-project languages and gems.
I use Neovim (LazyVim), Zsh with Starship, tmux and Zellij.
Requires Nix (Determinate installer) and Homebrew.
git clone https://github.com/mkrisher/dotfiles.git ~/projects/dotfiles
cd ~/projects/dotfiles
# first time only
sudo nix run nix-darwin -- switch --flake .#Mike-M5
# afterwards
sudo darwin-rebuild switch --flake ~/projects/dotfiles
flake.nix: inputs and theMike-M5machinenix/darwin.nix: system settings and fontsnix/homebrew.nix: Homebrew taps, formulae and casks. Add packages here.nix/home.nix: dotfile symlinks, home-manager packages (devenv, direnv, tmuxinator) and setup stepsconfig/: the dotfiles themselves, symlinked into place bynix/home.nix
Dotfiles are symlinked to this checkout rather than copied, so edits take effect without a rebuild.
Ruby, Node and Rust live in each project's devenv.nix. Projects opt in with a .envrc containing eval "$(devenv direnvrc)" && use devenv. Python is installed with uv.
I use the PARA method for organizing my files: Projects, Areas, Resources and Archives directories. Look up Building A Second Brain if you are not familiar.