From 705851fe199210067dbdcffb84ad16c5698798b1 Mon Sep 17 00:00:00 2001 From: cashmere Date: Sat, 8 Aug 2026 10:39:58 +0200 Subject: build: package desktop AppImage via npins + appimageTools --- nix/desktop.nix | 93 +++++++++++---------------------------------------------- 1 file changed, 17 insertions(+), 76 deletions(-) (limited to 'nix/desktop.nix') diff --git a/nix/desktop.nix b/nix/desktop.nix index de2c8660..790a5c39 100644 --- a/nix/desktop.nix +++ b/nix/desktop.nix @@ -1,86 +1,27 @@ -# Electron desktop app: tsc-compiled main process + the static web export, -# wrapped with nixpkgs electron (no electron-builder, no asar). -# ffmpeg-static is satisfied by nixpkgs ffmpeg. -{ - lib, - stdenvNoCC, - bun, - nodejs, - callPackage, - electron, - ffmpeg, - makeWrapper, - sources ? import ../npins, -}: +{ lib, appimageTools }: let - bunDeps = callPackage ./bun-deps.nix { }; - web = callPackage ./web.nix { inherit sources; }; - desktopPkg = builtins.fromJSON (builtins.readFile ../apps/desktop/package.json); + manifest = lib.importJSON ../apps/desktop/package.json; + pname = "opencut"; + version = manifest.version; + src = ../apps/desktop/release/OpenCut-${version}-linux-x86_64.AppImage; + appimageContents = appimageTools.extract { inherit pname version src; }; in -stdenvNoCC.mkDerivation { - pname = "opencut-desktop"; - version = desktopPkg.version; - src = lib.cleanSource ../.; - - nativeBuildInputs = [ - bun - nodejs - makeWrapper - ]; - - configurePhase = '' - runHook preConfigure - cp -r ${bunDeps}/node_modules node_modules - cp -r ${bunDeps}/apps/desktop/node_modules apps/desktop/node_modules - chmod -R u+w node_modules apps/desktop/node_modules - patchShebangs node_modules apps/desktop/node_modules - runHook postConfigure - ''; - - buildPhase = '' - runHook preBuild - export HOME=$TMPDIR - cd apps/desktop - bun run build - cd $NIX_BUILD_TOP/source - runHook postBuild - ''; - - installPhase = '' - runHook preInstall - - appdir=$out/share/opencut - mkdir -p $appdir/node_modules/ffmpeg-static - cp apps/desktop/package.json $appdir/package.json - cp -r apps/desktop/dist $appdir/dist - cp -r ${web} $appdir/web - - # main.js resolves ffmpeg via require("ffmpeg-static"); point it at nixpkgs ffmpeg. - cp apps/desktop/node_modules/ffmpeg-static/index.js $appdir/node_modules/ffmpeg-static/index.js - cp apps/desktop/node_modules/ffmpeg-static/package.json $appdir/node_modules/ffmpeg-static/package.json - ln -s ${lib.getExe ffmpeg} $appdir/node_modules/ffmpeg-static/ffmpeg - - makeWrapper ${lib.getExe electron} $out/bin/opencut \ - --add-flags "$appdir" - - mkdir -p $out/share/applications - cat > $out/share/applications/opencut.desktop <