Managed with chezmoi.
| App | How |
|---|---|
| Ghostty | Homebrew cask (macOS) |
| fish | Homebrew |
| Maple Mono NF | Homebrew cask (macOS) |
Fish plugins via Fisher:
| Plugin | Purpose |
|---|---|
| Tide v6 | Prompt |
| autopair.fish | Auto-close brackets and quotes |
| pond | Named environment management |
| fzf.fish | Fuzzy-find history, files, processes |
Managed by mise (installed via Homebrew):
| Tool | Version |
|---|---|
| Erlang | latest |
| Elixir | latest |
| Node | latest |
| Rust | latest |
| Go | latest |
| Oh My Pi | latest |
| App | How |
|---|---|
| Obsidian | Homebrew cask (macOS) |
| Tool | What's configured |
|---|---|
| Git | Global identity (name + email via chezmoi template), sensible defaults |
| gh | SSH protocol enforced (prevents gh from silently rewriting remotes to HTTPS) |
| chezmoi | Installed via Homebrew so it self-updates with brew upgrade |
All apps share a coordinated Everforest palette that automatically switches between dark and light when macOS appearance changes — no manual toggle needed.
| App | Dark variant | Light variant |
|---|---|---|
| Ghostty | Everforest Dark Hard | Everforest Light Medium |
| Fish syntax | everforest-medium dark | everforest-medium light |
| Tide prompt | Full Everforest Dark Medium palette | Full Everforest Light Medium palette |
| Oh My Pi | everforest-dark | everforest-light |
-
Run the bootstrap command:
sh -c "$(curl -fsLS get.chezmoi.io)" -- -b /tmp init --apply gh:jcartergh:jcarteris a chezmoi shorthand forhttps://github.com/jcarter/dotfiles. The bootstrap binary is installed to/tmpand is cleaned up automatically; Homebrew owns the permanent chezmoi installation.You will be prompted for your name and email, then chezmoi will:
- Install system dependencies (Linux only)
- Install Homebrew
- Install fish, mise, and ghostty (macOS) via Homebrew
- Install erlang, elixir, node, rust, and go via mise
- Configure git and fish
- Set fish as your default shell (you will be prompted for your password)
After pulling changes to the dotfiles repo:
chezmoi update # pull remote changes and apply~/.omp/agent/config.yml is managed as a whole file. After changing settings through OMP, back up the live file into chezmoi before the next apply:
chezmoi diff ~/.omp/agent/config.yml
chezmoi add ~/.omp/agent/config.ymlUse chezmoi diff first to review what OMP changed. If the live changes are not wanted, run chezmoi apply ~/.omp/agent/config.yml instead to restore the backed-up version.
To upgrade chezmoi itself:
brew upgrade chezmoi # or: chezmoi upgradechezmoi add ~/.some_config # plain file
chezmoi add --template ~/.some_config # file with template variablesUses a Docker container as a clean Linux environment. Requires Docker.
# 1. Tear down any existing container
docker stop chezmoi-test && docker rm chezmoi-test
# 2. Spin up fresh Ubuntu with dotfiles mounted read-only
docker run -d --name chezmoi-test -v "$(pwd)":/dotfiles:ro ubuntu:latest sleep infinity
# 3. Bootstrap the container (minimal prereqs only)
docker exec chezmoi-test bash -c '
apt update && apt install -y curl sudo &&
useradd -m -s /bin/bash testuser &&
echo "testuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers &&
sh -c "$(curl -fsLS get.chezmoi.io)" -- -b /usr/local/bin
'
# 4. Set up chezmoi as testuser and apply
# The config is written manually here because this test flow copies files
# directly and calls 'chezmoi apply', bypassing 'chezmoi init' (which is
# what normally triggers .chezmoi.toml.tmpl on a real new machine).
docker exec chezmoi-test su - testuser -c '
mkdir -p ~/.local/share/chezmoi ~/.config/chezmoi &&
cp -r /dotfiles/. ~/.local/share/chezmoi/ &&
cat > ~/.config/chezmoi/chezmoi.toml <<EOF
[data]
name = "Justin"
email = "justin@example.com"
EOF
chezmoi apply -v
'To re-test after editing files locally without rebuilding the container:
docker exec chezmoi-test su - testuser -c 'cp -r /dotfiles/. ~/.local/share/chezmoi/ && chezmoi apply -v'