From 6ec1a9d74701242d246874ec6403f00ea2b37d5a Mon Sep 17 00:00:00 2001 From: Gliczy <129636582+Gliczy@users.noreply.github.com> Date: Mon, 2 Mar 2026 14:40:30 +0100 Subject: [PATCH] signal-desktop-bin: drop --- .../si/signal-desktop-bin/copy-noto-emoji.py | 70 ---- .../by-name/si/signal-desktop-bin/generic.nix | 316 ------------------ .../by-name/si/signal-desktop-bin/package.nix | 11 - .../si/signal-desktop-bin/pyproject.toml | 15 - .../signal-desktop-aarch64.nix | 15 - .../signal-desktop-darwin.nix | 61 ---- .../si/signal-desktop-bin/signal-desktop.nix | 12 - pkgs/by-name/si/signal-desktop-bin/update.sh | 35 -- pkgs/top-level/aliases.nix | 1 + 9 files changed, 1 insertion(+), 535 deletions(-) delete mode 100644 pkgs/by-name/si/signal-desktop-bin/copy-noto-emoji.py delete mode 100644 pkgs/by-name/si/signal-desktop-bin/generic.nix delete mode 100644 pkgs/by-name/si/signal-desktop-bin/package.nix delete mode 100644 pkgs/by-name/si/signal-desktop-bin/pyproject.toml delete mode 100644 pkgs/by-name/si/signal-desktop-bin/signal-desktop-aarch64.nix delete mode 100644 pkgs/by-name/si/signal-desktop-bin/signal-desktop-darwin.nix delete mode 100644 pkgs/by-name/si/signal-desktop-bin/signal-desktop.nix delete mode 100755 pkgs/by-name/si/signal-desktop-bin/update.sh diff --git a/pkgs/by-name/si/signal-desktop-bin/copy-noto-emoji.py b/pkgs/by-name/si/signal-desktop-bin/copy-noto-emoji.py deleted file mode 100644 index c873c0b0db4d..000000000000 --- a/pkgs/by-name/si/signal-desktop-bin/copy-noto-emoji.py +++ /dev/null @@ -1,70 +0,0 @@ -"""Copy Noto Color Emoji PNGs into an extracted Signal ASAR archive. - -Signal loads small Apple emoji PNGs directly from -`node_modules/emoji-datasource-apple/img/apple/64`, and downloads and -caches large Apple emoji WebP files in `.proto` bundles on the fly. The -latter are not a copyright concern for the Nixpkgs cache, but would -result in inconsistent presentation between small and large emoji. - -We skip the complexity and buy some additional privacy by replacing the -`emoji://jumbo?emoji=` URL prefix with a `file://` path to the copied -PNGs inside the ASAR archive, and linking the `node_modules` PNG paths -directly to them. -""" - -import json -import shutil -import sys -from pathlib import Path - - -def emoji_to_noto_name(emoji: str) -> str: - r"""Return the Noto emoji name of an emoji. - - Noto emoji names are underscore‐separated Unicode scalar values, - represented in lowercase big‐endian hex padded to at least four - digits. Any U+FE0F variant selectors are omitted. - - >>> emoji_to_noto_name("😶‍🌫️") - '1f636_200d_1f32b' - >>> emoji_to_noto_name("\U0001f636\u200d\U0001f32b\ufe0f") - '1f636_200d_1f32b' - """ - return "_".join( - f"{ord(scalar_value):04x}" - for scalar_value in emoji - if scalar_value != "\ufe0f" - ) - - -def _main() -> None: - noto_png_path, asar_root = (Path(arg) for arg in sys.argv[1:]) - asar_root = asar_root.absolute() - - out_path = asar_root / "images" / "nixpkgs-emoji" - out_path.mkdir(parents=True) - - jumbomoji_json_path = asar_root / "build" / "jumbomoji.json" - with jumbomoji_json_path.open() as jumbomoji_json_file: - jumbomoji_packs = json.load(jumbomoji_json_file) - - for signal_emoji_names in jumbomoji_packs.values(): - for signal_emoji_name in signal_emoji_names: - - try: - shutil.copy( - noto_png_path / f"emoji_u{emoji_to_noto_name(signal_emoji_name)}.png", - out_path / signal_emoji_name, - ) - except FileNotFoundError: - print( - f"Missing Noto emoji: {signal_emoji_name}", - file=sys.stderr, - ) - continue - - print(out_path.relative_to(asar_root)) - - -if __name__ == "__main__": - _main() diff --git a/pkgs/by-name/si/signal-desktop-bin/generic.nix b/pkgs/by-name/si/signal-desktop-bin/generic.nix deleted file mode 100644 index d020f58a6e34..000000000000 --- a/pkgs/by-name/si/signal-desktop-bin/generic.nix +++ /dev/null @@ -1,316 +0,0 @@ -{ - stdenv, - lib, - fetchurl, - autoPatchelfHook, - noto-fonts-color-emoji, - dpkg, - libarchive, - asar, - rsync, - python3, - buildPackages, - nixosTests, - gtk3, - atk, - at-spi2-atk, - cairo, - pango, - pipewire, - gdk-pixbuf, - glib, - freetype, - fontconfig, - dbus, - libx11, - libxshmfence, - libxcb, - libxi, - libxcursor, - libxdamage, - libxrandr, - libxcomposite, - libxext, - libxfixes, - libxrender, - libxtst, - libxscrnsaver, - nss, - nspr, - alsa-lib, - cups, - expat, - libuuid, - at-spi2-core, - libappindicator-gtk3, - libgbm, - libwebp, - # Runtime dependencies: - systemdLibs, - libnotify, - libdbusmenu, - libpulseaudio, - xdg-utils, - wayland, - - # command line arguments which are always set e.g "--password-store=kwallet6" - commandLineArgs, -}: - -{ - pname, - libdir, - bindir, - extractPkg, - version, - hash, - url, -}: - -let - inherit (stdenv) targetPlatform; - ARCH = if targetPlatform.isAarch64 then "arm64" else "x64"; - - # Noto Color Emoji PNG files for emoji replacement; see below. - noto-fonts-color-emoji-png = noto-fonts-color-emoji.overrideAttrs (prevAttrs: { - pname = "noto-fonts-color-emoji-png"; - - # The build produces 136×128 PNGs by default for arcane font - # reasons, but we want square PNGs. - buildFlags = prevAttrs.buildFlags or [ ] ++ [ "BODY_DIMENSIONS=128x128" ]; - - makeTargets = [ "compressed" ]; - - installPhase = '' - runHook preInstall - - mkdir -p $out/share - mv build/compressed_pngs $out/share/noto-fonts-color-emoji-png - python3 add_aliases.py --srcdir=$out/share/noto-fonts-color-emoji-png - - runHook postInstall - ''; - }); - - noto-emoji-sheet-32 = fetchurl { - url = "https://raw.githubusercontent.com/iamcal/emoji-data/refs/tags/v16.0.0/sheet_google_32.png"; - hash = "sha256-tBfp9s1LvBBla7/V4TtumiVFtV5qTPcxLXW+H6qjSVI="; - }; - noto-emoji-sheet-64 = fetchurl { - url = "https://raw.githubusercontent.com/iamcal/emoji-data/refs/tags/v16.0.0/sheet_google_64.png"; - hash = "sha256-eVoMWY0WLJpKriPyGIxge4ybwZEst9hDgkWfjekaOuE="; - }; -in -stdenv.mkDerivation (finalAttrs: { - 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 { - inherit url hash; - recursiveHash = true; - downloadToTemp = true; - nativeBuildInputs = [ - (if ARCH == "x64" then dpkg else libarchive) - asar - ]; - # Signal ships the Apple emoji set without a licence via an npm - # package and upstream does not seem terribly interested in fixing - # this; see: - # - # * - # * - # - # We work around this by replacing it with the Noto Color Emoji - # set, which is available under a FOSS licence and more likely to - # be used on a NixOS machine anyway. The Apple emoji are removed - # during `fetchurl` to ensure that the build doesn’t cache the - # unlicensed emoji files, but the rest of the work is done in the - # main derivation. - postFetch = '' - ${extractPkg} - asar extract "$out/${libdir}/resources/app.asar" $out/asar-contents - rm -r \ - "$out/${libdir}/resources/app.asar"{,.unpacked} \ - $out/asar-contents/images/emoji-sheet-32.webp \ - $out/asar-contents/images/emoji-sheet-64.webp - ''; - }; - - nativeBuildInputs = [ - rsync - asar - python3 - autoPatchelfHook - # override doesn't preserve splicing https://github.com/NixOS/nixpkgs/issues/132651 - # Has to use `makeShellWrapper` from `buildPackages` even though `makeShellWrapper` from the inputs is spliced because `propagatedBuildInputs` would pick the wrong one because of a different offset. - (buildPackages.wrapGAppsHook3.override { makeWrapper = buildPackages.makeShellWrapper; }) - libwebp - ]; - - 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 - libpulseaudio - libnotify - libuuid - libgbm - nspr - nss - pango - systemdLibs - libxcb - libxshmfence - ]; - - runtimeDependencies = [ - systemdLibs - libappindicator-gtk3 - libnotify - libdbusmenu - pipewire - xdg-utils - wayland - ]; - - dontBuild = true; - dontConfigure = true; - - unpackPhase = '' - rsync -a --chmod=+w $src/ . - ''; - - installPhase = '' - runHook preInstall - - mkdir -p $out/lib - - mv usr/share $out/share - mv "${libdir}" "$out/lib/signal-desktop" - - # Symlink to bin - mkdir -p $out/bin - ln -s "$out/lib/signal-desktop/signal-desktop" $out/bin/${finalAttrs.meta.mainProgram} - - # Create required symlinks: - ln -s libGLESv2.so "$out/lib/signal-desktop/libGLESv2.so.2" - - # Compress the emoji sheets to webp, as signal expects webp images. The flags used are the same as those used upstream. - cwebp -progress -mt -preset icon -alpha_filter best -alpha_q 20 -pass 10 -q 75 ${noto-emoji-sheet-32} -o asar-contents/images/emoji-sheet-32.webp - cwebp -progress -mt -preset icon -alpha_filter best -alpha_q 20 -pass 10 -q 75 ${noto-emoji-sheet-64} -o asar-contents/images/emoji-sheet-64.webp - - # Copy the Noto Color Emoji PNGs into the ASAR contents. See `src` - # for the motivation, and the script for the technical details. - emojiPrefix=$( - python3 ${./copy-noto-emoji.py} \ - ${noto-fonts-color-emoji-png}/share/noto-fonts-color-emoji-png \ - asar-contents - ) - - # Replace the URL used for fetching large versions of emoji with - # the local path to our copied PNGs. - substituteInPlace asar-contents/preload.bundle.js \ - --replace-fail \ - 'emoji://jumbo?emoji=' \ - "file://$out/lib/signal-desktop/resources/app.asar/$emojiPrefix/" - - # `asar(1)` copies files from the corresponding `.unpacked` - # directory when extracting, and will put them back in the modified - # archive if you don’t specify them again when repacking. Signal - # leaves their native `.node` libraries unpacked, so we match that. - asar pack \ - --unpack '*.node' \ - asar-contents \ - "$out/lib/signal-desktop/resources/app.asar" - - runHook postInstall - ''; - - preFixup = '' - gappsWrapperArgs+=( - --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" - --suffix PATH : ${lib.makeBinPath [ xdg-utils ]} - --add-flags ${lib.escapeShellArg commandLineArgs} - ) - - # Fix the desktop link - substituteInPlace $out/share/applications/signal-desktop.desktop \ - --replace-fail "/${bindir}/signal-desktop" ${finalAttrs.meta.mainProgram} - - mv $out/share/applications/signal{-desktop,}.desktop - - # Note: The following path contains bundled libraries: - # $out/lib/signal-desktop/resources/app.asar.unpacked/node_modules/ - patchelf --add-needed ${libpulseaudio}/lib/libpulse.so "$out/lib/signal-desktop/resources/app.asar.unpacked/node_modules/@signalapp/ringrtc/build/linux/libringrtc-${ARCH}.node" - ''; - - passthru = { - # Tests if the application launches and waits for "Link your phone to Signal Desktop": - tests.application-launch = nixosTests.signal-desktop; - updateScript.command = [ ./update.sh ]; - }; - - 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${finalAttrs.version}"; - license = [ - lib.licenses.agpl3Only - - # Various npm packages - lib.licenses.free - - lib.licenses.asl20 # noto-emoji - lib.licenses.mit # emoji-data - ]; - maintainers = with lib.maintainers; [ - eclairevoyant - mic92 - equirosa - bkchr - emily - Gliczy - ]; - mainProgram = "signal-desktop"; - platforms = [ - "x86_64-linux" - "aarch64-linux" - "x86_64-darwin" - "aarch64-darwin" - ]; - sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; - }; -}) diff --git a/pkgs/by-name/si/signal-desktop-bin/package.nix b/pkgs/by-name/si/signal-desktop-bin/package.nix deleted file mode 100644 index 79e6becbe892..000000000000 --- a/pkgs/by-name/si/signal-desktop-bin/package.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - stdenv, - callPackage, - commandLineArgs ? "", -}: -if stdenv.hostPlatform.system == "aarch64-linux" then - callPackage ./signal-desktop-aarch64.nix { inherit commandLineArgs; } -else if stdenv.hostPlatform.isDarwin then - callPackage ./signal-desktop-darwin.nix { } -else - callPackage ./signal-desktop.nix { inherit commandLineArgs; } diff --git a/pkgs/by-name/si/signal-desktop-bin/pyproject.toml b/pkgs/by-name/si/signal-desktop-bin/pyproject.toml deleted file mode 100644 index eeee9c7287a0..000000000000 --- a/pkgs/by-name/si/signal-desktop-bin/pyproject.toml +++ /dev/null @@ -1,15 +0,0 @@ -[tool.mypy] -files = ["*.py"] -strict = true - -[tool.ruff] -line-length = 80 - -[tool.ruff.lint] -select = ["ALL"] -ignore = ["COM812", "D203", "D213", "ISC001", "T201"] -allowed-confusables = ["‐"] - -[tool.ruff.format] -docstring-code-format = true -docstring-code-line-length = "dynamic" diff --git a/pkgs/by-name/si/signal-desktop-bin/signal-desktop-aarch64.nix b/pkgs/by-name/si/signal-desktop-bin/signal-desktop-aarch64.nix deleted file mode 100644 index 9a8ff69c487b..000000000000 --- a/pkgs/by-name/si/signal-desktop-bin/signal-desktop-aarch64.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ callPackage, commandLineArgs }: -callPackage ./generic.nix { inherit commandLineArgs; } { - pname = "signal-desktop-bin"; - version = "7.90.0"; - - libdir = "usr/lib64/signal-desktop"; - bindir = "usr/bin"; - extractPkg = '' - mkdir -p $out - bsdtar -xf $downloadedFile -C "$out" - ''; - - url = "https://download.copr.fedorainfracloud.org/results/useidel/signal-desktop/fedora-42-aarch64/10149422-signal-desktop/signal-desktop-7.90.0-1.fc42.aarch64.rpm"; - hash = "sha256-+6aIB/UF7oZ7I4MtDsYCOhQxiaTpIyXGZ5WLdJto7Us="; -} diff --git a/pkgs/by-name/si/signal-desktop-bin/signal-desktop-darwin.nix b/pkgs/by-name/si/signal-desktop-bin/signal-desktop-darwin.nix deleted file mode 100644 index 1e8dab02080b..000000000000 --- a/pkgs/by-name/si/signal-desktop-bin/signal-desktop-darwin.nix +++ /dev/null @@ -1,61 +0,0 @@ -{ - stdenv, - lib, - fetchurl, - _7zz, -}: -stdenv.mkDerivation (finalAttrs: { - pname = "signal-desktop-bin"; - version = "7.90.0"; - - src = fetchurl { - url = "https://updates.signal.org/desktop/signal-desktop-mac-universal-${finalAttrs.version}.dmg"; - hash = "sha256-61JsAPeGVNJpuUDAv3nA0WNr15C+e5NvsT0ICT2dolc="; - }; - sourceRoot = "."; - - nativeBuildInputs = [ _7zz ]; - - dontConfigure = true; - dontBuild = true; - installPhase = '' - runHook preInstall - - mkdir -p $out/Applications - cp -r Signal.app $out/Applications - - runHook postInstall - ''; - - passthru = { - updateScript.command = [ ./update.sh ]; - }; - - 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/"; - downloadPage = "https://signal.org/download/macos/"; - changelog = "https://github.com/signalapp/Signal-Desktop/releases/tag/v${finalAttrs.version}"; - license = with lib.licenses; [ - agpl3Only - - # Various npm packages - free - - # has non-redistributable Apple emoji packaged, see main derivation - unfree - ]; - maintainers = with lib.maintainers; [ nickhu ]; - platforms = [ - "x86_64-linux" - "aarch64-linux" - "x86_64-darwin" - "aarch64-darwin" - ]; - sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; - }; -}) diff --git a/pkgs/by-name/si/signal-desktop-bin/signal-desktop.nix b/pkgs/by-name/si/signal-desktop-bin/signal-desktop.nix deleted file mode 100644 index 3a5c5b3d8f2d..000000000000 --- a/pkgs/by-name/si/signal-desktop-bin/signal-desktop.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ callPackage, commandLineArgs }: -callPackage ./generic.nix { inherit commandLineArgs; } rec { - pname = "signal-desktop-bin"; - version = "7.90.0"; - - libdir = "opt/Signal"; - bindir = libdir; - extractPkg = "dpkg-deb -x $downloadedFile $out"; - - url = "https://updates.signal.org/desktop/apt/pool/s/signal-desktop/signal-desktop_${version}_amd64.deb"; - hash = "sha256-m9tBldv1WvfdLrORIuJQYBQ72rBRHgXSAk0PrwZtAB4="; -} diff --git a/pkgs/by-name/si/signal-desktop-bin/update.sh b/pkgs/by-name/si/signal-desktop-bin/update.sh deleted file mode 100755 index 7d3696642b58..000000000000 --- a/pkgs/by-name/si/signal-desktop-bin/update.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p bash common-updater-scripts curl coreutils jq - -set -ex - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" - -latestTag=$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} \ - "https://api.github.com/repos/signalapp/Signal-Desktop/releases/latest" \ - | jq -r ".tag_name") -latestVersion="$(expr "$latestTag" : 'v\(.*\)')" - -latestBuildInfoAarch64=$(curl \ - "https://copr.fedorainfracloud.org/api_3/package/?ownername=useidel&projectname=signal-desktop&packagename=signal-desktop&with_latest_succeeded_build=true" \ - | jq '.builds.latest_succeeded') -latestBuildAarch64=$(jq '.id' <<< $latestBuildInfoAarch64) -latestVersionAarch64=$(jq -r '.source_package.version' <<< $latestBuildInfoAarch64) -latestPrettyVersionAarch64="${latestVersionAarch64%-*}" - -darwinHash="$(nix --extra-experimental-features nix-command hash to-sri --type sha256 "$(nix-prefetch-url "https://updates.signal.org/desktop/signal-desktop-mac-universal-${latestVersion}.dmg")")" - -echo "Updating signal-desktop for x86_64-linux" -update-source-version signal-desktop-bin "$latestVersion" \ - --system=x86_64-linux \ - --file="$SCRIPT_DIR/signal-desktop.nix" - -echo "Updating signal-desktop for aarch64-linux" -update-source-version signal-desktop-bin "$latestPrettyVersionAarch64" "" \ - "https://download.copr.fedorainfracloud.org/results/useidel/signal-desktop/fedora-42-aarch64/$(printf "%08d" $latestBuildAarch64)-signal-desktop/signal-desktop-$latestVersionAarch64.fc42.aarch64.rpm" \ - --system=aarch64-linux \ - --file="$SCRIPT_DIR/signal-desktop-aarch64.nix" - -echo "Updating signal-desktop for darwin" -sed -i "s|version = \".*\";|version = \"${latestVersion}\";|" "$SCRIPT_DIR/signal-desktop-darwin.nix" -sed -i "s|hash = \"sha256-[^\"]*\";|hash = \"${darwinHash}\";|" "$SCRIPT_DIR/signal-desktop-darwin.nix" diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index c23f1000ce40..610d3c109ba9 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -1758,6 +1758,7 @@ mapAliases { shipyard = throw "'shipyard' has been renamed to/replaced by 'jumppad'"; # Converted to throw 2025-10-27 siduck76-st = throw "'siduck76-st' has been renamed to/replaced by 'st-snazzy'"; # Converted to throw 2025-10-27 sierra-breeze-enhanced = throw "'sierra-breeze-enhanced' has been removed, as it is only compatible with Plasma 5, which is EOL"; # Added 2025-08-20 + signal-desktop-bin = throw "'signal-desktop-bin' has been replaced by 'signal-desktop' which is built from source"; # Added 2026-03-02 signal-desktop-source = throw "'signal-desktop-source' has been renamed to/replaced by 'signal-desktop'"; # Converted to throw 2025-10-27 simpleBluez = warnAlias "'simpleBluez' has been renamed to 'simplebluez'" simplebluez; # Added 2026-02-18 simpleDBus = warnAlias "'simpleDBus' has been renamed to 'simpledbus'" simpledbus; # Added 2026-02-12