summary refs log tree commit diff
path: root/pkgs/applications/networking/p2p
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/networking/p2p')
-rw-r--r--pkgs/applications/networking/p2p/deluge/1.nix (renamed from pkgs/applications/networking/p2p/deluge/1/default.nix)7
-rw-r--r--pkgs/applications/networking/p2p/deluge/2/default.nix44
-rw-r--r--pkgs/applications/networking/p2p/deluge/default.nix86
-rw-r--r--pkgs/applications/networking/p2p/eiskaltdcpp/default.nix69
-rw-r--r--pkgs/applications/networking/p2p/freenet/default.nix8
-rw-r--r--pkgs/applications/networking/p2p/frostwire/default.nix8
-rw-r--r--pkgs/applications/networking/p2p/frostwire/frostwire-bin.nix10
-rw-r--r--pkgs/applications/networking/p2p/gnunet/default.nix18
-rw-r--r--pkgs/applications/networking/p2p/gnunet/git.nix92
-rw-r--r--pkgs/applications/networking/p2p/gnunet/gtk.nix12
-rw-r--r--pkgs/applications/networking/p2p/ktorrent/default.nix2
-rw-r--r--pkgs/applications/networking/p2p/magnetico/default.nix8
-rw-r--r--pkgs/applications/networking/p2p/mldonkey/default.nix40
-rw-r--r--pkgs/applications/networking/p2p/ncdc/default.nix6
-rw-r--r--pkgs/applications/networking/p2p/opentracker/default.nix15
-rw-r--r--pkgs/applications/networking/p2p/qbittorrent/default.nix34
-rw-r--r--pkgs/applications/networking/p2p/retroshare/default.nix62
-rw-r--r--pkgs/applications/networking/p2p/retroshare/no-submodules.patch62
-rw-r--r--pkgs/applications/networking/p2p/soulseekqt/default.nix4
-rw-r--r--pkgs/applications/networking/p2p/stig/default.nix5
-rw-r--r--pkgs/applications/networking/p2p/synapse-bt/default.nix10
-rw-r--r--pkgs/applications/networking/p2p/tixati/default.nix10
-rw-r--r--pkgs/applications/networking/p2p/torrential/default.nix8
-rw-r--r--pkgs/applications/networking/p2p/transgui/default.nix17
-rw-r--r--pkgs/applications/networking/p2p/transmission-remote-cli/default.nix26
-rw-r--r--pkgs/applications/networking/p2p/transmission-remote-gtk/default.nix6
-rw-r--r--pkgs/applications/networking/p2p/transmission/default.nix45
-rw-r--r--pkgs/applications/networking/p2p/tremc/default.nix49
-rw-r--r--pkgs/applications/networking/p2p/tribler/default.nix68
-rw-r--r--pkgs/applications/networking/p2p/twister/default.nix8
-rw-r--r--pkgs/applications/networking/p2p/vuze/default.nix7
-rw-r--r--pkgs/applications/networking/p2p/xd/default.nix29
-rw-r--r--pkgs/applications/networking/p2p/zeronet/default.nix6
33 files changed, 494 insertions, 387 deletions
diff --git a/pkgs/applications/networking/p2p/deluge/1/default.nix b/pkgs/applications/networking/p2p/deluge/1.nix
index cafba65c788..4171efb7ce2 100644
--- a/pkgs/applications/networking/p2p/deluge/1/default.nix
+++ b/pkgs/applications/networking/p2p/deluge/1.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, intltool, libtorrentRasterbar, pythonPackages }:
+{ lib, stdenv, fetchurl, fetchpatch, intltool, libtorrent-rasterbar, pythonPackages }:
 
 pythonPackages.buildPythonPackage rec {
   pname = "deluge";
@@ -19,7 +19,7 @@ pythonPackages.buildPythonPackage rec {
 
   propagatedBuildInputs = with pythonPackages; [
     pyGtkGlade twisted Mako chardet pyxdg pyopenssl service-identity
-    libtorrentRasterbar.dev libtorrentRasterbar.python setuptools
+    libtorrent-rasterbar.dev libtorrent-rasterbar.python setuptools
   ];
 
   nativeBuildInputs = [ intltool ];
@@ -31,11 +31,12 @@ pythonPackages.buildPythonPackage rec {
      cp deluge/data/share/applications/deluge.desktop $out/share/applications
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://deluge-torrent.org";
     description = "Torrent client";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ domenkozar ebzzry ];
+    broken = stdenv.isDarwin;
     platforms = platforms.all;
   };
 }
diff --git a/pkgs/applications/networking/p2p/deluge/2/default.nix b/pkgs/applications/networking/p2p/deluge/2/default.nix
deleted file mode 100644
index 2e9f08ce98a..00000000000
--- a/pkgs/applications/networking/p2p/deluge/2/default.nix
+++ /dev/null
@@ -1,44 +0,0 @@
-{ stdenv, fetchurl, intltool, libtorrentRasterbar, pythonPackages
-, gtk3, glib, gobject-introspection, librsvg, wrapGAppsHook }:
-
-pythonPackages.buildPythonPackage rec {
-  pname = "deluge";
-  version = "2.0.3";
-
-  src = fetchurl {
-    url = "http://download.deluge-torrent.org/source/2.0/${pname}-${version}.tar.xz";
-    sha256 = "14d8kn2pvr1qv8mwqrxmj85jycr73vwfqz12hzag0ararbkfhyky";
-  };
-
-  propagatedBuildInputs = with pythonPackages; [
-    twisted Mako chardet pyxdg pyopenssl service-identity
-    libtorrentRasterbar.dev libtorrentRasterbar.python setuptools
-    setproctitle pillow rencode six zope_interface
-    dbus-python pygobject3 pycairo
-    gtk3 gobject-introspection librsvg
-  ];
-
-  nativeBuildInputs = [ intltool wrapGAppsHook glib ];
-
-  checkInputs = with pythonPackages; [
-    pytest /* pytest-twisted */ pytestcov mock
-    mccabe pylint
-  ];
-
-  doCheck = false; # until pytest-twisted is packaged
-
-  postInstall = ''
-     mkdir -p $out/share/applications
-     cp -R deluge/ui/data/pixmaps $out/share/
-     cp -R deluge/ui/data/icons $out/share/
-     cp deluge/ui/data/share/applications/deluge.desktop $out/share/applications
-  '';
-
-  meta = with stdenv.lib; {
-    homepage = "https://deluge-torrent.org";
-    description = "Torrent client";
-    license = licenses.gpl3Plus;
-    maintainers = with maintainers; [ domenkozar ebzzry ];
-    platforms = platforms.all;
-  };
-}
diff --git a/pkgs/applications/networking/p2p/deluge/default.nix b/pkgs/applications/networking/p2p/deluge/default.nix
new file mode 100644
index 00000000000..2bd3cd739e6
--- /dev/null
+++ b/pkgs/applications/networking/p2p/deluge/default.nix
@@ -0,0 +1,86 @@
+{ lib
+, fetchurl
+, fetchpatch
+, intltool
+, libtorrent-rasterbar
+, pythonPackages
+, gtk3
+, glib
+, gobject-introspection
+, librsvg
+, wrapGAppsHook
+}:
+
+pythonPackages.buildPythonPackage rec {
+  pname = "deluge";
+  version = "2.0.3";
+
+  src = fetchurl {
+    url = "http://download.deluge-torrent.org/source/2.0/${pname}-${version}.tar.xz";
+    sha256 = "14d8kn2pvr1qv8mwqrxmj85jycr73vwfqz12hzag0ararbkfhyky";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/deluge-torrent/deluge/commit/d6c96d629183e8bab2167ef56457f994017e7c85.patch";
+      sha256 = "sha256-slGMt2bgp36pjDztJUXFeZNbzdJsus0s9ARRD6IpNUw=";
+      name = "fix_ngettext_warning.patch";
+    })
+
+    (fetchpatch {
+      url = "https://github.com/deluge-torrent/deluge/commit/351664ec071daa04161577c6a1c949ed0f2c3206.patch";
+      sha256 = "sha256-ry1LFgMe9lys66xAvATcPqIa3rzBPWVnsf8FL1dXkHo=";
+      name = "fix_logging_on_py38.patch";
+    })
+  ];
+
+  propagatedBuildInputs = with pythonPackages; [
+    twisted
+    Mako
+    chardet
+    pyxdg
+    pyopenssl
+    service-identity
+    libtorrent-rasterbar.dev
+    libtorrent-rasterbar.python
+    setuptools
+    setproctitle
+    pillow
+    rencode
+    six
+    zope_interface
+    dbus-python
+    pygobject3
+    pycairo
+    gtk3
+    gobject-introspection
+    librsvg
+  ];
+
+  nativeBuildInputs = [ intltool wrapGAppsHook glib ];
+
+  checkInputs = with pythonPackages; [
+    pytestCheckHook
+    pytest-twisted
+    pytest-cov
+    mock
+    mccabe
+    pylint
+  ];
+
+  doCheck = false; # until pytest-twisted is packaged
+
+  postInstall = ''
+    mkdir -p $out/share
+    cp -R deluge/ui/data/{icons,pixmaps} $out/share/
+    install -Dm444 -t $out/share/applications deluge/ui/data/share/applications/deluge.desktop
+  '';
+
+  meta = with lib; {
+    homepage = "https://deluge-torrent.org";
+    description = "Torrent client";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ domenkozar ebzzry ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/applications/networking/p2p/eiskaltdcpp/default.nix b/pkgs/applications/networking/p2p/eiskaltdcpp/default.nix
index 9355bfa5b8d..f86eefe668f 100644
--- a/pkgs/applications/networking/p2p/eiskaltdcpp/default.nix
+++ b/pkgs/applications/networking/p2p/eiskaltdcpp/default.nix
@@ -1,62 +1,49 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig, qt4, boost, bzip2, libX11
-, fetchpatch, libiconv, pcre-cpp, libidn, lua5, miniupnpc, aspell, gettext }:
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, bzip2, libX11
+, mkDerivation, qtbase, qttools, qtmultimedia, qtscript
+, libiconv, pcre-cpp, libidn, lua5, miniupnpc, aspell, gettext, perl }:
 
-stdenv.mkDerivation rec {
+mkDerivation rec {
   pname = "eiskaltdcpp";
-  version = "2.2.10";
+  version = "2.4.2";
 
   src = fetchFromGitHub {
     owner = "eiskaltdcpp";
     repo = "eiskaltdcpp";
     rev = "v${version}";
-    sha256 = "1mqz0g69njmlghcra3izarjxbxi1jrhiwn4ww94b8jv8xb9cv682";
+    sha256 = "sha256-JmAopXFS6MkxW0wDQ1bC/ibRmWgOpzU0971hcqAehLU=";
   };
 
-  nativeBuildInputs = [ cmake pkgconfig ];
-  buildInputs = [ qt4 boost bzip2 libX11 pcre-cpp libidn lua5 miniupnpc aspell gettext ]
-    ++ stdenv.lib.optional stdenv.isDarwin libiconv;
-
-  patches = [
-    (fetchpatch {
-      url = "https://github.com/eiskaltdcpp/eiskaltdcpp/commit/3b7b56bd7060b426b1f1bfded392ae6853644e2e.patch";
-      sha256 = "1rqjdsvirn3ks9w9qn893fb73mz84xm04wl13fvsvj8p42i5cjas";
-    })
-    (fetchpatch {
-      url = "https://github.com/eiskaltdcpp/eiskaltdcpp/commit/bb9eb364a943fe2a67b3ea52ec6a3f9e911f07dc.patch";
-      sha256 = "1hjhf9a9j4z8v24g5qh5mcg3n0540lbn85y7kvxsh3khc5v3cywx";
-    })
-    (fetchpatch {
-      url = "https://github.com/eiskaltdcpp/eiskaltdcpp/commit/ef4426f1f9a8255e335b0862234e6cc28befef5e.patch";
-      sha256 = "13j018c499n4b5as2n39ws64yj0cf4fskxbqab309vmnjkirxv6x";
-    })
-    (fetchpatch {
-      url = "https://github.com/eiskaltdcpp/eiskaltdcpp/commit/a9c136c8707280d0eeb66be6b289d9718287c55c.patch";
-      sha256 = "0w8v4mbrzk7pmzc475ff96mzzwlh8a0p62kk7p829m5yqdwj4sc9";
-    })
-    (fetchpatch {
-      url = "https://github.com/eiskaltdcpp/eiskaltdcpp/commit/3b9c502ff5c98856d4f8fdb7ed3c6ef34448bfb7.patch";
-      sha256 = "0fjwaq0wd9a164k5ysdjy89hx0ixnxc6q7cvyn1ba28snm0pgxb8";
-    })
-  ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ qtbase qttools qtmultimedia qtscript bzip2 libX11 pcre-cpp libidn lua5 miniupnpc aspell gettext
+    (perl.withPackages (p: with p; [
+      GetoptLong
+      TermShellUI
+    ])) ]
+    ++ lib.optional stdenv.isDarwin libiconv;
 
   cmakeFlags = [
-    "-DUSE_ASPELL=ON"
-    "-DUSE_QT_QML=ON"
+    "-DDBUS_NOTIFY=ON"
     "-DFREE_SPACE_BAR_C=ON"
+    "-DLUA_SCRIPT=ON"
+    "-DPERL_REGEX=ON"
+    "-DUSE_ASPELL=ON"
+    "-DUSE_CLI_JSONRPC=ON"
     "-DUSE_MINIUPNP=ON"
-    "-DLOCAL_MINIUPNP=ON"
-    "-DDBUS_NOTIFY=ON"
     "-DUSE_JS=ON"
-    "-DPERL_REGEX=ON"
-    "-DUSE_CLI_XMLRPC=ON"
-    "-DWITH_SOUNDS=ON"
-    "-DLUA_SCRIPT=ON"
     "-DWITH_LUASCRIPTS=ON"
+    "-DWITH_SOUNDS=ON"
   ];
 
-  enableParallelBuilding = true;
+  postInstall = ''
+    ln -s $out/bin/$pname-qt $out/bin/$pname
+  '';
+
+  preFixup = ''
+    substituteInPlace $out/bin/eiskaltdcpp-cli-jsonrpc \
+      --replace "/usr/local" "$out"
+  '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A cross-platform program that uses the Direct Connect and ADC protocols";
     homepage = "https://github.com/eiskaltdcpp/eiskaltdcpp";
     license = licenses.gpl3Plus;
diff --git a/pkgs/applications/networking/p2p/freenet/default.nix b/pkgs/applications/networking/p2p/freenet/default.nix
index 017f059ff6c..83cc191f1b3 100644
--- a/pkgs/applications/networking/p2p/freenet/default.nix
+++ b/pkgs/applications/networking/p2p/freenet/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchFromGitHub, ant, jdk, bash, coreutils, substituteAll }:
+{ lib, stdenv, fetchurl, fetchFromGitHub, ant, jdk, bash, coreutils, substituteAll }:
 
 let
   freenet_ext = fetchurl {
@@ -73,8 +73,8 @@ in stdenv.mkDerivation {
   meta = {
     description = "Decentralised and censorship-resistant network";
     homepage = "https://freenetproject.org/";
-    license = stdenv.lib.licenses.gpl2Plus;
-    maintainers = [ stdenv.lib.maintainers.doublec ];
-    platforms = with stdenv.lib.platforms; linux;
+    license = lib.licenses.gpl2Plus;
+    maintainers = [ ];
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/applications/networking/p2p/frostwire/default.nix b/pkgs/applications/networking/p2p/frostwire/default.nix
index 65e2165f64e..b3b277bf130 100644
--- a/pkgs/applications/networking/p2p/frostwire/default.nix
+++ b/pkgs/applications/networking/p2p/frostwire/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, gradle, perl, jre, makeWrapper, makeDesktopItem, mplayer }:
+{ lib, stdenv, fetchFromGitHub, gradle_6, perl, jre, makeWrapper, makeDesktopItem, mplayer }:
 
 let
   version = "6.6.7-build-529";
@@ -25,7 +25,7 @@ let
   deps = stdenv.mkDerivation {
     name = "${name}-deps";
     inherit src;
-    buildInputs = [ gradle perl ];
+    buildInputs = [ gradle_6 perl ];
     buildPhase = ''
       export GRADLE_USER_HOME=$(mktemp -d)
       ( cd desktop
@@ -47,7 +47,7 @@ in stdenv.mkDerivation {
   inherit name src;
 
   nativeBuildInputs = [ makeWrapper ];
-  buildInputs = [ gradle ];
+  buildInputs = [ gradle_6 ];
 
   buildPhase = ''
     export GRADLE_USER_HOME=$(mktemp -d)
@@ -84,7 +84,7 @@ in stdenv.mkDerivation {
       --add-flags "-Djava.library.path=$out/lib -jar $out/share/java/frostwire.jar"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.frostwire.com/";
     description = "BitTorrent Client and Cloud File Downloader";
     license = licenses.gpl2;
diff --git a/pkgs/applications/networking/p2p/frostwire/frostwire-bin.nix b/pkgs/applications/networking/p2p/frostwire/frostwire-bin.nix
index d38e9dc7336..2991550defc 100644
--- a/pkgs/applications/networking/p2p/frostwire/frostwire-bin.nix
+++ b/pkgs/applications/networking/p2p/frostwire/frostwire-bin.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchurl, jre, makeWrapper }:
+{ lib, stdenv, fetchurl, jre, makeWrapper }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
-  version = "6.8.5";
+  version = "6.8.9";
   pname = "frostwire";
 
   src = fetchurl {
     url = "https://dl.frostwire.com/frostwire/${version}/frostwire-${version}.amd64.tar.gz";
-    sha256 = "1zdas93w1yqg9yx8wlk7pxpdmwvg4ykg54ai7iyq9ir1zha8fyif";
+    sha256 = "0f5vyliwncryj6hj5xx0dycxycxddsn28n6zixjrn56jajijyl6q";
   };
 
   nativeBuildInputs = [ makeWrapper ];
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
       --prefix PATH : ${jre}/bin/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.frostwire.com/";
     description = "BitTorrent Client and Cloud File Downloader";
     license = licenses.gpl2;
diff --git a/pkgs/applications/networking/p2p/gnunet/default.nix b/pkgs/applications/networking/p2p/gnunet/default.nix
index 618ca074912..c1ba42a5e6d 100644
--- a/pkgs/applications/networking/p2p/gnunet/default.nix
+++ b/pkgs/applications/networking/p2p/gnunet/default.nix
@@ -1,25 +1,27 @@
-{ stdenv, fetchurl, adns, curl, gettext, gmp, gnutls, libextractor
+{ lib, stdenv, fetchurl, adns, curl, gettext, gmp, gnutls, libextractor
 , libgcrypt, libgnurl, libidn, libmicrohttpd, libtool, libunistring
-, makeWrapper, ncurses, pkgconfig, libxml2, sqlite, zlib
-, libpulseaudio, libopus, libogg, jansson, libsodium }:
+, makeWrapper, ncurses, pkg-config, libxml2, sqlite, zlib
+, libpulseaudio, libopus, libogg, jansson, libsodium
+
+, postgresqlSupport ? false, postgresql }:
 
 stdenv.mkDerivation rec {
   pname = "gnunet";
-  version = "0.13.2";
+  version = "0.14.1";
 
   src = fetchurl {
     url = "mirror://gnu/gnunet/${pname}-${version}.tar.gz";
-    sha256 = "0b4a6bxwhpmj274d281vhny7i5rwydrdmab76xk6ji8vf0p705dn";
+    sha256 = "1hhqv994akymf4s593mc1wpsjy6hccd0zbdim3qmc1y3f32hacja";
   };
 
   enableParallelBuilding = true;
 
-  nativeBuildInputs = [ pkgconfig libtool makeWrapper ];
+  nativeBuildInputs = [ pkg-config libtool makeWrapper ];
   buildInputs = [
     adns curl gmp gnutls libextractor libgcrypt libgnurl libidn
     libmicrohttpd libunistring libxml2 ncurses gettext libsodium
     sqlite zlib libpulseaudio libopus libogg jansson
-  ];
+  ] ++ lib.optional postgresqlSupport postgresql;
 
   preConfigure = ''
     # Brute force: since nix-worker chroots don't provide
@@ -46,7 +48,7 @@ stdenv.mkDerivation rec {
     make -k check
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "GNU's decentralized anonymous and censorship-resistant P2P framework";
 
     longDescription = ''
diff --git a/pkgs/applications/networking/p2p/gnunet/git.nix b/pkgs/applications/networking/p2p/gnunet/git.nix
deleted file mode 100644
index b3d455599bf..00000000000
--- a/pkgs/applications/networking/p2p/gnunet/git.nix
+++ /dev/null
@@ -1,92 +0,0 @@
-{ stdenv, fetchgit, libextractor, libmicrohttpd, libgcrypt
-, zlib, gmp, curl, libtool, adns, sqlite, pkgconfig
-, libxml2, ncurses, gettext, libunistring, libidn
-, makeWrapper, autoconf, automake, texinfo, which
-, withVerbose ? false }:
-
-let
-  rev = 	"ce2864cfaa27e55096b480bf35db5f8cee2a5e7e";
-in
-stdenv.mkDerivation {
-  name = "gnunet-git-${rev}";
-
-  src = fetchgit {
-    url =  "https://gnunet.org/git/gnunet.git";
-    inherit rev;
-    sha256 = "0gbw920m9v4b3425c0d1h7drgl2m1fni1bwjn4fwqnyz7kdqzsgl";
-  };
-
-  buildInputs = [
-    libextractor libmicrohttpd libgcrypt gmp curl libtool
-    zlib adns sqlite libxml2 ncurses libidn
-    pkgconfig gettext libunistring makeWrapper
-    autoconf automake texinfo which
-  ];
-
-  configureFlags = stdenv.lib.optional withVerbose "--enable-logging=verbose ";
-
-  preConfigure = ''
-    # Brute force: since nix-worker chroots don't provide
-    # /etc/{resolv.conf,hosts}, replace all references to `localhost'
-    # by their IPv4 equivalent.
-    for i in $(find . \( -name \*.c -or -name \*.conf \) \
-                    -exec grep -l '\<localhost\>' {} \;)
-    do
-      echo "$i: substituting \`127.0.0.1' to \`localhost'..."
-      sed -i "$i" -e's/\<localhost\>/127.0.0.1/g'
-    done
-
-    # Make sure the tests don't rely on `/tmp', for the sake of chroot
-    # builds.
-    for i in $(find . \( -iname \*test\*.c -or -name \*.conf \) \
-                    -exec grep -l /tmp {} \;)
-    do
-      echo "$i: replacing references to \`/tmp' by \`$TMPDIR'..."
-      substituteInPlace "$i" --replace "/tmp" "$TMPDIR"
-    done
-
-    # Ensure NSS installation works fine
-    configureFlags="$configureFlags --with-nssdir=$out/lib"
-
-    sh contrib/pogen.sh
-    sh bootstrap
-  '';
-
-  doCheck = false;
-
-  /* FIXME: Tests must be run this way, but there are still a couple of
-     failures.
-
-  postInstall =
-    '' export GNUNET_PREFIX="$out"
-       export PATH="$out/bin:$PATH"
-       make -k check
-    '';
-  */
-
-  meta = with stdenv.lib; {
-    description = "GNUnet, GNU's decentralized anonymous and censorship-resistant P2P framework";
-
-    longDescription = ''
-      GNUnet is a framework for secure peer-to-peer networking that
-      does not use any centralized or otherwise trusted services.  A
-      first service implemented on top of the networking layer
-      allows anonymous censorship-resistant file-sharing.  Anonymity
-      is provided by making messages originating from a peer
-      indistinguishable from messages that the peer is routing.  All
-      peers act as routers and use link-encrypted connections with
-      stable bandwidth utilization to communicate with each other.
-      GNUnet uses a simple, excess-based economic model to allocate
-      resources.  Peers in GNUnet monitor each others behavior with
-      respect to resource usage; peers that contribute to the
-      network are rewarded with better service.
-    '';
-
-    homepage = "https://gnunet.org/";
-
-    license = licenses.agpl3Plus;
-
-    maintainers = with stdenv.lib.maintainers; [ ];
-    platforms = platforms.gnu ++ platforms.linux;
-  };
-}
diff --git a/pkgs/applications/networking/p2p/gnunet/gtk.nix b/pkgs/applications/networking/p2p/gnunet/gtk.nix
index 4090814b3da..3711d5a3c1e 100644
--- a/pkgs/applications/networking/p2p/gnunet/gtk.nix
+++ b/pkgs/applications/networking/p2p/gnunet/gtk.nix
@@ -1,10 +1,11 @@
 { stdenv, fetchurl
-, gnome3
+, glade
 , gnunet
 , gnutls
 , gtk3
 , libextractor
 , libgcrypt
+, libsodium
 , libxml2
 , pkg-config
 , wrapGAppsHook
@@ -12,11 +13,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnunet-gtk";
-  version = "0.13.1";
+  version = "0.14.0";
 
   src = fetchurl {
     url = "mirror://gnu/gnunet/${pname}-${version}.tar.gz";
-    sha256 = "1zdzgq16h77w6ybwg3lqjsjr965np6iqvncqvkbj07glqd4wss0j";
+    sha256 = "18rc7mb45y17d5nrlpf2p4ixp7ir67gcgjf4hlj4r95ic5zi54wa";
   };
 
   nativeBuildInputs= [
@@ -25,15 +26,18 @@ stdenv.mkDerivation rec {
   ];
 
   buildInputs = [
-    gnome3.glade
+    glade
     gnunet
     gnutls
     gtk3
     libextractor
     libgcrypt
+    libsodium
     libxml2
   ];
 
+  configureFlags = [ "--with-gnunet=${gnunet}" ];
+
   patchPhase = "patchShebangs pixmaps/icon-theme-installer";
 
   meta = gnunet.meta // {
diff --git a/pkgs/applications/networking/p2p/ktorrent/default.nix b/pkgs/applications/networking/p2p/ktorrent/default.nix
index 19be24bd1b1..94a4642b2de 100644
--- a/pkgs/applications/networking/p2p/ktorrent/default.nix
+++ b/pkgs/applications/networking/p2p/ktorrent/default.nix
@@ -22,8 +22,6 @@ mkDerivation rec {
     libktorrent taglib libgcrypt kplotting
   ];
 
-  enableParallelBuilding = true;
-
   meta = with lib; {
     description = "KDE integrated BtTorrent client";
     homepage    = "https://www.kde.org/applications/internet/ktorrent/";
diff --git a/pkgs/applications/networking/p2p/magnetico/default.nix b/pkgs/applications/networking/p2p/magnetico/default.nix
index b8c1991c88f..124e3492c8c 100644
--- a/pkgs/applications/networking/p2p/magnetico/default.nix
+++ b/pkgs/applications/networking/p2p/magnetico/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "magnetico";
-  version = "0.11.0";
+  version = "0.12.0";
 
   src = fetchFromGitHub {
     owner  = "boramalper";
     repo   = "magnetico";
     rev    = "v${version}";
-    sha256 = "1622xcl5v67lrnkjwbg7g5b5ikrawx7p91jxbj3ixc1za2f3a3fn";
+    sha256 = "1avqnfn4llmc9xmpsjfc9ivki0cfvd8sljfzd9yac94xcj581s83";
   };
 
-  vendorSha256 = "0g4m0jnpy0q64xnflphyc0lmhni0q9448h7grbbr7f1s9lpqsjml";
+  vendorSha256 = "087kikj6sjhjxqymnj7bpxawfmwckihi6mbmi39w0bn2040aflx5";
 
   nativeBuildInputs = [ go-bindata ];
   buildPhase = ''
@@ -23,7 +23,7 @@ buildGoModule rec {
   '';
 
   meta = with lib; {
-    description  = "Autonomous (self-hosted) BitTorrent DHT search engine suite.";
+    description  = "Autonomous (self-hosted) BitTorrent DHT search engine suite";
     homepage     = "https://github.com/boramalper/magnetico";
     license      = licenses.agpl3;
     badPlatforms = platforms.darwin;
diff --git a/pkgs/applications/networking/p2p/mldonkey/default.nix b/pkgs/applications/networking/p2p/mldonkey/default.nix
index 786ba434b92..41b8a7d0b6c 100644
--- a/pkgs/applications/networking/p2p/mldonkey/default.nix
+++ b/pkgs/applications/networking/p2p/mldonkey/default.nix
@@ -1,37 +1,31 @@
-{ stdenv, fetchurl, ocamlPackages, zlib, bzip2, ncurses, file, gd, libpng, libjpeg }:
+{ lib, stdenv, fetchurl, ocamlPackages, zlib }:
 
-stdenv.mkDerivation ({
-  name = "mldonkey-3.1.6";
+stdenv.mkDerivation rec {
+  pname = "mldonkey";
+  version = "3.1.7-2";
 
   src = fetchurl {
-    url = "https://github.com/ygrek/mldonkey/releases/download/release-3-1-6/mldonkey-3.1.6.tar.bz2";
-    sha256 = "0g84islkj72ymp0zzppcj9n4r21h0vlghnq87hv2wg580mybadhv";
+    url = "https://ygrek.org/p/release/mldonkey/mldonkey-${version}.tar.bz2";
+    sha256 = "b926e7aa3de4b4525af73c88f1724d576b4add56ef070f025941dd51cb24a794";
   };
 
-  preConfigure = stdenv.lib.optionalString (ocamlPackages.camlp4 != null) ''
+  preConfigure = ''
     substituteInPlace Makefile --replace '+camlp4' \
       '${ocamlPackages.camlp4}/lib/ocaml/${ocamlPackages.ocaml.version}/site-lib/camlp4'
   '';
 
-  buildInputs = [ zlib ncurses bzip2 file gd libpng libjpeg ] ++
-  (with ocamlPackages; [ ocaml camlp4 ]);
-  configureFlags = [ "--disable-gui" ];
+  buildInputs = (with ocamlPackages; [
+    ocaml
+    camlp4
+    num
+  ]) ++ [
+    zlib
+  ];
 
   meta = {
     description = "Client for many p2p networks, with multiple frontends";
     homepage = "http://mldonkey.sourceforge.net/";
-    license = stdenv.lib.licenses.gpl2;
-    platforms = stdenv.lib.platforms.unix;
+    license = lib.licenses.gpl2Only;
+    platforms = lib.platforms.unix;
   };
-} // (if !ocamlPackages.ocaml.nativeCompilers then
-{
-  # Byte code compilation (the ocaml opt compiler is not supported in some platforms)
-  buildPhase = "make mlnet.byte";
-  installPhase = ''
-    mkdir -p $out/bin
-    cp mlnet.byte $out/bin/mlnet
-  '';
-
-  # ocaml bytecode selfcontained binaries loose the bytecode if stripped
-  dontStrip = true;
-} else {}))
+}
diff --git a/pkgs/applications/networking/p2p/ncdc/default.nix b/pkgs/applications/networking/p2p/ncdc/default.nix
index c956f26b116..dd7f4a7bb60 100644
--- a/pkgs/applications/networking/p2p/ncdc/default.nix
+++ b/pkgs/applications/networking/p2p/ncdc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, ncurses, zlib, bzip2, sqlite, pkgconfig, glib, gnutls }:
+{ lib, stdenv, fetchurl, ncurses, zlib, bzip2, sqlite, pkg-config, glib, gnutls }:
 
 stdenv.mkDerivation rec {
   pname = "ncdc";
@@ -9,10 +9,10 @@ stdenv.mkDerivation rec {
     sha256 = "1bdgqd07f026qk6vpbxqsin536znd33931m3b4z44prlm9wd6pyi";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ ncurses zlib bzip2 sqlite glib gnutls ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Modern and lightweight direct connect client with a friendly ncurses interface";
     homepage = "https://dev.yorhel.nl/ncdc";
     license = licenses.mit;
diff --git a/pkgs/applications/networking/p2p/opentracker/default.nix b/pkgs/applications/networking/p2p/opentracker/default.nix
index ed44ff24fec..f08e5c42e1d 100644
--- a/pkgs/applications/networking/p2p/opentracker/default.nix
+++ b/pkgs/applications/networking/p2p/opentracker/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, libowfat, zlib }:
+{ lib, stdenv, fetchgit, libowfat, zlib, nixosTests }:
 
 stdenv.mkDerivation {
   name = "opentracker-2018-05-26";
@@ -11,6 +11,11 @@ stdenv.mkDerivation {
 
   buildInputs = [ libowfat zlib ];
 
+  makeFlags = [
+    "LIBOWFAT_HEADERS=${libowfat}/include/libowfat"
+    "LIBOWFAT_LIBRARY=${libowfat}/lib"
+  ];
+
   installPhase = ''
     runHook preInstall
     install -D opentracker $out/bin/opentracker
@@ -18,11 +23,15 @@ stdenv.mkDerivation {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  passthru.tests = {
+    bittorrent-integration = nixosTests.bittorrent;
+  };
+
+  meta = with lib; {
     homepage = "https://erdgeist.org/arts/software/opentracker/";
     license = licenses.beerware;
     platforms = platforms.linux;
-    description = "Bittorrent tracker project which aims for minimal resource usage and is intended to run at your wlan router.";
+    description = "Bittorrent tracker project which aims for minimal resource usage and is intended to run at your wlan router";
     maintainers = with maintainers; [ makefu ];
   };
 }
diff --git a/pkgs/applications/networking/p2p/qbittorrent/default.nix b/pkgs/applications/networking/p2p/qbittorrent/default.nix
index 964752f3b85..bd4fafed111 100644
--- a/pkgs/applications/networking/p2p/qbittorrent/default.nix
+++ b/pkgs/applications/networking/p2p/qbittorrent/default.nix
@@ -1,29 +1,34 @@
-{ mkDerivation, lib, fetchFromGitHub, pkgconfig
-, boost, libtorrentRasterbar, qtbase, qttools, qtsvg
-, debugSupport ? false # Debugging
+{ mkDerivation, lib, fetchFromGitHub, makeWrapper, pkg-config
+, boost, libtorrent-rasterbar, qtbase, qttools, qtsvg
+, debugSupport ? false
 , guiSupport ? true, dbus ? null # GUI (disable to run headless)
 , webuiSupport ? true # WebUI
+, trackerSearch ? true, python3 ? null
 }:
 
 assert guiSupport -> (dbus != null);
-with lib;
+assert trackerSearch -> (python3 != null);
 
+with lib;
 mkDerivation rec {
   pname = "qbittorrent";
-  version = "4.2.5";
+  version = "4.3.5";
 
   src = fetchFromGitHub {
     owner = "qbittorrent";
-    repo = "qbittorrent";
+    repo = "qBittorrent";
     rev = "release-${version}";
-    sha256 = "1n613ylg6i9gisgk0dbr2kpfasyizrkdjff1r8smd4vri2qrdksn";
+    sha256 = "1vdk42f8rxffyfydjk5cgzg5gl88ng2pynlyxw5ajh08wvkkjzgy";
   };
 
+  enableParallelBuilding = true;
+
   # NOTE: 2018-05-31: CMake is working but it is not officially supported
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ makeWrapper pkg-config ];
 
-  buildInputs = [ boost libtorrentRasterbar qtbase qttools qtsvg ]
-    ++ optional guiSupport dbus; # D(esktop)-Bus depends on GUI support
+  buildInputs = [ boost libtorrent-rasterbar qtbase qttools qtsvg ]
+    ++ optional guiSupport dbus # D(esktop)-Bus depends on GUI support
+    ++ optional trackerSearch python3;
 
   # Otherwise qm_gen.pri assumes lrelease-qt5, which does not exist.
   QMAKE_LRELEASE = "lrelease";
@@ -35,12 +40,17 @@ mkDerivation rec {
     ++ optional (!webuiSupport) "--disable-webui"
     ++ optional debugSupport "--enable-debug";
 
-  enableParallelBuilding = true;
+  postInstall = "wrapProgram $out/bin/${
+    if guiSupport
+    then "qbittorrent"
+    else "qbittorrent-nox"
+  } --prefix PATH : ${makeBinPath [ python3 ]}";
 
   meta = {
     description = "Featureful free software BitTorrent client";
     homepage    = "https://www.qbittorrent.org/";
-    license     = licenses.gpl2;
+    changelog   = "https://github.com/qbittorrent/qBittorrent/blob/release-${version}/Changelog";
+    license     = licenses.gpl2Plus;
     platforms   = platforms.linux;
     maintainers = with maintainers; [ Anton-Latukha ];
   };
diff --git a/pkgs/applications/networking/p2p/retroshare/default.nix b/pkgs/applications/networking/p2p/retroshare/default.nix
index a6a0ab27287..e69155d4c2f 100644
--- a/pkgs/applications/networking/p2p/retroshare/default.nix
+++ b/pkgs/applications/networking/p2p/retroshare/default.nix
@@ -1,59 +1,53 @@
-{ stdenv, fetchFromGitHub, libupnp, gpgme, gnome3, glib, libssh, pkgconfig, protobuf, bzip2
-, libXScrnSaver, speex, curl, libxml2, libxslt, sqlcipher, libmicrohttpd, opencv, qmake, ffmpeg_3
-, qtmultimedia, qtx11extras, qttools }:
+{ lib, mkDerivation, fetchFromGitHub, qmake, cmake, pkg-config, miniupnpc, bzip2
+, speex, libmicrohttpd, libxml2, libxslt, sqlcipher, rapidjson, libXScrnSaver
+, qtbase, qtx11extras, qtmultimedia, libgnome-keyring3
+}:
 
-stdenv.mkDerivation rec {
+mkDerivation rec {
   pname = "retroshare";
-  version = "0.6.2";
+  version = "0.6.6";
 
   src = fetchFromGitHub {
     owner = "RetroShare";
     repo = "RetroShare";
     rev = "v${version}";
-    sha256 = "0hly2x87wdvqzzwf3wjzi7092bj8fk4xs6302rkm8gp9bkkmiiw8";
+    sha256 = "1hsymbhsfgycj39mdkrdp2hgq8irmvxa4a6jx2gg339m1fgf2xmh";
+    fetchSubmodules = true;
   };
 
-  # NIX_CFLAGS_COMPILE = [ "-I${glib.dev}/include/glib-2.0" "-I${glib.dev}/lib/glib-2.0/include" "-I${libxml2.dev}/include/libxml2" "-I${sqlcipher}/include/sqlcipher" ];
-
-  patchPhase = ''
-    # Fix build error
-    sed -i 's/UpnpString_get_String(es_event->PublisherUrl)/es_event->PublisherUrl/' \
-      libretroshare/src/upnp/UPnPBase.cpp
-  '';
+  patches = [
+    # The build normally tries to get git sub-modules during build
+    # but we already have them checked out
+    ./no-submodules.patch
+  ];
 
-  nativeBuildInputs = [ pkgconfig qmake ];
+  nativeBuildInputs = [ pkg-config qmake cmake ];
   buildInputs = [
-    speex libupnp gpgme gnome3.libgnome-keyring glib libssh qtmultimedia qtx11extras qttools
-    protobuf bzip2 libXScrnSaver curl libxml2 libxslt sqlcipher libmicrohttpd opencv ffmpeg_3
+    speex miniupnpc qtmultimedia qtx11extras qtbase libgnome-keyring3
+    bzip2 libXScrnSaver libxml2 libxslt sqlcipher libmicrohttpd rapidjson
   ];
 
-  preConfigure = ''
-    qmakeFlags="$qmakeFlags DESTDIR=$out"
-  '';
+  qmakeFlags = [
+    # Upnp library autodetection doesn't work
+    "RS_UPNP_LIB=miniupnpc"
 
-  # gui/settings/PluginsPage.h:25:28: fatal error: ui_PluginsPage.h: No such file or directory
-  enableParallelBuilding = false;
+    # These values are normally found from the .git folder
+    "RS_MAJOR_VERSION=${lib.versions.major version}"
+    "RS_MINOR_VERSION=${lib.versions.minor version}"
+    "RS_MINI_VERSION=${lib.versions.patch version}"
+    "RS_EXTRA_VERSION="
+  ];
 
   postInstall = ''
-    mkdir -p $out/bin
-    mv $out/RetroShare06-nogui $out/bin/RetroShare-nogui
-    mv $out/RetroShare06 $out/bin/Retroshare
-    ln -s $out/bin/RetroShare-nogui $out/bin/retroshare-nogui
-
-    # plugins
-    mkdir -p $out/share/retroshare
-    mv $out/lib* $out/share/retroshare
-
     # BT DHT bootstrap
     cp libbitdht/src/bitdht/bdboot.txt $out/share/retroshare
   '';
 
-  meta = with stdenv.lib; {
-    description = "";
+  meta = with lib; {
+    description = "Decentralized peer to peer chat application.";
     homepage = "http://retroshare.sourceforge.net/";
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
-    maintainers = [ maintainers.domenkozar ];
-    broken = true; # broken by libupnp: 1.6.21 -> 1.8.3 (#41684)
+    maintainers = with maintainers; [ StijnDW ];
   };
 }
diff --git a/pkgs/applications/networking/p2p/retroshare/no-submodules.patch b/pkgs/applications/networking/p2p/retroshare/no-submodules.patch
new file mode 100644
index 00000000000..d4726800309
--- /dev/null
+++ b/pkgs/applications/networking/p2p/retroshare/no-submodules.patch
@@ -0,0 +1,62 @@
+diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro
+index 84d18944e..71aeb67d2 100644
+--- a/libretroshare/src/libretroshare.pro
++++ b/libretroshare/src/libretroshare.pro
+@@ -870,20 +870,14 @@ rs_jsonapi {
+         genrestbedlib.variable_out = PRE_TARGETDEPS
+         win32-g++:isEmpty(QMAKE_SH) {
+             genrestbedlib.commands = \
+-                cd /D $$shell_path($${RS_SRC_PATH}) && git submodule update --init supportlibs/restbed || cd . $$escape_expand(\\n\\t) \
+-                cd /D $$shell_path($${RESTBED_SRC_PATH}) && git submodule update --init dependency/asio || cd . $$escape_expand(\\n\\t) \
+-                cd /D $$shell_path($${RESTBED_SRC_PATH}) && git submodule update --init dependency/catch || cd . $$escape_expand(\\n\\t )\
+-                cd /D $$shell_path($${RESTBED_SRC_PATH}) && git submodule update --init dependency/kashmir || cd . $$escape_expand(\\n\\t) \
++                cd /D $$shell_path($${RS_SRC_PATH}) && cd . $$escape_expand(\\n\\t) \
++                cd /D $$shell_path($${RESTBED_SRC_PATH}) && cd . $$escape_expand(\\n\\t) \
++                cd /D $$shell_path($${RESTBED_SRC_PATH}) && cd . $$escape_expand(\\n\\t )\
++                cd /D $$shell_path($${RESTBED_SRC_PATH}) && cd . $$escape_expand(\\n\\t) \
+                 $(CHK_DIR_EXISTS) $$shell_path($$UDP_DISCOVERY_BUILD_PATH) $(MKDIR) $$shell_path($${UDP_DISCOVERY_BUILD_PATH}) $$escape_expand(\\n\\t)
+         } else {
+             genrestbedlib.commands = \
+-                cd $${RS_SRC_PATH} && ( \
+-                git submodule update --init supportlibs/restbed ; \
+-                cd $${RESTBED_SRC_PATH} ; \
+-                git submodule update --init dependency/asio ; \
+-                git submodule update --init dependency/catch ; \
+-                git submodule update --init dependency/kashmir ; \
+-                true ) && \
++                cd $${RS_SRC_PATH} && \
+                 mkdir -p $${RESTBED_BUILD_PATH} &&
+         }
+         genrestbedlib.commands += \
+@@ -991,14 +985,9 @@ rs_broadcast_discovery {
+         udpdiscoverycpplib.variable_out = PRE_TARGETDEPS
+         win32-g++:isEmpty(QMAKE_SH) {
+             udpdiscoverycpplib.commands = \
+-                cd /D $$shell_path($${RS_SRC_PATH}) && git submodule update --init supportlibs/udp-discovery-cpp || cd . $$escape_expand(\\n\\t) \
+                 $(CHK_DIR_EXISTS) $$shell_path($$UDP_DISCOVERY_BUILD_PATH) $(MKDIR) $$shell_path($${UDP_DISCOVERY_BUILD_PATH}) $$escape_expand(\\n\\t)
+         } else {
+-            udpdiscoverycpplib.commands = \
+-                cd $${RS_SRC_PATH} && ( \
+-                git submodule update --init supportlibs/udp-discovery-cpp || \
+-                true ) && \
+-                mkdir -p $${UDP_DISCOVERY_BUILD_PATH} &&
++            udpdiscoverycpplib.commands = mkdir -p $${UDP_DISCOVERY_BUILD_PATH} &&
+         }
+         udpdiscoverycpplib.commands += \
+             cd $$shell_path($${UDP_DISCOVERY_BUILD_PATH}) && \
+diff --git a/retroshare-gui/src/retroshare-gui.pro b/retroshare-gui/src/retroshare-gui.pro
+index 654efd170..06cba9ba3 100644
+--- a/retroshare-gui/src/retroshare-gui.pro
++++ b/retroshare-gui/src/retroshare-gui.pro
+@@ -66,10 +66,7 @@ rs_gui_cmark {
+ 		gencmarklib.CONFIG += target_predeps combine
+ 		gencmarklib.variable_out = PRE_TARGETDEPS
+ 		gencmarklib.commands = \
+-		    cd $${RS_SRC_PATH} && ( \
+-		    git submodule update --init supportlibs/cmark ; \
+-		    cd $${CMARK_SRC_PATH} ; \
+-		    true ) && \
++		    cd $${RS_SRC_PATH} && \
+ 		    mkdir -p $${CMARK_BUILD_PATH} && cd $${CMARK_BUILD_PATH} && \
+ 		    cmake \
+ 		        -DCMAKE_CXX_COMPILER=$$QMAKE_CXX \
diff --git a/pkgs/applications/networking/p2p/soulseekqt/default.nix b/pkgs/applications/networking/p2p/soulseekqt/default.nix
index 2a8a0622713..0d2fc0fd833 100644
--- a/pkgs/applications/networking/p2p/soulseekqt/default.nix
+++ b/pkgs/applications/networking/p2p/soulseekqt/default.nix
@@ -23,7 +23,7 @@ mkDerivation rec {
 
   dontBuild = true;
   dontConfigure = true;
-  
+
   nativeBuildInputs = [ imagemagick autoPatchelfHook desktop-file-utils ];
   buildInputs = [ qtmultimedia stdenv.cc.cc ];
 
@@ -53,7 +53,7 @@ mkDerivation rec {
     description = "Official Qt SoulSeek client";
     homepage = "https://www.slsknet.org";
     license = licenses.unfree;
-    maintainers = [ maintainers.genesis ];
+    maintainers = [ ];
     platforms = [ "x86_64-linux" ];
   };
 }
diff --git a/pkgs/applications/networking/p2p/stig/default.nix b/pkgs/applications/networking/p2p/stig/default.nix
index 276cabfa2aa..6c09043a65b 100644
--- a/pkgs/applications/networking/p2p/stig/default.nix
+++ b/pkgs/applications/networking/p2p/stig/default.nix
@@ -1,4 +1,4 @@
-{ lib
+{ lib, stdenv
 , fetchFromGitHub
 , python3Packages
 }:
@@ -54,6 +54,9 @@ python3Packages.buildPythonApplication rec {
     "--deselect=tests/client_test/ttypes_test.py::TestTimestamp::test_string__month_day_hour_minute_second"
     # TestScrollBarWithScrollable.test_wrapping_bug fails
     "--deselect=tests/tui_test/scroll_test.py::TestScrollBarWithScrollable::test_wrapping_bug"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "--deselect=tests/client_test/aiotransmission_test/api_torrent_test.py"
+    "--deselect=tests/client_test/aiotransmission_test/rpc_test.py"
   ];
 
   meta = with lib; {
diff --git a/pkgs/applications/networking/p2p/synapse-bt/default.nix b/pkgs/applications/networking/p2p/synapse-bt/default.nix
index e2847d88f8a..c7104d9011d 100644
--- a/pkgs/applications/networking/p2p/synapse-bt/default.nix
+++ b/pkgs/applications/networking/p2p/synapse-bt/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform, pkgconfig, openssl, CoreServices, Security }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, pkg-config, openssl, CoreServices, Security }:
 
 rustPlatform.buildRustPackage rec {
   pname = "synapse-bt";
@@ -11,15 +11,15 @@ rustPlatform.buildRustPackage rec {
     sha256 = "01npv3zwia5d534zdwisd9xfng507adv4qkljf8z0zm0khqqn71a";
   };
 
-  cargoSha256 = "0lhhdzq4sadnp2pnbq309d1mb7ggbf24k5ivlchrjhllbim1wmdz";
+  cargoSha256 = "0sy0vlpkj967g9lyyh7ska8cpw5xh0g04kj071a32idrqc3dcjb1";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ openssl ]
-    ++ stdenv.lib.optionals stdenv.isDarwin [ CoreServices Security ];
+    ++ lib.optionals stdenv.isDarwin [ CoreServices Security ];
 
   cargoBuildFlags = [ "--all" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Flexible and fast BitTorrent daemon";
     homepage = "https://synapse-bt.org/";
     license = licenses.isc;
diff --git a/pkgs/applications/networking/p2p/tixati/default.nix b/pkgs/applications/networking/p2p/tixati/default.nix
index 2e14bd0eb0f..d80165c4405 100644
--- a/pkgs/applications/networking/p2p/tixati/default.nix
+++ b/pkgs/applications/networking/p2p/tixati/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, fetchurl, glib, zlib, dbus, dbus-glib, gtk2, gdk-pixbuf, cairo, pango }:
+{ lib, stdenv, fetchurl, glib, zlib, dbus, dbus-glib, gtk2, gdk-pixbuf, cairo, pango }:
 
 stdenv.mkDerivation rec {
   pname = "tixati";
-  version = "2.73";
+  version = "2.81";
 
   src = fetchurl {
     url = "https://download2.tixati.com/download/tixati-${version}-1.x86_64.manualinstall.tar.gz";
-    sha256 = "1ncrfc4wgf02la2h3zpdcz07b980n9232lg5f62q7ab79fjrcrfr";
+    sha256 = "sha256-qwKxlmE59V+rXtuYWBMwD1O7OO4gb36lN8syFyQ6uLc=";
   };
 
   installPhase = ''
     patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
-             --set-rpath ${stdenv.lib.makeLibraryPath [ glib zlib dbus dbus-glib gtk2 gdk-pixbuf cairo pango ]} \
+             --set-rpath ${lib.makeLibraryPath [ glib zlib dbus dbus-glib gtk2 gdk-pixbuf cairo pango ]} \
              tixati
     install -D tixati         $out/bin/tixati
     install -D tixati.desktop $out/share/applications/tixati.desktop
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
 
   dontStrip = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Torrent client";
     homepage = "http://www.tixati.com";
     license = licenses.unfree;
diff --git a/pkgs/applications/networking/p2p/torrential/default.nix b/pkgs/applications/networking/p2p/torrential/default.nix
index d62e3b3b5a3..cbeb6afa408 100644
--- a/pkgs/applications/networking/p2p/torrential/default.nix
+++ b/pkgs/applications/networking/p2p/torrential/default.nix
@@ -1,8 +1,8 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , nix-update-script
 , cmake
-, pkgconfig
+, pkg-config
 , vala_0_40
 , pantheon
 , curl
@@ -33,7 +33,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [
     cmake
     vala_0_40 # https://github.com/davidmhewitt/torrential/issues/135
-    pkgconfig
+    pkg-config
     wrapGAppsHook
   ];
 
@@ -57,7 +57,7 @@ stdenv.mkDerivation rec {
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Download torrents in style with this speedy, minimalist torrent client for elementary OS";
     homepage = "https://github.com/davidmhewitt/torrential";
     maintainers = with maintainers; [ xiorcale ] ++ pantheon.maintainers;
diff --git a/pkgs/applications/networking/p2p/transgui/default.nix b/pkgs/applications/networking/p2p/transgui/default.nix
index dbe3bb50e6d..0a2f90ecb71 100644
--- a/pkgs/applications/networking/p2p/transgui/default.nix
+++ b/pkgs/applications/networking/p2p/transgui/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, makeDesktopItem, unzip, fpc, lazarus,
+{ lib, stdenv, fetchFromGitHub, pkg-config, makeDesktopItem, unzip, fpc, lazarus,
 libX11, glib, gtk2, gdk-pixbuf, pango, atk, cairo, openssl }:
 
 stdenv.mkDerivation rec {
@@ -12,9 +12,9 @@ stdenv.mkDerivation rec {
     sha256 = "1dyx778756zhvz5sxgdvy49p2c0x44w4nmcfd90wqrmgfknncnf5";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config unzip ];
   buildInputs = [
-    unzip fpc lazarus stdenv.cc
+    fpc lazarus stdenv.cc
     libX11 glib gtk2 gdk-pixbuf pango atk cairo openssl
   ];
 
@@ -29,6 +29,7 @@ stdenv.mkDerivation rec {
   '';
 
   preBuild = ''
+    FPCDIR=${fpc}/lib/fpc/${fpc.version} fpcmake -w
     lazbuild -B transgui.lpr --lazarusdir=${lazarus}/share/lazarus
   '';
 
@@ -48,11 +49,11 @@ stdenv.mkDerivation rec {
     comment = meta.description;
     desktopName = "Transmission Remote GUI";
     genericName = "BitTorrent Client";
-    categories = stdenv.lib.concatStringsSep ";" [
+    categories = lib.concatStringsSep ";" [
       "Application" "Network" "FileTransfer" "P2P" "GTK"
     ];
     startupNotify = "true";
-    mimeType = stdenv.lib.concatStringsSep ";" [
+    mimeType = lib.concatStringsSep ";" [
       "application/x-bittorrent" "x-scheme-handler/magnet"
     ];
   };
@@ -69,8 +70,8 @@ stdenv.mkDerivation rec {
   meta = {
     description = "A cross platform front-end for the Transmission Bit-Torrent client";
     homepage = "https://sourceforge.net/p/transgui";
-    license = stdenv.lib.licenses.gpl2Plus;
-    maintainers = with stdenv.lib.maintainers; [ ramkromberg ];
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ ramkromberg ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/applications/networking/p2p/transmission-remote-cli/default.nix b/pkgs/applications/networking/p2p/transmission-remote-cli/default.nix
deleted file mode 100644
index 7c6e35752a0..00000000000
--- a/pkgs/applications/networking/p2p/transmission-remote-cli/default.nix
+++ /dev/null
@@ -1,26 +0,0 @@
-{ stdenv, fetchurl, pythonPackages }:
-
-stdenv.mkDerivation rec {
-  pname = "transmission-remote-cli";
-  version = "1.7.1";
-
-  src = fetchurl {
-    url = "https://github.com/fagga/transmission-remote-cli/archive/v${version}.tar.gz";
-    sha256 = "1y0hkpcjf6jw9xig8yf484hbhy63nip0pkchx401yxj81m25l4z9";
-  };
-
-  buildInputs = with pythonPackages; [ python wrapPython ];
-
-  installPhase = ''
-    install -D transmission-remote-cli $out/bin/transmission-remote-cli
-    install -D transmission-remote-cli.1 $out/share/man/man1/transmission-remote-cli.1
-    wrapPythonPrograms
-  '';
-
-  meta = {
-    description = "Curses interface for the Transmission BitTorrent daemon";
-    homepage = "https://github.com/fagga/transmission-remote-cli";
-    license = stdenv.lib.licenses.gpl3Plus;
-    platforms = stdenv.lib.platforms.unix;
-  };
-}
diff --git a/pkgs/applications/networking/p2p/transmission-remote-gtk/default.nix b/pkgs/applications/networking/p2p/transmission-remote-gtk/default.nix
index 8e74b82b69d..c89e5397706 100644
--- a/pkgs/applications/networking/p2p/transmission-remote-gtk/default.nix
+++ b/pkgs/applications/networking/p2p/transmission-remote-gtk/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, autoconf, automake, libtool, wrapGAppsHook, fetchFromGitHub, pkgconfig
+{ lib, stdenv, autoconf, automake, libtool, wrapGAppsHook, fetchFromGitHub, pkg-config
 , intltool, gtk3, json-glib, curl, glib, autoconf-archive, appstream-glib, fetchpatch }:
 
 
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs= [
     autoconf automake libtool wrapGAppsHook
-    pkgconfig intltool autoconf-archive
+    pkg-config intltool autoconf-archive
     appstream-glib
   ];
 
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
 
   doCheck = false; # fails with style validation error
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "GTK remote control for the Transmission BitTorrent client";
     homepage = "https://github.com/ajf8/transmission-remote-gtk";
     license = licenses.gpl2;
diff --git a/pkgs/applications/networking/p2p/transmission/default.nix b/pkgs/applications/networking/p2p/transmission/default.nix
index ab4fc0908ba..1efa9ec76da 100644
--- a/pkgs/applications/networking/p2p/transmission/default.nix
+++ b/pkgs/applications/networking/p2p/transmission/default.nix
@@ -2,7 +2,7 @@
 , lib
 , fetchFromGitHub
 , cmake
-, pkgconfig
+, pkg-config
 , openssl
 , curl
 , libevent
@@ -12,14 +12,17 @@
 , pcre
   # Build options
 , enableGTK3 ? false
-, gnome3
+, gtk3
 , xorg
 , wrapGAppsHook
 , enableQt ? false
 , qt5
+, nixosTests
 , enableSystemd ? stdenv.isLinux
 , enableDaemon ? true
 , enableCli ? true
+, installLib ? false
+, apparmorRulesFromClosure
 }:
 
 let
@@ -37,6 +40,8 @@ in stdenv.mkDerivation {
     fetchSubmodules = true;
   };
 
+  outputs = [ "out" "apparmor" ];
+
   cmakeFlags =
     let
       mkFlag = opt: if opt then "ON" else "OFF";
@@ -47,10 +52,11 @@ in stdenv.mkDerivation {
       "-DENABLE_QT=${mkFlag enableQt}"
       "-DENABLE_DAEMON=${mkFlag enableDaemon}"
       "-DENABLE_CLI=${mkFlag enableCli}"
+      "-DINSTALL_LIB=${mkFlag installLib}"
     ];
 
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     cmake
   ]
   ++ lib.optionals enableGTK3 [ wrapGAppsHook ]
@@ -65,13 +71,44 @@ in stdenv.mkDerivation {
     pcre
   ]
   ++ lib.optionals enableQt [ qt5.qttools qt5.qtbase ]
-  ++ lib.optionals enableGTK3 [ gnome3.gtk xorg.libpthreadstubs ]
+  ++ lib.optionals enableGTK3 [ gtk3 xorg.libpthreadstubs ]
   ++ lib.optionals enableSystemd [ systemd ]
   ++ lib.optionals stdenv.isLinux [ inotify-tools ]
   ;
 
   NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-framework CoreFoundation";
 
+  postInstall = ''
+    mkdir $apparmor
+    cat >$apparmor/bin.transmission-daemon <<EOF
+    include <tunables/global>
+    $out/bin/transmission-daemon {
+      include <abstractions/base>
+      include <abstractions/nameservice>
+      include <abstractions/ssl_certs>
+      include "${apparmorRulesFromClosure { name = "transmission-daemon"; } ([
+        curl libevent openssl pcre zlib
+      ] ++ lib.optionals enableSystemd [ systemd ]
+        ++ lib.optionals stdenv.isLinux [ inotify-tools ]
+      )}"
+      r @{PROC}/sys/kernel/random/uuid,
+      r @{PROC}/sys/vm/overcommit_memory,
+      r @{PROC}/@{pid}/environ,
+      r @{PROC}/@{pid}/mounts,
+      rwk /tmp/tr_session_id_*,
+      r /run/systemd/resolve/stub-resolv.conf,
+
+      r $out/share/transmission/web/**,
+
+      include <local/bin.transmission-daemon>
+    }
+    EOF
+  '';
+
+  passthru.tests = {
+    smoke-test = nixosTests.bittorrent;
+  };
+
   meta = {
     description = "A fast, easy and free BitTorrent client";
     longDescription = ''
diff --git a/pkgs/applications/networking/p2p/tremc/default.nix b/pkgs/applications/networking/p2p/tremc/default.nix
new file mode 100644
index 00000000000..dfbe66ac856
--- /dev/null
+++ b/pkgs/applications/networking/p2p/tremc/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchFromGitHub, python3Packages
+, x11Support ? !stdenv.isDarwin
+, xclip ? null
+, pbcopy ? null
+, useGeoIP ? false # Require /var/lib/geoip-databases/GeoIP.dat
+}:
+let
+  wrapperPath = with lib; makeBinPath (
+    optional x11Support xclip ++
+    optional stdenv.isDarwin pbcopy
+  );
+in
+python3Packages.buildPythonApplication rec {
+  pname = "tremc";
+  version = "0.9.2";
+
+  src = fetchFromGitHub {
+    owner = "tremc";
+    repo = pname;
+    rev = version;
+    sha256 = "1fqspp2ckafplahgba54xmx0sjidx1pdzyjaqjhz0ivh98dkx2n5";
+  };
+
+  buildInputs = with python3Packages; [
+    python
+    wrapPython
+  ];
+
+  pythonPath = with python3Packages; [
+    ipy
+    pyperclip
+  ] ++
+  lib.optional useGeoIP GeoIP;
+
+  phases = [ "unpackPhase" "installPhase" ];
+
+  makeWrapperArgs = ["--prefix PATH : ${wrapperPath}"];
+
+  installPhase = ''
+    make DESTDIR=$out install
+    wrapPythonPrograms
+  '';
+
+  meta = with lib; {
+    description = "Curses interface for transmission";
+    homepage = "https://github.com/tremc/tremc";
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/pkgs/applications/networking/p2p/tribler/default.nix b/pkgs/applications/networking/p2p/tribler/default.nix
index ed1129b238a..3aa5b4a8da8 100644
--- a/pkgs/applications/networking/p2p/tribler/default.nix
+++ b/pkgs/applications/networking/p2p/tribler/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, pkgs, python3Packages, makeWrapper
-, enablePlayer ? true, vlc ? null, qt5, lib }:
+{ stdenv, fetchurl, python3Packages, makeWrapper
+, enablePlayer ? true, libvlc, qt5, lib }:
 
 stdenv.mkDerivation rec {
   pname = "tribler";
@@ -19,40 +19,41 @@ stdenv.mkDerivation rec {
     python3Packages.python
   ];
 
-  pythonPath = [
-    python3Packages.libtorrentRasterbar
-    python3Packages.twisted
-    python3Packages.netifaces
-    python3Packages.pycrypto
-    python3Packages.pyasn1
-    python3Packages.requests
-    python3Packages.m2crypto
-    python3Packages.pyqt5
-    python3Packages.chardet
-    python3Packages.cherrypy
-    python3Packages.cryptography
-    python3Packages.libnacl
-    python3Packages.configobj
-    python3Packages.decorator
-    python3Packages.feedparser
-    python3Packages.service-identity
-    python3Packages.psutil
-    python3Packages.pillow
-    python3Packages.networkx
-    python3Packages.pony
-    python3Packages.lz4
-    python3Packages.pyqtgraph
+  pythonPath = with python3Packages; [
+    libtorrent-rasterbar
+    twisted
+    netifaces
+    pycrypto
+    pyasn1
+    requests
+    m2crypto
+    pyqt5
+    chardet
+    cherrypy
+    cryptography
+    libnacl
+    configobj
+    decorator
+    feedparser
+    service-identity
+    psutil
+    pillow
+    networkx
+    pony
+    lz4
+    pyqtgraph
 
     # there is a BTC feature, but it requires some unclear version of
     # bitcoinlib, so this doesn't work right now.
-    # python3Packages.bitcoinlib
+    # bitcoinlib
   ];
 
   postPatch = ''
-    ${stdenv.lib.optionalString enablePlayer ''
-      substituteInPlace "./TriblerGUI/vlc.py" --replace "ctypes.CDLL(p)" "ctypes.CDLL('${vlc}/lib/libvlc.so')"
-      substituteInPlace "./TriblerGUI/widgets/videoplayerpage.py" --replace "if vlc and vlc.plugin_path" "if vlc"
-      substituteInPlace "./TriblerGUI/widgets/videoplayerpage.py" --replace "os.environ['VLC_PLUGIN_PATH'] = vlc.plugin_path" "os.environ['VLC_PLUGIN_PATH'] = '${vlc}/lib/vlc/plugins'"
+    ${lib.optionalString enablePlayer ''
+      substituteInPlace "./TriblerGUI/vlc.py" --replace "ctypes.CDLL(p)" "ctypes.CDLL('${libvlc}/lib/libvlc.so')"
+      substituteInPlace "./TriblerGUI/widgets/videoplayerpage.py" \
+        --replace "if vlc and vlc.plugin_path" "if vlc" \
+        --replace "os.environ['VLC_PLUGIN_PATH'] = vlc.plugin_path" "os.environ['VLC_PLUGIN_PATH'] = '${libvlc}/lib/vlc/plugins'"
     ''}
   '';
 
@@ -68,8 +69,8 @@ stdenv.mkDerivation rec {
         --set NO_AT_BRIDGE 1 \
         --run 'cd $_TRIBLERPATH' \
         --add-flags "-O $out/run_tribler.py" \
-        ${stdenv.lib.optionalString enablePlayer ''
-          --prefix LD_LIBRARY_PATH : ${vlc}/lib
+        ${lib.optionalString enablePlayer ''
+          --prefix LD_LIBRARY_PATH : ${libvlc}/lib
         ''}
 
     mkdir -p $out/share/applications $out/share/icons $out/share/man/man1
@@ -78,11 +79,12 @@ stdenv.mkDerivation rec {
     cp $out/Tribler/Main/Build/Ubuntu/tribler.1 $out/share/man/man1/tribler.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     maintainers = with maintainers; [ xvapx ];
     homepage = "https://www.tribler.org/";
     description = "A completely decentralised P2P filesharing client based on the Bittorrent protocol";
     license = licenses.lgpl21;
     platforms = platforms.linux;
+    broken = true; # 2021-03-17 see https://github.com/NixOS/nixpkgs/issues/93053
   };
 }
diff --git a/pkgs/applications/networking/p2p/twister/default.nix b/pkgs/applications/networking/p2p/twister/default.nix
index 03cb381f5eb..1d05cafef83 100644
--- a/pkgs/applications/networking/p2p/twister/default.nix
+++ b/pkgs/applications/networking/p2p/twister/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fetchpatch, autoconf, automake, libtool, pkgconfig, python2
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoconf, automake, libtool, pkg-config, python2
 , boost, db, openssl, geoip, libiconv, miniupnpc
 , srcOnly, fetchgit
 }:
@@ -35,7 +35,7 @@ in stdenv.mkDerivation rec {
     "--with-boost-libdir=${boostPython.out}/lib"
   ];
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [
     autoconf automake libtool python2
     boostPython db openssl geoip miniupnpc libiconv
@@ -61,7 +61,7 @@ in stdenv.mkDerivation rec {
   meta = {
     homepage = "http://www.twister.net.co/";
     description = "Peer-to-peer microblogging";
-    license = stdenv.lib.licenses.mit;
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.mit;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/applications/networking/p2p/vuze/default.nix b/pkgs/applications/networking/p2p/vuze/default.nix
index be2421ef4d2..fe8743ee1cd 100644
--- a/pkgs/applications/networking/p2p/vuze/default.nix
+++ b/pkgs/applications/networking/p2p/vuze/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchsvn, jdk, jre, ant, swt, makeWrapper }:
+{ lib, stdenv, fetchsvn, jdk, jre, ant, swt, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "vuze";
@@ -9,7 +9,8 @@ stdenv.mkDerivation rec {
     sha256 = "07w6ipyiy8hi88d6yxbbf3vkv26mj7dcz9yr8141hb2ig03v0h0p";
   };
 
-  buildInputs = [ makeWrapper jdk ant ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jdk ant ];
 
   buildPhase = "ant";
 
@@ -19,7 +20,7 @@ stdenv.mkDerivation rec {
       --add-flags "-Xmx256m -Djava.library.path=${swt}/lib -cp $out/share/java/Vuze_${version}-00.jar:${swt}/jars/swt.jar org.gudy.azureus2.ui.swt.Main"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Torrent client";
     homepage = "http://www.vuze.com";
     license = licenses.unfree;
diff --git a/pkgs/applications/networking/p2p/xd/default.nix b/pkgs/applications/networking/p2p/xd/default.nix
new file mode 100644
index 00000000000..54581a6070b
--- /dev/null
+++ b/pkgs/applications/networking/p2p/xd/default.nix
@@ -0,0 +1,29 @@
+{ pkgs, buildGoModule, fetchFromGitHub, lib, perl }:
+
+buildGoModule rec {
+  pname = "XD";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "majestrate";
+    repo = "XD";
+    rev = "v${version}";
+    sha256 = "sha256-fXENoqhR04TYS/kAJUqsqa0+j+KyzdsMlXIZ2GMPMhc=";
+  };
+
+  vendorSha256 = "1wg3cym2rwrhjsqlgd38l8mdq5alccz808465117n3vyga9m35lq";
+
+  checkInputs = [ perl ];
+
+  postInstall = ''
+    ln -s $out/bin/XD $out/bin/XD-CLI
+  '';
+
+  meta = with lib; {
+    description = "i2p bittorrent client";
+    homepage = "https://xd-torrent.github.io";
+    maintainers = with maintainers; [ nixbitcoin ];
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/networking/p2p/zeronet/default.nix b/pkgs/applications/networking/p2p/zeronet/default.nix
index ce5a99b1e5f..19da740938c 100644
--- a/pkgs/applications/networking/p2p/zeronet/default.nix
+++ b/pkgs/applications/networking/p2p/zeronet/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python3Packages }:
+{ lib, fetchFromGitHub, python3Packages }:
 
 python3Packages.buildPythonApplication rec {
   pname = "zeronet";
@@ -13,7 +13,7 @@ python3Packages.buildPythonApplication rec {
   };
 
   propagatedBuildInputs = with python3Packages; [
-    gevent msgpack base58 merkletools rsa pysocks pyasn1 websocket_client
+    gevent msgpack base58 merkletools rsa pysocks pyasn1 websocket-client
     gevent-websocket rencode bitcoinlib maxminddb pyopenssl
   ];
 
@@ -32,7 +32,7 @@ python3Packages.buildPythonApplication rec {
       --set PATH ${python3Packages.python}/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Decentralized websites using Bitcoin crypto and BitTorrent network";
     homepage = "https://zeronet.io/";
     license = licenses.gpl2;