Document about packageOverrides (re issue #4505)
This commit is contained in:
Domen Kožar 2015-04-24 11:20:41 +02:00
commit 69777a7cb4

View File

@ -1,6 +1,6 @@
<chapter xmlns="http://docbook.org/ns/docbook" <chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="chap-packageconfig"> xml:id="chap-packageconfig">
<title><filename>~/.nixpkgs/config.nix</filename>: global configuration</title> <title><filename>~/.nixpkgs/config.nix</filename>: global configuration</title>
@ -9,62 +9,79 @@
</para> </para>
<para> <para>
To apply the configuration edit <filename>~/.nixpkgs/config.nix</filename> To apply the configuration edit <filename>~/.nixpkgs/config.nix</filename>
and set it like and set it like
<programlisting>{ <programlisting>{
allowUnfree = true; allowUnfree = true;
}</programlisting> }</programlisting>
and will allow the Nix package manager to install unfree licensed packages. and will allow the Nix package manager to install unfree licensed packages.
The configuration as listed also applies to NixOS under <option>nixpkgs.config</option> set. The configuration as listed also applies to NixOS under <option>nixpkgs.config</option> set.
</para> </para>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Allow installing of packages that are distributed under unfree license by setting Allow installing of packages that are distributed under unfree license by setting
<programlisting>allowUnfree = true;</programlisting> <programlisting>allowUnfree = true;</programlisting>
or deny them by setting it to <literal>false</literal>. or deny them by setting it to <literal>false</literal>.
</para> </para>
<para> <para>
Same can be achieved by setting the environment variable: Same can be achieved by setting the environment variable:
<programlisting>$ export NIXPKGS_ALLOW_UNFREE=1</programlisting> <programlisting>$ export NIXPKGS_ALLOW_UNFREE=1</programlisting>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Whenever unfree packages are not allowed, single packages can Whenever unfree packages are not allowed, single packages can
still be allowed by a predicate function that accepts package still be allowed by a predicate function that accepts package
as an argument and should return a boolean: as an argument and should return a boolean:
<programlisting>allowUnfreePredicate = (pkg: ...);</programlisting> <programlisting>allowUnfreePredicate = (pkg: ...);</programlisting>
Example to allow flash player only: Example to allow flash player only:
<programlisting>allowUnfreePredicate = (pkg: pkgs.lib.hasPrefix "flashplayer-" pkg.name);</programlisting> <programlisting>allowUnfreePredicate = (pkg: pkgs.lib.hasPrefix "flashplayer-" pkg.name);</programlisting>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Whenever unfree packages are not allowed, packages can still be Whenever unfree packages are not allowed, packages can still be
whitelisted by their license: whitelisted by their license:
<programlisting>whitelistedLicenses = with stdenv.lib.licenses; [ amd wtfpl ];</programlisting> <programlisting>whitelistedLicenses = with stdenv.lib.licenses; [ amd wtfpl ];</programlisting>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
In addition to whitelisting licenses which are denied by the In addition to whitelisting licenses which are denied by the
<literal>allowUnfree</literal> setting, you can also explicitely <literal>allowUnfree</literal> setting, you can also explicitely
deny installation of packages which have a certain license: deny installation of packages which have a certain license:
<programlisting>blacklistedLicenses = with stdenv.lib.licenses; [ agpl3 gpl3 ];</programlisting> <programlisting>blacklistedLicenses = with stdenv.lib.licenses; [ agpl3 gpl3 ];</programlisting>
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
<para> <para>
A complete list of licenses can be found in the file A complete list of licenses can be found in the file
<filename>lib/licenses.nix</filename> of the nix package tree. <filename>lib/licenses.nix</filename> of the nix package tree.
</para> </para>
</chapter> <section><title>Modify packages via <literal>packageOverrides</literal></title>
<para>
You can define a function called <varname>packageOverrides</varname>
in your local <filename>~/.nixpkgs/config</filename> to overide nix
packages. It must be a function that takes pkgs as an argument and
return modified set of packages.
<programlisting>{
packageOverrides = pkgs: rec {
foo = pkgs.foo.override { ... };
};
}</programlisting>
</para>
</section>
</chapter>