Probably rsync -aH would do just fine, but Nix has a tool for this.
https://nix.dev/manual/nix/2.18/command-ref/new-cli/nix3-copy
Their closest direct example is using SSH:
Copy the entire current NixOS system closure to another machine via SSH:
# nix copy --substitute-on-destination --to ssh://server /run/current-system
The -s flag causes the remote machine to try to substitute missing store paths, which may be faster if the link between the local and remote machines is slower than the link between the remote machine and its substituters (e.g. https://cache.nixos.org/).