diff options
Diffstat (limited to 'nix')
| -rw-r--r-- | nix/desktop.nix | 91 |
1 files changed, 16 insertions, 75 deletions
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 ../.; +appimageTools.wrapType2 { + inherit pname version src; - 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 <<EOF - [Desktop Entry] - Type=Application - Name=OpenCut - Comment=Offline-first video editor - Exec=opencut - Categories=AudioVideo;Video; - EOF - - runHook postInstall + extraInstallCommands = '' + install -Dm444 ${appimageContents}/opencut.png $out/share/icons/hicolor/512x512/apps/opencut.png + install -Dm444 ${appimageContents}/OpenCut.desktop $out/share/applications/opencut.desktop + substituteInPlace $out/share/applications/opencut.desktop \ + --replace-fail 'Exec=AppRun --no-sandbox %U' 'Exec=opencut %U' ''; meta = { - description = "OpenCut desktop (Electron)"; + description = "Offline-first video editor"; + homepage = manifest.homepage; license = lib.licenses.mit; mainProgram = "opencut"; - platforms = lib.platforms.linux; + platforms = [ "x86_64-linux" ]; }; } |
