<section xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" version="5.0" xml:id="ssec-copy-closure"> <title>Copying Closures Via SSH</title> <para>The command <command linkend="sec-nix-copy-closure">nix-copy-closure</command> 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: <screen> $ nix-copy-closure --to alice@itchy.example.org $(type -p firefox)</screen> See <xref linkend='sec-nix-copy-closure' /> for details.</para> <para>With <command linkend='refsec-nix-store-export'>nix-store --export</command> and <command linkend='refsec-nix-store-import'>nix-store --import</command> 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, <screen> $ nix-store --export $(nix-store -qR $(type -p firefox)) > firefox.closure</screen> writes the closure of Firefox to a file. You can then copy this file to another machine and install the closure: <screen> $ nix-store --import < firefox.closure</screen> 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: <screen> $ nix-store --export $(nix-store -qR $(type -p firefox)) | bzip2 | \ ssh alice@itchy.example.org "bunzip2 | nix-store --import"</screen> However, <command>nix-copy-closure</command> is generally more efficient because it only copies paths that are not already present in the target Nix store.</para> </section>