Opinionated dotfiles managed via symlinks. Includes configs for:
- aws (config only; credentials are not tracked)
- amazonq subdirectory (non-secret files only)
- brew
- cursor (macOS User settings)
- fish
- git
- gnupg (config only; keys are not tracked)
- kitty
- nvim
- ssh (config only; keys are not tracked)
- tmux
- vscode (macOS User settings)
- zsh
- bash
- macOS or Linux with Bash
- Git
Clone to ~/.dotfiles and run adoption + linking. This moves existing configs into the repo (safe), then symlinks back.
# from anywhere
make adoptYou can preview the actions first:
make dry-runmake install # Create/update symlinks from repo to $HOME
make adopt # Move existing configs into repo, then link
make dry-run # Preview adopt + link without changes
make relink # Remove existing symlinks and re-link
make clean-backups # Delete created backup files (*.bak.*)
make backup-gnupg # Tar.gz backup of ~/.gnupg (do not commit)
make brew-bundle # Install Homebrew packages from ~/.Brewfile
make brew-dump # Export current Homebrew packages to brew/Brewfile- Install Xcode Command Line Tools
xcode-select --install- Install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Add brew to PATH (follow on-screen instructions), e.g. for zsh:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
source ~/.zprofile- Clone dotfiles and link configs
git clone [email protected]:<your-username>/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
make install # or make adopt if preexisting configs exist- Install apps via Brewfile
make brew-bundle # uses ~/.Brewfile (symlinked from repo if present)- Restore editors and shells
- VS Code and Cursor settings are linked automatically
- Open VS Code, sign in to extensions sync if you use it
- Start a new terminal session to load zsh config
- AWS, SSH, and GnuPG
- SSH: add your private keys into
~/.sshmanually if needed; keys are not tracked - AWS:
~/.aws/configandamazonq/are linked; put credentials back into~/.aws/credentials - GnuPG: configs are linked; import keys if needed and verify permissions
- Optional: export current brew state back to repo
make brew-dumpinstall.shis idempotent and supports:--adopt: move existing configs from$HOMEinto this repo--dry-run: print planned actions only--no-backup: disable backup creation
- Existing non-symlink files are backed up as
*.bak.YYYYMMDDHHMMSSbefore being replaced. - SSH: only
~/.ssh/configis managed. Private keys are not touched or tracked. - AWS: only
~/.aws/configand~/.aws/amazonq/**are managed.~/.aws/credentialsis never adopted or linked. - VS Code/Cursor: User-level settings are managed (macOS paths above).
- GnuPG: only
gpg.conf,gpg-agent.conf, anddirmngr.confare managed. Keys and keyrings are never tracked.
zsh/.*->~/.{zshrc,zshenv,zprofile}git/.*->~/.{gitconfig,gitignore,gitattributes}tmux/.tmux.conf->~/.tmux.conftmux/.config/tmux/**->~/.config/tmux/**nvim/.config/nvim/**->~/.config/nvim/**kitty/.config/kitty/**->~/.config/kitty/**fish/.config/fish/**->~/.config/fish/**aws/.aws/config->~/.aws/configaws/.aws/amazonq/**->~/.aws/amazonq/**vscode/Library Application Support/Code/User/{settings.json,keybindings.json,snippets/**}->~/Library/Application Support/Code/User/...cursor/Library Application Support/Cursor/User/{settings.json,keybindings.json,snippets/**}->~/Library/Application Support/Cursor/User/...gnupg/.gnupg/{gpg.conf,gpg-agent.conf,dirmngr.conf}->~/.gnupg/{...}brew/Brewfile->~/.Brewfile
- Keep secrets (SSH keys, tokens, AWS credentials, GnuPG private keys) out of this repo.
- Use
make backup-gnupgto archive your full~/.gnupglocally before changes. - After changing configs in
$HOME, runmake adoptto bring them back into the repo. - After editing files inside this repo, run
make installto re-link to$HOME.