forked from mirrors/nixpkgs
cce2b65151
There are some references to absolute paths in the Teams application code: * /usr/share/pixmaps - The application icon. * /usr/bin/xdg-mime - Uses absolute path to invoke. * /usr/bin/teams - Uses absolute path in the autostart file if configured to start automatically at login. Though the paths are hardcoded they can be easily changed within the application’s main JavaScript code bundle and so we’ll do just that. This should at least fix auto-start not working, even when enabled.
123 lines
3.7 KiB
Nix
123 lines
3.7 KiB
Nix
{ lib
|
|
, stdenv
|
|
, fetchurl
|
|
, autoPatchelfHook
|
|
, wrapGAppsHook
|
|
, dpkg
|
|
, atomEnv
|
|
, libuuid
|
|
, libappindicator-gtk3
|
|
, pulseaudio
|
|
, at-spi2-atk
|
|
, coreutils
|
|
, gawk
|
|
, xdg-utils
|
|
, systemd
|
|
, nodePackages
|
|
, enableRectOverlay ? false }:
|
|
|
|
stdenv.mkDerivation rec {
|
|
pname = "teams";
|
|
version = "1.4.00.13653";
|
|
|
|
src = fetchurl {
|
|
url = "https://packages.microsoft.com/repos/ms-teams/pool/main/t/teams/teams_${version}_amd64.deb";
|
|
sha256 = "1kx4j837fd344zy90nl0j3r8cdvihy6i6gf56wd5n56zngx1fhjv";
|
|
};
|
|
|
|
nativeBuildInputs = [ dpkg autoPatchelfHook wrapGAppsHook nodePackages.asar ];
|
|
|
|
unpackCmd = "dpkg -x $curSrc .";
|
|
|
|
buildInputs = atomEnv.packages ++ [
|
|
libuuid
|
|
at-spi2-atk
|
|
];
|
|
|
|
runtimeDependencies = [
|
|
(lib.getLib systemd)
|
|
pulseaudio
|
|
libappindicator-gtk3
|
|
];
|
|
|
|
preFixup = ''
|
|
gappsWrapperArgs+=(--prefix PATH : "${coreutils}/bin:${gawk}/bin")
|
|
gappsWrapperArgs+=(--add-flags --disable-namespace-sandbox)
|
|
gappsWrapperArgs+=(--add-flags --disable-setuid-sandbox)
|
|
'';
|
|
|
|
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
asar extract share/teams/resources/app.asar "$TMP/work"
|
|
substituteInPlace $TMP/work/main.bundle.js \
|
|
--replace "/usr/share/pixmaps/" "$out/share/pixmaps" \
|
|
--replace "/usr/bin/xdg-mime" "${xdg-utils}/bin/xdg-mime" \
|
|
--replace "Exec=/usr/bin/" "Exec=" # Remove usage of absolute path in autostart.
|
|
asar pack --unpack='{*.node,*.ftz,rect-overlay}' "$TMP/work" share/teams/resources/app.asar
|
|
|
|
runHook postBuild
|
|
'';
|
|
|
|
preferLocalBuild = true;
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir -p $out/{opt,bin}
|
|
|
|
mv share/teams $out/opt/
|
|
mv share $out/share
|
|
|
|
substituteInPlace $out/share/applications/teams.desktop \
|
|
--replace /usr/bin/ ""
|
|
|
|
ln -s $out/opt/teams/teams $out/bin/
|
|
|
|
${lib.optionalString (!enableRectOverlay) ''
|
|
# Work-around screen sharing bug
|
|
# https://docs.microsoft.com/en-us/answers/questions/42095/sharing-screen-not-working-anymore-bug.html
|
|
rm $out/opt/teams/resources/app.asar.unpacked/node_modules/slimcore/bin/rect-overlay
|
|
''}
|
|
|
|
runHook postInstall
|
|
'';
|
|
|
|
dontAutoPatchelf = true;
|
|
|
|
# Includes runtimeDependencies in the RPATH of the included Node modules
|
|
# so that dynamic loading works. We cannot use directly runtimeDependencies
|
|
# here, since the libraries from runtimeDependencies are not propagated
|
|
# to the dynamically loadable node modules because of a condition in
|
|
# autoPatchElfHook since *.node modules have Type: DYN (Shared object file)
|
|
# instead of EXEC or INTERP it expects.
|
|
# Fixes: https://github.com/NixOS/nixpkgs/issues/85449
|
|
postFixup = ''
|
|
autoPatchelf "$out"
|
|
|
|
runtime_rpath="${lib.makeLibraryPath runtimeDependencies}"
|
|
|
|
for mod in $(find "$out/opt/teams" -name '*.node'); do
|
|
mod_rpath="$(patchelf --print-rpath "$mod")"
|
|
|
|
echo "Adding runtime dependencies to RPATH of Node module $mod"
|
|
patchelf --set-rpath "$runtime_rpath:$mod_rpath" "$mod"
|
|
done;
|
|
|
|
# fix for https://docs.microsoft.com/en-us/answers/questions/298724/open-teams-meeting-link-on-linux-doens39t-work.html?childToView=309406#comment-309406
|
|
# while we create the wrapper ourselves, gappsWrapperArgs leads to the same issue
|
|
# another option would be to introduce gappsWrapperAppendedArgs, to allow control of positioning
|
|
substituteInPlace "$out/bin/teams" --replace '.teams-wrapped" --disable-namespace-sandbox --disable-setuid-sandbox "$@"' '.teams-wrapped" "$@" --disable-namespace-sandbox --disable-setuid-sandbox'
|
|
'';
|
|
|
|
meta = with lib; {
|
|
description = "Microsoft Teams";
|
|
homepage = "https://teams.microsoft.com";
|
|
downloadPage = "https://teams.microsoft.com/downloads";
|
|
license = licenses.unfree;
|
|
maintainers = [ maintainers.liff ];
|
|
platforms = [ "x86_64-linux" ];
|
|
};
|
|
}
|