Nix Cookbook: Difference between revisions
new recipe |
→Vulnerabilities: Add an actual link to vulnix |
||
(6 intermediate revisions by 2 users not shown) | |||
Line 126: | Line 126: | ||
</syntaxHighlight> | </syntaxHighlight> | ||
== Deprecating input | == Deprecating a specific input parameter in mkDerivation-style packages == | ||
Sometimes we want to rename | Sometimes we want to rename some input parameter in . | ||
E.G. an option `withX` that enables the X11 GUI for a certain app: | E.G. an option `withX` that enables the X11 GUI for a certain app: | ||
Line 137: | Line 137: | ||
withX ? true, | withX ? true, | ||
/*. . .*/ | /*. . .*/ | ||
} | }: | ||
stdenv.mkDerivation { /* . . . */} | |||
</syntaxHighlight> | </syntaxHighlight> | ||
Suppose that a new version of this package features a more agnostic GUI that can be linked to X11, GTK, Qt etc. | Suppose that a new version of this package features a more agnostic GUI that can be linked to X11, GTK, Qt etc. | ||
Because of it, `withX` is no longer a | Because of it, `withX` is no longer a descriptive name for this functionality. | ||
However, renaming the parameter is dangerous, because other functions that call this function expect this parameter. | |||
The problem becomes more pronounced when in conjunction with custom, third-party overlays. | |||
The solution is, roughly, emit a warning about the old parameter being used, reporting the user to the new parameter: | The solution is, roughly, to emit a warning about the old parameter being used, reporting the user to the new parameter: | ||
<syntaxHighlight lang="nix"> | <syntaxHighlight lang="nix"> | ||
Line 154: | Line 156: | ||
withGui ? | withGui ? | ||
if (withX != null) then | if (withX != null) then | ||
lib.warn | lib.warn '' | ||
withX is deprecated and will be removed in the next release; | |||
use withGui instead. | |||
'' withX | |||
else | else | ||
true | true | ||
Line 160: | Line 165: | ||
} | } | ||
</syntaxHighlight> | </syntaxHighlight> | ||
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" line="1"> | |||
## 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 $instantiate | 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! | |||
Source: [https://web.archive.org/web/20160829181620/http://lists.science.uu.nl/pipermail/nix-dev/2013-January/010438.html nix-dev thread] | |||
== Wrapping packages == | == Wrapping packages == | ||
Line 347: | Line 388: | ||
=== Vulnerabilities === | === Vulnerabilities === | ||
See | See [https://github.com/nix-community/vulnix vulnix]. | ||
[[Category:nix]] | [[Category:nix]] | ||
[[Category:Cookbook]] | [[Category:Cookbook]] |