Skip to content

bryceeppler/dotfiles

Repository files navigation

dotfiles

A macOS environment managed declaratively with nix-darwin + home-manager + Homebrew. The repo lives at ~/git/dotfiles, aliased to ~/.dotfiles. One command applies everything - system settings, packages, and config: ~/.dotfiles/rebuild.sh.

How it's organized

File Layer Owns
flake.nix / flake.lock inputs nixpkgs, nix-darwin, home-manager, nix-homebrew, herdr; the mac config
configuration.nix system (nix-darwin) macOS defaults, Touch ID sudo, fonts, declarative Homebrew
home.nix user (home-manager) nix packages, zsh/fzf/starship, edit-in-place config links
rebuild.sh apply refreshes the ~/.dotfiles alias, runs darwin-rebuild switch

Bootstrap on a new machine

  1. Install Determinate Nix (gives you nix with flakes).
  2. Clone the repo and create the stable alias:
    git clone <this-repo> ~/git/dotfiles
    ln -s ~/git/dotfiles ~/.dotfiles
  3. Apply everything:
    ~/.dotfiles/rebuild.sh

rebuild.sh runs darwin-rebuild switch --flake ~/.dotfiles#mac. There is no manual symlinking - home-manager creates every ~/.config link. The first run also enables Touch ID for sudo and adopts the existing Homebrew install.

What manages what

System - configuration.nix (nix-darwin)

  • macOS defaults: dark mode, fast key repeat, Dock, Finder, a Quick Note hot corner, natural-scroll off, and more.
  • Touch ID for sudo.
  • FiraCode Nerd Font via fonts.packages (the way that actually registers a font with macOS).
  • Homebrew, declaratively via nix-homebrew with cleanup = "zap". The brews/casks lists are the single source of truth: anything installed that isn't listed gets removed on the next rebuild. Add or remove CLIs and GUI apps by editing those lists.

User - home.nix (home-manager)

  • Nix packages: neovim, herdr, stripe-cli, …
  • programs.zsh generates ~/.zshrc / .zshenv / .zprofile (history, aliases, completion, autosuggestions, syntax highlighting).
  • programs.fzf and programs.starship (starship reads starship.toml).
  • Edit-in-place config symlinks (below).

Editing configs

There are two styles:

  • Edit-in-place (wezterm, tmux, nvim, herdr): the real files live under home/.config/<tool>/, and home-manager symlinks them live into ~/.config/. Edit the repo file and the change is immediate - no rebuild for config-only tweaks.
  • Declarative (zsh, starship): generated by home-manager from home.nix (and starship.toml). Change those, then run rebuild.sh to apply.

Layout

flake.nix / flake.lock       the flake and its pinned inputs
configuration.nix            system layer (nix-darwin)
home.nix                     user layer (home-manager)
rebuild.sh                   apply script
starship.toml                prompt config (imported by programs.starship)
home/.config/wezterm/        WezTerm            (edit-in-place)
home/.config/tmux/           tmux               (edit-in-place)
home/.config/nvim/           Neovim, vendored   (edit-in-place)
home/.config/herdr/          herdr              (edit-in-place)
iterm2/                      iTerm2 prefs + color preset (legacy/backup)
TOOLCHAIN.md                 Node / Python / CLI toolchain notes
CHEATSHEET.md                terminal + tmux + Neovim usage

Neovim

Vendored from a kickstart.nvim fork into home/.config/nvim (kickstart was just the starting point). The neovim binary comes from nix; nvim-pack-lock.json is tracked so plugin versions are pinned and reproducible.

iTerm2 (legacy / backup)

iterm2/com.googlecode.iterm2.plist is version-controlled via iTerm's custom-preferences-folder feature. Kept as a fallback; WezTerm is the daily driver.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors