Nix Cookbook: Difference between revisions
mNo edit summary |
one-liner to bulk download |
||
| Line 167: | Line 167: | ||
With this warning, consumers will have time to patch their codes. | With this warning, consumers will have time to patch their codes. | ||
== Bulk pre-download all dependencies of a package == | |||
Sometimes we need to download all source dependencies of a package. | |||
E.G. a long build is being planned, so we first download all needed files, so that after that we only need to worry about local (non-Internet) issues. | |||
Here is a one-liner for downloading all the source dependencies of a package (thanks Eelco Dolstra!): | |||
<syntaxHighlight lang="shell"> | |||
$> nix-store -r $(grep -l outputHash $(nix-store -qR $(nix-instantiate '<nixpkgs>' -A bochs) | grep '.drv$')) | |||
</syntaxHighlight> | |||
Let's dissect this: | |||
<syntaxHighlight lang="sh"> | |||
## instantiate bochs into `.drv` files and print the filenames; | |||
instantiate=$(nix-instantiate '<nixpkgs>' -A bochs) | |||
## print all references/requirements, filtering the .drv files (which is where static derivations live) | |||
requirements=$(nix-store -qR $intantiate | grep '.drv$') | |||
## keep only the source derivations, since those will have a predefined hash of the output | |||
sources=$(grep -l outputHash $requirements) | |||
## realize those derivations, downloading all sources and storing them in the nix store | |||
nix-store -r $sources | |||
</syntaxHighlight> | |||
After that, all sources will be locally stored! | |||
== Wrapping packages == | == Wrapping packages == | ||