Skip to content

Comparison

Utsob Roy edited this page Nov 28, 2025 · 4 revisions

Dotfile Manager Comparison: DotR vs Chezmoi vs Dotter

A comprehensive comparison of three popular dotfile managers: DotR, Chezmoi, and Dotter.

Overview

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

Core Features

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 ⚠️ Manual (.dotrbak files) ✅ Built-in archive dotter undeploy

Templating

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 ⚠️ Configured per file
Template Comments {# comment #} {{/* comment */}} {{! comment }}

Variables & Data

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.) ⚠️ Manual in 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

Profiles & Multi-Machine

Feature DotR Chezmoi Dotter
Profiles/Contexts ✅ First-class profiles ❌ Via templates/conditionals ✅ Packages system
Default Profile ✅ Auto-created default N/A ⚠️ Via default packages
Profile Switching --profile work flag ⚠️ Different configs or branches ✅ Edit local.toml
Profile Management dotr profiles add/list/remove ❌ Manual config edit ⚠️ Manual config edit
Profile Variables ✅ Per-profile variables ⚠️ Via template conditionals ✅ Per-package variables
Profile Dependencies ✅ Automatic package selection ❌ Manual templating ✅ Package dependencies
Target Overrides ✅ Per-profile destinations ⚠️ Template-based paths ✅ Per-package targets
Environment Variable DOTR_PROFILE ⚠️ CHEZMOI_CONFIG for config file ❌ Not built-in

Package/File Management

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 ⚠️ Manual config edit ⚠️ Manual config edit
Skip/Ignore Files skip = true + ignore patterns .chezmoiignore ⚠️ Don't list in config
File Permissions ⚠️ Preserved from source ✅ 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

Actions & Hooks

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 ⚠️ Global only
Variable Interpolation ✅ In action strings ✅ Via templates ⚠️ Via global variables
Multiple Actions ✅ Array of commands ✅ Multiple scripts ⚠️ Single script file
Run Once Scripts ❌ Not yet run_once_ prefix ❌ Not built-in

Deployment Methods

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

Workflow & UX

Feature DotR Chezmoi Dotter
Initialization dotr init chezmoi init dotter init
Automatic Setup ⚠️ Manual config after init ✅ Can clone + apply in one go ⚠️ Requires config editing
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 ⚠️ Manual ✅ Built-in git operations ⚠️ Manual
Merge Conflicts ⚠️ Manual resolution chezmoi merge command ⚠️ Manual resolution
Two-way Sync update command re-add ❌ One-way only

Advanced Features

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 ⚠️ Via actions run_ scripts ⚠️ Via hooks only
Machine-specific ✅ Profiles + .uservariables.toml ✅ Hostname/OS detection local.toml (gitignored)
OS Detection ⚠️ Via env vars ✅ Built-in .chezmoi.os ⚠️ Via env in templates
Shell Detection ⚠️ Via env vars ✅ Built-in .chezmoi.shell ⚠️ Via env in templates
Version Control ⚠️ Git assumed ✅ Git commands built-in ⚠️ Git assumed

Platform Support

Feature DotR Chezmoi Dotter
macOS ✅ Intel + Apple Silicon ✅ Full support ✅ Full support
Linux ✅ x86_64 ✅ Multiple architectures ✅ Multiple architectures
Windows ⚠️ Not tested ✅ Full support ✅ Full support
BSD ⚠️ Not tested ✅ FreeBSD, OpenBSD ⚠️ Should work

Documentation

Aspect DotR Chezmoi Dotter
Getting Started ✅ Wiki + README ✅ Extensive website ✅ Wiki
Examples ✅ In wiki ✅ Many user examples ✅ In wiki
Recipes ⚠️ Limited (new) ✅ Extensive how-to guides ⚠️ Limited
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.

External Resources

Clone this wiki locally