mirror of
https://github.com/Xevion/dotfiles.git
synced 2025-12-05 23:14:46 -06:00
- Distinguish between regular templates and partials for variable access - Document how partials receive context via explicit parameters - Add examples for both template types with correct syntax - Templatize global CLAUDE.md for platform-specific shell environment sections - Add conditional rendering for Windows, WSL, and Linux environments
5.8 KiB
5.8 KiB
Chezmoi Dotfiles Repository - AI Assistant Guidelines
Repository Context
This is a chezmoi source directory for managing dotfiles across multiple machines. Files here are SOURCE files that get templated and deployed to the home directory.
Key Concepts
Source vs Target Pattern:
- Source:
~/.local/share/chezmoi/home/dot_bashrc.tmpl(what you edit) - Target:
~/.bashrc(what gets deployed afterchezmoi apply) - Edit source files only. DO NOT modify target files directly.
File Naming Conventions:
dot_.(e.g.,dot_bashrcbecomes~/.bashrc).tmplsuffix Go template file (rendered with platform detection)private_prefix 600 permissionsencrypted_*.ageage-encrypted files (safe to commit)run_onchange_*executable scripts that run during apply
Template System:
- Uses Go templates with platform detection
- Two types of templates with different variable access patterns:
- Regular templates (e.g.,
home/dot_bashrc.tmpl): Direct access to Chezmoi context- Built-in:
.chezmoi.os,.chezmoi.homeDir - Custom data:
.wsl,.chassis
- Built-in:
- Partials (reusable templates in
home/.chezmoitemplates/): Must receive context via explicit parameter- Partials don't have automatic access to Chezmoi's context
- Context passed as parameter (commonly
data) when calling the partial - Access everything through parameter:
.data.chezmoi.os,.data.wsl,.data.chassis
- Regular templates (e.g.,
- Conditional rendering for Windows/Linux/macOS/WSL
Secret Management:
- Age encryption for sensitive files (recipient:
age1s3ctpj9lafl6qwyvd89sn448us7gdzd53d8yyhsc7zny78c0k4sqerrkze) - Doppler integration for API keys/tokens
- Encryption key bootstrapped via hooks from Doppler
Hooks:
.init_pre.tsand.update_pre.ts(TypeScript via Bun)- Bootstrap encryption key from Doppler before apply
- Handle
chezmoi initandchezmoi update --init
GPG Configuration (WSL-only):
~/.gnupg→ Symlink to Windows GPG directory (C:\Users\Xevion\AppData\Roaming\gnupg)/usr/local/bin/gpg→ Symlink to Windowsgpg.exe(viarun_onchange_before_setup-wsl-gpg.sh.tmpl)- Enables native Windows Qt5 pinentry GUI for passphrase prompts
- Automatic setup on WSL; ignored on regular Linux
Critical Restrictions
NEVER Do These Actions
-
DO NOT apply changes to filesystem
- NO
chezmoi apply - NO direct file writes to
~/.bashrc,~/.gitconfig, etc. - Changes stay in source directory only
- NO
-
DO NOT commit or push automatically
- NO
git commitwithout explicit user request - NO
git pushon your own - Let user review changes first
- NO
-
DO NOT embed secrets in plaintext
- NO API keys, tokens, or passwords in plain text
- Use Doppler variables:
{{ dopplerProjectJson.KEY_NAME }} - Use age encryption for sensitive files
- Reference encryption:
encrypted_private_*.age
-
DO NOT verify changes yourself
- NO running build/test commands unless requested
- Let user test changes with
chezmoi difforchezmoi apply --dry-run - Ask user to verify after making changes
Recommended Actions
-
Edit source files in
home/directory- Modify
.tmplfiles with proper template syntax - Respect platform conditionals (
{{ if eq .chezmoi.os "windows" }}) - Maintain existing template structure
- Modify
-
Explain impact of changes
- Which target files will be affected
- Platform-specific behavior
- What the user should test
-
Suggest verification commands
chezmoi diff- preview changeschezmoi apply --dry-run- simulate applychezmoi status- see what's changed
-
Use templates correctly
- Platform detection in regular templates:
.chezmoi.os,.wsl,.chassis - Platform detection in partials:
.data.chezmoi.os,.data.wsl,.data.chassis - Doppler secrets:
{{ dopplerProjectJson.SECRET_NAME }} - Conditional logic:
{{ if }}...{{ else }}...{{ end }} - Example partial call:
{{ template "commonrc.sh.tmpl" . }}(passes entire context asdata)
- Platform detection in regular templates:
-
Suggest TODO list updates (but DO NOT modify automatically)
- When a task is completed, check if
TODO.mdexists in the repository - If the completed task relates to items in TODO.md, suggest updating the file
- Examples of suggestions:
- "I've completed [task]. Would you like me to update TODO.md to mark this item as complete?"
- "This work relates to items in TODO.md. Should I update the relevant checkboxes?"
- NEVER modify TODO.md without explicit user approval
- User must explicitly approve (even if not specifically) before making changes
- Acceptable approvals: "yes", "go ahead", "update it", "sure", etc.
- If unclear, ask: "Should I update TODO.md to reflect this completion?"
- When a task is completed, check if
Common Tasks
Add new dotfile:
# DO NOT run - explain this to user instead
chezmoi add ~/.newconfig
# Edit: home/dot_newconfig or home/dot_newconfig.tmpl
Add sensitive config:
# DO NOT run - explain this to user instead
chezmoi add --encrypt ~/.ssh/config
# Creates: home/private_dot_ssh/encrypted_config.age
Edit existing file:
- Locate source:
home/dot_config/nushell/config.nu.tmpl - Make changes to source file
- User runs:
chezmoi applyorchezmoi apply ~/.config/nushell/config.nu
Platform Coverage
- OS: Windows, Linux (WSL/native), macOS
- Shells: bash, fish, nushell, PowerShell
- Tools: 30+ development tools configured (pyenv, bun, cargo, etc.)
- Secrets: Doppler + age encryption
When Uncertain
- Ask before modifying templates with complex platform logic
- Clarify secret handling before adding sensitive data
- Let user verify all changes before suggesting next steps
- Prefer explanations over automated actions
Extended Documentation
@README.md @TODO.md @FAQ.md @ONBOARDING.md