@jonringer’s answer seems to cover things that would break the byte-for-byte reproduction of outputs.
But, if you just mean the reproduction of the final derivation, I have something of a list here: To flake or not to flake - #4 by colemickens. These don’t apply if you’re using flakes.