Personal terminal environment for macOS — Ghostty, tmux, and modern CLI tools, all themed with Catppuccin Mocha.
| Tool | Replaces | What it does |
|---|---|---|
| Ghostty | Terminal.app | GPU-accelerated terminal emulator |
| tmux | — | Terminal multiplexer with session persistence |
| Starship | default prompt | Minimal prompt showing directory, git, command duration |
| eza | ls |
File listing with icons and colors |
| bat | cat |
Syntax highlighting and line numbers |
| delta | git diff |
Beautiful side-by-side diffs |
| fzf | Ctrl+T | Fuzzy finder for files and more (Ctrl+R taken by atuin) |
| atuin | Ctrl+R |
Encrypted shell history sync across all machines (self-hosted or Atuin Cloud) |
| Bitwarden Desktop / rbw | ssh-agent / secret store | SSH keys + passwords synced from self-hosted Vaultwarden. Built-in SSH agent on both macOS (Desktop app) and Linux (rbw). |
| zoxide | cd |
Smart directory jumping that learns your habits |
| glow | — | Render markdown beautifully in the terminal |
| nano | macOS nano | Modern nano with syntax highlighting |
| gh | — | GitHub CLI |
All visual tools use the Catppuccin Mocha color scheme.
git clone https://github.com/sebstrgg/dotfiles.git ~/dotfiles
cd ~/dotfiles
./install.shThe install script:
- Installs Homebrew (if missing)
- Installs all packages from the Brewfile
- Symlinks all config files to their expected locations
- Installs Catppuccin themes for bat, delta, and zsh-syntax-highlighting
- Sets up TPM (tmux plugin manager)
- Optionally authenticates with GitHub CLI
After install, open Ghostty and press Ctrl+a I (capital i) to install tmux plugins, then Ctrl+a r to reload.
SSH keys and secrets sync from self-hosted Vaultwarden (or Bitwarden cloud). Full setup + migration runbook: docs/bitwarden-rbw-setup.md.
Atuin syncs encrypted shell history across all machines. The installer prompts for your server URL (self-hosted or Atuin Cloud) and handles registration interactively.
First device (create the account):
atuin register -u <username> -e <email>
atuin key # PRINT AND SAVE — needed on every other device
atuin syncAdditional devices (join the existing account):
atuin login -u <username> -k <key-from-first-device>
atuin import auto # import local shell history into Atuin
atuin syncCtrl+R searches across all machines. Up-arrow stays session-local (configured in atuin/config.toml).
These commands now work differently (better):
| You type | What happens now |
|---|---|
cat file.py |
Syntax-highlighted output with line numbers (bat) |
ls |
Colored listing with file type icons (eza) |
ll |
Detailed listing with icons (eza -la) |
lt |
Tree view, 2 levels deep (eza --tree) |
git diff |
Side-by-side diff with Catppuccin colors (delta) |
git log -p |
Syntax-highlighted patches (delta) |
cd projects |
Jumps to your most-visited matching directory (zoxide) |
Ctrl+R |
Fuzzy search through shell history, synced across machines (atuin) |
Ctrl+T |
Fuzzy search for files (fzf) |
glow README.md |
Rendered markdown in the terminal |
nano file.py |
Syntax-highlighted editing |
catp file.py |
Like cat but with scrollable pager |
gs, gl, gd |
git status, git log, git diff shorthand |
.., ..., .... |
Move up 1/2/3 directory levels |
ta, tn, tls, tk |
tmux attach / new / list / kill-session |
dotfiles/
├── ghostty/config Ghostty terminal config
├── tmux/
│ ├── tmux.conf tmux config (prefix: Ctrl+a)
│ └── cheatsheet.sh Ctrl+a ? cheat sheet popup
├── starship/starship.toml Starship prompt config
├── zsh/.zshrc Shell config (aliases, plugins, tool init)
├── zsh/.zshrc.local.example Template for machine-local overrides (gitignored)
├── git/
│ ├── .gitconfig Git config (delta, identity)
│ └── catppuccin.gitconfig Catppuccin Mocha theme for delta
├── bat/
│ ├── config bat config (theme)
│ └── themes/ Catppuccin Mocha .tmTheme
├── nano/.nanorc nano config
├── vim/.vimrc vim config
├── zsh-syntax-highlighting/ Catppuccin theme for zsh highlighting
├── scripts/doctor.sh Drift detection & repair tool (run: dots-doctor)
├── Brewfile All Homebrew dependencies
└── install.sh Bootstrap script
Configs are symlinked from this repo into your home directory. Apps that rewrite
their own config atomically (Claude Code's settings.json) are seeded
(copied) instead, since they'd break a symlink. Two commands keep things healthy:
dots-doctor # check symlinks, PATH, portability — exits non-zero on drift
dots-doctor --fix # back up + re-link drifted configs, seed missing onesAliases dots, dots-doctor, and dots-update are defined in .zshrc.
Installer-managed blocks (bun, shell completions, the claude-auto-retry
wrapper, etc.) live in ~/.zshrc.local, not the tracked .zshrc. This
keeps installers that append to your rc from corrupting the committed file.
The first install seeds it from zsh/.zshrc.local.example; edit it freely.
dots-update # git pull ~/dotfiles (alias defined in .zshrc)
dots-doctor --fix # re-link any changed configs, seed missing ones./install.sh is still the full re-run path (idempotent, safe any time), but
after a routine git pull you usually only need dots-doctor --fix.
Uses JetBrains Mono Nerd Font — installed automatically via the Brewfile. Required for eza icons and Starship symbols.
Press Ctrl+a ? inside tmux to see the full cheat sheet, or see tmux/cheatsheet.sh.
- Catppuccin — color scheme across all tools
- Built with Claude Code