2016-12-17 19:05:21 +01:00
|
|
|
<chapter xmlns="http://docbook.org/ns/docbook"
|
|
|
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
|
|
xml:id="chap-overlays">
|
|
|
|
|
|
|
|
<title>Overlays</title>
|
|
|
|
|
|
|
|
<para>This chapter describes how to extend and change Nixpkgs content using
|
2016-12-26 20:30:51 +01:00
|
|
|
overlays. Overlays are used to add layers in the fix-point used by Nixpkgs
|
2016-12-17 19:05:21 +01:00
|
|
|
to bind the dependencies of all packages.</para>
|
|
|
|
|
|
|
|
<!--============================================================-->
|
|
|
|
|
|
|
|
<section xml:id="sec-overlays-install">
|
|
|
|
<title>Installing Overlays</title>
|
|
|
|
|
2016-12-26 20:26:24 +01:00
|
|
|
<para>The set of overlays are looked for in the following order, only the
|
|
|
|
first one present is considered, and all the rest are ignored:
|
2016-12-17 19:05:21 +01:00
|
|
|
|
|
|
|
<orderedlist>
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
|
|
|
<para>As argument of the imported attribute set. When importing Nixpkgs,
|
|
|
|
the <varname>overlays</varname> attribute argument can be set to a list of
|
|
|
|
functions, which would be describe in <xref linkend="sec-overlays-layout"/>.</para>
|
|
|
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
|
|
|
<para>As a directory pointed by the environment variable named
|
|
|
|
<varname>NIXPKGS_OVERLAYS</varname>. This directory can contain symbolic
|
|
|
|
links to Nix expressions.
|
|
|
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
|
|
|
<para>As the directory located at
|
|
|
|
<filename>~/.nixpkgs/overlays/</filename>. This directory can contain
|
|
|
|
symbolic links to Nix expressions.
|
|
|
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
</orderedlist>
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>For the second and third option, the directory contains either
|
|
|
|
directories providing a default.nix expression, or files, or symbolic links
|
|
|
|
to the entry Nix expression of the overlay. These Nix expressions are
|
|
|
|
following the syntax described in <xref
|
|
|
|
linkend="sec-overlays-layout"/>.</para>
|
|
|
|
|
|
|
|
<para>To install an overlay, using the last option. Clone the repository of
|
|
|
|
the overlay, and add a symbolic link to it in the
|
|
|
|
<filename>~/.nixpkgs/overlays/</filename> directory.</para>
|
|
|
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<!--============================================================-->
|
|
|
|
|
|
|
|
<section xml:id="sec-overlays-layout">
|
|
|
|
<title>Overlays Layout</title>
|
|
|
|
|
|
|
|
<para>An overlay is a Nix expression, which is a function which accepts 2
|
|
|
|
arguments.</para>
|
|
|
|
|
|
|
|
<programlisting>
|
|
|
|
self: super:
|
|
|
|
|
|
|
|
{
|
|
|
|
foo = super.foo.override { ... };
|
|
|
|
bar = import ./pkgs/bar {
|
|
|
|
inherit (self) stdenv fetchurl;
|
|
|
|
inherit (self) ninja crawl dwarf-fortress;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
</programlisting>
|
|
|
|
|
|
|
|
<para>The first argument, usualy named <varname>self</varname>, corresponds
|
|
|
|
to the final package set. You should use this set to inherit all the
|
|
|
|
dependencies needed by your package expression.</para>
|
|
|
|
|
|
|
|
<para>The second argument, usualy named <varname>super</varname>,
|
|
|
|
corresponds to the result of the evaluation of the previous stages of
|
|
|
|
Nixpkgs, it does not contain any of the packages added by the current
|
|
|
|
overlay nor any of the following overlays. This set is used in to override
|
|
|
|
existing packages, either by changing their dependencies or their
|
|
|
|
recipes.</para>
|
|
|
|
|
|
|
|
<para>The value returned by this function should be a set similar to
|
|
|
|
<filename>pkgs/top-level/all-packages.nix</filename>, which contains either
|
|
|
|
extra packages defined by the overlay, or which overwrite Nixpkgs packages
|
|
|
|
with other custom defaults. This is similar to <xref
|
|
|
|
linkend="sec-modify-via-packageOverrides"/>.</para>
|
|
|
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
</chapter>
|