Personal dotfiles for macOS and Linux (Ubuntu/Debian).
- Modular Zsh configuration - Organized into separate files for easy maintenance
- Cross-platform support - Works on both macOS and Ubuntu/Debian Linux
- Automated installation - Single script to set up everything
- Version-controlled Neovim config - Maintained as a git submodule
git submodule update --recursive - Consistent theming - Catppuccin across all tools
- Development ready - Pre-configured for Python (pyenv) and Node (nvm)
- zsh - Modular configuration with custom prompt, aliases, and functions
- Git-aware prompt with branch and status indicators
- Custom git commands (ggpush, gcam, gst)
- Tmux integration
- Python and Node path configuration
- ghostty - Primary terminal emulator (IBM Plex Mono, Catppuccin Mocha)
- tmux - Terminal multiplexer with vim-style keybindings
- neovim - Full-featured config with LSP, Treesitter, and Telescope
- Maintained as separate git submodule at hhheath/nvim
- Lazy.nvim for plugin management
- Obsidian integration for note-taking
- AeroSpace - i3-like tiling window manager
- Homebrew - Package management via Brewfile
- .gitconfig - Common aliases and sensible defaults (template)
-
Clone this repository:
git clone --recurse-submodules https://github.com/hhheath/dotfiles.git ~/.dotfiles cd ~/.dotfiles
-
Run the installation script:
./install.sh
-
Restart your terminal or source the new configuration:
source ~/.zshrc
-
Update
.gitconfigwith your personal information:nvim ~/.gitconfig # Update name and email fields
The install.sh script will:
- ✓ Detect your OS (macOS or Linux)
- ✓ Install base packages (git, zsh, curl, tmux, neovim, etc.)
- ✓ Install pyenv with Python build dependencies
- ✓ Install nvm (Node Version Manager)
- ✓ Install development tools (fzf, ripgrep, fd, jq, gh)
- ✓ macOS: Install Homebrew and packages from Brewfile
- ✓ Linux: Build/install tools from source where needed
- ✓ Set zsh as your default shell
- ✓ Backup existing configs to
~/.dotfiles_backup/ - ✓ Copy dotfiles to appropriate locations
- ✓ Initialize and link Neovim config
-
Install Python version:
pyenv install 3.12.0 pyenv global 3.12.0
-
Install Node version:
nvm install --lts nvm use --lts
-
Launch Neovim to auto-install plugins:
nvim # Lazy.nvim will automatically install all plugins
dotfiles/
├── config/
│ ├── nvim/ # Neovim config (git submodule)
│ ├── ghostty/
│ │ └── config # Ghostty terminal config
│ └── aerospace/
│ └── aerospace.toml # AeroSpace window manager (macOS)
├── shell/
│ └── zsh/
│ ├── aliases.zsh # Shell aliases
│ ├── completion.zsh # Completion setup
│ ├── env.zsh # Environment variables
│ ├── functions.zsh # Custom functions
│ ├── nvm.zsh # NVM initialization
│ ├── path.zsh # PATH configuration
│ ├── prompt.zsh # Git-aware prompt
│ └── pyenv.zsh # Pyenv initialization
├── .zshrc # Main zsh config (sources modules)
├── .tmux.conf # Tmux configuration
├── .gitconfig # Git configuration template
├── Brewfile # macOS package definitions
├── install.sh # Installation script
└── README.md # This file
- Modular design - Easy to add/remove functionality
- Smart completion - Case-insensitive with automatic suggestions
- Git integration - Branch name and status in prompt
- Custom aliases - Shortcuts for common tasks
- Prefix:
Ctrl+Space(instead ofCtrl+B) - Navigation:
Alt+hjklto move between panes - Splits:
\for horizontal,-for vertical - Mouse support enabled
- i3-style tiling - Automatic window management
- Keyboard-driven -
Alt+hjklfor navigation - Workspaces - Support for 1-9 and A-Z
If you prefer to manually install without the script:
-
Install base tools:
- macOS:
brew install git zsh tmux neovim fzf ripgrep fd - Ubuntu:
sudo apt install git zsh tmux build-essential
- macOS:
-
Install version managers:
# pyenv curl https://pyenv.run | bash # nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
-
Copy configs:
cd ~/.dotfiles cp .zshrc ~/.zshrc cp -r shell ~/.config/shell cp .tmux.conf ~/.tmux.conf cp -r config/ghostty ~/.config/ghostty cp .gitconfig ~/.gitconfig ln -s ~/.dotfiles/nvim ~/.config/nvim
-
Set zsh as default shell:
chsh -s $(which zsh)
The nvim config is a git submodule, so you can update it independently:
cd ~/.dotfiles/nvim
git pull origin main
cd ~/.dotfiles
git add nvim
git commit -m "Update nvim submodule"To capture currently installed packages:
cd ~/.dotfiles
brew bundle dump --force
git add Brewfile
git commit -m "Update Brewfile"- Create new file in
shell/zsh/(e.g.,docker.zsh) - Add
source "$ZSH_CONFIG_DIR/docker.zsh"to.zshrc - Commit both files
Make sure the paths in .zshrc are correct. The script automatically detects whether to use ~/.config/shell/zsh or the dotfiles directory.
Run :Lazy sync inside Neovim to manually trigger plugin installation.
Source your .zshrc again or restart your terminal:
source ~/.zshrc| OS | Status | Notes |
|---|---|---|
| macOS (Intel) | ✅ Fully supported | Tested on macOS Sonoma |
| macOS (Apple Silicon) | ✅ Fully supported | Homebrew handles architecture |
| Ubuntu 22.04+ | ✅ Fully supported | apt-based package installation |
| Debian 11+ | ✅ Fully supported | apt-based package installation |
| Other Linux | May require manual package installation |
Free to use, modify, and distribute. No warranty provided.
- Zsh prompt inspired by Oh-My-Zsh
- Neovim config structure based on modern Lua patterns
- Catppuccin theme by @catppuccin