UNPKG

@sebastienrousseau/dotfiles

Version:

The Trusted Shell Platform — Universal dotfiles managed by Chezmoi. Features Bash & Zsh for macOS, Linux & WSL. Rust modern tooling & enterprise-grade security.

352 lines (229 loc) 7.14 kB
--- render_with_liquid: false --- {% raw %} # Cookbook: Troubleshooting Symptom cause fix. ## Installation ### Symptom: `install.sh` fails with "chezmoi not found" **Cause**: `/usr/local/bin` or `~/.local/bin` not in PATH at install time. **Fix**: ```sh export PATH="$HOME/.local/bin:$PATH" bash -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/master/install.sh)" ``` ### Symptom: "could not create directory ~/.local/share/chezmoi" **Cause**: Permission issue on `~/.local`. **Fix**: ```sh mkdir -p ~/.local/share ~/.local/state ~/.local/bin chmod 755 ~/.local ~/.local/share ``` ### Symptom: Install hangs at "Downloading chezmoi" **Cause**: Slow network or corporate proxy. **Fix**: ```sh export https_proxy=$HTTP_PROXY # if applicable # Or pre-download chezmoi manually brew install chezmoi # macOS apt install chezmoi # Debian 13+ ``` ## Apply / Sync ### Symptom: `dot apply` reports "file modified, skipping" **Cause**: Chezmoi detected local drift on a managed file. **Fix**: ```sh dot diff # see what differs dot apply --force # overwrite local # OR dot add <path> # import local change to source ``` ### Symptom: "template: error calling index" **Cause**: A template references a missing data field. **Fix**: Check that your `.chezmoidata.toml` has the required field. For example: ```sh chezmoi execute-template '{{- $hw := index .hardware .machine -}}{{ $hw.wm }}' ``` If `machine` is not set in your `~/.config/chezmoi/chezmoi.toml`, `index` returns nil. Set: ```toml [data] machine = "macbook-t2" ``` ### Symptom: Apply succeeds but shell doesn't reflect changes **Cause**: Cached init scripts are stale. **Fix**: ```sh dot clean-cache dot prewarm exec $SHELL -l ``` ## Theme ### Symptom: `dot theme` shows no themes **Cause**: No wallpapers discovered, themes.toml not generated. **Fix**: ```sh dot theme rebuild --force ``` ### Symptom: `dot theme <name>` errors "unknown theme" **Cause**: Theme name doesn't exist in `themes.toml`. **Fix**: ```sh dot theme list # see valid names dot theme rebuild --force # regenerate if expected but missing ``` ### Symptom: macOS accent color doesn't update **Cause**: System Settings UI cached the old value. **Fix**: `dot-theme-sync` now calls `killall cfprefsd SystemUIServer Dock "System Settings"`. If it still doesn't refresh: ```sh killall -KILL Dock SystemUIServer sudo killall -KILL cfprefsd ``` Or log out and back in. ### Symptom: Wallpaper not applying **Cause**: Wrong format or missing DE support on Linux. **Fix**: ```sh # Check the wallpaper file exists ls -la ~/Pictures/Wallpapers/ # On Linux, verify HEIC → PNG conversion tool command -v magick || command -v heif-convert || command -v convert # Install if needed: sudo apt install imagemagick-7 ``` ### Symptom: Theme applies but Ghostty doesn't reload **Cause**: Ghostty DBus or SIGUSR2 signaling failed. **Fix**: ```sh # Restart Ghostty manually, or: pkill -USR2 ghostty 2>/dev/null # Or quit+relaunch the app ``` ## Secrets ### Symptom: "could not decrypt: no age key" **Cause**: `~/.config/age/keys.txt` missing or unreadable. **Fix**: ```sh ls -la ~/.config/age/keys.txt # Should be: -rw------- 1 user user chmod 600 ~/.config/age/keys.txt # If missing, restore from password manager or regenerate (requires re-encrypting all secrets) ``` ### Symptom: SOPS says "wrong recipient" **Cause**: Your Age public key isn't listed in the file's recipients. **Fix**: ```sh # Add your public key to .sops.yaml sops updatekeys path/to/file.sops.yaml # Or, ask a recipient to re-encrypt for you ``` ### Symptom: Plaintext leak detected by gitleaks **Cause**: A secret was committed to Git history. **Fix**: ```sh # Immediate mitigation dot verify --security # confirm which file git rm --cached <file> echo "<file>" >> .gitignore git commit -sS -m "fix(security): remove leaked file" # Rotate the leaked secret upstream (it's now public) # Rewrite Git history if needed (requires force-push): git filter-repo --path <file> --invert-paths ``` ## Performance ### Symptom: Shell startup >500ms **Cause**: Heavy modules loaded synchronously. **Fix**: ```sh dot benchmark --detailed # Identify which module is slow # Rebuild caches dot prewarm # Disable heavy modules temporarily # Edit ~/.config/zsh/.zshrc.local (or equivalent) to skip them ``` ### Symptom: `dot doctor` score <70 **Cause**: Multiple health issues. **Fix**: ```sh dot doctor --verbose # see every failure dot heal # auto-fix what's possible dot doctor # recheck ``` ### Symptom: Mise tools not found **Cause**: Mise shim not activated. **Fix**: ```sh eval "$(mise activate zsh)" # or fish, bash dot doctor # confirm ``` ## Build Artifacts ### Symptom: Cargo builds to `target/` instead of `/tmp/builds/cargo` **Cause**: `~/.cargo/config.toml` not managed or was overridden. **Fix**: ```sh chezmoi apply ~/.cargo/config.toml cat ~/.cargo/config.toml | grep target-dir # Should be: target-dir = "/tmp/builds/cargo" ``` ### Symptom: `/tmp/builds/` doesn't exist **Cause**: Created by shell init, but shell wasn't restarted. **Fix**: ```sh mkdir -p /tmp/builds # Or restart shell exec $SHELL -l ``` ## Fleet ### Symptom: `dot fleet attest` hangs **Cause**: A fleet host is unreachable. **Fix**: ```sh # Check connectivity to each host for host in macbook-t2 surface-pro geekom-a9; do ssh -o ConnectTimeout=5 $host 'echo OK' || echo "FAIL: $host" done # Remove unreachable hosts from ~/.config/dotfiles/fleet.toml temporarily ``` ### Symptom: Attestation signature fails **Cause**: Remote host's SSH public key not in local `~/.ssh/allowed_signers`. **Fix**: ```sh # On the remote host: ssh remote-host 'cat ~/.ssh/id_ed25519.pub' # Copy the output and append to your ~/.ssh/allowed_signers ``` ## CI ### Symptom: PR fails on "Shell Lint (Zero Warnings)" **Cause**: `shfmt` formatting differs from canonical. **Fix**: ```sh shfmt -w -i 2 -ci scripts/**/*.sh install.sh .chezmoitemplates/**/*.sh # Commit the changes ``` ### Symptom: PR fails on "100% Coverage" **Cause**: New code added without tests. **Fix**: ```sh bash examples/example-coverage-gate.sh # Identifies uncovered modules # Add a test in tests/unit/<domain>/test_<module>.sh ``` ### Symptom: Checkov SARIF upload times out **Cause**: Known infrastructure flake (Azure runner slow apt mirrors). **Fix**: The workflow already guards this with `hashFiles('reports/checkov.sarif')`. If you see this after the guard was added, check the Checkov step output for errors. ## Getting More Help 1. Check [FAQ](03-faq.md) 2. Read the relevant [concept chapter](../01-concepts/) 3. Open an issue: <https://github.com/sebastienrousseau/dotfiles/issues> When filing an issue, include: ```sh dot doctor --json dot version uname -a chezmoi --version ``` ## See Also - [Self-Healing concept](../01-concepts/05-self-healing.md) - [FAQ](03-faq.md) - [Security: Incident Response](../../security/INCIDENT_RESPONSE.md) {% endraw %}