Plot twist
I opened neovim with nvim -u NONE to ignore all plugins/rc files and you know what? rtp and packpath where added correctly.
Some more digging shows that rtp is correct on first load but is being overwritten at some point afterwards.
It’s strange though, since nix neovim runtime is still there.
I’d say it’s save to say that this is not a nix issue.
On another note, I was able to use your advice and leverage home-manager to spit out a lua file with the correct runtime paths. I could use this to circumvent the issue, but I could just as well save the rtp before paths are loaded, then readd them afterwards. At least until I can figure out what is overwriting ftp.
Thanks for the help!
edit:
Found the issue. This is a very surprising feature of Lazy.nvim, which is to wipe away runtimepaths and packpaths while assuming control of the entire startup sequence. Luckily I can disable this feature.