Public, commented configuration for a macOS development laptop. The repository can bootstrap a new machine, but every source is deliberately readable and usable without the installer.
Personal identity, credentials, tokens, absolute home paths, and Neovim configuration are not stored here.
- Install Homebrew with its official installer.
- From this repository, run
brew bundle --file Brewfile. Homebrew installs applications and command-line tools; itsvscodeentries install editor integrations, not language runtimes. - Run
./setupto link the public configuration into the paths expected by each application. - Open a new login shell and run
mise installto install Go, Java, Node.js, and Python from config/mise.toml.
The Brewfile installs mise itself. mise owns the language runtimes, so the Brewfile intentionally does not install separate Homebrew copies of Go, Java, Node.js, or Python.
MacTeX changes the shell path through /etc/paths.d; restart the terminal and VS Code after the first installation so LaTeX Workshop can find latexmk, xelatex, and latexindent.
./setup [--dry] [--skip-vscode] [--target DIR] [--help]
--dryprints every proposed backup and link without changing files.--skip-vscodeleaves existing VS Code settings and keybindings untouched.--target DIRtreats another directory as the home directory, which is useful for testing.- Existing files are moved to collision-safe timestamped backups.
- Repeated runs leave correct links unchanged.
- Package installation remains separate and explicit through
brew bundle.
The installer uses relative links to individual files. It never replaces an entire configuration directory, so unrelated settings remain untouched.
The repository uses visible names even when an application requires a hidden destination.
| Readable source | Normal destination | Purpose |
|---|---|---|
config/zprofile |
~/.zprofile |
Login-shell paths and XDG directories |
config/zshrc |
~/.zshrc |
Interactive shell behavior and tool integrations |
config/zsh-plugins.txt |
~/.zsh_plugins.txt |
Antidote plugin list |
config/gitconfig |
~/.gitconfig |
Public Git behavior without identity |
config/mise.toml |
~/.config/mise/config.toml |
Go, Java, Node.js, and Python versions |
config/starship.toml |
~/.config/starship.toml |
Shell prompt |
config/vscode/settings.jsonc |
~/Library/Application Support/Code/User/settings.json |
VS Code settings |
config/vscode/keybindings.jsonc |
~/Library/Application Support/Code/User/keybindings.json |
VS Code shortcuts |
To copy a file instead of linking it, use the table directly. For example:
cp config/mise.toml ~/.config/mise/config.tomlTo create the same kind of relative link as the installer, run it once with --dry to see every source and destination first.
The public Git configuration includes ~/.gitconfig.local. The installer moves an existing Git name and email into that private file without printing either value, sets mode 0600, and never places the file in this repository.
To create it manually:
git config --file ~/.gitconfig.local --edit
chmod 600 ~/.gitconfig.localGitHub authentication remains in the macOS Keychain and GitHub CLI credential helper; no credential value is stored in the public configuration.
The interactive shell loads ~/.zshrc.local when it exists. Keep machine-specific aliases, internal endpoints, and operational helpers there so they remain private while the public shell configuration stays reproducible.
The templates directory contains reusable, commented defaults:
editorconfigfor whitespace and encoding rules.gitattributesfor consistent LF line endings.lint-staged.config.cjsfor linting, formatting, and type-checking staged TypeScript.prettier.config.cjsfor shared formatting preferences.
The fetch-config zsh function downloads them safely, retains an existing destination as a timestamped backup, and accepts these names:
fetch-config editorconfig
fetch-config gitattributes
fetch-config lint-staged
fetch-config prettier- Neovim configuration is maintained separately.
- Git name, email, credentials, and tokens remain local.
- Prezto, WezTerm, and the old standalone shell helpers are no longer active.
- The VS Code profile is a lean secondary-editor setup rather than the previous extension collection.