@@ -12,7 +12,7 @@
<para > Checkout the Nixpkgs source tree:
<screen >
$ svn checkout https://svn.nixos.org/repos/nix/nixpkgs/trunk nixpkgs
$ git clone git://github.com/NixOS/nixpkgs.git
$ cd nixpkgs</screen>
</para>
@@ -29,7 +29,7 @@ $ cd nixpkgs</screen>
organisation. Create a directory for your package, e.g.
<screen >
$ svn mkdir pkgs/development/libraries/libfoo</screen>
$ mkdir pkgs/development/libraries/libfoo</screen>
</para>
</listitem>
@@ -44,7 +44,7 @@ $ svn mkdir pkgs/development/libraries/libfoo</screen>
<screen >
$ emacs pkgs/development/libraries/libfoo/default.nix
$ svn add pkgs/development/libraries/libfoo/default.nix</screen>
$ git add pkgs/development/libraries/libfoo/default.nix</screen>
</para>
@@ -56,7 +56,7 @@ $ svn add pkgs/development/libraries/libfoo/default.nix</screen>
<listitem >
<para > GNU cpio: <link
xlink:href= "https://svn.nixos.org/repos/nix/nixpkgs/trunk /pkgs/tools/archivers/cpio/default.nix" > <filename > pkgs/tools/archivers/cpio/default.nix</filename> </link> .
xlink:href= "https://github.com/NixOS/nixpkgs/blob/master /pkgs/tools/archivers/cpio/default.nix" > <filename > pkgs/tools/archivers/cpio/default.nix</filename> </link> .
The simplest possible package. The generic builder in
<varname > stdenv</varname> does everything for you. It has
no dependencies beyond <varname > stdenv</varname> .</para>
@@ -64,21 +64,21 @@ $ svn add pkgs/development/libraries/libfoo/default.nix</screen>
<listitem >
<para > GNU Hello: <link
xlink:href= "https://svn.nixos.org/repos/nix/nixpkgs/trunk /pkgs/applications/misc/hello/ex-2/default.nix" > <filename > pkgs/applications/misc/hello/ex-2/default.nix</filename> </link> .
xlink:href= "https://github.com/NixOS/nixpkgs/blob/master /pkgs/applications/misc/hello/ex-2/default.nix" > <filename > pkgs/applications/misc/hello/ex-2/default.nix</filename> </link> .
Also trivial, but it specifies some <varname > meta</varname>
attributes which is good practice.</para>
</listitem>
<listitem >
<para > GNU Multiple Precision arithmetic library (GMP): <link
xlink:href= "https://svn.nixos.org/repos/nix/nixpkgs/trunk /pkgs/development/libraries/gmp/default.nix" > <filename > pkgs/development/libraries/gmp/default.nix</filename> </link> .
xlink:href= "https://github.com/NixOS/nixpkgs/blob/master /pkgs/development/libraries/gmp/default.nix" > <filename > pkgs/development/libraries/gmp/default.nix</filename> </link> .
Also done by the generic builder, but has a dependency on
<varname > m4</varname> .</para>
</listitem>
<listitem >
<para > Pan, a GTK-based newsreader: <link
xlink:href= "https://svn.nixos.org/repos/nix/nixpkgs/trunk /pkgs/applications/networking/newsreaders/pan/default.nix" > <filename > pkgs/applications/networking/newsreaders/pan/default.nix</filename> </link> .
xlink:href= "https://github.com/NixOS/nixpkgs/blob/master /pkgs/applications/networking/newsreaders/pan/default.nix" > <filename > pkgs/applications/networking/newsreaders/pan/default.nix</filename> </link> .
Has an optional dependency on <varname > gtkspell</varname> ,
which is only built if <varname > spellCheck</varname> is
<literal > true</literal> .</para>
@@ -86,7 +86,7 @@ $ svn add pkgs/development/libraries/libfoo/default.nix</screen>
<listitem >
<para > Apache HTTPD: <link
xlink:href= "https://svn.nixos.org/repos/nix/nixpkgs/trunk /pkgs/servers/http/apache-httpd/default.nix" > <filename > pkgs/servers/http/apache-httpd/default.nix</filename> </link> .
xlink:href= "https://github.com/NixOS/nixpkgs/blob/master /pkgs/servers/http/apache-httpd/default.nix" > <filename > pkgs/servers/http/apache-httpd/default.nix</filename> </link> .
A bunch of optional features, variable substitutions in the
configure flags, a post-install hook, and miscellaneous
hackery.</para>
@@ -94,9 +94,9 @@ $ svn add pkgs/development/libraries/libfoo/default.nix</screen>
<listitem >
<para > BitTorrent (wxPython-based): <link
xlink:href= "https://svn.nixos.org/repos/nix/nixpkgs/trunk /pkgs/tools/networking/p2p/bittorrent/default.nix" > <filename > pkgs/tools/networking/p2p/bittorrent/default.nix</filename> </link> .
xlink:href= "https://github.com/NixOS/nixpkgs/blob/master /pkgs/tools/networking/p2p/bittorrent/default.nix" > <filename > pkgs/tools/networking/p2p/bittorrent/default.nix</filename> </link> .
Uses an external <link
xlink:href= "https://svn.nixos.org/repos/nix/nixpkgs/trunk /pkgs/tools/networking/p2p/bittorrent/builder.sh" > build
xlink:href= "https://github.com/NixOS/nixpkgs/blob/master /pkgs/tools/networking/p2p/bittorrent/builder.sh" > build
script</link> , which can be useful if you have lots of code
that you don’ t want cluttering up the Nix expression. But
external builders are mostly obsolete.
@@ -105,22 +105,22 @@ $ svn add pkgs/development/libraries/libfoo/default.nix</screen>
<listitem >
<para > Thunderbird: <link
xlink:href= "https://svn.nixos.org/repos/nix/nixpkgs/trunk /pkgs/applications/networking/mailreaders/thunderbird/3.x.nix" > <filename > pkgs/applications/networking/mailreaders/thunderbird/3.x.nix</filename> </link> .
xlink:href= "https://github.com/NixOS/nixpkgs/blob/master /pkgs/applications/networking/mailreaders/thunderbird/3.x.nix" > <filename > pkgs/applications/networking/mailreaders/thunderbird/3.x.nix</filename> </link> .
Lots of dependencies.</para>
</listitem>
<listitem >
<para > JDiskReport, a Java utility: <link
xlink:href= "https://svn.nixos.org/repos/nix/nixpkgs/trunk /pkgs/tools/misc/jdiskreport/default.nix" > <filename > pkgs/tools/misc/jdiskreport/default.nix</filename> </link>
xlink:href= "https://github.com/NixOS/nixpkgs/blob/master /pkgs/tools/misc/jdiskreport/default.nix" > <filename > pkgs/tools/misc/jdiskreport/default.nix</filename> </link>
(and the <link
xlink:href= "https://svn.nixos.org/repos/nix/nixpkgs/trunk /pkgs/tools/misc/jdiskreport/builder.sh" > builder</link> ).
xlink:href= "https://github.com/NixOS/nixpkgs/blob/master /pkgs/tools/misc/jdiskreport/builder.sh" > builder</link> ).
Nixpkgs doesn’ t have a decent <varname > stdenv</varname> for
Java yet so this is pretty ad-hoc.</para>
</listitem>
<listitem >
<para > XML::Simple, a Perl module: <link
xlink:href= "https://svn.nixos.org/repos/nix/nixpkgs/trunk /pkgs/top-level/perl-packages.nix" > <filename > pkgs/top-level/perl-packages.nix</filename> </link>
xlink:href= "https://github.com/NixOS/nixpkgs/blob/master /pkgs/top-level/perl-packages.nix" > <filename > pkgs/top-level/perl-packages.nix</filename> </link>
(search for the <varname > XMLSimple</varname> attribute).
Most Perl modules are so simple to build that they are
defined directly in <filename > perl-packages.nix</filename> ;
@@ -129,10 +129,10 @@ $ svn add pkgs/development/libraries/libfoo/default.nix</screen>
<listitem >
<para > Adobe Reader: <link
xlink:href= "https://svn.nixos.org/repos/nix/nixpkgs/trunk /pkgs/applications/misc/adobe-reader/default.nix" > <filename > pkgs/applications/misc/adobe-reader/default.nix</filename> </link> .
xlink:href= "https://github.com/NixOS/nixpkgs/blob/master /pkgs/applications/misc/adobe-reader/default.nix" > <filename > pkgs/applications/misc/adobe-reader/default.nix</filename> </link> .
Shows how binary-only packages can be supported. In
particular the <link
xlink:href= "https://svn.nixos.org/repos/nix/nixpkgs/trunk /pkgs/applications/misc/adobe-reader/builder.sh" > builder</link>
xlink:href= "https://github.com/NixOS/nixpkgs/blob/master /pkgs/applications/misc/adobe-reader/builder.sh" > builder</link>
uses <command > patchelf</command> to set the RUNPATH and ELF
interpreter of the executables so that the right libraries
are found at runtime.</para>
@@ -163,7 +163,7 @@ $ svn add pkgs/development/libraries/libfoo/default.nix</screen>
<listitem >
<para > A list of schemes for <literal > mirror://</literal>
URLs can be found in <link
xlink:href= "https://svn.nixos.org/repos/nix/nixpkgs/trunk /pkgs/build-support/fetchurl/mirrors.nix" > <filename > pkgs/build-support/fetchurl/mirrors.nix</filename> </link> .</para>
xlink:href= "https://github.com/NixOS/nixpkgs/blob/master /pkgs/build-support/fetchurl/mirrors.nix" > <filename > pkgs/build-support/fetchurl/mirrors.nix</filename> </link> .</para>
</listitem>
</itemizedlist>
@@ -181,7 +181,7 @@ $ svn add pkgs/development/libraries/libfoo/default.nix</screen>
<listitem >
<para > Add a call to the function defined in the previous step to
<link
xlink:href= "https://svn.nixos.org/repos/nix/nixpkgs/trunk /pkgs/top-level/all-packages.nix" > <filename > pkgs/top-level/all-packages.nix</filename> </link>
xlink:href= "https://github.com/NixOS/nixpkgs/blob/master /pkgs/top-level/all-packages.nix" > <filename > pkgs/top-level/all-packages.nix</filename> </link>
with some descriptive name for the variable,
e.g. <varname > libfoo</varname> .
@@ -220,8 +220,7 @@ $ nix-env -f . -iA libfoo</screen>
</listitem>
<listitem >
<para > Optionally commit the new package (<command > svn
ci</command> ) or send a patch to
<para > Optionally commit the new package, or send a patch to
<literal > nix-dev@cs.uu.nl</literal> .</para>
</listitem>
@@ -230,7 +229,7 @@ $ nix-env -f . -iA libfoo</screen>
package and make them available in the <link
xlink:href= "http://nixos.org/releases/nixpkgs/channels/nixpkgs-unstable/" > <literal > nixpkgs</literal>
channel</link> , add it to <link
xlink:href= "https://svn.nixos.org/repos/nix/nixpkgs/trunk /pkgs/top-level/release.nix" > <filename > pkgs/top-level/release.nix</filename> </link> .</para>
xlink:href= "https://github.com/NixOS/nixpkgs/blob/master /pkgs/top-level/release.nix" > <filename > pkgs/top-level/release.nix</filename> </link> .</para>
</listitem>
</orderedlist>