Skip to content

evansenter/dotfiles

Repository files navigation

Evan's dotfiles

Minimal macOS/Linux dotfiles for a modern terminal setup with Catppuccin Mocha theming throughout.

What's included

Shell & Config:

  • Zsh - History, completion, custom prompt with command timer
  • Git - Sensible defaults, delta diffs, common aliases
  • Vim/Helix - Catppuccin theme, sensible defaults
  • Tmux - Catppuccin theme, session persistence

Modern CLI tools:

  • bat - cat with syntax highlighting
  • eza - ls with icons and git status
  • fd - Fast find alternative
  • ripgrep - Fast grep alternative
  • fzf - Fuzzy finder
  • zoxide - Smart cd that learns your paths
  • lazygit - Git TUI
  • yazi - Terminal file manager
  • btop - Resource monitor

Tool cheatsheet

Instead of Use Why
ls ls (eza) Icons, colors, git status
ls -la la Long format with hidden files
tree lt Tree view with icons
cat file bat file Syntax highlighting
cd path z partial Jump to frequently used dirs
find -name fd pattern Simpler, faster
grep -r rg pattern Faster, respects .gitignore
git status/add/commit lazygit Visual TUI for git
File browsing yazi Navigate, preview, bulk ops
htop btop Prettier, more info
vim hx Modern editor, LSP built-in

Claude Code Commands

Commands (user-invokable via /name):

Command Description
/work Full development flow: issue → code → PR → merge → reflect
/parallel-work Manage git worktrees for parallel PR development
/im-lost Show current workflow position and context
/pr-create Commit changes and create/update a PR
/pr-review Review code via local analysis or remote reviewer comments
/watch-ci Monitor CI in background with notification when complete
/event-bus-status Overview of active sessions and recent events
/broadcast Send message to other Claude Code sessions
/session-dump Dump recent conversation to file

Agents (invoked via Task tool for background/complex work):

Agent Description
status-report Repo status with recent work, open PRs/issues, and recommendations
summarize-work Summarize current branch work for PR creation
audit-codebase Code quality, anti-patterns, Evergreen violations
audit-tests Test redundancy, staleness, coverage gaps
audit-issues Issue triage, priority alignment, staleness
audit-docs CLAUDE.md, README, and documentation quality
audit-workflows Command contradictions and inconsistencies
improve-workflow Data-driven workflow improvements from session analytics
rfc-create Create RFC-style issues with structured analysis
rfc-respond Respond to RFC-style issues

Usage examples:

# Start tracked work on an issue (full workflow)
/work 42

# Check where you are in the workflow
/im-lost

# Self-review before creating PR
/pr-review local

# Create a PR for current work
/pr-create

# Monitor CI with notification
/watch-ci 123

# Data-driven workflow improvements (agent)
/improve-workflow

Installation

Clone with submodules and run bootstrap:

git clone --recursive https://github.com/evansenter/dotfiles.git
cd dotfiles
./bootstrap.sh

Restart your terminal or run source ~/.zshrc to apply changes.

Setting up a new machine (from scratch)

On a bare macOS install, in order:

  1. Install the Xcode Command Line Tools (provides git, needed before anything else):
    xcode-select --install
  2. Clone with submodules:
    git clone --recursive https://github.com/evansenter/dotfiles.git ~/projects/dotfiles
    cd ~/projects/dotfiles
  3. Create ~/.extra with any secrets before the full bootstrap, so package/MCP setup can use them (see the env vars under CustomizationGITHUB_TOKEN, and on the gateway host OPENCLAW_GATEWAY_TOKEN / OBSIDIAN_API_KEY).
  4. Run the full bootstrap (installs Homebrew if missing, installs packages, inits submodules + themes, symlinks dotfiles, registers MCP servers, installs LaunchAgents, and applies macOS system defaults):
    ./bootstrap.sh -p          # -p = pull + install/update packages, then sync
    The -p run also applies home/.macos (Dock, Finder, keyboard, trackpad, hot corners, etc. — see macOS system defaults) and restarts Dock/Finder. Re-running ./bootstrap.sh -f later is safe and idempotent (and restores symlinks that atomic-writing tools like btop/zellij/CC replace) — but -f does not touch system defaults, so it won't restart your Dock.
  5. Restart the terminal (or source ~/.zshrc).
  6. Manual post-install steps (bootstrap can't automate these):
    • tmux: press prefix + I to install TPM plugins.
    • iTerm2: import the Catppuccin color preset (preferences/ / vendor/iterm-catppuccin/).
    • zellij: zellij kill-all-sessions so the symlinked config is picked up (hot-reload doesn't work with symlinks).
    • btop dark-mode switching (optional): brew install cormacrelf/tap/dark-notify then re-run ./bootstrap.sh -f.
    • Gateway host only: open Obsidian with the Local REST API plugin enabled (obsidian-mcp's wrapper backs off until it's reachable).

Optional dependencies

Dark mode theme switching (btop):

brew install cormacrelf/tap/dark-notify
./bootstrap.sh  # Re-run to install LaunchAgent

Claude Code (commands, hooks, settings symlinked to ~/.claude/):

./bootstrap.sh  # Symlinks commands/, hooks/, settings.json, CLAUDE.md

Also installs the GitHub MCP server and enables a curated set of official plugins (see enabledPlugins in home/.claude/settings.json). Several integrations read secrets from ~/.extra (not tracked):

export GITHUB_TOKEN="ghp_your_token_here"   # GitHub MCP / gh
export OPENCLAW_GATEWAY_TOKEN="..."         # OpenClaw gateway client
export OBSIDIAN_API_KEY="..."               # obsidian-mcp (gateway host only; wrapper exits without it)

Updating

Pull latest and sync:

cd dotfiles
./bootstrap.sh -f -p
git submodule update --init --remote

Uninstalling

cd dotfiles
./uninstall.sh

Structure

dotfiles/
├── home/           # Synced to ~/ on install
│   ├── .aliases
│   ├── .bin/
│   ├── .claude/
│   │   ├── CLAUDE.md            # Global workflow preferences
│   │   ├── commands/            # Custom slash commands
│   │   ├── agents/              # Background task agents
│   │   ├── skills/              # Auto-applied domain expertise
│   │   ├── contrib/             # Shared scripts for hooks/commands
│   │   ├── hooks/               # Lifecycle event hooks
│   │   ├── statusline-command.sh  # Statusline provider script
│   │   └── settings.json        # Plugins and hook config
│   ├── .exports
│   ├── .gitconfig
│   ├── .tmux.conf
│   ├── .vim/
│   ├── .vimrc
│   ├── .zsh_prompt
│   └── .zshrc
├── vendor/         # Git submodules (themes)
├── preferences/    # App config backups
├── LaunchAgents/   # macOS LaunchAgent templates
└── bootstrap.sh

Customization

Create ~/.extra (not tracked) for personal settings:

# ~/.extra
export CUSTOM_VAR="value"
alias myalias="some command"

macOS system defaults

home/.macos is a faithful snapshot of intentional macOS system settings — Dock (autohide, size, hot corners), Finder (hidden files, list view, path bar), keyboard/text (show extensions, no auto-correct, traditional scrolling), trackpad (tap-to-click, three-finger drag), Stage Manager off, en_GB locale, and a few misc tweaks. It's applied automatically by ./bootstrap.sh -p; you can also re-run it any time:

~/.macos        # (symlinked) or: bash home/.macos

It's macOS-only, idempotent, and restarts Dock/Finder/SystemUIServer to apply. To change settings, edit home/.macos (it's a plain defaults write script).

Not captured (can't be, via defaults): iCloud/Apple-ID settings, Login Items, TCC permissions, network/Wi-Fi, Touch ID, and sandboxed apps (Safari, Control Center) — configure those manually.

Credits

Based on Mathias Bynens' dotfiles, heavily simplified.

About

.files

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors