{ lib , rustPlatform , stdenvNoCC , fetchFromGitHub , fetchYarnDeps , wrapGAppsHook , esbuild , glib-networking , nodejs , openssl , pkg-config , pnpm-lock-export , prefetch-yarn-deps , webkitgtk , yarn , makeDesktopItem }: let pname = "theseus"; version = "0.6.3"; src = fetchFromGitHub { owner = "modrinth"; repo = "theseus"; rev = "v${version}"; sha256 = "sha256-ted5EBlF1IRpWo//wOxgPHrGKLphqAPQ0R3q14DpUS4="; nativeBuildInputs = [ pnpm-lock-export ]; postFetch = '' (cd $out/theseus_gui && pnpm-lock-export --schema yarn.lock@v1) ''; }; frontend = stdenvNoCC.mkDerivation { pname = "theseus-ui"; inherit version src; sourceRoot = "${src.name}/theseus_gui"; offlineCache = fetchYarnDeps { yarnLock = "${src}/theseus_gui/yarn.lock"; hash = "sha256-2ywL7K2rEl3tR4KLhxDPzG7ixGWDFjg2S5RTBT+SOWQ="; }; nativeBuildInputs = [ nodejs yarn prefetch-yarn-deps ]; env.ESBUILD_BINARY_PATH = lib.getExe (esbuild.overrideAttrs (final: _: { version = "0.17.19"; src = fetchFromGitHub { owner = "evanw"; repo = "esbuild"; rev = "v${final.version}"; hash = "sha256-PLC7OJLSOiDq4OjvrdfCawZPfbfuZix4Waopzrj8qsU="; }; goModules = esbuild.goModules.overrideAttrs ({ inherit (final) src; outputHash = "sha256-+BfxCyg0KkDQpHt/wycy/8CTG6YBA/VJvJFhhzUnSiQ="; }); })); postPatch = '' substituteInPlace yarn.lock --replace \ 'tauri-plugin-window-state-api@0.0.0' \ 'tauri-plugin-window-state-api@github:tauri-apps/tauri-plugin-window-state#v1' ''; configurePhase = '' runHook preConfigure export HOME=$(mktemp -d) yarn config --offline set yarn-offline-mirror $offlineCache fixup-yarn-lock yarn.lock yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive patchShebangs node_modules/ runHook postConfigure ''; buildPhase = '' runHook preBuild yarn --offline build runHook postBuild ''; installPhase = '' runHook preInstall cp -r dist $out runHook postInstall ''; }; desktopItem = makeDesktopItem { name = pname; desktopName = "Modrinth Theseus Launcher"; exec = "theseus_gui"; icon = pname; comment = description; categories = [ "Game" ]; startupNotify = false; }; description = "Modrinth game launcher"; in rustPlatform.buildRustPackage { inherit pname version src frontend description; cargoLock = { lockFile = ./Cargo.lock; outputHashes = { "tauri-plugin-single-instance-0.0.0" = "sha256-G4h2OXKPpZMmradutdUWxGG5axL9XMz2ACAe8AQ40eg="; }; }; nativeBuildInputs = [ wrapGAppsHook pkg-config ]; postInstall = '' install -Dm0644 {${desktopItem},$out}/share/applications/${pname}.desktop pushd ${src}/theseus_gui/src-tauri/icons for file in *.png; do install -Dm0644 $file $out/share/icons/hicolor/''${file//.png}/apps/${pname}.png done popd wrapProgram $out/bin/theseus_gui --set WEBKIT_DISABLE_COMPOSITING_MODE 1 # X11 is weird, this is required for some reason.... ''; buildInputs = [ openssl webkitgtk glib-networking ]; preConfigure = '' ln -s $frontend theseus_gui/dist ''; meta = with lib; { inherit description; longDescription = '' A game launcher which can be used as a CLI, GUI, and a library for creating and playing modrinth projects. ''; homepage = "https://github.com/modrinth/theseus"; changelog = "https://github.com/modrinth/theseus/releases/tag/v${version}"; license = licenses.gpl3; maintainers = [ maintainers.grimmauld ]; platforms = platforms.linux; }; }