about summary refs log tree commit diff
path: root/pkgs/games/heroic/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/games/heroic/default.nix')
-rw-r--r--pkgs/games/heroic/default.nix79
1 files changed, 55 insertions, 24 deletions
diff --git a/pkgs/games/heroic/default.nix b/pkgs/games/heroic/default.nix
index 044d159cde1d1..ebf56a21daad5 100644
--- a/pkgs/games/heroic/default.nix
+++ b/pkgs/games/heroic/default.nix
@@ -1,39 +1,70 @@
-{ lib, fetchurl, appimageTools }:
-
-let
-  pname = "heroic";
-  version = "2.2.6";
-  name = "${pname}-${version}";
-  src = fetchurl {
-    url = "https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher/releases/download/v${version}/Heroic-${version}.AppImage";
-    sha256 = "sha256-kL30/G4DpDPwGN7PvbWest7TcgL4Rd1c2OM4nRCT3bg=";
+{ lib
+, mkYarnPackage
+, fetchFromGitHub
+, makeWrapper
+, electron
+, gogdl
+, legendary-gl
+}:
+
+mkYarnPackage rec {
+  pname = "heroic-unwrapped";
+  version = "2.4.3";
+
+  src = fetchFromGitHub {
+    owner = "Heroic-Games-Launcher";
+    repo = "HeroicGamesLauncher";
+    rev = "v${version}";
+    sha256 = "sha256-x9zIM2kKi+JgIGIidQYjyjqVGweFJ8DE7IX9gYULQuQ=";
   };
-  appimageContents = appimageTools.extractType2 { inherit name src; };
 
-in
-appimageTools.wrapType2 {
-  inherit name src;
+  packageJSON = ./package.json;
+  yarnLock = ./yarn.lock;
+  yarnNix = ./yarn.nix;
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
 
-  extraInstallCommands = ''
-    mv $out/bin/${name} $out/bin/${pname}
+  DISABLE_ESLINT_PLUGIN = "true";
+
+  postBuild = let
+    yarnCmd = "yarn --production --offline --frozen-lockfile --ignore-engines --ignore-scripts --lockfile ${yarnLock}";
+  in ''
+    ${yarnCmd} build-electron
+    ${yarnCmd} build
+  '';
 
-    mkdir -p $out/share/${pname}
-    cp -a ${appimageContents}/locales $out/share/${pname}
-    cp -a ${appimageContents}/resources $out/share/${pname}
+  # Disable bundling into a tar archive.
+  doDist = false;
 
-    install -m 444 -D ${appimageContents}/heroic.desktop -t $out/share/applications
+  # --disable-gpu-compositing is to work around upstream bug
+  # https://github.com/electron/electron/issues/32317
+  postInstall = let
+    deps = "$out/libexec/heroic/deps/heroic";
+  in ''
+    rm -rf "${deps}/public/bin" "${deps}/build/bin"
+    mkdir -p "${deps}/public/bin/linux"
+    ln -s "${gogdl}/bin/gogdl" "${legendary-gl}/bin/legendary" "${deps}/public/bin/linux"
 
-    cp -a ${appimageContents}/usr/share/icons $out/share/
+    makeWrapper "${electron}/bin/electron" "$out/bin/heroic" \
+      --inherit-argv0 \
+      --add-flags --disable-gpu-compositing \
+      --add-flags "${deps}"
 
-    substituteInPlace $out/share/applications/heroic.desktop \
-      --replace 'Exec=AppRun' 'Exec=heroic'
+    substituteInPlace "${deps}/flatpak/com.heroicgameslauncher.hgl.desktop" \
+      --replace "Exec=heroic-run" "Exec=heroic"
+    mkdir -p "$out/share/applications" "$out/share/icons/hicolor/512x512/apps"
+    ln -s "${deps}/flatpak/com.heroicgameslauncher.hgl.desktop" "$out/share/applications"
+    ln -s "${deps}/flatpak/com.heroicgameslauncher.hgl.png" "$out/share/icons/hicolor/512x512/apps"
   '';
 
   meta = with lib; {
-    description = "A Native GUI Epic Games Launcher for Linux, Windows and Mac";
+    description = "A Native GOG and Epic Games Launcher for Linux, Windows and Mac";
     homepage = "https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher";
     license = licenses.gpl3Only;
-    maintainers = with maintainers; [ wolfangaukang ];
+    maintainers = with maintainers; [ aidalgol ];
     platforms = [ "x86_64-linux" ];
+    mainProgram = "heroic";
   };
 }