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 --- .gitignore | 2 +- default.nix | 2 +- nix/desktop.nix | 93 +++++++++++---------------------------------------------- 3 files changed, 19 insertions(+), 78 deletions(-) diff --git a/.gitignore b/.gitignore index f5d4d26e..cb8a0b38 100644 --- a/.gitignore +++ b/.gitignore @@ -25,4 +25,4 @@ target/ .cargo-tools/ -rust-migration-notes.md \ No newline at end of file +rust-migration-notes.mdresult diff --git a/default.nix b/default.nix index 5dc1a157..5f3e0364 100644 --- a/default.nix +++ b/default.nix @@ -4,6 +4,6 @@ let in rec { packages.web = pkgs.callPackage ./nix/web.nix { inherit sources; }; - packages.desktop = pkgs.callPackage ./nix/desktop.nix { inherit sources; }; + packages.desktop = pkgs.callPackage ./nix/desktop.nix { }; packages.default = packages.desktop; } 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 <