Skip to content

Local Overrides

Machine-local shell quirks live under:

text
~/.config/dotfiles/local.d/

The directory is ignored by chezmoi. Create files on the target machine, not in this source repo.

Files

Use shell-specific files and keep names ordered by load phase:

text
10-env.sh
10-env.fish
10-env.ps1
20-aliases.sh
20-aliases.fish
20-aliases.ps1

Interactive shells source all matching files for their shell in lexical order, after the managed profile has finished. That makes local values the final override without adding host-specific branches to the shared templates.

Noninteractive startup only sources files explicitly marked safe:

bash
# dotfiles: noninteractive-safe
export LOCAL_TOOL_CACHE="$HOME/.cache/local-tool"
fish
# dotfiles: noninteractive-safe
set -gx LOCAL_TOOL_CACHE "$HOME/.cache/local-tool"
powershell
# dotfiles: noninteractive-safe
$env:LOCAL_TOOL_CACHE = Join-Path $HOME ".cache\local-tool"

Leave alias/function files unmarked unless they are genuinely safe in scripts. The marker is intentionally comment-based so the same rule works for Bash, Fish, and PowerShell.

Boundaries

Use local overrides for machine-specific editor paths, temporary PATH additions, or personal aliases that should not become shared workstation policy.

Do not use local overrides as a project environment system. Project variables belong in direnv-managed .envrc and untracked .env.local files. Plaintext tokens should stay in an appropriate secret store or local-only env file with tight permissions rather than being copied into reusable examples.