Turns out I've inadvertently reimplemented GNU Stow in my dotfiles repo. Nice to know I can switch to a widely used tool.