My personal development environment configuration files.
- ZSH - Shell with custom aliases, functions, and environment setup
- Git - Version control with useful aliases and better defaults
- Helix - Modern text editor with LSP support and git blame integration
- tmux - Terminal multiplexer with vim-style navigation and popups
- Ghostty - Terminal emulator with Light Owl styling and shaders
- Yazi - Terminal file manager launched from tmux popups
- LazyGit - Terminal Git UI with delta and difftastic pagers
- Pi - Coding-agent TUI configured with matching theme/keybindings
dotfiles/
βββ zsh/
β βββ .zshrc # Main ZSH configuration
β βββ .zshenv # Environment variables
βββ git/
β βββ .gitconfig # Git configuration
β βββ .gitignore_global # Global ignore patterns
βββ helix/
β βββ .config/helix/
β βββ config.toml # Helix editor settings
βββ tmux/
β βββ .tmux.conf # tmux configuration
β βββ .tmux/scripts/ # tmux status/pane helper scripts
βββ ghostty/
β βββ .config/ghostty/config
βββ yazi/
β βββ .config/yazi/
βββ lazygit/
β βββ Library/Application Support/lazygit/config.yml
βββ atuin/
β βββ .config/atuin/config.toml
βββ direnv/
β βββ .config/direnv/direnv.toml
βββ pi/
β βββ .pi/agent/
Setting up your development environment on a new Mac.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"# Enough to clone this repo and link configs
brew install git stow# Create directory structure
mkdir -p ~/Code
cd ~/Code
# Clone your dotfiles
git clone https://github.com/Doctacon/dotfiles.git
cd dotfilesbrew bundle install --file Brewfile# Link all configs at once
stow --target="$HOME" zsh git helix tmux ghostty yazi lazygit atuin direnv pi
# Or link individually if you prefer
stow --target="$HOME" zsh # Shell config
stow --target="$HOME" git # Git config
stow --target="$HOME" helix # Editor config
stow --target="$HOME" tmux # Terminal multiplexer
stow --target="$HOME" ghostty # Terminal emulator
stow --target="$HOME" yazi # Terminal file manager
stow --target="$HOME" lazygit # Terminal Git UI
stow --target="$HOME" pi # Coding-agent TUI# Install Python LSPs
uv tool install pyright
uv tool install ruff-lsp# Add homebrew zsh to allowed shells
sudo sh -c "echo $(which zsh) >> /etc/shells"
# Change default shell
chsh -s $(which zsh)Close and reopen your terminal, or run:
source ~/.zshrcYour environment is ready. Test it out:
# Check helix is working with LSP
hx --health python
# Test git aliases
git s
# Test ripgrep
rg "test"
# Test lazygit + delta/difftastic stack
lazygit --version
delta --version
difft --versionIf you're setting this up on a work machine with existing configs and sensitive environment variables:
Before running stow, save your work-specific settings:
# Copy your existing environment variables to a local file
cp ~/.zshrc ~/.zshrc.local
# Edit to keep only work-specific stuff (API keys, paths, etc.)
hx ~/.zshrc.local
# Remove everything except your work-specific exports and configsFollow the setup steps above. When you run stow zsh, it will replace your .zshrc with the dotfiles version.
The .zshrc from dotfiles automatically sources ~/.zshrc.local if it exists, so all your work-specific environment variables will still load.
In ~/.zshrc.local (never committed):
# Work-specific API keys
export OPENAI_API_KEY="sk-..."
export AWS_ACCESS_KEY_ID="..."
export DATABASE_URL="..."
# Company-specific paths
export WORK_REPO="/Users/you/work/repo"
# Corporate proxy settings
export HTTP_PROXY="..."In dotfiles .zshrc (committed to git):
- General aliases and functions
- Tool configurations
- Generic PATH additions
- Theme and prompt settings
This way you get all your dotfiles goodness while keeping sensitive work data separate and secure.
# Link configurations
stow --target="$HOME" zsh # Link single package
stow --target="$HOME" zsh git helix # Link multiple packages
# Unlink configurations
stow --target="$HOME" -D zsh # Remove single package
stow --target="$HOME" -D zsh git helix # Remove multiple packages
# Relink configurations (useful after updates)
stow --target="$HOME" -R zsh # Relink single package
stow --target="$HOME" -R -v zsh git helix # Relink multiple with verbose output
# Dry run (preview changes)
stow --target="$HOME" -n -v zsh # See what would happen# See all symlinks
ls -la ~ | grep -E "^l.*dotfiles"
# Check specific symlink
ls -la ~/.zshrcFeatures:
- Smart prompt with git integration
- Extensive aliases for git, navigation, and common tasks
- History with deduplication and sharing
- fzf shell integration for file/directory pickers
- Atuin local-first history search
- Ripgrep aliases for data engineering (
rgs,rgpy,rgdata, etc.) - Custom functions (
mkcd,extract,backup,gacp) - Environment setup for development tools
Key Aliases:
ll,la- Enhanced listinggs,gd,gp- Git shortcutsrgs- Search SQL filesrgpy- Search Python filesrgdata- Search data files (CSV, JSON, etc.)
Features:
- Helix as default editor
- Global gitignore for common files
- Better diff algorithms and merge conflict display
- Delta as the default syntax-highlighting pager
- Difftastic aliases for structural diffs (
git difft,git showt) - Auto-prune on fetch
- Rebase by default on pull
- SSH preference for GitHub
Useful Aliases:
git s- Quick statusgit ll- Pretty log with graphgit cane- Amend without editing messagegit undo- Undo last commit (keep changes)git recent- Show recent branchesgit go <branch>- Switch/create branch
Features:
- Light Owl + orange accent theme
- Relative line numbers
- Git gutter indicators
- Mouse support
- Smart indentation
Custom Keybindings:
Alt-b- Git blame for current lineSpace e/f- File pickerSpace r- Rename symbolSpace a- Code actionTab/Shift-Tab- Buffer switchingjk- Exit insert mode
Features:
- Prefix:
Ctrl-a(instead ofCtrl-b) - Mouse support enabled
- Vim-style pane navigation (
h,j,k,l) - Window/pane indexing starts at 1
- 256 color support
Key Bindings:
Prefix |- Vertical splitPrefix -- Horizontal splitPrefix r- Reload configPrefix h/j/k/l- Navigate panesPrefix H/J/K/L- Resize panesPrefix p- Open Pi in a popupPrefix B- Open Yazi in a popupPrefix u- Open LazyGit in a popup
Features:
- Terminal file manager with Light Owl flavor
- Shell escape keybinding (
!) for opening a blocking shell in the current directory - Launched from tmux with
Prefix B
Features:
- Terminal Git UI installed via Homebrew
- Uses Delta as the first diff pager
- Includes Difftastic as a second pager for syntax-aware diffs
- Opens files in Helix via LazyGit's
helixedit preset - Launched from tmux with
Prefix uor from zsh withlg
Features:
- Light Owl orange readable theme
- High default thinking level
- Custom newline keybindings for the TUI input
- Loom, web access, ask-user-question, and flight-recorder packages enabled
Features:
- IBM Plex Mono with ligatures
- Light Owl theme shared with tmux, Helix, Yazi, and Pi
- Subtle shader effects and orange cursor styling
- macOS-native keybindings for tabs, splits, search, and font size
- ZSH shell integration
For machine-specific configurations:
- ZSH: Create
~/.zshrc.local - Git: Use
git config --localin repositories
- Create a new directory in
~/Code/dotfiles/ - Mirror the home directory structure
- Run
stow <package>to create symlinks
Example for adding vim configuration:
mkdir -p ~/Code/dotfiles/vim
echo "set number" > ~/Code/dotfiles/vim/.vimrc
cd ~/Code/dotfiles
stow --target="$HOME" vimThis means files already exist where stow wants to create symlinks.
# Option 1: Back up existing file and retry
mv ~/.zshrc ~/.zshrc.backup
stow zsh
# Option 2: Force adopt existing files
stow --adopt zshMake sure you've installed and activated your virtual environment:
# Create and activate virtual environment
uv venv
source .venv/bin/activate
# Install project dependencies
uv sync # if using pyproject.toml
# or
uv pip install <package> # for individual packagesMake sure you restarted your terminal after setup, or run:
source ~/.zshrcMIT - Feel free to use and modify these configurations