Sharing Packages Between Machines Sometimes you want to copy a package from one machine to another. Or, you want to install some packages and you know that another machine already has some or all of those packages or their dependencies. In that case there are mechanisms to quickly copy packages between machines. The command nix-copy-closure copies a Nix store path along with all its dependencies to or from another machine via the SSH protocol. It doesn’t copy store paths that are already present on the target machine. For example, the following command copies Firefox with all its dependencies: $ nix-copy-closure --to alice@itchy.example.org $(type -p firefox) See for details. With nix-store --export and nix-store --import you can write the closure of a store path (that is, the path and all its dependencies) to a file, and then unpack that file into another Nix store. For example, $ nix-store --export $(nix-store -qR $(type -p firefox)) > firefox.closure writes the closure of Firefox to a file. You can then copy this file to another machine and install the closure: $ nix-store --import < firefox.closure Any store paths in the closure that are already present in the target store are ignored. It is also possible to pipe the export into another command, e.g. to copy and install a closure directly to/on another machine: $ nix-store --export $(nix-store -qR $(type -p firefox)) | bzip2 | \ ssh alice@itchy.example.org "bunzip2 | nix-store --import" But note that nix-copy-closure is generally more efficient in this example because it only copies paths that are not already present in the target Nix store. Finally, if you can mount the Nix store of a remote machine in your local filesystem, Nix can copy paths from the remote Nix store to the local Nix store on demand. For instance, suppose that you mount a remote machine containing a Nix store via sshfs: $ sshfs alice@itchy.example.org:/ /mnt You should then set the NIX_OTHER_STORES environment variable to tell Nix about this remote Nix store: $ export NIX_OTHER_STORES=/mnt/nix Then if you do any Nix operation, e.g. $ nix-env -i firefox and Nix has to build a path that it sees is already present in /mnt/nix, then it will just copy from there instead of building it from source.