summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--lib/maintainers.nix1
-rw-r--r--nixos/modules/services/networking/openvpn.nix28
-rw-r--r--pkgs/applications/editors/neovim/wrapper.nix4
-rw-r--r--pkgs/applications/window-managers/i3/status-rust.nix6
-rw-r--r--pkgs/development/libraries/kde-frameworks/kimageformats.nix2
-rw-r--r--pkgs/development/ocaml-modules/uri/default.nix54
-rw-r--r--pkgs/development/ocaml-modules/uri/legacy.nix51
-rw-r--r--pkgs/development/python-modules/aenum/default.nix19
-rw-r--r--pkgs/development/python-modules/nose-parameterized/default.nix27
-rw-r--r--pkgs/development/tools/go-protobuf/default.nix24
-rw-r--r--pkgs/os-specific/linux/evdi/default.nix10
-rw-r--r--pkgs/servers/freeradius/default.nix4
-rw-r--r--pkgs/tools/misc/parallel-rust/default.nix25
-rw-r--r--pkgs/tools/misc/parallel-rust/fix_cargo_lock_version.patch12
-rw-r--r--pkgs/tools/networking/miniupnpc/default.nix4
-rw-r--r--pkgs/tools/networking/miniupnpd/default.nix4
-rw-r--r--pkgs/tools/networking/netsniff-ng/default.nix16
-rw-r--r--pkgs/tools/security/bettercap/Gemfile2
-rw-r--r--pkgs/tools/security/bettercap/Gemfile.lock42
-rw-r--r--pkgs/tools/security/bettercap/default.nix23
-rw-r--r--pkgs/tools/security/bettercap/gemset.nix121
-rw-r--r--pkgs/top-level/aliases.nix8
-rw-r--r--pkgs/top-level/all-packages.nix18
-rw-r--r--pkgs/top-level/ocaml-packages.nix8
-rw-r--r--pkgs/top-level/python-packages.nix30
25 files changed, 442 insertions, 101 deletions
diff --git a/lib/maintainers.nix b/lib/maintainers.nix
index e45ccbe8f5d..8404886533d 100644
--- a/lib/maintainers.nix
+++ b/lib/maintainers.nix
@@ -739,6 +739,7 @@
   xvapx = "Marti Serra <marti.serra.coscollano@gmail.com>";
   xwvvvvwx = "David Terry <davidterry@posteo.de>";
   xzfc = "Albert Safin <xzfcpw@gmail.com>";
+  y0no = "Yoann Ono <y0no@y0no.fr>";
   yarr = "Dmitry V. <savraz@gmail.com>";
   yegortimoshenko = "Yegor Timoshenko <yegortimoshenko@gmail.com>";
   ylwghst = "Burim Augustin Berisa <ylwghst@onionmail.info>";
diff --git a/nixos/modules/services/networking/openvpn.nix b/nixos/modules/services/networking/openvpn.nix
index 3fbf5a9f022..7a96b673c51 100644
--- a/nixos/modules/services/networking/openvpn.nix
+++ b/nixos/modules/services/networking/openvpn.nix
@@ -50,6 +50,11 @@ let
               "up ${pkgs.writeScript "openvpn-${name}-up" upScript}"}
           ${optionalString (cfg.down != "" || cfg.updateResolvConf)
               "down ${pkgs.writeScript "openvpn-${name}-down" downScript}"}
+          ${optionalString (cfg.authUserPass != null)
+              "auth-user-pass ${pkgs.writeText "openvpn-credentials-${name}" ''
+                ${cfg.authUserPass.username}
+                ${cfg.authUserPass.password}
+              ''}"}
         '';
 
     in {
@@ -161,6 +166,29 @@ in
             '';
           };
 
+          authUserPass = mkOption {
+            default = null;
+            description = ''
+              This option can be used to store the username / password credentials
+              with the "auth-user-pass" authentication method.
+
+              WARNING: Using this option will put the credentials WORLD-READABLE in the Nix store!
+            '';
+            type = types.nullOr (types.submodule {
+
+              options = {
+                username = mkOption {
+                  description = "The username to store inside the credentials file.";
+                  type = types.string;
+                };
+
+                password = mkOption {
+                  description = "The password to store inside the credentials file.";
+                  type = types.string;
+                };
+              };
+            });
+          };
         };
 
       });
diff --git a/pkgs/applications/editors/neovim/wrapper.nix b/pkgs/applications/editors/neovim/wrapper.nix
index 2acba83d00b..e2218473d72 100644
--- a/pkgs/applications/editors/neovim/wrapper.nix
+++ b/pkgs/applications/editors/neovim/wrapper.nix
@@ -68,7 +68,9 @@ let
         --unset PYTHONPATH \
          ${optionalString withRuby '' --suffix PATH : ${rubyEnv}/bin --set GEM_HOME ${rubyEnv}/${rubyEnv.ruby.gemPath}'' }
 
-        # copy and patch the original neovim.destkop file
+      ''
+      + optionalString (!stdenv.isDarwin) ''
+        # copy and patch the original neovim.desktop file
         mkdir -p $out/share/applications
         substitute ${neovim}/share/applications/nvim.desktop $out/share/applications/nvim.desktop \
           --replace 'TryExec=nvim' "TryExec=$out/bin/nvim" \
diff --git a/pkgs/applications/window-managers/i3/status-rust.nix b/pkgs/applications/window-managers/i3/status-rust.nix
index 05965fc3717..0b86c0283e0 100644
--- a/pkgs/applications/window-managers/i3/status-rust.nix
+++ b/pkgs/applications/window-managers/i3/status-rust.nix
@@ -2,13 +2,13 @@
 
 rustPlatform.buildRustPackage rec {
   name = "i3status-rust-${version}";
-  version = "0.9.0.2017-11-09";
+  version = "0.9.0.2018-01-15";
 
   src = fetchFromGitHub {
     owner = "greshake";
     repo = "i3status-rust";
-    rev = "5daf2cdd611bed3db804d011d5d5af34b558e615";
-    sha256 = "0j6h7x5mm3m7wq0if20qxc9z3qw29xgf5qb3sqwdbdpz8ykpqdgk";
+    rev = "aa7bc98d945ba63358cd48c66e0261c201b999e4";
+    sha256 = "1q2p53nl499yxsw0i81ryyc2ln80p8i3iii5hx7aiwfi4ybm55b1";
   };
 
   cargoSha256 = "1197hp6d4z14j0r22bvw9ly294li0ivg6yfql4lgi27hbvzag71h";
diff --git a/pkgs/development/libraries/kde-frameworks/kimageformats.nix b/pkgs/development/libraries/kde-frameworks/kimageformats.nix
index 26a8637bafc..29748a5f7f4 100644
--- a/pkgs/development/libraries/kde-frameworks/kimageformats.nix
+++ b/pkgs/development/libraries/kde-frameworks/kimageformats.nix
@@ -12,5 +12,5 @@ mkDerivation {
   nativeBuildInputs = [ extra-cmake-modules ];
   buildInputs = [ karchive openexr qtbase ];
   outputs = [ "out" ]; # plugins only
-  NIX_CFLAGS_COMPILE = "-I${getDev ilmbase}/include/OpenEXR";
+  CXXFLAGS = "-I${getDev ilmbase}/include/OpenEXR";
 }
diff --git a/pkgs/development/ocaml-modules/uri/default.nix b/pkgs/development/ocaml-modules/uri/default.nix
index f08ee7fc2fc..5059ef24aa3 100644
--- a/pkgs/development/ocaml-modules/uri/default.nix
+++ b/pkgs/development/ocaml-modules/uri/default.nix
@@ -1,51 +1,33 @@
-{ stdenv, fetchzip, ocaml, findlib, ocamlbuild, re, stringext, ounit
-, sexplib, ppx_sexp_conv
-, legacyVersion ? false
-, sexplib_p4
+{ stdenv, fetchurl, ocaml, findlib, jbuilder, ppx_sexp_conv, ounit
+, ppx_deriving, re, sexplib, stringext
 }:
 
-if !stdenv.lib.versionAtLeast ocaml.version "4"
-|| legacyVersion && stdenv.lib.versionAtLeast ocaml.version "4.03"
-then throw "uri${stdenv.lib.optionalString legacyVersion "_p4"} is not available for OCaml ${ocaml.version}" else
-
-with
-  if legacyVersion
-  then {
-    version = "1.9.1";
-    sha256 = "0v3jxqgyi4kj92r3x83rszfpnvvzy9lyb913basch4q64yka3w85";
-  } else {
-    version = "1.9.2";
-    sha256 = "137pg8j654x7r0d1664iy2zp3l82nki1kkh921lwdrwc5qqdl6jx";
-  };
-
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
+  version = "1.9.6";
   name = "ocaml${ocaml.version}-uri-${version}";
 
-  src = fetchzip {
-    url = "https://github.com/mirage/ocaml-uri/archive/v${version}.tar.gz";
-    inherit sha256;
+  src = fetchurl {
+    url = "https://github.com/mirage/ocaml-uri/releases/download/v${version}/uri-${version}.tbz";
+    sha256 = "1m845rwd70wi4iijkrigyz939m1x84ba70hvv0d9sgk6971w4kz0";
   };
 
-  buildInputs = [ ocaml findlib ocamlbuild ounit ]
-  ++ stdenv.lib.optional (!legacyVersion) ppx_sexp_conv;
-  propagatedBuildInputs = [ re (if legacyVersion then sexplib_p4 else sexplib) stringext ];
+  unpackCmd = "tar -xjf $curSrc";
+
+  buildInputs = [ ocaml findlib jbuilder ppx_sexp_conv ounit ];
+  propagatedBuildInputs = [ ppx_deriving re sexplib stringext ];
+
+  buildPhase = "jbuilder build";
 
-  configurePhase = "ocaml setup.ml -configure --prefix $out --enable-tests";
-  buildPhase = ''
-    ocaml setup.ml -build
-    ocaml setup.ml -doc
-  '';
   doCheck = true;
-  checkPhase = "ocaml setup.ml -test";
-  installPhase = "ocaml setup.ml -install";
+  checkPhase = "jbuilder runtest";
 
-  createFindlibDestdir = true;
+  inherit (jbuilder) installPhase;
 
   meta = {
-    homepage = https://github.com/mirage/ocaml-uri;
-    platforms = ocaml.meta.platforms or [];
+    homepage = "https://github.com/mirage/ocaml-uri";
     description = "RFC3986 URI parsing library for OCaml";
     license = stdenv.lib.licenses.isc;
-    maintainers = with stdenv.lib.maintainers; [ vbgl ];
+    maintainers = [ stdenv.lib.maintainers.vbgl ];
+    inherit (ocaml.meta) platforms;
   };
 }
diff --git a/pkgs/development/ocaml-modules/uri/legacy.nix b/pkgs/development/ocaml-modules/uri/legacy.nix
new file mode 100644
index 00000000000..f08ee7fc2fc
--- /dev/null
+++ b/pkgs/development/ocaml-modules/uri/legacy.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchzip, ocaml, findlib, ocamlbuild, re, stringext, ounit
+, sexplib, ppx_sexp_conv
+, legacyVersion ? false
+, sexplib_p4
+}:
+
+if !stdenv.lib.versionAtLeast ocaml.version "4"
+|| legacyVersion && stdenv.lib.versionAtLeast ocaml.version "4.03"
+then throw "uri${stdenv.lib.optionalString legacyVersion "_p4"} is not available for OCaml ${ocaml.version}" else
+
+with
+  if legacyVersion
+  then {
+    version = "1.9.1";
+    sha256 = "0v3jxqgyi4kj92r3x83rszfpnvvzy9lyb913basch4q64yka3w85";
+  } else {
+    version = "1.9.2";
+    sha256 = "137pg8j654x7r0d1664iy2zp3l82nki1kkh921lwdrwc5qqdl6jx";
+  };
+
+stdenv.mkDerivation {
+  name = "ocaml${ocaml.version}-uri-${version}";
+
+  src = fetchzip {
+    url = "https://github.com/mirage/ocaml-uri/archive/v${version}.tar.gz";
+    inherit sha256;
+  };
+
+  buildInputs = [ ocaml findlib ocamlbuild ounit ]
+  ++ stdenv.lib.optional (!legacyVersion) ppx_sexp_conv;
+  propagatedBuildInputs = [ re (if legacyVersion then sexplib_p4 else sexplib) stringext ];
+
+  configurePhase = "ocaml setup.ml -configure --prefix $out --enable-tests";
+  buildPhase = ''
+    ocaml setup.ml -build
+    ocaml setup.ml -doc
+  '';
+  doCheck = true;
+  checkPhase = "ocaml setup.ml -test";
+  installPhase = "ocaml setup.ml -install";
+
+  createFindlibDestdir = true;
+
+  meta = {
+    homepage = https://github.com/mirage/ocaml-uri;
+    platforms = ocaml.meta.platforms or [];
+    description = "RFC3986 URI parsing library for OCaml";
+    license = stdenv.lib.licenses.isc;
+    maintainers = with stdenv.lib.maintainers; [ vbgl ];
+  };
+}
diff --git a/pkgs/development/python-modules/aenum/default.nix b/pkgs/development/python-modules/aenum/default.nix
index 45e7f8915ac..466c20e19ca 100644
--- a/pkgs/development/python-modules/aenum/default.nix
+++ b/pkgs/development/python-modules/aenum/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchPypi, buildPythonPackage, isPy3k }:
+{ stdenv, fetchPypi, buildPythonPackage, python, isPy3k, glibcLocales }:
 
 buildPythonPackage rec {
   pname = "aenum";
@@ -10,12 +10,17 @@ buildPythonPackage rec {
     sha256 = "d98bc55136d696fcf323760c3db0de489da9e41fd51283fa6f90205deb85bf6a";
   };
 
-  doCheck = !isPy3k;
-  # The following tests fail (only in python3
-  # test_convert (aenum.test.TestIntEnumConvert)
-  # test_convert_value_lookup_priority (aenum.test.TestIntEnumConvert)
-  # test_convert (aenum.test.TestIntEnumConvert)
-  # test_convert_value_lookup_priority (aenum.test.TestIntEnumConvert)
+  # For Python 3, locale has to be set to en_US.UTF-8 for
+  # tests to pass
+  checkInputs = if isPy3k then [ glibcLocales ] else [];
+
+  checkPhase = ''
+  runHook preCheck
+  ${if isPy3k then "export LC_ALL=en_US.UTF-8" else ""}
+  PYTHONPATH=`pwd` ${python.interpreter} aenum/test.py
+  runHook postCheck
+  '';
+
 
   meta = {
     description = "Advanced Enumerations (compatible with Python's stdlib Enum), NamedTuples, and NamedConstants";
diff --git a/pkgs/development/python-modules/nose-parameterized/default.nix b/pkgs/development/python-modules/nose-parameterized/default.nix
new file mode 100644
index 00000000000..3c7cd077cdc
--- /dev/null
+++ b/pkgs/development/python-modules/nose-parameterized/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchPypi, buildPythonPackage, nose, six, glibcLocales, isPy3k }:
+
+buildPythonPackage rec {
+  pname = "nose-parameterized";
+  version = "0.6.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1khlabgib4161vn6alxsjaa8javriywgx9vydddi659gp9x6fpnk";
+  };
+
+  # Tests require some python3-isms but code works without.
+  doCheck = isPy3k;
+
+  buildInputs = [ nose glibcLocales ];
+  propagatedBuildInputs = [ six ];
+
+  checkPhase = ''
+    LC_ALL="en_US.UTF-8" nosetests -v
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Parameterized testing with any Python test framework";
+    homepage = https://pypi.python.org/pypi/nose-parameterized;
+    license = licenses.bsd3;
+  };
+}
diff --git a/pkgs/development/tools/go-protobuf/default.nix b/pkgs/development/tools/go-protobuf/default.nix
new file mode 100644
index 00000000000..361fc74c729
--- /dev/null
+++ b/pkgs/development/tools/go-protobuf/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "go-protobuf-${version}";
+  version = "2018-01-04";
+  rev = "1e59b77b52bf8e4b449a57e6f79f21226d571845";
+
+  goPackagePath = "github.com/golang/protobuf";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "golang";
+    repo = "protobuf";
+    sha256 = "19bkh81wnp6njg3931wky6hsnnl2d1ig20vfjxpv450sd3k6yys8";
+  };
+
+  meta = with stdenv.lib; {
+    homepage    = "https://github.com/golang/protobuf";
+    description = " Go bindings for protocol buffer";
+    maintainers = with maintainers; [ lewo ];
+    license     = licenses.bsd3;
+    platforms   = platforms.linux;
+  };
+}
diff --git a/pkgs/os-specific/linux/evdi/default.nix b/pkgs/os-specific/linux/evdi/default.nix
index 11d0a461da0..5db64e15e04 100644
--- a/pkgs/os-specific/linux/evdi/default.nix
+++ b/pkgs/os-specific/linux/evdi/default.nix
@@ -2,15 +2,17 @@
 
 stdenv.mkDerivation rec {
   name = "evdi-${version}";
-  version = "1.4.1+git2017-06-12";
+  version = "unstable-2018-01-12";
 
   src = fetchFromGitHub {
     owner = "DisplayLink";
     repo = "evdi";
-    rev = "ee1c578774e62fe4b08d92750620ed3094642160";
-    sha256 = "1m3wkmw4hjpjax7rvhmpicz09d7vxcxklq797ddjg6ljvf12671b";
+    rev = "e7a08d08e3876efba8007e91df1b296f2447b8de";
+    sha256 = "01z7bx5rgpb5lc4c6dxfiv52ni25564djxmvmgy3d7r1x1mqhxgs";
   };
 
+  nativeBuildInputs = kernel.moduleBuildDependencies;
+
   buildInputs = [ kernel libdrm ];
 
   makeFlags = [ "KVER=${kernel.modDirVersion}" "KDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" ];
@@ -27,6 +29,6 @@ stdenv.mkDerivation rec {
     platforms = platforms.linux;
     license = licenses.gpl2;
     homepage = http://www.displaylink.com/;
-    broken = versionOlder kernel.version "4.9" || !stdenv.lib.versionOlder kernel.version "4.13";
+    broken = versionOlder kernel.version "4.9";
   };
 }
diff --git a/pkgs/servers/freeradius/default.nix b/pkgs/servers/freeradius/default.nix
index bf74ca81ced..c6ec3d46dda 100644
--- a/pkgs/servers/freeradius/default.nix
+++ b/pkgs/servers/freeradius/default.nix
@@ -40,11 +40,11 @@ assert withCollectd -> collectd != null;
 with stdenv.lib;
 stdenv.mkDerivation rec {
   name = "freeradius-${version}";
-  version = "3.0.15";
+  version = "3.0.16";
 
   src = fetchurl {
     url = "ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-${version}.tar.gz";
-    sha256 = "1qygf5if2xjzl7kfzwl428ydz5q1m0j5sx077n12v7znlgnwaagx";
+    sha256 = "062dw4ckaa7k2br16l3naz9dr7hvzqhpxdwam3klq1i44v4hvl1b";
   };
 
   nativeBuildInputs = [ autoreconfHook ];
diff --git a/pkgs/tools/misc/parallel-rust/default.nix b/pkgs/tools/misc/parallel-rust/default.nix
new file mode 100644
index 00000000000..699fe4cf971
--- /dev/null
+++ b/pkgs/tools/misc/parallel-rust/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  name = "parallel-rust-${version}";
+  version = "0.11.3";
+
+  src = fetchFromGitHub {
+    owner = "mmstick";
+    repo = "parallel";
+    rev = version;
+    sha256 = "1bb1m3ckkrxlnw9w24ig70bd1zwyrbaw914q3xz5yv43c0l6pn9c";
+  };
+
+  cargoSha256 = "0p3wpjz3jrqjasi39zq6q54dhpymc5jp0mfsnzbq6dvz18s8m588";
+
+  patches = [ ./fix_cargo_lock_version.patch ];
+
+  meta = with stdenv.lib; {
+    description = "A command-line CPU load balancer written in Rust";
+    homepage = https://github.com/mmstick/parallel;
+    license = licenses.mit;
+    maintainers = [];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/misc/parallel-rust/fix_cargo_lock_version.patch b/pkgs/tools/misc/parallel-rust/fix_cargo_lock_version.patch
new file mode 100644
index 00000000000..75a1ba35e12
--- /dev/null
+++ b/pkgs/tools/misc/parallel-rust/fix_cargo_lock_version.patch
@@ -0,0 +1,12 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index c01308d..dba3927 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -1,6 +1,6 @@
+ [root]
+ name = "parallel"
+-version = "0.11.2"
++version = "0.11.3"
+ dependencies = [
+  "arrayvec 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)",
+  "itoa 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
diff --git a/pkgs/tools/networking/miniupnpc/default.nix b/pkgs/tools/networking/miniupnpc/default.nix
index 2cca57121e9..fe3568c3a83 100644
--- a/pkgs/tools/networking/miniupnpc/default.nix
+++ b/pkgs/tools/networking/miniupnpc/default.nix
@@ -27,8 +27,8 @@ let
     };
 in {
   miniupnpc_2 = generic {
-    version = "2.0.20170509";
-    sha256 = "0spi75q6nafxp3ndnrhrlqagzmjlp8wwlr5x7rnvdpswgxi6ihyk";
+    version = "2.0.20171212";
+    sha256 = "0za7pr6hrr3ajkifirhhxfn3hlhl06f622g8hnj5h8y18sp3bwff";
   };
   miniupnpc_1 = generic {
     version = "1.9.20160209";
diff --git a/pkgs/tools/networking/miniupnpd/default.nix b/pkgs/tools/networking/miniupnpd/default.nix
index 6003471bed9..3e3b4ec34a3 100644
--- a/pkgs/tools/networking/miniupnpd/default.nix
+++ b/pkgs/tools/networking/miniupnpd/default.nix
@@ -3,11 +3,11 @@
 assert stdenv.isLinux;
 
 stdenv.mkDerivation rec {
-  name = "miniupnpd-2.0";
+  name = "miniupnpd-2.0.20171212";
 
   src = fetchurl {
     url = "http://miniupnp.free.fr/files/download.php?file=${name}.tar.gz";
-    sha256 = "1dxzhvkylrnbkd5srb9rb2g4f9ydd1zbjg5sdf190m0g1sha6snr";
+    sha256 = "0jdcll1nd8jf356fpl0n2yw8sww58nfz6hkx052d77l34afq6sn7";
     name = "${name}.tar.gz";
   };
 
diff --git a/pkgs/tools/networking/netsniff-ng/default.nix b/pkgs/tools/networking/netsniff-ng/default.nix
index b0921375849..6619d0a0f69 100644
--- a/pkgs/tools/networking/netsniff-ng/default.nix
+++ b/pkgs/tools/networking/netsniff-ng/default.nix
@@ -1,24 +1,24 @@
-{ stdenv, fetchFromGitHub, bison, flex, geoip, geolite-legacy, libcli, libnet
-, libnetfilter_conntrack, libnl, libpcap, libsodium, liburcu, ncurses, perl
-, pkgconfig, zlib }:
+{ stdenv, fetchFromGitHub, makeWrapper, bison, flex, geoip, geolite-legacy
+, libcli, libnet, libnetfilter_conntrack, libnl, libpcap, libsodium
+, liburcu, ncurses, perl, pkgconfig, zlib }:
 
 stdenv.mkDerivation rec {
   name = "netsniff-ng-${version}";
-  version = "0.6.2";
+  version = "0.6.3";
 
   # Upstream recommends and supports git
   src = fetchFromGitHub rec {
     repo = "netsniff-ng";
     owner = repo;
     rev = "v${version}";
-    sha256 = "1lz4hwgwdq3znlqjmvl7cw3g3ilbayn608h0hwqdf7v2jq6n67kg";
+    sha256 = "0g3105c5ha897bpwsnrp72gx4n61gspxmld594i37g8k7vwzny4l";
   };
 
   patches = [ ./glibc-2.26.patch ];
 
   buildInputs = [ bison flex geoip geolite-legacy libcli libnet libnl
     libnetfilter_conntrack libpcap libsodium liburcu ncurses perl
-    pkgconfig zlib ];
+    pkgconfig zlib makeWrapper ];
 
   # ./configure is not autoGNU but some home-brewn magic
   configurePhase = ''
@@ -33,6 +33,10 @@ stdenv.mkDerivation rec {
   makeFlags = [ "PREFIX=$(out)" "ETCDIR=$(out)/etc" ];
 
   postInstall = ''
+    # trafgen and bpfc can call out to cpp to process config files.
+    wrapProgram "$out/sbin/trafgen" --prefix PATH ":" "${stdenv.cc}/bin"
+    wrapProgram "$out/sbin/bpfc" --prefix PATH ":" "${stdenv.cc}/bin"
+
     ln -sv ${geolite-legacy}/share/GeoIP/GeoIP.dat		$out/etc/netsniff-ng/country4.dat
     ln -sv ${geolite-legacy}/share/GeoIP/GeoIPv6.dat		$out/etc/netsniff-ng/country6.dat
     ln -sv ${geolite-legacy}/share/GeoIP/GeoIPCity.dat		$out/etc/netsniff-ng/city4.dat
diff --git a/pkgs/tools/security/bettercap/Gemfile b/pkgs/tools/security/bettercap/Gemfile
new file mode 100644
index 00000000000..8fb2a1c300a
--- /dev/null
+++ b/pkgs/tools/security/bettercap/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'bettercap'
diff --git a/pkgs/tools/security/bettercap/Gemfile.lock b/pkgs/tools/security/bettercap/Gemfile.lock
new file mode 100644
index 00000000000..9260d1fd5ab
--- /dev/null
+++ b/pkgs/tools/security/bettercap/Gemfile.lock
@@ -0,0 +1,42 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    bettercap (1.6.2)
+      colorize (~> 0.8.0)
+      em-proxy (~> 0.1, >= 0.1.8)
+      net-dns (~> 0.8, >= 0.8.0)
+      network_interface (~> 0.0, >= 0.0.1)
+      packetfu (~> 1.1, >= 1.1.10)
+      pcaprub (~> 0.12, >= 0.12.0, <= 1.1.11)
+      rubydns (~> 1.0, >= 1.0.3)
+    celluloid (0.16.0)
+      timers (~> 4.0.0)
+    celluloid-io (0.16.2)
+      celluloid (>= 0.16.0)
+      nio4r (>= 1.1.0)
+    colorize (0.8.1)
+    em-proxy (0.1.9)
+      eventmachine
+    eventmachine (1.2.5)
+    hitimes (1.2.6)
+    net-dns (0.8.0)
+    network_interface (0.0.2)
+    nio4r (2.2.0)
+    packetfu (1.1.13)
+      pcaprub
+    pcaprub (0.12.4)
+    rubydns (1.0.3)
+      celluloid (= 0.16.0)
+      celluloid-io (= 0.16.2)
+      timers (~> 4.0.1)
+    timers (4.0.4)
+      hitimes
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  bettercap
+
+BUNDLED WITH
+   1.14.6
diff --git a/pkgs/tools/security/bettercap/default.nix b/pkgs/tools/security/bettercap/default.nix
new file mode 100644
index 00000000000..46832e83ac9
--- /dev/null
+++ b/pkgs/tools/security/bettercap/default.nix
@@ -0,0 +1,23 @@
+{ lib, bundlerEnv, ruby, libpcap}:
+
+bundlerEnv rec {
+  name = "bettercap-${version}";
+
+  version = (import gemset).bettercap.version;
+  inherit ruby;
+  gemdir = ./.;
+  gemset = ./gemset.nix;
+
+  buildInputs = [ libpcap ruby ];
+
+  meta = with lib; {
+    description = "A man in the middle tool";
+    longDescription = ''
+      BetterCAP is a powerful, flexible and portable tool created to perform various types of MITM attacks against a network, manipulate HTTP, HTTPS and TCP traffic in realtime, sniff for credentials and much more.
+    '' ;
+    homepage = https://www.bettercap.org/;
+    license = with licenses; gpl3;
+    maintainers = with maintainers; [ y0no ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/security/bettercap/gemset.nix b/pkgs/tools/security/bettercap/gemset.nix
new file mode 100644
index 00000000000..bd5c33ba22c
--- /dev/null
+++ b/pkgs/tools/security/bettercap/gemset.nix
@@ -0,0 +1,121 @@
+{
+  bettercap = {
+    dependencies = ["colorize" "em-proxy" "net-dns" "network_interface" "packetfu" "pcaprub" "rubydns"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mns96yfyfnksk720p8k83qkwwsid4sicwgrzxaa9gbc53aalll0";
+      type = "gem";
+    };
+    version = "1.6.2";
+  };
+  celluloid = {
+    dependencies = ["timers"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "044xk0y7i1xjafzv7blzj5r56s7zr8nzb619arkrl390mf19jxv3";
+      type = "gem";
+    };
+    version = "0.16.0";
+  };
+  celluloid-io = {
+    dependencies = ["celluloid" "nio4r"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l1x0p6daa5vskywrvaxdlanwib3k5pps16axwyy4p8d49pn9rnx";
+      type = "gem";
+    };
+    version = "0.16.2";
+  };
+  colorize = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "133rqj85n400qk6g3dhf2bmfws34mak1wqihvh3bgy9jhajw580b";
+      type = "gem";
+    };
+    version = "0.8.1";
+  };
+  em-proxy = {
+    dependencies = ["eventmachine"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yzkg6jkmcg859b5mf13igpf8q2bjhsmqjsva05948fi733w5n2j";
+      type = "gem";
+    };
+    version = "0.1.9";
+  };
+  eventmachine = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "075hdw0fgzldgss3xaqm2dk545736khcvv1fmzbf1sgdlkyh1v8z";
+      type = "gem";
+    };
+    version = "1.2.5";
+  };
+  hitimes = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06222h9236jw9jgmdlpi0q7psac1shvxqxqx905qkvabmxdxlfar";
+      type = "gem";
+    };
+    version = "1.2.6";
+  };
+  net-dns = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12nal6vhdyg0pbcqpsxqr59h7mbgdhcqp3v0xnzvy167n40gabf9";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  network_interface = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xh4knfq77ii4pjzsd2z1p3nd6nrcdjhb2vi5gw36jqj43ffw0zp";
+      type = "gem";
+    };
+    version = "0.0.2";
+  };
+  nio4r = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jjrj7vs29w6dfgsxq08226jfbi2j0x62lf4p9zmvyp19dj4z00a";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  packetfu = {
+    dependencies = ["pcaprub"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16ppq9wfxq4x2hss61l5brs3s6fmi8gb50mnp1nnnzb1asq4g8ll";
+      type = "gem";
+    };
+    version = "1.1.13";
+  };
+  pcaprub = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pl4lqy7308185pfv0197n8b4v20fhd0zb3wlpz284rk8ssclkvz";
+      type = "gem";
+    };
+    version = "0.12.4";
+  };
+  rubydns = {
+    dependencies = ["celluloid" "celluloid-io" "timers"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cvj8li8shz7zn1rc5hdrkqmvr9j187g4y28mvkfvmv1j9hdln62";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  timers = {
+    dependencies = ["hitimes"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jx4wb0x182gmbcs90vz0wzfyp8afi1mpl9w5ippfncyk4kffvrz";
+      type = "gem";
+    };
+    version = "4.0.4";
+  };
+}
\ No newline at end of file
diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix
index a93350f52f4..f0054b9841b 100644
--- a/pkgs/top-level/aliases.nix
+++ b/pkgs/top-level/aliases.nix
@@ -121,7 +121,13 @@ mapAliases (rec {
   owncloudclient = owncloud-client;  # added 2016-08
   pgp-tools = signing-party; # added 2017-03-26
   pidgin-with-plugins = pidgin; # added 2016-06
-  pidginlatexSF = pidginlatex; # added 2014-11-02
+  pidginlatexSF = pidgin-latex; # added 2014-11-02
+  pidginlatex = pidgin-latex; # added 2018-01-08
+  pidginmsnpecan = pidgin-msn-pecan; # added 2018-01-08
+  pidginotr = pidgin-otr; # added 2018-01-08
+  pidginosd = pidgin-osd; # added 2018-01-08
+  pidginsipe = pidgin-sipe; # added 2018-01-08
+  pidginwindowmerge = pidgin-window-merge; # added 2018-01-08
   postage = pgmanage; # added 2017-11-03
   poppler_qt5 = libsForQt5.poppler;  # added 2015-12-19
   PPSSPP = ppsspp; # added 2017-10-01
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index eceb8e1b44b..915c66b4a0c 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -1253,6 +1253,8 @@ with pkgs;
 
   ps_mem = callPackage ../tools/system/ps_mem { };
 
+  parallel-rust = callPackage ../tools/misc/parallel-rust { };
+
   socklog = callPackage ../tools/system/socklog { };
 
   staccato = callPackage ../tools/text/staccato { };
@@ -1372,6 +1374,8 @@ with pkgs;
 
   bepasty = callPackage ../tools/misc/bepasty { };
 
+  bettercap = callPackage ../tools/security/bettercap { };
+
   bfg-repo-cleaner = gitAndTools.bfg-repo-cleaner;
 
   bgs = callPackage ../tools/X11/bgs { };
@@ -13200,6 +13204,8 @@ with pkgs;
 
   go-bindata-assetfs = callPackage ../development/tools/go-bindata-assetfs { };
 
+  go-protobuf = callPackage ../development/tools/go-protobuf { };
+
   gocode = callPackage ../development/tools/gocode { };
 
   goconvey = callPackage ../development/tools/goconvey { };
@@ -16522,11 +16528,11 @@ with pkgs;
     plugins = [];
   };
 
-  pidginlatex = callPackage ../applications/networking/instant-messengers/pidgin-plugins/pidgin-latex {
+  pidgin-latex = callPackage ../applications/networking/instant-messengers/pidgin-plugins/pidgin-latex {
     texLive = texlive.combined.scheme-basic;
   };
 
-  pidginmsnpecan = callPackage ../applications/networking/instant-messengers/pidgin-plugins/msn-pecan { };
+  pidgin-msn-pecan = callPackage ../applications/networking/instant-messengers/pidgin-plugins/msn-pecan { };
 
   pidgin-mra = callPackage ../applications/networking/instant-messengers/pidgin-plugins/pidgin-mra { };
 
@@ -16536,13 +16542,13 @@ with pkgs;
 
   pidgin-xmpp-receipts = callPackage ../applications/networking/instant-messengers/pidgin-plugins/pidgin-xmpp-receipts { };
 
-  pidginotr = callPackage ../applications/networking/instant-messengers/pidgin-plugins/otr { };
+  pidgin-otr = callPackage ../applications/networking/instant-messengers/pidgin-plugins/otr { };
 
-  pidginosd = callPackage ../applications/networking/instant-messengers/pidgin-plugins/pidgin-osd { };
+  pidgin-osd = callPackage ../applications/networking/instant-messengers/pidgin-plugins/pidgin-osd { };
 
-  pidginsipe = callPackage ../applications/networking/instant-messengers/pidgin-plugins/sipe { };
+  pidgin-sipe = callPackage ../applications/networking/instant-messengers/pidgin-plugins/sipe { };
 
-  pidginwindowmerge = callPackage ../applications/networking/instant-messengers/pidgin-plugins/window-merge { };
+  pidgin-window-merge = callPackage ../applications/networking/instant-messengers/pidgin-plugins/window-merge { };
 
   purple-hangouts = callPackage ../applications/networking/instant-messengers/pidgin-plugins/purple-hangouts { };
 
diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix
index 4a7c77172cc..c44124c3fff 100644
--- a/pkgs/top-level/ocaml-packages.nix
+++ b/pkgs/top-level/ocaml-packages.nix
@@ -667,8 +667,12 @@ let
     uucp = callPackage ../development/ocaml-modules/uucp { };
     uunf = callPackage ../development/ocaml-modules/uunf { };
 
-    uri = callPackage ../development/ocaml-modules/uri { };
-    uri_p4 = callPackage ../development/ocaml-modules/uri {
+    uri =
+      if lib.versionAtLeast ocaml.version "4.3"
+      then callPackage ../development/ocaml-modules/uri { }
+      else callPackage ../development/ocaml-modules/uri/legacy.nix { };
+
+    uri_p4 = callPackage ../development/ocaml-modules/uri/legacy.nix {
       legacyVersion = true;
     };
 
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 10705d02d6b..4e4c3b9c12e 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -3947,33 +3947,7 @@ in {
     };
   });
 
-  nose-parameterized = buildPythonPackage (rec {
-    name = "nose-parameterized-${version}";
-    version = "0.5.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/n/nose-parameterized/${name}.tar.gz";
-      sha256 = "a11c41b0cf8218e7cdc19ab7a1bdf5c141d161cd2350daee819473cc63cd0685";
-    };
-
-    # Tests require some python3-isms but code works without.
-    doCheck = isPy3k;
-
-    LC_ALL = "en_US.UTF-8";
-    buildInputs = with self; [ nose pkgs.glibcLocales ];
-    propagatedBuildInputs = with self; [ self.six ];
-
-    checkPhase = ''
-      nosetests -v
-    '';
-
-
-    meta = {
-      description = "Parameterized testing with any Python test framework";
-      homepage = https://pypi.python.org/pypi/nose-parameterized;
-      license = licenses.bsd3;
-    };
-  });
+  nose-parameterized = callPackage ../development/python-modules/nose-parameterized {};
 
   neurotools = buildPythonPackage (rec {
     name = "NeuroTools-${version}";
@@ -17752,7 +17726,7 @@ in {
   tiros = callPackage ../development/python-modules/tiros { };
 
   tifffile = callPackage ../development/python-modules/tifffile { };
-    
+
   # Tkinter/tkinter is part of the Python standard library.
   # The Python interpreters in Nixpkgs come without tkinter by default.
   # To make the module available, we make it available as any other