Personal configuration files managed with GNU Stow, organized by platform.
dotfiles/
├── shared/ # cross-platform packages, linked on every machine
│ ├── claude/ # Claude Code user-level CLAUDE.md + project template
│ ├── helix/ # Helix editor (omarchy theme, tmux yazi picker)
│ ├── yazi/ # Yazi file manager
│ └── git-gtr/ # git-worktree-runner (via submodule, see its README)
├── omarchy/ # Arch/omarchy machine (captured from a live omarchy install)
│ ├── bash/ # omarchy-style .bashrc + yy() yazi wrapper + gtr completions
│ ├── tmux/ # C-Space prefix, M-Enter splits (pairs with ghostty CSI-u keybinds)
│ ├── ghostty/ # omarchy dynamic theme include + CSI-u keybinds
│ └── starship/ # minimal cyan prompt
├── macos/ # macOS laptop packages
│ ├── zsh/ # zshrc + zprofile (homebrew, Android SDK)
│ └── nushell/ # nushell in Library/Application Support layout
├── archive/ # retired configs kept for reference, never linked
│ ├── bash-debian/ # old Debian desktop bashrc
│ ├── ghostty/ starship/ nushell/ zellij/ rust/ env_setup_scripts/
└── .git-worktree-runner/ # git submodule (used by shared/git-gtr)
Each package directory mirrors the structure expected relative to $HOME,
e.g. omarchy/bash/.bashrc → ~/.bashrc.
git clone <repo-url> ~/Projects/dotfiles
cd ~/Projects/dotfiles
git submodule update --init --recursiveInstall stow:
omarchy pkg add stow # omarchy
brew install stow # macOSStow will refuse to overwrite existing real files — move them aside first
(e.g. mv ~/.bashrc ~/.bashrc.prestow), then link:
# omarchy machine
stow -d shared -t ~ claude helix yazi git-gtr
stow -d omarchy -t ~ bash tmux ghostty starship
# macOS machine
stow -d shared -t ~ claude helix yazi git-gtr
stow -d macos -t ~ zsh nushellstow -d omarchy -t ~ -R bash # refresh links after adding new files to a package
stow -d omarchy -t ~ -D bash # remove a package's links
stow -n -v -d shared -t ~ helix # dry-run to preview- After
omarchy update, rungit statushere. Omarchy migrations sometimes rewrite files in~/.config/— through a symlink that shows up as a diff in this repo (good: review and commit it); a migration that replaces a file wholesale will silently swap the symlink for a real file (bad: restow the package). - If packages ever move within this repo, unstow (
stow -D) with the old layout before pulling, then restow from the new locations. If you pulled first, clean up dangling links withfind ~ -maxdepth 3 -xtype l -deleteand restow. - The helix
C-yyazi picker only works when helix runs inside tmux; in a bare terminal use helix's built-inspace fpicker. shared/claudelinks only~/.claude/CLAUDE.mdinto the live~/.claude/directory — never symlink the whole directory; it contains runtime state.