chezmoi-workflows
Dotfile backup and sync with chezmoi. TRIGGERS - chezmoi, dotfiles, sync dotfiles, backup configs, cross-machine sync.
Best use case
chezmoi-workflows is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Dotfile backup and sync with chezmoi. TRIGGERS - chezmoi, dotfiles, sync dotfiles, backup configs, cross-machine sync.
Teams using chezmoi-workflows should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/chezmoi-workflows/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How chezmoi-workflows Compares
| Feature / Agent | chezmoi-workflows | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Dotfile backup and sync with chezmoi. TRIGGERS - chezmoi, dotfiles, sync dotfiles, backup configs, cross-machine sync.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Chezmoi Workflows
> **Self-Evolving Skill**: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.
## When to Use This Skill
Use this skill when:
- Backing up dotfiles to Git repository
- Syncing configuration files across machines
- Tracking changes to shell configs, editor settings, or other dotfiles
- Managing templated configurations with chezmoi
- Troubleshooting dotfile drift between source and target
## Architecture
| Component | Location | Purpose |
| ---------- | -------------------------------- | ------------------------------------- |
| **Source** | `$(chezmoi source-path)` | Git repository with dotfile templates |
| **Target** | `~/` | Home directory (deployed files) |
| **Remote** | GitHub (private recommended) | Cross-machine sync and backup |
| **Config** | `~/.config/chezmoi/chezmoi.toml` | User preferences and settings |
---
## 1. Status Check
```bash
chezmoi source-path # Show source directory
chezmoi git -- remote -v # Show GitHub remote
chezmoi status # Show drift between source and target
chezmoi managed | wc -l # Count tracked files
```
---
## 2. Track File Changes
After editing a config file, add it to chezmoi:
```bash
chezmoi status # 1. Verify file shows as modified
chezmoi diff ~/.zshrc # 2. Review changes
chezmoi add ~/.zshrc # 3. Add to source (auto-commits if configured)
chezmoi git -- log -1 --oneline # 4. Verify commit created
chezmoi git -- push # 5. Push to remote
```
---
## 3. Track New File
Add a previously untracked config file:
```bash
chezmoi add ~/.config/app/config.toml # 1. Add file to source
chezmoi managed | grep app # 2. Verify in managed list
chezmoi git -- push # 3. Push to remote
```
---
## 4. Sync from Remote
Pull changes from GitHub and apply to home directory:
```bash
chezmoi update # 1. Pull + apply (single command)
chezmoi verify # 2. Verify all files match source
chezmoi status # 3. Confirm no drift
```
---
## 5. Push All Changes
Bulk sync all modified tracked files to remote:
```bash
chezmoi status # 1. Review all drift
chezmoi re-add # 2. Re-add all managed files (auto-commits)
chezmoi git -- push # 3. Push to remote
```
---
## 6. First-Time Setup
### Install chezmoi
```bash
brew install chezmoi # macOS
```
### Initialize (fresh start)
```bash
/usr/bin/env bash << 'CONFIG_EOF'
chezmoi init # Create empty source
chezmoi add ~/.zshrc ~/.gitconfig # Add first files
gh repo create dotfiles --private --source="$(chezmoi source-path)" --push
CONFIG_EOF
```
### Initialize (clone existing)
```bash
chezmoi init git@github.com:<user>/dotfiles.git
chezmoi apply # Deploy to home directory
```
---
## 7. Configure Source Directory
Move source to custom location (e.g., for multi-account SSH):
```bash
/usr/bin/env bash << 'SKILL_SCRIPT_EOF'
mv "$(chezmoi source-path)" ~/path/to/dotfiles
SKILL_SCRIPT_EOF
```
Edit `~/.config/chezmoi/chezmoi.toml`:
```toml
sourceDir = "~/path/to/dotfiles"
```
Verify:
```bash
chezmoi source-path # Should show new location
```
---
## 8. Change Remote
Switch to different GitHub account or repository:
```bash
chezmoi git -- remote -v # View current
chezmoi git -- remote set-url origin git@github.com:<user>/<repo>.git # Change
chezmoi git -- push -u origin main # Push to new remote
```
---
## 9. Resolve Merge Conflicts
```bash
/usr/bin/env bash << 'GIT_EOF'
chezmoi git -- status # 1. Identify conflicted files
chezmoi git -- diff # 2. Review conflicts
# Manually edit files in $(chezmoi source-path)
chezmoi git -- add <resolved-files> # 3. Stage resolved files
chezmoi git -- commit -m "Resolve merge conflict"
chezmoi apply # 4. Apply to home directory
chezmoi git -- push # 5. Push resolution
GIT_EOF
```
---
## 10. Validation (SLO)
After major operations, verify system state:
```bash
chezmoi verify # Exit 0 = all files match source
chezmoi diff # Empty = no drift
chezmoi managed # Lists all tracked files
chezmoi git -- log --oneline -3 # Recent commit history
```
---
## 11. Forget (Untrack) a File
Stop tracking a file without deleting it from home directory:
```bash
chezmoi managed | grep config.local # 1. Confirm file is tracked
chezmoi forget --force ~/.config/app/config.local.toml # 2. Remove from source (--force skips TTY prompt)
chezmoi git -- push # 3. Push removal to remote
ls ~/.config/app/config.local.toml # 4. Verify file still exists in home
```
**When to use**: Machine-specific configs, files with secrets that shouldn't be synced, files accidentally added.
---
## 12. Template Management
Create OS/architecture-conditional configs using Go templates:
### Convert existing file to template
```bash
chezmoi add --template ~/.config/app/config.toml # 1. Add as template (creates .tmpl suffix in source)
chezmoi edit ~/.config/app/config.toml # 2. Edit template in $EDITOR (helix)
chezmoi diff ~/.config/app/config.toml # 3. Preview what would change
chezmoi apply ~/.config/app/config.toml # 4. Apply rendered template to home
```
### Common template patterns
```
# OS-conditional block
{{ if eq .chezmoi.os "darwin" -}}
export HOMEBREW_PREFIX="/opt/homebrew"
{{ else if eq .chezmoi.os "linux" -}}
export HOMEBREW_PREFIX="/home/linuxbrew/.linuxbrew"
{{ end -}}
# Architecture-conditional
{{ if eq .chezmoi.arch "arm64" -}}
ARCH="aarch64"
{{ else -}}
ARCH="x86_64"
{{ end -}}
# Custom data from chezmoi.toml [data] section
git_name = "{{ .git.name }}"
git_email = "{{ .git.email }}"
# 1Password secret (requires op CLI)
api_key = {{ onepasswordRead "op://Vault/Item/Field" }}
```
### Verify template renders correctly
```bash
chezmoi execute-template < "$(chezmoi source-path)/dot_config/app/config.toml.tmpl"
chezmoi cat ~/.config/app/config.toml # Show rendered output without applying
```
---
## 13. Safe Update (Diff Before Apply)
Pull from remote with review step — safer than blind `chezmoi update`:
```bash
chezmoi git -- pull # 1. Pull source changes only (no apply)
chezmoi diff # 2. Review what WOULD change in home directory
chezmoi apply --dry-run --verbose # 3. Dry run — shows actions without executing
chezmoi apply # 4. Apply after review
chezmoi status # 5. Confirm clean state
```
**When to use**: When pulling changes made on another machine, or after a long gap between syncs. Avoids surprise overwrites of local edits.
---
## 14. Doctor (Diagnostic)
Troubleshoot chezmoi setup and environment:
```bash
chezmoi doctor # Full diagnostic — checks all components
```
**Key fields to verify**:
| Check | Expected | Meaning if failing |
| ------------ | ---------------------------------------------- | ---------------------------------- |
| config-file | `found ~/.config/chezmoi/chezmoi.toml` | Config missing or wrong path |
| source-dir | `~/own/dotfiles is a git working tree (clean)` | Source dirty or not a git repo |
| git-command | `found /opt/homebrew/bin/git` | Git not installed |
| edit-command | `found /opt/homebrew/bin/hx` | Editor not configured |
| 1password | `found /opt/homebrew/bin/op` | 1Password CLI needed for templates |
| age/gpg | `info` = optional | Only needed for encrypted files |
```bash
chezmoi doctor | grep -v "^ok" # Show only warnings and errors
```
---
## Reference
- [Setup Guide](./references/setup.md) - Installation, multi-account GitHub, migration
- [Prompt Patterns](./references/prompt-patterns.md) - Detailed workflow examples
- [Configuration](./references/configuration.md) - chezmoi.toml settings, templates
- [Secret Detection](./references/secret-detection.md) - Handling detected secrets
**Chezmoi docs**: <https://www.chezmoi.io/reference/>
---
## Troubleshooting
| Issue | Cause | Solution |
| ------------------ | -------------------------- | ---------------------------------------------- |
| chezmoi not found | Not installed | Install via `brew install chezmoi` |
| Source path empty | Not initialized | Run `chezmoi init` |
| Git remote not set | Missing GitHub repo | Run `chezmoi git -- remote add origin URL` |
| Apply fails | Template error | Check template syntax with `chezmoi diff` |
| Merge conflicts | Diverged source and target | Use `chezmoi merge` to resolve |
| Secrets detected | Plain text credentials | Use chezmoi templates with 1Password/Doppler |
| forget needs TTY | Interactive confirmation | Use `chezmoi forget --force <path>` |
| Template not found | Missing `.tmpl` suffix | Use `chezmoi add --template` to create `.tmpl` |
## Post-Execution Reflection
After this skill completes, check before closing:
1. **Did the command succeed?** — If not, fix the instruction or error table that caused the failure.
2. **Did parameters or output change?** — If the underlying tool's interface drifted, update Usage examples and Parameters table to match.
3. **Was a workaround needed?** — If you had to improvise (different flags, extra steps), update this SKILL.md so the next invocation doesn't need the same workaround.
Only update if the issue is real and reproducible — not speculative.Related Skills
chezmoi-sync
Interactive chezmoi drift check and sync. TRIGGERS - chezmoi sync, sync dotfiles, dotfile drift, chezmoi guard, chezmoi check.
doppler-workflows
Manage credentials and secrets through Doppler for publishing and deployment workflows. Use whenever the user needs to publish Python packages to PyPI, rotate AWS credentials, manage Doppler secrets, or configure credential pipelines for CI/CD. Do NOT use for 1Password vault operations or for secrets that are not managed through Doppler.
voice-quality-audition
Audition Kokoro TTS voices to compare quality and grade. TRIGGERS - audition voices, kokoro voices, voice comparison, tts voice, voice quality, compare voices.
settings-and-tuning
Configure TTS voices, speed, timeouts, queue depth, and bot settings. TRIGGERS - configure tts, change voice, tts speed, queue depth, tts timeout, bot config, tune settings, adjust parameters.
full-stack-bootstrap
One-time bootstrap for Kokoro TTS engine, Telegram bot, and BotFather setup. TRIGGERS - setup tts, install kokoro, botfather, bootstrap tts-tg-sync, configure telegram bot, full stack setup.
diagnostic-issue-resolver
Diagnose and resolve TTS and Telegram bot issues. TRIGGERS - tts not working, bot not responding, kokoro error, audio not playing, lock stuck, telegram bot troubleshoot, diagnose issue.
component-version-upgrade
Upgrade Kokoro model, bot dependencies, or TTS components. TRIGGERS - upgrade kokoro, update model, upgrade bot, update dependencies, version bump, component update.
clean-component-removal
Remove TTS and Telegram sync components cleanly. TRIGGERS - uninstall tts, remove telegram bot, uninstall kokoro, clean tts, teardown, component removal.
send-message
Use when user wants to send a text message on Telegram as their personal account via MTProto, text someone, or message a contact by username, phone, or chat ID.
send-media
Use when user wants to send or upload a file, photo, video, voice note, or document on Telegram via their personal account.
search-messages
Use when user wants to search for messages across all Telegram chats or within a specific chat, find old messages by text, or look up Telegram message history filtered by sender.
pin-message
Use when user wants to pin or unpin a message in a Telegram chat, group, or channel, or manage pinned messages.