Personal configuration for zsh, tmux, nvim, and other tools. Designed for portability with encrypted secrets using passage (Age-based password manager).
# 1. Install git (if needed)
# macOS: xcode-select --install
# Linux: sudo apt install git
# 2. Clone and bootstrap
git clone git@github.com:youruser/dotfiles.git ~/dotfiles
cd ~/dotfiles
./bootstrap.sh install
# 3. Reload shell
exec zsh
# 4. Clone your secrets (if you have them backed up)
rm -rf ~/.passage/store
git clone git@github.com:youruser/passage-store.git ~/.passage/store
# 5. Test
passage show api-keys/openai# Pull latest configs and secrets
./bootstrap.sh update
# ... make changes to configs or secrets ...
# Push everything
./bootstrap.sh pushSecrets are managed with passage and stored in ~/.passage/store/ (encrypted git private repo).
# Add a secret
passage insert api-keys/openai
# View a secret
passage show api-keys/openai
# Edit a secret (opens in nvim)
passage edit api-keys/openai
# Copy to clipboard (auto-clears after 45s)
passage -c api-keys/github-token
# Sync secrets
passage git push
passage git pull~/.passage/store/
├── api-keys/
│ ├── openai.age
│ ├── anthropic.age
│ └── github-token.age
├── projects/
│ └── myproject/
│ └── env.age
└── servers/
└── ssh-keys.age
| Command | Description |
|---|---|
./bootstrap.sh install |
Install tools, link dotfiles, setup passage |
./bootstrap.sh update |
Pull dotfiles + secrets, re-link configs |
./bootstrap.sh push |
Push dotfiles + secrets to GitHub |
Bootstrap automatically installs all required tools:
Core Tools:
- neovim - Text editor
- tmux - Terminal multiplexer
- zsh - Shell
- starship - Prompt
- ghostty - Terminal emulator (macOS)
CLI Utilities:
- eza - Modern ls replacement
- yazi - Terminal file manager
- zoxide - Smart cd
- nvm - Node version manager
- oxfmt - OXC formatter for JS/TS and related files
- oxlint - OXC linter for JS/TS and related files
Secrets Management:
- age - Encryption
- passage - Password manager
- stow - Symlink manager
All configs linked to $HOME via stow.
Install Yazi and the optional preview/search dependencies with Homebrew:
brew install yazi ffmpeg sevenzip jq poppler fd ripgrep fzf zoxide resvg imagemagick font-symbols-only-nerd-fontGhostty supports Yazi image previews out of the box. The Zsh config in this repo intentionally avoids overwriting TERM so Ghostty can be detected correctly.
Age key (~/.config/age/keys.txt) is critical. Without it, no secrets can be decrypted.
Mine backed up in macOS Keychain.
- macOS (Homebrew)
- Debian/Ubuntu (apt)
- Arch Linux (pacman)