summaryrefslogtreecommitdiff
path: root/nix/desktop.nix
diff options
context:
space:
mode:
authorcashmere <cashmere@autistici.org>2026-08-08 10:39:58 +0200
committercashmere <cashmere@autistici.org>2026-08-08 10:42:20 +0200
commit705851fe199210067dbdcffb84ad16c5698798b1 (patch)
tree140a7862cd839516d022035d3528c2f421c3454a /nix/desktop.nix
parent29f1c9932a5c50c36e6a35f6d6539c2aceee983e (diff)
downloadopencut-705851fe199210067dbdcffb84ad16c5698798b1.tar.gz
build: package desktop AppImage via npins + appimageTools
Diffstat (limited to 'nix/desktop.nix')
-rw-r--r--nix/desktop.nix91
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" ];
};
}