This is an often unappreciated killer feature in Nix. (perhaps not well explained or documented?)
copy runtime requirements:
nix copy --to s3://some-bucket ./result
copy full build description: nix copy --to s3://some-bucket ./result --derivation
copy runtime of the buildtime: nix path-info -r nixpkgs#hello --derivation | xargs -n1 nix path-info | nix copy --to s3://some-bucket
Then you set your substituter to s3://some-bucket either in nix.conf or in CLI with --substitutersOr if you don't like s3, point it to https, ssh, or a simple local file directory.