<chapter xmlns="http://docbook.org/ns/docbook"
         xmlns:xlink="http://www.w3.org/1999/xlink"
         xml:id="chap-packageconfig">

<title><filename>~/.nixpkgs/config.nix</filename>: global configuration</title>

    <para>
      Nix packages can be configured to allow or deny certain options.
    </para>

    <para>
        To apply the configuration edit <filename>~/.nixpkgs/config.nix</filename>
        and set it like
<programlisting>{
  allowUnfree = true;
}</programlisting>
        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.
    </para>

    <itemizedlist>
        <listitem>
            <para>
                Allow installing of packages that are distributed under unfree license by setting
                <programlisting>allowUnfree = true;</programlisting>
                or deny them by setting it to <literal>false</literal>.
            </para>
            <para>
                Same can be achieved by setting the environment variable:
                <programlisting>$ export NIXPKGS_ALLOW_UNFREE=1</programlisting>
            </para>
        </listitem>

        <listitem>
            <para>
                Whenever unfree packages are not allowed, single packages can
                still be allowed by a predicate function that accepts package
                as an argument and should return a boolean:
                <programlisting>allowUnfreePredicate = (pkg: ...);</programlisting>

                Example to allow flash player only:
                <programlisting>allowUnfreePredicate = (pkg: pkgs.lib.hasPrefix "flashplayer-" pkg.name);</programlisting>
            </para>
        </listitem>

        <listitem>
            <para>
                Whenever unfree packages are not allowed, packages can still be
                whitelisted by their license:
                <programlisting>whitelistedLicenses = with stdenv.lib.licenses; [ amd wtfpl ];</programlisting>
            </para>
        </listitem>

        <listitem>
            <para>
                In addition to whitelisting licenses which are denied by the
                <literal>allowUnfree</literal> setting, you can also explicitely
                deny installation of packages which have a certain license:
                <programlisting>blacklistedLicenses = with stdenv.lib.licenses; [ agpl3 gpl3 ];</programlisting>
            </para>
        </listitem>
    </itemizedlist>

    <para>
        A complete list of licenses can be found in the file
        <filename>lib/licenses.nix</filename> of the nix package tree.
    </para>

</chapter>