{ lib, stdenv, requireFile, SDL, libpulseaudio, alsa-lib, runtimeShell }:

stdenv.mkDerivation rec {
  pname = "vessel";
  version = "12082012";

  goBuyItNow = ''
    We cannot download the full version automatically, as you require a license.
    Once you bought a license, you need to add your downloaded version to the nix store.
    You can do this by using "nix-prefetch-url file://\$PWD/vessel-${version}-bin" in the
    directory where you saved it.
  '';

  src = if (stdenv.isi686) then
    requireFile {
      message = goBuyItNow;
      name = "vessel-${version}-bin";
      sha256 = "1vpwcrjiln2mx43h7ib3jnccyr3chk7a5x2bw9kb4lw8ycygvg96";
    } else throw "unsupported platform ${stdenv.hostPlatform.system} only i686-linux supported for now.";

  phases = "installPhase";
  ld_preload = ./isatty.c;

  libPath = lib.makeLibraryPath [ stdenv.cc.cc stdenv.cc.libc ]
    + ":" + lib.makeLibraryPath [ SDL libpulseaudio alsa-lib ] ;

  installPhase = ''
    mkdir -p $out/libexec/strangeloop/vessel/
    mkdir -p $out/bin

    # allow scripting of the mojoinstaller
    gcc -fPIC -shared -o isatty.so $ld_preload

    echo @@@
    echo @@@ this next step appears to hang for a while
    echo @@@

    # if we call ld.so $(bin) we don't need to set the ELF interpreter, and save a patchelf step.
    LD_PRELOAD=./isatty.so $(cat $NIX_CC/nix-support/dynamic-linker) $src << IM_A_BOT
    n
    $out/libexec/strangeloop/vessel/
    IM_A_BOT

    # use nix SDL libraries
    rm $out/libexec/strangeloop/vessel/x86/libSDL*
    rm $out/libexec/strangeloop/vessel/x86/libstdc++*

    # props to Ethan Lee (the Vessel porter) for understanding
    # how $ORIGIN works in rpath. There is hope for humanity.
    patchelf \
      --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
      --set-rpath $libPath:$out/libexec/strangeloop/vessel/x86/ \
      $out/libexec/strangeloop/vessel/x86/vessel.x86

    # we need to libs to find their deps
    for lib in $out/libexec/strangeloop/vessel/x86/lib* ; do
    patchelf \
      --set-rpath $libPath:$out/libexec/strangeloop/vessel/x86/ \
      $lib
    done

    cat > $out/bin/Vessel << EOW
    #!${runtimeShell}
    cd $out/libexec/strangeloop/vessel/
    exec ./x86/vessel.x86
    EOW

    chmod +x $out/bin/Vessel
  '';

  meta = with lib; {
    description = "Fluid physics based puzzle game";
    longDescription = ''
      Living liquid machines have overrun this world of unstoppable progress,
      and it is the role of their inventor, Arkwright, to stop the chaos they are
      causing. Vessel is a game about a man with the power to bring ordinary matter
      to life, and all the consequences that ensue.
    '';
    homepage = "http://www.strangeloopgames.com";
    license = licenses.unfree;
    maintainers = with maintainers; [ jcumming ];
  };

}
