A ready-to-use shell setup for your Mac. One command gives you a modern terminal — a clean prompt, command autocompletion, syntax highlighting, and autosuggestions — with nothing to configure.
Linux is supported on a best-effort basis: the installer clones the config and
links ~/.zshrc, but it does not auto-install Homebrew or starship (that
step is macOS-only). Install Homebrew and
starship yourself, then open a new shell.
Open the Terminal app, paste this line, and press Enter:
curl -fsSL https://raw.githubusercontent.com/remerge/dotfiles/main/install.sh | shWarning
The installer takes over ~/.config as a checkout of this repository. If you
already keep configuration there, any file whose path collides with one
tracked in this repo will be replaced. Before changing anything, the
installer lists every file it would overwrite, offers to show the full diff,
and asks for confirmation — and files not tracked by this repo are left in
place. Still, back up anything you care about first.
That's it. The installer will:
- Install Apple's developer tools (for
git) if they're missing. - Set up your shell configuration in
~/.config. - Ask for your name and email to set up your git identity (see below).
- Install Homebrew and everything in the
Brewfile - Opens a fresh shell in Ghostty so you land in a modern terminal.
To update everything later (Homebrew packages and plugins), run:
zupThis updates your Homebrew packages, the ZI plugin manager, and all installed plugins in one go.
During setup the installer asks for your name and email and saves them to
~/.config/git/local, which git uses to author your commits. If you skipped the
prompt (just pressed Enter) or want to change them later, set them from the
command line:
git config --file ~/.config/git/local user.name "Your Name"
git config --file ~/.config/git/local user.email "you@remerge.io"Or edit ~/.config/git/local directly:
[user]
name = Your Name
email = you@remerge.ioUntil it's set, git will ask you to configure your name and email on your first
commit. (Avoid git config --global here — because this repo lives at
~/.config, that may write into the shared git/config instead of local.)
Everything below is set up automatically — the Brewfile installs
the tools and zsh/.zshrc wires each one up when it's present, so
there's nothing for you to configure. This section is a map of the pieces,
grouped by what they do, with a link to each project if you want to learn more.
Homebrew is the macOS package manager — it installs both
command-line programs and native apps. On first launch the config installs
Homebrew (if it's missing) and then everything in the Brewfile –
the prompt, a terminal font with icons, the GNU command-line tools, git, and
the utilities listed below.
Z shell (zsh) is the program that runs your commands —
the default shell on macOS. The configuration starts by forcing a UTF-8 locale,
advertising truecolor, and raising the open-file limit.
ZI is a fast plugin manager for zsh. It installs itself on first launch and then downloads and loads each plugin on demand, keeping startup quick. A few small ZI add-ons support it: one sets sensible default plugin options, another caches command output so it isn't recomputed every launch, and a local helper loads plugins by convention.
Oh My Zsh contributes a handful of
well-worn library files — directory, key-binding, and color defaults plus
terminal-title handling — and the .., ..., .... shortcuts for moving up
directories. Your shell
history is kept
large. Run zup at any time to update Homebrew packages, ZI, and all plugins
in one go.
The XDG base directory standard
defines fixed places for a program's files — configuration in ~/.config,
caches in ~/.cache, and data in ~/.local/share — instead of each tool
scattering its own hidden dotfiles across your home directory. These dotfiles
follow the standard as much as possible: configs, caches, shell and REPL
histories, and package caches for every tool below are wired into their proper
XDG directory, even for tools that need a nudge to comply.
Starship is the prompt — the line shown before your cursor. It displays the current directory, the active git branch and status, and more, and it's fast and highly configurable. It uses Nerd Font icons throughout.
As you type, F-Sy-H colors the command line
— known commands one color, unknown ones another, with strings and paths
highlighted — so you spot typos before pressing Enter.
zsh-autosuggestions suggests
the rest of a command in grey based on your history; press the right arrow (→)
to accept it. zsh-autopair
automatically inserts the matching closing quote, bracket, or parenthesis — and
removes both when you delete one.
Press Tab to complete commands, file paths, options, git branches, and more.
zsh-completions adds many extra
completion definitions on top of sensible, error-correcting defaults, and
fzf-tab turns the completion menu into a
fuzzy-searchable list with file previews. When you type a command that has a
shorter alias, you-should-use
reminds you about it.
Mise manages dev-tool versions, per-project environment variables, and tasks across all languages — when a project pins a specific tool version, mise provides it (OpenTofu is installed through it).
Bun is the all-in-one toolkit for modern JavaScript and TypeScript — a runtime that executes TypeScript directly, plus a bundler, test runner, and package manager in a single fast binary. Biome is the matching formatter and linter for JS, TS, JSON, and CSS.
For projects that haven't moved yet, the classic toolchain is installed too: Node.js, the original JavaScript runtime, and npm, Node's package manager.
Python comes with a virtualenv-first pip and
Homebrew's python/pip on PATH.
uv — an extremely fast Python package and
tool manager — installs standalone Python tools, and zup upgrades them.
argcomplete (installed via uv)
adds tab completion for argparse-based Python programs.
Ruby is set up so Homebrew's Ruby comes first on
PATH, ahead of the outdated one that ships with macOS.
Go gets its GOPATH pointed at the cache directory, and
binaries you install with go install are added to PATH.
Everyday commands get modern replacements.
eza is an ls with icons and git
status, aliased to l and lR. bat is a
cat with syntax highlighting and git integration, and it also colorizes
man pages. duf is a friendlier df,
aliased over it, and ncdu lets you explore disk
usage interactively.
atuin keeps a searchable, optionally
synced shell history (a) — press Ctrl-R to search it — and
fzf is the fuzzy finder that powers
interactive search and the completion menu.
glow renders Markdown right in the terminal. less, the pager, is tuned for case-insensitive search and raw colors.
A few classic workhorses round things out: parallel runs commands in parallel, rsync copies and syncs files fast and incrementally, and wget downloads files over HTTP(S) and FTP(S).
git is the version control system, set up with many
short aliases (s, gl, gd, …) and git-aware completion.
direnv loads and unloads environment
variables per directory from .envrc (da to allow), and
tmux is the terminal multiplexer (T), with
tpm managing its plugins.
For containers, Docker provides the CLI and Colima runs the container VM on macOS, started in the background on demand.
On the cloud side, OpenTofu — the open-source
Terraform fork (tf) — uses a shared plugin cache,
gcloud, the Google Cloud SDK, has completion
enabled and usage reporting off, and PostgreSQL
adds the client tools and headers to PATH for building against libpq.
For secrets, SOPS edits files encrypted
with age, GPG, or cloud KMS, and GnuPG handles
encryption and signing. 1Password is the password
manager and CLI (op) and also provides the SSH agent, which
SSH is wired to when it's available.
Neovim is the default $EDITOR, with vim aliased to
it. VS Code is configured too — its settings,
keybindings, and MCP config are symlinked in.
Ghostty is the fast, native, GPU-accelerated terminal
emulator everything runs in, and Claude — Anthropic's AI
assistant CLI — is along for the ride.
The whole setup is themed with Catppuccin — the soothing pastel theme — in its dark Mocha flavor, so every tool shares the same look. The official Catppuccin port is used wherever one exists:
- starship — the prompt palette
- fzf — the fuzzy finder and completion menu
- bat — syntax highlighting, also used for
manpages - glamour — glow's Markdown rendering
- delta — git diffs
- atuin — the shell-history search
- tmux — the status bar
- bottom — the system monitor
- vim — the editor colorscheme
- vscode — VS Code's theme and icons
Ghostty ships Catppuccin Mocha as a built-in theme; the config simply selects it.
