diff --git a/pkgs/applications/networking/instant-messengers/jitsi-meet-electron/default.nix b/pkgs/applications/networking/instant-messengers/jitsi-meet-electron/default.nix index 81562e69a66a..71253c52b643 100644 --- a/pkgs/applications/networking/instant-messengers/jitsi-meet-electron/default.nix +++ b/pkgs/applications/networking/instant-messengers/jitsi-meet-electron/default.nix @@ -1,60 +1,106 @@ -{ lib, stdenv -, fetchurl -, appimageTools +{ lib +, buildNpmPackage +, fetchFromGitHub +, copyDesktopItems +, makeDesktopItem , makeWrapper +, libpng +, libX11 +, libXi +, libXtst +, zlib , electron -, xorg , pipewire }: -stdenv.mkDerivation rec { +buildNpmPackage rec { pname = "jitsi-meet-electron"; - version = "2022.10.1"; + version = "2023.11.3"; - src = fetchurl { - url = "https://github.com/jitsi/jitsi-meet-electron/releases/download/v${version}/jitsi-meet-x86_64.AppImage"; - sha256 = "sha256-98zuAsGT30paxszSO1XcMY8tsrMBeBLDFjK/JWhLC8s="; - name = "${pname}-${version}.AppImage"; + src = fetchFromGitHub { + owner = "jitsi"; + repo = "jitsi-meet-electron"; + rev = "v${version}"; + hash = "sha256-gE5CP0l3SrAHGNS6Hr5/MefTtE86JTmc85CwOmylEpg="; }; - appimageContents = appimageTools.extractType2 { - name = "${pname}-${version}"; - inherit src; - }; + nativeBuildInputs = [ + copyDesktopItems + makeWrapper + ]; - dontUnpack = true; - dontConfigure = true; - dontBuild = true; + # robotjs node-gyp dependencies + buildInputs = [ + libpng + libX11 + libXi + libXtst + zlib + ]; - nativeBuildInputs = [ makeWrapper ]; + npmDepsHash = "sha256-JZVJcKzG4X7YIUvIRWZsDQnHx+dNqCj6kFm8mZaSH2k="; + + makeCacheWritable = true; + + env.ELECTRON_SKIP_BINARY_DOWNLOAD = 1; + + postPatch = '' + substituteInPlace main.js \ + --replace "require('electron-is-dev')" "false" + ''; + + preBuild = '' + # remove some prebuilt binaries + find node_modules -type d -name prebuilds -exec rm -r {} + + ''; + + postBuild = '' + # generate .asar file + # asarUnpack makes sure to unwrap binaries so that nix can see the RPATH + npm exec electron-builder -- \ + --dir \ + -c.asarUnpack="**/*.node" \ + -c.electronDist=${electron}/libexec/electron \ + -c.electronVersion=${electron.version} + ''; installPhase = '' runHook preInstall - mkdir -p $out/bin $out/share/${pname} $out/share/applications + mkdir -p $out/share/jitsi-meet-electron + cp -r dist/*-unpacked/{locales,resources{,.pak}} $out/share/jitsi-meet-electron - cp -a ${appimageContents}/{locales,resources} $out/share/${pname} - cp -a ${appimageContents}/jitsi-meet.desktop $out/share/applications/${pname}.desktop - cp -a ${appimageContents}/usr/share/icons $out/share + makeWrapper ${lib.getExe electron} $out/bin/jitsi-meet-electron \ + --add-flags $out/share/jitsi-meet-electron/resources/app.asar \ + --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ pipewire ]} \ + --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \ + --inherit-argv0 - substituteInPlace $out/share/applications/${pname}.desktop \ - --replace 'Exec=AppRun' 'Exec=${pname}' + install -Dm644 resources/icons/512x512.png $out/share/icons/hicolor/512x512/apps/jitsi-meet-electron.png runHook postInstall ''; - postFixup = '' - makeWrapper ${electron}/bin/electron $out/bin/${pname} \ - --add-flags $out/share/${pname}/resources/app.asar \ - --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc xorg.libXtst pipewire ]}" \ - --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" - ''; + desktopItems = [ + (makeDesktopItem { + name = "jitsi-meet-electron"; + exec = "jitsi-meet-electron %U"; + icon = "jitsi-meet-electron"; + desktopName = "Jitsi Meet"; + comment = meta.description; + categories = [ "VideoConference" "AudioVideo" "Audio" "Video" "Network" ]; + mimeTypes = [ "x-scheme-handler/jitsi-meet" ]; + terminal = false; + }) + ]; meta = with lib; { + changelog = "https://github.com/jitsi/jitsi-meet-electron/releases/tag/${src.rev}"; description = "Jitsi Meet desktop application powered by Electron"; homepage = "https://github.com/jitsi/jitsi-meet-electron"; license = licenses.asl20; - maintainers = teams.jitsi.members; - platforms = [ "x86_64-linux" ]; + mainProgram = "jitsi-meet-electron"; + maintainers = teams.jitsi.members ++ [ maintainers.tomasajt ]; + inherit (electron.meta) platforms; }; }