Files
nixpkgs/pkgs/by-name/we/wemeet/package.nix
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

254 lines
6.7 KiB
Nix

{
lib,
stdenv,
fetchurl,
dpkg,
autoPatchelfHook,
makeWrapper,
nss,
xorg,
desktop-file-utils,
libpulseaudio,
libgcrypt,
dbus,
systemd,
udev,
libGL,
fontconfig,
freetype,
openssl,
wayland,
libdrm,
harfbuzz,
openldap,
curl,
nghttp2,
libunwind,
alsa-lib,
libidn2,
rtmpdump,
libpsl,
libkrb5,
xkeyboard_config,
libsForQt5,
pkg-config,
fetchFromGitHub,
cmake,
ninja,
wireplumber,
libportal,
xdg-desktop-portal,
opencv4WithoutCuda,
pipewire,
fetchgit,
}:
let
wemeet-wayland-screenshare = stdenv.mkDerivation {
pname = "wemeet-wayland-screenshare";
version = "0-unstable-2025-05-31";
src = fetchFromGitHub {
owner = "xuwd1";
repo = "wemeet-wayland-screenshare";
rev = "7f338966e162612b09d838512b11af5901414d05";
hash = "sha256-UtPcgEa+9KrF4CblC8D4oClvVJs+a5DWtwH/fD7puVs=";
fetchSubmodules = true;
};
nativeBuildInputs = [
cmake
ninja
pkg-config
];
buildInputs = [
wireplumber
libportal
xdg-desktop-portal
libsForQt5.qtwayland
opencv4WithoutCuda
pipewire
xorg.libXdamage
xorg.libXrandr
xorg.libX11
];
dontWrapQtApps = true;
meta = {
description = "Hooked WeMeet that enables screenshare on Wayland";
homepage = "https://github.com/xuwd1/wemeet-wayland-screenshare";
license = lib.licenses.mit;
};
};
# for mitigating file transfer crashes
libwemeetwrap = stdenv.mkDerivation {
pname = "libwemeetwrap";
version = "0-unstable-2023-12-14";
src = fetchgit {
url = "https://aur.archlinux.org/wemeet-bin.git";
rev = "8f03fbc4d5ae263ed7e670473886cfa1c146aecc";
hash = "sha256-ExzLCIoLu4KxaoeWNhMXixdlDTIwuPiYZkO+XVK8X10=";
};
dontWrapQtApps = true;
nativeBuildInputs = [ pkg-config ];
buildInputs = [
openssl
libpulseaudio
xorg.libX11
];
buildPhase = ''
runHook preBuild
read -ra openssl_args < <(pkg-config --libs openssl)
read -ra libpulse_args < <(pkg-config --cflags --libs libpulse)
# Comment out `-D WRAP_FORCE_SINK_HARDWARE` to disable the patch that forces wemeet detects sink as hardware sink
$CC $CFLAGS -Wall -Wextra -fPIC -shared \
"''${openssl_args[@]}" "''${libpulse_args[@]}" \
-o libwemeetwrap.so wrap.c -D WRAP_FORCE_SINK_HARDWARE
runHook postBuild
'';
installPhase = ''
runHook preInstall
install -Dm755 ./libwemeetwrap.so $out/lib/libwemeetwrap.so
runHook postInstall
'';
meta.license = lib.licenses.unfree;
};
selectSystem =
attrs:
attrs.${stdenv.hostPlatform.system}
or (throw "wemeet: ${stdenv.hostPlatform.system} is not supported");
in
stdenv.mkDerivation {
pname = "wemeet";
version = "3.19.2.400";
src = selectSystem {
x86_64-linux = fetchurl {
url = "https://updatecdn.meeting.qq.com/cos/fb7464ffb18b94a06868265bed984007/TencentMeeting_0300000000_3.19.2.400_x86_64_default.publish.officialwebsite.deb";
hash = "sha256-PSGc4urZnoBxtk1cwwz/oeXMwnI02Mv1pN2e9eEf5kE=";
};
aarch64-linux = fetchurl {
url = "https://updatecdn.meeting.qq.com/cos/867a8a2e99a215dcd4f60fe049dbe6cf/TencentMeeting_0300000000_3.19.2.400_arm64_default.publish.officialwebsite.deb";
hash = "sha256-avN+PHKKC58lMC5wd0yVLD0Ct7sbb4BtXjovish0ULU=";
};
};
nativeBuildInputs = [
dpkg
autoPatchelfHook
makeWrapper
];
buildInputs = [
nss
xorg.libX11
xorg.libSM
xorg.libICE
xorg.libXtst
desktop-file-utils
libpulseaudio
libgcrypt
dbus
systemd
udev
libGL
fontconfig
freetype
openssl
wayland
libdrm
harfbuzz
openldap
curl
nghttp2
libunwind
alsa-lib
libidn2
rtmpdump
libpsl
libkrb5
xkeyboard_config
];
installPhase = ''
runHook preInstall
mkdir -p $out/app
cp -r opt/wemeet $out/app/wemeet
cp -r usr/share $out/share
# bundled libcurl depends on openssl 1.1 which is not available in nixpkgs
rm -f $out/app/wemeet/lib/libcurl.so
substituteInPlace $out/share/applications/wemeetapp.desktop \
--replace-fail "/opt/wemeet/wemeetapp.sh" "wemeet" \
--replace-fail "/opt/wemeet/wemeet.svg" "wemeet"
substituteInPlace $out/app/wemeet/bin/qt.conf \
--replace-fail "Prefix = ../" "Prefix = $out/app/wemeet/lib"
cp -r $out/app/wemeet/icons $out/share/icons || true
install -Dm0644 $out/app/wemeet/wemeet.svg $out/share/icons/hicolor/scalable/apps/wemeet.svg
ln -s $out/app/wemeet/bin/raw/xcast.conf $out/app/wemeet/bin/xcast.conf
ln -s $out/app/wemeet/plugins $out/app/wemeet/lib/plugins
ln -s $out/app/wemeet/resources $out/app/wemeet/lib/resources
ln -s $out/app/wemeet/translations $out/app/wemeet/lib/translations
runHook postInstall
'';
# set LP_NUM_THREADS limit the number of cores used by rendering
# set XDG_SESSION_TYPE; unset WAYLAND_DISPLAY getting border shadows to work
# set QT_STYLE_OVERRIDE solve the color of the font is not visible when using the included Qt
# set IBUS_USE_PORTAL fix ibus
preFixup =
let
baseWrapperArgs = [
"--set LP_NUM_THREADS 2"
"--set QT_STYLE_OVERRIDE fusion"
"--set IBUS_USE_PORTAL 1"
"--set XKB_CONFIG_ROOT ${xkeyboard_config}/share/X11/xkb"
"--prefix LD_LIBRARY_PATH : $out/app/wemeet/lib:$out/translations:${xorg.libXext}/lib:${xorg.libXdamage}/lib:${opencv4WithoutCuda}/lib:${xorg.libXrandr}/lib"
"--prefix PATH : $out/app/wemeet/bin"
"--prefix QT_PLUGIN_PATH : $out/app/wemeet/plugins"
];
commonWrapperArgs = baseWrapperArgs ++ [
"--prefix LD_PRELOAD : ${libwemeetwrap}/lib/libwemeetwrap.so"
"--run 'if [[ $XDG_SESSION_TYPE == \"wayland\" ]]; then export LD_PRELOAD=${wemeet-wayland-screenshare}/lib/wemeet/libhook.so\${LD_PRELOAD:+:$LD_PRELOAD}; fi'"
];
xwaylandWrapperArgs = baseWrapperArgs ++ [
"--set XDG_SESSION_TYPE x11"
"--unset WAYLAND_DISPLAY"
"--prefix LD_PRELOAD : ${libwemeetwrap}/lib/libwemeetwrap.so:${wemeet-wayland-screenshare}/lib/wemeet/libhook.so"
];
in
''
makeWrapper $out/app/wemeet/bin/wemeetapp $out/bin/wemeet \
${lib.concatStringsSep " " commonWrapperArgs}
makeWrapper $out/app/wemeet/bin/wemeetapp $out/bin/wemeet-xwayland \
${lib.concatStringsSep " " xwaylandWrapperArgs}
'';
meta = {
description = "Tencent Video Conferencing";
homepage = "https://wemeet.qq.com";
license = lib.licenses.unfree;
mainProgram = "wemeet";
platforms = [
"x86_64-linux"
"aarch64-linux"
];
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
maintainers = with lib.maintainers; [ wrvsrx ];
};
}