Let all the files in the system tarball sit in a directory served by NFS (the
NFS root) like this in exportfs:
  /home/pcroot    192.168.1.0/24(rw,no_root_squash,no_all_squash)

Run "exportfs -a" after editing /etc/exportfs, for the nfs server to be aware
of the changes.

Use a tftp server serving the root of boot/ (from the system tarball).

In order to have PXE boot, use the boot/dhcpd.conf-example file for your dhcpd
server, as it will point your PXE clients to pxelinux.0 from the tftp server.
Adapt the configuration to your network.

Adapt the pxelinux configuration (boot/pxelinux.cfg/default) to set the path to
your nfrroot. If you use ip=dhcp in the kernel, the nfs server ip will be taken
from dhcp and so you don't have to specify it.

The linux in bzImage includes network drivers for some usual cards.


QEMU Testing
---------------

You can test qemu pxe boot without having a DHCP server adapted, but having
nfsroot, like this:
  qemu-system-x86_64 -tftp /home/pcroot/boot -net nic -net user,bootfile=pxelinux.0 -boot n

I don't know how to use NFS through the qemu '-net user' though.


QEMU Testing with NFS root and bridged network
-------------------------------------------------

This allows testing with qemu as any other host in your LAN.

Testing with the real dhcpd server requires setting up a bridge and having a
tap device.
  tunctl -t tap0
  brctl addbr br0
  brctl addif br0 eth0
  brctl addif tap0 eth0
  ifconfig eth0 0.0.0.0 up
  ifconfig tap0 0.0.0.0 up
  ifconfig br0 up # With your ip configuration

Then you can run qemu:
  qemu-system-x86_64 -boot n -net tap,ifname=tap0,script=no -net nic,model=e1000


Using the system-tarball-pc in a chroot
--------------------------------------------------

Installation:
  mkdir nixos-chroot && cd nixos-chroot
  tar xf your-system-tarball.tar.xz
  mkdir sys dev proc tmp root var run
  mount --bind /sys sys
  mount --bind /dev dev
  mount --bind /proc proc

Activate the system: look for a directory in nix/store similar to:
    "/nix/store/y0d1lcj9fppli0hl3x0m0ba5g1ndjv2j-nixos-feb97bx-53f008"
Having found it, activate that nixos system *twice*:
  chroot . /nix/store/SOMETHING-nixos-SOMETHING/activate
  chroot . /nix/store/SOMETHING-nixos-SOMETHING/activate

This runs a 'hostname' command. Restore your old hostname with:
  hostname OLDHOSTNAME

Copy your system resolv.conf to the /etc/resolv.conf inside the chroot:
  cp /etc/resolv.conf etc

Then you can get an interactive shell in the nixos chroot. '*' means
to run inside the chroot interactive shell
  chroot . /bin/sh
*  source /etc/profile

Populate the nix database: that should be done in the init script if you
had booted this nixos. Run:
*  `grep local-cmds run/current-system/init`

Then you can proceed normally subscribing to a nixos channel:
  nix-channel --add https://nixos.org/channels/nixos-unstable
  nix-channel --update

Testing:
  nix-env -i hello
  which hello
  hello
