For linux, see linux/README.md instead for the full headless server setup flow.
First, install Xcode along with command line tools:
xcode-select --installThen run the install script:
./install.shThis will automatically discover and symlink:
- All root-level dotfiles (
.zshrc,.gitconfig,.gitignore, etc.) to your home directory - Everything in
.config/to~/.config/(e.g.,.config/ghostty/→~/.config/ghostty/) - Contents of other dot directories (e.g.,
.claude/commands/→~/.claude/commands/,.claude/settings.json→~/.claude/settings.json)
The script supports both macOS and Linux. On Linux, it will use Linux-specific configs from the linux/ folder.
To remove all symlinks:
./install.sh uninstallEverything is auto-discovered - just add files to the repo:
XDG-compliant apps (modern apps using ~/.config/):
# Create config in .config/
mkdir -p dotfiles/.config/nvim
echo "set number" > dotfiles/.config/nvim/init.vim
# Run install - auto-discovered!
./install.sh
# Result: ~/.config/nvim/ → dotfiles/.config/nvim/Other dot directories (partial directory linking):
# Add files/folders to any dot directory
mkdir -p dotfiles/.aws
echo "[default]" > dotfiles/.aws/config
# Run install - auto-discovered!
./install.sh
# Result: ~/.aws/config → dotfiles/.aws/configGlobal gitignore:
.gitignorein repo root → symlinked to~/.gitignore(global gitignore)
Files are excluded automatically:
- Gitignored files (like
.claude/settings.local.json) won't be symlinked - Script files (
install.sh,README.md) won't be symlinked
If a file already exists at the target location, the installer will prompt you to:
[s]kip- Skip this file[S]kip all- Skip all future conflicts[o]verwrite- Replace the existing file[O]verwrite all- Replace all future conflicts[b]ackup- Move existing file to.backupextension[B]ackup all- Backup all future conflicts
Install Meslo
Commands starting with private- are gitignored for sensitive/machine-specific commands.
Install oh-my-zsh
Install p10k
Install zsh-autosuggestions
Install brew. Then run:
brew install git postgresql@14 redis libyaml libffi cmake imagemagick graphviz ffmpeg yarn libxml2 ansible jq watchman cocoapods
brew tap facebook/fb
brew install idb-companion
mkdir -p ~/Library/LaunchAgents
# Note: replace `postgresql@14` with the version you installed:
ln -sfv /opt/homebrew/opt/postgresql@14/*.plist ~/Library/LaunchAgents
ln -sfv /opt/homebrew/opt/redis/*.plist ~/Library/LaunchAgents
echo $UID => 501
launchctl enable gui/501/homebrew.mxcl.postgresql
launchctl enable gui/501/homebrew.mxcl.redis.plist
brew services start postgresql@14
createuser -s postgres
yarn cache clean
xcrun simctl delete unavailable
OmniDiskSweeper: https://www.omnigroup.com/more/
Clear old iOS device support folders at open ~/Library/Developer/Xcode/iOS\ DeviceSupport
Go to https://github.com/settings/tokens/new and create a repo scope access token. Then run:
bundle config --global github.com [GITHUB_USERNAME]:[ACCESS_TOKEN]
If allowing Remote Login, add these in target computer's /etc/ssh/sshd_config to allow only public key authentication:
PasswordAuthentication no
ChallengeResponseAuthentication no
and then modify target computer's ~/.ssh/authorized_keys to include the public key of the source computer.