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. - Launch Zen and DBeaver once so they create their profile and workspace.
- Run
./setupto link the public configuration, apply the app preferences, make Zed the default for code and text files, and keep Zen as the web browser. - Open a new login shell and run
mise installto install Go, Java, Node.js, Python, and the Vercel CLI 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 after the first installation.
./setup [--dry] [--target DIR] [--help]
--dryprints every proposed link without changing files.--target DIRtreats another directory as the home directory, which is useful for testing.- Repeated runs leave correct links unchanged.
- Package installation remains separate and explicit through
brew bundle.
The installer assumes Brewfile dependencies and initialized application profiles exist. It uses relative links to individual files and fails on conflicting destinations. When targeting the real home directory it also uses duti to make Zed the macOS handler for common code and text formats and Zen the handler for HTML and web links.
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/bat/config |
~/.config/bat/config |
Terminal ANSI colors inherited from Ghostty |
config/ghostty/config |
~/Library/Application Support/com.mitchellh.ghostty/config.ghostty |
Ghostty font, Monokai Pro theme, and window behavior |
config/lazygit/config.yml |
~/.config/lazygit/config.yml |
Exact Monokai Pro colors for Lazygit |
config/mise.toml |
~/.config/mise/config.toml |
Go, Java, Node.js, Python, and Vercel CLI versions |
config/starship.toml |
~/.config/starship.toml |
Shell prompt |
config/zed/settings.json |
~/.config/zed/settings.json |
Zed fonts, Monokai Pro CE theme, and editor behavior |
Zen's generated profile name is machine-specific, so the installer finds the active profile and links config/zen/user.js there. DBeaver keeps fonts inside its workspace preferences, so the installer merges only the four font keys from config/dbeaver/fonts.prefs.
Install the licensed Söhne, Tiempos Text, and Operator Mono Lig fonts separately before running the installer. The repository references their family names but does not redistribute font files.
- Söhne is the application interface and sans-serif font.
- Tiempos Text is the prose and serif font.
- Operator Mono Lig is the code, terminal, SQL, and monospace font.
- Ghostty supplies Monokai Pro's ANSI palette to bat and Delta. Lazygit stores its exact Monokai Pro colors directly.
Raw theme and font files remain local.
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. Create that private file directly; the installer does not migrate identity from another configuration.
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.
- Corporate-managed applications, Apple App Store applications, and vendor-only hardware utilities remain outside Homebrew.
- Licensed font files and raw Monokai Pro theme files remain local.