{ fetchurl, fetchhg, stdenv, xorg, makeWrapper }:

stdenv.mkDerivation rec {
  # Inferno is a rolling release from a mercurial repository. For the verison number
  # of the package I'm using the mercurial commit number.
  rev = "785";
  name = "inferno-${rev}";
  host = "Linux";
  objtype = "386";

  src = fetchhg {
    url    = "https://bitbucket.org/inferno-os/inferno-os";
    sha256 = "1b428ma9fi5skvfrxp91dr43a62kax89wmx7950ahc1cxyx90k7x";
  };

  buildInputs = [ makeWrapper ] ++ (with xorg; [ libX11 libXpm libXext xextproto ]);

  infernoWrapper = ./inferno;

  configurePhase = ''
    sed -e 's@^ROOT=.*$@ROOT='"$out"'/share/inferno@g' \
        -e 's@^OBJTYPE=.*$@OBJTYPE=${objtype}@g' \
        -e 's@^SYSHOST=.*$@SYSHOST=${host}@g' \
        -i mkconfig
    # Get rid of an annoying warning
    sed -e 's/_BSD_SOURCE/_DEFAULT_SOURCE/g' \
        -i ${host}/${objtype}/include/lib9.h
  '';

  buildPhase = ''
    mkdir -p $out/share/inferno
    cp -r . $out/share/inferno
    ./makemk.sh
    export PATH=$PATH:$out/share/inferno/Linux/386/bin
    mk nuke
    mk
  '';

  installPhase = ''
    # Installs executables in $out/share/inferno/${host}/${objtype}/bin
    mk install
    mkdir -p $out/bin
    # Install start-up script
    makeWrapper $infernoWrapper $out/bin/inferno \
      --suffix PATH ':' "$out/share/inferno/Linux/386/bin" \
      --set INFERNO_ROOT "$out/share/inferno"
  '';

  meta = {
    description = "A compact distributed operating system for building cross-platform distributed systems";
    homepage = "http://inferno-os.org/";
    license = stdenv.lib.licenses.gpl2;
    maintainers = with stdenv.lib.maintainers; [ doublec kovirobi ];
    platforms = with stdenv.lib.platforms; linux;
  };
}