Skip to content

Environment variables

Complete reference for DF_* variables and the tool-standard ones this repo cares about. All DF_* flags are read in install/_lib.sh or bootstrap.sh. Set in your shell, prepend to a single command, or persist via chezmoi data.

VarDefaultWhat it does
DF_NAME(prompts)Display name. Pre-seed to skip the chezmoi prompt on first run.
DF_EMAIL(prompts)Email. Pre-seed to skip the chezmoi prompt on first run.
DF_REPOcadebrown/dotfilesGitHub owner/repo slug used by curl-bootstrap. Override to fork.
DF_PATH(auto-detect)Where the repo lives. Local runs use the script directory; piped runs clone to $HOME/dotfiles.
DF_LINK$HOME/dotfilesSymlink in $HOME that points at DF_PATH.
DF_DIRSdev:bones:miscColon-separated list of subdirs created in $HOME by install/dirs.sh.
VarDefaultWhat it does
DF_USE_PLAT0Per-PLAT directory isolation. 1 enables $LOCAL_PLAT=$HOME/.local/$PLAT; 0 collapses to $HOME/.local. Accepts 1|true|yes|on (case-insensitive). See PLAT isolation.
DF_BREW_UPGRADE0Whether to upgrade existing formulae/casks. Auto-set to 1 in upgrade mode on both platforms.
DF_BREW_DOWNLOAD_CONCURRENCY4Maximum simultaneous Homebrew bottle/cask downloads.
DF_BREW_UPGRADE_CASKSautoUpgrade greedy casks with a cached sudo ticket, maintained by interactive bootstrap; set 0 to skip or 1 to explicitly enable the upgrade path.
DF_SUDOautoOn macOS, authenticate once in an interactive terminal and maintain the sudo timestamp until bootstrap exits. Unattended runs only refresh existing authentication. Set 0 to disable the helper. Linux never uses it.
DF_STRICT_UPGRADE1Run install/audit-versions.sh --strict after bootstrap.sh upgrade; set 0 for a report-only audit.
DF_MCP_PROFILESunset: all in Codex, core in other harnessesColon/comma/space-separated MCP profiles. * selects all; core or explicitly empty selects core only. Core servers are always selected. Codex’s ordinary sync enables all managed servers unless this variable explicitly narrows the set.
DF_CURSOR_WORKER1 when Cursor setup runs on macOS0 bootouts and disables the My Machines computer-use LaunchAgent.
DF_CURSOR_WORKER_NAMEhostname -sMy Machines worker name. Runtime-only so NFS templates stay identical.
DF_CURSOR_WORKER_DIRSemptyExtra colon-separated --worker-dir paths for df-cursor-worker.
DF_DEBUG0Set to 1 for verbose [dbug] output with timing info on every run_logged command.
DF_FORCE0Used by install/plat-decommission.sh to skip the deletion confirmation prompt.
DF_CARGO_STRATEGIES(unset)Override cargo binstall --strategies. E.g. compile to skip GitHub release fetchers (useful behind a VPN).
VarDefaultWhat it does
DF_SCRATCH(unset)Path to scratch root. Setting this enables scratch mode (symlinks heavy $HOME dirs).
DF_SCRATCH_LINK$HOME/scratchThe $HOME symlink that points at scratch. Bootstrap creates this if DF_SCRATCH is set.
DF_LINKS~/.local:~/.cache:~/.cass:~/.vscode:~/.vscode-server:~/.cursor-server:~/.nv:~/.npm:~/.oh-my-zsh:~/.oh-my-zsh-custom:~/kb:~/.computelab:~/.agent-browser:~/.gradleColon-separated top-level dirs to redirect to scratch. TinyTeX lives below $LOCAL_PLAT; ~/.cursor is chezmoi-owned.
DF_CONFIG_LINKSCodeColon-separated ~/.config subdir names to redirect to scratch (never ~/.config itself — chezmoi owns it).
DF_CURSOR_LINKSprojects:worktreesColon-separated ~/.cursor subdir names to redirect to scratch (never ~/.cursor itself — chezmoi owns it).
DF_CLAUDE_LINKSprojects:plugins:file-historyColon-separated ~/.claude subdir names to redirect to scratch (never ~/.claude itself — chezmoi owns it). Drop projects to keep history + memory on NFS.
DF_CODEX_LINKSsessions:generated_images:cache:plugins:attachments:shell_snapshots:log:backups:.tmp:tmpColon-separated ~/.codex subdir names to redirect to scratch (never ~/.codex itself). Top-level *.sqlite files ride along. Set empty to skip ~/.codex entirely.

The five *_LINKS vars treat a set-but-empty value as “migrate nothing here”; unset restores the default.

See Scratch space.

Each DF_DO_* flag defaults to 1 (run) except where the table says otherwise. Set a flag to 0 to skip it.

VarStepSkips
DF_DO_SCRATCH0Scratch space symlink setup (auto-0 in update/upgrade modes)
DF_DO_DIRS0.1~/dev, ~/bones, ~/misc creation
DF_DO_PACKAGES4Homebrew + brew bundle
DF_DO_LLDB4LLDB debugger and lldb-dap adapter
DF_DO_MACOS_SERVICES5Colima service registration (macOS)
DF_DO_MACOS_SETTINGS5.5Dock/Finder/keyboard/etc. defaults (macOS)
DF_DO_MACOS_QUICK_ACTIONS5.6Finder Quick Actions install (macOS)
DF_DO_ZSH3oh-my-zsh + plugins
DF_DO_PYTHON6uv + per-tool isolated venvs
DF_DO_NODE6nvm + Node.js + global npm packages
DF_DO_RUST6rustup + cargo tools
DF_DO_GO6Go CLI tools from go.txt
DF_DO_JULIA6Juliaup release channel and PLAT-isolated depots
DF_DO_LEAN6Lean 4 toolchain (elan + the pinned default toolchain)
DF_DO_LATEX6TeX distribution (MacTeX verify on macOS, TinyTeX on Linux)
DF_DO_QUARTO4Quarto cask verification on macOS or rootless release install on Linux
DF_DO_CLAUDE6Claude Code binary + plugins + MCP servers + overlay skills
DF_DO_CODEX6Codex CLI binary + managed config + hooks
DF_DO_CLAUDE_DESKTOP6Claude Desktop tracked preferences (macOS)
DF_DO_CODEX_DESKTOP6Codex desktop app tracked preferences (macOS)
DF_DO_LINEARMOUSE6LinearMouse tracked settings (macOS)
DF_DO_CURSOR6Cursor settings, MCP, CLI merge, extensions, and My Machines worker. Defaults to 1 on macOS and 0 on Linux; set 1 explicitly when a Linux Cursor CLI is installed.
DF_DO_VSCODE6VS Code settings + extensions. Defaults to 1 on macOS and 0 on Linux; set 1 explicitly when a Linux code CLI is installed.
DF_DO_CMAKE6CMake toolchain file deployment
DF_DO_LOCAL_LLM6.5Local LLM tooling (HuggingFace cache + binary checks). Defaults to 0 for DF_PROFILE=core, 1 for full; explicit overrides are retained.
DF_DO_OPENCODE6.5OpenCode config reconciliation, independent of local inference. Defaults to the value of DF_DO_NODE (normally 1).
DF_DO_MEMORY6.6Agent memory stack (cass + qmd + ~/kb + daemons)
DF_DO_SKILLS6.65Agent skills from agent-skills.txt
DF_DO_BLENDER_MCP6.7Default 1 on macOS, 0 on Linux. Set to 0 to skip the Blender MCP addon.
DF_DO_AUTH7Default 0. Set to 1 to run interactive token setup.
DF_DO_OVERLAYS8Skip all overlay bootstrap scripts

Internal (set by _lib.sh, not user-facing)

Section titled “Internal (set by _lib.sh, not user-facing)”

These are exported by _lib.sh for install scripts to consume — don’t override unless you know why.

VarSourceValue
OS_lib.shdarwin or linux
ARCH_lib.shx86_64 or aarch64 (normalized)
PLAT_lib.shDetected platform name (e.g. plat_Darwin_arm64); empty if no spec matches
LOCAL_PLAT_lib.shInstall root: $HOME/.local (flat) or $HOME/.local/$PLAT (PLAT-on)
ARCH_BIN_lib.sh$LOCAL_PLAT/bin
RUSTUP_HOME_lib.sh$LOCAL_PLAT/rustup
CARGO_HOME_lib.sh$LOCAL_PLAT/cargo
CARGO_TARGET_DIR_lib.sh$LOCAL_PLAT/cargo-build (workaround for macOS Sequoia ar/ld in /var/folders/)
NVM_DIR_lib.sh$LOCAL_PLAT/nvm
ELAN_HOME_lib.sh$LOCAL_PLAT/elan (Lean toolchains — arch-specific, ~1.5 GB each)
JULIAUP_DEPOT_PATH_lib.sh$LOCAL_PLAT/julia/juliaup
JULIA_DEPOT_PATH_lib.sh$LOCAL_PLAT/julia/depot (compiled per-arch artifacts)
UV_TOOL_BIN_DIR_lib.sh$ARCH_BIN (where uv tool entrypoints land)
UV_TOOL_DIR_lib.sh$LOCAL_PLAT/uv/tools (per-tool venvs)
UV_PYTHON_INSTALL_DIR_lib.sh$LOCAL_PLAT/uv/python (uv-managed Python)
PYTHON_ENV_lib.sh$LOCAL_PLAT/python (small environment behind plain python, including packages/python.txt)
CONAN_HOME_lib.sh$LOCAL_PLAT/conan2
DF_ROOT_lib.shThe dotfiles repo root (parent of install/)
DF_PACKAGES_lib.sh$DF_ROOT/packages
DF_OVERLAYS_lib.shBash array of discovered dotfiles-*/ overlay paths
DF_INSTALL_DIRbootstrap.sh$DF_ROOT/install
DF_MODEbootstrap.shinstall, update, or upgrade
GIT_CONFIG_GLOBAL_lib.shForced to /dev/null so install scripts aren’t affected by SSH-rewriting gitconfig

These get cached in ~/.config/chezmoi/chezmoi.toml on first init and don’t re-prompt:

chezmoi data keySourceNotes
nameDF_NAME env or interactive promptUsed in templates as {{ .name }}
emailDF_EMAIL env or interactive promptUsed in templates as {{ .email }}
use_platDF_USE_PLAT env or false defaultUsed in templates as {{ .use_plat }} to gate PLAT-isolated paths

Edit ~/.config/chezmoi/chezmoi.toml directly to change these without re-running chezmoi init.