dotfiles

Architecture

Core architectural decisions and system design of the dotfiles shell distribution.


Philosophy

System Layout

~/.dotfiles/
├── dot_config/          # Managed application configurations (~/.config/)
│   ├── zsh/             # Modular Zsh rc.d architecture
│   ├── fish/            # Autoloading Fish configuration
│   ├── nushell/         # Structured data shell config
│   ├── shell/           # Shared logic (aliases, paths, functions)
│   └── ...              # 50+ tool configurations (nvim, tmux, ghostty, etc.)
├── dot_local/           # Local binaries and scripts (~/.local/bin/)
├── .chezmoitemplates/   # Unified source for aliases, functions, and paths
├── scripts/             # Internal libraries and diagnostics
├── nix/                 # Nix Flake for deterministic toolchains
├── lib/wasm-tools/      # Rust source for Wasm utilities
└── install.sh           # Universal bootstrap script (zero dependencies)

Shell Startup Strategies

Shared: _cached_eval

Across Zsh, Fish, and Bash, an idempotent caching wrapper avoids redundant tool initialization (Starship, Zoxide, Atuin).

  1. Intercept — check if a cached version of the tool’s eval output exists in ~/.cache/shell/.
  2. Validate — compare the cache timestamp against the tool binary’s mtime.
  3. Bypass — if valid, source the cached text directly, saving 20-50ms per tool.

Lazy-Hydration Model

To reach a fluid first-prompt target (< 50ms), the shell uses a three-phase startup:

  1. Phase 1 (Visual Paint) — render the prompt immediately using static escape codes.
  2. Phase 2 (Async Hydration) — dispatch tool initializations (mise, atuin, etc.) to background workers.
  3. Phase 3 (On-Demand Activation) — environment hydration occurs on first user interaction or after 500ms of idle time.

Artifact Mode

A minimal environment triggered by DOTFILES_ARTIFACT_MODE=1.


Ultra-Fast Mode

Set DOTFILES_ULTRA_FAST=1 to skip all non-essential initialization. Only core paths, aliases, and the prompt are loaded. Useful for:


Debug and Trace Modes

DOTFILES_DEBUG=1

Enables verbose diagnostic output during shell startup. Prints which files are sourced and their load times.

DOTFILES_TRACE=1

Enables set -x tracing for the entire shell startup sequence. Output is written to ~/.local/state/dotfiles/debug.log for post-mortem analysis.


Function Groups (groups.json)

Functions are organized into groups defined in .chezmoitemplates/functions/groups.json:

Group Functions Description
api apihealth, apilatency, apiload API testing utilities
curl curlheader, curlstatus, curltime, httpdebug HTTP debugging
text encode64, kebabcase, lowercase, titlecase, … Text transformation
system environment, freespace, hostinfo, myproc, sysinfo System introspection
files backup, extract, hexdump, hiddenfiles, size, zipf File operations
interactive banner, emoji, matrix, rainbow, stopwatch Terminal fun
nav cdls, goto, ql Navigation shortcuts
security genpass, keygen, mount_read_only Security utilities
misc dothelp, view-source, prependpath, caffeine Miscellaneous

Groups are lazy-loaded: stub functions are defined at startup, and the real implementation is loaded on first invocation. This keeps startup fast while providing 52+ functions on demand.

The groups.json schema maps group names to arrays of relative paths (including subdirectory):

{
  "group_name": ["group_name/function1.sh", "group_name/function2.sh"]
}

Each .sh file lives in a subdirectory matching its group and defines a single function with the same name as the file (minus .sh extension).