From 756a4a0507cc147f210c3d299b02269ebd297df8 Mon Sep 17 00:00:00 2001 From: Doloro1978 Date: Mon, 13 Jul 2026 20:54:43 +0400 Subject: [PATCH] Grimoire package fix (#23) ![image.png](/attachments/48e0de47-db8e-4c17-b657-e5d0972a75a6) Reviewed-on: https://git.scug.io/nikkuss/pkgs/pulls/23 Co-authored-by: Doloro1978 Co-committed-by: Doloro1978 --- .../gr/{grimorie => grimoire}/package.nix | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 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 5c1dfeb..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,7 +69,12 @@ 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 = '' cp -r ${grimoire-social-src} ../grimoire-social @@ -87,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 \ @@ -95,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 ''; @@ -104,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 '';