From 5b78fd6b704382fa67f8b425634102c3ed362a93 Mon Sep 17 00:00:00 2001 From: Colin Arnott Date: Fri, 4 Nov 2022 23:12:45 +0000 Subject: [PATCH 1/4] signal-desktop-beta: reinit at 6.1.0-beta.1 signal-desktop-beta was removed due to maintainability concerns in 256e347dfe2e8ab0070d85320fc1cc7da163eb92. Unfortunately, there are a number of features, like stories, that are only enabled on the beta builds. As such, this change adds that package back, but based upon the current signal-desktop derivation. We have restructured the derivation into the generic+versions structure seen in libmicrohttpd, however since there are a fixed number of releases, stable and beta, they both live default.nix and are inherited at the top level. I have also added myself to the maintainers list, however we could also split that up, so that I alone bear the maintenance responsibilities. (cherry picked from commit bd35bc1f873a09f0b8c7fbf1a3860a9debe45a05) --- .../signal-desktop/default.nix | 143 +------------- .../signal-desktop/generic.nix | 180 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 189 insertions(+), 136 deletions(-) create mode 100644 pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix diff --git a/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix b/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix index b2799fafae40..41a707b928d5 100644 --- a/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix +++ b/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix @@ -1,139 +1,12 @@ -{ stdenv, lib, fetchurl, autoPatchelfHook, dpkg, wrapGAppsHook, makeWrapper, nixosTests -, gtk3, atk, at-spi2-atk, cairo, pango, gdk-pixbuf, glib, freetype, fontconfig -, dbus, libX11, xorg, libXi, libXcursor, libXdamage, libXrandr, libXcomposite -, libXext, libXfixes, libXrender, libXtst, libXScrnSaver, nss, nspr, alsa-lib -, cups, expat, libuuid, at-spi2-core, libappindicator-gtk3, mesa -# Runtime dependencies: -, systemd, libnotify, libdbusmenu, libpulseaudio, xdg-utils -}: - -stdenv.mkDerivation rec { - pname = "signal-desktop"; - version = "6.2.0"; # Please backport all updates to the stable channel. - # All releases have a limited lifetime and "expire" 90 days after the release. - # When releases "expire" the application becomes unusable until an update is - # applied. The expiration date for the current release can be extracted with: - # $ grep -a "^{\"buildExpiration" "${signal-desktop}/lib/Signal/resources/app.asar" - # (Alternatively we could try to patch the asar archive, but that requires a - # few additional steps and might not be the best idea.) - - src = fetchurl { - url = "https://updates.signal.org/desktop/apt/pool/main/s/signal-desktop/signal-desktop_${version}_amd64.deb"; +{ callPackage }: builtins.mapAttrs (pname: attrs: callPackage ./generic.nix (attrs // { inherit pname; })) { + signal-desktop = { + dir = "Signal"; + version = "6.2.0"; hash = "sha256-auOcMlwKPj5rsnlhK34sYe4JxlHCjb3e2ye8Cs12Qtc="; }; - - nativeBuildInputs = [ - autoPatchelfHook - dpkg - (wrapGAppsHook.override { inherit makeWrapper; }) - ]; - - buildInputs = [ - alsa-lib - at-spi2-atk - at-spi2-core - atk - cairo - cups - dbus - expat - fontconfig - freetype - gdk-pixbuf - glib - gtk3 - libX11 - libXScrnSaver - libXcomposite - libXcursor - libXdamage - libXext - libXfixes - libXi - libXrandr - libXrender - libXtst - libappindicator-gtk3 - libnotify - libuuid - mesa # for libgbm - nspr - nss - pango - systemd - xorg.libxcb - xorg.libxshmfence - ]; - - runtimeDependencies = [ - (lib.getLib systemd) - libappindicator-gtk3 - libnotify - libdbusmenu - xdg-utils - ]; - - unpackPhase = "dpkg-deb -x $src ."; - - dontBuild = true; - dontConfigure = true; - dontPatchELF = true; - # We need to run autoPatchelf manually with the "no-recurse" option, see - # https://github.com/NixOS/nixpkgs/pull/78413 for the reasons. - dontAutoPatchelf = true; - - installPhase = '' - runHook preInstall - - mkdir -p $out/lib - - mv usr/share $out/share - mv opt/Signal $out/lib/Signal - - # Note: The following path contains bundled libraries: - # $out/lib/Signal/resources/app.asar.unpacked/node_modules/sharp/vendor/lib/ - # We run autoPatchelf with the "no-recurse" option to avoid picking those - # up, but resources/app.asar still requires them. - - # Symlink to bin - mkdir -p $out/bin - ln -s $out/lib/Signal/signal-desktop $out/bin/signal-desktop - - # Create required symlinks: - ln -s libGLESv2.so $out/lib/Signal/libGLESv2.so.2 - - runHook postInstall - ''; - - preFixup = '' - gappsWrapperArgs+=( - --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc ] }" - --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" - --suffix PATH : ${lib.makeBinPath [ xdg-utils ]} - ) - - # Fix the desktop link - substituteInPlace $out/share/applications/signal-desktop.desktop \ - --replace /opt/Signal/signal-desktop $out/bin/signal-desktop - - autoPatchelf --no-recurse -- $out/lib/Signal/ - patchelf --add-needed ${libpulseaudio}/lib/libpulse.so $out/lib/Signal/resources/app.asar.unpacked/node_modules/ringrtc/build/linux/libringrtc-x64.node - ''; - - # Tests if the application launches and waits for "Link your phone to Signal Desktop": - passthru.tests.application-launch = nixosTests.signal-desktop; - - meta = { - description = "Private, simple, and secure messenger"; - longDescription = '' - Signal Desktop is an Electron application that links with your - "Signal Android" or "Signal iOS" app. - ''; - homepage = "https://signal.org/"; - changelog = "https://github.com/signalapp/Signal-Desktop/releases/tag/v${version}"; - license = lib.licenses.agpl3Only; - maintainers = with lib.maintainers; [ mic92 equirosa ]; - platforms = [ "x86_64-linux" ]; - sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; + signal-desktop-beta = { + dir = "Signal Beta"; + version = "6.1.0-beta.1"; + hash = "sha256-zfXHSAYJH9/y0IaB6dTb1T85hZzDXyNX6sCpaHnL32k="; }; } diff --git a/pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix b/pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix new file mode 100644 index 000000000000..a0384895d507 --- /dev/null +++ b/pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix @@ -0,0 +1,180 @@ +{ pname +, dir +, version +, hash +, stdenv +, lib +, fetchurl +, autoPatchelfHook +, dpkg +, wrapGAppsHook +, makeWrapper +, nixosTests +, gtk3 +, atk +, at-spi2-atk +, cairo +, pango +, gdk-pixbuf +, glib +, freetype +, fontconfig +, dbus +, libX11 +, xorg +, libXi +, libXcursor +, libXdamage +, libXrandr +, libXcomposite +, libXext +, libXfixes +, libXrender +, libXtst +, libXScrnSaver +, nss +, nspr +, alsa-lib +, cups +, expat +, libuuid +, at-spi2-core +, libappindicator-gtk3 +, mesa + # Runtime dependencies: +, systemd +, libnotify +, libdbusmenu +, libpulseaudio +, xdg-utils +}: + +stdenv.mkDerivation rec { + inherit pname version; # Please backport all updates to the stable channel. + # All releases have a limited lifetime and "expire" 90 days after the release. + # When releases "expire" the application becomes unusable until an update is + # applied. The expiration date for the current release can be extracted with: + # $ grep -a "^{\"buildExpiration" "${signal-desktop}/lib/${dir}/resources/app.asar" + # (Alternatively we could try to patch the asar archive, but that requires a + # few additional steps and might not be the best idea.) + + src = fetchurl { + url = "https://updates.signal.org/desktop/apt/pool/main/s/${pname}/${pname}_${version}_amd64.deb"; + inherit hash; + }; + + nativeBuildInputs = [ + autoPatchelfHook + dpkg + (wrapGAppsHook.override { inherit makeWrapper; }) + ]; + + buildInputs = [ + alsa-lib + at-spi2-atk + at-spi2-core + atk + cairo + cups + dbus + expat + fontconfig + freetype + gdk-pixbuf + glib + gtk3 + libX11 + libXScrnSaver + libXcomposite + libXcursor + libXdamage + libXext + libXfixes + libXi + libXrandr + libXrender + libXtst + libappindicator-gtk3 + libnotify + libuuid + mesa # for libgbm + nspr + nss + pango + systemd + xorg.libxcb + xorg.libxshmfence + ]; + + runtimeDependencies = [ + (lib.getLib systemd) + libappindicator-gtk3 + libnotify + libdbusmenu + xdg-utils + ]; + + unpackPhase = "dpkg-deb -x $src ."; + + dontBuild = true; + dontConfigure = true; + dontPatchELF = true; + # We need to run autoPatchelf manually with the "no-recurse" option, see + # https://github.com/NixOS/nixpkgs/pull/78413 for the reasons. + dontAutoPatchelf = true; + + installPhase = '' + runHook preInstall + + mkdir -p $out/lib + + mv usr/share $out/share + mv "opt/${dir}" "$out/lib/${dir}" + + # Note: The following path contains bundled libraries: + # $out/lib/${dir}/resources/app.asar.unpacked/node_modules/sharp/vendor/lib/ + # We run autoPatchelf with the "no-recurse" option to avoid picking those + # up, but resources/app.asar still requires them. + + # Symlink to bin + mkdir -p $out/bin + ln -s "$out/lib/${dir}/${pname}" $out/bin/${pname} + + # Create required symlinks: + ln -s libGLESv2.so "$out/lib/${dir}/libGLESv2.so.2" + + runHook postInstall + ''; + + preFixup = '' + gappsWrapperArgs+=( + --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc ] }" + --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" + --suffix PATH : ${lib.makeBinPath [ xdg-utils ]} + ) + + # Fix the desktop link + substituteInPlace $out/share/applications/${pname}.desktop \ + --replace "/opt/${dir}/${pname}" $out/bin/${pname} + + autoPatchelf --no-recurse -- "$out/lib/${dir}/" + patchelf --add-needed ${libpulseaudio}/lib/libpulse.so "$out/lib/${dir}/resources/app.asar.unpacked/node_modules/ringrtc/build/linux/libringrtc-x64.node" + ''; + + # Tests if the application launches and waits for "Link your phone to Signal Desktop": + passthru.tests.application-launch = nixosTests.signal-desktop; + + meta = { + description = "Private, simple, and secure messenger"; + longDescription = '' + Signal Desktop is an Electron application that links with your + "Signal Android" or "Signal iOS" app. + ''; + homepage = "https://signal.org/"; + changelog = "https://github.com/signalapp/Signal-Desktop/releases/tag/v${version}"; + license = lib.licenses.agpl3Only; + maintainers = with lib.maintainers; [ mic92 equirosa urandom ]; + platforms = [ "x86_64-linux" ]; + sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a4434921590e..231da51a85d2 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -11407,7 +11407,7 @@ with pkgs; signal-cli = callPackage ../applications/networking/instant-messengers/signal-cli { }; - signal-desktop = callPackage ../applications/networking/instant-messengers/signal-desktop { }; + inherit (callPackage ../applications/networking/instant-messengers/signal-desktop {}) signal-desktop signal-desktop-beta; slither-analyzer = with python3Packages; toPythonApplication slither-analyzer; From ab76b688b212bdbbb90714e6572f3b2608e9fd8e Mon Sep 17 00:00:00 2001 From: kilianar Date: Thu, 15 Dec 2022 23:32:38 +0100 Subject: [PATCH 2/4] signal-desktop-beta: 6.1.0-beta.1 -> 6.2.0-beta.1 https://github.com/signalapp/Signal-Desktop/releases/tag/v6.2.0-beta.1 (cherry picked from commit 02d6ae971280bd39329a0fa1412faac39298fa88) --- .../networking/instant-messengers/signal-desktop/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix b/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix index 41a707b928d5..475dc084d3ea 100644 --- a/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix +++ b/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix @@ -6,7 +6,7 @@ }; signal-desktop-beta = { dir = "Signal Beta"; - version = "6.1.0-beta.1"; - hash = "sha256-zfXHSAYJH9/y0IaB6dTb1T85hZzDXyNX6sCpaHnL32k="; + version = "6.2.0-beta.1"; + hash = "sha256-OA7DHe/sfW8xpqJPEu7BWotpnaJYj5SatPB21byZHrY="; }; } From d14259a2366837d5621e951a9696bef0a01502cc Mon Sep 17 00:00:00 2001 From: Colin Arnott Date: Wed, 28 Dec 2022 00:08:33 +0000 Subject: [PATCH 3/4] signal-desktop-beta: 6.2.0-beta.1 -> 6.2.0-beta.2 (cherry picked from commit c5b3696c8e17383851a2cf719fc0d9a779f71437) --- .../networking/instant-messengers/signal-desktop/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix b/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix index 475dc084d3ea..307a11055ee4 100644 --- a/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix +++ b/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix @@ -6,7 +6,7 @@ }; signal-desktop-beta = { dir = "Signal Beta"; - version = "6.2.0-beta.1"; - hash = "sha256-OA7DHe/sfW8xpqJPEu7BWotpnaJYj5SatPB21byZHrY="; + version = "6.2.0-beta.2"; + hash = "sha256-NVwX2xG8QGVjENy6fSA13WQyTlYuF5frcS3asDDg4Ik="; }; } From 16aa0c9bbf8db7eae7e91d9918e6128a77c4c7fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Sun, 18 Dec 2022 20:04:30 +0100 Subject: [PATCH 4/4] signal-desktop: add missing wayland lib as runtime dependency (cherry picked from commit 639401568bbd77055af6e32e817cb880d2f28074) --- .../networking/instant-messengers/signal-desktop/generic.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix b/pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix index a0384895d507..ee1d6b8aed1f 100644 --- a/pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix +++ b/pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix @@ -47,6 +47,7 @@ , libdbusmenu , libpulseaudio , xdg-utils +, wayland }: stdenv.mkDerivation rec { @@ -112,6 +113,7 @@ stdenv.mkDerivation rec { libnotify libdbusmenu xdg-utils + wayland ]; unpackPhase = "dpkg-deb -x $src .";