Portable development environment configuration.
This repo uses GNU Stow to manage symlinks. Each top-level directory is a "package" that mirrors the structure of your home directory. When you run stow <package>, it creates symlinks from your home directory to the files in that package.
~/dotfiles/starship/.config/starship.toml → ~/.config/starship.toml
~/dotfiles/zsh/.zshrc → ~/.zshrc
Stow figures out the target path by removing the package name prefix. This keeps configs organized and version-controlled while your system sees them in the expected locations.
git clone https://github.com/YOUR_USERNAME/dotfiles.git ~/dotfiles
cd ~/dotfiles
chmod +x install.sh configure.sh
./install.shThe installer will prompt for your user-specific settings (git name, email, GitHub username) on first run.
- Zsh: Shell config with vi mode, history, and modular config files
- Neovim: Editor config with LSP, Treesitter, and Twenty theme
- Ghostty: Terminal config with Twenty theme (hacker edition)
- Starship: Fast shell prompt with Twenty theme
- Tmux: Terminal multiplexer with vim-style navigation
- Git: Global git configuration
- Nix: Portable
~/.config/nix/nix.confplus shell initialization for common installers
dotfiles/
├── ghostty/ # Ghostty terminal → ~/.config/
│ └── .config/
│ └── ghostty/
│ ├── config
│ └── themes/
│ ├── twenty.ghostty
│ └── twenty-dark
├── neovim/ # Neovim → ~/.config/
│ └── .config/
│ └── nvim/
│ ├── init.lua
│ └── colors/
│ └── twenty.lua
├── starship/ # Starship prompt → ~/.config/
│ └── .config/
│ └── starship.toml
├── zsh/ # Zsh configs → ~/
│ ├── .zshrc
│ ├── .zsh_plugins.txt
│ └── .zsh/
├── tmux/ # Tmux config → ~/
│ └── .tmux.conf
├── git/ # Git config → ~/
│ └── .gitconfig
├── nix/ # Nix config → ~/.config/
│ └── .config/
│ └── nix/
│ └── nix.conf
├── brew.txt # Homebrew packages
├── stow-all.sh # Stow all packages
└── install.sh # Setup script
If you don't want to use the install script:
# Install dependencies
brew install stow antidote starship
# Link configs (run from dotfiles directory)
./stow-all.sh
# Install tmux plugin manager
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpmThis repo tracks the portable parts of Nix setup:
nix/.config/nix/nix.conf- shell init in
zsh/.zprofilefor common Nix install layouts
It intentionally does not track machine-specific installer state like launch daemons, APFS volume setup, or installer receipts.
If you want the same installer again, use Determinate Nix:
curl -fsSL https://install.determinate.systems/nix | sh -s -- installFor a few more notes on what is and is not tracked, see docs/nix.md.
Then restow the repo:
./stow-all.shAPI keys and secrets should go in ~/.zsh_secrets (gitignored):
cp zsh/.zsh_secrets.example ~/.zsh_secrets
# Edit and add your secrets- User Settings: Run
./configure.shto update git name/email and GitHub username - Zsh: Add machine-specific configs to
zsh/.zsh/work.zsh - Aliases: Add custom aliases to
zsh/.zsh/aliases.zsh - Functions: Add custom functions to
zsh/.zsh/functions.zsh
cd ~/dotfiles
git pull
./stow-all.sh # Restow every packagecd ~/dotfiles
./stow-all.sh -D # Remove all symlinks