macOS dotfiles managed by a Nix Home Manager flake.
Note
Nix is required. The flake manages symlinks declaratively; CLI tools and casks are installed separately via Homebrew.
- Shell: Zsh with Starship prompt (oh-my-zsh simple theme replica)
- Terminal: WezTerm with tmux-style keybindings for pane management
- Editor: Neovim with LazyVim
- Multiplexer: WezTerm built-in (tmux configuration also available if preferred)
- Fuzzy Finder: fzf integration for history, repository navigation, and file search
- Window Manager: Hammerspoon for window management
- AI Assistant: Claude Code global settings (permissions, instructions, skills)
.zshrc- Zsh configuration with custom functions and keybindings.tmux.conf- tmux configuration (optional, for those who prefer tmux over WezTerm's built-in multiplexer)nvim/- Neovim/LazyVim configurationstarship.toml- Starship prompt configurationwezterm/- WezTerm terminal configuration with tmux-style keybindingshammerspoon/- Hammerspoon window management configurationclaude/- Claude Code global settings (symlinked to~/.claude/)flake.nix/home.nix/flake.lock- Home Manager flake managing symlinks declaratively
.zsh_history and .gitconfig are synced across machines via Dropbox. These files are not managed by the flake — set them up manually after applying the flake:
ln -s ~/Dropbox/.zsh_history ~/.zsh_history
ln -s ~/Dropbox/.gitconfig ~/.gitconfigRecommended: Determinate Nix Installer.
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- installIf using the upstream installer instead, enable flakes manually:
mkdir -p ~/.config/nix
echo "experimental-features = nix-command flakes" >> ~/.config/nix/nix.confghq get https://github.com/hinatades/dotfiles.git
cd $(ghq root)/github.com/hinatades/dotfilesnix run home-manager/master -- switch --flake .#hinatades -b backup-b backup renames any pre-existing conflicting files (e.g. ~/.zshrc) to <name>.backup instead of failing.
The flake uses mkOutOfStoreSymlink, so symlinks point at the live repo — edits take effect without rebuild.
Most CLI tools are managed by the flake (home.packages in home.nix). Homebrew is still used for:
- Casks (GUI apps, fonts): WezTerm, Hammerspoon, fonts
- Services:
postgresql@14,redis - Custom taps not in nixpkgs:
d-kuro/tap/gwq,argoproj/tap/kubectl-argo-rollouts - Broken in nixpkgs:
jp2a
brew install --cask wezterm hammerspoon
brew install d-kuro/tap/gwq jp2aLanguage runtimes (Go / Python / Node.js / Terraform) are managed by mise — see mise/config.toml.
Add an entry under homeConfigurations in flake.nix:
"yourname" = mkHome {
system = "aarch64-darwin"; # or "x86_64-linux", etc.
username = "yourname";
homeDirectory = "/Users/yourname";
# optional: dotfilesPath = "/absolute/path/to/dotfiles";
};Then nix run home-manager/master -- switch --flake .#yourname -b backup.
Managed declaratively via mise (mise/config.toml → ~/.config/mise/config.toml):
- Golang, Python, Node.js, Terraform
Override per project with mise.toml or .tool-versions in the project root.
fzf-src(Ctrl+Esc): Fuzzy find and navigate to repositories managed by ghqfzf-src-hub(Ctrl+]): Fuzzy find and open repository in browser with ghfzf-select-history(Ctrl+Space): Fuzzy search command historyfzf-gwq(Ctrl+): Fuzzy find and navigate to git worktrees managed by gwqfvim: Fuzzy find and open git-tracked files in Neovimide: Split tmux window into 3-pane layout (requires tmux)
-: Open oil.nvim file explorer (edit like a buffer:oto add file,:wto save):Fzf: Fuzzy file finder (Telescope):Rg: Ripgrep search in files (Telescope)
Leader key: Ctrl+b (tmux-style)
Leader + |: Split pane horizontallyLeader + -: Split pane verticallyLeader + h/j/k/l: Navigate panesLeader + H/J/K/L: Resize panes (expand current pane in direction)Leader + [: Enter copy mode (for scrolling withCtrl+f/b/d/u, exit withq)Leader + 3: Create 3-pane preset layout
Note
The included .tmux.conf uses the same Ctrl+b leader key and similar keybindings, so you can switch between WezTerm and tmux with minimal adjustment.
Window management with simple keybindings:
Cmd+Shift+h: Move window to left halfCmd+Shift+l: Move window to right halfCmd+Shift+j: Maximize windowCmd+Shift+k: Center window (80% size)Ctrl+Return: Toggle WezTerm visibility
Configured to replicate the oh-my-zsh "simple" theme with a clean, minimalist look.