{stdenv, fetchFromGitHub, pkgconfig, wrapGAppsHook, makeWrapper
,help2man, lua5, luafilesystem, luajit, sqlite
,webkitgtk, gtk3, gst_all_1}:

let
  lualibs = [luafilesystem];
  getPath       = lib : type : "${lib}/lib/lua/${lua5.luaversion}/?.${type};${lib}/share/lua/${lua5.luaversion}/?.${type}";
  getLuaPath    = lib : getPath lib "lua";
  getLuaCPath   = lib : getPath lib "so";
  luaPath       = stdenv.lib.concatStringsSep ";" (map getLuaPath lualibs);
  luaCPath      = stdenv.lib.concatStringsSep ";" (map getLuaCPath lualibs);

in stdenv.mkDerivation rec {

  name = "luakit-${version}";
  version = "2017.08.10";
  src = fetchFromGitHub {
    owner = "luakit";
    repo = "luakit";
    rev = "${version}";
    sha256 = "09z88b50vf2y64vj79cymknyzk3py6azv4r50jng4cw9jx2ray7r";
  };

  nativeBuildInputs = [pkgconfig help2man wrapGAppsHook makeWrapper];

  buildInputs = [webkitgtk lua5 luafilesystem luajit sqlite gtk3
    gst_all_1.gstreamer gst_all_1.gst-plugins-base
    gst_all_1.gst-plugins-good gst_all_1.gst-plugins-bad gst_all_1.gst-plugins-ugly
    gst_all_1.gst-libav
                ];

  postPatch =
    #Kind of ugly seds here. There must be a better solution.
  ''
    patchShebangs ./build-utils
    sed -i "2 s|require \"lib.lousy.util\"|dofile(\"./lib/lousy/util.lua\")|" ./build-utils/docgen/gen.lua;
    sed -i "3 s|require \"lib.markdown\"|dofile(\"./lib/markdown.lua\")|" ./build-utils/docgen/gen.lua;
    sed -i "1,2 s|require(\"lib.lousy.util\")|dofile(\"./lib/lousy/util.lua\")|" ./build-utils/find_files.lua;
  '';

  buildPhase = ''
    make DEVELOPMENT_PATHS=0 USE_LUAJIT=1 INSTALLDIR=$out PREFIX=$out USE_GTK3=1
  '';

  installPhase = let
    luaKitPath = "$out/share/luakit/lib/?/init.lua;$out/share/luakit/lib/?.lua";
  in ''
    make DEVELOPMENT_PATHS=0 INSTALLDIR=$out PREFIX=$out XDGPREFIX=$out/etc/xdg USE_GTK3=1 install
    wrapProgram $out/bin/luakit                                         \
      --prefix XDG_CONFIG_DIRS : "$out/etc/xdg"                         \
      --set LUA_PATH '${luaKitPath};${luaPath};'                      \
      --set LUA_CPATH '${luaCPath};'
  '';

  meta = with stdenv.lib; {
    description = "Fast, small, webkit based browser framework extensible in Lua";
    homepage    = "http://luakit.org";
    license     = licenses.gpl3;
    platforms   = platforms.linux; # Only tested linux
  };
}
