Dotfiles are a way for people to store settings and preferences to make setting up a new computer that much easier. I use both my laptop, desktop and work machine almost every day, and want them to be set up in an almost identical way.
Most people store their dotfiles in version control. This is a great solution as it’s possible to add authentication before accessing them, and stores a complete version history. It also means they’re public.
My Dotfiles are built using Ansible. Ansible is an open-source configuration management tool designed to help administer many servers with a single configuration. As people started using Ansible for configuration of the local machine (as I am), Ansible made some optimizations so commands run better locally.
I synchronize these files with git, and publish them on GitHub.
Previously, my dotfiles used puppet, which is fairly overkill for what I’m using it for, and was incredibly complicated compared to Ansible. Ansible bought with it many other benefits:
- Simpler configuration. YAML vs Puppet
- Wider variety of 1st party modules
- Easier to pin dependencies, as it’s installed through
- Much nicer templating. Jinja2 vs ERB
- Much simpler support for running commands multiple times with
- Dry-run support, for validation on a CI
Things like SSH config and private environment variables can’t go onto GitHub, for obvious reasons. For this, I use my nextcloud server to sync a private directory to my machines, and depend on those files in the config.