dotfiles#
nix flakes + home-manager. portable across mac and linux.
bootstrap#
# 1. install nix (if not present)
curl -L https://nixos.org/nix/install | sh
# 2. clone (the repo path matters — nvim config uses mkOutOfStoreSymlink)
git clone https://tangled.sh/@zzstoatzz/dotfiles ~/tangled.sh/@zzstoatzz/dotfiles
cd ~/tangled.sh/@zzstoatzz/dotfiles
# 3. apply (detects system automatically)
SYSTEM=$(nix eval --raw nixpkgs#system)
nix run home-manager -- switch --flake ".#nate@${SYSTEM}"
# 4. set zsh as default shell
chsh -s $(which zsh)
what's included#
shell: zsh, oh-my-posh (zen theme), tmux, neovim (kickstart.nvim) search/nav: ripgrep, fd, fzf, jq, bat, eza, autojump dev: git, gh, curl, wget, tree, dust languages: uv (python), rustup (rust), go, node 22, deno, bun terminal: wezterm (linux only — on mac install via .dmg) fonts: fira code nerd font
how it works#
home-manager generates ~/.zshrc and ~/.gitconfig from nix declarations in
home.nix — aliases, history, completions, git user/editor are all configured
there. shell functions live in config/zsh/utils and get symlinked to ~/.utils.
neovim config uses mkOutOfStoreSymlink so ~/.config/nvim points directly at
this repo's config/nvim/ — edits take effect immediately and lazy-lock.json
stays writable.
layout#
flake.nix — nix entry point
home.nix — programs.zsh, programs.git, packages, file symlinks
config/
zsh/utils — shell functions (gbre, git_exclude, ghistory, etc.)
nvim/ — kickstart.nvim config (mutable symlink)
tmux/ — tmux.conf (prefix: ctrl-a)
wezterm/ — wezterm.lua
ohmyposh/ — zen.toml prompt theme
atuin/ — shell history config
bin/
disk-breakdown — disk usage visualizer (macOS)
updating#
edit config in this repo, then:
home-manager switch --flake .
for changes to config/nvim/ — no rebuild needed, it's a direct symlink.