about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/networking/instant-messengers/slack/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/networking/instant-messengers/slack/default.nix')
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/slack/default.nix115
1 files changed, 115 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/slack/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/slack/default.nix
new file mode 100644
index 000000000000..ece9c1089fad
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/slack/default.nix
@@ -0,0 +1,115 @@
+{ darkMode ? false, stdenv, fetchurl, dpkg, makeWrapper
+, alsaLib, atk, cairo, cups, curl, dbus, expat, fontconfig, freetype, glib
+, gnome2, gtk3, gdk_pixbuf, libnotify, libxcb, nspr, nss, pango
+, systemd, xorg, at-spi2-atk }:
+
+let
+
+  version = "3.3.7";
+
+  rpath = stdenv.lib.makeLibraryPath [
+    alsaLib
+    at-spi2-atk
+    atk
+    cairo
+    cups
+    curl
+    dbus
+    expat
+    fontconfig
+    freetype
+    glib
+    gnome2.GConf
+    gdk_pixbuf
+    gtk3
+    pango
+    libnotify
+    libxcb
+    nspr
+    nss
+    stdenv.cc.cc
+    systemd
+
+    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";
+
+  src =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      fetchurl {
+        url = "https://downloads.slack-edge.com/linux_releases/slack-desktop-${version}-amd64.deb";
+        sha256 = "1q3866iaby8rqim8h2m398wzi0isnnlsxirlq63fzz7a4g1hnc8p";
+      }
+    else
+      throw "Slack is not supported on ${stdenv.hostPlatform.system}";
+
+in stdenv.mkDerivation {
+  name = "slack-${version}";
+
+  inherit src;
+
+  buildInputs = [
+    dpkg
+    gtk3  # needed for GSETTINGS_SCHEMAS_PATH
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  unpackPhase = "true";
+  buildCommand = ''
+    mkdir -p $out
+    dpkg -x $src $out
+    cp -av $out/usr/* $out
+    rm -rf $out/etc $out/usr $out/share/lintian
+
+    # 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
+
+    # Fix the desktop link
+    substituteInPlace $out/share/applications/slack.desktop \
+      --replace /usr/bin/ $out/bin/ \
+      --replace /usr/share/ $out/share/
+  '' + stdenv.lib.optionalString darkMode ''
+    cat <<EOF >> $out/lib/slack/resources/app.asar.unpacked/src/static/ssb-interop.js
+    document.addEventListener('DOMContentLoaded', function() {
+    let tt__customCss = ".menu ul li a:not(.inline_menu_link) {color: #fff !important;}"
+    $.ajax({
+        url: 'https://cdn.rawgit.com/laCour/slack-night-mode/master/css/raw/black.css',
+        success: function(css) {
+            \$("<style></style>").appendTo('head').html(css + tt__customCss);
+            \$("<style></style>").appendTo('head').html('#reply_container.upload_in_threads .inline_message_input_container {background: padding-box #545454}');
+            \$("<style></style>").appendTo('head').html('.p-channel_sidebar {background: #363636 !important}');
+            \$("<style></style>").appendTo('head').html('#client_body:not(.onboarding):not(.feature_global_nav_layout):before {background: inherit;}');
+        }
+      });
+    });
+    EOF
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Desktop client for Slack";
+    homepage = https://slack.com;
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+  };
+}