Comparison Guide #
Comparison table #
|Distribution||Single binary||Python package||Multiple files||Ruby gem||Single script||n/a|
|Install method||Many||git submodule||Many||Ruby gem||Many||Manual|
|Non-root install on bare system||✅||Difficult||Difficult||Difficult||✅||✅|
|Bootstrap requirements||None||Python, git||Perl, git||Ruby, git||git||git|
|Show differences without applying||✅||❌||❌||❌||✅||✅|
|Whole file encryption||✅||❌||❌||❌||✅||❌|
|Password manager integration||✅||❌||❌||❌||❌||❌|
|Machine-to-machine file differences||Templates||Alternative files||Alternative files||Alternative files||Templates||Manual|
|Custom variables in templates||✅||❌||❌||❌||❌||❌|
|File creation with initial contents||✅||❌||❌||❌||❌||❌|
|Manage partial files||✅||❌||❌||❌||❌||❌|
|Run once scripts||✅||❌||❌||❌||Manual||❌|
|Machine-to-machine symlink differences||✅||❌||❌||❌||✅||❌|
For more comparisons, visit dotfiles.github.io.
Why should I use a dotfile manager? #
Dotfile managers give you the combined benefit of a consistent environment everywhere with an undo command and a restore from backup.
As the core of our development environments become increasingly standardized (e.g. git or Mercurial interfaces to version control at both home and work), and we further customize them (with shell configs like powerlevel10k), at the same time we increasingly work in ephemeral environments like Docker containers and GitHub Codespaces.
chezmoi helps you bring your personal configuration to every environment that you’re working in. In the same way that nobody would use an editor without an undo command, or develop software without a version control system, chezmoi brings the investment that you have made in mastering your tools to every environment that you work in.
I already have a system to manage my dotfiles, why should I use chezmoi? #
Regular reminder that chezmoi is the best dotfile manager utility I’ve used and you can too
If you’re using any of the following methods:
- A custom shell script.
- An existing dotfile manager like dotbot, rcm, homesick, yadm, or GNU Stow.
- A bare git repo.
Then you’ve probably run into at least one of the following problems.
Coping with differences between machines requires extra effort #
If you want to synchronize your dotfiles across multiple operating systems or distributions, then you may need to manually perform extra steps to cope with differences from machine to machine. You might need to run different commands on different machines, maintain separate per-machine files or branches (with the associated hassle of merging, rebasing, or copying each change), or hope that your custom logic handles the differences correctly.
chezmoi uses a single source of truth (a single branch) and a single command that works on every machine. Individual files can be templates to handle machine to machine differences, if needed.
You have to keep your dotfiles repo private #
And regarding dotfiles, I saw that. It’s only public dotfiles repos so I have to evaluate my dotfiles history to be sure. I have secrets scanning and more, but it was easier to keep it private for security, I’m ok mostly though. I’m using chezmoi and it’s easier now
If your system stores secrets in plain text, then you must be very careful about where you clone your dotfiles. If you clone them on your work machine then anyone with access to your work machine (e.g. your IT department) will have access to your home secrets. If you clone it on your home machine then you risk leaking work secrets.
With chezmoi you can store secrets in your password manager or encrypt them, and even store passwords in different ways on different machines. You can clone your dotfiles repository anywhere, and even make your dotfiles repo public, without leaving personal secrets on your work machine or work secrets on your personal machine.
You have to maintain your own tool #
I’ve offloaded my dotfiles deployment from a homespun shell script to chezmoi. I’m quite happy with this decision.
I discovered chezmoi and it’s pretty cool, just migrated my old custom multi-machine sync dotfile setup and it’s so much simpler now
in case you’re wondering I have written 0 code
If your system was written by you for your personal use, then it probably has the functionality that you needed when you wrote it. If you need more functionality then you have to implement it yourself.
chezmoi includes a huge range of battle-tested functionality out-of-the-box, including dry-run and diff modes, script execution, conflict resolution, Windows support, and much, much more. chezmoi is used by thousands of people and has a rich suite of both unit and integration tests. When you hit the limits of your existing dotfile management system, chezmoi already has a tried-and-tested solution ready for you to use.
Setting up your dotfiles requires more than one short command #
If your system is written in a scripting language like Python, Perl, or Ruby, then you also need to install a compatible version of that language’s runtime before you can use your system.
chezmoi is distributed as a single stand-alone statically-linked binary with no dependencies that you can simply copy onto your machine and run. You don’t even need git installed. chezmoi provides one-line installs, pre-built binaries, packages for Linux and BSD distributions, Homebrew formulae, Scoop and Chocolatey support on Windows, and a initial config file generation mechanism to make installing your dotfiles on a new machine as painless as possible.