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
254 lines
6.7 KiB
Nix
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 ];
|
|
};
|
|
}
|