Document about packageOverrides

This commit is contained in:
Sebastian Jordan 2015-04-20 17:54:39 +02:00
parent 6bfc1f7380
commit 8a78dcc00f

@ -1,70 +1,104 @@
<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>
<section><title>Allow unfree software</title>
<para> <para>
Nix packages can be configured to allow or deny certain options. Nix packages can be configured to allow or deny certain options.
</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>
</section>
</chapter> <section><title>Overriding existing packages</title>
<para>
<filename>~/.nixpkgs/config.nix</filename> enables the user to
override package names without creating a fork of the Nixpkgs.
This is accomplished by defining a function called
<varname>packageOverrides</varname>. It takes the set of
packages, usually called <varname>pkgs</varname>, and returns a
modified set of packages.
</para>
<para>
Here is an example. Say we want to install
<varname>xbmc</varname> but we want to use another Python
version when running <varname>xbmc</varname>.
<programlisting>
packageOverrides = pkgs: rec {
xbmc = pkgs.xbmc.override {
python = pkgs.python26;
};
};
</programlisting>
Further information is available at the <command
xlink:href="https://nixos.org/wiki/Nix_Modifying_Packages">Nix
wiki</command>
</para>
</section>
</chapter>