My configuration environment, managed with GNU Stow and Git Submodules.
Clone recursively to pull down the repo, Oh My Zsh, themes, and plugins in one single command.
git clone --recursive [email protected]:jhileman07/dotfiles.git ~/dotfiles
If the OS created default config files (like .bashrc or .zshrc), delete them so Stow can replace them with symlinks.
rm -rf ~/.zshrc ~/.bashrc ~/.bash_profile ~/.oh-my-zsh
Symlink the configurations to your home directory.
cd ~/dotfiles
stow */
A. Create Local Secrets Create the machine-specific secrets file (ignored by git).
touch ~/.zshrc.local
# Add: export GITHUB_TOKEN="your_token_here"
B. Initialize Tmux Plugins
- Start tmux:
tmux - Press
Prefix+I(Capitali) to install the plugins via TPM.
C. Set Default Shell
chsh -s $(which zsh)
exec zsh
I use Git Submodules for all dependencies. This ensures 100% reproducibility without relying on external install scripts.
- Shell:
zsh/.oh-my-zsh→ Symlinked to~/.oh-my-zsh. - Plugins:
zsh/custom/→ Pointed to by$ZSH_CUSTOMin.zshrc. - Tmux:
tmux/.config/tmux/plugins/tpm→ Symlinked to~/.config/tmux/plugins/tpm.
- Zsh Plugins: The
zsh/customdirectory is ignored by Stow (via.stow-local-ignore) so it doesn't pollute~. The.zshrcpoints directly to the repo path. - Tmux Plugins: The
plugins/folder in Tmux contains a.gitignorethat ignores everything except the TPM submodule. This keeps the repo clean while allowing TPM to download plugins freely.
- Add it as a submodule:
cd ~/dotfiles
git submodule add [email protected]:username/repo.git zsh/custom/plugins/repo
- Add
repoto theplugins=(...)list inzsh/.zshrc. - Commit changes.
Update the repo and all submodules (OMZ, themes, plugins) to their latest remote versions:
git pull
git submodule update --remote --merge