Ask HN: Dotfiles Management Tools?
My customized shell script isn't as robust as it should be and I don't want to reinvent an inferior version of what must surely already exist.
What tools would you recommend for managing dotfiles that are robust, doesn't have external dependencies, uses git and are idempotent?
I'd like something that manages directories of files (e.g. ~/.vim/ftplugin/) in sub-directories, as well as in $HOME. If the tool can deal with multiple systems (MacOS, CentOS, debian) then even better!
Thanks!
19 comments
[ 3.0 ms ] story [ 51.4 ms ] threadSimple usecase:
I've gone a bit overboard myself (many packages, litterate programming declaration of emacs config, Vagrant VM with Ansible deployment etc), see https://github.com/OverkillGuy/jibyconf[1] https://github.com/twpayne/chezmoi
[2] https://github.com/anishathalye/dotbot#plugins
I made a dotfile management tool: https://github.com/knoebber/dotfile , but it's not based on git or designed for directories of files.
I think Chezmoi would fit your usecase well: https://www.chezmoi.io/
As a disclaimer I have to say I have never migrated my system to another one or even shared my config, so unforeseen problems may appear.
[1] https://drewdevault.com/2019/12/30/dotfiles.html
edit: Note if you're on Debian stable, the current package is 1.x. At this point testing has moved on to 3.x. It's probably worth going straight to 3.x to avoid reworking alternates and dealing with other changes. The testing/unstable package is easy to backport (look up simple sid backport).
https://yadm.io
I specifically have a design goal of very little external dependency. It only requires Git and Bash be present, so it is quite portable. Many people even use it on some network equipment. You can simply download the script if it isn’t packaged somewhere.
It can easily handle directories of files, but also submodules. Many people add vim plugin Git repos directly as submodules.
If you are familiar with Git, you’ll find yadm extremely easy to use. When you need them, more features are there to solve specific problems, like bootstrapping operations, encrypting private data, templating, or system dependent alternate files.
On a new system you can quickly bootstrap your existing dotfiles repo using https://bootstrap.yadm.io, without yadm installed yet. This is mostly useful if you’ve included yadm directly in you dotfiles (directly, or as a submodule, or as some installation during bootstrap).