nixpkgs/pkgs/applications/networking/instant-messengers/feishu/default.nix
2024-03-23 15:38:35 +08:00

201 lines
4.0 KiB
Nix

{ addOpenGLRunpath
, alsa-lib
, at-spi2-atk
, at-spi2-core
, atk
, autoPatchelfHook
, cairo
, cups
, curl
, dbus
, dpkg
, expat
, fetchurl
, fontconfig
, freetype
, gdk-pixbuf
, glib
, glibc
, gnutls
, gtk3
, lib
, libGL
, libX11
, libXScrnSaver
, libXcomposite
, libXcursor
, libXdamage
, libXext
, libXfixes
, libXi
, libXrandr
, libXrender
, libXtst
, libappindicator-gtk3
, libcxx
, libdbusmenu
, libdrm
, libgcrypt
, libglvnd
, libnotify
, libpulseaudio
, libuuid
, libxcb
, libxkbcommon
, libxkbfile
, libxshmfence
, makeShellWrapper
, mesa
, nspr
, nss
, pango
, pciutils
, pipewire
, pixman
, stdenv
, systemd
, wayland
, wrapGAppsHook
, xdg-utils
# for custom command line arguments, e.g. "--use-gl=desktop"
, commandLineArgs ? ""
}:
stdenv.mkDerivation rec {
version = "6.9.20";
pname = "feishu";
packageHash = "6085d1c4"; # A hash value used in the download url
src = fetchurl {
url = "https://sf3-cn.feishucdn.com/obj/ee-appcenter/${packageHash}/Feishu-linux_x64-${version}.deb";
hash = "sha256-kg5j/vWaCBUjnF983kk0ZMJ+inF5z5ctED9+ITuIn94=";
};
nativeBuildInputs = [
autoPatchelfHook
makeShellWrapper
dpkg
];
buildInputs = [
gtk3
# for autopatchelf
alsa-lib
cups
curl
libXdamage
libXtst
libdrm
libgcrypt
libpulseaudio
libxshmfence
mesa
nspr
nss
];
rpath = lib.makeLibraryPath [
alsa-lib
at-spi2-atk
at-spi2-core
atk
cairo
cups
curl
dbus
expat
fontconfig
freetype
gdk-pixbuf
glib
glibc
gnutls
libGL
libX11
libXScrnSaver
libXcomposite
libXcursor
libXdamage
libXext
libXfixes
libXi
libXrandr
libXrender
libXtst
libappindicator-gtk3
libcxx
libdbusmenu
libdrm
libgcrypt
libglvnd
libnotify
libpulseaudio
libuuid
libxcb
libxkbcommon
libxkbfile
libxshmfence
mesa
nspr
nss
pango
pciutils
pipewire
pixman
stdenv.cc.cc
systemd
wayland
xdg-utils
];
dontUnpack = true;
installPhase = ''
# This deb file contains a setuid binary,
# so 'dpkg -x' doesn't work here.
dpkg --fsys-tarfile $src | tar --extract
mkdir -p $out
mv usr/share $out/
mv opt/ $out/
substituteInPlace $out/share/applications/bytedance-feishu.desktop \
--replace /usr/bin/bytedance-feishu-stable $out/opt/bytedance/feishu/bytedance-feishu
# Wrap feishu and vulcan
# Feishu is the main executable, vulcan is the builtin browser
for executable in $out/opt/bytedance/feishu/{feishu,vulcan/vulcan}; do
wrapProgram $executable \
--prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH" \
--prefix LD_LIBRARY_PATH : ${rpath}:$out/opt/bytedance/feishu:${addOpenGLRunpath.driverLink}/share \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
${lib.optionalString (commandLineArgs!="") "--add-flags ${lib.escapeShellArg commandLineArgs}"}
done
mkdir -p $out/share/icons/hicolor
base="$out/opt/bytedance/feishu"
for size in 16 24 32 48 64 128 256; do
mkdir -p $out/share/icons/hicolor/''${size}x''${size}/apps
ln -s $base/product_logo_$size.png $out/share/icons/hicolor/''${size}x''${size}/apps/bytedance-feishu.png
done
mkdir -p $out/bin
ln -s $out/opt/bytedance/feishu/bytedance-feishu $out/bin/bytedance-feishu
# feishu comes with a bundled libcurl.so
# and has many dependencies that are hard to satisfy
# e.g. openldap version 2.4
# so replace it with our own libcurl.so
ln -sf ${curl}/lib/libcurl.so $out/opt/bytedance/feishu/libcurl.so
'';
meta = with lib; {
description = "An all-in-one collaboration suite";
homepage = "https://www.feishu.cn/en/";
downloadPage = "https://www.feishu.cn/en/#en_home_download_block";
license = licenses.unfree;
platforms = [ "x86_64-linux" ];
maintainers = with maintainers; [ billhuang ];
};
}