There are tons of solutions about for rapidly deploying new infrastructure (chef, puppet, blueprint, babushka- the list is nigh on endless), however for a collection of home machines there are few options that support updating as frequently and mixing and matching configs the way I do.
My workstation died yesterday, and while I had a machine I could use temporarily, I knew I’d be getting a new box today. Knowing that I’d need to provision two machines in such rapid succession got me thinking about the best approach, and while my homedir itself is very portable (my pull_ext system for nesting arbitrary source control methods), the underlying platform is significantly less.
The solution I decided upon was staring me in the face this whole time, Debian’s packaging system. I created a stack of meta-packages to support underlying subsystems, for example:
richo-environment, provides the dependencies for my shell environment (tmux, zsh, etc)
richo-x11, provides my X11 environment (with my fork of openbox and urvxt, + other misc tools)
And so on, finally tied together with a richo-all package for when I want the whole shebang.