@obra Up until now, for the past decade or so, I did it by hand for stuff outside $HOME. I mainly needed GNOME, Emacs, Zsh and Git, so there wasn't much to manage.
On my next laptop, I'll use something like NixOS or GuixSD, and have the whole thing managed. Mostly because I'm sick of cleaning up after my own experiments.
I saw two choices: 1) experiment in Docker and VMs, always; 2) manage packages and configs globally. Since I wanted to play with GuixSD, I'll go with the second.