{ lib, stdenv, fetchurl, fetchPypi, python311, makeWrapper, libtorrent-rasterbar-1_2_x, qt5, nix-update-script, }: let # libtorrent-rasterbar-1_2_x requires python311 python3 = python311; libtorrent = (python3.pkgs.toPythonModule (libtorrent-rasterbar-1_2_x)).python; in stdenv.mkDerivation (finalAttrs: { pname = "tribler"; version = "7.14.0"; src = fetchurl { url = "https://github.com/Tribler/tribler/releases/download/v${finalAttrs.version}/Tribler-${finalAttrs.version}.tar.xz"; hash = "sha256-fQJOs9P4y71De/+svmD7YZ4+tm/bC3rspm7SbOHlSR4="; }; nativeBuildInputs = [ python3.pkgs.wrapPython makeWrapper # we had a "copy" of this in tribler's makeWrapper # but it went out of date and broke, so please just use it directly qt5.wrapQtAppsHook ]; buildInputs = [ python3.pkgs.python ]; pythonPath = [ libtorrent ] ++ (with python3.pkgs; [ # requirements-core.txt aiohttp aiohttp-apispec anyio chardet configobj cryptography decorator faker libnacl lz4 marshmallow netifaces networkx pony psutil pyasn1 pydantic_1 pyopenssl pyyaml sentry-sdk service-identity yappi yarl bitarray filelock (pyipv8.overrideAttrs (p: rec { version = "2.10.0"; src = fetchPypi { inherit (p) pname; inherit version; hash = "sha256-yxiXBxBiPokequm+vjsHIoG9kQnRnbsOx3mYOd8nmiU="; }; })) file-read-backwards brotli human-readable # requirements.txt pillow pyqt5 pyqt5-sip pyqtgraph pyqtwebengine ]); installPhase = '' mkdir -pv $out # Nasty hack; call wrapPythonPrograms to set program_PYTHONPATH. wrapPythonPrograms cp -prvd ./* $out/ makeWrapper ${python3.pkgs.python}/bin/python $out/bin/tribler \ --set _TRIBLERPATH "$out/src" \ --set PYTHONPATH $out/src/tribler-core:$out/src/tribler-common:$out/src/tribler-gui:$program_PYTHONPATH \ --set NO_AT_BRIDGE 1 \ --chdir "$out/src" \ --add-flags "-O $out/src/run_tribler.py" mkdir -p $out/share/applications $out/share/icons cp $out/build/debian/tribler/usr/share/applications/org.tribler.Tribler.desktop $out/share/applications/ cp $out/build/debian/tribler/usr/share/pixmaps/tribler_big.xpm $out/share/icons/tribler.xpm mkdir -p $out/share/copyright/tribler mv $out/LICENSE $out/share/copyright/tribler ''; shellHook = '' wrapPythonPrograms || true export QT_QPA_PLATFORM_PLUGIN_PATH=$(echo ${qt5.qtbase.bin}/lib/qt-*/plugins/platforms) export PYTHONPATH=./tribler-core:./tribler-common:./tribler-gui:$program_PYTHONPATH export QT_PLUGIN_PATH="${qt5.qtsvg.bin}/${qt5.qtbase.qtPluginPrefix}" ''; passthru.updateScript = nix-update-script { }; meta = { description = "Decentralised P2P filesharing client based on the Bittorrent protocol"; mainProgram = "tribler"; homepage = "https://www.tribler.org/"; changelog = "https://github.com/Tribler/tribler/releases/tag/v${finalAttrs.version}"; license = lib.licenses.lgpl21Plus; maintainers = with lib.maintainers; [ xvapx mkg20001 ]; platforms = lib.platforms.linux; }; })