Personal macOS development environment configuration files managed with chezmoi.
Apple Silicon (arm64) Macs only. mise.lock resolves tool versions for
macos-arm64, and the Homebrew paths in the shell configuration assume the
Apple Silicon prefix (/opt/homebrew). Intel Macs are not supported.
uname -m # arm64Follow the steps in order. Each step has a check command; do not continue until it passes.
The Homebrew installer also installs the Xcode Command Line Tools when they are missing.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
eval "$(/opt/homebrew/bin/brew shellenv)"
brew install chezmoiCheck:
brew --version
chezmoi --versionThe managed ~/.config/chezmoi/chezmoi.toml uses
~/ghq/github.com/maro114510/dotfiles as its source directory, so clone the
repository there before initializing.
mkdir -p "$HOME/ghq/github.com/maro114510"
git clone https://github.com/maro114510/dotfiles.git "$HOME/ghq/github.com/maro114510/dotfiles"
chezmoi --source "$HOME/ghq/github.com/maro114510/dotfiles" initchezmoi init prompts for the values below and writes
~/.config/chezmoi/chezmoi.toml.
| Prompt | Example | Notes |
|---|---|---|
| Default git email | you@example.com |
Used as the fallback email in all repos |
| Work project directory | ~/ghq/github.com/yourcompany/ |
Leave empty to skip; trailing / required |
| Work git email | you@yourcompany.com |
Leave empty to skip |
| Personal project directory | ~/ghq/github.com/yourhandle/ |
Leave empty to skip; trailing / required |
| Personal git email | you@personal.example.com |
Leave empty to skip |
Per-directory email override files (~/.config/git/config.work,
~/.config/git/config.personal) are created automatically on first run if you
provide the corresponding email. These files are not tracked by chezmoi —
edit them directly if you need to change the email later.
Apply the managed files:
chezmoi applyThe first apply also runs the one-time scripts that set macOS defaults, create
the local git email files, and set up the Raycast memo-search extension. The
Raycast setup reports an error until Bun is installed in step 4. chezmoi keeps
a failed run_once script pending and retries it on the next chezmoi apply
(step 7).
Check that the source path matches the clone location:
chezmoi source-path # $HOME/ghq/github.com/maro114510/dotfilesTo add a new directory context in the future:
chezmoi edit ~/.config/git/config
chezmoi applychezmoi apply already runs brew bundle when ~/.Brewfile changes. Run it
explicitly so the step can be checked and repeated:
brew bundle --file="$HOME/.Brewfile"Check that every entry is present:
brew bundle check --file="$HOME/.Brewfile"Open a new terminal (exec zsh -l) so ~/.local/bin and the mise shims are on
PATH, then install the locked tool versions:
mise install --locked--locked takes download URLs from ~/.config/mise/mise.lock and fails instead
of falling back to the registry when the lockfile has no entry for the current
platform.
Check that nothing is missing:
mise ls --missing # no outputpnpm-policy.sh --applyCheck the policy:
pnpm-policy.sh --checkgh auth loginCheck:
gh auth statusStart a new login shell so sheldon installs the zsh plugins and the mise shims resolve:
exec zsh -lCheck:
command -v nvim # ~/.local/share/mise/shims/nvimInstall the Neovim plugins on first launch:
nvim +'Lazy! sync' +qaBun is available now, so apply once more to finish the Raycast extension setup that was left pending in step 2:
chezmoi applyCheck that the dependency install and build ran:
test -f "$HOME/.raycast/memo-search/raycast-env.d.ts"Finally, register the extension in Raycast: Raycast → Import Extension →
~/.raycast/memo-search.
chezmoi diff # no output
chezmoi status # no output
mise ls --missing # no output
pnpm-policy.sh --check
gh auth statusFetch main in the chezmoi source, review the pending changes, then apply them:
git -C "$(chezmoi source-path)" fetch origin main
git -C "$(chezmoi source-path)" switch main
git -C "$(chezmoi source-path)" merge --ff-only origin/main
chezmoi diff
chezmoi applyCheck that nothing unexpected remains after the apply:
chezmoi diff # no output