summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--default.nix2
-rw-r--r--nix/desktop.nix91
3 files changed, 18 insertions, 77 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 ../.;
+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" ];
};
}