After years of tweaking and refining my development setup, I've finally organized everything into a single dotfiles repository. This post walks through the tools I use daily and how they're configured.
Why Dotfiles?
Configuration files (dotfiles) define your development environment. By version controlling them, you can:
- Sync across machines - Same setup on your work and personal computer
- Recover quickly - Reinstall everything after a crash or new machine
- Track experiments - Roll back when something breaks
I manage my dotfiles with GNU Stow - check out that post for the details.
The Stack
Here's what my setup includes:
- Neovim - Primary code editor
- tmux - Terminal multiplexer
- Kitty/Ghostty - Terminal emulators
- yabai + skhd - Keyboard-driven window management
- Zsh + Oh My Zsh - Shell environment
Shell Configuration
My .zshrc is kept minimal. Here are the key parts:
# Theme
ZSH_THEME="robbyrussell"
# Plugins
plugins=(git zsh-autosuggestions)
# Editor
if [[ -n $SSH_CONNECTION ]]; then
export EDITOR='vim'
else
export EDITOR='nvim'
fi
# Alias vim to nvim
alias vim="nvim"
I use Oh My Zsh with just two plugins:
gitfor git aliases and prompt infozsh-autosuggestionsfor fish-like command suggestions
The rest handles version managers: NVM for Node.js, RVM for Ruby, and Mise for other tools.
Neovim
Neovim is where I spend most of my coding time. My config uses Lua and includes:
- LSP support for multiple languages
- Telescope for fuzzy finding
- Treesitter for syntax highlighting
- Custom keybindings for efficiency
The config lives in ~/.config/nvim/ and is structured for easy maintenance. Check out my detailed Neovim post for the full breakdown.
Terminal: Kitty & Ghostty
I've used Kitty for years and recently started experimenting with Ghostty. Both configs include:
- Custom color schemes with dark/light theme switching
- Font configuration optimized for coding
- Keyboard shortcuts for splits and tabs
The theme switching is handled through symlinks - theme.conf points to either dark-theme.auto.conf or light-theme.auto.conf.
Window Management: yabai + skhd
On macOS, yabai handles automatic window tiling while skhd provides system-wide hotkeys. This is part of my keyboard-driven workflow.
Common shortcuts I use:
# Focus windows
alt - h : yabai -m window --focus west
alt - l : yabai -m window --focus east
alt - j : yabai -m window --focus south
alt - k : yabai -m window --focus north
# Move windows
shift + alt - h : yabai -m window --swap west
shift + alt - l : yabai -m window --swap east
This vim-like navigation makes managing windows feel natural.
tmux
For terminal session management, tmux is essential. My config includes:
- Vim-style pane navigation
- Mouse support enabled
- Custom status bar
- Sensible prefix key remapping
Repository Structure
dotfiles/
โโโ .zshrc
โโโ .config/
โ โโโ nvim/
โ โโโ kitty/
โ โโโ ghostty/
โ โโโ tmux/
โ โโโ yabai/
โ โโโ skhd/
โโโ vscode/
โโโ zed/
Each tool's configuration is self-contained, making it easy to stow individual packages.
Getting Started
To use these dotfiles:
# Clone the repo
git clone https://github.com/daze17/dotfiles.git ~/dotfiles
# Install GNU Stow
brew install stow
# Stow individual packages
cd ~/dotfiles
stow nvim
stow tmux
stow kitty
# Or stow everything
stow */
Final Thoughts
A well-organized dotfiles repo is an investment that pays off every time you set up a new machine or recover from a crash. Start simple - even tracking just your .zshrc and editor config is valuable.
Feel free to explore my dotfiles for ideas. The best dotfiles are the ones you understand and actively maintain.