depot/third_party/nixpkgs/pkgs/by-name/zo/zoom-us/package.nix

237 lines
5.8 KiB
Nix

{
stdenv,
lib,
fetchurl,
pipewire,
makeWrapper,
xar,
cpio,
# Dynamic libraries
alsa-lib,
atk,
at-spi2-atk,
at-spi2-core,
cairo,
cups,
dbus,
expat,
libdrm,
libGL,
fontconfig,
freetype,
gtk3,
gdk-pixbuf,
glib,
mesa,
nspr,
nss,
pango,
wayland,
xorg,
libxkbcommon,
udev,
zlib,
libkrb5,
# Runtime
coreutils,
pciutils,
procps,
util-linux,
pulseaudioSupport ? true,
libpulseaudio,
pulseaudio,
}:
let
inherit (stdenv.hostPlatform) system;
throwSystem = throw "Unsupported system: ${system}";
# Zoom versions are released at different times for each platform
# and often with different versions. We write them on three lines
# like this (rather than using {}) so that the updater script can
# find where to edit them.
versions.aarch64-darwin = "6.2.11.43613";
versions.x86_64-darwin = "6.2.11.43613";
versions.x86_64-linux = "6.2.11.5069";
srcs = {
aarch64-darwin = fetchurl {
url = "https://zoom.us/client/${versions.aarch64-darwin}/zoomusInstallerFull.pkg?archType=arm64";
name = "zoomusInstallerFull.pkg";
hash = "sha256-3W0ohT62vn6vdzGq4YVcaM1kEe9oRxWOavGP/+1fhZc=";
};
x86_64-darwin = fetchurl {
url = "https://zoom.us/client/${versions.x86_64-darwin}/zoomusInstallerFull.pkg";
hash = "sha256-NnnY31fj0Bl1DLEghajf1bH2/bCewzzWZGP4bvIvvyk=";
};
x86_64-linux = fetchurl {
url = "https://zoom.us/client/${versions.x86_64-linux}/zoom_x86_64.pkg.tar.xz";
hash = "sha256-k8T/lmfgAFxW1nwEyh61lagrlHP5geT2tA7e5j61+qw=";
};
};
libs = lib.makeLibraryPath (
[
# $ LD_LIBRARY_PATH=$NIX_LD_LIBRARY_PATH:$PWD ldd zoom | grep 'not found'
alsa-lib
atk
at-spi2-atk
at-spi2-core
cairo
cups
dbus
expat
libdrm
libGL
pipewire
fontconfig
freetype
gtk3
gdk-pixbuf
glib
mesa
nspr
nss
pango
stdenv.cc.cc
wayland
xorg.libX11
xorg.libxcb
xorg.libXcomposite
xorg.libXdamage
xorg.libXext
libxkbcommon
xorg.libXrandr
xorg.libXrender
xorg.libxshmfence
xorg.xcbutilimage
xorg.xcbutilkeysyms
xorg.xcbutilrenderutil
xorg.xcbutilwm
xorg.libXfixes
xorg.libXtst
udev
zlib
libkrb5
]
++ lib.optional (pulseaudioSupport) libpulseaudio
);
binPath = lib.makeBinPath (
[
coreutils
glib.dev
pciutils
procps
util-linux
]
++ lib.optional pulseaudioSupport pulseaudio
);
in
stdenv.mkDerivation {
pname = "zoom";
version = versions.${system} or throwSystem;
src = srcs.${system} or throwSystem;
dontUnpack = stdenv.hostPlatform.isLinux;
unpackPhase = lib.optionalString stdenv.hostPlatform.isDarwin ''
xar -xf $src
zcat < zoomus.pkg/Payload | cpio -i
'';
nativeBuildInputs =
[
makeWrapper
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
xar
cpio
];
installPhase = ''
runHook preInstall
${
rec {
aarch64-darwin = ''
mkdir -p $out/Applications
cp -R zoom.us.app $out/Applications/
'';
# darwin steps same on both architectures
x86_64-darwin = aarch64-darwin;
x86_64-linux = ''
mkdir $out
tar -C $out -xf $src
mv $out/usr/* $out/
'';
}
.${system} or throwSystem
}
runHook postInstall
'';
postFixup =
lib.optionalString stdenv.hostPlatform.isDarwin ''
makeWrapper $out/Applications/zoom.us.app/Contents/MacOS/zoom.us $out/bin/zoom
''
+ lib.optionalString stdenv.hostPlatform.isLinux ''
# Desktop File
substituteInPlace $out/share/applications/Zoom.desktop \
--replace-fail "Exec=/usr/bin/zoom" "Exec=$out/bin/zoom"
for i in aomhost zopen zoom ZoomLauncher ZoomWebviewHost; do
if [ -f $out/opt/zoom/$i ]; then
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/zoom/$i
fi
done
# ZoomLauncher sets LD_LIBRARY_PATH before execing zoom
# IPC breaks if the executable name does not end in 'zoom'
mv $out/opt/zoom/zoom $out/opt/zoom/.zoom
makeWrapper $out/opt/zoom/.zoom $out/opt/zoom/zoom \
--prefix LD_LIBRARY_PATH ":" ${libs}
rm $out/bin/zoom
# Zoom expects "zopen" executable (needed for web login) to be present in CWD. Or does it expect
# everybody runs Zoom only after cd to Zoom package directory? Anyway, :facepalm:
# Clear Qt paths to prevent tripping over "foreign" Qt resources.
# Clear Qt screen scaling settings to prevent over-scaling.
makeWrapper $out/opt/zoom/ZoomLauncher $out/bin/zoom \
--chdir "$out/opt/zoom" \
--unset QML2_IMPORT_PATH \
--unset QT_PLUGIN_PATH \
--unset QT_SCREEN_SCALE_FACTORS \
--prefix PATH : ${binPath} \
--prefix LD_LIBRARY_PATH ":" ${libs}
if [ -f $out/opt/zoom/ZoomWebviewHost ]; then
wrapProgram $out/opt/zoom/ZoomWebviewHost \
--unset QML2_IMPORT_PATH \
--unset QT_PLUGIN_PATH \
--unset QT_SCREEN_SCALE_FACTORS \
--prefix LD_LIBRARY_PATH ":" ${libs}
fi
# Backwards compatibility: we used to call it zoom-us
ln -s $out/bin/{zoom,zoom-us}
'';
# already done
dontPatchELF = true;
passthru.updateScript = ./update.sh;
meta = with lib; {
homepage = "https://zoom.us/";
changelog = "https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_article=KB0061222";
description = "zoom.us video conferencing application";
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
license = licenses.unfree;
platforms = builtins.attrNames srcs;
maintainers = with maintainers; [
danbst
tadfisher
];
mainProgram = "zoom";
};
}