From 3588b81d6bec8587d2977df4e22ca871ef84c09b Mon Sep 17 00:00:00 2001 From: Doloro1978 Date: Mon, 13 Jul 2026 14:14:34 +0100 Subject: [PATCH] fix(grimoire): not packaged shittly --- .../gr/{grimorie => grimoire}/package.nix | 54 ++++++++++--------- 1 file changed, 29 insertions(+), 25 deletions(-) rename pkgs/by-name/gr/{grimorie => grimoire}/package.nix (57%) diff --git a/pkgs/by-name/gr/grimorie/package.nix b/pkgs/by-name/gr/grimoire/package.nix similarity index 57% rename from pkgs/by-name/gr/grimorie/package.nix rename to pkgs/by-name/gr/grimoire/package.nix index 5e30eae..f39212e 100644 --- a/pkgs/by-name/gr/grimorie/package.nix +++ b/pkgs/by-name/gr/grimoire/package.nix @@ -2,7 +2,6 @@ lib, stdenv, fetchFromGitHub, - fetchurl, nodejs_22, pnpm, python3, @@ -70,15 +69,14 @@ in inherit pnpmDeps; - env.GRIMOIRE_SOCIAL_BASE_URL = "https://grimoire-social.slusheliott.workers.dev"; + env = { + GRIMOIRE_SOCIAL_BASE_URL = "https://grimoire-social.slusheliott.workers.dev"; + # electron-builder must not try to fetch an Electron binary over the + # network; we hand it the Nix one via --config.electronDist below. + ELECTRON_SKIP_BINARY_DOWNLOAD = "1"; + }; postPatch = '' - # The app is launched via electron directly (not an electron-builder - # package), so `app.isPackaged` is false and `is.dev` is true, which - # auto-opens DevTools on launch. Strip that call. - substituteInPlace electron/main/index.ts \ - --replace-fail "mainWindow.webContents.openDevTools();" "" - cp -r ${grimoire-social-src} ../grimoire-social chmod -R u+w ../grimoire-social @@ -93,6 +91,9 @@ in mkdir -p ../grimoire-social/node_modules ln -sfn "$(realpath node_modules/zod)" ../grimoire-social/node_modules/zod + # Rebuild the better-sqlite3 native addon against the Electron ABI. We do + # this ourselves (and disable electron-builder's own rebuild below) so no + # network fetch of Electron headers is needed inside the sandbox. ( cd node_modules/better-sqlite3 HOME="$TMPDIR" node \ @@ -101,7 +102,19 @@ in --nodedir="${electron_40.headers}" ) + # Package the app the same way upstream CI does (release.yml): + # `electron-vite build && electron-builder`. We stop at the unpacked + # `--dir` output instead of building AppImage/deb installers, then wrap + # the Nix Electron around the produced app.asar. Building through + # electron-builder (rather than launching Electron on the raw dist/) + # makes `app.isPackaged` true, which is what disables the dev-only + # DevTools auto-open and the dev vpkmerge lookup path. + export HOME="$TMPDIR" pnpm exec electron-vite build + pnpm exec electron-builder --linux dir \ + --config.npmRebuild=false \ + --config.electronDist=${electron_40.dist} \ + --config.electronVersion=${electron_40.version} runHook postBuild ''; @@ -110,26 +123,17 @@ in runHook preInstall mkdir -p $out/lib/grimoire - cp -r dist $out/lib/grimoire/dist - - mkdir -p $out/lib/grimoire/resources - cp -r resources/vpkmerge $out/lib/grimoire/resources/vpkmerge - echo '{"name":"grimoire","version":"${version}","main":"dist/main/index.js"}' \ - > $out/lib/grimoire/package.json - - cp -r node_modules $out/lib/grimoire/node_modules - - rm -rf "$out/lib/grimoire/node_modules/@grimoire" - - find "$out/lib/grimoire/node_modules" -type l | while read -r link; do - [ -e "$link" ] || rm -f "$link" - done + # electron-builder emits the packaged app (app.asar, app.asar.unpacked, + # and extraResources such as vpkmerge) under release/linux-unpacked/resources. + cp -r release/linux-unpacked/resources $out/lib/grimoire/resources + # Launch the Nix Electron against the packaged asar. process.resourcesPath + # resolves to the directory holding app.asar, so the bundled vpkmerge at + # resources/vpkmerge/ is found at runtime. mkdir -p $out/bin makeWrapper ${electron_40}/bin/electron $out/bin/grimoire \ - --add-flags "$out/lib/grimoire" \ - --set ELECTRON_RESOURCES_PATH "$out/lib/grimoire" \ - --set NODE_ENV production + --add-flags "$out/lib/grimoire/resources/app.asar" \ + --set NODE_ENV production runHook postInstall '';