summary refs log tree commit diff
path: root/pkgs/tools
diff options
context:
space:
mode:
authorLuca Bruno <lethalman88@gmail.com>2015-12-11 18:31:00 +0100
committerLuca Bruno <lethalman88@gmail.com>2015-12-11 18:31:00 +0100
commit5b0352a6a43fdd924a53cde4b81c15b755fa0a27 (patch)
treecf0fcc2be2f6d08c970f0322a63ff0a31d5d5dee /pkgs/tools
parent2f0fe05543ce594eacf0310966914d6e19a42f88 (diff)
parent146784f835a6cadc65812c5adf76533c18e5be61 (diff)
downloadnixpkgs-5b0352a6a43fdd924a53cde4b81c15b755fa0a27.tar
nixpkgs-5b0352a6a43fdd924a53cde4b81c15b755fa0a27.tar.gz
nixpkgs-5b0352a6a43fdd924a53cde4b81c15b755fa0a27.tar.bz2
nixpkgs-5b0352a6a43fdd924a53cde4b81c15b755fa0a27.tar.lz
nixpkgs-5b0352a6a43fdd924a53cde4b81c15b755fa0a27.tar.xz
nixpkgs-5b0352a6a43fdd924a53cde4b81c15b755fa0a27.tar.zst
nixpkgs-5b0352a6a43fdd924a53cde4b81c15b755fa0a27.zip
Merge branch 'master' into closure-size
Diffstat (limited to 'pkgs/tools')
-rw-r--r--pkgs/tools/X11/bumblebee/default.nix146
-rw-r--r--pkgs/tools/X11/bumblebee/nixos.patch81
-rw-r--r--pkgs/tools/X11/bumblebee/nvidia-conf.patch11
-rw-r--r--pkgs/tools/X11/bumblebee/xopts.patch11
-rw-r--r--pkgs/tools/X11/primus/builder.sh12
-rw-r--r--pkgs/tools/X11/primus/default.nix33
-rw-r--r--pkgs/tools/X11/primus/lib.nix35
-rw-r--r--pkgs/tools/X11/virtualgl/default.nix45
-rw-r--r--pkgs/tools/X11/virtualgl/fixturbopath.patch16
-rw-r--r--pkgs/tools/X11/virtualgl/lib.nix29
-rw-r--r--pkgs/tools/X11/virtualgl/xshm.patch13
-rw-r--r--pkgs/tools/X11/xpra/default.nix8
-rw-r--r--pkgs/tools/admin/awscli/default.nix40
-rw-r--r--pkgs/tools/admin/letsencrypt/default.nix24
-rw-r--r--pkgs/tools/admin/simp_le/default.nix22
-rw-r--r--pkgs/tools/archivers/unrar/default.nix2
-rw-r--r--pkgs/tools/audio/dir2opus/default.nix2
-rw-r--r--pkgs/tools/audio/liquidsoap/full.nix2
-rw-r--r--pkgs/tools/backup/backup/Gemfile23
-rw-r--r--pkgs/tools/backup/backup/Gemfile.lock276
-rw-r--r--pkgs/tools/backup/backup/default.nix20
-rw-r--r--pkgs/tools/backup/backup/gemset.nix778
-rw-r--r--pkgs/tools/backup/partclone/default.nix15
-rw-r--r--pkgs/tools/backup/rsnapshot/default.nix7
-rw-r--r--pkgs/tools/backup/rsnapshot/git.nix52
-rw-r--r--pkgs/tools/compression/bzip2/default.nix26
-rw-r--r--pkgs/tools/filesystems/f2fs-tools/default.nix2
-rw-r--r--pkgs/tools/filesystems/xfsprogs/4.2.0-sharedlibs.patch20
-rw-r--r--pkgs/tools/graphics/pdfread/default.nix6
-rw-r--r--pkgs/tools/misc/bfr/default.nix7
-rw-r--r--pkgs/tools/misc/coreutils/default.nix18
-rw-r--r--pkgs/tools/misc/cpuminer-multi/default.nix2
-rw-r--r--pkgs/tools/misc/ipxe/default.nix2
-rw-r--r--pkgs/tools/misc/less/default.nix2
-rw-r--r--pkgs/tools/misc/logstash/default.nix5
-rw-r--r--pkgs/tools/misc/makebootfat/default.nix2
-rw-r--r--pkgs/tools/misc/svtplay-dl/default.nix4
-rw-r--r--pkgs/tools/misc/tlp/default.nix4
-rw-r--r--pkgs/tools/misc/xapian-omega/default.nix19
-rw-r--r--pkgs/tools/misc/yank/default.nix4
-rw-r--r--pkgs/tools/misc/zsh-navigation-tools/default.nix4
-rw-r--r--pkgs/tools/networking/cjdns/default.nix2
-rw-r--r--pkgs/tools/networking/cntlm/default.nix20
-rw-r--r--pkgs/tools/networking/corkscrew/default.nix16
-rw-r--r--pkgs/tools/networking/curl/default.nix1
-rw-r--r--pkgs/tools/networking/dnsmasq/default.nix6
-rw-r--r--pkgs/tools/networking/dropbear/default.nix4
-rw-r--r--pkgs/tools/networking/haproxy/default.nix6
-rw-r--r--pkgs/tools/networking/i2p/default.nix4
-rw-r--r--pkgs/tools/networking/offlineimap/default.nix4
-rw-r--r--pkgs/tools/networking/openvpn/default.nix2
-rw-r--r--pkgs/tools/networking/p2p/libtorrent/default.nix20
-rw-r--r--pkgs/tools/networking/p2p/libtorrent/git.nix28
-rw-r--r--pkgs/tools/networking/p2p/rtorrent/default.nix46
-rw-r--r--pkgs/tools/networking/p2p/rtorrent/git.nix63
-rw-r--r--pkgs/tools/networking/snabbswitch/default.nix (renamed from pkgs/tools/networking/snabb/default.nix)24
-rw-r--r--pkgs/tools/networking/statsd/default.nix2
-rw-r--r--pkgs/tools/networking/unbound/default.nix4
-rw-r--r--pkgs/tools/package-management/nix-prefetch-scripts/default.nix68
-rw-r--r--pkgs/tools/package-management/nix/default.nix12
-rw-r--r--pkgs/tools/package-management/opkg/default.nix10
-rw-r--r--pkgs/tools/security/eid-mw/default.nix10
-rw-r--r--pkgs/tools/security/gnupg/21.nix6
-rw-r--r--pkgs/tools/security/mbox/default.nix2
-rw-r--r--pkgs/tools/security/pass/rofi-pass.nix51
-rw-r--r--pkgs/tools/security/pcsclite/default.nix8
-rw-r--r--pkgs/tools/security/pinentry/default.nix4
-rw-r--r--pkgs/tools/security/pinentry/qt5.nix47
-rw-r--r--pkgs/tools/security/sudo/default.nix4
-rw-r--r--pkgs/tools/security/tor/default.nix4
-rw-r--r--pkgs/tools/system/ansible/default.nix33
-rw-r--r--pkgs/tools/system/sleuthkit/default.nix4
-rw-r--r--pkgs/tools/text/colordiff/default.nix8
-rw-r--r--pkgs/tools/text/gawk/default.nix1
-rw-r--r--pkgs/tools/text/gnugrep/default.nix2
-rw-r--r--pkgs/tools/text/mawk/default.nix2
-rw-r--r--pkgs/tools/typesetting/rubber/default.nix19
-rw-r--r--pkgs/tools/typesetting/tex/auctex/default.nix4
-rw-r--r--pkgs/tools/typesetting/tex/nix/default.nix35
79 files changed, 1791 insertions, 625 deletions
diff --git a/pkgs/tools/X11/bumblebee/default.nix b/pkgs/tools/X11/bumblebee/default.nix
index d314c7857ea..2206905aa3e 100644
--- a/pkgs/tools/X11/bumblebee/default.nix
+++ b/pkgs/tools/X11/bumblebee/default.nix
@@ -16,89 +16,63 @@
 #
 # To use at startup, see hardware.bumblebee options.
 
-# This nix expression supports for now only the native nvidia driver.
-# It should not be hard to generalize this approach to support the
-# nouveau driver as well (parameterize hostEnv, i686Env over the
-# module package, and parameterize the two wrappers as well)
-
-{ stdenv, fetchurl, pkgconfig, help2man
-, libX11, glibc, glib, libbsd
-, makeWrapper, buildEnv, module_init_tools
-, xorg, xkeyboard_config
-, nvidia_x11, virtualgl
+{ stdenv, lib, fetchurl, pkgconfig, help2man, makeWrapper
+, glib, libbsd
+, libX11, libXext, xorgserver, xkbcomp, module_init_tools, xkeyboard_config, xf86videonouveau
+, nvidia_x11, virtualgl, primusLib
 # The below should only be non-null in a x86_64 system. On a i686
 # system the above nvidia_x11 and virtualgl will be the i686 packages.
 # TODO: Confusing. Perhaps use "SubArch" instead of i686?
 , nvidia_x11_i686 ? null
-, virtualgl_i686 ? null
+, primusLib_i686 ? null
 , useDisplayDevice ? false
-, extraDeviceOptions ? ""
+, extraNvidiaDeviceOptions ? ""
+, extraNouveauDeviceOptions ? ""
+, useNvidia ? true
 }:
-with stdenv.lib;
+
 let
   version = "3.2.1";
-  name = "bumblebee-${version}";
 
-  # Isolated X11 environment without the acceleration driver module.
-  # Includes the rest of the components needed for bumblebeed and
-  # optirun to spawn the second X server and to connect to it.
-  x11Env = buildEnv {
-    name = "bumblebee-env";
-    paths = [
-      module_init_tools
-      xorg.xorgserver
-      xorg.xrandr
-      xorg.xrdb
-      xorg.setxkbmap
-      xorg.libX11
-      xorg.libXext
-      xorg.xf86inputevdev
-    ];
-  };
+  primus = if useNvidia then primusLib else primusLib.override { nvidia_x11 = null; };
+  primus_i686 = if useNvidia then primusLib_i686 else primusLib_i686.override { nvidia_x11 = null; };
 
-  # The environment for the host architecture.
-  hostEnv = buildEnv {
-    name = "bumblebee-x64-env";
-    paths = [
-      nvidia_x11
-      virtualgl
-    ];
-  };
+  primusLibs = lib.makeLibraryPath ([primus] ++ lib.optional (primusLib_i686 != null) primus_i686);
 
-  # The environment for the sub architecture, i686, if there is one
-  i686Env = if virtualgl_i686 != null
-    then buildEnv {
-      name = "bumblebee-i686-env";
-      paths = [
-       nvidia_x11_i686
-       virtualgl_i686
-      ];
-    }
-    else null;
+  nvidia_x11s = [nvidia_x11] ++ lib.optional (nvidia_x11_i686 != null) nvidia_x11_i686;
 
-  allEnvs = [hostEnv] ++ optional (i686Env != null) i686Env;
-  ldPathString = makeLibraryPath allEnvs;
+  nvidiaLibs = lib.makeLibraryPath nvidia_x11s;
 
-  # By default we don't want to use a display device
-  deviceOptions = if useDisplayDevice
-                  then ""
-                  else ''
+  bbdPath = lib.makeSearchPath "bin" [ module_init_tools xorgserver ];
+  bbdLibs = lib.makeLibraryPath [ libX11 libXext ];
 
-                         #   Disable display device
-                             Option "UseEDID" "false"
-                             Option "UseDisplayDevice" "none"
-                       ''
-                  + extraDeviceOptions;
+  xmodules = lib.concatStringsSep "," (map (x: "${x}/lib/xorg/modules") ([ xorgserver ] ++ lib.optional (!useNvidia) xf86videonouveau));
 
-in stdenv.mkDerivation {
-  inherit name deviceOptions;
+in stdenv.mkDerivation rec {
+  name = "bumblebee-${version}";
 
   src = fetchurl {
     url = "http://bumblebee-project.org/${name}.tar.gz";
     sha256 = "03p3gvx99lwlavznrpg9l7jnl1yfg2adcj8jcjj0gxp20wxp060h";
   };
 
-  patches = [ ./xopts.patch ./nvidia-conf.patch];
+  patches = [ ./nixos.patch ];
+
+  # By default we don't want to use a display device
+  nvidiaDeviceOptions = lib.optionalString (!useDisplayDevice) ''
+    # Disable display device
+    Option "UseEDID" "false"
+    Option "UseDisplayDevice" "none"
+  '' + extraNvidiaDeviceOptions;
+
+  nouveauDeviceOptions = extraNouveauDeviceOptions;
+
+  # the have() function is deprecated and not available to bash completions the
+  # way they are currently loaded in NixOS, so use _have. See #10936
+  postPatch = ''
+    substituteInPlace scripts/bash_completion/bumblebee \
+      --replace "have optirun" "_have optirun"
+  '';
 
   preConfigure = ''
     # Substitute the path to the actual modinfo program in module.c.
@@ -114,12 +88,16 @@ in stdenv.mkDerivation {
 
     # Apply configuration options
     substituteInPlace conf/xorg.conf.nvidia \
-      --subst-var deviceOptions
+      --subst-var nvidiaDeviceOptions
+
+    substituteInPlace conf/xorg.conf.nouveau \
+      --subst-var nouveauDeviceOptions
   '';
 
   # Build-time dependencies of bumblebeed and optirun.
   # Note that it has several runtime dependencies.
-  buildInputs = [ stdenv makeWrapper pkgconfig help2man libX11 glib libbsd ];
+  buildInputs = [ libX11 glib libbsd ];
+  nativeBuildInputs = [ makeWrapper pkgconfig help2man ];
 
   # The order of LDPATH is very specific: First X11 then the host
   # environment then the optional sub architecture paths.
@@ -130,33 +108,33 @@ in stdenv.mkDerivation {
   # include the sub architecture components.
   configureFlags = [
     "--with-udev-rules=$out/lib/udev/rules.d"
-    "CONF_DRIVER=nvidia"
-    "CONF_DRIVER_MODULE_NVIDIA=nvidia"
-    "CONF_LDPATH_NVIDIA=${x11Env}/lib:${ldPathString}"
-    "CONF_MODPATH_NVIDIA=${hostEnv}/lib/xorg/modules,${x11Env}/lib/xorg/modules"
+    # see #10282
+    #"CONF_PRIMUS_LD_PATH=${primusLibs}"
+  ] ++ lib.optionals useNvidia [
+    "CONF_LDPATH_NVIDIA=${nvidiaLibs}"
+    "CONF_MODPATH_NVIDIA=${nvidia_x11}/lib/xorg/modules"
+  ];
+
+  CFLAGS = [
+    "-DX_MODULE_APPENDS=\\\"${xmodules}\\\""
+    "-DX_XKB_DIR=\\\"${xkeyboard_config}/etc/X11/xkb\\\""
   ];
 
-  # create a wrapper environment for bumblebeed and optirun
   postInstall = ''
     wrapProgram "$out/sbin/bumblebeed" \
-      --prefix PATH : "${x11Env}/sbin:${x11Env}/bin:${hostEnv}/bin:\$PATH" \
-      --prefix LD_LIBRARY_PATH : "${x11Env}/lib:${hostEnv}/lib:\$LD_LIBRARY_PATH" \
-      --set FONTCONFIG_FILE "/etc/fonts/fonts.conf" \
-      --set XKB_BINDIR "${xorg.xkbcomp}/bin" \
-      --set XKB_DIR "${xkeyboard_config}/etc/X11/xkb"
+      --set XKB_BINDIR "${xkbcomp}/bin" \
+      --prefix PATH : "${bbdPath}" \
+      --prefix LD_LIBRARY_PATH : "${bbdLibs}"
 
     wrapProgram "$out/bin/optirun" \
-      --prefix PATH : "${hostEnv}/bin"
-  '' + (if i686Env == null
-    then ""
-    else ''
-    makeWrapper "$out/bin/.optirun-wrapped" "$out/bin/optirun32" \
-      --prefix PATH : "${i686Env}/bin"
-  '');
-
-  meta = {
+      --prefix PATH : "${virtualgl}/bin"
+  '';
+
+  meta = with stdenv.lib; {
     homepage = http://github.com/Bumblebee-Project/Bumblebee;
     description = "Daemon for managing Optimus videocards (power-on/off, spawns xservers)";
-    license = stdenv.lib.licenses.gpl3;
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ abbradar ];
   };
 }
diff --git a/pkgs/tools/X11/bumblebee/nixos.patch b/pkgs/tools/X11/bumblebee/nixos.patch
new file mode 100644
index 00000000000..00fb8ad7a53
--- /dev/null
+++ b/pkgs/tools/X11/bumblebee/nixos.patch
@@ -0,0 +1,81 @@
+diff --git a/conf/xorg.conf.nouveau b/conf/xorg.conf.nouveau
+index 87e48cb..60d6eaf 100644
+--- a/conf/xorg.conf.nouveau
++++ b/conf/xorg.conf.nouveau
+@@ -15,4 +15,5 @@ Section "Device"
+ #   This Setting is needed on Ubuntu 13.04.
+ #   BusID "PCI:01:00:0"
+ 
++@nouveauDeviceOptions@
+ EndSection
+diff --git a/conf/xorg.conf.nvidia b/conf/xorg.conf.nvidia
+index c3107f9..17072f4 100644
+--- a/conf/xorg.conf.nvidia
++++ b/conf/xorg.conf.nvidia
+@@ -29,6 +29,6 @@ Section "Device"
+     Option "ProbeAllGpus" "false"
+ 
+     Option "NoLogo" "true"
+-    Option "UseEDID" "false"
+-    Option "UseDisplayDevice" "none"
++
++@nvidiaDeviceOptions@
+ EndSection
+diff --git a/src/bbsecondary.c b/src/bbsecondary.c
+index 71a6b73..a682d8a 100644
+--- a/src/bbsecondary.c
++++ b/src/bbsecondary.c
+@@ -145,6 +145,23 @@ bool start_secondary(bool need_secondary) {
+     }
+ 
+     bb_log(LOG_INFO, "Starting X server on display %s.\n", bb_config.x_display);
++    const char mod_appends[] = X_MODULE_APPENDS;
++
++    char *mod_path;
++    int pathlen = strlen(bb_config.mod_path);
++    if (pathlen == 0) {
++      mod_path = mod_appends;
++    } else {
++      mod_path = malloc(pathlen + 1 + sizeof(mod_appends));
++      if (!mod_path) {
++        set_bb_error("Could not allocate memory for modules path\n");
++        return false;
++      }
++      strcpy(mod_path, bb_config.mod_path);
++      mod_path[pathlen] = ',';
++      strcpy(mod_path + pathlen + 1, mod_appends);
++    }
++
+     char *x_argv[] = {
+       XORG_BINARY,
+       bb_config.x_display,
+@@ -153,24 +170,25 @@ bool start_secondary(bool need_secondary) {
+       "-sharevts",
+       "-nolisten", "tcp",
+       "-noreset",
++      "-logfile", "/var/log/X.bumblebee.log",
++      "-xkbdir", X_XKB_DIR,
+       "-verbose", "3",
+       "-isolateDevice", pci_id,
+-      "-modulepath", bb_config.mod_path, // keep last
++      "-modulepath", mod_path,
+       NULL
+     };
+     enum {n_x_args = sizeof(x_argv) / sizeof(x_argv[0])};
+-    if (!*bb_config.mod_path) {
+-      x_argv[n_x_args - 3] = 0; //remove -modulepath if not set
+-    }
+     //close any previous pipe, if it (still) exists
+     if (bb_status.x_pipe[0] != -1){close(bb_status.x_pipe[0]); bb_status.x_pipe[0] = -1;}
+     if (bb_status.x_pipe[1] != -1){close(bb_status.x_pipe[1]); bb_status.x_pipe[1] = -1;}
+     //create a new pipe
+     if (pipe2(bb_status.x_pipe, O_NONBLOCK | O_CLOEXEC)){
+       set_bb_error("Could not create output pipe for X");
++      if (pathlen > 0) free(mod_path);
+       return false;
+     }
+     bb_status.x_pid = bb_run_fork_ld_redirect(x_argv, bb_config.ld_path, bb_status.x_pipe[1]);
++    if (pathlen > 0) free(mod_path);
+     //close the end of the pipe that is not ours
+     if (bb_status.x_pipe[1] != -1){close(bb_status.x_pipe[1]); bb_status.x_pipe[1] = -1;}
+   }
diff --git a/pkgs/tools/X11/bumblebee/nvidia-conf.patch b/pkgs/tools/X11/bumblebee/nvidia-conf.patch
deleted file mode 100644
index f5535c417cf..00000000000
--- a/pkgs/tools/X11/bumblebee/nvidia-conf.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- bumblebee-3.2.1/conf/xorg.conf.nvidia
-+++ bumblebee-3.2.1/conf/xorg.conf.nvidia
-@@ -29,6 +29,5 @@ Section "Device"
-     Option "ProbeAllGpus" "false"
- 
-     Option "NoLogo" "true"
--    Option "UseEDID" "false"
--    Option "UseDisplayDevice" "none"
-+@deviceOptions@
- EndSection
-
diff --git a/pkgs/tools/X11/bumblebee/xopts.patch b/pkgs/tools/X11/bumblebee/xopts.patch
deleted file mode 100644
index 6fd3a6a0483..00000000000
--- a/pkgs/tools/X11/bumblebee/xopts.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- bumblebee-3.2.1/src/bbsecondary.c 2012-02-05 00:03:06.003439638 +0100
-+++ bumblebee-3.2.1/src/bbsecondary.c	2012-02-05 00:46:38.017382619 +0100
-@@ -149,6 +149,8 @@
-       "-sharevts",
-       "-nolisten", "tcp",
-       "-noreset",
-+      "-xkbdir", getenv("XKB_DIR"),
-+      "-logfile", "/var/log/X.bumblebee.log",
-       "-verbose", "3",
-       "-isolateDevice", pci_id,
-       "-modulepath",
diff --git a/pkgs/tools/X11/primus/builder.sh b/pkgs/tools/X11/primus/builder.sh
deleted file mode 100644
index 3c6b6afdc09..00000000000
--- a/pkgs/tools/X11/primus/builder.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-source $stdenv/setup
-
-cp -r $src src
-cd src
-
-export LIBDIR=$out/lib
-export PRIMUS_libGLa=$nvidia/lib/libGL.so
-export PRIMUS_libGLd=$mesa/lib/libGL.so
-export PRIMUS_LOAD_GLOBAL=$mesa/lib/libglapi.so
-
-make
-ln -s $LIBDIR/libGL.so.1 $LIBDIR/libGL.so
diff --git a/pkgs/tools/X11/primus/default.nix b/pkgs/tools/X11/primus/default.nix
index 1aa7909a43d..f0a971dde18 100644
--- a/pkgs/tools/X11/primus/default.nix
+++ b/pkgs/tools/X11/primus/default.nix
@@ -5,31 +5,18 @@
 # Other distributions do the same.
 { stdenv
 , primusLib
-, writeScript
+, writeScriptBin
 , primusLib_i686 ? null
+, useNvidia ? true
 }:
-with stdenv.lib;
+
 let
-  version = "1.0.0748176";
-  ldPath = makeLibraryPath ([primusLib] ++ optional (primusLib_i686 != null) primusLib_i686);
-  primusrun = writeScript "primusrun"
-''
+  primus = if useNvidia then primusLib else primusLib.override { nvidia_x11 = null; };
+  primus_i686 = if useNvidia then primusLib_i686 else primusLib_i686.override { nvidia_x11 = null; };
+  ldPath = stdenv.lib.makeLibraryPath ([primus] ++ stdenv.lib.optional (primusLib_i686 != null) primus_i686);
+
+in writeScriptBin "primusrun" ''
+  #!${stdenv.shell}
   export LD_LIBRARY_PATH=${ldPath}:$LD_LIBRARY_PATH
   exec "$@"
-'';
-in
-stdenv.mkDerivation {
-  name = "primus-${version}";
-  builder = writeScript "builder"
-  ''
-  source $stdenv/setup
-  mkdir -p $out/bin
-  cp ${primusrun} $out/bin/primusrun
-  '';
-
-  meta = {
-    homepage = https://github.com/amonakov/primus;
-    description = "Faster OpenGL offloading for Bumblebee";
-    maintainers = with maintainers; [ coconnor ];
-  };
-}
+''
diff --git a/pkgs/tools/X11/primus/lib.nix b/pkgs/tools/X11/primus/lib.nix
index 96a4ac16c9b..ce805933109 100644
--- a/pkgs/tools/X11/primus/lib.nix
+++ b/pkgs/tools/X11/primus/lib.nix
@@ -1,20 +1,35 @@
 { stdenv, fetchgit
 , xlibsWrapper, mesa
-, nvidia
+, nvidia_x11 ? null
+, libX11
 }:
-let
-  version = "1.0.0748176";
-in
+
 stdenv.mkDerivation {
-  name = "primus-lib-${version}";
+  name = "primus-lib-20151204";
+
   src = fetchgit {
     url = git://github.com/amonakov/primus.git;
-    rev = "074817614c014e3a99259388cb18fd54648b659a";
-    sha256 = "0mrh432md6zrm16avxyk57mgszrqpgwdjahspchvlaccqxp3x82v";
+    rev = "d1afbf6fce2778c0751eddf19db9882e04f18bfd";
+    sha256 = "8f095b5e2030cdb155a42a49873832843c1e4dc3087a6fb94d198de982609923";
   };
 
-  inherit nvidia mesa;
+  buildInputs = [ libX11 mesa ];
+
+  makeFlags = [ "LIBDIR=$(out)/lib"
+                "PRIMUS_libGLa=${if nvidia_x11 == null then mesa else nvidia_x11}/lib/libGL.so"
+                "PRIMUS_libGLd=${mesa}/lib/libGL.so"
+                "PRIMUS_LOAD_GLOBAL=${mesa}/lib/libglapi.so"
+              ];
 
-  buildInputs = [ xlibsWrapper mesa ];
-  builder = ./builder.sh;
+  installPhase = ''
+    ln -s $out/lib/libGL.so.1 $out/lib/libGL.so
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Low-overhead client-side GPU offloading";
+    homepage = https://github.com/amonakov/primus;
+    platforms = platforms.linux;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ abbradar ];
+  };
 }
diff --git a/pkgs/tools/X11/virtualgl/default.nix b/pkgs/tools/X11/virtualgl/default.nix
index ceeadbaafaa..7203229c47b 100644
--- a/pkgs/tools/X11/virtualgl/default.nix
+++ b/pkgs/tools/X11/virtualgl/default.nix
@@ -1,33 +1,22 @@
-{ stdenv, fetchurl, mesa, libX11, openssl, libXext
-, libjpeg_turbo, cmake }:
+{ lib, buildEnv
+, virtualglLib
+, virtualglLib_i686 ? null
+}:
 
-let
-  version = "2.3.2";
-in
-stdenv.mkDerivation {
-  name = "virtualgl-${version}";
-  src = fetchurl {
-    url = "mirror://sourceforge/virtualgl/VirtualGL-${version}.tar.gz";
-    sha256 = "062lrhd8yr13ch4wpgzxdabqs92j4q7fcl3a0c3sdlav4arspqmy";
-  };
+buildEnv {
+  name = "virtualgl-${lib.getVersion virtualglLib}";
 
-  patches = [ ./xshm.patch ./fixturbopath.patch ];
+  paths = [ virtualglLib ];
 
-  prePatch = ''
-    sed -i s,LD_PRELOAD=lib,LD_PRELOAD=$out/lib/lib, server/vglrun
+  postBuild = lib.optionalString (virtualglLib_i686 != null) ''
+    rm $out/fakelib
+    # workaround for #4621
+    rm $out/bin
+    mkdir $out/bin
+    for i in ${virtualglLib}/bin/*; do
+      ln -s $i $out/bin
+    done
+    ln -s ${virtualglLib}/bin/.vglrun.vars64 $out/bin
+    ln -s ${virtualglLib_i686}/bin/.vglrun.vars32 $out/bin
   '';
-
-  cmakeFlags = [ "-DTJPEG_LIBRARY=${libjpeg_turbo}/lib/libturbojpeg.so" ];
-
-  preInstall = ''
-    export makeFlags="prefix=$out"
-  '';
-
-  buildInputs = [ cmake mesa libX11 openssl libXext libjpeg_turbo ];
-
-  meta = {
-    homepage = http://www.virtualgl.org/;
-    description = "X11 GL rendering in a remote computer with full 3D hw acceleration";
-    license = stdenv.lib.licenses.free; # many parts under different free licenses
-  };
 }
diff --git a/pkgs/tools/X11/virtualgl/fixturbopath.patch b/pkgs/tools/X11/virtualgl/fixturbopath.patch
deleted file mode 100644
index 2177555e33a..00000000000
--- a/pkgs/tools/X11/virtualgl/fixturbopath.patch
+++ /dev/null
@@ -1,16 +0,0 @@
---- VirtualGL-2.3/cmakescripts/FindTurboJPEG.cmake.orig 2012-02-02 17:33:49.496283001 +0100
-+++ VirtualGL-2.3/cmakescripts/FindTurboJPEG.cmake      2012-02-02 17:44:18.772483239 +0100
-@@ -40,8 +40,11 @@
-        endif()
- endif()
- 
--set(TJPEG_LIBRARY ${DEFAULT_TJPEG_LIBRARY} CACHE PATH
--  "TurboJPEG library path (default: ${DEFAULT_TJPEG_LIBRARY})")
-+if(NOT TJPEG_LIBRARY)
-+       message(STATUS "TJPEG_LIBRARY environment variable not set")
-+       set(TJPEG_LIBRARY ${DEFAULT_TJPEG_LIBRARY} CACHE PATH
-+               "TurboJPEG library path (default: ${DEFAULT_TJPEG_LIBRARY})")
-+endif()
- 
- if(WIN32)
-        set(CMAKE_REQUIRED_DEFINITIONS -MT)
diff --git a/pkgs/tools/X11/virtualgl/lib.nix b/pkgs/tools/X11/virtualgl/lib.nix
new file mode 100644
index 00000000000..5c4456f6348
--- /dev/null
+++ b/pkgs/tools/X11/virtualgl/lib.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, cmake, mesa, libX11, libXv, libjpeg_turbo, fltk }:
+
+let
+  version = "2.4.1";
+in
+stdenv.mkDerivation {
+  name = "virtualgl-lib-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/virtualgl/VirtualGL-${version}.tar.gz";
+    sha256 = "0bngb4hrl0kn19qb3sa6mg6dbaahfk09gx2ng18l00xm6pmwd298";
+  };
+
+  cmakeFlags = [ "-DVGL_SYSTEMFLTK=1" "-DTJPEG_LIBRARY=${libjpeg_turbo}/lib/libturbojpeg.so" ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ libjpeg_turbo mesa fltk libX11 libXv ];
+
+  meta = with stdenv.lib; {
+    homepage = http://www.virtualgl.org/;
+    description = "X11 GL rendering in a remote computer with full 3D hw acceleration";
+    license = licenses.free; # many parts under different free licenses
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/pkgs/tools/X11/virtualgl/xshm.patch b/pkgs/tools/X11/virtualgl/xshm.patch
deleted file mode 100644
index 2ca81b559ea..00000000000
--- a/pkgs/tools/X11/virtualgl/xshm.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/util/fbx.c b/util/fbx.c
-index 06ea835..0d89842 100644
---- a/util/fbx.c
-+++ b/util/fbx.c
-@@ -15,6 +15,8 @@
- // This library abstracts fast frame buffer access
- #include <string.h>
- #include <stdlib.h>
-+#include <X11/Xmd.h>
-+#include <X11/extensions/shmproto.h>
- #include "fbx.h"
- 
- #define MINWIDTH  160
diff --git a/pkgs/tools/X11/xpra/default.nix b/pkgs/tools/X11/xpra/default.nix
index fe95b2b685e..7ea43b1c1f2 100644
--- a/pkgs/tools/X11/xpra/default.nix
+++ b/pkgs/tools/X11/xpra/default.nix
@@ -1,8 +1,8 @@
 { stdenv, fetchurl, buildPythonPackage, pythonPackages
 , python, cython, pkgconfig
-, xorg, gtk, glib, pango, cairo, gdk_pixbuf, pygtk, atk, pygobject, pycairo
+, xorg, gtk, glib, pango, cairo, gdk_pixbuf, atk, pycairo
 , makeWrapper, xkbcomp, xorgserver, getopt, xauth, utillinux, which, fontsConf, xkeyboard_config
-, ffmpeg, x264, libvpx, pil, libwebp
+, ffmpeg, x264, libvpx, libwebp
 , libfakeXinerama }:
 
 buildPythonPackage rec {
@@ -29,8 +29,8 @@ buildPythonPackage rec {
     makeWrapper
   ];
 
-  propagatedBuildInputs = [
-    pil pygtk pygobject pythonPackages.rencode
+  propagatedBuildInputs = with pythonPackages; [
+    pillow pygtk pygobject
   ];
 
   postPatch = ''
diff --git a/pkgs/tools/admin/awscli/default.nix b/pkgs/tools/admin/awscli/default.nix
deleted file mode 100644
index c4de8090e05..00000000000
--- a/pkgs/tools/admin/awscli/default.nix
+++ /dev/null
@@ -1,40 +0,0 @@
-{ stdenv, fetchFromGitHub, pythonPackages, groff }:
-
-pythonPackages.buildPythonPackage rec {
-  name = "awscli-${version}";
-  version = "1.7.47";
-  namePrefix = "";
-
-  src = fetchFromGitHub {
-    owner = "aws";
-    repo = "aws-cli";
-    rev = version;
-    sha256 = "1955y1ar2mqzqgfngpwp8pc78wphh1qdgwwy0gs6i352jaqzkvwi";
-  };
-
-  propagatedBuildInputs = [
-    pythonPackages.botocore_1_1_10
-    pythonPackages.bcdoc
-    pythonPackages.six
-    pythonPackages.colorama
-    pythonPackages.docutils
-    pythonPackages.rsa
-    pythonPackages.pyasn1
-    groff
-  ];
-
-  postInstall = ''
-    mkdir -p $out/etc/bash_completion.d
-    echo "complete -C $out/bin/aws_completer aws" > $out/etc/bash_completion.d/awscli
-    mkdir -p $out/share/zsh/site-functions
-    mv $out/bin/aws_zsh_completer.sh $out/share/zsh/site-functions
-    rm $out/bin/aws.cmd
-  '';
-
-  meta = {
-    homepage = https://aws.amazon.com/cli/;
-    description = "Unified tool to manage your AWS services";
-    license = stdenv.lib.licenses.asl20;
-    maintainers = with stdenv.lib.maintainers; [ muflax ];
-  };
-}
diff --git a/pkgs/tools/admin/letsencrypt/default.nix b/pkgs/tools/admin/letsencrypt/default.nix
index 8e818aee9cf..2c74a677b91 100644
--- a/pkgs/tools/admin/letsencrypt/default.nix
+++ b/pkgs/tools/admin/letsencrypt/default.nix
@@ -1,27 +1,13 @@
 { stdenv, pythonPackages, fetchurl, dialog }:
 
-let
+pythonPackages.buildPythonPackage rec {
+  version = "0.1.0";
+  name = "letsencrypt-${version}";
+
   src = fetchurl {
     url = "https://github.com/letsencrypt/letsencrypt/archive/v${version}.tar.gz";
-    sha256 = "00p94pmli4lr5l3vqi11374p9jxiqir1ygx89zgfm4db47srx41z";
+    sha256 = "056y5bsmpc4ya5xxals4ypzsm927j6n5kwby3bjc03sy3sscf6hw";
   };
-  version = "0.0.0.dev20151123";
-  acme = pythonPackages.buildPythonPackage rec {
-    name = "acme-${version}";
-    inherit src version;
-
-    propagatedBuildInputs = with pythonPackages; [
-      cryptography pyasn1 pyopenssl pyRFC3339 pytz requests2 six werkzeug mock
-      ndg-httpsclient
-    ];
-
-    buildInputs = with pythonPackages; [ nose ];
-
-    sourceRoot = "letsencrypt-${version}/acme";
-  };
-in pythonPackages.buildPythonPackage rec {
-  name = "letsencrypt-${version}";
-  inherit src version;
 
   propagatedBuildInputs = with pythonPackages; [
     zope_interface zope_component six requests2 pytz pyopenssl psutil mock acme
diff --git a/pkgs/tools/admin/simp_le/default.nix b/pkgs/tools/admin/simp_le/default.nix
new file mode 100644
index 00000000000..5f945309aac
--- /dev/null
+++ b/pkgs/tools/admin/simp_le/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchFromGitHub, pythonPackages }:
+
+pythonPackages.buildPythonPackage rec {
+  name = "simp_le-20151205";
+
+  src = fetchFromGitHub {
+    owner = "kuba";
+    repo = "simp_le";
+    rev = "976a33830759e66610970f92f6ec1a656a2c8335";
+    sha256 = "0bfa5081rmjjg9sii6pn2dskd1wh0dgrf9ic9hpisawrk0y0739i";
+  };
+
+  propagatedBuildInputs = with pythonPackages; [ acme cryptography pytz requests2 ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/kuba/simp_le;
+    description = "Simple Let's Encrypt client";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ gebner ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/archivers/unrar/default.nix b/pkgs/tools/archivers/unrar/default.nix
index e0716a1b1d3..27fd7c8c1d7 100644
--- a/pkgs/tools/archivers/unrar/default.nix
+++ b/pkgs/tools/archivers/unrar/default.nix
@@ -29,7 +29,7 @@ stdenv.mkDerivation {
     description = "Utility for RAR archives";
     homepage = http://www.rarlab.com/;
     license = licenses.gpl2;
-    maintainers = [ maintainers.emery ];
+    maintainers = [ maintainers.ehmry ];
     platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/audio/dir2opus/default.nix b/pkgs/tools/audio/dir2opus/default.nix
index bc3eaf9bf53..4875ebf504b 100644
--- a/pkgs/tools/audio/dir2opus/default.nix
+++ b/pkgs/tools/audio/dir2opus/default.nix
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
 
   meta = with stdenv.lib;
     { homepage = https://github.com/ehmry/dir2opus;
-      maintainers = [ maintainers.emery ];
+      maintainers = [ maintainers.ehmry ];
       license = licenses.gpl2;
     };
 }
\ No newline at end of file
diff --git a/pkgs/tools/audio/liquidsoap/full.nix b/pkgs/tools/audio/liquidsoap/full.nix
index 859fe4bb183..eeebea5d747 100644
--- a/pkgs/tools/audio/liquidsoap/full.nix
+++ b/pkgs/tools/audio/liquidsoap/full.nix
@@ -38,7 +38,7 @@ stdenv.mkDerivation {
   meta = with stdenv.lib; {
     description = "Swiss-army knife for multimedia streaming";
     homepage = http://liquidsoap.fm/;
-    maintainers = with maintainers; [ emery ];
+    maintainers = with maintainers; [ ehmry ];
     license = licenses.gpl2;
     platforms = ocaml.meta.platforms;
   };
diff --git a/pkgs/tools/backup/backup/Gemfile b/pkgs/tools/backup/backup/Gemfile
new file mode 100644
index 00000000000..2f1825b590e
--- /dev/null
+++ b/pkgs/tools/backup/backup/Gemfile
@@ -0,0 +1,23 @@
+source "https://rubygems.org"
+
+gem 'backup'
+gem 'thor'
+gem 'open4'
+gem 'fog'
+gem 'unf' 
+gem 'dropbox-sdk', '= 1.5.1' # patched
+gem 'net-ssh'
+gem 'net-scp'
+gem 'net-sftp'
+gem 'mail', '= 2.5.4' # patched
+gem 'pagerduty'
+gem 'twitter'
+gem 'hipchat'
+gem 'flowdock'
+gem 'json'
+gem 'dogapi'
+gem 'aws-ses'
+gem 'rspec'
+gem 'fuubar'
+gem 'mocha'
+gem 'timecop'
diff --git a/pkgs/tools/backup/backup/Gemfile.lock b/pkgs/tools/backup/backup/Gemfile.lock
new file mode 100644
index 00000000000..0725ded8add
--- /dev/null
+++ b/pkgs/tools/backup/backup/Gemfile.lock
@@ -0,0 +1,276 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    CFPropertyList (2.3.1)
+    addressable (2.3.5)
+    atomic (1.1.14)
+    aws-ses (0.5.0)
+      builder
+      mail (> 2.2.5)
+      mime-types
+      xml-simple
+    backup (4.2.2)
+      CFPropertyList (= 2.3.1)
+      addressable (= 2.3.5)
+      atomic (= 1.1.14)
+      aws-ses (= 0.5.0)
+      buftok (= 0.2.0)
+      builder (= 3.2.2)
+      descendants_tracker (= 0.0.3)
+      dogapi (= 1.11.0)
+      dropbox-sdk (= 1.5.1)
+      equalizer (= 0.0.9)
+      excon (= 0.44.4)
+      faraday (= 0.8.8)
+      fission (= 0.5.0)
+      flowdock (= 0.4.0)
+      fog (= 1.28.0)
+      fog-atmos (= 0.1.0)
+      fog-aws (= 0.1.1)
+      fog-brightbox (= 0.7.1)
+      fog-core (= 1.29.0)
+      fog-ecloud (= 0.0.2)
+      fog-json (= 1.0.0)
+      fog-profitbricks (= 0.0.2)
+      fog-radosgw (= 0.0.3)
+      fog-riakcs (= 0.1.0)
+      fog-sakuracloud (= 1.0.0)
+      fog-serverlove (= 0.1.1)
+      fog-softlayer (= 0.4.1)
+      fog-storm_on_demand (= 0.1.0)
+      fog-terremark (= 0.0.4)
+      fog-vmfusion (= 0.0.1)
+      fog-voxel (= 0.0.2)
+      fog-xml (= 0.1.1)
+      formatador (= 0.2.5)
+      hipchat (= 1.0.1)
+      http (= 0.5.0)
+      http_parser.rb (= 0.6.0)
+      httparty (= 0.12.0)
+      inflecto (= 0.0.2)
+      ipaddress (= 0.8.0)
+      json (= 1.8.2)
+      mail (= 2.5.4)
+      memoizable (= 0.4.0)
+      mime-types (= 1.25.1)
+      mini_portile (= 0.6.2)
+      multi_json (= 1.10.1)
+      multi_xml (= 0.5.5)
+      multipart-post (= 1.2.0)
+      net-scp (= 1.2.1)
+      net-sftp (= 2.1.2)
+      net-ssh (= 2.9.2)
+      nokogiri (= 1.6.6.2)
+      open4 (= 1.3.0)
+      pagerduty (= 2.0.0)
+      polyglot (= 0.3.3)
+      simple_oauth (= 0.2.0)
+      thor (= 0.18.1)
+      thread_safe (= 0.1.3)
+      treetop (= 1.4.15)
+      twitter (= 5.5.0)
+      unf (= 0.1.3)
+      unf_ext (= 0.0.6)
+      xml-simple (= 1.1.4)
+    buftok (0.2.0)
+    builder (3.2.2)
+    descendants_tracker (0.0.3)
+    diff-lcs (1.2.5)
+    dogapi (1.11.0)
+      json (>= 1.5.1)
+    dropbox-sdk (1.5.1)
+      json
+    equalizer (0.0.9)
+    excon (0.44.4)
+    faraday (0.8.8)
+      multipart-post (~> 1.2.0)
+    fission (0.5.0)
+      CFPropertyList (~> 2.2)
+    flowdock (0.4.0)
+      httparty (~> 0.7)
+      multi_json
+    fog (1.28.0)
+      fog-atmos
+      fog-aws (~> 0.0)
+      fog-brightbox (~> 0.4)
+      fog-core (~> 1.27, >= 1.27.3)
+      fog-ecloud
+      fog-json
+      fog-profitbricks
+      fog-radosgw (>= 0.0.2)
+      fog-riakcs
+      fog-sakuracloud (>= 0.0.4)
+      fog-serverlove
+      fog-softlayer
+      fog-storm_on_demand
+      fog-terremark
+      fog-vmfusion
+      fog-voxel
+      fog-xml (~> 0.1.1)
+      ipaddress (~> 0.5)
+      nokogiri (~> 1.5, >= 1.5.11)
+    fog-atmos (0.1.0)
+      fog-core
+      fog-xml
+    fog-aws (0.1.1)
+      fog-core (~> 1.27)
+      fog-json (~> 1.0)
+      fog-xml (~> 0.1)
+      ipaddress (~> 0.8)
+    fog-brightbox (0.7.1)
+      fog-core (~> 1.22)
+      fog-json
+      inflecto (~> 0.0.2)
+    fog-core (1.29.0)
+      builder
+      excon (~> 0.38)
+      formatador (~> 0.2)
+      mime-types
+      net-scp (~> 1.1)
+      net-ssh (>= 2.1.3)
+    fog-ecloud (0.0.2)
+      fog-core
+      fog-xml
+    fog-json (1.0.0)
+      multi_json (~> 1.0)
+    fog-profitbricks (0.0.2)
+      fog-core
+      fog-xml
+      nokogiri
+    fog-radosgw (0.0.3)
+      fog-core (>= 1.21.0)
+      fog-json
+      fog-xml (>= 0.0.1)
+    fog-riakcs (0.1.0)
+      fog-core
+      fog-json
+      fog-xml
+    fog-sakuracloud (1.0.0)
+      fog-core
+      fog-json
+    fog-serverlove (0.1.1)
+      fog-core
+      fog-json
+    fog-softlayer (0.4.1)
+      fog-core
+      fog-json
+    fog-storm_on_demand (0.1.0)
+      fog-core
+      fog-json
+    fog-terremark (0.0.4)
+      fog-core
+      fog-xml
+    fog-vmfusion (0.0.1)
+      fission
+      fog-core
+    fog-voxel (0.0.2)
+      fog-core
+      fog-xml
+    fog-xml (0.1.1)
+      fog-core
+      nokogiri (~> 1.5, >= 1.5.11)
+    formatador (0.2.5)
+    fuubar (2.0.0)
+      rspec (~> 3.0)
+      ruby-progressbar (~> 1.4)
+    hipchat (1.0.1)
+      httparty
+    http (0.5.0)
+      http_parser.rb
+    http_parser.rb (0.6.0)
+    httparty (0.12.0)
+      json (~> 1.8)
+      multi_xml (>= 0.5.2)
+    inflecto (0.0.2)
+    ipaddress (0.8.0)
+    json (1.8.2)
+    mail (2.5.4)
+      mime-types (~> 1.16)
+      treetop (~> 1.4.8)
+    memoizable (0.4.0)
+      thread_safe (~> 0.1.3)
+    metaclass (0.0.4)
+    mime-types (1.25.1)
+    mini_portile (0.6.2)
+    mocha (1.1.0)
+      metaclass (~> 0.0.1)
+    multi_json (1.10.1)
+    multi_xml (0.5.5)
+    multipart-post (1.2.0)
+    net-scp (1.2.1)
+      net-ssh (>= 2.6.5)
+    net-sftp (2.1.2)
+      net-ssh (>= 2.6.5)
+    net-ssh (2.9.2)
+    nokogiri (1.6.6.2)
+      mini_portile (~> 0.6.0)
+    open4 (1.3.0)
+    pagerduty (2.0.0)
+      json (>= 1.7.7)
+    polyglot (0.3.3)
+    rspec (3.4.0)
+      rspec-core (~> 3.4.0)
+      rspec-expectations (~> 3.4.0)
+      rspec-mocks (~> 3.4.0)
+    rspec-core (3.4.1)
+      rspec-support (~> 3.4.0)
+    rspec-expectations (3.4.0)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.4.0)
+    rspec-mocks (3.4.0)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.4.0)
+    rspec-support (3.4.1)
+    ruby-progressbar (1.7.5)
+    simple_oauth (0.2.0)
+    thor (0.18.1)
+    thread_safe (0.1.3)
+      atomic
+    timecop (0.8.0)
+    treetop (1.4.15)
+      polyglot
+      polyglot (>= 0.3.1)
+    twitter (5.5.0)
+      addressable (~> 2.3)
+      buftok (~> 0.2.0)
+      descendants_tracker (~> 0.0.3)
+      equalizer (~> 0.0.9)
+      faraday (>= 0.8, < 0.10)
+      http (~> 0.5.0)
+      http_parser.rb (~> 0.6.0)
+      json (~> 1.8)
+      memoizable (~> 0.4.0)
+      simple_oauth (~> 0.2.0)
+    unf (0.1.3)
+      unf_ext
+    unf_ext (0.0.6)
+    xml-simple (1.1.4)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  aws-ses
+  backup
+  dogapi
+  dropbox-sdk (= 1.5.1)
+  flowdock
+  fog
+  fuubar
+  hipchat
+  json
+  mail (= 2.5.4)
+  mocha
+  net-scp
+  net-sftp
+  net-ssh
+  open4
+  pagerduty
+  rspec
+  thor
+  timecop
+  twitter
+  unf
+
+BUNDLED WITH
+   1.10.6
diff --git a/pkgs/tools/backup/backup/default.nix b/pkgs/tools/backup/backup/default.nix
new file mode 100644
index 00000000000..1890e8121c1
--- /dev/null
+++ b/pkgs/tools/backup/backup/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, lib, bundlerEnv, ruby_2_1, curl }:
+
+bundlerEnv {
+  name = "backup_v4";
+
+  ruby = ruby_2_1;
+  gemfile = ./Gemfile;
+  lockfile = ./Gemfile.lock;
+  gemset = ./gemset.nix;
+
+  buildInputs = [ curl ];
+
+  meta = with lib; {
+    description = "Easy full stack backup operations on UNIX-like systems";
+    homepage    = http://backup.github.io/backup/v4/;
+    license     = licenses.mit;
+    maintainers = [ maintainers.palo ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/backup/backup/gemset.nix b/pkgs/tools/backup/backup/gemset.nix
new file mode 100644
index 00000000000..e2de995996e
--- /dev/null
+++ b/pkgs/tools/backup/backup/gemset.nix
@@ -0,0 +1,778 @@
+{
+  "CFPropertyList" = {
+    version = "2.3.1";
+    source = {
+      type = "gem";
+      sha256 = "1wnk3gxnhfafbhgp0ic7qhzlx3lhv04v8nws2s31ii5s8135hs6k";
+    };
+  };
+  "addressable" = {
+    version = "2.3.5";
+    source = {
+      type = "gem";
+      sha256 = "11hv69v6h39j7m4v51a4p7my7xwjbhxbsg3y7ja156z7by10wkg7";
+    };
+  };
+  "atomic" = {
+    version = "1.1.14";
+    source = {
+      type = "gem";
+      sha256 = "09dzi1gxr5yj273s6s6ss7l2sq4ayavpg95561kib3n4kzvxrhk4";
+    };
+  };
+  "aws-ses" = {
+    version = "0.5.0";
+    source = {
+      type = "gem";
+      sha256 = "1kpfcdnakngypgkzn1f8cl8p4jg1rvmx3ag4ggcl0c7gs91ki8k3";
+    };
+    dependencies = [
+      "builder"
+      "mail"
+      "mime-types"
+      "xml-simple"
+    ];
+  };
+  "backup" = {
+    version = "4.2.2";
+    source = {
+      type = "gem";
+      sha256 = "0fj5jq6s1kpgp4bl1sr7qw1dgyc9zk0afh6mrfgbscg82irfxi1p";
+    };
+    dependencies = [
+      "CFPropertyList"
+      "addressable"
+      "atomic"
+      "aws-ses"
+      "buftok"
+      "builder"
+      "descendants_tracker"
+      "dogapi"
+      "dropbox-sdk"
+      "equalizer"
+      "excon"
+      "faraday"
+      "fission"
+      "flowdock"
+      "fog"
+      "fog-atmos"
+      "fog-aws"
+      "fog-brightbox"
+      "fog-core"
+      "fog-ecloud"
+      "fog-json"
+      "fog-profitbricks"
+      "fog-radosgw"
+      "fog-riakcs"
+      "fog-sakuracloud"
+      "fog-serverlove"
+      "fog-softlayer"
+      "fog-storm_on_demand"
+      "fog-terremark"
+      "fog-vmfusion"
+      "fog-voxel"
+      "fog-xml"
+      "formatador"
+      "hipchat"
+      "http"
+      "http_parser.rb"
+      "httparty"
+      "inflecto"
+      "ipaddress"
+      "json"
+      "mail"
+      "memoizable"
+      "mime-types"
+      "mini_portile"
+      "multi_json"
+      "multi_xml"
+      "multipart-post"
+      "net-scp"
+      "net-sftp"
+      "net-ssh"
+      "nokogiri"
+      "open4"
+      "pagerduty"
+      "polyglot"
+      "simple_oauth"
+      "thor"
+      "thread_safe"
+      "treetop"
+      "twitter"
+      "unf"
+      "unf_ext"
+      "xml-simple"
+    ];
+  };
+  "buftok" = {
+    version = "0.2.0";
+    source = {
+      type = "gem";
+      sha256 = "1rzsy1vy50v55x9z0nivf23y0r9jkmq6i130xa75pq9i8qrn1mxs";
+    };
+  };
+  "builder" = {
+    version = "3.2.2";
+    source = {
+      type = "gem";
+      sha256 = "14fii7ab8qszrvsvhz6z2z3i4dw0h41a62fjr2h1j8m41vbrmyv2";
+    };
+  };
+  "descendants_tracker" = {
+    version = "0.0.3";
+    source = {
+      type = "gem";
+      sha256 = "0819j80k85j62qjg90v8z8s3h4nf3v6afxxz73hl6iqxr2dhgmq1";
+    };
+  };
+  "diff-lcs" = {
+    version = "1.2.5";
+    source = {
+      type = "gem";
+      sha256 = "1vf9civd41bnqi6brr5d9jifdw73j9khc6fkhfl1f8r9cpkdvlx1";
+    };
+  };
+  "dogapi" = {
+    version = "1.11.0";
+    source = {
+      type = "gem";
+      sha256 = "01v5jphxbqdn8h0pifgl97igcincd1pjwd177a80ig9fpwndd19d";
+    };
+    dependencies = [
+      "json"
+    ];
+  };
+  "dropbox-sdk" = {
+    version = "1.5.1";
+    source = {
+      type = "gem";
+      sha256 = "1zrzxzjfgwkdnn5vjvkhhjh10azyy28982hpkw5xv0kwrqg07axj";
+    };
+    dependencies = [
+      "json"
+    ];
+  };
+  "equalizer" = {
+    version = "0.0.9";
+    source = {
+      type = "gem";
+      sha256 = "1i6vfh2lzyrvvm35qa9cf3xh2gxj941x0v78pp0c7bwji3f5hawr";
+    };
+  };
+  "excon" = {
+    version = "0.44.4";
+    source = {
+      type = "gem";
+      sha256 = "062ynrdazix4w1lz6n8qgm3dasi2837sfn88ma96pbp4sk11gbp5";
+    };
+  };
+  "faraday" = {
+    version = "0.8.8";
+    source = {
+      type = "gem";
+      sha256 = "1cnyj5japrnv6wvl01la5amf7hikckfznh8234ad21n730b2wci4";
+    };
+    dependencies = [
+      "multipart-post"
+    ];
+  };
+  "fission" = {
+    version = "0.5.0";
+    source = {
+      type = "gem";
+      sha256 = "09pmp1j1rr8r3pcmbn2na2ls7s1j9ijbxj99xi3a8r6v5xhjdjzh";
+    };
+    dependencies = [
+      "CFPropertyList"
+    ];
+  };
+  "flowdock" = {
+    version = "0.4.0";
+    source = {
+      type = "gem";
+      sha256 = "1myza5n6wqk550ky3ld4np89cd491prndqy0l1fqsddxpap6pp60";
+    };
+    dependencies = [
+      "httparty"
+      "multi_json"
+    ];
+  };
+  "fog" = {
+    version = "1.28.0";
+    source = {
+      type = "gem";
+      sha256 = "12b03r77vdicbsc7j6by2gysm16wij32z65qp6bkrxkfba9yb37h";
+    };
+    dependencies = [
+      "fog-atmos"
+      "fog-aws"
+      "fog-brightbox"
+      "fog-core"
+      "fog-ecloud"
+      "fog-json"
+      "fog-profitbricks"
+      "fog-radosgw"
+      "fog-riakcs"
+      "fog-sakuracloud"
+      "fog-serverlove"
+      "fog-softlayer"
+      "fog-storm_on_demand"
+      "fog-terremark"
+      "fog-vmfusion"
+      "fog-voxel"
+      "fog-xml"
+      "ipaddress"
+      "nokogiri"
+    ];
+  };
+  "fog-atmos" = {
+    version = "0.1.0";
+    source = {
+      type = "gem";
+      sha256 = "1aaxgnw9zy96gsh4h73kszypc32sx497s6bslvhfqh32q9d1y8c9";
+    };
+    dependencies = [
+      "fog-core"
+      "fog-xml"
+    ];
+  };
+  "fog-aws" = {
+    version = "0.1.1";
+    source = {
+      type = "gem";
+      sha256 = "17a3sspf81bgvkrrrmwx7aci7fjy1m7b3w61ljc2mpqbafz80v7i";
+    };
+    dependencies = [
+      "fog-core"
+      "fog-json"
+      "fog-xml"
+      "ipaddress"
+    ];
+  };
+  "fog-brightbox" = {
+    version = "0.7.1";
+    source = {
+      type = "gem";
+      sha256 = "1cpa92q2ls51gidxzn407x53f010k0hmrl94ipw7rdzdapp8c4cn";
+    };
+    dependencies = [
+      "fog-core"
+      "fog-json"
+      "inflecto"
+    ];
+  };
+  "fog-core" = {
+    version = "1.29.0";
+    source = {
+      type = "gem";
+      sha256 = "0ayv9j3i7jy2d1l4gw6sfchgb8l62590a6fpvpr7qvdjc79mvm3p";
+    };
+    dependencies = [
+      "builder"
+      "excon"
+      "formatador"
+      "mime-types"
+      "net-scp"
+      "net-ssh"
+    ];
+  };
+  "fog-ecloud" = {
+    version = "0.0.2";
+    source = {
+      type = "gem";
+      sha256 = "0lhxjp6gi48zanqmkblyhxjp0lknl1akifgfk5lq3j3vj2d3pnr8";
+    };
+    dependencies = [
+      "fog-core"
+      "fog-xml"
+    ];
+  };
+  "fog-json" = {
+    version = "1.0.0";
+    source = {
+      type = "gem";
+      sha256 = "1517sm8bl0bmaw2fbaf5ra6midq3wzgkpm55lb9rw6jm5ys23lyw";
+    };
+    dependencies = [
+      "multi_json"
+    ];
+  };
+  "fog-profitbricks" = {
+    version = "0.0.2";
+    source = {
+      type = "gem";
+      sha256 = "0hk290cw99qx727sxfhxlmczv9kv15hlnrflh00wfprqxk4r8rd4";
+    };
+    dependencies = [
+      "fog-core"
+      "fog-xml"
+      "nokogiri"
+    ];
+  };
+  "fog-radosgw" = {
+    version = "0.0.3";
+    source = {
+      type = "gem";
+      sha256 = "1fbpi0sfff5f5hrn4f7ish260cykzcqvzwmvm61i6mprfrfnx10r";
+    };
+    dependencies = [
+      "fog-core"
+      "fog-json"
+      "fog-xml"
+    ];
+  };
+  "fog-riakcs" = {
+    version = "0.1.0";
+    source = {
+      type = "gem";
+      sha256 = "1nbxc4dky3agfwrmgm1aqmi59p6vnvfnfbhhg7xpg4c2cf41whxm";
+    };
+    dependencies = [
+      "fog-core"
+      "fog-json"
+      "fog-xml"
+    ];
+  };
+  "fog-sakuracloud" = {
+    version = "1.0.0";
+    source = {
+      type = "gem";
+      sha256 = "1805m44x2pclhjyvdrpj6zg8l9dldgnc20h0g61r7hqxpydz066x";
+    };
+    dependencies = [
+      "fog-core"
+      "fog-json"
+    ];
+  };
+  "fog-serverlove" = {
+    version = "0.1.1";
+    source = {
+      type = "gem";
+      sha256 = "094plkkr6xiss8k85fp66g7z544kxgfx1ck0f3sqndk27miw26jk";
+    };
+    dependencies = [
+      "fog-core"
+      "fog-json"
+    ];
+  };
+  "fog-softlayer" = {
+    version = "0.4.1";
+    source = {
+      type = "gem";
+      sha256 = "1cf6y6xxjjpjglz31kf6jmmyh687x7sxhn4bx3hlr1nb1hcy19sq";
+    };
+    dependencies = [
+      "fog-core"
+      "fog-json"
+    ];
+  };
+  "fog-storm_on_demand" = {
+    version = "0.1.0";
+    source = {
+      type = "gem";
+      sha256 = "0rrfv37x9y07lvdd03pbappb8ybvqb6g8rxzwvgy3mmbmbc6l6d2";
+    };
+    dependencies = [
+      "fog-core"
+      "fog-json"
+    ];
+  };
+  "fog-terremark" = {
+    version = "0.0.4";
+    source = {
+      type = "gem";
+      sha256 = "0bxznlc904zaw3qaxhkvhqqbrv9n6nf5idih8ra9dihvacifwhvc";
+    };
+    dependencies = [
+      "fog-core"
+      "fog-xml"
+    ];
+  };
+  "fog-vmfusion" = {
+    version = "0.0.1";
+    source = {
+      type = "gem";
+      sha256 = "0x1vxc4a627g7ambcprhxiqvywy64li90145r96b2ig9z23hmy7g";
+    };
+    dependencies = [
+      "fission"
+      "fog-core"
+    ];
+  };
+  "fog-voxel" = {
+    version = "0.0.2";
+    source = {
+      type = "gem";
+      sha256 = "0by7cs0c044b8dkcmcf3pjzydnrakj8pnbcxzhw8hwlgqr0jfqgn";
+    };
+    dependencies = [
+      "fog-core"
+      "fog-xml"
+    ];
+  };
+  "fog-xml" = {
+    version = "0.1.1";
+    source = {
+      type = "gem";
+      sha256 = "0kgxjwz0mzyp7bgj1ycl9jyfmzfqc1fjdz9sm57fgj5w31jfvxw5";
+    };
+    dependencies = [
+      "fog-core"
+      "nokogiri"
+    ];
+  };
+  "formatador" = {
+    version = "0.2.5";
+    source = {
+      type = "gem";
+      sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0";
+    };
+  };
+  "fuubar" = {
+    version = "2.0.0";
+    source = {
+      type = "gem";
+      sha256 = "0xwqs24y8s73aayh39si17kccsmr0bjgmi6jrjyfp7gkjb6iyhpv";
+    };
+    dependencies = [
+      "rspec"
+      "ruby-progressbar"
+    ];
+  };
+  "hipchat" = {
+    version = "1.0.1";
+    source = {
+      type = "gem";
+      sha256 = "1khcb6cxrr1qn104rl87wq85anigykf45x7knxnyqfpwnbda2nh1";
+    };
+    dependencies = [
+      "httparty"
+    ];
+  };
+  "http" = {
+    version = "0.5.0";
+    source = {
+      type = "gem";
+      sha256 = "1vw10xxs0i7kn90lx3b2clfkm43nb59jjph902bafpsaarqsai8d";
+    };
+    dependencies = [
+      "http_parser.rb"
+    ];
+  };
+  "http_parser.rb" = {
+    version = "0.6.0";
+    source = {
+      type = "gem";
+      sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
+    };
+  };
+  "httparty" = {
+    version = "0.12.0";
+    source = {
+      type = "gem";
+      sha256 = "10y3znh7s1fx88lbnbsmyx5zri6jr1gi48zzzq89wir8q9zlp28c";
+    };
+    dependencies = [
+      "json"
+      "multi_xml"
+    ];
+  };
+  "inflecto" = {
+    version = "0.0.2";
+    source = {
+      type = "gem";
+      sha256 = "085l5axmvqw59mw5jg454a3m3gr67ckq9405a075isdsn7bm3sp4";
+    };
+  };
+  "ipaddress" = {
+    version = "0.8.0";
+    source = {
+      type = "gem";
+      sha256 = "0cwy4pyd9nl2y2apazp3hvi12gccj5a3ify8mi8k3knvxi5wk2ir";
+    };
+  };
+  "json" = {
+    version = "1.8.2";
+    source = {
+      type = "gem";
+      sha256 = "0zzvv25vjikavd3b1bp6lvbgj23vv9jvmnl4vpim8pv30z8p6vr5";
+    };
+  };
+  "mail" = {
+    version = "2.5.4";
+    source = {
+      type = "gem";
+      sha256 = "0z15ksb8blcppchv03g34844f7xgf36ckp484qjj2886ig1qara4";
+    };
+    dependencies = [
+      "mime-types"
+      "treetop"
+    ];
+  };
+  "memoizable" = {
+    version = "0.4.0";
+    source = {
+      type = "gem";
+      sha256 = "0xhg8c9qw4y35qp1k8kv20snnxk6rlyilx354n1d72r0y10s7qcr";
+    };
+    dependencies = [
+      "thread_safe"
+    ];
+  };
+  "metaclass" = {
+    version = "0.0.4";
+    source = {
+      type = "gem";
+      sha256 = "0hp99y2b1nh0nr8pc398n3f8lakgci6pkrg4bf2b2211j1f6hsc5";
+    };
+  };
+  "mime-types" = {
+    version = "1.25.1";
+    source = {
+      type = "gem";
+      sha256 = "0mhzsanmnzdshaba7gmsjwnv168r1yj8y0flzw88frw1cickrvw8";
+    };
+  };
+  "mini_portile" = {
+    version = "0.6.2";
+    source = {
+      type = "gem";
+      sha256 = "0h3xinmacscrnkczq44s6pnhrp4nqma7k056x5wv5xixvf2wsq2w";
+    };
+  };
+  "mocha" = {
+    version = "1.1.0";
+    source = {
+      type = "gem";
+      sha256 = "107nmnngbv8lq2g7hbjpn5kplb4v2c8gs9lxrg6vs8gdbddkilzi";
+    };
+    dependencies = [
+      "metaclass"
+    ];
+  };
+  "multi_json" = {
+    version = "1.10.1";
+    source = {
+      type = "gem";
+      sha256 = "1ll21dz01jjiplr846n1c8yzb45kj5hcixgb72rz0zg8fyc9g61c";
+    };
+  };
+  "multi_xml" = {
+    version = "0.5.5";
+    source = {
+      type = "gem";
+      sha256 = "0i8r7dsz4z79z3j023l8swan7qpbgxbwwz11g38y2vjqjk16v4q8";
+    };
+  };
+  "multipart-post" = {
+    version = "1.2.0";
+    source = {
+      type = "gem";
+      sha256 = "12p7lnmc52di1r4h73h6xrpppplzyyhani9p7wm8l4kgf1hnmwnc";
+    };
+  };
+  "net-scp" = {
+    version = "1.2.1";
+    source = {
+      type = "gem";
+      sha256 = "0b0jqrcsp4bbi4n4mzyf70cp2ysyp6x07j8k8cqgxnvb4i3a134j";
+    };
+    dependencies = [
+      "net-ssh"
+    ];
+  };
+  "net-sftp" = {
+    version = "2.1.2";
+    source = {
+      type = "gem";
+      sha256 = "04674g4n6mryjajlcd82af8g8k95la4b1bj712dh71hw1c9vhw1y";
+    };
+    dependencies = [
+      "net-ssh"
+    ];
+  };
+  "net-ssh" = {
+    version = "2.9.2";
+    source = {
+      type = "gem";
+      sha256 = "1p0bj41zrmw5lhnxlm1pqb55zfz9y4p9fkrr9a79nrdmzrk1ph8r";
+    };
+  };
+  "nokogiri" = {
+    version = "1.6.6.2";
+    source = {
+      type = "gem";
+      sha256 = "1j4qv32qjh67dcrc1yy1h8sqjnny8siyy4s44awla8d6jk361h30";
+    };
+    dependencies = [
+      "mini_portile"
+    ];
+  };
+  "open4" = {
+    version = "1.3.0";
+    source = {
+      type = "gem";
+      sha256 = "12jyp97p7pq29q1zmkdrhzvg5cg2x3hlfdbq6asnb9nqlkx6vhf2";
+    };
+  };
+  "pagerduty" = {
+    version = "2.0.0";
+    source = {
+      type = "gem";
+      sha256 = "1ads8bj2swm3gbhr6193ls83pnwsy39xyh3i8sw6rl8fxfdf717v";
+    };
+    dependencies = [
+      "json"
+    ];
+  };
+  "polyglot" = {
+    version = "0.3.3";
+    source = {
+      type = "gem";
+      sha256 = "082zmail2h3cxd9z1wnibhk6aj4sb1f3zzwra6kg9bp51kx2c00v";
+    };
+  };
+  "rspec" = {
+    version = "3.4.0";
+    source = {
+      type = "gem";
+      sha256 = "12axhz2nj2m0dy350lxym76m36m1hq48hc59mf00z9dajbpnj78s";
+    };
+    dependencies = [
+      "rspec-core"
+      "rspec-expectations"
+      "rspec-mocks"
+    ];
+  };
+  "rspec-core" = {
+    version = "3.4.1";
+    source = {
+      type = "gem";
+      sha256 = "0zl4fbrzl4gg2bn3fhv910q04sm2jvzdidmvd71gdgqwbzk0zngn";
+    };
+    dependencies = [
+      "rspec-support"
+    ];
+  };
+  "rspec-expectations" = {
+    version = "3.4.0";
+    source = {
+      type = "gem";
+      sha256 = "07pz570glwg87zpyagxxal0daa1jrnjkiksnn410s6846884fk8h";
+    };
+    dependencies = [
+      "diff-lcs"
+      "rspec-support"
+    ];
+  };
+  "rspec-mocks" = {
+    version = "3.4.0";
+    source = {
+      type = "gem";
+      sha256 = "0iw9qvpawj3cfcg3xipi1v4y11g9q4f5lvmzgksn6f0chf97sjy1";
+    };
+    dependencies = [
+      "diff-lcs"
+      "rspec-support"
+    ];
+  };
+  "rspec-support" = {
+    version = "3.4.1";
+    source = {
+      type = "gem";
+      sha256 = "0l6zzlf22hn3pcwnxswsjsiwhqjg7a8mhvm680k5vq98307bkikr";
+    };
+  };
+  "ruby-progressbar" = {
+    version = "1.7.5";
+    source = {
+      type = "gem";
+      sha256 = "0hynaavnqzld17qdx9r7hfw00y16ybldwq730zrqfszjwgi59ivi";
+    };
+  };
+  "simple_oauth" = {
+    version = "0.2.0";
+    source = {
+      type = "gem";
+      sha256 = "1vsjhxybif9r53jx4dhhwf80qjkg7gbwpfmskjqns223qrhwsxig";
+    };
+  };
+  "thor" = {
+    version = "0.18.1";
+    source = {
+      type = "gem";
+      sha256 = "0d1g37j6sc7fkidf8rqlm3wh9zgyg3g7y8h2x1y34hmil5ywa8c3";
+    };
+  };
+  "thread_safe" = {
+    version = "0.1.3";
+    source = {
+      type = "gem";
+      sha256 = "0f2w62x5nx95d2c2lrn9v4g60xhykf8zw7jaddkrgal913dzifgq";
+    };
+    dependencies = [
+      "atomic"
+    ];
+  };
+  "timecop" = {
+    version = "0.8.0";
+    source = {
+      type = "gem";
+      sha256 = "0zf46hkd36y2ywysjfgkvpcc5v04s2rwlg2k7k8j23bh7k8sgiqs";
+    };
+  };
+  "treetop" = {
+    version = "1.4.15";
+    source = {
+      type = "gem";
+      sha256 = "1zqj5y0mvfvyz11nhsb4d5ch0i0rfcyj64qx19mw4qhg3hh8z9pz";
+    };
+    dependencies = [
+      "polyglot"
+      "polyglot"
+    ];
+  };
+  "twitter" = {
+    version = "5.5.0";
+    source = {
+      type = "gem";
+      sha256 = "0yl1im3s4svl4hxxsyc60mm7cxvwz538amc9y0vzw6lkiii5f197";
+    };
+    dependencies = [
+      "addressable"
+      "buftok"
+      "descendants_tracker"
+      "equalizer"
+      "faraday"
+      "http"
+      "http_parser.rb"
+      "json"
+      "memoizable"
+      "simple_oauth"
+    ];
+  };
+  "unf" = {
+    version = "0.1.3";
+    source = {
+      type = "gem";
+      sha256 = "1f2q8mxxngg8q608r6xajpharp9zz1ia3336y1lsg1asn2ach2sm";
+    };
+    dependencies = [
+      "unf_ext"
+    ];
+  };
+  "unf_ext" = {
+    version = "0.0.6";
+    source = {
+      type = "gem";
+      sha256 = "07zbmkzcid6pzdqgla3456ipfdka7j1v4hsx1iaa8rbnllqbmkdg";
+    };
+  };
+  "xml-simple" = {
+    version = "1.1.4";
+    source = {
+      type = "gem";
+      sha256 = "0x5c3mqhahh8hzqqq41659bxj0wn3n6bhj5p6b4hsia2k4akzg6s";
+    };
+  };
+}
\ No newline at end of file
diff --git a/pkgs/tools/backup/partclone/default.nix b/pkgs/tools/backup/partclone/default.nix
index 928c0494a1c..9aea0c80c6f 100644
--- a/pkgs/tools/backup/partclone/default.nix
+++ b/pkgs/tools/backup/partclone/default.nix
@@ -1,18 +1,19 @@
-{stdenv, fetchurl
+{stdenv, fetchFromGitHub
 , pkgconfig, libuuid
-, e2fsprogs
+, e2fsprogs, automake, autoconf
 }:
 stdenv.mkDerivation {
   name = "partclone-stable";
   enableParallelBuilding = true;
 
-  src = fetchurl {
-    url = https://codeload.github.com/Thomas-Tsai/partclone/legacy.tar.gz/stable;
-    sha256 = "12bnhljc4n4951p5c05gc7z5qwdsjpx867ad1npmgsm8d9w941sn";
-    name = "Thomas-Tsai-partclone-stable-20150722.tar.gz";
+  src = fetchFromGitHub {
+    owner = "Thomas-Tsai";
+    repo = "partclone";
+    rev = "stable";
+    sha256 = "0q3brjmnldpr89nhbiajxg3gncz0nagc34n7q2723lpz7bn28w3z";
   };
 
-  buildInputs = [e2fsprogs pkgconfig libuuid];
+  buildInputs = [e2fsprogs pkgconfig libuuid automake autoconf];
 
   installPhase = ''make INSTPREFIX=$out install'';
 
diff --git a/pkgs/tools/backup/rsnapshot/default.nix b/pkgs/tools/backup/rsnapshot/default.nix
index bacfbdfe1ca..f46a2c20de4 100644
--- a/pkgs/tools/backup/rsnapshot/default.nix
+++ b/pkgs/tools/backup/rsnapshot/default.nix
@@ -16,10 +16,11 @@ let patch = writeText "rsnapshot-config.patch" ''
 '';
 in
 stdenv.mkDerivation rec {
-  name = "rsnapshot-1.3.1";
+  name = "rsnapshot-1.4.1";
+
   src = fetchurl {
-    url = "mirror://sourceforge/rsnapshot/${name}.tar.gz";
-    sha256 = "0pn7vlg3yxl7xrvfwmp4zlrg3cckmlldq6qr5bs3b2b281zcgdll";
+    url = "http://rsnapshot.org/downloads/${name}.tar.gz";
+    sha256 = "1s28wkpqajgmwi88n3xs3qsa4b7yxd6lkl4zfi0mr06klwli2jpv";
   };
 
   propagatedBuildInputs = [perl openssh rsync logger];
diff --git a/pkgs/tools/backup/rsnapshot/git.nix b/pkgs/tools/backup/rsnapshot/git.nix
deleted file mode 100644
index d1025a11d29..00000000000
--- a/pkgs/tools/backup/rsnapshot/git.nix
+++ /dev/null
@@ -1,52 +0,0 @@
-{ fetchFromGitHub, stdenv, writeText, perl, openssh, rsync, logger,
-  configFile ? "/etc/rsnapshot.conf" }:
-
-let patch = writeText "rsnapshot-config.patch" ''
---- rsnapshot-program.pl	2013-10-05 20:31:08.715991442 +0200
-+++ rsnapshot-program.pl	2013-10-05 20:31:42.496193633 +0200
-@@ -383,7 +383,7 @@
- 	}
- 	
- 	# set global variable
--	$config_file = $default_config_file;
-+	$config_file = '${configFile}';
- }
- 
- # accepts no args
-'';
-in
-stdenv.mkDerivation rec {
-  name = "rsnapshot-1.4git";
-  src = fetchFromGitHub {
-    owner = "DrHyde";
-    repo = "rsnapshot";
-    rev = "1047cbb57937c29233388e2fcd847fecd3babe74";
-    sha256 = "173y9q89dp4zf7nysqhjp3i2m086n7qdpawb9vx0ml5zha6mxf2p";
-  };
-
-  propagatedBuildInputs = [perl openssh rsync logger];
-
-  patchPhase = ''
-    substituteInPlace "Makefile.in" --replace \
-      "/usr/bin/pod2man" "${perl}/bin/pod2man"
-    patch -p0 <${patch}
-  '';
-
-  # I still think this is a good idea, but it currently fails in the chroot because it checks
-  # that things are writable and so on.
-  #checkPhase = ''
-  #  if [ -f "${configFile}" ]
-  #  then
-  #    ${perl}/bin/perl -w ./rsnapshot configtest
-  #  else
-  #    echo File "${configFile}" does not exist, not checking
-  #  fi
-  #'';
-
-  meta = with stdenv.lib; {
-    description = "A filesystem snapshot utility for making backups of local and remote systems";
-    homepage = http://rsnapshot.org/;
-    license = stdenv.lib.licenses.gpl2Plus;
-    platforms = platforms.linux;
-  };
-}
diff --git a/pkgs/tools/compression/bzip2/default.nix b/pkgs/tools/compression/bzip2/default.nix
index 48f4c4fe3c3..675a44b838b 100644
--- a/pkgs/tools/compression/bzip2/default.nix
+++ b/pkgs/tools/compression/bzip2/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, linkStatic ? false }:
+{ stdenv, fetchurl, libtool, autoconf, automake, gnum4, linkStatic ? false }:
 
 let
   version = "1.0.6";
@@ -15,14 +15,26 @@ in stdenv.mkDerivation {
   };
 
   crossAttrs = {
-    patchPhase = ''
+    buildInputs = [ libtool autoconf automake gnum4 ];
+    patches = [
+      # original upstream for the autoconf patch is here:
+      # http://ftp.suse.com/pub/people/sbrabec/bzip2/for_downstream/bzip2-1.0.6-autoconfiscated.patch
+      # but we get the mingw-builds version of the patch, which fixes
+      # a few more issues
+      (fetchurl {
+        url = "https://raw.githubusercontent.com/niXman/mingw-builds/17ae841dcf6e72badad7941a06d631edaf687436/patches/bzip2/bzip2-1.0.6-autoconfiscated.patch";
+        sha256 = "1flbd3i8vg9kzq0a712qcg9j2c4ymnqvgd0ldyafpzvbqj1iicnp";
+      })
+    ];
+    patchFlags = "-p0";
+    postPatch = ''
       sed -i -e '/<sys\\stat\.h>/s|\\|/|' bzip2.c
-      sed -i -e 's/CC=gcc/CC=${stdenv.cross.config}-gcc/' \
-        -e 's/AR=ar/AR=${stdenv.cross.config}-ar/' \
-        -e 's/RANLIB=ranlib/RANLIB=${stdenv.cross.config}-ranlib/' \
-        -e 's/bzip2recover test/bzip2recover/' \
-        Makefile*
     '';
+    preConfigure = "sh ./autogen.sh";
+    # clear native hooks that are not needed with autoconf
+    preBuild = "";
+    preInstall = "";
+    postInstall = "";
   };
 
   outputs = [ "dev" "bin" "static" ] ++ stdenv.lib.optional sharedLibrary "out";
diff --git a/pkgs/tools/filesystems/f2fs-tools/default.nix b/pkgs/tools/filesystems/f2fs-tools/default.nix
index f8fa5cc264d..073dc585e74 100644
--- a/pkgs/tools/filesystems/f2fs-tools/default.nix
+++ b/pkgs/tools/filesystems/f2fs-tools/default.nix
@@ -22,6 +22,6 @@ stdenv.mkDerivation rec {
     description = "Userland tools for the f2fs filesystem";
     license = licenses.gpl2;
     platforms = platforms.linux;
-    maintainers = with maintainers; [ emery jagajaga ];
+    maintainers = with maintainers; [ ehmry jagajaga ];
   };
 }
diff --git a/pkgs/tools/filesystems/xfsprogs/4.2.0-sharedlibs.patch b/pkgs/tools/filesystems/xfsprogs/4.2.0-sharedlibs.patch
index 86eb6f81869..c74b75b7e43 100644
--- a/pkgs/tools/filesystems/xfsprogs/4.2.0-sharedlibs.patch
+++ b/pkgs/tools/filesystems/xfsprogs/4.2.0-sharedlibs.patch
@@ -78,3 +78,23 @@
  
  
  ifeq ($(HAVE_BUILDDEFS), yes)
+--- xfsprogs-4.2.0/quota/Makefile
++++ xfsprogs-4.2.0/quota/Makefile
+@@ -16,7 +16,6 @@ LSRCFILES = $(shell echo $(PCFILES) | sed -e "s/$(PKG_PLATFORM).c//g")
+ 
+ LLDLIBS = $(LIBXCMD)
+ LTDEPENDENCIES = $(LIBXCMD)
+-LLDFLAGS = -static
+ 
+ ifeq ($(ENABLE_READLINE),yes)
+ LLDLIBS += $(LIBREADLINE) $(LIBTERMCAP)
+--- xfsprogs-4.2.0/mdrestore/Makefile
++++ xfsprogs-4.2.0/mdrestore/Makefile
+@@ -10,7 +10,6 @@ CFILES = xfs_mdrestore.c
+ 
+ LLDLIBS = $(LIBXFS) $(LIBRT) $(LIBPTHREAD) $(LIBUUID)
+ LTDEPENDENCIES = $(LIBXFS)
+-LLDFLAGS = -static
+ 
+ default: depend $(LTCOMMAND)
+ 
diff --git a/pkgs/tools/graphics/pdfread/default.nix b/pkgs/tools/graphics/pdfread/default.nix
index 13f9e30c8da..a4184fd9514 100644
--- a/pkgs/tools/graphics/pdfread/default.nix
+++ b/pkgs/tools/graphics/pdfread/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, unzip, python, makeWrapper, ghostscript, pngnq, pil, djvulibre
+{stdenv, fetchurl, unzip, python, makeWrapper, ghostscript, pngnq, pillow, djvulibre
 , optipng, unrar}:
 
 stdenv.mkDerivation {
@@ -15,6 +15,8 @@ stdenv.mkDerivation {
 
   buildInputs = [ unzip python makeWrapper ];
 
+  broken = true; # Not found.
+
   phases = "unpackPhase patchPhase installPhase";
 
   unpackPhase = ''
@@ -36,7 +38,7 @@ stdenv.mkDerivation {
     mkdir -p $PYDIR
     cp -R *.py pylrs $PYDIR
 
-    wrapProgram $out/bin/pdfread.py --prefix PYTHONPATH : $PYTHONPATH:${pil}/$LIBSUFFIX/PIL:$PYDIR \
+    wrapProgram $out/bin/pdfread.py --prefix PYTHONPATH : $PYTHONPATH:${pillow}/$LIBSUFFIX/PIL:$PYDIR \
       --prefix PATH : ${ghostscript}/bin:${pngnq}/bin:${djvulibre.bin}/bin:${unrar}/bin:${optipng}/bin
   '';
 
diff --git a/pkgs/tools/misc/bfr/default.nix b/pkgs/tools/misc/bfr/default.nix
index 3be824d9a40..85bd21f9b72 100644
--- a/pkgs/tools/misc/bfr/default.nix
+++ b/pkgs/tools/misc/bfr/default.nix
@@ -9,6 +9,13 @@ stdenv.mkDerivation rec {
     sha256 = "0fadfssvj9klj4dq9wdrzys1k2a1z2j0p6kgnfgbjv0n1bq6h4cy";
   };
 
+  patches =
+    [ (fetchurl {
+        url = "https://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/app-misc/bfr/files/bfr-1.6-perl.patch?revision=1.1";
+        sha256 = "1pk9jm3c1qzs727lh0bw61w3qbykaqg4jblywf9pvq5bypk88qfj";
+      })
+    ];
+
   buildInputs = [ perl ];
 
   meta = with stdenv.lib; {
diff --git a/pkgs/tools/misc/coreutils/default.nix b/pkgs/tools/misc/coreutils/default.nix
index 40ebf2174ae..4d9adc6c688 100644
--- a/pkgs/tools/misc/coreutils/default.nix
+++ b/pkgs/tools/misc/coreutils/default.nix
@@ -2,6 +2,7 @@
 , aclSupport ? false, acl ? null
 , selinuxSupport? false, libselinux ? null, libsepol ? null
 , autoconf, automake114x, texinfo
+, withPrefix ? false
 }:
 
 assert aclSupport -> acl != null;
@@ -39,6 +40,8 @@ let
     outputs = [ "out" "info" ];
 
     nativeBuildInputs = [ perl xz.bin ];
+    configureFlags = optionalString stdenv.isSunOS "ac_cv_func_inotify_init=no";
+
     buildInputs = [ gmp ]
       ++ optional aclSupport acl
       ++ optionals stdenv.isCygwin [ autoconf automake114x texinfo ]   # due to patch
@@ -82,9 +85,21 @@ let
     enableParallelBuilding = false;
 
     NIX_LDFLAGS = optionalString selinuxSupport "-lsepol";
+    FORCE_UNSAFE_CONFIGURE = stdenv.lib.optionalString (stdenv.system == "armv7l-linux" || stdenv.isSunOS) "1";
 
     makeFlags = optionalString stdenv.isDarwin "CFLAGS=-D_FORTIFY_SOURCE=0";
 
+    # e.g. ls -> gls; grep -> ggrep
+    postFixup = # feel free to simplify on a mass rebuild
+      if withPrefix then
+      ''
+        (
+          cd "$out/bin"
+          find * -type f -executable -exec mv {} g{} \;
+        )
+      ''
+      else null;
+
     meta = {
       homepage = http://www.gnu.org/software/coreutils/;
       description = "The basic file, shell and text manipulation utilities of the GNU operating system";
@@ -105,6 +120,3 @@ let
   };
 in
   self
-  // stdenv.lib.optionalAttrs (stdenv.system == "armv7l-linux" || stdenv.isSunOS) {
-    FORCE_UNSAFE_CONFIGURE = 1;
-  }
diff --git a/pkgs/tools/misc/cpuminer-multi/default.nix b/pkgs/tools/misc/cpuminer-multi/default.nix
index 22006310780..4b4eb87b0ea 100644
--- a/pkgs/tools/misc/cpuminer-multi/default.nix
+++ b/pkgs/tools/misc/cpuminer-multi/default.nix
@@ -26,6 +26,6 @@ stdenv.mkDerivation rec {
     description = "Multi-algo CPUMiner";
     homepage = https://github.com/wolf9466/cpuminer-multi;
     license = licenses.gpl2;
-    maintainers = [ maintainers.emery ];
+    maintainers = [ maintainers.ehmry ];
   };
 }
\ No newline at end of file
diff --git a/pkgs/tools/misc/ipxe/default.nix b/pkgs/tools/misc/ipxe/default.nix
index ec9458e70ae..e4c161b2e51 100644
--- a/pkgs/tools/misc/ipxe/default.nix
+++ b/pkgs/tools/misc/ipxe/default.nix
@@ -33,7 +33,7 @@ stdenv.mkDerivation {
     { description = "Network boot firmware";
       homepage = http://ipxe.org/;
       license = licenses.gpl2;
-      maintainers = with maintainers; [ emery ];
+      maintainers = with maintainers; [ ehmry ];
       platforms = platforms.all;
     };
 }
diff --git a/pkgs/tools/misc/less/default.nix b/pkgs/tools/misc/less/default.nix
index af8a0dd7d81..75e00635320 100644
--- a/pkgs/tools/misc/less/default.nix
+++ b/pkgs/tools/misc/less/default.nix
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = http://www.greenwoodsoftware.com/less/;
     description = "A more advanced file pager than ‘more’";
-    platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+    platforms = stdenv.lib.platforms.unix;
     maintainers = [ stdenv.lib.maintainers.eelco ];
   };
 }
diff --git a/pkgs/tools/misc/logstash/default.nix b/pkgs/tools/misc/logstash/default.nix
index ab02c7dc3d1..15bb44a0e47 100644
--- a/pkgs/tools/misc/logstash/default.nix
+++ b/pkgs/tools/misc/logstash/default.nix
@@ -16,9 +16,8 @@ stdenv.mkDerivation rec {
 
   installPhase = ''
     mkdir -p $out
-    cp -r {Gemfile*,vendor,lib} $out
-    cp bin/logstash $out/logstash
-    cp bin/plugin $out/logstash-plugin
+    cp -r {Gemfile*,vendor,lib,bin} $out
+    mv $out/bin/plugin $out/bin/logstash-plugin
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/tools/misc/makebootfat/default.nix b/pkgs/tools/misc/makebootfat/default.nix
index 03c913b7224..dc66976720d 100644
--- a/pkgs/tools/misc/makebootfat/default.nix
+++ b/pkgs/tools/misc/makebootfat/default.nix
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
     description = "Create bootable USB disks using the FAT filesystem and syslinux";
     homepage = "http://advancemame.sourceforge.net/boot-readme.html";
     license = licenses.gpl2;
-    maintainers = [ maintainers.emery ];
+    maintainers = [ maintainers.ehmry ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/svtplay-dl/default.nix b/pkgs/tools/misc/svtplay-dl/default.nix
index 1d5da633061..dafc30bd647 100644
--- a/pkgs/tools/misc/svtplay-dl/default.nix
+++ b/pkgs/tools/misc/svtplay-dl/default.nix
@@ -3,13 +3,13 @@
 
 stdenv.mkDerivation rec {
   name = "svtplay-dl-${version}";
-  version = "0.20.2015.10.25";
+  version = "0.20.2015.11.29";
 
   src = fetchFromGitHub {
     owner = "spaam";
     repo = "svtplay-dl";
     rev = version;
-    sha256 = "0azai5clc96lhsx4kj5rvp5bhiq4bwgl51r49b9x4i5s1bhfaz40";
+    sha256 = "10y0qxyyfw9kxiax3b0gdd38yz2y3lii75mgvlq6q6h77r3wham4";
   };
 
   pythonPaths = [ pycrypto requests2 ];
diff --git a/pkgs/tools/misc/tlp/default.nix b/pkgs/tools/misc/tlp/default.nix
index 52d79a9bd5d..d21b4fb2f3f 100644
--- a/pkgs/tools/misc/tlp/default.nix
+++ b/pkgs/tools/misc/tlp/default.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, fetchFromGitHub, makeWrapper, perl, systemd, iw, rfkill, hdparm, ethtool, inetutils
-, kmod, pciutils, smartmontools, x86_energy_perf_policy
+, module_init_tools, pciutils, smartmontools, x86_energy_perf_policy
 , enableRDW ? false, networkmanager
 }:
 
@@ -27,7 +27,7 @@ in stdenv.mkDerivation {
   buildInputs = [ perl ];
 
   paths = lib.makeSearchPath "bin"
-          ([ iw rfkill hdparm ethtool inetutils systemd kmod pciutils smartmontools
+          ([ iw rfkill hdparm ethtool inetutils systemd module_init_tools pciutils smartmontools
              x86_energy_perf_policy
            ]
            ++ lib.optional enableRDW networkmanager
diff --git a/pkgs/tools/misc/xapian-omega/default.nix b/pkgs/tools/misc/xapian-omega/default.nix
new file mode 100644
index 00000000000..68241ac0e90
--- /dev/null
+++ b/pkgs/tools/misc/xapian-omega/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl, pkgconfig, xapian, perl, pcre, zlib }:
+
+stdenv.mkDerivation rec {
+  name = "xapian-omega-${version}";
+  version = "1.2.21";
+
+  src = fetchurl {
+    url = "http://oligarchy.co.uk/xapian/${version}/xapian-omega-${version}.tar.xz";
+    sha256 = "0zjjr4ypanwrjkcpgi37d72v2jjcfwnw8lgddv0i7z2jf1fklbc6";
+  };
+
+  buildInputs = [ pkgconfig xapian perl pcre zlib ];
+
+  meta = with stdenv.lib; {
+    description = "Indexer and CGI search front-end built on Xapian library";
+    homepage = http://xapian.org/;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/pkgs/tools/misc/yank/default.nix b/pkgs/tools/misc/yank/default.nix
index 049fc1b5f3f..f6b61de2a98 100644
--- a/pkgs/tools/misc/yank/default.nix
+++ b/pkgs/tools/misc/yank/default.nix
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     owner = "mptre";
     repo = "yank";
     rev = "v${meta.version}";
-    sha256 = "066nsm8b5785r2zaajihf8g6x9hc4n8kpk3j2n1slp5alnhx93mx";
+    sha256 = "0v1imwjp851gz86p9m3x1dd8bi649gr8j99xz6ask1pbkxvji73c";
     inherit name;
   };
 
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
     '';
     downloadPage = "https://github.com/mptre/yank/releases";
     license = licenses.mit;
-    version = "0.4.1";
+    version = "0.6.0";
     maintainers = [ maintainers.dochang ];
   };
 
diff --git a/pkgs/tools/misc/zsh-navigation-tools/default.nix b/pkgs/tools/misc/zsh-navigation-tools/default.nix
index ea4fc519b18..8f335d7cf58 100644
--- a/pkgs/tools/misc/zsh-navigation-tools/default.nix
+++ b/pkgs/tools/misc/zsh-navigation-tools/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   name = "zsh-navigation-tools-${version}";
-  version = "1.3.1";
+  version = "1.3.2";
 
   src = fetchFromGitHub {
     owner = "psprint";
     repo = "zsh-navigation-tools";
     rev = "v${version}";
-    sha256 = "1akkmjxv04rfqpx49hdwfwjp2842xpk0q7w5ymywzl0w4ldm2lmc";
+    sha256 = "1xj1jakcrf0sfkiq6l1drg6vzylhkk0kmhs7nz08dv18pgx9jy36";
   };
 
   dontBuild = true;
diff --git a/pkgs/tools/networking/cjdns/default.nix b/pkgs/tools/networking/cjdns/default.nix
index 45155cf306f..a3719570e89 100644
--- a/pkgs/tools/networking/cjdns/default.nix
+++ b/pkgs/tools/networking/cjdns/default.nix
@@ -35,7 +35,7 @@ stdenv.mkDerivation {
     homepage = https://github.com/cjdelisle/cjdns;
     description = "Encrypted networking for regular people";
     license = licenses.gpl3;
-    maintainers = with maintainers; [ viric emery ];
+    maintainers = with maintainers; [ viric ehmry ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/cntlm/default.nix b/pkgs/tools/networking/cntlm/default.nix
index f890bdddb69..efd2c17a43e 100644
--- a/pkgs/tools/networking/cntlm/default.nix
+++ b/pkgs/tools/networking/cntlm/default.nix
@@ -1,11 +1,12 @@
 { stdenv, fetchurl, which}:
 
-stdenv.mkDerivation {
-  name = "cntlm-0.35.1";
+stdenv.mkDerivation rec {
+  name = "cntlm-${version}";
+  version = "0.92.3";
 
   src = fetchurl {
-    url = mirror://sourceforge/cntlm/cntlm-0.35.1.tar.gz;
-    sha256 = "7b3fb7184e72cc3f1743bb8e503a5305e96458bc630a7e1ebfc9f3c07ffa6c5e";
+    url = "mirror://sourceforge/cntlm/${name}.tar.gz";
+    sha256 = "1632szz849wasvh5sm6rm1zbvbrkq35k7kcyvx474gyl4h4x2flw";
   };
 
   buildInputs = [ which ];
@@ -16,10 +17,15 @@ stdenv.mkDerivation {
     mkdir -p $out/man/; cp doc/cntlm.1 $out/man/;
   '';
 
-  meta = {
+  meta = with stdenv.lib; {
     description = "NTLM/NTLMv2 authenticating HTTP proxy";
     homepage = http://cntlm.sourceforge.net/;
-    license = stdenv.lib.licenses.gpl2;
-    maintainers = [ stdenv.lib.maintainers.qknight ];
+    license = licenses.gpl2;
+    maintainers = 
+      [
+        maintainers.qknight
+        maintainers.markWot
+      ];
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/corkscrew/default.nix b/pkgs/tools/networking/corkscrew/default.nix
new file mode 100644
index 00000000000..96747e82cee
--- /dev/null
+++ b/pkgs/tools/networking/corkscrew/default.nix
@@ -0,0 +1,16 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "corkscrew-2.0";
+
+  src = fetchurl {
+    url = "http://agroman.net/corkscrew/${name}.tar.gz";
+    sha256 = "0d0fcbb41cba4a81c4ab494459472086f377f9edb78a2e2238ed19b58956b0be";
+  };
+
+  meta = with stdenv.lib; {
+    homepage    = http://agroman.net/corkscrew/;
+    description = "A tool for tunneling SSH through HTTP proxies";
+    license = stdenv.lib.licenses.gpl2;
+  };
+}
diff --git a/pkgs/tools/networking/curl/default.nix b/pkgs/tools/networking/curl/default.nix
index 8fe3b85d633..5e283943baf 100644
--- a/pkgs/tools/networking/curl/default.nix
+++ b/pkgs/tools/networking/curl/default.nix
@@ -50,6 +50,7 @@ stdenv.mkDerivation rec {
   '';
 
   configureFlags = [
+      "--disable-manual"
       ( if sslSupport then "--with-ssl=${openssl}" else "--without-ssl" )
       ( if scpSupport then "--with-libssh2=${libssh2}" else "--without-libssh2" )
       ( if ldapSupport then "--enable-ldap" else "--disable-ldap" )
diff --git a/pkgs/tools/networking/dnsmasq/default.nix b/pkgs/tools/networking/dnsmasq/default.nix
index 0e905bb6547..35cd7ae4661 100644
--- a/pkgs/tools/networking/dnsmasq/default.nix
+++ b/pkgs/tools/networking/dnsmasq/default.nix
@@ -29,9 +29,15 @@ stdenv.mkDerivation rec {
     "LOCALEDIR=$(out)/share/locale"
   ];
 
+  postBuild = ''
+    make -C contrib/wrt
+  '';
+
   postInstall = ''
     install -Dm644 dbus/dnsmasq.conf $out/etc/dbus-1/system.d/dnsmasq.conf
     install -Dm644 trust-anchors.conf $out/share/dnsmasq/trust-anchors.conf
+    install -Dm755 contrib/wrt/dhcp_lease_time $out/bin/dhcp_lease_time
+    install -Dm755 contrib/wrt/dhcp_release $out/bin/dhcp_release
 
     mkdir -p $out/share/dbus-1/system-services
     cat <<END > $out/share/dbus-1/system-services/uk.org.thekelleys.dnsmasq.service
diff --git a/pkgs/tools/networking/dropbear/default.nix b/pkgs/tools/networking/dropbear/default.nix
index 6b4c1f55643..0ec0f35f1bd 100644
--- a/pkgs/tools/networking/dropbear/default.nix
+++ b/pkgs/tools/networking/dropbear/default.nix
@@ -2,11 +2,11 @@
 sftpPath ? "/var/run/current-system/sw/libexec/sftp-server" }:
 
 stdenv.mkDerivation rec {
-  name = "dropbear-2015.70";
+  name = "dropbear-2015.71";
 
   src = fetchurl {
     url = "http://matt.ucc.asn.au/dropbear/releases/${name}.tar.bz2";
-    sha256 = "0mzj1gwamxmk8rab4xmcvldcxdvs5zczim2hdza3dwfhy4ywra32";
+    sha256 = "1bw3lzmisn6gs6zy9vcqbfnicl437ydskqcayklpw60fkhb18qip";
   };
 
   dontDisableStatic = enableStatic;
diff --git a/pkgs/tools/networking/haproxy/default.nix b/pkgs/tools/networking/haproxy/default.nix
index de8488ab3a8..f6201b44b3e 100644
--- a/pkgs/tools/networking/haproxy/default.nix
+++ b/pkgs/tools/networking/haproxy/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, pkgs, fetchurl, openssl }:
+{ stdenv, pkgs, fetchurl, openssl, zlib }:
 
 stdenv.mkDerivation rec {
   majorVersion = "1.5";
@@ -10,11 +10,11 @@ stdenv.mkDerivation rec {
     sha256 = "16cg1jmy2d8mq2ypwifsvhbyp4pyrj0zm0r818sx0r4hchwdsrcm";
   };
 
-  buildInputs = [ openssl ];
+  buildInputs = [ openssl zlib ];
 
   # TODO: make it work on darwin/bsd as well
   preConfigure = ''
-    export makeFlags="TARGET=linux2628 PREFIX=$out USE_OPENSSL=yes"
+    export makeFlags="TARGET=${if stdenv.isSunOS then "solaris" else "linux2628"} PREFIX=$out USE_OPENSSL=yes USE_ZLIB=yes"
   '';
 
   meta = {
diff --git a/pkgs/tools/networking/i2p/default.nix b/pkgs/tools/networking/i2p/default.nix
index 5b439eb8f3f..0829fed1d5e 100644
--- a/pkgs/tools/networking/i2p/default.nix
+++ b/pkgs/tools/networking/i2p/default.nix
@@ -1,10 +1,10 @@
 { stdenv, procps, coreutils, fetchurl, jdk, jre, ant, gettext, which }:
 
 stdenv.mkDerivation rec {
-  name = "i2p-0.9.22";
+  name = "i2p-0.9.23";
   src = fetchurl {
     url = "https://github.com/i2p/i2p.i2p/archive/${name}.tar.gz";
-    sha256 = "0y21dx5d95gq1i6ip56nmawr19974zawzwa315dm8lmz32bj8g6n";
+    sha256 = "1vjyki86r6v8z2pil7s6r74yf6h8w000ypxxngimw3kfff121swp";
   };
   buildInputs = [ jdk ant gettext which ];
   patches = [ ./i2p.patch ];
diff --git a/pkgs/tools/networking/offlineimap/default.nix b/pkgs/tools/networking/offlineimap/default.nix
index 298e2251368..e3e31e5408b 100644
--- a/pkgs/tools/networking/offlineimap/default.nix
+++ b/pkgs/tools/networking/offlineimap/default.nix
@@ -1,13 +1,13 @@
 { pkgs, fetchurl, buildPythonPackage, sqlite3 }:
 
 buildPythonPackage rec {
-  version = "6.5.7";
+  version = "6.6.0";
   name = "offlineimap-${version}";
   namePrefix = "";
 
   src = fetchurl {
     url = "https://github.com/OfflineIMAP/offlineimap/archive/v${version}.tar.gz";
-    sha256 = "18whwc4f8nk8gi3mjw9153c9cvwd3i9i7njmpdbhcplrv33m5pmp";
+    sha256 = "1x33zxjm3y2p54lbcsgflrs6v2zq785y2k0xi6xia6akrvjmh4n4";
   };
 
   doCheck = false;
diff --git a/pkgs/tools/networking/openvpn/default.nix b/pkgs/tools/networking/openvpn/default.nix
index e780865ab3b..f90370edf51 100644
--- a/pkgs/tools/networking/openvpn/default.nix
+++ b/pkgs/tools/networking/openvpn/default.nix
@@ -21,8 +21,6 @@ stdenv.mkDerivation rec {
     --enable-systemd
     --enable-iproute2
     IPROUTE=${iproute}/sbin/ip
-  '' + optionalString stdenv.isDarwin ''
-    --disable-plugin-auth-pam
   '';
 
   postInstall = ''
diff --git a/pkgs/tools/networking/p2p/libtorrent/default.nix b/pkgs/tools/networking/p2p/libtorrent/default.nix
index 421e0b205db..4f8c493a0f0 100644
--- a/pkgs/tools/networking/p2p/libtorrent/default.nix
+++ b/pkgs/tools/networking/p2p/libtorrent/default.nix
@@ -1,21 +1,27 @@
-{ stdenv, fetchurl, pkgconfig, openssl, libsigcxx, zlib }:
+{ stdenv, fetchFromGitHub, pkgconfig
+, libtool, autoconf, automake, cppunit
+, openssl, libsigcxx, zlib }:
 
 stdenv.mkDerivation rec {
   name = "libtorrent-${version}";
   version = "0.13.6";
 
-  src = fetchurl {
-    url = "http://rtorrent.net/downloads/${name}.tar.gz";
-    sha256 = "012s1nwcvz5m5r4d2z9klgy2n34kpgn9kgwgzxm97zgdjs6a0f18";
+  src = fetchFromGitHub rec {
+    owner = "rakshasa";
+    repo = "libtorrent";
+    rev = "${version}";
+    sha256 = "1rvrxgb131snv9r6ksgzmd74rd9z7q46bhky0zazz7dwqqywffcp";
   };
 
-  buildInputs = [ pkgconfig openssl libsigcxx zlib ];
+  buildInputs = [ pkgconfig libtool autoconf automake cppunit openssl libsigcxx zlib ];
+
+  preConfigure = "./autogen.sh";
 
   meta = with stdenv.lib; {
-    homepage = https://github.com/rakshasa/libtorrent/;
+    homepage = http://www.libtorrent.org/;
     description = "A BitTorrent library written in C++ for *nix, with focus on high performance and good code";
 
     platforms = platforms.unix;
-    maintainers = with maintainers; [ simons ebzzry ];
+    maintainers = with maintainers; [ simons ebzzry codyopel ];
   };
 }
diff --git a/pkgs/tools/networking/p2p/libtorrent/git.nix b/pkgs/tools/networking/p2p/libtorrent/git.nix
deleted file mode 100644
index e187a96dc0a..00000000000
--- a/pkgs/tools/networking/p2p/libtorrent/git.nix
+++ /dev/null
@@ -1,28 +0,0 @@
-{ stdenv, autoconf, automake, cppunit, fetchFromGitHub, pkgconfig, openssl, libsigcxx, libtool, zlib }:
-
-stdenv.mkDerivation {
-  name = "libtorrent-git-2014-08-20";
-
-  src = fetchFromGitHub rec {
-    owner = "rakshasa";
-    repo = "libtorrent";
-    rev = "c60d2b9475804e41649356fa0301e9f770798f8d";
-    sha256 = "1x78g5yd4q0ksdsw91awz2a1ax8zyfy5b53gbbil4fpjy96vb577";
-  };
-  
-  buildInputs = [ autoconf automake cppunit pkgconfig openssl libsigcxx libtool zlib ];
-
-  configureFlags = "--disable-dependency-tracking --enable-aligned";
-
-  preConfigure = ''
-    ./autogen.sh
-  '';
-
-  meta = with stdenv.lib; {
-    homepage = "http://libtorrent.rakshasa.no/";
-    description = "A BitTorrent library written in C++ for *nix, with a focus on high performance and good code";
-    license = licenses.gpl2;
-    platforms = platforms.unix;
-    maintainers = with maintainers; [ codyopel ];
-  };
-}
diff --git a/pkgs/tools/networking/p2p/rtorrent/default.nix b/pkgs/tools/networking/p2p/rtorrent/default.nix
index d702e3b9700..0d676795ab8 100644
--- a/pkgs/tools/networking/p2p/rtorrent/default.nix
+++ b/pkgs/tools/networking/p2p/rtorrent/default.nix
@@ -1,30 +1,50 @@
-{ stdenv, fetchurl, libtorrent, ncurses, pkgconfig, libsigcxx, curl
+{ stdenv, fetchurl, fetchFromGitHub, pkgconfig
+, libtool, autoconf, automake, cppunit
+, libtorrent, ncurses, libsigcxx, curl
 , zlib, openssl, xmlrpc_c
+
+# This no longer works
+, colorSupport ? false
 }:
 
 stdenv.mkDerivation rec {
   name = "rtorrent-${version}";
   version = "0.9.6";
 
-  src = fetchurl {
-    url = "http://rtorrent.net/downloads/${name}.tar.gz";
-    sha256 = "03jvzw9pi2mhcm913h8qg0qw9gwjqc6lhwynb1yz1y163x7w4s8y";
+  src = fetchFromGitHub {
+    owner = "rakshasa";
+    repo = "rtorrent";
+    rev = "${version}";
+    sha256 = "0iyxmjr1984vs7hrnxkfwgrgckacqml0kv4bhj185w9bhjqvgfnf";
   };
 
-  buildInputs = [ libtorrent ncurses pkgconfig libsigcxx curl zlib openssl xmlrpc_c ];
-  configureFlags = "--with-xmlrpc-c";
+  buildInputs = [
+    pkgconfig libtool autoconf automake cppunit
+    libtorrent ncurses libsigcxx curl zlib openssl xmlrpc_c
+  ];
+
+  # Optional patch adds support for custom configurable colors
+  # https://github.com/Chlorm/chlorm_overlay/blob/master/net-p2p/rtorrent/README.md
+  patches = stdenv.lib.optional colorSupport (fetchurl {
+    url = "https://gist.githubusercontent.com/codyopel/a816c2993f8013b5f4d6/raw/b952b32da1dcf14c61820dfcf7df00bc8918fec4/rtorrent-color.patch";
+    sha256 = "00gcl7yq6261rrfzpz2k8bd7mffwya0ifji1xqcvhfw50syk8965";
+  });
+
+  preConfigure = "./autogen.sh";
+
+  configureFlags = [ "--with-xmlrpc-c" "--with-posix-fallocate" ];
 
-  # postInstall = ''
-  #   mkdir -p $out/share/man/man1 $out/share/rtorrent
-  #   mv doc/rtorrent.1 $out/share/man/man1/rtorrent.1
-  #   mv doc/rtorrent.rc $out/share/rtorrent/rtorrent.rc
-  # '';
+  postInstall = ''
+    mkdir -p $out/share/man/man1 $out/share/doc/rtorrent
+    mv doc/old/rtorrent.1 $out/share/man/man1/rtorrent.1
+    mv doc/rtorrent.rc $out/share/doc/rtorrent/rtorrent.rc
+  '';
 
   meta = with stdenv.lib; {
-    homepage = https://github.com/rakshasa/rtorrent/;
+    inherit (src.meta) homepage;
     description = "An ncurses client for libtorrent, ideal for use with screen, tmux, or dtach";
 
     platforms = platforms.unix;
-    maintainers = with maintainers; [ simons ebzzry ];
+    maintainers = with maintainers; [ simons ebzzry codyopel ];
   };
 }
diff --git a/pkgs/tools/networking/p2p/rtorrent/git.nix b/pkgs/tools/networking/p2p/rtorrent/git.nix
deleted file mode 100644
index dcdd2e68e15..00000000000
--- a/pkgs/tools/networking/p2p/rtorrent/git.nix
+++ /dev/null
@@ -1,63 +0,0 @@
-{ stdenv, autoconf, automake, cppunit, curl, fetchFromGitHub
-, fetchurl, libsigcxx, libtool, libtorrent-git, ncurses, openssl
-, pkgconfig, zlib, xmlrpc_c
-, colorSupport ? false
-}:
-
-# NOTICE: changes since 0.9.4 break the current configuration syntax, an
-# example configuration file using the latest changes can be found at
-# https://github.com/codyopel/dotfiles/blob/master/dotfiles/rtorrent.rc
-
-stdenv.mkDerivation {
-  name = "rtorrent-git-2014-07-02";
-
-  src = fetchFromGitHub {
-    owner = "rakshasa";
-    repo = "rtorrent";
-    rev = "7537a3c2a91d0915f1c4c89b01cd583629dc5fd4";
-    sha256 = "1xnyjjff575jfq9c542yq3rr9q03z5x6xbg84d000wkjphbq7h7q";
-  };
-
-  buildInputs = [
-    autoconf
-    automake
-    cppunit
-    libtorrent-git
-    ncurses
-    pkgconfig
-    libsigcxx
-    libtool
-    curl
-    zlib
-    openssl
-    xmlrpc_c
-  ];
-
-  configureFlags = "--with-xmlrpc-c";
-
-  # Optional patch adds support for custom configurable colors
-  # https://github.com/Chlorm/chlorm_overlay/blob/master/net-p2p/rtorrent/README.md
-
-  patches = stdenv.lib.optional colorSupport (fetchurl {
-    url = "https://gist.githubusercontent.com/codyopel/a816c2993f8013b5f4d6/raw/b952b32da1dcf14c61820dfcf7df00bc8918fec4/rtorrent-color.patch";
-    sha256 = "00gcl7yq6261rrfzpz2k8bd7mffwya0ifji1xqcvhfw50syk8965";
-  });
-
-  preConfigure = ''
-    ./autogen.sh
-  '';
-
-  # postInstall = ''
-  #   mkdir -p $out/share/man/man1 $out/share/rtorrent
-  #   mv doc/rtorrent.1 $out/share/man/man1/rtorrent.1
-  #   mv doc/rtorrent.rc $out/share/rtorrent/rtorrent.rc
-  # '';
-
-  meta = with stdenv.lib; {
-    homepage = "http://libtorrent.rakshasa.no/";
-    description = "An ncurses client for libtorrent, ideal for use with screen or dtach";
-    license = licenses.gpl2;
-    platforms = platforms.linux;
-    maintainers = with maintainers; [ codyopel ];
-  };
-}
diff --git a/pkgs/tools/networking/snabb/default.nix b/pkgs/tools/networking/snabbswitch/default.nix
index 9ca8b56491d..f7cd1a4300a 100644
--- a/pkgs/tools/networking/snabb/default.nix
+++ b/pkgs/tools/networking/snabbswitch/default.nix
@@ -1,16 +1,30 @@
-{stdenv, fetchurl}:
+{ stdenv, lib, fetchurl, bash, makeWrapper, git, mariadb, diffutils }:
 
 stdenv.mkDerivation rec {
-  name = "snabb-2015.10";
+  name = "snabb-${version}";
+  version = "2015.12";
 
   src = fetchurl {
-    url = "https://github.com/SnabbCo/snabbswitch/archive/v2015.10.tar.gz";
-    sha256 = "15cmw7k2siy9m7s1383l1h8kix8cwb143yvwhxdahbnx4lfnzfz8";
+    url = "https://github.com/SnabbCo/snabbswitch/archive/v${version}.tar.gz";
+    sha256 = "1949a6d3hqdr2hdfmrr1na9gvjdwdahadbhmvz2pg7azmpq6ssmr";
   };
 
+  buildInputs = [ makeWrapper ];
+
+  patchPhase = ''
+    patchShebangs .
+
+    # some hardcodeism
+    for f in $(find src/program/snabbnfv/ -type f); do
+      substituteInPlace $f --replace "/bin/bash" "${bash}/bin/bash"
+    done
+  '';
+
   installPhase = ''
     mkdir -p $out/bin
     cp src/snabb $out/bin
+
+    wrapProgram $out/bin/snabb --prefix PATH : "${ lib.makeBinPath [ git mariadb diffutils ]}"
   '';
 
   meta = with stdenv.lib; {
@@ -26,7 +40,7 @@ stdenv.mkDerivation rec {
     '';
     platforms = [ "x86_64-linux" ];
     license = licenses.asl20;
-    maintainers = [ maintainers.lukego ];
+    maintainers = [ maintainers.lukego maintainers.iElectric ];
   };
 }
 
diff --git a/pkgs/tools/networking/statsd/default.nix b/pkgs/tools/networking/statsd/default.nix
index 1143d55269f..6f909a915ae 100644
--- a/pkgs/tools/networking/statsd/default.nix
+++ b/pkgs/tools/networking/statsd/default.nix
@@ -3,7 +3,7 @@
 
 let
   self = recurseIntoAttrs (
-    callPackage <nixpkgs/pkgs/top-level/node-packages.nix> {
+    callPackage ../../../top-level/node-packages.nix {
       inherit nodejs self;
       generated = callPackage ./node-packages.nix { inherit self; };
       overrides = {
diff --git a/pkgs/tools/networking/unbound/default.nix b/pkgs/tools/networking/unbound/default.nix
index c15b7a99fe1..51b7285e3e8 100644
--- a/pkgs/tools/networking/unbound/default.nix
+++ b/pkgs/tools/networking/unbound/default.nix
@@ -33,7 +33,7 @@ stdenv.mkDerivation rec {
     description = "Validating, recursive, and caching DNS resolver";
     license = licenses.bsd3;
     homepage = http://www.unbound.net;
-    maintainers = [ maintainers.emery ];
-    platforms = platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.ehmry ];
+    platforms = stdenv.lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/package-management/nix-prefetch-scripts/default.nix b/pkgs/tools/package-management/nix-prefetch-scripts/default.nix
index b447272871f..f315ca47876 100644
--- a/pkgs/tools/package-management/nix-prefetch-scripts/default.nix
+++ b/pkgs/tools/package-management/nix-prefetch-scripts/default.nix
@@ -1,40 +1,52 @@
-{ stdenv, makeWrapper,
+{ stdenv, makeWrapper, buildEnv,
   git, subversion, mercurial, bazaar, cvs, unzip, curl, gnused, coreutils
 }:
-stdenv.mkDerivation {
-  name = "nix-prefetch-scripts";
 
-  buildInputs = [ makeWrapper ];
+let mkPrefetchScript = tool: src: deps:
+  stdenv.mkDerivation {
+    name = "nix-prefetch-${tool}";
+
+    buildInputs = [ makeWrapper ];
+
+    phases = [ "installPhase" "fixupPhase" ];
+    installPhase = ''
+      mkdir -p $out/bin
 
-  phases = [ "installPhase" "fixupPhase" ];
-  installPhase = ''
-    mkdir -p $out/bin
-    function copyScript {
-      local name=nix-prefetch-$1;
-      local src=$2;
       local wrapArgs=""
-      cp $src $out/bin/$name;
-      for dep in ''${@:3}; do
+      cp ${src} $out/bin/$name;
+      for dep in ${stdenv.lib.concatStringsSep " " deps}; do
         wrapArgs="$wrapArgs --prefix PATH : $dep/bin"
       done
       wrapArgs="$wrapArgs --prefix PATH : ${gnused}/bin"
       wrapArgs="$wrapArgs --set HOME : /homeless-shelter"
       wrapProgram $out/bin/$name $wrapArgs
-    }
-
-    copyScript "hg" ${../../../build-support/fetchhg/nix-prefetch-hg} ${mercurial}
-    copyScript "git" ${../../../build-support/fetchgit/nix-prefetch-git} ${git} ${coreutils}
-    copyScript "svn" ${../../../build-support/fetchsvn/nix-prefetch-svn} ${subversion.out}
-    copyScript "bzr" ${../../../build-support/fetchbzr/nix-prefetch-bzr} ${bazaar}
-    copyScript "cvs" ${../../../build-support/fetchcvs/nix-prefetch-cvs} ${cvs}
-    copyScript "zip" ${../../../build-support/fetchzip/nix-prefetch-zip} ${unzip} ${curl.bin}
-  '';
-
-  meta = with stdenv.lib; {
-    description = "Collection of all the nix-prefetch-* scripts which may be used to obtain source hashes";
-    maintainers = with maintainers; [ bennofs ];
-    platforms = with stdenv.lib.platforms; unix;
-    # Quicker to build than to download, I hope
-    hydraPlatforms = [];
+    '';
+
+    preferLocalBuild = true;
+
+    meta = with stdenv.lib; {
+      description = "Script used to obtain source hashes for fetch${tool}";
+      maintainers = with maintainers; [ bennofs ];
+      platforms = stdenv.lib.platforms.unix;
+    };
+  };
+in rec {
+  nix-prefetch-bzr = mkPrefetchScript "bzr" ../../../build-support/fetchbzr/nix-prefetch-bzr [bazaar];
+  nix-prefetch-cvs = mkPrefetchScript "cvs" ../../../build-support/fetchcvs/nix-prefetch-cvs [cvs];
+  nix-prefetch-git = mkPrefetchScript "git" ../../../build-support/fetchgit/nix-prefetch-git [git coreutils];
+  nix-prefetch-hg  = mkPrefetchScript "hg"  ../../../build-support/fetchhg/nix-prefetch-hg   [mercurial];
+  nix-prefetch-svn = mkPrefetchScript "svn" ../../../build-support/fetchsvn/nix-prefetch-svn [subversion.out];
+  nix-prefetch-zip = mkPrefetchScript "zip" ../../../build-support/fetchzip/nix-prefetch-zip [unzip curl.bin];
+
+  nix-prefetch-scripts = buildEnv {
+    name = "nix-prefetch-scripts";
+
+    paths = [ nix-prefetch-bzr nix-prefetch-cvs nix-prefetch-git nix-prefetch-hg nix-prefetch-svn nix-prefetch-zip ];
+
+    meta = with stdenv.lib; {
+      description = "Collection of all the nix-prefetch-* scripts which may be used to obtain source hashes";
+      maintainers = with maintainers; [ bennofs ];
+      platforms = stdenv.lib.platforms.unix;
+    };
   };
 }
diff --git a/pkgs/tools/package-management/nix/default.nix b/pkgs/tools/package-management/nix/default.nix
index 364032b70e9..9006785c3fc 100644
--- a/pkgs/tools/package-management/nix/default.nix
+++ b/pkgs/tools/package-management/nix/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, perl, curl, bzip2, sqlite, openssl ? null
+{ lib, stdenv, fetchurl, perl, curl, bzip2, sqlite, openssl ? null, xz
 , pkgconfig, boehmgc, perlPackages, libsodium
 , storeDir ? "/nix/store"
 , stateDir ? "/nix/var"
@@ -13,8 +13,8 @@ let
 
     nativeBuildInputs = [ perl pkgconfig ];
 
-    buildInputs = [ curl openssl sqlite ] ++
-      lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium;
+    buildInputs = [ curl openssl sqlite xz ]
+      ++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium;
 
     propagatedBuildInputs = [ boehmgc ];
 
@@ -97,10 +97,10 @@ in rec {
    };
 
    nixUnstable = lib.lowPrio (common rec {
-     name = "nix-1.11pre4273_71039be";
+     name = "nix-1.11pre4334_7431932";
      src = fetchurl {
-       url = "http://hydra.nixos.org/build/27061065/download/4/${name}.tar.xz";
-       sha256 = "4a1bc541868c317708fc8b532e22f5ead8d9759eee6a2680719584841cf897af";
+       url = "http://hydra.nixos.org/build/28747184/download/4/${name}.tar.xz";
+       sha256 = "ccb0c5be03b9af1bf89e79758868b0cd62c79fd7a0f0791cdb99df86e4240fc4";
      };
    });
 
diff --git a/pkgs/tools/package-management/opkg/default.nix b/pkgs/tools/package-management/opkg/default.nix
index 2a9d167cfcd..d89d4c58af3 100644
--- a/pkgs/tools/package-management/opkg/default.nix
+++ b/pkgs/tools/package-management/opkg/default.nix
@@ -1,14 +1,16 @@
-{ stdenv, fetchurl, pkgconfig, curl, gpgme, libarchive, bzip2, lzma, attr, acl }:
+{ stdenv, fetchurl, pkgconfig, curl, gpgme, libarchive, bzip2, lzma, attr, acl
+, autoreconfHook }:
 
 stdenv.mkDerivation rec {
-  version = "0.3.0";
+  version = "0.3.1";
   name = "opkg-${version}";
   src = fetchurl {
     url = "http://downloads.yoctoproject.org/releases/opkg/opkg-${version}.tar.gz";
-    sha256 = "13wqai7lgyfjlqvly0bz786wk9frl16a9yzrn27p3wwfvcf5swvz";
+    sha256 = "1pw7igmb4miyxl11sj9g8p8pgxg9nmn1h2hzi8b23v44hcmc1inj";
   };
 
-  buildInputs = [ pkgconfig curl gpgme libarchive bzip2 lzma attr acl ];
+  buildInputs = [ pkgconfig curl gpgme libarchive bzip2 lzma attr acl
+    autoreconfHook ];
 
   meta = with stdenv.lib; {
     description = "A lightweight package management system based upon ipkg";
diff --git a/pkgs/tools/security/eid-mw/default.nix b/pkgs/tools/security/eid-mw/default.nix
index 5e06d2f32e2..7823a9e0307 100644
--- a/pkgs/tools/security/eid-mw/default.nix
+++ b/pkgs/tools/security/eid-mw/default.nix
@@ -1,24 +1,26 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, gtk2, nssTools, pcsclite
+{ stdenv, fetchFromGitHub, autoreconfHook, gtk3, nssTools, pcsclite
 , pkgconfig }:
 
-let version = "4.1.8"; in
+let version = "4.1.9"; in
 stdenv.mkDerivation {
   name = "eid-mw-${version}";
 
   src = fetchFromGitHub {
-    sha256 = "1nmw4c2gvbpkrgjxyd2g0lbh85lb2czbgqplqrv69fr6azaddyyk";
+    sha256 = "03hf3bkawhr4kpjcv71xhja3d947qvxmjf0lkyjmv7i3fw3j8jqs";
     rev = "v${version}";
     repo = "eid-mw";
     owner = "Fedict";
   };
 
-  buildInputs = [ gtk2 pcsclite ];
+  buildInputs = [ gtk3 pcsclite ];
   nativeBuildInputs = [ autoreconfHook pkgconfig ];
 
   postPatch = ''
     sed 's@m4_esyscmd_s(.*,@[${version}],@' -i configure.ac
   '';
 
+  configureFlags = [ "--enable-dialogs=yes" ];
+
   enableParallelBuilding = true;
 
   doCheck = true;
diff --git a/pkgs/tools/security/gnupg/21.nix b/pkgs/tools/security/gnupg/21.nix
index 5fbd6e83970..9390207e14a 100644
--- a/pkgs/tools/security/gnupg/21.nix
+++ b/pkgs/tools/security/gnupg/21.nix
@@ -13,16 +13,16 @@ with stdenv.lib;
 assert x11Support -> pinentry != null;
 
 stdenv.mkDerivation rec {
-  name = "gnupg-2.1.9";
+  name = "gnupg-2.1.10";
 
   src = fetchurl {
     url = "mirror://gnupg/gnupg/${name}.tar.bz2";
-    sha256 = "1dpp555glln6fldk72ad7lkrn8h3cr2bg714z5kfn2qrawx67dqw";
+    sha256 = "1ybcsazjm21i2ys1wh49cz4azmqz7ghx5rb6hm4gm93i2zc5igck";
   };
 
   postPatch = stdenv.lib.optionalString stdenv.isLinux ''
     sed -i 's,"libpcsclite\.so[^"]*","${pcsclite}/lib/libpcsclite.so",g' scd/scdaemon.c
-  '';
+  ''; #" fix Emacs syntax highlighting :-(
 
   buildInputs = [
     pkgconfig libgcrypt libassuan libksba libiconv npth
diff --git a/pkgs/tools/security/mbox/default.nix b/pkgs/tools/security/mbox/default.nix
index 732cf704661..24a7ea51a82 100644
--- a/pkgs/tools/security/mbox/default.nix
+++ b/pkgs/tools/security/mbox/default.nix
@@ -30,7 +30,7 @@ stdenv.mkDerivation {
   meta = with stdenv.lib;
     { description = "Lightweight sandboxing mechanism that any user can use without special privileges";
       homepage = http://pdos.csail.mit.edu/mbox/;
-      maintainers = with maintainers; [ emery ];
+      maintainers = with maintainers; [ ehmry ];
       license = licenses.bsd3;
       platforms = [ "x86_64-linux" ];
     };
diff --git a/pkgs/tools/security/pass/rofi-pass.nix b/pkgs/tools/security/pass/rofi-pass.nix
new file mode 100644
index 00000000000..94dca5dca68
--- /dev/null
+++ b/pkgs/tools/security/pass/rofi-pass.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchgit
+, pass, rofi, coreutils, utillinux, xdotool, gnugrep, pwgen, findutils
+, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "rofi-pass-${version}";
+  version = "1.3.1";
+
+  src = fetchgit {
+    url = "https://github.com/carnager/rofi-pass";
+    rev = "refs/tags/${version}";
+    sha256 = "1r206fq96avhlgkf2fzf8j2a25dav0s945qv66hwvqwhxq74frrv";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a $src/rofi-pass $out/bin/rofi-pass
+
+    mkdir -p $out/share/doc/rofi-pass/
+    cp -a $src/config.example $out/share/doc/rofi-pass/config.example
+  '';
+
+  wrapperPath = with stdenv.lib; makeSearchPath "bin/" [
+    coreutils
+    findutils
+    gnugrep
+    pass
+    pwgen
+    rofi
+    utillinux
+    xdotool
+  ];
+
+  fixupPhase = ''
+    patchShebangs $out/bin
+
+    wrapProgram $out/bin/rofi-pass \
+      --prefix PATH : "${wrapperPath}"
+  '';
+
+  meta = {
+    description = "A script to make rofi work with password-store";
+    homepage = https://github.com/carnager/rofi-pass;
+    maintainers = with stdenv.lib.maintainers; [ hiberno the-kenny ];
+    license = stdenv.lib.licenses.gpl3;
+  };
+}
diff --git a/pkgs/tools/security/pcsclite/default.nix b/pkgs/tools/security/pcsclite/default.nix
index 4c96c947f57..41c10685435 100644
--- a/pkgs/tools/security/pcsclite/default.nix
+++ b/pkgs/tools/security/pcsclite/default.nix
@@ -11,18 +11,18 @@ stdenv.mkDerivation rec {
   configureFlags = [
     # The OS should care on preparing the drivers into this location
     "--enable-usbdropdir=/var/lib/pcsc/drivers"
-    "--with-systemdsystemunitdir=\${out}/etc/systemd/system"
     "--enable-confdir=/etc"
-  ];
+  ] ++ stdenv.lib.optional stdenv.isLinux
+         "--with-systemdsystemunitdir=\${out}/etc/systemd/system";
 
   nativeBuildInputs = [ pkgconfig perl python2 ];
-  buildInputs = [ udev dbus_libs ];
+  buildInputs = stdenv.lib.optionals stdenv.isLinux [ udev dbus_libs ];
 
   meta = with stdenv.lib; {
     description = "Middleware to access a smart card using SCard API (PC/SC)";
     homepage = http://pcsclite.alioth.debian.org/;
     license = licenses.bsd3;
     maintainers = with maintainers; [ viric wkennington ];
-    platforms = platforms.linux;
+    platforms = with platforms; unix;
   };
 }
diff --git a/pkgs/tools/security/pinentry/default.nix b/pkgs/tools/security/pinentry/default.nix
index 30d717c7bc1..8ccf1ba7ccd 100644
--- a/pkgs/tools/security/pinentry/default.nix
+++ b/pkgs/tools/security/pinentry/default.nix
@@ -10,11 +10,11 @@ let
 in
 with stdenv.lib;
 stdenv.mkDerivation rec {
-  name = "pinentry-0.9.5";
+  name = "pinentry-0.9.6";
 
   src = fetchurl {
     url = "mirror://gnupg/pinentry/${name}.tar.bz2";
-    sha256 = "1338hj1h3sh34897120y30x12b64wyj3xjzzk5asm2hdzhxgsmva";
+    sha256 = "0rhyw1vk28kgasjp22myf7m2q8kycw82d65pr9kgh93z17lj849a";
   };
 
   buildInputs = [ libgpgerror libassuan libcap gtk2 ncurses qt4 ];
diff --git a/pkgs/tools/security/pinentry/qt5.nix b/pkgs/tools/security/pinentry/qt5.nix
new file mode 100644
index 00000000000..d0811cdd11a
--- /dev/null
+++ b/pkgs/tools/security/pinentry/qt5.nix
@@ -0,0 +1,47 @@
+{ fetchurl, stdenv, pkgconfig
+, libgpgerror, libassuan
+, qtbase
+, libcap ? null
+}:
+
+let
+  mkFlag = pfxTrue: pfxFalse: cond: name: "--${if cond then pfxTrue else pfxFalse}-${name}";
+  mkEnable = mkFlag "enable" "disable";
+  mkWith = mkFlag "with" "without";
+in
+with stdenv.lib;
+stdenv.mkDerivation rec {
+  name = "pinentry-0.9.6";
+
+  src = fetchurl {
+    url = "mirror://gnupg/pinentry/${name}.tar.bz2";
+    sha256 = "0rhyw1vk28kgasjp22myf7m2q8kycw82d65pr9kgh93z17lj849a";
+  };
+
+  buildInputs = [ libgpgerror libassuan libcap qtbase ];
+
+  # configure cannot find moc on its own
+  preConfigure = ''
+    export QTDIR="${qtbase}"
+    export MOC="${qtbase}/bin/moc"
+  '';
+
+  configureFlags = [
+    (mkWith   (libcap != null)  "libcap")
+    (mkEnable true "pinentry-qt")
+  ];
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  meta = {
+    homepage = "http://gnupg.org/aegypten2/";
+    description = "GnuPG's interface to passphrase input";
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.all;
+    longDescription = ''
+      Pinentry provides a console and (optional) GTK+ and Qt GUIs allowing users
+      to enter a passphrase when `gpg' or `gpg2' is run and needs it.
+    '';
+    maintainers = [ stdenv.lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/tools/security/sudo/default.nix b/pkgs/tools/security/sudo/default.nix
index 34e1731778f..6720c737866 100644
--- a/pkgs/tools/security/sudo/default.nix
+++ b/pkgs/tools/security/sudo/default.nix
@@ -4,14 +4,14 @@
 }:
 
 stdenv.mkDerivation rec {
-  name = "sudo-1.8.14p3";
+  name = "sudo-1.8.15";
 
   src = fetchurl {
     urls =
       [ "ftp://ftp.sudo.ws/pub/sudo/${name}.tar.gz"
         "ftp://ftp.sudo.ws/pub/sudo/OLD/${name}.tar.gz"
       ];
-    sha256 = "0dqj1bq2jr4jxqfrd5yg0i42a6268scd0l28jic9118kn75rg9m8";
+    sha256 = "0263gi6i19fyzzc488n0qw3m518i39f6a7qmrfvahk9j10bkh5j3";
   };
 
   configureFlags = [
diff --git a/pkgs/tools/security/tor/default.nix b/pkgs/tools/security/tor/default.nix
index 525259bdb02..9e73c7d4053 100644
--- a/pkgs/tools/security/tor/default.nix
+++ b/pkgs/tools/security/tor/default.nix
@@ -1,11 +1,11 @@
 { stdenv, fetchurl, libevent, openssl, zlib, torsocks, libseccomp }:
 
 stdenv.mkDerivation rec {
-  name = "tor-0.2.6.10";
+  name = "tor-0.2.7.5";
 
   src = fetchurl {
     url = "https://archive.torproject.org/tor-package-archive/${name}.tar.gz";
-    sha256 = "0542c0efe43b86619337862fa7eb02c7a74cb23a79d587090628a5f0f1224b8d";
+    sha256 = "0pxayvcab4cb107ynbpzx4g0qyr1mjfba2an76wdx6dxn56rwakx";
   };
 
   # Note: torsocks is specified as a dependency, as the distributed
diff --git a/pkgs/tools/system/ansible/default.nix b/pkgs/tools/system/ansible/default.nix
deleted file mode 100644
index ab5cea30873..00000000000
--- a/pkgs/tools/system/ansible/default.nix
+++ /dev/null
@@ -1,33 +0,0 @@
-{ windowsSupport ? true, stdenv, fetchurl, pythonPackages, python }:
-
-pythonPackages.buildPythonPackage rec {
-  version = "1.9.4";
-  name = "ansible-${version}";
-  namePrefix = "";
-
-  src = fetchurl {
-    url = "https://releases.ansible.com/ansible/${name}.tar.gz";
-    sha256 = "1qvgzb66nlyc2ncmgmqhzdk0x0p2px09967p1yypf5czwjn2yb4p";
-  };
-
-  prePatch = ''
-    sed -i "s,/usr/,$out," lib/ansible/constants.py
-  '';
-
-  doCheck = false;
-  dontStrip = true;
-  dontPatchELF = true;
-  dontPatchShebangs = true;
-
-  pythonPath = with pythonPackages; [
-    paramiko jinja2 pyyaml httplib2 boto six
-  ] ++ stdenv.lib.optional windowsSupport pywinrm;
-
-  meta = with stdenv.lib; {
-    homepage = "http://www.ansible.com";
-    description = "A simple automation tool";
-    license = licenses.gpl3;
-    maintainers = [ maintainers.joamaki ];
-    platforms = platforms.linux ++ [ "x86_64-darwin" ];
-  };
-}
diff --git a/pkgs/tools/system/sleuthkit/default.nix b/pkgs/tools/system/sleuthkit/default.nix
index 872dbf0c20e..b63d60633c3 100644
--- a/pkgs/tools/system/sleuthkit/default.nix
+++ b/pkgs/tools/system/sleuthkit/default.nix
@@ -1,12 +1,12 @@
 { stdenv, fetchurl, libewf, afflib, openssl, zlib }:
 
 stdenv.mkDerivation rec {
-  version = "4.1.3";
+  version = "4.2.0";
   name = "sleuthkit-${version}";
 
   src = fetchurl {
     url = "mirror://sourceforge/sleuthkit/${name}.tar.gz";
-    sha256 = "09q3ky4rpv18jasf5gc2hlivzadzl70jy4nnk23db1483aix5yb7";
+    sha256 = "08s7c1jwn2rjq2jm8859ywaiq12adrl02m61hc04iblqjzqqgcli";
   };
 
   enableParallelBuilding = true;
diff --git a/pkgs/tools/text/colordiff/default.nix b/pkgs/tools/text/colordiff/default.nix
index 89bbd862dad..9b041ae4b2b 100644
--- a/pkgs/tools/text/colordiff/default.nix
+++ b/pkgs/tools/text/colordiff/default.nix
@@ -1,11 +1,11 @@
 { stdenv, fetchurl, perl /*, xmlto */}:
 
-stdenv.mkDerivation {
-  name = "colordiff-1.0.15";
+stdenv.mkDerivation rec {
+  name = "colordiff-1.0.16";
 
   src = fetchurl {
-    url = http://www.colordiff.org/colordiff-1.0.15.tar.gz;
-    sha256 = "0icx4v2h1gy08vhh3qqi2qfyfjp37vgj27hq1fnjz83bg7ly8pjr";
+    url = "http://www.colordiff.org/${name}.tar.gz";
+    sha256 = "12qkkw13261dra8pg7mzx4r8p9pb0ajb090bib9j1s6hgphwzwga";
   };
 
   buildInputs = [ perl /* xmlto */ ];
diff --git a/pkgs/tools/text/gawk/default.nix b/pkgs/tools/text/gawk/default.nix
index e62b18a4c43..4556f12af63 100644
--- a/pkgs/tools/text/gawk/default.nix
+++ b/pkgs/tools/text/gawk/default.nix
@@ -18,6 +18,7 @@ stdenv.mkDerivation rec {
   doCheck = !(
        stdenv.isCygwin # XXX: `test-dup2' segfaults on Cygwin 6.1
     || stdenv.isDarwin # XXX: `locale' segfaults
+    || stdenv.isSunOS  # XXX: `_backsmalls1' fails, locale stuff?
   );
 
   buildInputs = [ xz.bin ]
diff --git a/pkgs/tools/text/gnugrep/default.nix b/pkgs/tools/text/gnugrep/default.nix
index d0259362df6..c2e47211e15 100644
--- a/pkgs/tools/text/gnugrep/default.nix
+++ b/pkgs/tools/text/gnugrep/default.nix
@@ -17,7 +17,7 @@ stdenv.mkDerivation {
   buildInputs = [ pcre libiconv ];
 
   # cygwin: FAIL: multibyte-white-space
-  doCheck = !stdenv.isDarwin && !stdenv.isCygwin;
+  doCheck = !stdenv.isDarwin && !stdenv.isSunOS && !stdenv.isCygwin;
 
   # On Mac OS X, force use of mkdir -p, since Grep's fallback
   # (./install-sh) is broken.
diff --git a/pkgs/tools/text/mawk/default.nix b/pkgs/tools/text/mawk/default.nix
index 3337fa62a28..67d2df10363 100644
--- a/pkgs/tools/text/mawk/default.nix
+++ b/pkgs/tools/text/mawk/default.nix
@@ -12,6 +12,6 @@ stdenv.mkDerivation rec {
     { description = "Interpreter for the AWK Programming Language";
       homepage = http://invisible-island.net/mawk/mawk.html;
       license = licenses.gpl2;
-      maintainers = with maintainers; [ emery ];
+      maintainers = with maintainers; [ ehmry ];
     };
 }
\ No newline at end of file
diff --git a/pkgs/tools/typesetting/rubber/default.nix b/pkgs/tools/typesetting/rubber/default.nix
index 7c58c480a79..96e1f532bff 100644
--- a/pkgs/tools/typesetting/rubber/default.nix
+++ b/pkgs/tools/typesetting/rubber/default.nix
@@ -1,22 +1,24 @@
-{ fetchurl, stdenv, python, texinfo }:
+{ fetchurl, stdenv, python, pythonPackages, texinfo }:
 
 stdenv.mkDerivation rec {
-  name = "rubber-1.1";
+  name = "rubber-1.3";
 
   src = fetchurl {
-    url = "http://ebeffara.free.fr/pub/${name}.tar.gz";
-    sha256 = "1xbkv8ll889933gyi2a5hj7hhh216k04gn8fwz5lfv5iz8s34gbq";
+    url = "https://launchpad.net/rubber/trunk/1.3/+download/rubber-1.3.tar.gz";
+    sha256 = "09715apfd6a0haz1mqsxgm8sj4rwzi38gcz2kz020zxk5rh0dksh";
   };
 
   buildInputs = [ python texinfo ];
+  nativeBuildInputs = [ pythonPackages.wrapPython ];
 
-  patchPhase = "substituteInPlace configure --replace which \"type -P\"";
+  patchPhase = ''
+    substituteInPlace configure --replace which "type -P"
+  '';
 
-  postInstall = "rm $out/share/rubber/modules/etex.rub";
+  postInstall = "wrapPythonPrograms";
 
   meta = {
     description = "Wrapper for LaTeX and friends";
-
     longDescription = ''
       Rubber is a program whose purpose is to handle all tasks related
       to the compilation of LaTeX documents.  This includes compiling
@@ -26,9 +28,8 @@ stdenv.mkDerivation rec {
       produce PostScript documents is also included, as well as usage
       of pdfLaTeX to produce PDF documents.
     '';
-
     license = stdenv.lib.licenses.gpl2Plus;
-
     homepage = http://www.pps.jussieu.fr/~beffara/soft/rubber/;
+    maintainers = [ stdenv.lib.maintainers.ttuegel ];
   };
 }
diff --git a/pkgs/tools/typesetting/tex/auctex/default.nix b/pkgs/tools/typesetting/tex/auctex/default.nix
index 8624fdf96af..6723526ff62 100644
--- a/pkgs/tools/typesetting/tex/auctex/default.nix
+++ b/pkgs/tools/typesetting/tex/auctex/default.nix
@@ -2,7 +2,7 @@
  
 stdenv.mkDerivation ( rec {
   pname = "auctex";
-  version = "11.88";
+  version = "11.89";
   name = "${pname}-${version}";
 
   meta = {
@@ -12,7 +12,7 @@ stdenv.mkDerivation ( rec {
 
   src = fetchurl {
     url = "mirror://gnu/${pname}/${name}.tar.gz";
-    sha256 = "0gy89nzha20p6m7kpv2nl1fnsfka9scc3mw1lz66fp6czganfs3i";
+    sha256 = "1cf9fkkmzjxa4jvk6c01zgxdikr4zzb5pcx8i4r0hwdk0xljkbwq";
   };
 
   buildInputs = [ emacs texLive ];
diff --git a/pkgs/tools/typesetting/tex/nix/default.nix b/pkgs/tools/typesetting/tex/nix/default.nix
index 223f72c6785..5cd5515400d 100644
--- a/pkgs/tools/typesetting/tex/nix/default.nix
+++ b/pkgs/tools/typesetting/tex/nix/default.nix
@@ -10,24 +10,29 @@ rec {
     , extraFiles ? []
     , compressBlanksInIndex ? true
     , packages ? []
+    , texPackages ? {}
     , copySources ? false
     }:
 
     assert generatePDF -> !generatePS;
-    
+
+    let
+      tex = pkgs.texlive.combine texPackages;
+    in
+
     pkgs.stdenv.mkDerivation {
       name = "doc";
-      
+
       builder = ./run-latex.sh;
       copyIncludes = ./copy-includes.pl;
-      
+
       inherit rootFile generatePDF generatePS extraFiles
         compressBlanksInIndex copySources;
 
       includes = map (x: [x.key (baseNameOf (toString x.key))])
         (findLaTeXIncludes {inherit rootFile;});
-      
-      buildInputs = [ pkgs.tetex pkgs.perl ] ++ packages;
+
+      buildInputs = [ tex pkgs.perl ] ++ packages;
     };
 
 
@@ -41,7 +46,7 @@ rec {
 
     builtins.genericClosure {
       startSet = [{key = rootFile;}];
-      
+
       operator =
         {key, ...}:
 
@@ -72,7 +77,7 @@ rec {
 
         in pkgs.lib.fold foundDeps [] deps;
     };
-    
+
 
   findLhs2TeXIncludes =
     { rootFile
@@ -80,7 +85,7 @@ rec {
 
     builtins.genericClosure {
       startSet = [{key = rootFile;}];
-      
+
       operator =
         {key, ...}:
 
@@ -103,10 +108,10 @@ rec {
       builder = ./dot2pdf.sh;
       inherit dotGraph fontsConf;
       buildInputs = [
-        pkgs.perl pkgs.tetex pkgs.graphviz
+        pkgs.perl pkgs.graphviz
       ];
     };
-  
+
 
   dot2ps =
     { dotGraph
@@ -117,7 +122,7 @@ rec {
       builder = ./dot2ps.sh;
       inherit dotGraph;
       buildInputs = [
-        pkgs.perl pkgs.tetex pkgs.graphviz pkgs.ghostscript
+        pkgs.perl pkgs.graphviz pkgs.ghostscript
       ];
     };
 
@@ -132,7 +137,7 @@ rec {
       includes = map (x: [x.key (baseNameOf (toString x.key))])
         (findLhs2TeXIncludes {rootFile = source;});
     };
-  
+
   animateDot = dotGraph: nrFrames: pkgs.stdenv.mkDerivation {
     name = "dot-frames";
     builder = ./animatedot.sh;
@@ -163,7 +168,7 @@ rec {
 
 
   # Convert a Postscript file to a PNG image, trimming it so that
-  # there is no unnecessary surrounding whitespace.    
+  # there is no unnecessary surrounding whitespace.
   postscriptToPNG =
     { postscript
     }:
@@ -173,7 +178,7 @@ rec {
       inherit postscript;
 
       buildInputs = [pkgs.imagemagick pkgs.ghostscript];
-      
+
       buildCommand = ''
         if test -d $postscript; then
           input=$(ls $postscript/*.ps)
@@ -240,5 +245,5 @@ rec {
       "${pkgs.ghostscript}/share/ghostscript/fonts"
     ];
   };
-  
+
 }