One tool, whole machine
Packages, system config, git repositories, and dotfiles.
One command bootstraps a machine: it ensures a new-enough Ansible, clones your dotfiles repo (or scaffolds a starter if you don't have one yet), and installs the Dotfiles Pro collection. Then dotpro apply converges the machine — the same command for every update.
Read the installer before you pipe it to a shell:
curl -LsSf https://dotfiles.pro/install.sh | lessThen run it against your own dotfiles repo:
curl -LsSf https://dotfiles.pro/install.sh | sh -s -- git@gitlab.com:yourname/mydotfiles.gitOr with no repo yet, to scaffold a starter in ~/.dotfiles:
curl -LsSf https://dotfiles.pro/install.sh | shStart from the one-machine example and go to multiple machines from there.
Your personal repo references it in requirements.yml:
collections:
- name: dotfilespro.rolesList the roles to run in playbook.yaml. The OS base is picked per machine from facts (ubuntu on Linux and WSL, macos on a Mac), so one file runs unchanged across all your machines; add the roles you want and override defaults with your own vars, git identity, repositories, aliases:
- hosts: localhost
connection: local
roles:
- role: dotfilespro.roles.ubuntu
when: ansible_facts.os_family == 'Debian'
- role: dotfilespro.roles.macos
when: ansible_facts.os_family == 'Darwin'
- dotfilespro.roles.git
- dotfilespro.roles.kubernetesDeclare only the settings you want under vars; everything else keeps the tool's own defaults. Your git identity and repositories are the usual starting point:
- hosts: localhost
# ...
vars:
git_config:
user:
name: Your Name
email: you@example.com
git_repositories:
.dotfiles:
repository: git@gitlab.com:yourname/mydotfiles.git
path: ~/.dotfilesThe first run and every later update are the same command. It's idempotent, so a re-run only touches what drifted. Preview with dotpro plan, target one role with dotpro tags <role>:
dotpro applydotpro is a smart Ansible wrapper
Every dotpro command shells out to plain Ansible, so the raw command is always one step away:
dotpro apply # ansible-playbook playbook.yaml --ask-become-pass
dotpro plan # ansible-playbook playbook.yaml --check --diff
dotpro tags git # ansible-playbook playbook.yaml --tags git
dotpro tags # ansible-playbook playbook.yaml --list-tags
dotpro vars # ansible-inventory --host $(hostname) --yaml
dotpro requirements --upgrade # ansible-galaxy collection install -r requirements.yml --upgradeGetting started → walks through the full setup.
A short tour of the everyday wins, the aliases, functions, and prompts that make a managed machine a pleasure to use. The highlights page covers each one in full; here is the whole list.
Servers stopped needing configuration management when they became disposable, rebuilt from images, orchestrated by Kubernetes. A developer laptop is the opposite: the last long-lived, mutable, personal machine in the stack, the one that can't be containerized because it's where the containers run.
Keeping such a machine up-to-date over time is exactly the problem configuration management was built for.
Most dotfiles tools manage the files in $HOME. This manages the whole machine (packages, system config, repositories, and dotfiles) on the configuration-management engine built for long-lived hosts. It's scored against chezmoi, yadm, Nix home-manager, Stow, dotbot, bare git, Salt, Puppet, Chef, MDM, devcontainers, and golden images, on each one's own terms.