<chapter xmlns="http://docbook.org/ns/docbook"
         xmlns:xlink="http://www.w3.org/1999/xlink">

<title>Development</title>

<para>This chapter has some random notes on hacking on
NixOS.</para>


<section>

<title>Building specific parts of NixOS</title>

<para>

<screen>
$ nix-build /etc/nixos/nixos <replaceable>attr</replaceable></screen>

where <replaceable>attr</replaceable> is an attribute in
<filename>/etc/nixos/nixos/default.nix</filename>.  Attributes of interest include:

<variablelist>

  <varlistentry>
    <term><varname>kernel</varname></term>
    <listitem><para>The kernel.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>initialRamdisk</varname></term>
    <listitem><para>The initial ramdisk (initrd) for this configuration.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>bootStage1</varname></term>
    <listitem><para>The stage 1 (initrd) init script.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>bootStage2</varname></term>
    <listitem><para>The stage 2 init script.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>etc</varname></term>
    <listitem><para>The statically computed parts of <filename>/etc</filename>.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>upstartJobs</varname></term>
    <listitem><para>An attribute set containing the Upstart jobs.  For
    instance, the <varname>sshd</varname> Upstart job can be built by
    doing <literal>nix-build /etc/nixos/nixos -A
    upstartJobs.sshd</literal>.</para></listitem>
  </varlistentry>

</variablelist>

</para>

</section>


<section>

<title>Testing the installer</title>

<para>Building, burning, and booting from an installation CD is rather
tedious, so here is a quick way to see if the installer works
properly:

<screen>
$ nix-build .../nixos/configuration/rescue-cd.nix -A system.nixosInstall
$ dd if=/dev/zero of=diskimage seek=2G count=0 bs=1
$ yes | mke2fs -j diskimage
$ mount -o loop diskimage /mnt
$ ./result/bin/nixos-install</screen>

</para>

</section>


</chapter>