167 lines
4.3 KiB
Nix
167 lines
4.3 KiB
Nix
|
{
|
||
|
lib,
|
||
|
stdenv,
|
||
|
fetchFromGitLab,
|
||
|
rustPlatform,
|
||
|
rustc,
|
||
|
wasm-pack,
|
||
|
wasm-bindgen-cli,
|
||
|
binaryen,
|
||
|
|
||
|
fetchYarnDeps,
|
||
|
yarn,
|
||
|
fixup-yarn-lock,
|
||
|
nodejs,
|
||
|
asar,
|
||
|
|
||
|
tetrio-desktop,
|
||
|
}:
|
||
|
|
||
|
let
|
||
|
version = "0.27.4";
|
||
|
rev = "electron-v${version}-tetrio-v${tetrio-desktop.version}";
|
||
|
|
||
|
src = fetchFromGitLab {
|
||
|
owner = "UniQMG";
|
||
|
repo = "tetrio-plus";
|
||
|
inherit rev;
|
||
|
hash = "sha256-HwGFg8dxqtqghdP+PXWXr6Fi5vfgopThs+QNa3N1awk=";
|
||
|
fetchSubmodules = true;
|
||
|
};
|
||
|
|
||
|
wasm-bindgen-82 = wasm-bindgen-cli.override {
|
||
|
version = "0.2.82";
|
||
|
hash = "sha256-BQ8v3rCLUvyCCdxo5U+NHh30l9Jwvk9Sz8YQv6fa0SU=";
|
||
|
cargoHash = "sha256-mP85+qi2KA0GieaBzbrQOBqYxBZNRJipvd2brCRGyOM=";
|
||
|
};
|
||
|
|
||
|
tpsecore = rustPlatform.buildRustPackage {
|
||
|
pname = "tpsecore";
|
||
|
inherit version src;
|
||
|
|
||
|
sourceRoot = "${src.name}/tpsecore";
|
||
|
|
||
|
cargoHash = "sha256-zqeoPeGZvSz7W3c7MXnvvq73hvavg1RGzPc3iTqAjBo=";
|
||
|
|
||
|
nativeBuildInputs = [
|
||
|
wasm-pack
|
||
|
wasm-bindgen-82
|
||
|
binaryen
|
||
|
rustc.llvmPackages.lld
|
||
|
];
|
||
|
|
||
|
buildPhase = ''
|
||
|
HOME=$(mktemp -d) wasm-pack build --target web --release
|
||
|
'';
|
||
|
|
||
|
installPhase = ''
|
||
|
cp -r pkg/ $out
|
||
|
'';
|
||
|
|
||
|
doCheck = false;
|
||
|
|
||
|
meta = {
|
||
|
description = "Self contained toolkit for creating, editing, and previewing TPSE files";
|
||
|
homepage = "https://gitlab.com/UniQMG/tpsecore";
|
||
|
license = lib.licenses.mit;
|
||
|
maintainers = with lib.maintainers; [
|
||
|
huantian
|
||
|
wackbyte
|
||
|
];
|
||
|
platforms = lib.platforms.linux;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
offlineCache = fetchYarnDeps {
|
||
|
yarnLock = "${src}/resources/desktop-ci/yarn.lock";
|
||
|
hash = "sha256-LfUC2bkUX+sFq3vMMOC1YVYbpDxUSnLO9GiKdoQBdAw=";
|
||
|
};
|
||
|
|
||
|
in
|
||
|
stdenv.mkDerivation (finalAttrs: {
|
||
|
pname = "tetrio-plus";
|
||
|
inherit version src;
|
||
|
|
||
|
nativeBuildInputs = [
|
||
|
yarn
|
||
|
fixup-yarn-lock
|
||
|
nodejs
|
||
|
asar
|
||
|
];
|
||
|
|
||
|
buildPhase = ''
|
||
|
runHook preBuild
|
||
|
|
||
|
# tetrio-plus expects the vanilla asar to be extracted into 'out' and
|
||
|
# 'out' is the directory contianing the final patched asar's contents
|
||
|
asar extract ${tetrio-desktop.src}/opt/TETR.IO/resources/app.asar out
|
||
|
|
||
|
# Install custom package.json/yarn.lock that describe the additional node
|
||
|
# dependencies that tetrio-plus needs to run, and install them in our output
|
||
|
cd out
|
||
|
|
||
|
cp ../resources/desktop-ci/yarn.lock .
|
||
|
patch package.json ../resources/desktop-ci/package.json.diff
|
||
|
|
||
|
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/
|
||
|
|
||
|
cd ..
|
||
|
|
||
|
# The included build script expects the vanilla asar located here
|
||
|
# This patches the vanilla code to load the tetrio-plus code
|
||
|
ln -s ${tetrio-desktop.src}/opt/TETR.IO/resources/app.asar app.asar
|
||
|
node ./scripts/build-electron.js
|
||
|
|
||
|
# Actually install tetrio-plus where the above patch script expects
|
||
|
cp -r $src out/tetrioplus
|
||
|
chmod -R u+w out/tetrioplus
|
||
|
|
||
|
# Install tpsecore
|
||
|
cp ${tpsecore}/{tpsecore_bg.wasm,tpsecore.js} out/tetrioplus/source/lib/
|
||
|
# Remove uneeded tpsecore source code
|
||
|
rm -rf out/tetrioplus/tpsecore/
|
||
|
|
||
|
# Disable useless uninstall button in the tetrio-plus popup
|
||
|
substituteInPlace out/tetrioplus/desktop-manifest.js \
|
||
|
--replace-fail '"show_uninstaller_button": true' '"show_uninstaller_button": false'
|
||
|
|
||
|
# Display 'nixpkgs' next to version in tetrio-plus popup
|
||
|
echo "nixpkgs" > out/tetrioplus/resources/override-commit
|
||
|
|
||
|
runHook postBuild
|
||
|
'';
|
||
|
|
||
|
installPhase = ''
|
||
|
runHook preinstall
|
||
|
|
||
|
asar pack out $out
|
||
|
|
||
|
runHook postinstall
|
||
|
'';
|
||
|
|
||
|
meta = {
|
||
|
description = "Modified TETR.IO desktop app.asar with many customization tools";
|
||
|
longDescription = ''
|
||
|
To use this, `override` the `withTetrioPlus` attribute of `tetrio-desktop`.
|
||
|
'';
|
||
|
homepage = "https://gitlab.com/UniQMG/tetrio-plus";
|
||
|
downloadPage = "https://gitlab.com/UniQMG/tetrio-plus/-/releases";
|
||
|
changelog = "https://gitlab.com/UniQMG/tetrio-plus/-/releases/${rev}";
|
||
|
license = [
|
||
|
lib.licenses.mit
|
||
|
# while tetrio-plus is itself mit, the result of this derivation
|
||
|
# is a modified version of tetrio-desktop, which is unfree.
|
||
|
lib.licenses.unfree
|
||
|
];
|
||
|
maintainers = with lib.maintainers; [
|
||
|
huantian
|
||
|
wackbyte
|
||
|
];
|
||
|
platforms = lib.platforms.linux;
|
||
|
};
|
||
|
})
|