I’ve been reading up on the concept of dotfile management, and I’ve come across tools such as GNU Stow, chezmoi, and yadm, but before I select a tool, I’d like to understand the workflow a little better.
I understand if the dotfiles are in some cloud provider such as GitHub, then after a fresh install one can do git clone etc, but let’s say one’s dotfiles are not stored in the cloud, then what’s the workflow for getting those dotfiles onto the freshly installed OS? Do people do git clone from another machine on their local network, manually copy the dotfiles folder from the source, use an app like LocalSend, or something else?
EDIT: Clarifying that this is for a home environment, where I have two or three different laptops in service at any given time. One is my main daily driver and doesn’t change much. The other two are kinda my sandboxes and I’m often distro hopping on them. This question is mostly for distro hopping on my sandboxes, which is like once or twice a month. Thanks!


I use chezmoi which syncs via my private Gitea instance. I can’t imagine not using a VCS for dotfiles, the number of times I’ve edited my ZSH aliases file or my VSCodium settings.json on both my desktop and my laptop and then had to merge the changes together is… a lot. A new setup is as simple as installing chezmoi, logging in to Bitwarden, downloading my Gitea SSH key, and cloning. The templates handle customizing things to the platform I’m on. I can do it over HTTPS using any backend the Git credential store supports too.
Thanks for sharing your workflow. I might be getting into the weeds a little bit, but for a new setup do you install your apps first and then clone your dotfiles or vice versa?
It doesn’t usually matter, though you could have a script in your dotfiles to bootstrap the installation of everything needed. I haven’t bothered because I very rarely set up new machines, but for a VM warrior that’s what I would recommend for sure. You can use chezmoi templates to automatically use
apt/dnf/yum/zypper/brew/whatever and export different envs depending on your platform and shell.