diff --git a/pkgs/by-name/sl/slack/darwin.nix b/pkgs/by-name/sl/slack/darwin.nix new file mode 100644 index 000000000000..9d2245433d21 --- /dev/null +++ b/pkgs/by-name/sl/slack/darwin.nix @@ -0,0 +1,30 @@ +{ + pname, + version, + src, + passthru, + meta, + + stdenvNoCC, + undmg, +}: +stdenvNoCC.mkDerivation { + inherit + pname + version + src + passthru + meta + ; + + nativeBuildInputs = [ undmg ]; + + sourceRoot = "."; + + installPhase = '' + runHook preInstall + mkdir -p $out/Applications + cp -a Slack.app $out/Applications + runHook postInstall + ''; +} diff --git a/pkgs/by-name/sl/slack/linux.nix b/pkgs/by-name/sl/slack/linux.nix new file mode 100644 index 000000000000..03f6f10b21d0 --- /dev/null +++ b/pkgs/by-name/sl/slack/linux.nix @@ -0,0 +1,154 @@ +{ + pname, + version, + src, + passthru, + meta, + + lib, + stdenv, + dpkg, + makeWrapper, + asar, + alsa-lib, + at-spi2-atk, + at-spi2-core, + atk, + cairo, + cups, + curl, + dbus, + expat, + fontconfig, + freetype, + gdk-pixbuf, + glib, + gtk3, + libGL, + libappindicator-gtk3, + libdrm, + libnotify, + libpulseaudio, + libuuid, + libxcb, + libxkbcommon, + libgbm, + nspr, + nss, + pango, + pipewire, + systemd, + wayland, + xdg-utils, + xorg, +}: +stdenv.mkDerivation rec { + inherit + pname + version + src + passthru + meta + ; + + rpath = + lib.makeLibraryPath [ + alsa-lib + at-spi2-atk + at-spi2-core + atk + cairo + cups + curl + dbus + expat + fontconfig + freetype + gdk-pixbuf + glib + gtk3 + libGL + libappindicator-gtk3 + libdrm + libnotify + libpulseaudio + libuuid + libxcb + libxkbcommon + libgbm + nspr + nss + pango + pipewire + stdenv.cc.cc + systemd + wayland + xorg.libX11 + xorg.libXScrnSaver + xorg.libXcomposite + xorg.libXcursor + xorg.libXdamage + xorg.libXext + xorg.libXfixes + xorg.libXi + xorg.libXrandr + xorg.libXrender + xorg.libXtst + xorg.libxkbfile + xorg.libxshmfence + ] + + ":${lib.getLib stdenv.cc.cc}/lib64"; + + buildInputs = [ + gtk3 # needed for GSETTINGS_SCHEMAS_PATH + ]; + + nativeBuildInputs = [ + dpkg + makeWrapper + asar + ]; + + dontUnpack = true; + dontBuild = true; + dontPatchELF = true; + + installPhase = '' + runHook preInstall + + # The deb file contains a setuid binary, so 'dpkg -x' doesn't work here + dpkg --fsys-tarfile $src | tar --extract + rm -rf usr/share/lintian + + mkdir -p $out + mv usr/* $out + + # Otherwise it looks "suspicious" + chmod -R g-w $out + + for file in $(find $out -type f \( -perm /0111 -o -name \*.so\* \) ); do + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$file" || true + patchelf --set-rpath ${rpath}:$out/lib/slack $file || true + done + + # Replace the broken bin/slack symlink with a startup wrapper. + # Make xdg-open overrideable at runtime. + rm $out/bin/slack + makeWrapper $out/lib/slack/slack $out/bin/slack \ + --prefix XDG_DATA_DIRS : $GSETTINGS_SCHEMAS_PATH \ + --suffix PATH : ${lib.makeBinPath [ xdg-utils ]} \ + --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations,WebRTCPipeWireCapturer --enable-wayland-ime=true}}" + + # Fix the desktop link + substituteInPlace $out/share/applications/slack.desktop \ + --replace /usr/bin/ $out/bin/ \ + --replace /usr/share/pixmaps/slack.png slack \ + --replace bin/slack "bin/slack -s" + + # Prevent Un-blacklist pipewire integration to enable screen sharing on wayland. + # https://github.com/flathub/com.slack.Slack/issues/101#issuecomment-1807073763 + sed -i -e 's/,"WebRTCPipeWireCapturer"/,"LebRTCPipeWireCapturer"/' $out/lib/slack/resources/app.asar + + runHook postInstall + ''; +} diff --git a/pkgs/by-name/sl/slack/package.nix b/pkgs/by-name/sl/slack/package.nix index 5fb7788eb0c6..ce2ec83cf9db 100644 --- a/pkgs/by-name/sl/slack/package.nix +++ b/pkgs/by-name/sl/slack/package.nix @@ -1,48 +1,12 @@ { - lib, - stdenv, + callPackage, fetchurl, - dpkg, - undmg, - makeWrapper, - asar, - alsa-lib, - at-spi2-atk, - at-spi2-core, - atk, - cairo, - cups, - curl, - dbus, - expat, - fontconfig, - freetype, - gdk-pixbuf, - glib, - gtk3, - libGL, - libappindicator-gtk3, - libdrm, - libnotify, - libpulseaudio, - libuuid, - libxcb, - libxkbcommon, - libxshmfence, - libgbm, - nspr, - nss, - pango, - pipewire, - systemd, - wayland, - xdg-utils, - xorg, + lib, + stdenvNoCC, }: let - inherit (stdenv.hostPlatform) system; - throwSystem = throw "slack does not support system: ${system}"; + inherit (stdenvNoCC.hostPlatform) system; pname = "slack"; @@ -55,33 +19,37 @@ let aarch64-darwin-version = "4.45.64"; aarch64-darwin-sha256 = "136crd17ybaznp680qb2rl0c8cllkkv21ymf3dck2jhkqbp7v2kj"; - version = - { - x86_64-darwin = x86_64-darwin-version; - x86_64-linux = x86_64-linux-version; - aarch64-darwin = aarch64-darwin-version; - } - .${system} or throwSystem; - - src = + sources = let base = "https://downloads.slack-edge.com"; in { - x86_64-darwin = fetchurl { - url = "${base}/desktop-releases/mac/universal/${version}/Slack-${version}-macOS.dmg"; - sha256 = x86_64-darwin-sha256; + x86_64-darwin = rec { + version = x86_64-darwin-version; + src = fetchurl { + url = "${base}/desktop-releases/mac/universal/${version}/Slack-${version}-macOS.dmg"; + sha256 = x86_64-darwin-sha256; + }; }; - x86_64-linux = fetchurl { - url = "${base}/desktop-releases/linux/x64/${version}/slack-desktop-${version}-amd64.deb"; - sha256 = x86_64-linux-sha256; + x86_64-linux = rec { + version = x86_64-linux-version; + src = fetchurl { + url = "${base}/desktop-releases/linux/x64/${version}/slack-desktop-${version}-amd64.deb"; + sha256 = x86_64-linux-sha256; + }; }; - aarch64-darwin = fetchurl { - url = "${base}/desktop-releases/mac/arm64/${version}/Slack-${version}-macOS.dmg"; - sha256 = aarch64-darwin-sha256; + aarch64-darwin = rec { + version = aarch64-darwin-version; + src = fetchurl { + url = "${base}/desktop-releases/mac/arm64/${version}/Slack-${version}-macOS.dmg"; + sha256 = aarch64-darwin-sha256; + }; }; - } - .${system} or throwSystem; + }; + + passthru = { + updateScript = ./update.sh; + }; meta = { description = "Desktop client for Slack"; @@ -101,141 +69,8 @@ let ]; mainProgram = "slack"; }; - - linux = stdenv.mkDerivation rec { - inherit - pname - version - src - meta - ; - - passthru.updateScript = ./update.sh; - - rpath = - lib.makeLibraryPath [ - alsa-lib - at-spi2-atk - at-spi2-core - atk - cairo - cups - curl - dbus - expat - fontconfig - freetype - gdk-pixbuf - glib - gtk3 - libGL - libappindicator-gtk3 - libdrm - libnotify - libpulseaudio - libuuid - libxcb - libxkbcommon - libgbm - nspr - nss - pango - pipewire - stdenv.cc.cc - systemd - wayland - xorg.libX11 - xorg.libXScrnSaver - xorg.libXcomposite - xorg.libXcursor - xorg.libXdamage - xorg.libXext - xorg.libXfixes - xorg.libXi - xorg.libXrandr - xorg.libXrender - xorg.libXtst - xorg.libxkbfile - xorg.libxshmfence - ] - + ":${lib.getLib stdenv.cc.cc}/lib64"; - - buildInputs = [ - gtk3 # needed for GSETTINGS_SCHEMAS_PATH - ]; - - nativeBuildInputs = [ - dpkg - makeWrapper - asar - ]; - - dontUnpack = true; - dontBuild = true; - dontPatchELF = true; - - installPhase = '' - runHook preInstall - - # The deb file contains a setuid binary, so 'dpkg -x' doesn't work here - dpkg --fsys-tarfile $src | tar --extract - rm -rf usr/share/lintian - - mkdir -p $out - mv usr/* $out - - # Otherwise it looks "suspicious" - chmod -R g-w $out - - for file in $(find $out -type f \( -perm /0111 -o -name \*.so\* \) ); do - patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$file" || true - patchelf --set-rpath ${rpath}:$out/lib/slack $file || true - done - - # Replace the broken bin/slack symlink with a startup wrapper. - # Make xdg-open overrideable at runtime. - rm $out/bin/slack - makeWrapper $out/lib/slack/slack $out/bin/slack \ - --prefix XDG_DATA_DIRS : $GSETTINGS_SCHEMAS_PATH \ - --suffix PATH : ${lib.makeBinPath [ xdg-utils ]} \ - --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations,WebRTCPipeWireCapturer --enable-wayland-ime=true}}" - - # Fix the desktop link - substituteInPlace $out/share/applications/slack.desktop \ - --replace /usr/bin/ $out/bin/ \ - --replace /usr/share/pixmaps/slack.png slack \ - --replace bin/slack "bin/slack -s" - '' - + lib.optionalString stdenv.hostPlatform.isLinux '' - # Prevent Un-blacklist pipewire integration to enable screen sharing on wayland. - # https://github.com/flathub/com.slack.Slack/issues/101#issuecomment-1807073763 - sed -i -e 's/,"WebRTCPipeWireCapturer"/,"LebRTCPipeWireCapturer"/' $out/lib/slack/resources/app.asar - '' - + '' - runHook postInstall - ''; - }; - - darwin = stdenv.mkDerivation { - inherit - pname - version - src - meta - ; - - passthru.updateScript = ./update.sh; - - nativeBuildInputs = [ undmg ]; - - sourceRoot = "."; - - installPhase = '' - runHook preInstall - mkdir -p $out/Applications - cp -a Slack.app $out/Applications - runHook postInstall - ''; - }; in -if stdenv.hostPlatform.isDarwin then darwin else linux +callPackage (if stdenvNoCC.hostPlatform.isDarwin then ./darwin.nix else ./linux.nix) { + inherit pname passthru meta; + inherit (sources.${system} or (throw "Unsupported system: ${system}")) version src; +}