I decided to reinstall Ubuntu a while ago, because I was upgrading in-place since 10.10, and I decided to create a local Ansible playbook and a bash script for whatever the Ansible playbook couldn't handle.
I added it to my dotfiles repo and it's been working perfectly. Not only for installing on a new machine, but for syncing changes across computers as well. I install some new software on my laptop, I add it to my provisioning file and commit one or two of its dotfiles, and, when I move to the desktop, its entire state is one "git pull; provision" away.
I have no idea why I haven't done this earlier. Here's the playbook, if you're curious:
https://www.pastery.net/ztduxp/