# Adapted from: https://github.com/MarceColl/zen-browser-flake
{ lib
, stdenv
, makeWrapper
, copyDesktopItems
, libGL
, fontconfig
, libxkbcommon
, zlib
, freetype
, gtk3
, libxml2
, dbus
, xcb-util-cursor
, alsa-lib
, pango
, atk
, cairo
, gdk-pixbuf
, glib
, xorg
}:
stdenv.mkDerivation rec {
  name = "zenBrowser";
  version = "1.0.0-a.27";

  src = builtins.fetchTarball {
    url = "https://github.com/zen-browser/desktop/releases/download/${version}/zen.linux-specific.tar.bz2";
    sha256 = "sha256:0vmn10qpr96b4i8j24sa6ipg3fcxiiigkjwclbr5fknkfj3r6ds7";
  };

  desktopSrc = ./.;

  phases = [ "installPhase" "fixupPhase" ];

  nativeBuildInputs = [ makeWrapper copyDesktopItems ];

  installPhase = ''
    	  mkdir -p $out/bin && cp -r $src/* $out/bin
    	  install -D $desktopSrc/zen.desktop $out/share/applications/dev.zen.Zen.desktop
    	  install -D $src/browser/chrome/icons/default/default128.png $out/share/icons/hicolor/128x128/apps/zen.png
    	'';

  fixupPhase =
    let
      runtimeLibs = [
        libGL
        stdenv.cc.cc
        fontconfig
        libxkbcommon
        zlib
        freetype
        gtk3
        libxml2
        dbus
        xcb-util-cursor
        alsa-lib
        pango
        atk
        cairo
        gdk-pixbuf
        glib
      ] ++ (with xorg; [
        libxcb
        libX11
        libXcursor
        libXrandr
        libXi
        libXext
        libXcomposite
        libXdamage
        libXfixes
      ]);

    in
    ''
      chmod 755 $out/bin/*
      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/bin/zen
      wrapProgram $out/bin/zen --set LD_LIBRARY_PATH "${lib.makeLibraryPath runtimeLibs}"
      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/bin/zen-bin
      wrapProgram $out/bin/zen-bin --set LD_LIBRARY_PATH "${lib.makeLibraryPath runtimeLibs}"
      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/bin/glxtest
      wrapProgram $out/bin/glxtest --set LD_LIBRARY_PATH "${lib.makeLibraryPath runtimeLibs}"
      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/bin/updater
      wrapProgram $out/bin/updater --set LD_LIBRARY_PATH "${lib.makeLibraryPath runtimeLibs}"
      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/bin/vaapitest
      wrapProgram $out/bin/vaapitest --set LD_LIBRARY_PATH "${lib.makeLibraryPath runtimeLibs}"
    '';
}