Skip to content

hollow/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

567 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Remerge dotfiles

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.

The terminal in action: starship prompt, eza, fzf-tab completion, autosuggestions, and bat

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.

Contents

Getting started

Open the Terminal app, paste this line, and press Enter:

curl -fsSL https://raw.githubusercontent.com/remerge/dotfiles/main/install.sh | sh

Warning

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:

  1. Install Apple's developer tools (for git) if they're missing.
  2. Set up your shell configuration in ~/.config.
  3. Ask for your name and email to set up your git identity (see below).
  4. Install Homebrew and everything in the Brewfile
  5. Opens a fresh shell in Ghostty so you land in a modern terminal.

To update everything later (Homebrew packages and plugins), run:

zup

This updates your Homebrew packages, the ZI plugin manager, and all installed plugins in one go.

Set your git identity

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.io

Until 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.)

What you get

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

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.

The shell foundation

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.

XDG base directories

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.

Your prompt and command line

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.

Languages and toolchains

Mise-en-place

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).

JavaScript (state of the art)

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.

JavaScript (legacy toolchain)

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

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

Ruby is set up so Homebrew's Ruby comes first on PATH, ahead of the outdated one that ships with macOS.

Go

Go gets its GOPATH pointed at the cache directory, and binaries you install with go install are added to PATH.

Command-line tools

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).

Development and cloud

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.

Editors and terminal

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.

Catppuccin Mocha everywhere

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 man pages
  • 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.

About

My personal dotfiles

Resources

License

Stars

Watchers

Forks

Contributors