162 lines
3.8 KiB
Nix
162 lines
3.8 KiB
Nix
|
{ 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;
|
||
|
};
|
||
|
}
|