Almost entirely with you on that, actually. But OS and other environment differences frequently demand some sort of tweaking, which I absolutely do not want to do by hand if I've done it before.
It's about time I started using a dotfile manager that I didn't make entirely myself - thanks for the recommendation.
For more and more of the cross-platform headaches, I've actually found myself treating the OS as more of a virtual host, and spending the plurality of my time configuring layers that run in it (modify .zshrc where it can do the work of iterm/wezterm, if it can be done in .emacs then do it there).
I get the feeling that I'm not far off shipping personal nix containers around, but there's still a little too much friction between having containers work and working on the OS itself.
I put config in dir, launch app. App should look like config.
If it doesn't it's the app's fault.
There are a limited number of applications I tolerate this behaviour from, but not many.