Stow is the answer as far as I'm concerned. It's been around forever, it's standard, available in every package manager, the defaults just work.
I use it in combination with a make to automate the setup of a new install.
I use it in combination with a make to automate the setup of a new install.