BACK TO PROJECTS
Dotfiles
ACTIVE

Dotfiles

The machine as a living document.

A decade of accumulated configuration managed via GNU Stow. Neovim, zsh, tmux, git, macOS defaults — wired to reproduce a working dev environment on fresh hardware in under an hour.

A decade of configuration decisions, accumulated one dotfile at a time, managed through GNU Stow and designed to reproduce a fully functional development environment on fresh hardware in under an hour. This isn't a backup — it's infrastructure as code for the personal machine.

The philosophy

Dotfiles are the most personal codebase a developer maintains. They encode taste, workflow, muscle memory. Losing them — or worse, not being able to reproduce them on new hardware — means rebuilding years of accumulated decisions from scratch. That's unacceptable. The repository treats the machine itself as a living document: every configuration choice is tracked, versioned, and reproducible.

The goal isn't just backup. It's declarative environment management. Run the bootstrap script, wait, and you get a machine that feels exactly like the one you were working on before. Same keybindings, same shell behavior, same editor config, same git aliases. Zero "oh right, I need to set that up" moments.

GNU Stow: managing complexity

Stow is the secret weapon. It's a symlink farm manager — it takes directories of config files and symlinks them into the right locations in your home directory. Each tool gets its own directory in the repo (neovim/, zsh/, tmux/, git/), and stow neovim creates all the right symlinks. No copying. No manual path management. Clean separation between tools, clean activation and deactivation.

The alternative — a shell script that copies files around — is fragile. Stow gives you idempotent, reversible operations. Run it twice and nothing changes. Run stow -D neovim and all the symlinks are removed cleanly. It's the right abstraction for the problem.

What's configured

The major modules:

  • Neovim — LazyVim-based config with custom keybindings, LSP setup for TypeScript/Go/Python/Rust, Harpoon for file navigation, Oil for file management, telescope for fuzzy finding. Transparent backgrounds. The editor I live in.
  • zsh — Custom prompt (no oh-my-zsh), aliases, path management, completion, vi-mode. Fast startup time is non-negotiable — no plugin managers that add 200ms to shell init.
  • tmux — Session management, Navigator integration for seamless vim/tmux pane switching with Ctrl+h/j/k/l, custom status bar.
  • git — Aliases, commit templates, delta for diffs, global gitignore.
  • macOS defaults — Shell scripts that set system preferences via defaults write. Dock size, key repeat rate, screenshot format, Finder preferences. The stuff you configure once on a new Mac and never want to configure again.

The bootstrap process

Fresh machine to working environment: clone the repo, run ./bootstrap.sh, answer a few prompts, wait for Homebrew to install everything, and Stow to symlink all configs. Under an hour from unboxing to productive. The script is idempotent — running it on an already-configured machine just verifies everything is in place.

Current status

Active and evolving. This repo has been maintained for years and will continue as long as I use a Unix-based machine. It's the most stable project I maintain — because it has to be.

TECH_STACK

GNU StowNeovimzshtmuxShell

LINKS

BACK TO PROJECTS
Dotfiles
ACTIVE

Dotfiles

The machine as a living document.

A decade of accumulated configuration managed via GNU Stow. Neovim, zsh, tmux, git, macOS defaults — wired to reproduce a working dev environment on fresh hardware in under an hour.

A decade of configuration decisions, accumulated one dotfile at a time, managed through GNU Stow and designed to reproduce a fully functional development environment on fresh hardware in under an hour. This isn't a backup — it's infrastructure as code for the personal machine.

The philosophy

Dotfiles are the most personal codebase a developer maintains. They encode taste, workflow, muscle memory. Losing them — or worse, not being able to reproduce them on new hardware — means rebuilding years of accumulated decisions from scratch. That's unacceptable. The repository treats the machine itself as a living document: every configuration choice is tracked, versioned, and reproducible.

The goal isn't just backup. It's declarative environment management. Run the bootstrap script, wait, and you get a machine that feels exactly like the one you were working on before. Same keybindings, same shell behavior, same editor config, same git aliases. Zero "oh right, I need to set that up" moments.

GNU Stow: managing complexity

Stow is the secret weapon. It's a symlink farm manager — it takes directories of config files and symlinks them into the right locations in your home directory. Each tool gets its own directory in the repo (neovim/, zsh/, tmux/, git/), and stow neovim creates all the right symlinks. No copying. No manual path management. Clean separation between tools, clean activation and deactivation.

The alternative — a shell script that copies files around — is fragile. Stow gives you idempotent, reversible operations. Run it twice and nothing changes. Run stow -D neovim and all the symlinks are removed cleanly. It's the right abstraction for the problem.

What's configured

The major modules:

  • Neovim — LazyVim-based config with custom keybindings, LSP setup for TypeScript/Go/Python/Rust, Harpoon for file navigation, Oil for file management, telescope for fuzzy finding. Transparent backgrounds. The editor I live in.
  • zsh — Custom prompt (no oh-my-zsh), aliases, path management, completion, vi-mode. Fast startup time is non-negotiable — no plugin managers that add 200ms to shell init.
  • tmux — Session management, Navigator integration for seamless vim/tmux pane switching with Ctrl+h/j/k/l, custom status bar.
  • git — Aliases, commit templates, delta for diffs, global gitignore.
  • macOS defaults — Shell scripts that set system preferences via defaults write. Dock size, key repeat rate, screenshot format, Finder preferences. The stuff you configure once on a new Mac and never want to configure again.

The bootstrap process

Fresh machine to working environment: clone the repo, run ./bootstrap.sh, answer a few prompts, wait for Homebrew to install everything, and Stow to symlink all configs. Under an hour from unboxing to productive. The script is idempotent — running it on an already-configured machine just verifies everything is in place.

Current status

Active and evolving. This repo has been maintained for years and will continue as long as I use a Unix-based machine. It's the most stable project I maintain — because it has to be.

TECH_STACK

GNU StowNeovimzshtmuxShell

LINKS

BACK TO PROJECTS
Dotfiles
ACTIVE

Dotfiles

The machine as a living document.

A decade of accumulated configuration managed via GNU Stow. Neovim, zsh, tmux, git, macOS defaults — wired to reproduce a working dev environment on fresh hardware in under an hour.

A decade of configuration decisions, accumulated one dotfile at a time, managed through GNU Stow and designed to reproduce a fully functional development environment on fresh hardware in under an hour. This isn't a backup — it's infrastructure as code for the personal machine.

The philosophy

Dotfiles are the most personal codebase a developer maintains. They encode taste, workflow, muscle memory. Losing them — or worse, not being able to reproduce them on new hardware — means rebuilding years of accumulated decisions from scratch. That's unacceptable. The repository treats the machine itself as a living document: every configuration choice is tracked, versioned, and reproducible.

The goal isn't just backup. It's declarative environment management. Run the bootstrap script, wait, and you get a machine that feels exactly like the one you were working on before. Same keybindings, same shell behavior, same editor config, same git aliases. Zero "oh right, I need to set that up" moments.

GNU Stow: managing complexity

Stow is the secret weapon. It's a symlink farm manager — it takes directories of config files and symlinks them into the right locations in your home directory. Each tool gets its own directory in the repo (neovim/, zsh/, tmux/, git/), and stow neovim creates all the right symlinks. No copying. No manual path management. Clean separation between tools, clean activation and deactivation.

The alternative — a shell script that copies files around — is fragile. Stow gives you idempotent, reversible operations. Run it twice and nothing changes. Run stow -D neovim and all the symlinks are removed cleanly. It's the right abstraction for the problem.

What's configured

The major modules:

  • Neovim — LazyVim-based config with custom keybindings, LSP setup for TypeScript/Go/Python/Rust, Harpoon for file navigation, Oil for file management, telescope for fuzzy finding. Transparent backgrounds. The editor I live in.
  • zsh — Custom prompt (no oh-my-zsh), aliases, path management, completion, vi-mode. Fast startup time is non-negotiable — no plugin managers that add 200ms to shell init.
  • tmux — Session management, Navigator integration for seamless vim/tmux pane switching with Ctrl+h/j/k/l, custom status bar.
  • git — Aliases, commit templates, delta for diffs, global gitignore.
  • macOS defaults — Shell scripts that set system preferences via defaults write. Dock size, key repeat rate, screenshot format, Finder preferences. The stuff you configure once on a new Mac and never want to configure again.

The bootstrap process

Fresh machine to working environment: clone the repo, run ./bootstrap.sh, answer a few prompts, wait for Homebrew to install everything, and Stow to symlink all configs. Under an hour from unboxing to productive. The script is idempotent — running it on an already-configured machine just verifies everything is in place.

Current status

Active and evolving. This repo has been maintained for years and will continue as long as I use a Unix-based machine. It's the most stable project I maintain — because it has to be.

TECH_STACK

GNU StowNeovimzshtmuxShell

LINKS

terminal BLOG shield PROJECTS person ABOUT