1# chezmoi comparison guide 2 3<!--- toc ---> 4* [Comparison table](#comparison-table) 5* [Why should I use a dotfile manager?](#why-should-i-use-a-dotfile-manager) 6* [I already have a system to manage my dotfiles, why should I use chezmoi?](#i-already-have-a-system-to-manage-my-dotfiles-why-should-i-use-chezmoi) 7 * [Coping with differences between machines requires extra effort](#coping-with-differences-between-machines-requires-extra-effort) 8 * [You have to keep your dotfiles repo private](#you-have-to-keep-your-dotfiles-repo-private) 9 * [You have to maintain your own tool](#you-have-to-maintain-your-own-tool) 10 * [Setting up your dotfiles requires more than one short command](#setting-up-your-dotfiles-requires-more-than-one-short-command) 11 12--- 13 14## Comparison table 15 16[chezmoi]: https://chezmoi.io/ 17[dotbot]: https://github.com/anishathalye/dotbot 18[rcm]: https://github.com/thoughtbot/rcm 19[homesick]: https://github.com/technicalpickles/homesick 20[vcsh]: https://github.com/RichiH/vcsh 21[yadm]: https://yadm.io/ 22[bare git]: https://www.atlassian.com/git/tutorials/dotfiles "bare git" 23 24| | [chezmoi] | [dotbot] | [rcm] | [homesick] | [vcsh] | [yadm] | [bare git] | 25| -------------------------------------- | ------------- | ----------------- | ----------------- | ----------------- | ------------------------ | ------------- | ---------- | 26| Distribution | Single binary | Python package | Multiple files | Ruby gem | Single script or package | Single script | - | 27| Install method | Many | git submodule | Many | Ruby gem | Many | Many | Manual | 28| Non-root install on bare system | ✅ | ⁉️ | ⁉️ | ⁉️ | ✅ | ✅ | ✅ | 29| Windows support | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | 30| Bootstrap requirements | None | Python, git | Perl, git | Ruby, git | sh, git | git | git | 31| Source repos | Single | Single | Multiple | Single | Multiple | Single | Single | 32| dotfiles are... | Files | Symlinks | Files | Symlinks | Files | Files | Files | 33| Config file | Optional | Required | Optional | None | None | None | Optional | 34| Private files | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 35| Show differences without applying | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | 36| Whole file encryption | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | 37| Password manager integration | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 38| Machine-to-machine file differences | Templates | Alternative files | Alternative files | Alternative files | Branches | Templates | ⁉️ | 39| Custom variables in templates | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 40| Executable files | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | 41| File creation with initial contents | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | 42| Externals | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 43| Manage partial files | ✅ | ❌ | ❌ | ❌ | ⁉️ | ❌ | ⁉️ | 44| File removal | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | 45| Directory creation | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | 46| Run scripts | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | 47| Run once scripts | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | 48| Machine-to-machine symlink differences | ✅ | ❌ | ❌ | ❌ | ⁉️ | ✅ | ⁉️ | 49| Shell completion | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | 50| Archive import | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | 51| Archive export | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | 52| Implementation language | Go | Python | Perl | Ruby | POSIX Shell | Bash | C | 53 54✅ Supported, ⁉️ Possible with significant manual effort, ❌ Not supported 55 56For more comparisons, visit [dotfiles.github.io](https://dotfiles.github.io/). 57 58--- 59 60## Why should I use a dotfile manager? 61 62Dotfile managers give you the combined benefit of a consistent environment 63everywhere with an undo command and a restore from backup. 64 65As the core of our development environments become increasingly standardized 66(e.g. git or Mercurial interfaces to version control at both home and work), and 67we further customize them (with shell configs like 68[powerlevel10k](https://github.com/romkatv/powerlevel10k)), at the same time we 69increasingly work in ephemeral environments like Docker containers and [GitHub 70Codespaces](https://github.com/features/codespaces). 71 72chezmoi helps you bring your personal configuration to every environment that 73you're working in. In the same way that nobody would use an editor without an 74undo command, or develop software without a version control system, chezmoi 75brings the investment that you have made in mastering your tools to every 76environment that you work in. 77 78--- 79 80## I already have a system to manage my dotfiles, why should I use chezmoi? 81 82> Regular reminder that chezmoi is the best dotfile manager utility I've used 83> and you can too 84> 85> — [@mbbroberg](https://twitter.com/mbbroberg/status/1355644967625125892) 86 87If you're using any of the following methods: 88 89* A custom shell script. 90* An existing dotfile manager like 91 [dotbot](https://github.com/anishathalye/dotbot), 92 [rcm](https://github.com/thoughtbot/rcm), 93 [homesick](https://github.com/technicalpickles/homesick), 94 [vcsh](https://github.com/RichiH/vcsh), 95 [yadm](https://yadm.io/), or [GNU Stow](https://www.gnu.org/software/stow/). 96* A [bare git repo](https://www.atlassian.com/git/tutorials/dotfiles). 97 98Then you've probably run into at least one of the following problems. 99 100--- 101 102### Coping with differences between machines requires extra effort 103 104If you want to synchronize your dotfiles across multiple operating systems or 105distributions, then you may need to manually perform extra steps to cope with 106differences from machine to machine. You might need to run different commands on 107different machines, maintain separate per-machine files or branches (with the 108associated hassle of merging, rebasing, or copying each change), or hope that 109your custom logic handles the differences correctly. 110 111chezmoi uses a single source of truth (a single branch) and a single command 112that works on every machine. Individual files can be templates to handle machine 113to machine differences, if needed. 114 115--- 116 117### You have to keep your dotfiles repo private 118 119> And regarding dotfiles, I saw that. It's only public dotfiles repos so I have 120> to evaluate my dotfiles history to be sure. I have secrets scanning and more, 121> but it was easier to keep it private for security, I'm ok mostly though. I'm 122> using chezmoi and it's easier now 123> 124> — [@sheldon_hull](https://twitter.com/sheldon_hull/status/1308139570597371907) 125 126If your system stores secrets in plain text, then you must be very careful about 127where you clone your dotfiles. If you clone them on your work machine then 128anyone with access to your work machine (e.g. your IT department) will have 129access to your home secrets. If you clone it on your home machine then you risk 130leaking work secrets. 131 132With chezmoi you can store secrets in your password manager or encrypt them, and 133even store passwords in different ways on different machines. You can clone your 134dotfiles repository anywhere, and even make your dotfiles repo public, without 135leaving personal secrets on your work machine or work secrets on your personal 136machine. 137 138--- 139 140### You have to maintain your own tool 141 142> I've offloaded my dotfiles deployment from a homespun shell script to chezmoi. 143> I'm quite happy with this decision. 144> 145> — [@gotgenes](https://twitter.com/gotgenes/status/1251008845163319297) 146 147> I discovered chezmoi and it's pretty cool, just migrated my old custom 148> multi-machine sync dotfile setup and it's so much simpler now 149> 150> in case you're wondering I have written 0 code 151> 152> — [@buritica](https://twitter.com/buritica/status/1361062902451630089) 153 154If your system was written by you for your personal use, then it probably has 155the functionality that you needed when you wrote it. If you need more 156functionality then you have to implement it yourself. 157 158chezmoi includes a huge range of battle-tested functionality out-of-the-box, 159including dry-run and diff modes, script execution, conflict resolution, Windows 160support, and much, much more. chezmoi is [used by thousands of 161people](https://github.com/twpayne/chezmoi/stargazers) and has a rich suite of 162both unit and integration tests. When you hit the limits of your existing 163dotfile management system, chezmoi already has a tried-and-tested solution ready 164for you to use. 165 166--- 167 168### Setting up your dotfiles requires more than one short command 169 170If your system is written in a scripting language like Python, Perl, or Ruby, 171then you also need to install a compatible version of that language's runtime 172before you can use your system. 173 174chezmoi is distributed as a single stand-alone statically-linked binary with no 175dependencies that you can simply copy onto your machine and run. You don't even 176need git installed. chezmoi provides one-line installs, pre-built binaries, 177packages for Linux and BSD distributions, Homebrew formulae, Scoop and 178Chocolatey support on Windows, and a initial config file generation mechanism to 179make installing your dotfiles on a new machine as painless as possible. 180 181--- 182