My daily configs for zsh, starship, yabai, skhd, JankyBorders, Alacritty, Ghostty, herdr, tmux, VS Code, and agent skills.
macOS only. yabai and skhd handle tiling and hotkeys, and the Brewfile tracks everything installed through Homebrew.
Everything is symlinked into your home via GNU Stow.
- Ghostty: terminal config and every shortcut it keeps or hands to herdr.
- herdr: multiplexer shortcuts for tabs, panes, and workspaces, plus who owns the number row.
- macOS window management: yabai and skhd shortcuts, Spaces, and troubleshooting.
The installer bootstraps Homebrew when necessary and installs the tracked
formulas and applications from Brewfile, stow included. Then:
./install.sh
The script will ask if you want to back up your current configs first (recommended). After that it unstows any existing links, sets up the symlinks, and installs editor extensions from extensions/vscode.txt into VS Code.
The Brewfile restores the command-line tools and desktop apps, including VS Code, Ghostty, Chrome, Docker, yabai, and skhd. The installer then starts the window-manager launchd services and configures VS Code as the default text/code editor. Grant yabai and skhd access in System Settings → Privacy & Security → Accessibility.
Imperative macOS defaults live in system/macos/apply-defaults.sh. The normal
installer runs it automatically, and you can re-apply those settings directly:
./system/macos/apply-defaults.sh
All explicitly installed formulas, casks, and taps are tracked in Brewfile.
To refresh it after installing or removing software:
./install.sh --save-brewfile
The normal installation command runs:
brew bundle install --no-upgrade --file=./Brewfile
It installs missing items without upgrading existing packages and does not remove unrelated software.
The tracked yabai setup provides BSP tiling, directional focus and movement, resizing, dynamic Spaces, stacking, sticky/PiP windows, scratchpads, opacity, animations, layers, and layout controls. Its advanced profile uses yabai's scripting addition when System Integrity Protection is partially disabled.
See docs/macos-window-management.md for the complete shortcut reference and troubleshooting commands. The number row is shared with herdr; docs/herdr.md has the split.
The shared extension list is tracked in:
extensions/vscode.txt
VS Code installs from this file. When saving the list, the
code CLI is used.
To refresh it:
./install.sh --save-extensions
To put a previous backup back (unstow and copy files from backup):
./install.sh --restore
Backups are stored in ~/.dotfiles-backup-YYYYMMDD-HHMMSS. You pick one from the list and the script does the rest.
- Re-apply everything:
./install.sh - Unstow one package:
stow -t ~ -D <package> - Update editor extension lists:
./install.sh --save-extensions - Update the Homebrew inventory:
./install.sh --save-brewfile