-
Notifications
You must be signed in to change notification settings - Fork 1
Comparison
Utsob Roy edited this page Nov 28, 2025
·
4 revisions
A comprehensive comparison of three popular dotfile managers: DotR, Chezmoi, and Dotter.
| Feature | DotR | Chezmoi | Dotter |
|---|---|---|---|
| Language | Rust | Go | Rust |
| License | MIT | MIT | Unlicense |
| Primary Approach | Copy-based (symlinks optional) | Copy-based | Symlink or Template |
| Configuration Format | TOML (config.toml) |
Command-based + templates | TOML (.dotter/global.toml + local.toml) |
| Maturity | Pre-alpha (New) | Stable (Mature) | Stable |
| Feature | DotR | Chezmoi | Dotter |
|---|---|---|---|
| Import Files | ✅ dotr import
|
✅ chezmoi add
|
✅ dotter init (semi-automatic) |
| Deploy Files | ✅ dotr deploy
|
✅ chezmoi apply
|
✅ dotter or dotter deploy
|
| Update/Backup | ✅ dotr update
|
✅ chezmoi add --force
|
❌ Manual (use git) |
| Diff Preview | ✅ dotr diff
|
✅ chezmoi diff
|
✅ Automatic with --verbose
|
| Dry Run | ✅ dotr deploy --dry-run and dotr update --dry-run
|
✅ chezmoi apply --dry-run
|
✅ --dry-run flag |
| Undo/Rollback | .dotrbak files) |
✅ Built-in archive | ✅ dotter undeploy
|
| Feature | DotR | Chezmoi | Dotter |
|---|---|---|---|
| Template Engine | Tera (Jinja2-like) | Go templates | Handlebars |
| Variable Substitution | ✅ {{ variable }}
|
✅ {{ .variable }}
|
✅ {{ variable }}
|
| Conditionals | ✅ {% if condition %}
|
✅ {{ if .condition }}
|
✅ {{#if condition}}
|
| Loops | ✅ Tera full syntax | ✅ Go template syntax | ✅ Handlebars syntax |
| Functions/Filters | ✅ Tera built-in filters | ✅ Extensive sprig functions | ✅ Handlebars helpers |
| Auto-detection | ✅ Automatic | ❌ Requires file naming | |
| Template Comments | ✅ {# comment #}
|
✅ {{/* comment */}}
|
✅ {{! comment }}
|
| Feature | DotR | Chezmoi | Dotter |
|---|---|---|---|
| Config Variables | ✅ [variables] in config |
✅ .chezmoi.toml
|
✅ [variables] in global/local |
| Environment Variables | ✅ Auto-available | ✅ Via .Env.VAR
|
✅ Via {{@env.VAR}}
|
| Nested Structures | ✅ TOML tables/arrays | ✅ Full TOML/JSON/YAML | ✅ TOML tables |
| Secret Management | .uservariables.toml (gitignored) |
✅ Multiple backends (1Password, LastPass, etc.) | local.toml
|
| Interactive Prompts | ✅ Multi-level prompts (config/package/profile) | ✅ Template prompts | ❌ Not built-in |
| Variable Precedence | ✅ 5 levels (user > profile > package > config > env) | ✅ Cascade with .chezmoi.toml
|
✅ Local overrides global |
| Print Variables | ✅ dotr print-vars
|
✅ chezmoi data
|
❌ Not built-in |
| Feature | DotR | Chezmoi | Dotter |
|---|---|---|---|
| Profiles/Contexts | ✅ First-class profiles | ❌ Via templates/conditionals | ✅ Packages system |
| Default Profile | ✅ Auto-created default
|
N/A | |
| Profile Switching | ✅ --profile work flag |
✅ Edit local.toml
|
|
| Profile Management | ✅ dotr profiles add/list/remove
|
❌ Manual config edit | |
| Profile Variables | ✅ Per-profile variables | ✅ Per-package variables | |
| Profile Dependencies | ✅ Automatic package selection | ❌ Manual templating | ✅ Package dependencies |
| Target Overrides | ✅ Per-profile destinations | ✅ Per-package targets | |
| Environment Variable | ✅ DOTR_PROFILE
|
CHEZMOI_CONFIG for config file |
❌ Not built-in |
| Feature | DotR | Chezmoi | Dotter |
|---|---|---|---|
| Package Concept | ✅ Explicit packages in config | ❌ Files only | ✅ Packages in config |
| Package Dependencies | ✅ Package depends on package | ❌ N/A | ✅ Package includes |
| Selective Deploy | ✅ --packages pkg1,pkg2
|
✅ By path/pattern | ✅ Via package selection |
| List Packages | ✅ dotr packages list
|
✅ chezmoi managed
|
❌ Not built-in |
| Remove Packages | ✅ dotr remove with orphan cleanup |
||
| Skip/Ignore Files | ✅ skip = true + ignore patterns |
✅ .chezmoiignore
|
|
| File Permissions | ✅ Encoded in filename | ✅ Configured per file | |
| Directory Support | ✅ Full directory copy | ✅ Full directory support | ✅ Full directory support |
| Granular Updates | ✅ Per-file backups | ✅ Per-file tracking | ✅ Per-file tracking |
| Feature | DotR | Chezmoi | Dotter |
|---|---|---|---|
| Pre-deploy Hooks | ✅ Per-package pre_actions
|
✅ Scripts in repo | ✅ Global pre_deploy.sh
|
| Post-deploy Hooks | ✅ Per-package post_actions
|
✅ Scripts + run_once_
|
✅ Global post_deploy.sh
|
| Per-file Actions | ✅ Via package actions | ✅ run_ scripts |
|
| Variable Interpolation | ✅ In action strings | ✅ Via templates | |
| Multiple Actions | ✅ Array of commands | ✅ Multiple scripts | |
| Run Once Scripts | ❌ Not yet | ✅ run_once_ prefix |
❌ Not built-in |
| Feature | DotR | Chezmoi | Dotter |
|---|---|---|---|
| Copy Files | ✅ Primary method | ✅ Primary method | ✅ Supported |
| Symlinks | ✅ Supported (symlink = true) |
✅ Supported | ✅ Primary method |
| Symlink + Template | ✅ Templates rendered to deployed/
|
✅ Supported | ✅ Supported |
| Templates | ✅ Automatic | ✅ Via naming convention | ✅ Via configuration |
| Mixed Approach | ✅ Templates + regular files + symlinks | ✅ Templates + regular files | ✅ Configure per file |
| Feature | DotR | Chezmoi | Dotter |
|---|---|---|---|
| Initialization | ✅ dotr init
|
✅ chezmoi init
|
✅ dotter init
|
| Automatic Setup | ✅ Can clone + apply in one go | ||
| Interactive Mode | ✅ Built-in prompts | ✅ Questionnaire mode | ❌ Not built-in |
| Watch Mode | ❌ Not yet | ✅ chezmoi edit --watch
|
✅ dotter watch
|
| Shell Integration | ❌ Not yet | ✅ Completions + cd | ✅ Completions via gen-completions
|
| Git Integration | ✅ Built-in git operations | ||
| Merge Conflicts | ✅ chezmoi merge command |
||
| Two-way Sync | ✅ update command |
✅ re-add
|
❌ One-way only |
| Feature | DotR | Chezmoi | Dotter |
|---|---|---|---|
| Encryption | ❌ Not built-in | ✅ age, gpg, etc. | ❌ Not built-in |
| External Sources | ❌ Not yet | ✅ Download from URLs/git | ❌ Not built-in |
| Scripts as Files | ✅ run_ scripts |
||
| Machine-specific | ✅ Profiles + .uservariables.toml
|
✅ Hostname/OS detection | ✅ local.toml (gitignored) |
| OS Detection | ✅ Built-in .chezmoi.os
|
||
| Shell Detection | ✅ Built-in .chezmoi.shell
|
||
| Version Control | ✅ Git commands built-in |
| Feature | DotR | Chezmoi | Dotter |
|---|---|---|---|
| macOS | ✅ Intel + Apple Silicon | ✅ Full support | ✅ Full support |
| Linux | ✅ x86_64 | ✅ Multiple architectures | ✅ Multiple architectures |
| Windows | ✅ Full support | ✅ Full support | |
| BSD | ✅ FreeBSD, OpenBSD |
| Aspect | DotR | Chezmoi | Dotter |
|---|---|---|---|
| Getting Started | ✅ Wiki + README | ✅ Extensive website | ✅ Wiki |
| Examples | ✅ In wiki | ✅ Many user examples | ✅ In wiki |
| Recipes | ✅ Extensive how-to guides | ||
| Reference Docs | ✅ Wiki pages | ✅ Complete reference | ✅ Wiki pages |
| Community | 🆕 New | ✅ Large, active | ✅ Active |
Last Updated: November 2024
Note: DotR is in pre-alpha and actively evolving. Features and behavior may change.