Files
Alexander Miroshnichenko 37dd6d3295
Some checks failed
CI / check (push) Has been cancelled
fix(loop): Replace deprecated xorg dependencies with standalone packages
Replace deprecated xorg.* references with their standalone package
names to eliminate build warnings about renamed packages.
2026-05-30 19:50:29 +03:00

163 lines
3.4 KiB
Nix

{
lib,
stdenv,
fetchurl,
autoPatchelfHook,
makeWrapper,
wrapGAppsHook3,
gtk3,
glib,
libdrm,
mesa,
nss,
nspr,
alsa-lib,
dbus,
cups,
libxkbcommon,
libx11,
libxcomposite,
libxdamage,
libxext,
libxfixes,
libxrandr,
libxcb,
libxshmfence,
systemd,
libnotify,
libsecret,
libappindicator-gtk3,
gsettings-desktop-schemas,
}:
let
version = "6.0.3";
pname = "loop";
in
stdenv.mkDerivation {
inherit pname version;
src = fetchurl {
url = "https://artifacts.wilix.dev/repository/loop-files/loop-${version}/loop-desktop-${version}-linux-x64.tar.gz";
hash = "sha256-xqbESTUYHumdVbxcaMi838wgCVBH05KfsBZB+QOwNhk=";
};
nativeBuildInputs = [
autoPatchelfHook
makeWrapper
wrapGAppsHook3
];
buildInputs = [
stdenv.cc.cc.lib
gtk3
glib
libdrm
mesa
nss
nspr
alsa-lib
dbus
cups
libxkbcommon
libx11
libxcomposite
libxdamage
libxext
libxfixes
libxrandr
libxcb
libxshmfence
systemd
libnotify
libsecret
libappindicator-gtk3
gsettings-desktop-schemas
glib.bin
];
dontBuild = true;
dontStrip = true;
installPhase = ''
runHook preInstall
mkdir -p "$out/share/loop" "$out/bin" "$out/share/applications" "$out/share/icons/hicolor/256x256/apps"
cp -r . "$out/share/loop/"
# Find and symlink the main executable
if [ -f "$out/share/loop/loop" ]; then
ln -s "$out/share/loop/loop" "$out/bin/loop"
elif [ -f "$out/share/loop/Loop" ]; then
ln -s "$out/share/loop/Loop" "$out/bin/loop"
elif [ -f "$out/share/loop/loop-desktop" ]; then
ln -s "$out/share/loop/loop-desktop" "$out/bin/loop"
else
# Try to find any executable
for f in "$out/share/loop/"*; do
if [ -x "$f" ] && [ ! -d "$f" ]; then
ln -s "$f" "$out/bin/loop"
break
fi
done
fi
# Desktop entry
cat > "$out/share/applications/loop.desktop" << EOF
[Desktop Entry]
Name=Loop
Comment=Corporate messenger for your team
Exec=$out/bin/loop
Icon=loop
Terminal=false
Type=Application
Categories=Network;InstantMessaging;
EOF
# Install icon if present
if [ -f "$out/share/loop/loop-desktop.png" ]; then
cp "$out/share/loop/loop-desktop.png" "$out/share/icons/hicolor/256x256/apps/loop.png"
elif [ -f "$out/share/loop/app_icon.png" ]; then
cp "$out/share/loop/app_icon.png" "$out/share/icons/hicolor/256x256/apps/loop.png"
fi
# Electron GPU libraries expect versioned sonames
if [ -f "$out/share/loop/libEGL.so" ] && [ ! -e "$out/share/loop/libEGL.so.1" ]; then
ln -s libEGL.so "$out/share/loop/libEGL.so.1"
fi
if [ -f "$out/share/loop/libGLESv2.so" ] && [ ! -e "$out/share/loop/libGLESv2.so.2" ]; then
ln -s libGLESv2.so "$out/share/loop/libGLESv2.so.2"
fi
runHook postInstall
'';
postFixup = ''
wrapProgram $out/bin/loop \
--prefix PATH : ${glib.bin}/bin \
--prefix LD_LIBRARY_PATH : $out/share/loop \
--add-flags "--ozone-platform=x11"
'';
passthru = {
category = "Communication";
updateScript = [
"nix-update"
"--flake"
".#loop"
];
};
meta = with lib; {
description = "Corporate messenger for your team";
homepage = "https://loop.ru";
license = licenses.unfree;
maintainers = with maintainers; [ ];
platforms = [ "x86_64-linux" ];
mainProgram = "loop";
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
};
}