about summary refs log tree commit diff
path: root/pkgs/applications
diff options
context:
space:
mode:
authorJörg Thalheim <Mic92@users.noreply.github.com>2020-02-21 16:03:53 +0000
committerGitHub <noreply@github.com>2020-02-21 16:03:53 +0000
commitfe6a2921c12beecbb7568a787435e5fe1f7c1c6a (patch)
tree7ea438c5837fd2cf787a856a184888afc179e3df /pkgs/applications
parent6f824c38fd0deb455e832b46735948cc230cab8a (diff)
parent53864089919a44ce5951dbaa1bd42be83d65f35a (diff)
downloadnixlib-fe6a2921c12beecbb7568a787435e5fe1f7c1c6a.tar
nixlib-fe6a2921c12beecbb7568a787435e5fe1f7c1c6a.tar.gz
nixlib-fe6a2921c12beecbb7568a787435e5fe1f7c1c6a.tar.bz2
nixlib-fe6a2921c12beecbb7568a787435e5fe1f7c1c6a.tar.lz
nixlib-fe6a2921c12beecbb7568a787435e5fe1f7c1c6a.tar.xz
nixlib-fe6a2921c12beecbb7568a787435e5fe1f7c1c6a.tar.zst
nixlib-fe6a2921c12beecbb7568a787435e5fe1f7c1c6a.zip
Merge pull request #80377 from earksiinni/ersin/slack-macos
slack: 4.2.0 -> 4.3.3, add Darwin target
Diffstat (limited to 'pkgs/applications')
-rw-r--r--pkgs/applications/networking/instant-messengers/slack/default.nix236
1 files changed, 131 insertions, 105 deletions
diff --git a/pkgs/applications/networking/instant-messengers/slack/default.nix b/pkgs/applications/networking/instant-messengers/slack/default.nix
index e501d3bcdbfc..32f50b6fd638 100644
--- a/pkgs/applications/networking/instant-messengers/slack/default.nix
+++ b/pkgs/applications/networking/instant-messengers/slack/default.nix
@@ -8,120 +8,146 @@ let
 
   version = "4.2.0";
 
-  rpath = stdenv.lib.makeLibraryPath [
-    alsaLib
-    at-spi2-atk
-    at-spi2-core
-    atk
-    cairo
-    cups
-    curl
-    dbus
-    expat
-    fontconfig
-    freetype
-    glib
-    gnome2.GConf
-    gdk-pixbuf
-    gtk3
-    pango
-    libnotify
-    libxcb
-    libappindicator-gtk3
-    nspr
-    nss
-    stdenv.cc.cc
-    systemd
-    libuuid
-    libpulseaudio
+  inherit (stdenv.hostPlatform) system;
 
-    xorg.libxkbfile
-    xorg.libX11
-    xorg.libXcomposite
-    xorg.libXcursor
-    xorg.libXdamage
-    xorg.libXext
-    xorg.libXfixes
-    xorg.libXi
-    xorg.libXrandr
-    xorg.libXrender
-    xorg.libXtst
-    xorg.libXScrnSaver
-  ] + ":${stdenv.cc.cc.lib}/lib64";
+  throwSystem = throw "Unsupported system: ${system}";
 
-  src =
-    if stdenv.hostPlatform.system == "x86_64-linux" then
-      fetchurl {
-        url = "https://downloads.slack-edge.com/linux_releases/slack-desktop-${version}-amd64.deb";
-        sha256 = "01b2klhky04fijdqcpfafgdqx2c5nh2fpnzvzgvz10hv7h16cinv";
-      }
-    else
-      throw "Slack is not supported on ${stdenv.hostPlatform.system}";
-
-in stdenv.mkDerivation {
   pname = "slack";
-  inherit version;
-
-  inherit src;
-
-  buildInputs = [
-    gtk3  # needed for GSETTINGS_SCHEMAS_PATH
-  ];
-
-  nativeBuildInputs = [ dpkg makeWrapper nodePackages.asar ];
-
-  dontUnpack = true;
-  dontBuild = true;
-  dontPatchELF = true;
 
-  installPhase = ''
-    # 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
+  sha256 = {
+    x86_64-darwin = "0947a98m7yz4hldjvcqnv9s17dpvlsk9sflc1zc99hf500zck0w1";
+    x86_64-linux = "01b2klhky04fijdqcpfafgdqx2c5nh2fpnzvzgvz10hv7h16cinv";
+  }.${system} or throwSystem;
 
-    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
-    rm $out/bin/slack
-    makeWrapper $out/lib/slack/slack $out/bin/slack \
-      --prefix XDG_DATA_DIRS : $GSETTINGS_SCHEMAS_PATH \
-      --prefix PATH : ${xdg_utils}/bin
-
-    # Fix the desktop link
-    substituteInPlace $out/share/applications/slack.desktop \
-      --replace /usr/bin/ $out/bin/ \
-      --replace /usr/share/ $out/share/
-  '' + stdenv.lib.optionalString (theme != null) ''
-    asar extract $out/lib/slack/resources/app.asar $out/lib/slack/resources/app.asar.unpacked
-    cat <<EOF >> $out/lib/slack/resources/app.asar.unpacked/dist/ssb-interop.bundle.js
-
-    var fs = require('fs');
-    document.addEventListener('DOMContentLoaded', function() {
-      fs.readFile('${theme}/theme.css', 'utf8', function(err, css) {
-        let s = document.createElement('style');
-        s.type = 'text/css';
-        s.innerHTML = css;
-        document.head.appendChild(s);
-      });
-    });
-    EOF
-    asar pack $out/lib/slack/resources/app.asar.unpacked $out/lib/slack/resources/app.asar
-  '';
 
   meta = with stdenv.lib; {
     description = "Desktop client for Slack";
     homepage = https://slack.com;
     license = licenses.unfree;
     maintainers = [ maintainers.mmahut ];
-    platforms = [ "x86_64-linux" ];
+    platforms = [ "x86_64-darwin" "x86_64-linux" ];
+  };
+
+  linux = stdenv.mkDerivation rec {
+    inherit pname version meta;
+    src = fetchurl {
+      url = "https://downloads.slack-edge.com/linux_releases/slack-desktop-${version}-amd64.deb";
+      inherit sha256;
+    };
+
+    rpath = stdenv.lib.makeLibraryPath [
+      alsaLib
+      at-spi2-atk
+      at-spi2-core
+      atk
+      cairo
+      cups
+      curl
+      dbus
+      expat
+      fontconfig
+      freetype
+      glib
+      gnome2.GConf
+      gdk-pixbuf
+      gtk3
+      pango
+      libnotify
+      libxcb
+      libappindicator-gtk3
+      nspr
+      nss
+      stdenv.cc.cc
+      systemd
+      libuuid
+      libpulseaudio
+  
+      xorg.libxkbfile
+      xorg.libX11
+      xorg.libXcomposite
+      xorg.libXcursor
+      xorg.libXdamage
+      xorg.libXext
+      xorg.libXfixes
+      xorg.libXi
+      xorg.libXrandr
+      xorg.libXrender
+      xorg.libXtst
+      xorg.libXScrnSaver
+    ] + ":${stdenv.cc.cc.lib}/lib64";
+
+    buildInputs = [
+      gtk3  # needed for GSETTINGS_SCHEMAS_PATH
+    ];
+  
+    nativeBuildInputs = [ dpkg makeWrapper nodePackages.asar ];
+  
+    dontUnpack = true;
+    dontBuild = true;
+    dontPatchELF = true;
+  
+    installPhase = ''
+      # 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
+      rm $out/bin/slack
+      makeWrapper $out/lib/slack/slack $out/bin/slack \
+        --prefix XDG_DATA_DIRS : $GSETTINGS_SCHEMAS_PATH \
+        --prefix PATH : ${xdg_utils}/bin
+  
+      # Fix the desktop link
+      substituteInPlace $out/share/applications/slack.desktop \
+        --replace /usr/bin/ $out/bin/ \
+        --replace /usr/share/ $out/share/
+    '' + stdenv.lib.optionalString (theme != null) ''
+      asar extract $out/lib/slack/resources/app.asar $out/lib/slack/resources/app.asar.unpacked
+      cat <<EOF >> $out/lib/slack/resources/app.asar.unpacked/dist/ssb-interop.bundle.js
+  
+      var fs = require('fs');
+      document.addEventListener('DOMContentLoaded', function() {
+        fs.readFile('${theme}/theme.css', 'utf8', function(err, css) {
+          let s = document.createElement('style');
+          s.type = 'text/css';
+          s.innerHTML = css;
+          document.head.appendChild(s);
+        });
+      });
+      EOF
+      asar pack $out/lib/slack/resources/app.asar.unpacked $out/lib/slack/resources/app.asar
+    '';
+  };
+
+  darwin = stdenv.mkDerivation {
+    inherit pname version meta;
+
+    phases = [ "installPhase" ];
+
+    src = fetchurl {
+      url = "https://downloads.slack-edge.com/mac_releases/Slack-${version}-macOS.dmg";
+      inherit sha256;
+    };
+
+    installPhase = ''
+      /usr/bin/hdiutil mount -nobrowse -mountpoint slack-mnt $src
+      mkdir -p $out/Applications
+      cp -r ./slack-mnt/Slack.app $out/Applications
+      /usr/bin/hdiutil unmount slack-mnt
+      defaults write com.tinyspeck.slackmacgap SlackNoAutoUpdates -bool YES
+    '';
   };
-}
+in if stdenv.isDarwin
+  then darwin
+  else linux