about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVladimír Čunát <vcunat@gmail.com>2016-04-22 16:49:09 +0200
committerVladimír Čunát <vcunat@gmail.com>2016-04-22 16:49:09 +0200
commite9379f7416d04b6b7ff475816b0aa395c1e3f7f9 (patch)
treea7da61f3fa5ed53454e210a59094a162711fcc3f
parent253b84a1eb2609ea7d71a236040515dc7c131b1b (diff)
parent685c34555ccd3d0eb07501783b7ca9d67e03aa18 (diff)
downloadnixlib-e9379f7416d04b6b7ff475816b0aa395c1e3f7f9.tar
nixlib-e9379f7416d04b6b7ff475816b0aa395c1e3f7f9.tar.gz
nixlib-e9379f7416d04b6b7ff475816b0aa395c1e3f7f9.tar.bz2
nixlib-e9379f7416d04b6b7ff475816b0aa395c1e3f7f9.tar.lz
nixlib-e9379f7416d04b6b7ff475816b0aa395c1e3f7f9.tar.xz
nixlib-e9379f7416d04b6b7ff475816b0aa395c1e3f7f9.tar.zst
nixlib-e9379f7416d04b6b7ff475816b0aa395c1e3f7f9.zip
Merge branch 'staging'
This includes a fix to closure-size regression that moved
share/doc/*/ to share/doc/
-rw-r--r--nixos/modules/config/pulseaudio.nix6
-rw-r--r--nixos/modules/services/x11/desktop-managers/kde5.nix24
-rw-r--r--pkgs/applications/altcoins/memorycoin.nix6
-rw-r--r--pkgs/applications/altcoins/namecoin.nix12
-rw-r--r--pkgs/applications/altcoins/primecoin.nix6
-rw-r--r--pkgs/applications/audio/dfasma/default.nix10
-rw-r--r--pkgs/applications/audio/fmit/default.nix15
-rw-r--r--pkgs/applications/audio/iannix/default.nix10
-rw-r--r--pkgs/applications/audio/keyfinder/default.nix11
-rw-r--r--pkgs/applications/audio/qtscrobbler/default.nix8
-rw-r--r--pkgs/applications/audio/sonic-visualiser/default.nix11
-rw-r--r--pkgs/applications/editors/focuswriter/default.nix8
-rw-r--r--pkgs/applications/editors/texmaker/default.nix6
-rw-r--r--pkgs/applications/editors/texstudio/default.nix8
-rw-r--r--pkgs/applications/editors/tiled/default.nix6
-rw-r--r--pkgs/applications/graphics/antimony/default.nix10
-rw-r--r--pkgs/applications/graphics/awesomebump/default.nix6
-rw-r--r--pkgs/applications/graphics/leocad/default.nix7
-rw-r--r--pkgs/applications/graphics/meshlab/default.nix6
-rw-r--r--pkgs/applications/graphics/openscad/default.nix8
-rw-r--r--pkgs/applications/graphics/phototonic/default.nix12
-rw-r--r--pkgs/applications/graphics/qtpfsgui/default.nix16
-rw-r--r--pkgs/applications/graphics/rapcad/default.nix11
-rw-r--r--pkgs/applications/misc/cool-retro-term/default.nix12
-rw-r--r--pkgs/applications/misc/diffpdf/default.nix9
-rw-r--r--pkgs/applications/misc/evopedia/default.nix7
-rw-r--r--pkgs/applications/misc/freicoin/default.nix6
-rw-r--r--pkgs/applications/misc/golden-cheetah/default.nix9
-rw-r--r--pkgs/applications/misc/goldendict/default.nix13
-rw-r--r--pkgs/applications/misc/gqrx/default.nix6
-rw-r--r--pkgs/applications/misc/keepassx/default.nix8
-rw-r--r--pkgs/applications/misc/librecad/default.nix8
-rw-r--r--pkgs/applications/misc/merkaartor/default.nix8
-rw-r--r--pkgs/applications/misc/multimon-ng/default.nix4
-rw-r--r--pkgs/applications/misc/navipowm/default.nix6
-rw-r--r--pkgs/applications/misc/openbrf/default.nix10
-rw-r--r--pkgs/applications/misc/qtbitcointrader/default.nix15
-rw-r--r--pkgs/applications/misc/qtpass/default.nix10
-rw-r--r--pkgs/applications/misc/tpmmanager/default.nix8
-rw-r--r--pkgs/applications/misc/twmn/default.nix9
-rw-r--r--pkgs/applications/misc/vym/default.nix8
-rw-r--r--pkgs/applications/networking/browsers/arora/default.nix5
-rw-r--r--pkgs/applications/networking/instant-messengers/qtox/default.nix16
-rw-r--r--pkgs/applications/networking/instant-messengers/ricochet/default.nix8
-rw-r--r--pkgs/applications/networking/instant-messengers/telegram/cutegram/default.nix10
-rw-r--r--pkgs/applications/networking/instant-messengers/telegram/libqtelegram-aseman-edition/default.nix9
-rw-r--r--pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix9
-rw-r--r--pkgs/applications/networking/instant-messengers/telegram/telegram-qml/default.nix9
-rw-r--r--pkgs/applications/networking/instant-messengers/vacuum/default.nix8
-rw-r--r--pkgs/applications/networking/irc/communi/default.nix13
-rw-r--r--pkgs/applications/networking/linssid/default.nix10
-rw-r--r--pkgs/applications/networking/mumble/default.nix12
-rw-r--r--pkgs/applications/networking/ostinato/default.nix7
-rw-r--r--pkgs/applications/networking/p2p/retroshare/0.6.nix10
-rw-r--r--pkgs/applications/networking/p2p/retroshare/default.nix10
-rw-r--r--pkgs/applications/networking/remote/x2goclient/default.nix8
-rw-r--r--pkgs/applications/science/electronics/fritzing/default.nix17
-rw-r--r--pkgs/applications/science/robotics/qgroundcontrol/default.nix14
-rw-r--r--pkgs/applications/version-management/git-and-tools/default.nix41
-rw-r--r--pkgs/applications/version-management/git-and-tools/qgit/default.nix13
-rw-r--r--pkgs/applications/version-management/git-and-tools/qgit/qgit-git.nix13
-rw-r--r--pkgs/applications/version-management/git-and-tools/svn2git-kde/default.nix10
-rw-r--r--pkgs/applications/version-management/guitone/default.nix7
-rw-r--r--pkgs/applications/video/bomi/default.nix6
-rw-r--r--pkgs/applications/video/clipgrab/default.nix7
-rw-r--r--pkgs/applications/video/linuxstopmotion/default.nix8
-rw-r--r--pkgs/applications/video/minitube/default.nix8
-rw-r--r--pkgs/applications/video/qgifer/default.nix4
-rw-r--r--pkgs/applications/video/shotcut/default.nix10
-rw-r--r--pkgs/build-support/setup-hooks/multiple-outputs.sh33
-rw-r--r--pkgs/data/documentation/zeal/default.nix14
-rw-r--r--pkgs/data/fonts/cantarell-fonts/default.nix10
-rw-r--r--pkgs/desktops/kde-5/frameworks-5.19/extra-cmake-modules/setup-hook.sh3
-rw-r--r--pkgs/desktops/kde-5/frameworks-5.19/kconfigwidgets/default.nix3
-rw-r--r--pkgs/desktops/kde-5/frameworks-5.19/kinit/0001-kinit-libpath.patch42
-rw-r--r--pkgs/desktops/kde-5/frameworks-5.19/kinit/default.nix4
-rw-r--r--pkgs/desktops/kde-5/frameworks-5.19/kinit/kinit-libpath.patch31
-rw-r--r--pkgs/desktops/kde-5/frameworks-5.19/kinit/series1
-rw-r--r--pkgs/desktops/kde-5/plasma-5.5/default.nix1
-rw-r--r--pkgs/desktops/kde-5/plasma-5.5/plasma-workspace/default.nix53
-rw-r--r--pkgs/desktops/kde-5/plasma-5.5/plasma-workspace/series1
-rw-r--r--pkgs/desktops/kde-5/plasma-5.5/startkde/default.nix32
-rwxr-xr-xpkgs/desktops/kde-5/plasma-5.5/startkde/startkde.sh334
-rw-r--r--pkgs/development/compilers/eql/default.nix2
-rw-r--r--pkgs/development/compilers/gcc/builder.sh6
-rw-r--r--pkgs/development/libraries/CGAL/default.nix3
-rw-r--r--pkgs/development/libraries/accounts-qt/default.nix10
-rw-r--r--pkgs/development/libraries/dbus/default.nix7
-rw-r--r--pkgs/development/libraries/dbus/ignore-missing-includedirs.patch23
-rw-r--r--pkgs/development/libraries/gdk-pixbuf/default.nix6
-rw-r--r--pkgs/development/libraries/gegl/3.0.nix11
-rw-r--r--pkgs/development/libraries/glib/default.nix6
-rw-r--r--pkgs/development/libraries/gnutls/3.4.nix4
-rw-r--r--pkgs/development/libraries/gobject-introspection/default.nix4
-rw-r--r--pkgs/development/libraries/gtk+/3.x.nix6
-rw-r--r--pkgs/development/libraries/herqq/default.nix6
-rw-r--r--pkgs/development/libraries/json-glib/default.nix6
-rw-r--r--pkgs/development/libraries/libcommuni/default.nix12
-rw-r--r--pkgs/development/libraries/libjpeg-turbo/default.nix4
-rw-r--r--pkgs/development/libraries/libkeyfinder/default.nix10
-rw-r--r--pkgs/development/libraries/libqglviewer/default.nix8
-rw-r--r--pkgs/development/libraries/libsigcxx/default.nix6
-rw-r--r--pkgs/development/libraries/mesa/default.nix4
-rw-r--r--pkgs/development/libraries/phonon-backend-gstreamer/qt4/default.nix17
-rw-r--r--pkgs/development/libraries/phonon/default.nix54
-rw-r--r--pkgs/development/libraries/phonon/qt4/default.nix28
-rw-r--r--pkgs/development/libraries/phonon/qt5/default.nix38
-rw-r--r--pkgs/development/libraries/polkit-qt-1/default.nix25
-rw-r--r--pkgs/development/libraries/polkit-qt-1/qt-4.nix21
-rw-r--r--pkgs/development/libraries/polkit-qt-1/qt-5.nix29
-rw-r--r--pkgs/development/libraries/qmltermwidget/default.nix11
-rw-r--r--pkgs/development/libraries/qoauth/default.nix8
-rw-r--r--pkgs/development/libraries/qscintilla/default.nix6
-rw-r--r--pkgs/development/libraries/qt-4.x/4.8/qmake-hook.sh11
-rw-r--r--pkgs/development/libraries/qt-5/5.4/default.nix5
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qmake-hook.sh101
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtbase/default.nix1
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtbase/setup-hook.sh103
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtmultimedia.nix2
-rw-r--r--pkgs/development/libraries/qt-5/5.5/default.nix5
-rw-r--r--pkgs/development/libraries/qt-5/5.5/make-qt-wrapper.sh20
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qmake-hook.sh101
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/default.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/nix-profiles-library-paths.patch18
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/setup-hook.sh102
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtdeclarative/nix-profiles-import-paths.patch20
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtmultimedia.nix2
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtquick1/nix-profiles-import-paths.patch20
-rw-r--r--pkgs/development/libraries/qtscriptgenerator/default.nix2
-rw-r--r--pkgs/development/libraries/quazip/default.nix11
-rw-r--r--pkgs/development/libraries/qwt/6.nix9
-rw-r--r--pkgs/development/libraries/qwt/default.nix9
-rw-r--r--pkgs/development/libraries/signon/default.nix10
-rw-r--r--pkgs/development/libraries/telepathy/glib/default.nix4
-rw-r--r--pkgs/development/python-modules/pygobject/3.nix8
-rw-r--r--pkgs/development/python-modules/pyqt/5.x.nix6
-rw-r--r--pkgs/development/qtcreator/default.nix23
-rw-r--r--pkgs/development/tools/analysis/valkyrie/default.nix5
-rwxr-xr-xpkgs/development/tools/build-managers/cmake/setup-hook.sh2
-rw-r--r--pkgs/games/chessx/default.nix6
-rw-r--r--pkgs/games/mudlet/default.nix10
-rw-r--r--pkgs/misc/emulators/ppsspp/default.nix6
-rw-r--r--pkgs/os-specific/linux/i7z/default.nix4
-rw-r--r--pkgs/os-specific/linux/wpa_supplicant/gui.nix7
-rw-r--r--pkgs/os-specific/windows/jom/default.nix7
-rw-r--r--pkgs/tools/audio/qastools/default.nix4
-rw-r--r--pkgs/tools/cd-dvd/unetbootin/default.nix8
-rw-r--r--pkgs/tools/compression/gzip/default.nix7
-rw-r--r--pkgs/tools/graphics/nifskope/default.nix10
-rw-r--r--pkgs/tools/inputmethods/touchegg/default.nix9
-rw-r--r--pkgs/tools/misc/rockbox-utility/default.nix6
-rw-r--r--pkgs/tools/misc/yubikey-personalization-gui/default.nix10
-rw-r--r--pkgs/tools/networking/cmst/default.nix15
-rw-r--r--pkgs/tools/text/groff/default.nix11
-rw-r--r--pkgs/top-level/all-packages.nix47
-rw-r--r--pkgs/top-level/python-packages.nix3
156 files changed, 1296 insertions, 1104 deletions
diff --git a/nixos/modules/config/pulseaudio.nix b/nixos/modules/config/pulseaudio.nix
index 642aedc3f242..1654d31cfeb4 100644
--- a/nixos/modules/config/pulseaudio.nix
+++ b/nixos/modules/config/pulseaudio.nix
@@ -98,9 +98,9 @@ in {
 
       package = mkOption {
         type = types.package;
-        default = pulseaudioLight;
-        defaultText = "pkgs.pulseaudioLight";
-        example = literalExample "pkgs.pulseaudioFull";
+        default = pulseaudioLight.out;
+        defaultText = "pkgs.pulseaudioLight.out";
+        example = literalExample "pkgs.pulseaudioFull.out";
         description = ''
           The PulseAudio derivation to use.  This can be used to enable
           features (such as JACK support, Bluetooth) via the
diff --git a/nixos/modules/services/x11/desktop-managers/kde5.nix b/nixos/modules/services/x11/desktop-managers/kde5.nix
index 4f74d5732af5..70dc1ac2a26a 100644
--- a/nixos/modules/services/x11/desktop-managers/kde5.nix
+++ b/nixos/modules/services/x11/desktop-managers/kde5.nix
@@ -62,17 +62,25 @@ in
           ${config.hardware.pulseaudio.package}/bin/pactl load-module module-device-manager "do_routing=1"
         ''}
 
-        exec startkde
+        exec "${kde5.startkde}"
+
       '';
     };
 
-    security.setuidOwners = singleton {
-      program = "kcheckpass";
-      source = "${kde5.plasma-workspace.out}/lib/libexec/kcheckpass";
-      owner = "root";
-      group = "root";
-      setuid = true;
-    };
+    security.setuidOwners = [
+      {
+        program = "kcheckpass";
+        source = "${kde5.plasma-workspace}/lib/libexec/kcheckpass";
+        owner = "root";
+        setuid = true;
+      }
+      {
+        program = "start_kdeinit_wrapper";
+        source = "${kde5.plasma-workspace}/lib/libexec/kf5/start_kdeinit_wrapper";
+        owner = "root";
+        setuid = true;
+      }
+    ];
 
     environment.systemPackages =
       [
diff --git a/pkgs/applications/altcoins/memorycoin.nix b/pkgs/applications/altcoins/memorycoin.nix
index 4e5e24e3062a..0470fd21eaea 100644
--- a/pkgs/applications/altcoins/memorycoin.nix
+++ b/pkgs/applications/altcoins/memorycoin.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchurl, pkgconfig, openssl, db48, boost
-, zlib, miniupnpc, qt4, utillinux, protobuf, qrencode
+, zlib, miniupnpc, qt4, qmake4Hook, utillinux, protobuf, qrencode
 , withGui }:
 
 with stdenv.lib;
@@ -15,13 +15,11 @@ stdenv.mkDerivation rec{
 
   buildInputs = [ pkgconfig openssl db48 boost zlib
                   miniupnpc utillinux protobuf ]
-                  ++ optionals withGui [ qt4 qrencode ];
+                  ++ optionals withGui [ qt4 qmake4Hook qrencode ];
 
   configureFlags = [ "--with-boost-libdir=${boost.lib}/lib" ]
                      ++ optionals withGui [ "--with-gui=qt4" ];
 
-  configurePhase = optional withGui "qmake";
-
   preBuild = optional (!withGui) "cd src; cp makefile.unix Makefile";
 
   installPhase =
diff --git a/pkgs/applications/altcoins/namecoin.nix b/pkgs/applications/altcoins/namecoin.nix
index f2e2aae698e2..563363b8baf4 100644
--- a/pkgs/applications/altcoins/namecoin.nix
+++ b/pkgs/applications/altcoins/namecoin.nix
@@ -1,4 +1,4 @@
-{ stdenv, db4, boost, openssl, qt4, miniupnpc, unzip, namecoind }:
+{ stdenv, db4, boost, openssl, qt4, qmake4Hook, miniupnpc, unzip, namecoind }:
 
 with stdenv.lib;
 stdenv.mkDerivation rec {
@@ -7,15 +7,9 @@ stdenv.mkDerivation rec {
   version = namecoind.version;
   src = namecoind.src;
 
-  buildInputs = [ db4 boost openssl unzip qt4 miniupnpc ];
+  buildInputs = [ db4 boost openssl unzip qt4 qmake4Hook miniupnpc ];
 
-  configurePhase = ''
-    qmake USE_UPNP=-
-  '';
-
-  buildPhase = ''
-    make
-  '';
+  qmakeFlags = [ "USE_UPNP=-" ];
 
   installPhase = ''
     mkdir -p $out/bin
diff --git a/pkgs/applications/altcoins/primecoin.nix b/pkgs/applications/altcoins/primecoin.nix
index 61bba04cb6ae..360a39a4fd81 100644
--- a/pkgs/applications/altcoins/primecoin.nix
+++ b/pkgs/applications/altcoins/primecoin.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchurl, pkgconfig, openssl, db48, boost
-, zlib, miniupnpc, qt4, utillinux, protobuf, qrencode
+, zlib, miniupnpc, qt4, qmake4Hook, utillinux, protobuf, qrencode
 , withGui }:
 
 with stdenv.lib;
@@ -15,13 +15,11 @@ stdenv.mkDerivation rec{
 
   buildInputs = [ pkgconfig openssl db48 boost zlib
                   miniupnpc utillinux protobuf ]
-                  ++ optionals withGui [ qt4 qrencode ];
+                  ++ optionals withGui [ qt4 qmake4Hook qrencode ];
 
   configureFlags = [ "--with-boost-libdir=${boost.lib}/lib" ]
                      ++ optionals withGui [ "--with-gui=qt4" ];
 
-  configurePhase = optional withGui "qmake";
-
   preBuild = optional (!withGui) "cd src; cp makefile.unix Makefile";
 
   installPhase =
diff --git a/pkgs/applications/audio/dfasma/default.nix b/pkgs/applications/audio/dfasma/default.nix
index 94f20bc543e3..d006f2c01781 100644
--- a/pkgs/applications/audio/dfasma/default.nix
+++ b/pkgs/applications/audio/dfasma/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fftw, libsndfile, qtbase, qtmultimedia, makeQtWrapper }:
+{ stdenv, fetchFromGitHub, fftw, libsndfile, qtbase, qtmultimedia, qmakeHook, makeQtWrapper }:
 
 let
 
@@ -37,7 +37,7 @@ in stdenv.mkDerivation rec {
     owner = "gillesdegottex";
   };
 
-  buildInputs = [ fftw libsndfile qtbase qtmultimedia ];
+  buildInputs = [ fftw libsndfile qtbase qtmultimedia qmakeHook ];
 
   nativeBuildInputs = [ makeQtWrapper ];
 
@@ -47,10 +47,8 @@ in stdenv.mkDerivation rec {
     cp -Rv "${libqaudioextra.src}"/* external/libqaudioextra
   '';
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake PREFIX=$out PREFIXSHORTCUT=$out dfasma.pro
-    runHook postConfigure
+  preConfigure = ''
+    qmakeFlags="$qmakeFlags PREFIXSHORTCUT=$out"
   '';
 
   enableParallelBuilding = true;
diff --git a/pkgs/applications/audio/fmit/default.nix b/pkgs/applications/audio/fmit/default.nix
index c27e049a4ae1..83367b83e480 100644
--- a/pkgs/applications/audio/fmit/default.nix
+++ b/pkgs/applications/audio/fmit/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fftw, freeglut, qtbase, qtmultimedia
+{ stdenv, fetchFromGitHub, fftw, freeglut, mesa_glu, qtbase, qtmultimedia, qmakeHook
 , alsaSupport ? true, alsaLib ? null
 , jackSupport ? false, libjack2 ? null
 , portaudioSupport ? false, portaudio ? null }:
@@ -18,22 +18,17 @@ stdenv.mkDerivation rec {
     owner = "gillesdegottex";
   };
 
-  buildInputs = [ fftw freeglut qtbase qtmultimedia ]
+  buildInputs = [ fftw freeglut mesa_glu qtbase qtmultimedia qmakeHook ]
     ++ stdenv.lib.optionals alsaSupport [ alsaLib ]
     ++ stdenv.lib.optionals jackSupport [ libjack2 ]
     ++ stdenv.lib.optionals portaudioSupport [ portaudio ];
 
-  configurePhase = ''
-    runHook preConfigure
-    mkdir build
-    cd build
-    qmake \
+  preConfigure = ''
+    qmakeFlags="$qmakeFlags \
       CONFIG+=${stdenv.lib.optionalString alsaSupport "acs_alsa"} \
       CONFIG+=${stdenv.lib.optionalString jackSupport "acs_jack"} \
       CONFIG+=${stdenv.lib.optionalString portaudioSupport "acs_portaudio"} \
-      PREFIX="$out" PREFIXSHORTCUT="$out" \
-      ../fmit.pro
-    runHook postConfigure
+      PREFIXSHORTCUT=$out"
   '';
 
   enableParallelBuilding = true;
diff --git a/pkgs/applications/audio/iannix/default.nix b/pkgs/applications/audio/iannix/default.nix
index f17abf975218..83fd2b14ed2e 100644
--- a/pkgs/applications/audio/iannix/default.nix
+++ b/pkgs/applications/audio/iannix/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, alsaLib, pkgconfig, qt5
+{ stdenv, fetchFromGitHub, alsaLib, pkgconfig, qtbase, qtscript, qmakeHook
 }:
 
 stdenv.mkDerivation rec {
@@ -11,13 +11,9 @@ stdenv.mkDerivation rec {
     sha256 = "184ydb9f1303v332k5k3f1ki7cb6nkxhh6ij0yn72v7dp7figrgj";
   };
 
-    buildInputs = [ alsaLib pkgconfig qt5.qtbase qt5.qtscript ];
+  buildInputs = [ alsaLib pkgconfig qtbase qtscript qmakeHook ];
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake PREFIX=/
-    runHook postConfigure
-  '';
+  qmakeFlags = [ "PREFIX=/" ];
 
   installFlags = [ "INSTALL_ROOT=$(out)" ];
 
diff --git a/pkgs/applications/audio/keyfinder/default.nix b/pkgs/applications/audio/keyfinder/default.nix
index 049920d28079..0cacd7724939 100644
--- a/pkgs/applications/audio/keyfinder/default.nix
+++ b/pkgs/applications/audio/keyfinder/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libav_0_8, libkeyfinder, qtbase, qtxmlpatterns, taglib }:
+{ stdenv, fetchFromGitHub, libav_0_8, libkeyfinder, qtbase, qtxmlpatterns, qmakeHook, taglib }:
 
 stdenv.mkDerivation rec {
   name = "keyfinder-${version}";
@@ -11,21 +11,14 @@ stdenv.mkDerivation rec {
     owner = "ibsh";
   };
 
-  buildInputs = [ libav_0_8 libkeyfinder qtbase qtxmlpatterns taglib ];
+  buildInputs = [ libav_0_8 libkeyfinder qtbase qtxmlpatterns qmakeHook taglib ];
 
   postPatch = ''
     substituteInPlace is_KeyFinder.pro \
        --replace "keyfinder.0" "keyfinder" \
-       --replace '$$[QT_INSTALL_PREFIX]' "$out" \
        --replace "-stdlib=libc++" ""
   '';
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake
-    runHook postConfigure
-  '';
-
   enableParallelBuilding = true;
 
   meta = with stdenv.lib; {
diff --git a/pkgs/applications/audio/qtscrobbler/default.nix b/pkgs/applications/audio/qtscrobbler/default.nix
index e7108ebe4871..453da89953e0 100644
--- a/pkgs/applications/audio/qtscrobbler/default.nix
+++ b/pkgs/applications/audio/qtscrobbler/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchurl, withMtp ? true, libmtp, pkgconfig, which, qt4 }:
+{ stdenv, lib, fetchurl, withMtp ? true, libmtp, pkgconfig, which, qt4, qmake4Hook }:
 
 stdenv.mkDerivation rec {
   name = "qtscrobbler-${version}";
@@ -9,18 +9,16 @@ stdenv.mkDerivation rec {
     sha256 = "01c8e48f616ed09504833d27d92fd62f455bd645ea2d1cc2a5f4c287d641daba";
   };
 
-  nativeBuildInputs = lib.optionals withMtp [ pkgconfig which ];
+  nativeBuildInputs = [ qmake4Hook ] ++ lib.optionals withMtp [ pkgconfig which ];
   buildInputs = [ qt4 ] ++ lib.optional withMtp libmtp;
 
   enableParallelBuilding = true;
 
   postPatch = ''
     cd src
-    sed -i "s,/usr/local,$out," common.pri
+    sed -i -e "s,/usr/local,$out," -e "s,/usr,," common.pri
   '';
 
-  configurePhase = "qmake";
-
   meta = with lib; {
     description = "Qt based last.fm scrobbler";
     longDescription = ''
diff --git a/pkgs/applications/audio/sonic-visualiser/default.nix b/pkgs/applications/audio/sonic-visualiser/default.nix
index ae7a39240a54..31a95c51fc50 100644
--- a/pkgs/applications/audio/sonic-visualiser/default.nix
+++ b/pkgs/applications/audio/sonic-visualiser/default.nix
@@ -3,7 +3,7 @@
 { stdenv, fetchurl, alsaLib, bzip2, fftw, libjack2, libX11, liblo
 , libmad, libogg, librdf, librdf_raptor, librdf_rasqal, libsamplerate
 , libsndfile, pkgconfig, libpulseaudio, makeQtWrapper, qtbase, redland
-, rubberband, serd, sord, vampSDK, fftwFloat
+, qmakeHook, rubberband, serd, sord, vampSDK, fftwFloat
 }:
 
 stdenv.mkDerivation rec {
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs =
-    [ libsndfile qtbase fftw fftwFloat bzip2 librdf rubberband
+    [ libsndfile qtbase qmakeHook fftw fftwFloat bzip2 librdf rubberband
       libsamplerate vampSDK alsaLib librdf_raptor librdf_rasqal redland
       serd
       sord
@@ -32,13 +32,12 @@ stdenv.mkDerivation rec {
       libX11
     ];
 
-  nativeBuildInputs = [ makeQtWrapper ];
+  nativeBuildInputs = [ makeQtWrapper qmakeHook ];
 
-  buildPhase = ''
+  configurePhase = ''
     for i in sonic-visualiser svapp svcore svgui;
-      do cd $i && qmake -makefile PREFIX=$out && cd ..;
+      do cd $i && qmake PREFIX=$out && cd ..;
     done
-    make
   '';
 
   installPhase = ''
diff --git a/pkgs/applications/editors/focuswriter/default.nix b/pkgs/applications/editors/focuswriter/default.nix
index bc9163e63cb4..eedb674b472c 100644
--- a/pkgs/applications/editors/focuswriter/default.nix
+++ b/pkgs/applications/editors/focuswriter/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, qt4, pkgconfig, hunspell}:
+{ stdenv, fetchurl, qt4, qmake4Hook, pkgconfig, hunspell }:
 
 stdenv.mkDerivation rec {
   name = "focuswriter-${version}";
@@ -9,11 +9,11 @@ stdenv.mkDerivation rec {
     sha256 = "1i58jxbiy95ijf81g8c3gwxhcg3irzssna3wv7vhrd57g4lcfj0w";
   };
 
-  buildInputs = [ qt4 pkgconfig hunspell ];
+  buildInputs = [ qt4 qmake4Hook pkgconfig hunspell ];
   
-  configurePhase = "qmake PREFIX=/";
+  qmakeFlags = [ "PREFIX=/" ];
 
-  installPhase = "make install INSTALL_ROOT=$out";
+  installFlags = [ "INSTALL_ROOT=$(out)" ];
 
   meta = {
     description = "Simple, distraction-free writing environment";
diff --git a/pkgs/applications/editors/texmaker/default.nix b/pkgs/applications/editors/texmaker/default.nix
index 04ebf195108f..83165f0a5054 100644
--- a/pkgs/applications/editors/texmaker/default.nix
+++ b/pkgs/applications/editors/texmaker/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt4, poppler_qt4, zlib, pkgconfig, poppler}:
+{ stdenv, fetchurl, qt4, qmake4Hook, poppler_qt4, zlib, pkgconfig, poppler }:
 
 stdenv.mkDerivation rec {
   pname = "texmaker";
@@ -11,11 +11,11 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ qt4 poppler_qt4 zlib ];
-  nativeBuildInputs = [ pkgconfig poppler ];
+  nativeBuildInputs = [ pkgconfig poppler qmake4Hook ];
   NIX_CFLAGS_COMPILE="-I${poppler}/include/poppler";
 
   preConfigure = ''
-    qmake PREFIX=$out DESKTOPDIR=$out/share/applications ICONDIR=$out/share/pixmaps texmaker.pro
+    qmakeFlags="$qmakeFlags DESKTOPDIR=$out/share/applications ICONDIR=$out/share/pixmaps"
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/applications/editors/texstudio/default.nix b/pkgs/applications/editors/texstudio/default.nix
index 4b0cccae3648..4accf1cad677 100644
--- a/pkgs/applications/editors/texstudio/default.nix
+++ b/pkgs/applications/editors/texstudio/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt4, poppler_qt4, zlib, pkgconfig}:
+{ stdenv, fetchurl, qt4, qmake4Hook, poppler_qt4, zlib, pkgconfig}:
 
 stdenv.mkDerivation rec {
   pname = "texstudio";
@@ -11,11 +11,9 @@ stdenv.mkDerivation rec {
     sha256 = "1smmc4xqs8x8qzp6iqj2wr4xarfnxxxp6rq6chx1kb256w75jwfw";
   };
 
-  buildInputs = [ qt4 poppler_qt4 zlib pkgconfig];
+  buildInputs = [ qt4 qmake4Hook poppler_qt4 zlib pkgconfig ];
 
-  preConfigure = ''
-    qmake PREFIX=$out NO_APPDATA=True texstudio.pro
-  '';
+  qmakeFlags = [ "NO_APPDATA=True" ];
 
   meta = with stdenv.lib; {
     description = "TeX and LaTeX editor";
diff --git a/pkgs/applications/editors/tiled/default.nix b/pkgs/applications/editors/tiled/default.nix
index 059b85cee5f7..e4b2f0461c24 100644
--- a/pkgs/applications/editors/tiled/default.nix
+++ b/pkgs/applications/editors/tiled/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qtbase, qttools, pkgconfig, python }:
+{ stdenv, fetchurl, qtbase, qttools, qmakeHook, pkgconfig, python }:
 
 let
   version = "0.12.3";
@@ -13,9 +13,7 @@ stdenv.mkDerivation rec {
     inherit sha256;
   };
 
-  buildInputs = [ qtbase qttools pkgconfig python ];
-
-  preConfigure = "qmake -r PREFIX=$out";
+  buildInputs = [ qtbase qttools qmakeHook pkgconfig python ];
 
   meta = {
     description = "A free, easy to use and flexible tile map editor";
diff --git a/pkgs/applications/graphics/antimony/default.nix b/pkgs/applications/graphics/antimony/default.nix
index fa9a7e0fdd3f..50b33096e3d2 100644
--- a/pkgs/applications/graphics/antimony/default.nix
+++ b/pkgs/applications/graphics/antimony/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, libpng, python3, boost, mesa, qtbase, ncurses }:
+{ stdenv, fetchgit, libpng, python3, boost, mesa, qtbase, qmakeHook, ncurses }:
 
 let
   gitRev    = "745eca3a2d2657c495d5509e9083c884e021d09c";
@@ -31,16 +31,14 @@ in
       mesa qtbase ncurses
     ];
 
-    configurePhase = ''
-      runHook preConfigure
+    nativeBuildHooks = [ qmakeHook ];
+
+    preConfigure = ''
       export GITREV=${gitRev}
       export GITBRANCH=${gitBranch}
       export GITTAG=${gitTag}
 
       cd qt
-      export sourceRoot=$sourceRoot/qt
-      qmake antimony.pro PREFIX=$out
-      runHook postConfigure
     '';
 
     enableParallelBuilding = true;
diff --git a/pkgs/applications/graphics/awesomebump/default.nix b/pkgs/applications/graphics/awesomebump/default.nix
index c71b1f9335b4..b89e18ed148c 100644
--- a/pkgs/applications/graphics/awesomebump/default.nix
+++ b/pkgs/applications/graphics/awesomebump/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, qtbase, makeWrapper }:
+{ lib, stdenv, fetchurl, qtbase, qmakeHook, makeWrapper }:
 
 stdenv.mkDerivation {
   name = "awesomebump-4.0";
@@ -10,9 +10,7 @@ stdenv.mkDerivation {
 
   setSourceRoot = "sourceRoot=$(echo */Sources)";
 
-  buildInputs = [ qtbase makeWrapper ];
-
-  preBuild = "qmake";
+  buildInputs = [ qtbase qmakeHook makeWrapper ];
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/applications/graphics/leocad/default.nix b/pkgs/applications/graphics/leocad/default.nix
index 9ca9c5921028..884dc1158534 100644
--- a/pkgs/applications/graphics/leocad/default.nix
+++ b/pkgs/applications/graphics/leocad/default.nix
@@ -3,7 +3,7 @@ To use aditional parts libraries
 set the variable LEOCAD_LIB=/path/to/libs/ or use option -l /path/to/libs/
 */
 
-{ stdenv, fetchsvn, qt4, zlib }:
+{ stdenv, fetchsvn, qt4, qmake4Hook, zlib }:
 
 stdenv.mkDerivation rec {
   name = "leocad-${version}";
@@ -14,12 +14,11 @@ stdenv.mkDerivation rec {
     sha256 = "1190gb437ls51hhfiwa79fq131026kywpy3j3k4fkdgfr8a9v3q8";
   };
 
-  buildInputs = [ qt4 zlib ];
+  buildInputs = [ qt4 qmake4Hook zlib ];
 
-  prefixKey = "INSTALL_PREFIX=";
-  configureScript = "qmake leocad.pro";
   postPatch = ''
     substituteInPlace common/camera.cpp --replace "isnan(" "std::isnan("
+    export qmakeFlags="$qmakeFlags INSTALL_PREFIX=$out"
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/applications/graphics/meshlab/default.nix b/pkgs/applications/graphics/meshlab/default.nix
index 49bfb47c85a4..d8434de5a77e 100644
--- a/pkgs/applications/graphics/meshlab/default.nix
+++ b/pkgs/applications/graphics/meshlab/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, qt4, bzip2, lib3ds, levmar, muparser, unzip}:
+{ stdenv, fetchurl, qt4, bzip2, lib3ds, levmar, muparser, unzip, vcg }:
 
 stdenv.mkDerivation rec {
   name = "meshlab-1.3.3";
@@ -16,8 +16,6 @@ stdenv.mkDerivation rec {
 
   buildPhase = ''
     mkdir -p "$out/include"
-    cp -r vcglib "$out/include"
-    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I$out/include/vcglib"
     export NIX_LDFLAGS="-rpath $out/opt/meshlab $NIX_LDFLAGS"
     cd meshlab/src
     pushd external
@@ -38,7 +36,7 @@ stdenv.mkDerivation rec {
 
   sourceRoot = ".";
 
-  buildInputs = [ qt4 unzip ];
+  buildInputs = [ qt4 unzip vcg ];
 
   meta = {
     description = "System for the processing and editing of unstructured 3D triangular meshes";
diff --git a/pkgs/applications/graphics/openscad/default.nix b/pkgs/applications/graphics/openscad/default.nix
index 7557e19896ff..f3b16a304608 100644
--- a/pkgs/applications/graphics/openscad/default.nix
+++ b/pkgs/applications/graphics/openscad/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt4, bison, flex, eigen, boost, mesa, glew, opencsg, cgal
+{ stdenv, fetchurl, qt4, qmake4Hook, bison, flex, eigen, boost, mesa, glew, opencsg, cgal
 , mpfr, gmp, glib, pkgconfig, harfbuzz, qscintilla, gettext
 }:
 
@@ -12,13 +12,11 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [
-    qt4 bison flex eigen boost mesa glew opencsg cgal mpfr gmp glib
+    qt4 qmake4Hook bison flex eigen boost mesa glew opencsg cgal mpfr gmp glib
     pkgconfig harfbuzz qscintilla gettext
   ];
 
-  configurePhase = ''
-    qmake PREFIX="$out" VERSION=${version}
-  '';
+  qmakeFlags = [ "VERSION=${version}" ];
 
   doCheck = false;
 
diff --git a/pkgs/applications/graphics/phototonic/default.nix b/pkgs/applications/graphics/phototonic/default.nix
index 4ed3a424031d..4782376d1e0b 100644
--- a/pkgs/applications/graphics/phototonic/default.nix
+++ b/pkgs/applications/graphics/phototonic/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, qtbase, exiv2 }:
+{ stdenv, fetchFromGitHub, qtbase, qmakeHook, exiv2 }:
 
 stdenv.mkDerivation rec {
   name = "phototonic-${version}";
@@ -14,16 +14,12 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ qtbase exiv2 ];
+  nativeBuildInputs = [ qmakeHook ];
 
-  configurePhase = ''
-    runHook preConfigure
-    sed -i 's;/usr;;' phototonic.pro
-    qmake PREFIX=""
-    runHook postConfigure
+  preConfigure = ''
+    sed -i 's;/usr;$$PREFIX/;g' phototonic.pro
   '';
 
-  installFlags = [ "INSTALL_ROOT=$(out)" ];
-
   meta = with stdenv.lib; {
     description = "An image viewer and organizer";
     homepage = http://oferkv.github.io/phototonic/;
diff --git a/pkgs/applications/graphics/qtpfsgui/default.nix b/pkgs/applications/graphics/qtpfsgui/default.nix
index efa245cc7e9a..5223ae14c63e 100644
--- a/pkgs/applications/graphics/qtpfsgui/default.nix
+++ b/pkgs/applications/graphics/qtpfsgui/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, qt4, exiv2, openexr, fftwSinglePrec, libtiff, ilmbase }:
+{stdenv, fetchurl, qt4, qmake4Hook, exiv2, openexr, fftwSinglePrec, libtiff, ilmbase }:
 
 stdenv.mkDerivation rec {
   name = "qtpfsgui-1.9.3";
@@ -9,15 +9,19 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ qt4 exiv2 openexr fftwSinglePrec libtiff ];
+  nativeBuildInputs = [ qmake4Hook ];
 
-  configurePhase = ''
+  preConfigure = ''
     export CPATH="${ilmbase}/include/OpenEXR:$CPATH"
-    qmake PREFIX=$out EXIV2PATH=${exiv2}/include/exiv2  \
-      OPENEXRDIR=${openexr}/include/OpenEXR             \
-      FFTW3DIR=${fftwSinglePrec}/include                \
-      LIBTIFFDIR=${libtiff}/include
   '';
 
+  qmakeFlags = [
+    "EXIV2PATH=${exiv2}/include/exiv2"
+    "OPENEXRDIR=${openexr}/include/OpenEXR"
+    "FFTW3DIR=${fftwSinglePrec}/include"
+    "LIBTIFFDIR=${libtiff}/include"
+  ];
+
   meta = {
     homepage = http://qtpfsgui.sourceforge.net/;
     description = "Qtpfsqui, a graphical application for high dynamic range (HDR) imaging";
diff --git a/pkgs/applications/graphics/rapcad/default.nix b/pkgs/applications/graphics/rapcad/default.nix
index 90cb360e7d57..d5d6e27219fa 100644
--- a/pkgs/applications/graphics/rapcad/default.nix
+++ b/pkgs/applications/graphics/rapcad/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchgit, cgal, boost, gmp, mpfr, flex, bison, dxflib, readline
-, qtbase
+, qtbase, qmakeHook, mesa_glu
 }:
 
 stdenv.mkDerivation rec {
@@ -12,14 +12,7 @@ stdenv.mkDerivation rec {
     sha256 = "15c18jvgbwyrfhv7r35ih0gzx35vjlsbi984h1sckgh2z17hjq8l";
   };
 
-  buildInputs = [ qtbase cgal boost gmp mpfr flex bison dxflib readline ];
-
-  configurePhase = ''
-    runHook preConfigure
-    qmake
-    sed -e "s@/usr/@$out/@g" -i $(find . -name Makefile)
-    runHook postConfigure
-  '';
+  buildInputs = [ qtbase qmakeHook cgal boost gmp mpfr flex bison dxflib readline mesa_glu ];
 
   meta = {
     license = stdenv.lib.licenses.gpl3;
diff --git a/pkgs/applications/misc/cool-retro-term/default.nix b/pkgs/applications/misc/cool-retro-term/default.nix
index 67b9b601139d..9ffa36adc123 100644
--- a/pkgs/applications/misc/cool-retro-term/default.nix
+++ b/pkgs/applications/misc/cool-retro-term/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchgit, makeQtWrapper, qtbase, qtquick1, qmltermwidget,
-qtquickcontrols, qtgraphicaleffects }:
+qtquickcontrols, qtgraphicaleffects, qmakeHook }:
 
 stdenv.mkDerivation rec {
   version = "1.0.0";
@@ -17,15 +17,9 @@ stdenv.mkDerivation rec {
   '';
 
   buildInputs = [ qtbase qtquick1 qmltermwidget qtquickcontrols qtgraphicaleffects ];
-  nativeBuildInputs = [ makeQtWrapper ];
+  nativeBuildInputs = [ makeQtWrapper qmakeHook ];
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake PREFIX=$out
-    runHook postConfigure
-  '';
-
-  installPhase = "make -j $NIX_BUILD_CORES INSTALL_ROOT=$out install";
+  installFlags = [ "INSTALL_ROOT=$(out)" ];
 
   preFixup = ''
     mv $out/usr/share $out/share
diff --git a/pkgs/applications/misc/diffpdf/default.nix b/pkgs/applications/misc/diffpdf/default.nix
index aefa4f755b8e..666c3a40cdcc 100644
--- a/pkgs/applications/misc/diffpdf/default.nix
+++ b/pkgs/applications/misc/diffpdf/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt4, poppler_qt4 }:
+{ stdenv, fetchurl, qt4, poppler_qt4, qmake4Hook }:
 
 stdenv.mkDerivation rec {
   version = "2.1.3";
@@ -12,13 +12,12 @@ stdenv.mkDerivation rec {
   patches = [ ./fix_path_poppler_qt4.patch ];
 
   buildInputs = [ qt4 poppler_qt4 ];
+  nativeBuildInputs = [ qmake4Hook ];
 
-  preBuild = ''
+  preConfigure = ''
     substituteInPlace diffpdf.pro --replace @@NIX_POPPLER_QT4@@ ${poppler_qt4}
-    [ -e "*.qm" ] && make clean
     lrelease diffpdf.pro
-    qmake -makefile PREFIX=\$out
-    '';
+  '';
 
   installPhase = ''
     mkdir -p $out/bin $out/share/man/man1
diff --git a/pkgs/applications/misc/evopedia/default.nix b/pkgs/applications/misc/evopedia/default.nix
index b7403d4826b2..b235da697d54 100644
--- a/pkgs/applications/misc/evopedia/default.nix
+++ b/pkgs/applications/misc/evopedia/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchgit, bzip2, qt4, libX11}:
+{ stdenv, fetchgit, bzip2, qt4, qmake4Hook, libX11 }:
 
 stdenv.mkDerivation rec {
   name = "evopedia-${version}";
@@ -10,11 +10,8 @@ stdenv.mkDerivation rec {
     sha256 = "1biq9zaj8nhxx1pixidsn97iwp9qy1yslgl0znpa4d4p35jcg48g";
   };
 
-  configurePhase = ''
-    qmake PREFIX=$out
-  '';
-
   buildInputs = [ bzip2 qt4 libX11 ];
+  nativeBuildInputs = [ qmake4Hook ];
 
   meta = {
     description = "Offline Wikipedia Viewer";
diff --git a/pkgs/applications/misc/freicoin/default.nix b/pkgs/applications/misc/freicoin/default.nix
index 65265fc07a5a..b4e71d4bbc75 100644
--- a/pkgs/applications/misc/freicoin/default.nix
+++ b/pkgs/applications/misc/freicoin/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, db, boost, gmp, mpfr, miniupnpc, qt4, unzip }:
+{ fetchurl, stdenv, db, boost, gmp, mpfr, miniupnpc, qt4, qmake4Hook, unzip }:
 
 stdenv.mkDerivation rec {
   version = "0.8.3-1";
@@ -11,9 +11,7 @@ stdenv.mkDerivation rec {
 
   # I think that openssl and zlib are required, but come through other
   # packages
-  buildInputs = [ db boost gmp mpfr miniupnpc qt4 unzip ];
-
-  configurePhase = "qmake";
+  buildInputs = [ db boost gmp mpfr miniupnpc qt4 unzip qmake4Hook ];
 
   installPhase = ''
     mkdir -p $out/bin
diff --git a/pkgs/applications/misc/golden-cheetah/default.nix b/pkgs/applications/misc/golden-cheetah/default.nix
index 799746ee6bd5..56b1d2a0029c 100644
--- a/pkgs/applications/misc/golden-cheetah/default.nix
+++ b/pkgs/applications/misc/golden-cheetah/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchurl, qtbase, qtsvg, qtserialport, qtwebkit, qtmultimedia
-, qttools, yacc, flex, zlib, config, makeQtWrapper }:
+, qttools, yacc, flex, zlib, config, qmakeHook, makeQtWrapper }:
 stdenv.mkDerivation rec {
   name = "golden-cheetah-${version}";
   version = "V4.0-DEV1603";
@@ -10,15 +10,14 @@ stdenv.mkDerivation rec {
   buildInputs = [
     qtbase qtsvg qtserialport qtwebkit qtmultimedia qttools yacc flex zlib
   ];
-  nativeBuildInputs = [ makeQtWrapper ];
-  configurePhase = ''
-    runHook preConfigure
+  nativeBuildInputs = [ makeQtWrapper qmakeHook ];
+  preConfigure = ''
     cp src/gcconfig.pri.in src/gcconfig.pri
     cp qwt/qwtconfig.pri.in qwt/qwtconfig.pri
     echo 'QMAKE_LRELEASE = ${qttools}/bin/lrelease' >> src/gcconfig.pri
     sed -i -e '21,23d' qwt/qwtconfig.pri # Removed forced installation to /usr/local
-    qmake PREFIX=$out build.pro
   '';
+  #postConfigure =
     #  + (
     # with (config.golden-cheetah);
     # stdenv.lib.optionalString (dropbox-client-id != null && dropbox-client-secret != null) ''
diff --git a/pkgs/applications/misc/goldendict/default.nix b/pkgs/applications/misc/goldendict/default.nix
index 9a7fad6a2074..36840c656d34 100644
--- a/pkgs/applications/misc/goldendict/default.nix
+++ b/pkgs/applications/misc/goldendict/default.nix
@@ -1,4 +1,5 @@
-{ stdenv, fetchFromGitHub, pkgconfig, qt4, libXtst, libvorbis, hunspell, libao, ffmpeg, libeb, lzo, xz, libtiff }:
+{ stdenv, fetchFromGitHub, pkgconfig, qt4, qmake4Hook, libXtst, libvorbis, hunspell
+, libao, ffmpeg, libeb, lzo, xz, libtiff }:
 stdenv.mkDerivation rec {
   name = "goldendict-1.5.0.ec86515";
   src = fetchFromGitHub {
@@ -8,10 +9,12 @@ stdenv.mkDerivation rec {
     sha256 = "070majwxbn15cy7sbgz7ljl8rkn7vcgkm10884v97csln7bfzwhr";
   };
 
-  buildInputs = [ pkgconfig qt4 libXtst libvorbis hunspell libao ffmpeg libeb lzo xz libtiff ];
-  configurePhase = ''
-    qmake PREFIX=$out 'CONFIG+=zim_support'
-  '';
+  buildInputs = [
+    pkgconfig qt4 libXtst libvorbis hunspell libao ffmpeg libeb
+    lzo xz libtiff qmake4Hook
+  ];
+
+  qmakeFlags = [ "CONFIG+=zim_support" ];
 
   meta = {
     homepage = http://goldendict.org/;
diff --git a/pkgs/applications/misc/gqrx/default.nix b/pkgs/applications/misc/gqrx/default.nix
index d30b6b8e8f96..3fda4d8881af 100644
--- a/pkgs/applications/misc/gqrx/default.nix
+++ b/pkgs/applications/misc/gqrx/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, qt4, gnuradio, boost, gnuradio-osmosdr
+{ stdenv, fetchFromGitHub, qt4, qmake4Hook, gnuradio, boost, gnuradio-osmosdr
 # drivers (optional):
 , rtl-sdr, hackrf
 , pulseaudioSupport ? true, libpulseaudio
@@ -17,12 +17,12 @@ stdenv.mkDerivation rec {
     sha256 = "02pavd1kc0gsnrl18bfa01r2f3j4j05zly4a8zwss9yrsgf8432x";
   };
 
+  nativeBuildInputs = [ qmake4Hook ];
+
   buildInputs = [
     qt4 gnuradio boost gnuradio-osmosdr rtl-sdr hackrf
   ] ++ stdenv.lib.optionals pulseaudioSupport [ libpulseaudio ];
 
-  configurePhase = ''qmake PREFIX="$out"'';
-
   enableParallelBuilding = true;
 
   postInstall = ''
diff --git a/pkgs/applications/misc/keepassx/default.nix b/pkgs/applications/misc/keepassx/default.nix
index 3d078d59be62..d0bddbc16102 100644
--- a/pkgs/applications/misc/keepassx/default.nix
+++ b/pkgs/applications/misc/keepassx/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, bzip2, qt4, libX11, xextproto, libXtst }:
+{ stdenv, fetchurl, bzip2, qt4, qmake4Hook, libX11, xextproto, libXtst }:
 
 stdenv.mkDerivation rec {
   name = "keepassx-${version}";
@@ -9,14 +9,12 @@ stdenv.mkDerivation rec {
     sha256 = "1i5dq10x28mg7m4c0yacm32xfj4j7imir4ph8x9p0s2ym260c9ry";
   };
 
-  configurePhase = ''
-    qmake PREFIX=$out 
-  '';
-
   patches = [ ./random.patch ];
 
   buildInputs = [ bzip2 qt4 libX11 xextproto libXtst ];
 
+  nativeBuildInputs = [ qmake4Hook ];
+
   meta = {
     description = "Qt password manager compatible with its Win32 and Pocket PC versions";
     homepage = http://www.keepassx.org/;
diff --git a/pkgs/applications/misc/librecad/default.nix b/pkgs/applications/misc/librecad/default.nix
index b41ef70394ec..d5c04ba555a1 100644
--- a/pkgs/applications/misc/librecad/default.nix
+++ b/pkgs/applications/misc/librecad/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt4, muparser, which, boost, pkgconfig }:
+{ stdenv, fetchurl, qt4, qmake4Hook, muparser, which, boost, pkgconfig }:
 
 stdenv.mkDerivation rec {
   version = "2.0.9";
@@ -15,9 +15,7 @@ stdenv.mkDerivation rec {
     sed -i -e s,/usr/share,$out/share, librecad/src/lib/engine/rs_system.cpp
   '';
 
-  configurePhase = ''
-    qmake librecad.pro PREFIX=$out MUPARSER_DIR=${muparser} BOOST_DIR=${boost.dev}
-  '';
+  qmakeFlags = [ "MUPARSER_DIR=${muparser}" "BOOST_DIR=${boost.dev}" ];
 
   installPhase = ''
     mkdir -p $out/bin $out/share
@@ -26,7 +24,7 @@ stdenv.mkDerivation rec {
   '';
 
   buildInputs = [ qt4 muparser which boost ];
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkgconfig qmake4Hook ];
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/applications/misc/merkaartor/default.nix b/pkgs/applications/misc/merkaartor/default.nix
index a270dca910ca..5954316e50fe 100644
--- a/pkgs/applications/misc/merkaartor/default.nix
+++ b/pkgs/applications/misc/merkaartor/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, qt4, boost, proj, gdal_1_11}:
+{ stdenv, fetchurl, qt4, qmake4Hook, boost, proj, gdal_1_11 }:
 
 stdenv.mkDerivation rec {
   name = "merkaartor-0.18.1";
@@ -7,12 +7,10 @@ stdenv.mkDerivation rec {
     sha256 = "17qk45pmlxqigla1915dvn9pp91y85d2bkcaap4g3m8mk1crcsix";
   };
 
-  configurePhase = ''
-    qmake -makefile PREFIX=$out
-  '';
-
   buildInputs = [ qt4 boost proj gdal_1_11 ];
 
+  nativeBuildInputs = [ qmake4Hook ];
+
   meta = {
     description = "An openstreetmap editor";
     homepage = http://merkaartor.org/;
diff --git a/pkgs/applications/misc/multimon-ng/default.nix b/pkgs/applications/misc/multimon-ng/default.nix
index f9aa567ed4b5..a9f0cb2511a4 100644
--- a/pkgs/applications/misc/multimon-ng/default.nix
+++ b/pkgs/applications/misc/multimon-ng/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, qt4, libpulseaudio }:
+{ stdenv, fetchFromGitHub, qt4, qmake4Hook, libpulseaudio }:
 let
   version = "1.0.0";
 in
@@ -14,7 +14,7 @@ stdenv.mkDerivation {
 
   buildInputs = [ qt4 libpulseaudio ];
 
-  preBuild = "qmake multimon-ng.pro";
+  nativeBuildInputs = [ qmake4Hook ];
 
   installPhase = ''
     mkdir -p $out/bin
diff --git a/pkgs/applications/misc/navipowm/default.nix b/pkgs/applications/misc/navipowm/default.nix
index 6d990831a369..447fc4570a76 100644
--- a/pkgs/applications/misc/navipowm/default.nix
+++ b/pkgs/applications/misc/navipowm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt4 }:
+{ stdenv, fetchurl, qt4, qmake4Hook }:
 stdenv.mkDerivation rec {
   name = "navipowm-0.2.4";
 
@@ -7,9 +7,8 @@ stdenv.mkDerivation rec {
     sha256 = "1kdih8kwpgcgfh6l6njkr9gq2j5hv39xvzmzgvhip553kn6bss7b";
   };
 
-  configurePhase = ''
+  preConfigure = ''
     cd Qt/KDevelop
-    qmake
   '';
 
   installPhase = ''
@@ -20,6 +19,7 @@ stdenv.mkDerivation rec {
   '';
 
   buildInputs = [ qt4 ];
+  nativeBuildInputs = [ qmake4Hook ];
 
   meta = {
     homepage = http://navipowm.sourceforge.net/;
diff --git a/pkgs/applications/misc/openbrf/default.nix b/pkgs/applications/misc/openbrf/default.nix
index 478f02b970e5..70be67a4d288 100644
--- a/pkgs/applications/misc/openbrf/default.nix
+++ b/pkgs/applications/misc/openbrf/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, qt4, vcg, glew }:
+{ stdenv, fetchFromGitHub, qt4, qmake4Hook, vcg, glew }:
 
 stdenv.mkDerivation {
   name = "openbrf-2016-01-09";
@@ -10,18 +10,16 @@ stdenv.mkDerivation {
     sha256 = "0laikpz0ljz7l5fgapwj09ygizmvj1iywnpfgfd0i14j46s134xb";
   };
 
-  buildInputs = [ qt4 vcg glew ];
+  buildInputs = [ qt4 qmake4Hook vcg glew ];
 
   enableParallelBuilding = true;
 
+  qmakeFlags = [ "openBrf.pro" ];
+
   postPatch = ''
     sed -i 's,^VCGLIB .*,VCGLIB = ${vcg}/include,' openBrf.pro
   '';
 
-  configurePhase = ''
-    qmake PREFIX=$out openBrf.pro
-  '';
-
   installPhase = ''
     install -Dm755 openBrf $out/bin/openBrf
   '';
diff --git a/pkgs/applications/misc/qtbitcointrader/default.nix b/pkgs/applications/misc/qtbitcointrader/default.nix
index 8b527463b228..7de4e3e55a19 100644
--- a/pkgs/applications/misc/qtbitcointrader/default.nix
+++ b/pkgs/applications/misc/qtbitcointrader/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, qt }:
+{ stdenv, fetchFromGitHub, qt4, qmake4Hook }:
 
 let
   version = "1.08.03";
@@ -13,23 +13,24 @@ stdenv.mkDerivation {
     sha256 = "0kxb0n11agqid0nyqdspfndm03b8l0nl8x4yx2hsrizs6m5z08h4";
   };
 
-  buildInputs = [ qt ];
+  buildInputs = [ qt4 ];
+
+  nativeBuildHooks = [ qmake4Hook ];
 
   postUnpack = "sourceRoot=\${sourceRoot}/src";
 
-  configurePhase = ''
-    qmake \
-      PREFIX=$out \
+  preConfigure = ''
+    qmakeFlags="$qmakeFlags \
       DESKTOPDIR=$out/share/applications \
       ICONDIR=$out/share/pixmaps \
-        QtBitcoinTrader_Desktop.pro
+    "
   '';
 
   meta = with stdenv.lib;
     { description = "Secure bitcoin trading client";
       homepage = https://centrabit.com/;
       license = licenses.lgpl3;
-      platforms = qt.meta.platforms;
+      platforms = qt4.meta.platforms;
       maintainers = [ maintainers.ehmry ];
     };
 }
diff --git a/pkgs/applications/misc/qtpass/default.nix b/pkgs/applications/misc/qtpass/default.nix
index 69730759d084..15f249ac9061 100644
--- a/pkgs/applications/misc/qtpass/default.nix
+++ b/pkgs/applications/misc/qtpass/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, git, gnupg, makeQtWrapper, pass, qtbase, qtsvg, qttools }:
+{ stdenv, fetchurl, git, gnupg, makeQtWrapper, pass, qtbase, qtsvg, qttools, qmakeHook }:
 
 stdenv.mkDerivation rec {
   name = "qtpass-${version}";
@@ -9,12 +9,10 @@ stdenv.mkDerivation rec {
     sha256 = "60b458062f54184057e55dbd9c93958a8bf845244ffd70b9cb31bf58697f0dc6";
   };
 
-  buildInputs = [ git gnupg makeQtWrapper pass qtbase qtsvg qttools ];
+  buildInputs = [ git gnupg makeQtWrapper pass qtbase qtsvg qttools qmakeHook ];
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake CONFIG+=release PREFIX=$out DESTDIR=$out
-    runHook postConfigure
+  preConfigure = ''
+    qmakeFlags="$qmakeFlags CONFIG+=release DESTDIR=$out"
   '';
 
   installPhase = ''
diff --git a/pkgs/applications/misc/tpmmanager/default.nix b/pkgs/applications/misc/tpmmanager/default.nix
index 85a1c72b349d..09322b47506b 100644
--- a/pkgs/applications/misc/tpmmanager/default.nix
+++ b/pkgs/applications/misc/tpmmanager/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, qt4, trousers }:
+{ stdenv, fetchgit, qt4, qmake4Hook, trousers }:
 
 stdenv.mkDerivation rec {
   version = "0.8.1";
@@ -10,11 +10,9 @@ stdenv.mkDerivation rec {
     sha256 = "24a606f88fed67ed0d0e61dc220295e9e1ab8db3ef3d028fa34b04ff30652d8e";
   };
 
-  buildInputs = [ qt4 trousers ];
+  nativeBuildInputs = [ qmake4Hook ];
 
-  preBuild = ''
-    qmake -makefile PREFIX=\$out
-    '';
+  buildInputs = [ qt4 trousers ];
 
   installPhase = ''
     mkdir -p $out/bin
diff --git a/pkgs/applications/misc/twmn/default.nix b/pkgs/applications/misc/twmn/default.nix
index fbbf45877d23..665e23237d8e 100644
--- a/pkgs/applications/misc/twmn/default.nix
+++ b/pkgs/applications/misc/twmn/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, fetchgit, qtbase, qtx11extras, pkgconfig, boost }:
+{ fetchurl, stdenv, fetchgit, qtbase, qtx11extras, qmakeHook, pkgconfig, boost }:
 
 stdenv.mkDerivation rec {
   name = "twmn-git-2014-09-23";
@@ -9,13 +9,10 @@ stdenv.mkDerivation rec {
     sha256 = "9c91e9d3d6d7f9d90d34da6f1a4b9f3dee65605c1e43729417d6921c54dded6b";
   };
 
-  buildInputs = [ qtbase qtx11extras pkgconfig boost ];
+  buildInputs = [ qtbase qtx11extras pkgconfig boost qmakeHook ];
 
-  configurePhase = ''
-    runHook preConfigure
+  postPatch = ''
     sed -i s/-Werror// twmnd/twmnd.pro
-    qmake
-    runHook postConfigure
   '';
 
   installPhase = ''
diff --git a/pkgs/applications/misc/vym/default.nix b/pkgs/applications/misc/vym/default.nix
index 62f741f9eeac..97fa47399f50 100644
--- a/pkgs/applications/misc/vym/default.nix
+++ b/pkgs/applications/misc/vym/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, qt4 }:
+{ stdenv, fetchurl, pkgconfig, qt4, qmake4Hook }:
 
 stdenv.mkDerivation rec {
   name = "vym-${version}";
@@ -9,11 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "1x4qp6wpszscbbs4czkfvskm7qjglvxm813nqv281bpy4y1hhvgs";
   };
 
-  buildInputs = [ pkgconfig qt4 ];
-
-  configurePhase = ''
-    qmake PREFIX="$out"
-  '';
+  buildInputs = [ pkgconfig qt4 qmake4Hook ];
 
   meta = with stdenv.lib; {
     description = "A mind-mapping software";
diff --git a/pkgs/applications/networking/browsers/arora/default.nix b/pkgs/applications/networking/browsers/arora/default.nix
index d812078b6aad..8bcefe4fe7b0 100644
--- a/pkgs/applications/networking/browsers/arora/default.nix
+++ b/pkgs/applications/networking/browsers/arora/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt4 }:
+{ stdenv, fetchurl, qt4, qmake4Hook }:
 
 stdenv.mkDerivation rec {
   name = "arora-${version}";
@@ -10,8 +10,7 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ qt4 ];
-
-  configurePhase = "qmake PREFIX=$out";
+  nativeBuildInputs = [ qmake4Hook ];
 
   meta = with stdenv.lib; {
     platforms = qt4.meta.platforms;
diff --git a/pkgs/applications/networking/instant-messengers/qtox/default.nix b/pkgs/applications/networking/instant-messengers/qtox/default.nix
index e08a112664ac..d244c4d11c41 100644
--- a/pkgs/applications/networking/instant-messengers/qtox/default.nix
+++ b/pkgs/applications/networking/instant-messengers/qtox/default.nix
@@ -1,7 +1,7 @@
 { stdenv, fetchFromGitHub, pkgconfig, libtoxcore-dev, openal, opencv,
   libsodium, libXScrnSaver, glib, gdk_pixbuf, gtk2, cairo,
-  pango, atk, qrencode, ffmpeg, filter-audio, makeWrapper,
-  qtbase, qtsvg, qttools, qttranslations, sqlcipher }:
+  pango, atk, qrencode, ffmpeg, filter-audio, makeQtWrapper,
+  qtbase, qtsvg, qttools, qmakeHook, qttranslations, sqlcipher }:
 
 let
   version = "1.3.0";
@@ -22,11 +22,11 @@ stdenv.mkDerivation rec {
     [
       libtoxcore-dev openal opencv libsodium filter-audio
       qtbase qttools qtsvg libXScrnSaver glib gtk2 cairo
-      pango atk qrencode ffmpeg qttranslations makeWrapper
+      pango atk qrencode ffmpeg qttranslations makeQtWrapper
       sqlcipher
     ];
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkgconfig qmakeHook ];
 
   preConfigure = ''
     # patch .pro file for proper set of the git hash
@@ -42,16 +42,10 @@ stdenv.mkDerivation rec {
     export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE $(pkg-config --cflags sqlcipher)"
   '';
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake
-  '';
-
   installPhase = ''
     mkdir -p $out/bin
     cp qtox $out/bin
-    wrapProgram $out/bin/qtox \
-      --prefix QT_PLUGIN_PATH : ${qtsvg}/lib/qt5/plugins
+    wrapQtProgram $out/bin/qtox
   '';
 
   enableParallelBuilding = true;
diff --git a/pkgs/applications/networking/instant-messengers/ricochet/default.nix b/pkgs/applications/networking/instant-messengers/ricochet/default.nix
index 81e8d1b76a9c..52da021000db 100644
--- a/pkgs/applications/networking/instant-messengers/ricochet/default.nix
+++ b/pkgs/applications/networking/instant-messengers/ricochet/default.nix
@@ -1,6 +1,6 @@
 { stdenv, fetchurl, pkgconfig, makeDesktopItem, unzip
 , qtbase, qttools, makeQtWrapper, qtmultimedia, qtquick1, qtquickcontrols
-, openssl, protobuf
+, openssl, protobuf, qmakeHook
 }:
 
 stdenv.mkDerivation rec {
@@ -27,15 +27,13 @@ stdenv.mkDerivation rec {
     openssl protobuf
   ];
 
-  nativeBuildInputs = [ pkgconfig makeQtWrapper ];
+  nativeBuildInputs = [ pkgconfig makeQtWrapper qmakeHook ];
 
   preConfigure = ''
     export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE $(pkg-config --cflags openssl)"
   '';
 
-  configureScript = "qmake";
-  dontAddPrefix = true;
-  configureFlags = [ "PREFIX=$(out)" "DEFINES+=RICOCHET_NO_PORTABLE" ];
+  qmakeFlags = [ "DEFINES+=RICOCHET_NO_PORTABLE" ];
 
   installPhase = ''
     mkdir -p $out/bin
diff --git a/pkgs/applications/networking/instant-messengers/telegram/cutegram/default.nix b/pkgs/applications/networking/instant-messengers/telegram/cutegram/default.nix
index 07bfcf3a03e0..bc517cadf522 100644
--- a/pkgs/applications/networking/instant-messengers/telegram/cutegram/default.nix
+++ b/pkgs/applications/networking/instant-messengers/telegram/cutegram/default.nix
@@ -3,7 +3,7 @@
 , qtimageformats, qtgraphicaleffects
 , telegram-qml, libqtelegram-aseman-edition
 , gst_all_1
-, makeQtWrapper }:
+, makeQtWrapper, qmakeHook }:
 
 stdenv.mkDerivation rec {
   name = "cutegram-${meta.version}";
@@ -20,16 +20,10 @@ stdenv.mkDerivation rec {
     telegram-qml libqtelegram-aseman-edition 
   ] ++ (with gst_all_1; [ gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly ]);
 
-  nativeBuildInputs = [ makeQtWrapper ];
+  nativeBuildInputs = [ makeQtWrapper qmakeHook ];
 
   enableParallelBuilding = true;
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake -r PREFIX=$out
-    runHook postConfigure
-  '';
-
   fixupPhase = ''
     wrapQtProgram $out/bin/cutegram \
       --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0"
diff --git a/pkgs/applications/networking/instant-messengers/telegram/libqtelegram-aseman-edition/default.nix b/pkgs/applications/networking/instant-messengers/telegram/libqtelegram-aseman-edition/default.nix
index 470724876ed9..322c40afc7dc 100644
--- a/pkgs/applications/networking/instant-messengers/telegram/libqtelegram-aseman-edition/default.nix
+++ b/pkgs/applications/networking/instant-messengers/telegram/libqtelegram-aseman-edition/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchFromGitHub
-, qtbase, qtmultimedia, qtquick1 }:
+, qtbase, qtmultimedia, qtquick1, qmakeHook }:
 
 stdenv.mkDerivation rec {
   name = "libqtelegram-aseman-edition-${meta.version}";
@@ -12,6 +12,7 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ qtbase qtmultimedia qtquick1 ];
+  nativeBuildInputs = [ qmakeHook ];
   enableParallelBuilding = true;
 
   patchPhase = ''
@@ -19,12 +20,6 @@ stdenv.mkDerivation rec {
     substituteInPlace libqtelegram-ae.pro --replace "/\$\$LIB_PATH" ""
   '';
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake -r PREFIX=$out
-    runHook postConfigure
-  '';
-
   meta = with stdenv.lib; {
     version = "6.1";
     description = "A fork of libqtelegram by Aseman, using qmake";
diff --git a/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix b/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix
index 77a0d9ee0aac..e734ddc57009 100644
--- a/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix
+++ b/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix
@@ -1,7 +1,7 @@
 { stdenv, lib, fetchFromGitHub, fetchgit, qtbase, qtimageformats
 , breakpad, ffmpeg, openalSoft, openssl, zlib, libexif, lzma, libopus
 , gtk2, glib, cairo, pango, gdk_pixbuf, atk, libappindicator-gtk2
-, libunity, dee, libdbusmenu-glib, libva
+, libunity, dee, libdbusmenu-glib, libva, qmakeHook
 
 , pkgconfig, libxcb, xcbutilwm, xcbutilimage, xcbutilkeysyms
 , libxkbcommon, libpng, libjpeg, freetype, harfbuzz, pcre16
@@ -31,7 +31,7 @@ in stdenv.mkDerivation rec {
   buildInputs = [
     breakpad ffmpeg openalSoft openssl zlib libexif lzma libopus
     gtk2 glib libappindicator-gtk2 libunity cairo pango gdk_pixbuf atk
-    dee libdbusmenu-glib libva
+    dee libdbusmenu-glib libva qmakeHook
     # Qt dependencies
     libxcb xcbutilwm xcbutilimage xcbutilkeysyms libxkbcommon
     libpng libjpeg freetype harfbuzz pcre16 xproto libX11
@@ -73,10 +73,9 @@ in stdenv.mkDerivation rec {
   qtSrcs = qtbase.srcs ++ [ qtimageformats.src ];
   qtPatches = qtbase.patches;
 
-  buildCommand = ''
-    # We don't use nativeBuildInputs to avoid adding system Qt 5 libraries to various paths.
-    export PATH="${qtbase}/bin:$PATH"
+  dontUseQmakeConfigure = true;
 
+  buildCommand = ''
     unpackPhase
     cd "$sourceRoot"
     patchPhase
diff --git a/pkgs/applications/networking/instant-messengers/telegram/telegram-qml/default.nix b/pkgs/applications/networking/instant-messengers/telegram/telegram-qml/default.nix
index 5412b0db4d6b..854648d97862 100644
--- a/pkgs/applications/networking/instant-messengers/telegram/telegram-qml/default.nix
+++ b/pkgs/applications/networking/instant-messengers/telegram/telegram-qml/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchFromGitHub
-, qtbase, qtmultimedia, qtquick1
+, qtbase, qtmultimedia, qtquick1, qmakeHook
 , libqtelegram-aseman-edition }:
 
 stdenv.mkDerivation rec {
@@ -13,6 +13,7 @@ stdenv.mkDerivation rec {
   };
 
   propagatedBuildInputs = [ qtbase qtmultimedia qtquick1 libqtelegram-aseman-edition ];
+  nativeBuildInputs = [ qmakeHook ];
   enableParallelBuilding = true;
 
   patchPhase = ''
@@ -20,11 +21,7 @@ stdenv.mkDerivation rec {
     substituteInPlace telegramqml.pro --replace "INSTALL_HEADERS_PREFIX/telegramqml" "INSTALL_HEADERS_PREFIX"
   '';
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake -r PREFIX=$out BUILD_MODE+=lib
-    runHook postConfigure
-  '';
+  qmakeFlags = [ "BUILD_MODE+=lib" ];
 
   meta = with stdenv.lib; {
     version = "0.9.2";
diff --git a/pkgs/applications/networking/instant-messengers/vacuum/default.nix b/pkgs/applications/networking/instant-messengers/vacuum/default.nix
index d7798273e7c6..2b5ce5f4142c 100644
--- a/pkgs/applications/networking/instant-messengers/vacuum/default.nix
+++ b/pkgs/applications/networking/instant-messengers/vacuum/default.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, fetchurl
-  , qt4, openssl
+  , qt4, qmake4Hook, openssl
   , xproto, libX11, libXScrnSaver, scrnsaverproto
   , xz, zlib
 }:
@@ -16,8 +16,10 @@ stdenv.mkDerivation rec {
     qt4 openssl xproto libX11 libXScrnSaver scrnsaverproto xz zlib
   ];
 
-  configurePhase = ''
-    qmake INSTALL_PREFIX=$out -recursive vacuum.pro
+  nativeBuildInputs = [ qmake4Hook ];
+
+  preConfigure = ''
+    qmakeFlags="$qmakeFlags INSTALL_PREFIX=$out"
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/applications/networking/irc/communi/default.nix b/pkgs/applications/networking/irc/communi/default.nix
index 4d2605acdc9e..4a8dc44dbf92 100644
--- a/pkgs/applications/networking/irc/communi/default.nix
+++ b/pkgs/applications/networking/irc/communi/default.nix
@@ -1,4 +1,4 @@
-{ fetchgit, libcommuni, makeQtWrapper, qt5, stdenv }:
+{ fetchgit, libcommuni, makeQtWrapper, qtbase, qmakeHook, stdenv }:
 
 stdenv.mkDerivation rec {
   name = "communi-${version}";
@@ -10,23 +10,22 @@ stdenv.mkDerivation rec {
     sha256 = "0gk6gck09zb44qfsal7bs4ln2vl9s9x3vfxh7jvfc7mmf7l3sspd";
   };
 
-  nativeBuildInputs = [ makeQtWrapper ];
+  nativeBuildInputs = [ makeQtWrapper qmakeHook ];
 
-  buildInputs = [ libcommuni qt5.qtbase ];
+  buildInputs = [ libcommuni qtbase ];
 
   enableParallelBuild = true;
 
-  configurePhase = ''
-    runHook preConfigure
+  preConfigure = ''
     export QMAKEFEATURES=${libcommuni}/features
-    qmake -r \
+    qmakeFlags="$qmakeFlags \
       COMMUNI_INSTALL_PREFIX=$out \
       COMMUNI_INSTALL_BINS=$out/bin \
       COMMUNI_INSTALL_PLUGINS=$out/lib/communi/plugins \
       COMMUNI_INSTALL_ICONS=$out/share/icons/hicolor \
       COMMUNI_INSTALL_DESKTOP=$out/share/applications \
       COMMUNI_INSTALL_THEMES=$out/share/communi/themes
-    runHook postConfigure
+    "
   '';
 
   postInstall = ''
diff --git a/pkgs/applications/networking/linssid/default.nix b/pkgs/applications/networking/linssid/default.nix
index 4cbc5c8c7967..d35c2e100e4c 100644
--- a/pkgs/applications/networking/linssid/default.nix
+++ b/pkgs/applications/networking/linssid/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qtbase, qtsvg, pkgconfig, boost, wirelesstools, iw, qwt6 }:
+{ stdenv, fetchurl, qtbase, qtsvg, qmakeHook, pkgconfig, boost, wirelesstools, iw, qwt6 }:
 
 stdenv.mkDerivation rec {
   name = "linssid-${version}";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "13d35rlcjncd8lx3khkgn9x8is2xjd5fp6ns5xsn3w6l4xj9b4gl";
   };
 
-  buildInputs = [ qtbase qtsvg pkgconfig boost qwt6 ];
+  buildInputs = [ qtbase qtsvg pkgconfig boost qwt6 qmakeHook ];
 
   patches = [ ./0001-unbundled-qwt.patch ];
 
@@ -27,12 +27,6 @@ stdenv.mkDerivation rec {
     rm -fr qwt-lib
   '';
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake linssid.pro
-    runHook postConfigure
-  '';
-
   meta = with stdenv.lib; {
     description = "Graphical wireless scanning for Linux";
     homepage = http://sourceforge.net/projects/linssid/;
diff --git a/pkgs/applications/networking/mumble/default.nix b/pkgs/applications/networking/mumble/default.nix
index 646e3dfdd0bb..20a321595201 100644
--- a/pkgs/applications/networking/mumble/default.nix
+++ b/pkgs/applications/networking/mumble/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchurl, fetchgit, pkgconfig
-, qt4, qt5, avahi, boost, libopus, libsndfile, protobuf, speex, libcap
+, qt4, qmake4Hook, qt5, avahi, boost, libopus, libsndfile, protobuf, speex, libcap
 , alsaLib
 , jackSupport ? false, libjack2 ? null
 , speechdSupport ? false, speechd ? null
@@ -20,13 +20,13 @@ let
     patches = optional jackSupport ./mumble-jack-support.patch;
 
     nativeBuildInputs = [ pkgconfig ]
-      ++ { qt4 = [ qt4 ]; qt5 = [ qt5.qtbase ]; }."qt${toString source.qtVersion}"
+      ++ { qt4 = [ qmake4Hook ]; qt5 = [ qt5.qmakeHook ]; }."qt${toString source.qtVersion}"
       ++ (overrides.nativeBuildInputs or [ ]);
     buildInputs = [ boost protobuf avahi ]
       ++ { qt4 = [ qt4 ]; qt5 = [ qt5.qtbase ]; }."qt${toString source.qtVersion}"
       ++ (overrides.buildInputs or [ ]);
 
-    configureFlags = [
+    qmakeFlags = [
       "CONFIG+=shared"
       "CONFIG+=no-g15"
       "CONFIG+=packaged"
@@ -39,10 +39,8 @@ let
       ++ optional jackSupport "CONFIG+=no-oss CONFIG+=no-alsa CONFIG+=jackaudio"
       ++ (overrides.configureFlags or [ ]);
 
-    configurePhase = ''
-      runHook preConfigure
-      qmake $configureFlags DEFINES+="PLUGIN_PATH=$out/lib"
-      runHook postConfigure
+    preConfigure = ''
+       qmakeFlags="$qmakeFlags DEFINES+=PLUGIN_PATH=$out/lib"
     '';
 
     makeFlags = [ "release" ];
diff --git a/pkgs/applications/networking/ostinato/default.nix b/pkgs/applications/networking/ostinato/default.nix
index 1d5986dbfa64..022096450458 100644
--- a/pkgs/applications/networking/ostinato/default.nix
+++ b/pkgs/applications/networking/ostinato/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchgit, fetchurl, writeText
-, qt4, protobuf, libpcap
+, qt4, qmake4Hook, protobuf, libpcap
 , wireshark, gzip, diffutils, gawk
 }:
 
@@ -18,10 +18,9 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ qt4 protobuf libpcap ];
 
-  patches = [ ./drone_ini.patch ];
+  nativeBuildInputs = [ qmake4Hook ];
 
-  configurePhase = "qmake PREFIX=$out"
-    + stdenv.lib.optionalString stdenv.isDarwin " -spec macx-g++";
+  patches = [ ./drone_ini.patch ];
 
   postInstall = ''
     cat > $out/bin/ostinato.ini <<EOF
diff --git a/pkgs/applications/networking/p2p/retroshare/0.6.nix b/pkgs/applications/networking/p2p/retroshare/0.6.nix
index 020d00170531..67028fb5dec1 100644
--- a/pkgs/applications/networking/p2p/retroshare/0.6.nix
+++ b/pkgs/applications/networking/p2p/retroshare/0.6.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, qt, libupnp, gpgme, gnome3, glib, libssh, pkgconfig, protobuf, bzip2
+{ stdenv, fetchFromGitHub, cmake, qt4, qmake4Hook, libupnp, gpgme, gnome3, glib, libssh, pkgconfig, protobuf, bzip2
 , libXScrnSaver, speex, curl, libxml2, libxslt, sqlcipher, libmicrohttpd, opencv }:
 
 stdenv.mkDerivation {
@@ -11,7 +11,7 @@ stdenv.mkDerivation {
     sha256 = "189qndkfq9kgv3qi3wx8ivla4j8fxr4iv7c8y9rjrjaz8jwdkn5x";
   };
 
-  NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/glib-2.0 -I${glib.dev}/lib/glib-2.0/include -I${libxml2.dev}/include/libxml2 -I${sqlcipher}/include/sqlcipher";
+  NIX_CFLAGS_COMPILE = [ "-I${glib.dev}/include/glib-2.0" "-I${glib.dev}/lib/glib-2.0/include" "-I${libxml2.dev}/include/libxml2" "-I${sqlcipher}/include/sqlcipher" ];
 
   patchPhase = ''
     # Fix build error
@@ -29,11 +29,11 @@ stdenv.mkDerivation {
   #    retroshare-gui/src/retroshare-gui.pro \
   #    retroshare-nogui/src/retroshare-nogui.pro
 
-  buildInputs = [ speex qt libupnp gpgme gnome3.libgnome_keyring glib libssh pkgconfig
+  buildInputs = [ speex qt4 libupnp gpgme gnome3.libgnome_keyring glib libssh pkgconfig qmake4Hook
                   protobuf bzip2 libXScrnSaver curl libxml2 libxslt sqlcipher libmicrohttpd opencv ];
 
-  configurePhase = ''
-    qmake PREFIX=$out DESTDIR=$out RetroShare.pro
+  preConfigure = ''
+    qmakeFlags="$qmakeFlags DESTDIR=$out"
   '';
 
   enableParallelBuilding = true;
diff --git a/pkgs/applications/networking/p2p/retroshare/default.nix b/pkgs/applications/networking/p2p/retroshare/default.nix
index e7fe79d66a56..314d0557e9f9 100644
--- a/pkgs/applications/networking/p2p/retroshare/default.nix
+++ b/pkgs/applications/networking/p2p/retroshare/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, qt, libupnp, gpgme, gnome3, glib, libssh, pkgconfig, protobuf, bzip2
+{ stdenv, fetchurl, cmake, qt4, qmake4Hook, libupnp, gpgme, gnome3, glib, libssh, pkgconfig, protobuf, bzip2
 , libXScrnSaver, speex, curl, libxml2, libxslt }:
 
 stdenv.mkDerivation {
@@ -9,7 +9,7 @@ stdenv.mkDerivation {
     sha256 = "0l2n4pr1hq66q6qa073hrdx3s3d7iw54z8ay1zy82zhk2rwhsavp";
   };
 
-  NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/glib-2.0 -I${glib.dev}/lib/glib-2.0/include -I${libxml2.dev}/include/libxml2";
+  NIX_CFLAGS_COMPILE = [ "-I${glib.dev}/include/glib-2.0" "-I${glib.dev}/lib/glib-2.0/include" "-I${libxml2.dev}/include/libxml2" ];
 
   patchPhase = ''
     sed -i 's/UpnpString_get_String(es_event->PublisherUrl)/es_event->PublisherUrl/' \
@@ -22,13 +22,13 @@ stdenv.mkDerivation {
       libretroshare/src/rsserver/rsinit.cc
   '';
 
-  buildInputs = [ speex qt libupnp gpgme gnome3.libgnome_keyring glib libssh pkgconfig
+  buildInputs = [ speex qt4 qmake4Hook libupnp gpgme gnome3.libgnome_keyring glib libssh pkgconfig
                   protobuf bzip2 libXScrnSaver curl libxml2 libxslt ];
 
   sourceRoot = "retroshare-0.5.5/src";
 
-  configurePhase = ''
-    qmake PREFIX=$out DESTDIR=$out RetroShare.pro
+  preConfigure = ''
+    qmakeFlags="$qmakeFlags DESTDIR=$out"
   '';
 
   postInstall = ''
diff --git a/pkgs/applications/networking/remote/x2goclient/default.nix b/pkgs/applications/networking/remote/x2goclient/default.nix
index 02a25b9a2704..09d4cf8dac5a 100644
--- a/pkgs/applications/networking/remote/x2goclient/default.nix
+++ b/pkgs/applications/networking/remote/x2goclient/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cups, libssh, libXpm, nxproxy, openldap, makeWrapper, qt4 }:
+{ stdenv, fetchurl, cups, libssh, libXpm, nxproxy, openldap, makeWrapper, qt4, qmake4Hook }:
 
 stdenv.mkDerivation rec {
   name = "x2goclient-${version}";
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ cups libssh libXpm nxproxy openldap qt4 ];
-  nativeBuildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper qmake4Hook ];
 
   patchPhase = ''
      substituteInPlace Makefile \
@@ -19,7 +19,9 @@ stdenv.mkDerivation rec {
        --replace "-o root -g root" ""
   '';
 
-  makeFlags = [ "PREFIX=$(out)" "ETCDIR=$(out)/etc" ];
+  preConfigure = ''
+    qmakeFlags="$qmakeFlags ETCDIR=$out/etc"
+  '';
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/applications/science/electronics/fritzing/default.nix b/pkgs/applications/science/electronics/fritzing/default.nix
index ff0502ac0cbb..110759ea292c 100644
--- a/pkgs/applications/science/electronics/fritzing/default.nix
+++ b/pkgs/applications/science/electronics/fritzing/default.nix
@@ -1,7 +1,6 @@
-{ stdenv, fetchurl, qtbase, qtsvg, boost }:
+{ stdenv, fetchurl, qtbase, qtsvg, qmakeHook, boost }:
 
 stdenv.mkDerivation rec {
-
   version = "0.9.0b";
   name = "fritzing-${version}";
 
@@ -10,19 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "181qnknq1j5x075icpw2qk0sc4wcj9f2hym533vs936is0wxp2gk";
   };
 
-  unpackPhase = ''
-    tar xjf ${src}
-  '';
-
-  buildInputs = [ qtbase qtsvg boost ];
-
-  configurePhase = ''
-    runHook preConfigure
-    cd fritzing-${version}.source
-    echo $PATH
-    qmake PREFIX=$out phoenix.pro
-    runHook postConfigure
-  '';
+  buildInputs = [ qtbase qtsvg boost qmakeHook ];
 
   meta = {
     description = "An open source prototyping tool for Arduino-based projects";
diff --git a/pkgs/applications/science/robotics/qgroundcontrol/default.nix b/pkgs/applications/science/robotics/qgroundcontrol/default.nix
index 692be0a88b12..cac9fef182cf 100644
--- a/pkgs/applications/science/robotics/qgroundcontrol/default.nix
+++ b/pkgs/applications/science/robotics/qgroundcontrol/default.nix
@@ -1,6 +1,6 @@
 { stdenv, fetchgit, git,  espeak, SDL, udev, doxygen, cmake, overrideCC#, gcc48
   , qtbase, qtlocation, qtserialport, qtdeclarative, qtconnectivity, qtxmlpatterns
-  , qtsvg, qtquick1, qtquickcontrols, qtgraphicaleffects
+  , qtsvg, qtquick1, qtquickcontrols, qtgraphicaleffects, qmakeHook
   , makeQtWrapper, lndir
   , gst_all_1, qt_gstreamer1, pkgconfig, glibc
   , version ? "2.9.4"
@@ -23,21 +23,11 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
   nativeBuildInputs = [
-    pkgconfig makeQtWrapper
+    pkgconfig makeQtWrapper qmakeHook
  ] ++ qtInputs;
 
   patches = [ ./0001-fix-gcc-cmath-namespace-issues.patch ];
 
-  configurePhase = ''
-    runHook preConfigure
-    mkdir build
-    (cd build && qmake ../qgroundcontrol.pro)
-    runHook postConfigure
-  '';
-
-  preBuild = "pushd build/";
-  postBuild = "popd";
-
   installPhase = ''
     mkdir -p $out/share/applications
     cp -v qgroundcontrol.desktop $out/share/applications
diff --git a/pkgs/applications/version-management/git-and-tools/default.nix b/pkgs/applications/version-management/git-and-tools/default.nix
index fa8f43a45c6f..e193701ff958 100644
--- a/pkgs/applications/version-management/git-and-tools/default.nix
+++ b/pkgs/applications/version-management/git-and-tools/default.nix
@@ -3,12 +3,7 @@
  */
 args @ {pkgs}: with args; with pkgs;
 let
-  inherit (pkgs) stdenv fetchgit fetchurl subversion;
-
-  gitBase = lib.makeOverridable (import ./git) {
-    inherit fetchurl stdenv curl openssl zlib expat perl python gettext gnugrep
-      asciidoc xmlto docbook2x docbook_xsl docbook_xml_dtd_45 libxslt cpio tcl
-      tk makeWrapper subversionClient gzip openssh libiconv;
+  gitBase = callPackage ./git {
     texinfo = texinfo5;
     svnSupport = false;         # for git-svn support
     guiSupport = false;         # requires tcl/tk
@@ -64,44 +59,28 @@ rec {
 
   git-stree = callPackage ./git-stree { };
 
-  git2cl = import ./git2cl {
-    inherit fetchgit stdenv perl;
-  };
+  git2cl = callPackage ./git2cl { };
 
-  gitFastExport = import ./fast-export {
-    inherit fetchgit stdenv mercurial coreutils git makeWrapper subversion;
-  };
+  gitFastExport = callPackage ./fast-export { };
 
   gitRemoteGcrypt = callPackage ./git-remote-gcrypt { };
 
   gitflow = callPackage ./gitflow { };
 
-  hub = import ./hub {
-    inherit go;
-    inherit stdenv fetchgit;
+  hub = callPackage ./hub {
     inherit (darwin) Security;
   };
 
-  qgit = import ./qgit {
-    inherit fetchurl stdenv;
-    inherit (xorg) libXext libX11;
-    qt = qt4;
-  };
+  qgit = callPackage ./qgit { };
 
-  qgitGit = import ./qgit/qgit-git.nix {
-    inherit fetchurl sourceFromHead stdenv;
-    inherit (xorg) libXext libX11;
-    qt = qt4;
-  };
+  qgitGit = callPackage ./qgit/qgit-git.nix { };
 
-  stgit = import ./stgit {
-    inherit fetchurl stdenv python git;
+  stgit = callPackage ./stgit {
   };
 
   subgit = callPackage ./subgit { };
 
-  svn2git = import ./svn2git {
-    inherit stdenv fetchurl ruby makeWrapper;
+  svn2git = callPackage ./svn2git {
     git = gitSVN;
   };
 
@@ -109,9 +88,7 @@ rec {
 
   tig = callPackage ./tig { };
 
-  topGit = lib.makeOverridable (import ./topgit) {
-    inherit stdenv fetchurl;
-  };
+  topGit = callPackage ./topgit { };
 
   transcrypt = callPackage ./transcrypt { };
 }
diff --git a/pkgs/applications/version-management/git-and-tools/qgit/default.nix b/pkgs/applications/version-management/git-and-tools/qgit/default.nix
index a7e6a62ce5f5..3f5f9a2dbe1b 100644
--- a/pkgs/applications/version-management/git-and-tools/qgit/default.nix
+++ b/pkgs/applications/version-management/git-and-tools/qgit/default.nix
@@ -1,21 +1,26 @@
-{stdenv, fetchurl, qt, libXext, libX11}:
+{ stdenv, fetchurl, qt4, qmake4Hook, libXext, libX11 }:
 
 stdenv.mkDerivation rec {
   name = "qgit-2.5";
+
   meta =
   {
     license = stdenv.lib.licenses.gpl2;
     homepage = "http://libre.tibirna.org/projects/qgit/wiki/QGit";
     description = "Graphical front-end to Git";
-    inherit (qt.meta) platforms;
+    inherit (qt4.meta) platforms;
   };
+
   src = fetchurl
   {
     url = "http://libre.tibirna.org/attachments/download/9/${name}.tar.gz";
     sha256 = "25f1ca2860d840d87b9919d34fc3a1b05d4163671ed87d29c3e4a8a09e0b2499";
   };
-  buildInputs = [qt libXext libX11];
-  configurePhase = "qmake PREFIX=$out";
+
+  buildInputs = [ qt4 libXext libX11 ];
+
+  nativeBuildInputs = [ qmake4Hook ];
+
   installPhase = ''
     install -s -D -m 755 bin/qgit "$out/bin/qgit"
   '';
diff --git a/pkgs/applications/version-management/git-and-tools/qgit/qgit-git.nix b/pkgs/applications/version-management/git-and-tools/qgit/qgit-git.nix
index 590e090de48c..c3d3c77ad336 100644
--- a/pkgs/applications/version-management/git-and-tools/qgit/qgit-git.nix
+++ b/pkgs/applications/version-management/git-and-tools/qgit/qgit-git.nix
@@ -1,20 +1,21 @@
-{stdenv, fetchurl, qt, libXext, libX11, sourceFromHead}:
+{ stdenv, fetchurl, qt4, qmake4Hook, libXext, libX11, sourceFromHead }:
 
 stdenv.mkDerivation rec {
   name = "qgit-git";
+
   meta =
   {
     license = stdenv.lib.licenses.gpl2;
     homepage = "http://digilander.libero.it/mcostalba/";
     description = "Graphical front-end to Git";
   };
+
   # REGION AUTO UPDATE:    { name="qgit"; type="git"; url="git://git.kernel.org/pub/scm/qgit/qgit4.git"; }
   src = sourceFromHead "qgit-a0252ed2a6a72b50e65d027adce8afa22e874277.tar.gz"
                (fetchurl { url = "http://mawercer.de/~nix/repos/qgit-a0252ed2a6a72b50e65d027adce8afa22e874277.tar.gz"; sha256 = "17e4727ac68b4f2e8503289d5b6a2c042547e7be133e7f8195b79e33eab61b93"; });
   # END
-  buildInputs = [qt libXext libX11];
-  buildPhase = ''
-    qmake PREFIX=$out
-    make
-  '';
+
+  buildInputs = [ qt4 libXext libX11 ];
+
+  nativeBuildInputs = [ qmake4Hook ];
 }
diff --git a/pkgs/applications/version-management/git-and-tools/svn2git-kde/default.nix b/pkgs/applications/version-management/git-and-tools/svn2git-kde/default.nix
index f282fa6635b8..e8f9078a839e 100644
--- a/pkgs/applications/version-management/git-and-tools/svn2git-kde/default.nix
+++ b/pkgs/applications/version-management/git-and-tools/svn2git-kde/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, qt4, subversion, apr}:
+{ stdenv, fetchgit, qt4, qmake4Hook, subversion, apr }:
 
 stdenv.mkDerivation rec {
   name = "svn2git-kde-1.0.5";
@@ -9,10 +9,10 @@ stdenv.mkDerivation rec {
     sha256 = "818673fe751b00a42b6ed3e78a783549fb09b5245a01dee47b3dded667bfc582";
   };
 
-  buildPhase = ''
+  NIX_CFLAGS_COMPILE = [ "-I${apr}/include/apr-1" "-I${subversion.dev}/include/subversion-1" "-DVER=\"${src.rev}\"" ];
+
+  patchPhase = ''
     sed -i 's|/bin/cat|cat|' ./src/repository.cpp
-    qmake
-    make CXXFLAGS='-I${apr}/include/apr-1 -I${subversion.dev}/include/subversion-1 -DVER="\"${src.rev}\""'
   '';
 
   installPhase = ''
@@ -22,5 +22,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ subversion apr qt4 ];
 
+  nativeBuildInputs = [ qmake4Hook ];
+
   meta.broken = true;
 }
diff --git a/pkgs/applications/version-management/guitone/default.nix b/pkgs/applications/version-management/guitone/default.nix
index 135e7c7e1efd..8731cbfde19b 100644
--- a/pkgs/applications/version-management/guitone/default.nix
+++ b/pkgs/applications/version-management/guitone/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchmtn, qt4, pkgconfig, graphviz }:
+{ stdenv, fetchurl, fetchmtn, qt4, qmake4Hook, pkgconfig, graphviz }:
 
 let version = "1.0-mtn-head"; in
 stdenv.mkDerivation rec {
@@ -16,10 +16,7 @@ stdenv.mkDerivation rec {
     branch = "net.venge.monotone.guitone";
   };
 
-  buildInputs = [ qt4 pkgconfig graphviz ];
-
-  prefixKey="PREFIX=";
-  configureScript = "qmake guitone.pro";
+  buildInputs = [ qt4 qmake4Hook pkgconfig graphviz ];
 
   meta = {
     description = "Qt4 based GUI for monotone";
diff --git a/pkgs/applications/video/bomi/default.nix b/pkgs/applications/video/bomi/default.nix
index f9301781fc10..c017ed4cda32 100644
--- a/pkgs/applications/video/bomi/default.nix
+++ b/pkgs/applications/video/bomi/default.nix
@@ -1,6 +1,6 @@
 { stdenv, fetchurl, fetchFromGitHub, pkgconfig, perl, python, which, makeQtWrapper
 , libX11, libxcb, mesa
-, qtbase, qtdeclarative, qtquickcontrols, qttools, qtx11extras
+, qtbase, qtdeclarative, qtquickcontrols, qttools, qtx11extras, qmakeHook
 , ffmpeg
 , libchardet
 , mpg123
@@ -76,6 +76,8 @@ stdenv.mkDerivation rec {
       ${optionalString youtubeSupport "--prefix PATH ':' '${youtube-dl}/bin'"}
   '';
 
+  dontUseQmakeConfigure = true;
+
   configureFlags = with stdenv.lib;
                    [ "--qmake=qmake" ]
                    ++ optional jackSupport "--enable-jack"
@@ -84,7 +86,7 @@ stdenv.mkDerivation rec {
                    ++ optional cddaSupport "--enable-cdda"
                    ;
 
-  nativeBuildInputs = [ pkgconfig perl python which qttools makeQtWrapper ];
+  nativeBuildInputs = [ pkgconfig perl python which qttools makeQtWrapper qmakeHook ];
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/applications/video/clipgrab/default.nix b/pkgs/applications/video/clipgrab/default.nix
index e634a0caa3f4..b8967323c988 100644
--- a/pkgs/applications/video/clipgrab/default.nix
+++ b/pkgs/applications/video/clipgrab/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, makeDesktopItem, ffmpeg, qt4 }:
+{ stdenv, fetchurl, makeDesktopItem, ffmpeg, qt4, qmake4Hook }:
 
 stdenv.mkDerivation rec {
   name = "clipgrab-${version}";
@@ -11,6 +11,7 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ ffmpeg qt4 ];
+  nativeBuildInputs = [ qmake4Hook ];
 
   postPatch = stdenv.lib.optionalString (ffmpeg != null) ''
   substituteInPlace converter_ffmpeg.cpp \
@@ -18,9 +19,7 @@ stdenv.mkDerivation rec {
     --replace '"ffmpeg ' '"${ffmpeg.bin}/bin/ffmpeg '
   '';
 
-  configurePhase = ''
-    qmake clipgrab.pro
-  '';
+  qmakeFlags = [ "clipgrab.pro" ];
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/applications/video/linuxstopmotion/default.nix b/pkgs/applications/video/linuxstopmotion/default.nix
index 23a033844b38..293bdd835b5d 100644
--- a/pkgs/applications/video/linuxstopmotion/default.nix
+++ b/pkgs/applications/video/linuxstopmotion/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchgit, pkgconfig, qt4, SDL, SDL_image, libvorbis, libtar, libxml2
-, gamin
+, gamin, qmake4Hook
 }:
 
 stdenv.mkDerivation rec {
@@ -12,14 +12,10 @@ stdenv.mkDerivation rec {
     sha256 = "1xkkrhllgy2d7k0vrdj794ya7y3g3n7xh8c2qgnb26yrarz79dqj";
   };
 
-  buildInputs = [ pkgconfig qt4 SDL SDL_image libvorbis libtar libxml2 gamin ];
+  buildInputs = [ pkgconfig qt4 SDL SDL_image libvorbis libtar libxml2 gamin qmake4Hook ];
 
   patches = [ ./linuxstopmotion-fix-wrong-isProcess-logic.patch ];
 
-  configurePhase = ''
-    qmake PREFIX="$out"
-  '';
-
   # Installation breaks without this
   preInstall = ''
     mkdir -p "$out/share/stopmotion/translations/"
diff --git a/pkgs/applications/video/minitube/default.nix b/pkgs/applications/video/minitube/default.nix
index f9d887189ec9..1a621032125b 100644
--- a/pkgs/applications/video/minitube/default.nix
+++ b/pkgs/applications/video/minitube/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, makeWrapper, phonon, phonon_backend_vlc, qt4
+{ stdenv, fetchFromGitHub, makeWrapper, phonon, phonon_backend_vlc, qt4, qmake4Hook
 # "Free" API key generated by nckx <tobias.geerinckx.rice@gmail.com>
 , withAPIKey ? "AIzaSyBtFgbln3bu1swQC-naMxMtKh384D3xJZE" }:
 
@@ -14,11 +14,9 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ phonon phonon_backend_vlc qt4 ];
-  nativeBuildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper qmake4Hook ];
 
-  configurePhase = ''
-    qmake PREFIX=$out "DEFINES += APP_GOOGLE_API_KEY=${withAPIKey}"
-  '';
+  qmakeFlags = [ "DEFINES+=APP_GOOGLE_API_KEY=${withAPIKey}" ];
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/applications/video/qgifer/default.nix b/pkgs/applications/video/qgifer/default.nix
index f528ce99a8a2..8185e15dcc8b 100644
--- a/pkgs/applications/video/qgifer/default.nix
+++ b/pkgs/applications/video/qgifer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchsvn, cmake, opencv, qt, giflib }:
+{ stdenv, fetchsvn, cmake, opencv, qt4, giflib }:
 
 stdenv.mkDerivation rec {
   name = "qgifer-${version}";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
     substituteInPlace CMakeLists.txt --replace "SET(CMAKE_INSTALL_PREFIX" "#"
   '';
 
-  buildInputs = [ cmake opencv qt giflib ];
+  buildInputs = [ cmake opencv qt4 giflib ];
 
   meta = with stdenv.lib; {
     description = "Video-based animated GIF creator";
diff --git a/pkgs/applications/video/shotcut/default.nix b/pkgs/applications/video/shotcut/default.nix
index d2400475a0b3..fdadc1d99abe 100644
--- a/pkgs/applications/video/shotcut/default.nix
+++ b/pkgs/applications/video/shotcut/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, SDL, frei0r, gettext, makeWrapper, mlt, pkgconfig, qtbase }:
+{ stdenv, fetchurl, SDL, frei0r, gettext, makeWrapper, mlt, pkgconfig, qtbase, qmakeHook }:
 
 stdenv.mkDerivation rec {
   name = "shotcut-${version}";
@@ -9,13 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "1504ds3ppqmpg84nb2gb74qndqysjwn3xw7n8xv19kd1pppnr10f";
   };
 
-  buildInputs = [ SDL frei0r gettext makeWrapper mlt pkgconfig qtbase ];
-
-  configurePhase = ''
-    runHook preConfigure
-    qmake PREFIX=$out
-    runHook postConfigure
-  '';
+  buildInputs = [ SDL frei0r gettext makeWrapper mlt pkgconfig qtbase qmakeHook ];
 
   postInstall = ''
     mkdir -p $out/share/shotcut
diff --git a/pkgs/build-support/setup-hooks/multiple-outputs.sh b/pkgs/build-support/setup-hooks/multiple-outputs.sh
index 2cf08d42ae04..06d80e12f09b 100644
--- a/pkgs/build-support/setup-hooks/multiple-outputs.sh
+++ b/pkgs/build-support/setup-hooks/multiple-outputs.sh
@@ -47,11 +47,28 @@ _overrideFirst outputInfo "info" "doc" "$outputMan"
 _multioutConfig() {
     if [ "$outputs" = "out" ] || [ -z "${setOutputFlags-1}" ]; then return; fi;
 
+    # try to detect share/doc/${shareDocName}
+    # Note: sadly, $configureScript detection comes later in configurePhase,
+    #   and reordering would cause more trouble than worth.
+    if [ -z "$shareDocName" ]; then
+        local confScript="$configureScript"
+        if [ -z "$confScript" ] && [ -x ./configure ]; then
+            confScript=./configure
+        fi
+        if [ -f "$confScript" ]; then
+            local shareDocName="$(sed -n "s/^PACKAGE_TARNAME='\(.*\)'$/\1/p" < "$confScript")"
+        fi
+                                    # PACKAGE_TARNAME sometimes contains garbage.
+        if [ -n "$shareDocName" ] || echo "$shareDocName" | grep -q '[^a-zA-Z-_0-9]'; then
+            shareDocName="$(echo "$name" | sed 's/-[^a-zA-Z].*//')"
+        fi
+    fi
+
     configureFlags="\
         --bindir=${!outputBin}/bin --sbindir=${!outputBin}/sbin \
         --includedir=${!outputInclude}/include --oldincludedir=${!outputInclude}/include \
         --mandir=${!outputMan}/share/man --infodir=${!outputInfo}/share/info \
-        --docdir=${!outputDoc}/share/doc \
+        --docdir=${!outputDoc}/share/doc/${shareDocName} \
         --libdir=${!outputLib}/lib --libexecdir=${!outputLib}/libexec \
         --localedir=${!outputLib}/share/locale \
         $configureFlags"
@@ -62,6 +79,7 @@ _multioutConfig() {
         $installFlags"
 }
 
+
 # Add rpath prefixes to library paths, and avoid stdenv doing it for $out.
 _addRpathPrefix "${!outputLib}"
 NIX_NO_SELF_RPATH=1
@@ -144,8 +162,8 @@ _multioutDevs() {
 
 # Make the first output (typically "dev") propagate other outputs needed for development.
 # Take the first, because that's what one gets when putting the package into buildInputs.
-# Note: during the build, probably only the "native" development packages are useful.
-# With current cross-building setup, all packages are "native" if not cross-building.
+# Note: with current cross-building setup, all packages are "native" if not cross-building;
+# however, if cross-building, the outputs are non-native. We have to choose the right file.
 _multioutPropagateDev() {
     if [ "$outputs" = "out" ]; then return; fi;
 
@@ -170,8 +188,15 @@ _multioutPropagateDev() {
     fi
 
     mkdir -p "${!outputFirst}"/nix-support
+    local propagatedBuildInputsFile
+    if [ -z "$crossConfig" ]; then
+        propagatedBuildInputsFile=propagated-native-build-inputs
+    else
+        propagatedBuildInputsFile=propagated-build-inputs
+    fi
+
     for output in $propagatedBuildOutputs; do
-        echo -n " ${!output}" >> "${!outputFirst}"/nix-support/propagated-native-build-inputs
+        echo -n " ${!output}" >> "${!outputFirst}"/nix-support/$propagatedBuildInputsFile
     done
 }
 
diff --git a/pkgs/data/documentation/zeal/default.nix b/pkgs/data/documentation/zeal/default.nix
index dd681404e856..89e5d83df614 100644
--- a/pkgs/data/documentation/zeal/default.nix
+++ b/pkgs/data/documentation/zeal/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchFromGitHub, libarchive, pkgconfig, qtbase
-, qtimageformats, qtwebkit, qtx11extras, xorg }:
+, qtimageformats, qtwebkit, qtx11extras, xcbutilkeysyms, qmakeHook }:
 
 stdenv.mkDerivation rec {
   version = "0.2.1";
@@ -13,18 +13,12 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [
-    xorg.xcbutilkeysyms pkgconfig qtbase qtimageformats qtwebkit qtx11extras libarchive
+    xcbutilkeysyms pkgconfig qtbase qtimageformats qtwebkit qtx11extras libarchive qmakeHook
   ];
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake PREFIX=/
-    runHook postConfigure
-  '';
+  qmakeFlags = [ "PREFIX=/" ];
 
-  installPhase = ''
-    make INSTALL_ROOT=$out install
-  '';
+  installFlags = [ "INSTALL_ROOT=$(out)" ];
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/data/fonts/cantarell-fonts/default.nix b/pkgs/data/fonts/cantarell-fonts/default.nix
index 34434f601720..65df7fc1f95a 100644
--- a/pkgs/data/fonts/cantarell-fonts/default.nix
+++ b/pkgs/data/fonts/cantarell-fonts/default.nix
@@ -1,11 +1,13 @@
 { stdenv, fetchurl }:
 
-stdenv.mkDerivation {
-  name = "cantarell-fonts-0.0.17";
+stdenv.mkDerivation rec {
+  major = "0.0";
+  minor = "24";
+  name = "cantarell-fonts-${major}.${minor}";
 
   src = fetchurl {
-    url = mirror://gnome/sources/cantarell-fonts/0.0/cantarell-fonts-0.0.17.tar.xz;
-    sha256 = "0kx05fw1i11zcqx5yv9y9iprpl49k51sibz86bc58a50n1w6gcwn";
+    url = "mirror://gnome/sources/cantarell-fonts/${major}/${name}.tar.xz";
+    sha256 = "0r4jnc2x9yncf40lixjb1pqgpq8rzbi2fz33pshlqzjgx2d69bcw";
   };
 
   meta = {
diff --git a/pkgs/desktops/kde-5/frameworks-5.19/extra-cmake-modules/setup-hook.sh b/pkgs/desktops/kde-5/frameworks-5.19/extra-cmake-modules/setup-hook.sh
index 56ed09f4ea59..193cb048949a 100644
--- a/pkgs/desktops/kde-5/frameworks-5.19/extra-cmake-modules/setup-hook.sh
+++ b/pkgs/desktops/kde-5/frameworks-5.19/extra-cmake-modules/setup-hook.sh
@@ -7,7 +7,6 @@ _ecmSetXdgDirs() {
 _ecmPropagateSharedData() {
     local sharedPaths=( \
         "config.cfg" \
-        "doc" \
         "kconf_update" \
         "kservices5" \
         "kservicetypes5" \
@@ -20,7 +19,6 @@ _ecmPropagateSharedData() {
         "applications" \
         "desktop-directories" \
         "mime" \
-        "info" \
         "dbus-1" \
         "interfaces" \
         "services" \
@@ -28,6 +26,7 @@ _ecmPropagateSharedData() {
     for dir in ${sharedPaths[@]}; do
         if [ -d "$1/share/$dir" ]; then
             addToSearchPathOnce NIX_WRAP_XDG_DATA_DIRS "$1/share"
+            propagateOnce propagatedBuildInputs "$1"
             propagateOnce propagatedUserEnvPkgs "$1"
             break
         fi
diff --git a/pkgs/desktops/kde-5/frameworks-5.19/kconfigwidgets/default.nix b/pkgs/desktops/kde-5/frameworks-5.19/kconfigwidgets/default.nix
index 0e14d06edd36..3b3bd27cce08 100644
--- a/pkgs/desktops/kde-5/frameworks-5.19/kconfigwidgets/default.nix
+++ b/pkgs/desktops/kde-5/frameworks-5.19/kconfigwidgets/default.nix
@@ -9,7 +9,8 @@ kdeFramework {
   propagatedBuildInputs = [ kauth kconfig kcodecs ki18n kwidgetsaddons ];
   patches = [ ./0001-qdiriterator-follow-symlinks.patch ];
   postInstall = ''
-    wrapQtProgram "$out/bin/preparetips5"
+    moveToOutput "bin/preparetips5" "$dev"
+    wrapQtProgram "$dev/bin/preparetips5"
   '';
   meta = {
     maintainers = [ lib.maintainers.ttuegel ];
diff --git a/pkgs/desktops/kde-5/frameworks-5.19/kinit/0001-kinit-libpath.patch b/pkgs/desktops/kde-5/frameworks-5.19/kinit/0001-kinit-libpath.patch
deleted file mode 100644
index 9c76079a382a..000000000000
--- a/pkgs/desktops/kde-5/frameworks-5.19/kinit/0001-kinit-libpath.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 723c9b1268a04127647a1c20eebe9804150566dd Mon Sep 17 00:00:00 2001
-From: Thomas Tuegel <ttuegel@gmail.com>
-Date: Sat, 13 Jun 2015 08:57:55 -0500
-Subject: [PATCH] kinit libpath
-
----
- src/kdeinit/kinit.cpp | 18 ++++++++++--------
- 1 file changed, 10 insertions(+), 8 deletions(-)
-
-diff --git a/src/kdeinit/kinit.cpp b/src/kdeinit/kinit.cpp
-index 9e775b6..0ac5646 100644
---- a/src/kdeinit/kinit.cpp
-+++ b/src/kdeinit/kinit.cpp
-@@ -660,15 +660,17 @@ static pid_t launch(int argc, const char *_name, const char *args,
-         if (!libpath.isEmpty()) {
-             if (!l.load()) {
-                 if (libpath_relative) {
--                    // NB: Because Qt makes the actual dlopen() call, the
--                    //     RUNPATH of kdeinit is *not* respected - see
--                    //     https://sourceware.org/bugzilla/show_bug.cgi?id=13945
--                    //     - so we try hacking it in ourselves
--                    QString install_lib_dir = QFile::decodeName(
--                            CMAKE_INSTALL_PREFIX "/" LIB_INSTALL_DIR "/");
--                    libpath = install_lib_dir + libpath;
--                    l.setFileName(libpath);
-+                  // Use QT_PLUGIN_PATH to find shared library directories
-+                  // For KF5, the plugin path is /lib/qt5/plugins/, so kdeinit5
-+                  // shared libraries should be in /lib/qt5/plugins/../../
-+                  const QRegExp pathSepRegExp(QString::fromLatin1("[:\b]"));
-+                  const QString up = QString::fromLocal8Bit("/../../");
-+                  const QStringList paths = QString::fromLocal8Bit(qgetenv("QT_PLUGIN_PATH")).split(pathSepRegExp, QString::KeepEmptyParts);
-+                  Q_FOREACH (const QString &path, paths) {
-+                    l.setFileName(path + up + libpath);
-                     l.load();
-+                    if (l.isLoaded()) break;
-+                  }
-                 }
-             }
-             if (!l.isLoaded()) {
--- 
-2.4.2
-
diff --git a/pkgs/desktops/kde-5/frameworks-5.19/kinit/default.nix b/pkgs/desktops/kde-5/frameworks-5.19/kinit/default.nix
index 5f644d7c424e..64210ca76051 100644
--- a/pkgs/desktops/kde-5/frameworks-5.19/kinit/default.nix
+++ b/pkgs/desktops/kde-5/frameworks-5.19/kinit/default.nix
@@ -1,4 +1,4 @@
-{ kdeFramework, lib, extra-cmake-modules, kconfig, kcrash
+{ kdeFramework, lib, copyPathsToStore, extra-cmake-modules, kconfig, kcrash
 , kdoctools, ki18n, kio, kservice, kwindowsystem, libcap
 , libcap_progs
 }:
@@ -10,7 +10,7 @@ kdeFramework {
   nativeBuildInputs = [ extra-cmake-modules kdoctools libcap_progs ];
   buildInputs = [ kconfig kcrash kservice libcap ];
   propagatedBuildInputs = [ ki18n kio kwindowsystem ];
-  patches = [ ./0001-kinit-libpath.patch ];
+  patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
   meta = {
     maintainers = [ lib.maintainers.ttuegel ];
   };
diff --git a/pkgs/desktops/kde-5/frameworks-5.19/kinit/kinit-libpath.patch b/pkgs/desktops/kde-5/frameworks-5.19/kinit/kinit-libpath.patch
new file mode 100644
index 000000000000..52c5563ea581
--- /dev/null
+++ b/pkgs/desktops/kde-5/frameworks-5.19/kinit/kinit-libpath.patch
@@ -0,0 +1,31 @@
+Index: kinit-5.19.0/src/kdeinit/kinit.cpp
+===================================================================
+--- kinit-5.19.0.orig/src/kdeinit/kinit.cpp
++++ kinit-5.19.0/src/kdeinit/kinit.cpp
+@@ -658,15 +658,17 @@ static pid_t launch(int argc, const char
+         if (!libpath.isEmpty()) {
+             if (!l.load()) {
+                 if (libpath_relative) {
+-                    // NB: Because Qt makes the actual dlopen() call, the
+-                    //     RUNPATH of kdeinit is *not* respected - see
+-                    //     https://sourceware.org/bugzilla/show_bug.cgi?id=13945
+-                    //     - so we try hacking it in ourselves
+-                    QString install_lib_dir = QFile::decodeName(
+-                            CMAKE_INSTALL_PREFIX "/" LIB_INSTALL_DIR "/");
+-                    libpath = install_lib_dir + libpath;
+-                    l.setFileName(libpath);
+-                    l.load();
++                    // Try to load the library relative to the active profiles.
++                    QByteArrayList profiles = qgetenv("NIX_PROFILES").split(' ');
++                    // Reverse the profile list.
++                    std::reverse(profiles.begin(), profiles.end());
++                    const QString libdir = QString::fromLatin1("/lib/");
++                    Q_FOREACH (const QByteArray &profile, profiles) {
++                        if (!profile.isEmpty()) {
++                            l.setFileName(QFile::decodeName(profile) + libdir + libpath);
++                            if (l.load()) break;
++                        }
++                    }
+                 }
+             }
+             if (!l.isLoaded()) {
diff --git a/pkgs/desktops/kde-5/frameworks-5.19/kinit/series b/pkgs/desktops/kde-5/frameworks-5.19/kinit/series
new file mode 100644
index 000000000000..5faa456366b9
--- /dev/null
+++ b/pkgs/desktops/kde-5/frameworks-5.19/kinit/series
@@ -0,0 +1 @@
+kinit-libpath.patch
diff --git a/pkgs/desktops/kde-5/plasma-5.5/default.nix b/pkgs/desktops/kde-5/plasma-5.5/default.nix
index 384fa6f6d272..a4f5c7c23204 100644
--- a/pkgs/desktops/kde-5/plasma-5.5/default.nix
+++ b/pkgs/desktops/kde-5/plasma-5.5/default.nix
@@ -81,6 +81,7 @@ let
     plasma-workspace-wallpapers = callPackage ./plasma-workspace-wallpapers.nix {};
     polkit-kde-agent = callPackage ./polkit-kde-agent.nix {};
     powerdevil = callPackage ./powerdevil.nix {};
+    startkde = callPackage ./startkde {};
     systemsettings = callPackage ./systemsettings.nix {};
   };
 
diff --git a/pkgs/desktops/kde-5/plasma-5.5/plasma-workspace/default.nix b/pkgs/desktops/kde-5/plasma-5.5/plasma-workspace/default.nix
index 01c5c63ce0aa..1a96c1eced2e 100644
--- a/pkgs/desktops/kde-5/plasma-5.5/plasma-workspace/default.nix
+++ b/pkgs/desktops/kde-5/plasma-5.5/plasma-workspace/default.nix
@@ -1,14 +1,12 @@
 { plasmaPackage, lib, copyPathsToStore
-, extra-cmake-modules, kdoctools, makeQtWrapper
+, extra-cmake-modules, kdoctools
 , baloo, kactivities, kcmutils, kcrash, kdbusaddons, kdeclarative
 , kdelibs4support, kdesu, kdewebkit, kglobalaccel, kidletime
 , kjsembed, knewstuff, knotifyconfig, kpackage, krunner
 , ktexteditor, ktextwidgets, kwallet, kwayland, kwin, kxmlrpcclient
 , libdbusmenu, libkscreen, libSM, libXcursor, networkmanager-qt
 , pam, phonon, plasma-framework, qtquick1, qtscript, qtx11extras, wayland
-, libksysguard, bash, coreutils, gnused, gnugrep, socat, kconfig
-, kinit, kservice, qttools, dbus_tools, mkfontdir, xmessage
-, xprop, xrdb, xset, xsetroot, solid, qtquickcontrols
+, libksysguard, kconfig, solid, qtquickcontrols
 }:
 
 plasmaPackage {
@@ -17,14 +15,13 @@ plasmaPackage {
   nativeBuildInputs = [
     extra-cmake-modules
     kdoctools
-    makeQtWrapper
   ];
   buildInputs = [
-    dbus_tools kcmutils kconfig kcrash kdbusaddons kdesu kdewebkit
-    kinit kjsembed knewstuff knotifyconfig kpackage kservice
+    kcmutils kconfig kcrash kdbusaddons kdesu kdewebkit
+    kjsembed knewstuff knotifyconfig kpackage
     ktextwidgets kwallet kwayland kxmlrpcclient libdbusmenu libSM
-    libXcursor mkfontdir networkmanager-qt pam phonon qtscript qttools
-    socat wayland xmessage xprop xset xsetroot
+    libXcursor networkmanager-qt pam phonon qtscript
+    wayland
   ];
   propagatedBuildInputs = [
     baloo kactivities kdeclarative kdelibs4support kglobalaccel
@@ -35,50 +32,14 @@ plasmaPackage {
   patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
 
   postPatch = ''
-    substituteInPlace startkde/startkde.cmake \
-        --subst-var-by bash $(type -P bash) \
-        --subst-var-by sed $(type -P sed) \
-        --subst-var-by grep $(type -P grep) \
-        --subst-var-by socat $(type -P socat) \
-        --subst-var-by kcheckrunning $(type -P kcheckrunning) \
-        --subst-var-by xmessage $(type -P xmessage) \
-        --subst-var-by tr $(type -P tr) \
-        --subst-var-by qtpaths $(type -P qtpaths) \
-        --subst-var-by qdbus $(type -P qdbus) \
-        --subst-var-by dbus-launch $(type -P dbus-launch) \
-        --subst-var-by mkfontdir $(type -P mkfontdir) \
-        --subst-var-by xset $(type -P xset) \
-        --subst-var-by xsetroot $(type -P xsetroot) \
-        --subst-var-by xprop $(type -P xprop) \
-        --subst-var-by start_kdeinit_wrapper "${kinit.out}/lib/libexec/kf5/start_kdeinit_wrapper" \
-        --subst-var-by kwrapper5 $(type -P kwrapper5) \
-        --subst-var-by kdeinit5_shutdown $(type -P kdeinit5_shutdown) \
-        --subst-var-by kbuildsycoca5 $(type -P kbuildsycoca5) \
-        --subst-var-by kreadconfig5 $(type -P kreadconfig5) \
-        --subst-var out
     substituteInPlace startkde/kstartupconfig/kstartupconfig.cpp \
         --replace kdostartupconfig5 $out/bin/kdostartupconfig5
   '';
 
   postInstall = ''
+    rm "$out/bin/startkde"
     rm "$out/bin/startplasmacompositor"
     rm "$out/lib/libexec/startplasma"
     rm -r "$out/share/wayland-sessions"
   '';
-
-  postFixup = ''
-    wrapQtProgram "$out/bin/ksmserver"
-    wrapQtProgram "$out/bin/plasmawindowed"
-    wrapQtProgram "$out/bin/kcminit_startup"
-    wrapQtProgram "$out/bin/ksplashqml"
-    wrapQtProgram "$out/bin/kcheckrunning"
-    wrapQtProgram "$out/bin/systemmonitor"
-    wrapQtProgram "$out/bin/kstartupconfig5"
-    wrapQtProgram "$out/bin/kdostartupconfig5"
-    wrapQtProgram "$out/bin/klipper"
-    wrapQtProgram "$out/bin/kuiserver5"
-    wrapQtProgram "$out/bin/krunner"
-    wrapQtProgram "$out/bin/plasmashell"
-    wrapQtProgram "$out/lib/libexec/drkonqi"
-  '';
 }
diff --git a/pkgs/desktops/kde-5/plasma-5.5/plasma-workspace/series b/pkgs/desktops/kde-5/plasma-5.5/plasma-workspace/series
index 88b54af793e7..b9081298bd69 100644
--- a/pkgs/desktops/kde-5/plasma-5.5/plasma-workspace/series
+++ b/pkgs/desktops/kde-5/plasma-5.5/plasma-workspace/series
@@ -1,2 +1 @@
-startkde.patch
 qml-import-path.patch
diff --git a/pkgs/desktops/kde-5/plasma-5.5/startkde/default.nix b/pkgs/desktops/kde-5/plasma-5.5/startkde/default.nix
new file mode 100644
index 000000000000..30e986c21b4b
--- /dev/null
+++ b/pkgs/desktops/kde-5/plasma-5.5/startkde/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, runCommand
+, dbus, qttools, socat
+, gnugrep, gnused
+, kconfig, kinit, kservice
+, plasma-workspace
+, xmessage, xprop, xsetroot
+}:
+
+let
+
+  env = {
+    inherit (stdenv) shell;
+    paths = builtins.map (pkg: pkg.out or pkg)
+      [
+        dbus qttools socat
+        gnugrep gnused
+        kconfig kinit kservice
+        plasma-workspace
+        xmessage xprop xsetroot
+      ];
+  };
+
+in runCommand "startkde" env ''
+  prefix_PATH=
+  for pkg in $paths; do
+    addToSearchPath prefix_PATH "$pkg/bin"
+    addToSearchPath prefix_PATH "$pkg/lib/libexec"
+    addToSearchPath prefix_PATH "$pkg/lib/libexec/kf5"
+  done
+  substitute ${./startkde.sh} "$out" --subst-var shell --subst-var prefix_PATH
+  chmod +x "$out"
+''
diff --git a/pkgs/desktops/kde-5/plasma-5.5/startkde/startkde.sh b/pkgs/desktops/kde-5/plasma-5.5/startkde/startkde.sh
new file mode 100755
index 000000000000..d839226a4562
--- /dev/null
+++ b/pkgs/desktops/kde-5/plasma-5.5/startkde/startkde.sh
@@ -0,0 +1,334 @@
+#!@shell@
+
+PATH="@prefix_PATH@:$PATH"
+
+# The KDE icon cache is supposed to update itself
+# automatically, but it uses the timestamp on the icon
+# theme directory as a trigger.  Since in Nix the
+# timestamp is always the same, this doesn't work.  So as
+# a workaround, nuke the icon cache on login.  This isn't
+# perfect, since it may require logging out after
+# installing new applications to update the cache.
+# See http://lists-archives.org/kde-devel/26175-what-when-will-icon-cache-refresh.html
+rm -fv $HOME/.cache/icon-cache.kcache
+
+# Qt writes a weird ‘libraryPath’ line to
+# ~/.config/Trolltech.conf that causes the KDE plugin
+# paths of previous KDE invocations to be searched.
+# Obviously using mismatching KDE libraries is potentially
+# disastrous, so here we nuke references to the Nix store
+# in Trolltech.conf.  A better solution would be to stop
+# Qt from doing this wackiness in the first place.
+if [ -e $HOME/.config/Trolltech.conf ]; then
+    sed -e '/nix\\store\|nix\/store/ d' -i $HOME/.config/Trolltech.conf
+fi
+
+if test "x$1" = x--failsafe; then
+    KDE_FAILSAFE=1 # General failsafe flag
+    KWIN_COMPOSE=N # Disable KWin's compositing
+    QT_XCB_FORCE_SOFTWARE_OPENGL=1
+    export KWIN_COMPOSE KDE_FAILSAFE QT_XCB_FORCE_SOFTWARE_OPENGL
+fi
+
+# When the X server dies we get a HUP signal from xinit. We must ignore it
+# because we still need to do some cleanup.
+trap 'echo GOT SIGHUP' HUP
+
+# we have to unset this for Darwin since it will screw up KDE's dynamic-loading
+unset DYLD_FORCE_FLAT_NAMESPACE
+
+# Check if a KDE session already is running and whether it's possible to connect to X
+kcheckrunning
+kcheckrunning_result=$?
+if test $kcheckrunning_result -eq 0 ; then
+    echo "KDE seems to be already running on this display."
+    xmessage -geometry 500x100 "KDE seems to be already running on this display."
+	exit 1
+elif test $kcheckrunning_result -eq 2 ; then
+	echo "\$DISPLAY is not set or cannot connect to the X server."
+    exit 1
+fi
+
+# Boot sequence:
+#
+# kdeinit is used to fork off processes which improves memory usage
+# and startup time.
+#
+# * kdeinit starts klauncher first.
+# * Then kded is started. kded is responsible for keeping the sycoca
+#   database up to date. When an up to date database is present it goes
+#   into the background and the startup continues.
+# * Then kdeinit starts kcminit. kcminit performs initialisation of
+#   certain devices according to the user's settings
+#
+# * Then ksmserver is started which takes control of the rest of the startup sequence
+
+# We need to create config folder so we can write startupconfigkeys
+configDir=$(qtpaths --writable-path GenericConfigLocation)
+mkdir -p "$configDir"
+
+#This is basically setting defaults so we can use them with kstartupconfig5
+cat >$configDir/startupconfigkeys <<EOF
+kcminputrc Mouse cursorTheme 'breeze_cursors'
+kcminputrc Mouse cursorSize ''
+ksplashrc KSplash Theme Breeze
+ksplashrc KSplash Engine KSplashQML
+kdeglobals KScreen ScaleFactor 1
+kcmfonts General forceFontDPI 0
+EOF
+
+# preload the user's locale on first start
+plasmalocalerc=$configDir/plasma-localerc
+test -f $plasmalocalerc || {
+cat >$plasmalocalerc <<EOF
+[Formats]
+LANG=$LANG
+EOF
+}
+
+# export LC_* variables set by kcmshell5 formats into environment
+# so it can be picked up by QLocale and friends.
+exportformatssettings=$configDir/plasma-locale-settings.sh
+test -f $exportformatssettings && {
+    . $exportformatssettings
+}
+
+# Write a default kdeglobals file to set up the font
+kdeglobalsfile=$configDir/kdeglobals
+test -f $kdeglobalsfile || {
+cat >$kdeglobalsfile <<EOF
+[General]
+XftAntialias=true
+XftHintStyle=hintmedium
+XftSubPixel=none
+EOF
+}
+
+kstartupconfig5
+returncode=$?
+if test $returncode -ne 0; then
+    xmessage -geometry 500x100 "kstartupconfig5 does not exist or fails. The error code is $returncode. Check your installation."
+    exit 1
+fi
+[ -r $configDir/startupconfig ] && . $configDir/startupconfig
+
+if test "$kdeglobals_kscreen_scalefactor" -ne 1; then
+    export QT_DEVICE_PIXEL_RATIO=$kdeglobals_kscreen_scalefactor
+fi
+
+XCURSOR_PATH=~/.icons
+IFS=":" read -r -a xdgDirs <<< "$XDG_DATA_DIRS"
+for xdgDir in "${xdgDirs[@]}"; do
+    XCURSOR_PATH="$XCURSOR_PATH:$xdgDir/icons"
+done
+export XCURSOR_PATH
+
+# XCursor mouse theme needs to be applied here to work even for kded or ksmserver
+if test -n "$kcminputrc_mouse_cursortheme" -o -n "$kcminputrc_mouse_cursorsize" ; then
+
+    kapplymousetheme "$kcminputrc_mouse_cursortheme" "$kcminputrc_mouse_cursorsize"
+    if test $? -eq 10; then
+        XCURSOR_THEME=breeze_cursors
+        export XCURSOR_THEME
+    elif test -n "$kcminputrc_mouse_cursortheme"; then
+        XCURSOR_THEME="$kcminputrc_mouse_cursortheme"
+        export XCURSOR_THEME
+    fi
+    if test -n "$kcminputrc_mouse_cursorsize"; then
+        XCURSOR_SIZE="$kcminputrc_mouse_cursorsize"
+        export XCURSOR_SIZE
+    fi
+fi
+
+# Set a left cursor instead of the standard X11 "X" cursor, since I've heard
+# from some users that they're confused and don't know what to do. This is
+# especially necessary on slow machines, where starting KDE takes one or two
+# minutes until anything appears on the screen.
+#
+# If the user has overwritten fonts, the cursor font may be different now
+# so don't move this up.
+#
+xsetroot -cursor_name left_ptr
+
+dl=$DESKTOP_LOCKED
+unset DESKTOP_LOCKED # Don't want it in the environment
+
+# Make sure that D-Bus is running
+# D-Bus autolaunch is broken
+if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
+    eval $(dbus-launch --sh-syntax --exit-with-session)
+fi
+if qdbus >/dev/null 2>/dev/null; then
+    : # ok
+else
+    echo 'startkde: Could not start D-Bus. Can you call qdbus?'  1>&2
+    test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
+    xmessage -geometry 500x100 "Could not start D-Bus. Can you call qdbus?"
+    exit 1
+fi
+
+ksplash_pid=
+if test -z "$dl"; then
+  # the splashscreen and progress indicator
+  case "$ksplashrc_ksplash_engine" in
+    KSplashQML)
+      ksplash_pid=$(ksplashqml "${ksplashrc_ksplash_theme}" --pid)
+      ;;
+    None)
+      ;;
+    *)
+      ;;
+  esac
+fi
+
+# Source scripts found in <config locations>/plasma-workspace/env/*.sh
+# (where <config locations> correspond to the system and user's configuration
+# directories, as identified by Qt's qtpaths,  e.g.  $HOME/.config
+# and /etc/xdg/ on Linux)
+#
+# This is where you can define environment variables that will be available to
+# all KDE programs, so this is where you can run agents using e.g. eval `ssh-agent`
+# or eval `gpg-agent --daemon`.
+# Note: if you do that, you should also put "ssh-agent -k" as a shutdown script
+#
+# (see end of this file).
+# For anything else (that doesn't set env vars, or that needs a window manager),
+# better use the Autostart folder.
+
+IFS=":" read -r -a scriptpath <<< $(qtpaths --paths GenericConfigLocation)
+# Add /env/ to the directory to locate the scripts to be sourced
+for prefix in "${scriptpath[@]}"; do
+  for file in "$prefix"/plasma-workspace/env/*.sh; do
+    test -r "$file" && . "$file" || true
+  done
+done
+
+echo 'startkde: Starting up...'  1>&2
+
+# Mark that full KDE session is running (e.g. Konqueror preloading works only
+# with full KDE running). The KDE_FULL_SESSION property can be detected by
+# any X client connected to the same X session, even if not launched
+# directly from the KDE session but e.g. using "ssh -X", kdesu. $KDE_FULL_SESSION
+# however guarantees that the application is launched in the same environment
+# like the KDE session and that e.g. KDE utilities/libraries are available.
+# KDE_FULL_SESSION property is also only available since KDE 3.5.5.
+# The matching tests are:
+#   For $KDE_FULL_SESSION:
+#     if test -n "$KDE_FULL_SESSION"; then ... whatever
+#   For KDE_FULL_SESSION property:
+#     xprop -root | grep "^KDE_FULL_SESSION" >/dev/null 2>/dev/null
+#     if test $? -eq 0; then ... whatever
+#
+# Additionally there is (since KDE 3.5.7) $KDE_SESSION_UID with the uid
+# of the user running the KDE session. It should be rarely needed (e.g.
+# after sudo to prevent desktop-wide functionality in the new user's kded).
+#
+# Since KDE4 there is also KDE_SESSION_VERSION, containing the major version number.
+# Note that this didn't exist in KDE3, which can be detected by its absense and
+# the presence of KDE_FULL_SESSION.
+#
+KDE_FULL_SESSION=true
+export KDE_FULL_SESSION
+xprop -root -f KDE_FULL_SESSION 8t -set KDE_FULL_SESSION true
+
+KDE_SESSION_VERSION=5
+export KDE_SESSION_VERSION
+xprop -root -f KDE_SESSION_VERSION 32c -set KDE_SESSION_VERSION 5
+
+KDE_SESSION_UID=`id -ru`
+export KDE_SESSION_UID
+
+XDG_CURRENT_DESKTOP=KDE
+export XDG_CURRENT_DESKTOP
+
+# At this point all the environment is ready, let's send it to kwalletd if running
+if test -n "$PAM_KWALLET_LOGIN" ; then
+    env | socat STDIN UNIX-CONNECT:$PAM_KWALLET_LOGIN
+fi
+# ...and also to kwalletd5
+if test -n "$PAM_KWALLET5_LOGIN" ; then
+    env | socat STDIN UNIX-CONNECT:$PAM_KWALLET5_LOGIN
+fi
+
+# At this point all environment variables are set, let's send it to the DBus session server to update the activation environment
+ksyncdbusenv
+if test $? -ne 0; then
+  # Startup error
+  echo 'startkde: Could not sync environment to dbus.'  1>&2
+  test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
+  xmessage -geometry 500x100 "Could not sync environment to dbus."
+  exit 1
+fi
+
+# We set LD_BIND_NOW to increase the efficiency of kdeinit.
+# kdeinit unsets this variable before loading applications.
+LD_BIND_NOW=true start_kdeinit_wrapper --kded +kcminit_startup
+if test $? -ne 0; then
+  # Startup error
+  echo 'startkde: Could not start kdeinit5. Check your installation.'  1>&2
+  test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
+  xmessage -geometry 500x100 "Could not start kdeinit5. Check your installation."
+  exit 1
+fi
+
+# (NixOS) Run kbuildsycoca5 before starting the user session because things
+# may be missing or moved if they have run nixos-rebuild and it may not be
+# possible for them to start Konsole to run it manually!
+kbuildsycoca5
+
+# finally, give the session control to the session manager
+# see kdebase/ksmserver for the description of the rest of the startup sequence
+# if the KDEWM environment variable has been set, then it will be used as KDE's
+# window manager instead of kwin.
+# if KDEWM is not set, ksmserver will ensure kwin is started.
+# kwrapper5 is used to reduce startup time and memory usage
+# kwrapper5 does not return useful error codes such as the exit code of ksmserver.
+# We only check for 255 which means that the ksmserver process could not be
+# started, any problems thereafter, e.g. ksmserver failing to initialize,
+# will remain undetected.
+test -n "$KDEWM" && KDEWM="--windowmanager $KDEWM"
+# If the session should be locked from the start (locked autologin),
+# lock now and do the rest of the KDE startup underneath the locker.
+KSMSERVEROPTIONS=""
+test -n "$dl" && KSMSERVEROPTIONS=" --lockscreen"
+kwrapper5 ksmserver $KDEWM $KSMSERVEROPTIONS
+if test $? -eq 255; then
+  # Startup error
+  echo 'startkde: Could not start ksmserver. Check your installation.'  1>&2
+  test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
+  xmessage -geometry 500x100 "Could not start ksmserver. Check your installation."
+fi
+
+wait_drkonqi=$(kreadconfig5 --file startkderc --group WaitForDrKonqi --key Enabled --default true)
+
+if test x"$wait_drkonqi"x = x"true"x ; then
+    # wait for remaining drkonqi instances with timeout (in seconds)
+    wait_drkonqi_timeout=$(kreadconfig5 --file startkderc --group WaitForDrKonqi --key Timeout --default 900)
+    wait_drkonqi_counter=0
+    while qdbus | grep "^[^w]*org.kde.drkonqi" > /dev/null ; do
+        sleep 5
+        wait_drkonqi_counter=$((wait_drkonqi_counter+5))
+        if test "$wait_drkonqi_counter" -ge "$wait_drkonqi_timeout" ; then
+            # ask remaining drkonqis to die in a graceful way
+            qdbus | grep 'org.kde.drkonqi-' | while read address ; do
+                qdbus "$address" "/MainApplication" "quit"
+            done
+            break
+        fi
+    done
+fi
+
+echo 'startkde: Shutting down...'  1>&2
+# just in case
+test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
+
+# Clean up
+kdeinit5_shutdown
+
+unset KDE_FULL_SESSION
+xprop -root -remove KDE_FULL_SESSION
+unset KDE_SESSION_VERSION
+xprop -root -remove KDE_SESSION_VERSION
+unset KDE_SESSION_UID
+
+echo 'startkde: Done.'  1>&2
diff --git a/pkgs/development/compilers/eql/default.nix b/pkgs/development/compilers/eql/default.nix
index def60aa295f0..de531e901d98 100644
--- a/pkgs/development/compilers/eql/default.nix
+++ b/pkgs/development/compilers/eql/default.nix
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ ecl qt4 xorgserver xkbcomp xkeyboard_config ];
 
-  NIX_CFLAGS_COMPILE = "-fPIC";
+  NIX_CFLAGS_COMPILE = [ "-fPIC" ];
 
   postPatch = ''
     sed -re 's@[(]in-home "gui/.command-history"[)]@(concatenate '"'"'string (ext:getenv "HOME") "/.eql-gui-command-history")@' -i gui/gui.lisp
diff --git a/pkgs/development/compilers/gcc/builder.sh b/pkgs/development/compilers/gcc/builder.sh
index 3190c5f5739f..5b206a63daa1 100644
--- a/pkgs/development/compilers/gcc/builder.sh
+++ b/pkgs/development/compilers/gcc/builder.sh
@@ -210,10 +210,14 @@ preInstall() {
 
 
 postInstall() {
+    mkdir -p "$lib" # some configs don't have anything to put into $lib
+
     # Move runtime libraries to $lib.
     moveToOutput "lib/lib*.so*" "$lib"
     moveToOutput "lib/lib*.la"  "$lib"
-    ln -s lib "$lib/lib64" # for *.la
+    if [ -d "$lib/lib" ]; then
+        ln -s lib "$lib/lib64" # for *.la
+    fi
     moveToOutput "share/gcc-*/python" "$lib"
 
     for i in "$lib"/lib/*.{la,py}; do
diff --git a/pkgs/development/libraries/CGAL/default.nix b/pkgs/development/libraries/CGAL/default.nix
index 1f964388cbda..b8fd4af812ab 100644
--- a/pkgs/development/libraries/CGAL/default.nix
+++ b/pkgs/development/libraries/CGAL/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, boost, gmp, mpfr }:
+{ stdenv, fetchurl, cmake, boost, gmp, mpfr, mesa_glu }:
 
 stdenv.mkDerivation rec {
   version = "4.7";
@@ -12,6 +12,7 @@ stdenv.mkDerivation rec {
   # note: optional component libCGAL_ImageIO would need zlib and opengl;
   #   there are also libCGAL_Qt{3,4} omitted ATM
   buildInputs = [ cmake boost gmp mpfr ];
+  #propagatedBuildInputs = [ mesa_glu ];
 
   doCheck = false;
 
diff --git a/pkgs/development/libraries/accounts-qt/default.nix b/pkgs/development/libraries/accounts-qt/default.nix
index e82d37f1d3c7..a16a0ef8cf5b 100644
--- a/pkgs/development/libraries/accounts-qt/default.nix
+++ b/pkgs/development/libraries/accounts-qt/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitLab, doxygen, glib, libaccounts-glib, pkgconfig, qtbase }:
+{ stdenv, fetchFromGitLab, doxygen, glib, libaccounts-glib, pkgconfig, qtbase, qmakeHook }:
 
 stdenv.mkDerivation rec {
   name = "accounts-qt-${version}";
@@ -12,12 +12,10 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ glib libaccounts-glib qtbase ];
-  nativeBuildInputs = [ doxygen pkgconfig ];
+  nativeBuildInputs = [ doxygen pkgconfig qmakeHook ];
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake PREFIX=$out LIBDIR=$out/lib CMAKE_CONFIG_PATH=$out/lib/cmake
-    runHook postConfigure
+  preConfigure = ''
+    qmakeFlags="$qmakeFlags LIBDIR=$out/lib CMAKE_CONFIG_PATH=$out/lib/cmake"
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/libraries/dbus/default.nix b/pkgs/development/libraries/dbus/default.nix
index 83635d9739f1..dd86ca540815 100644
--- a/pkgs/development/libraries/dbus/default.nix
+++ b/pkgs/development/libraries/dbus/default.nix
@@ -6,8 +6,8 @@ assert x11Support -> libX11 != null
                   && libSM != null;
 
 let
-  version = "1.8.20";
-  sha256 = "0fkh3d5r57a659hw9lqnw4v0bc5556vx54fsf7l9c732ci6byksw";
+  version = "1.10.8";
+  sha256 = "0560y3hxpgh346w6avcrcz79c8ansmn771y5xpcvvlr6m8mx5wxs";
 
 self =  stdenv.mkDerivation {
     name = "dbus-${version}";
@@ -17,8 +17,7 @@ self =  stdenv.mkDerivation {
       inherit sha256;
     };
 
-    patches = [ ./ignore-missing-includedirs.patch ]
-      ++ lib.optional stdenv.isSunOS ./implement-getgrouplist.patch;
+    patches = lib.optional stdenv.isSunOS ./implement-getgrouplist.patch;
     postPatch = ''
       substituteInPlace tools/Makefile.in \
         --replace 'install-localstatelibDATA:' 'disabled:' \
diff --git a/pkgs/development/libraries/dbus/ignore-missing-includedirs.patch b/pkgs/development/libraries/dbus/ignore-missing-includedirs.patch
deleted file mode 100644
index 2781f4ae3de5..000000000000
--- a/pkgs/development/libraries/dbus/ignore-missing-includedirs.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-diff -ru -x '*~' dbus-1.2.24-orig/bus/config-parser.c dbus-1.2.24/bus/config-parser.c
---- dbus-1.2.24-orig/bus/config-parser.c	2010-03-23 20:01:27.000000000 +0100
-+++ dbus-1.2.24/bus/config-parser.c	2010-07-20 14:17:20.000000000 +0200
-@@ -2159,12 +2159,16 @@
- 
-   retval = FALSE;
-   
--  dir = _dbus_directory_open (dirname, error);
-+  dbus_error_init (&tmp_error);
-+  
-+  dir = _dbus_directory_open (dirname, &tmp_error);
- 
-   if (dir == NULL)
--    goto failed;
-+    {
-+      retval = TRUE;
-+      goto failed;
-+    }
- 
--  dbus_error_init (&tmp_error);
-   while (_dbus_directory_get_next_file (dir, &filename, &tmp_error))
-     {
-       DBusString full_path;
diff --git a/pkgs/development/libraries/gdk-pixbuf/default.nix b/pkgs/development/libraries/gdk-pixbuf/default.nix
index 756ebf816199..1487d92dada0 100644
--- a/pkgs/development/libraries/gdk-pixbuf/default.nix
+++ b/pkgs/development/libraries/gdk-pixbuf/default.nix
@@ -2,15 +2,15 @@
 , jasper, libintlOrEmpty, gobjectIntrospection, doCheck ? false }:
 
 let
-  ver_maj = "2.32";
-  ver_min = "3";
+  ver_maj = "2.34";
+  ver_min = "0";
 in
 stdenv.mkDerivation rec {
   name = "gdk-pixbuf-${ver_maj}.${ver_min}";
 
   src = fetchurl {
     url = "mirror://gnome/sources/gdk-pixbuf/${ver_maj}/${name}.tar.xz";
-    sha256 = "0cfh87aqyqbfcwpbv1ihgmgfcn66il5q2n8yjyl8gxkjmkqp2rrb";
+    sha256 = "0yc8indbl3hf18z6x6kjg59xp9sngm1d8vmz4c7bs6g27qw5npnm";
   };
 
   outputs = [ "dev" "out" "docdev" ];
diff --git a/pkgs/development/libraries/gegl/3.0.nix b/pkgs/development/libraries/gegl/3.0.nix
index 575e2d562aad..1ca0a2b59257 100644
--- a/pkgs/development/libraries/gegl/3.0.nix
+++ b/pkgs/development/libraries/gegl/3.0.nix
@@ -1,13 +1,12 @@
-{ stdenv, fetchgit, pkgconfig, glib, babl, libpng, cairo, libjpeg, which
+{ stdenv, fetchurl, pkgconfig, glib, babl, libpng, cairo, libjpeg, which
 , librsvg, pango, gtk, bzip2, intltool, libtool, automake, autoconf, json_glib }:
 
 stdenv.mkDerivation rec {
-  name = "gegl-0.3.0-20140619";
+  name = "gegl-0.3.6";
 
-  src = fetchgit {
-    url = "https://git.gnome.org/browse/gegl";
-    sha256 = "1rjmv2y7z34zrnlqczmmh0bm724iszzdf6jpibszxnp3w0npwjrb";
-    rev = "0014eb1bad50244314ed09592fe57efa9322678c";
+  src = fetchurl {
+    url = "http://download.gimp.org/pub/gegl/0.3/${name}.tar.bz2";
+    sha256 = "08m7dlf2kwmp7jw3qskwxas192swhn1g4jcd8aldg9drfjygprvh";
   };
 
   configureScript = "./autogen.sh";
diff --git a/pkgs/development/libraries/glib/default.nix b/pkgs/development/libraries/glib/default.nix
index 120d398bd44d..b3b9dfcef161 100644
--- a/pkgs/development/libraries/glib/default.nix
+++ b/pkgs/development/libraries/glib/default.nix
@@ -39,8 +39,8 @@ let
     ln -sr -t "''${!outputInclude}/include/" "''${!outputInclude}"/lib/*/include/* 2>/dev/null || true
   '';
 
-  ver_maj = "2.46";
-  ver_min = "2";
+  ver_maj = "2.48";
+  ver_min = "0";
 in
 
 stdenv.mkDerivation rec {
@@ -48,7 +48,7 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "mirror://gnome/sources/glib/${ver_maj}/${name}.tar.xz";
-    sha256 = "5031722e37036719c1a09163cc6cf7c326e4c4f1f1e074b433c156862bd733db";
+    sha256 = "0d3w2hblrw7vvpx60l1kbvb830ygn3v8zhwdz65cc5593j9ycjvl";
   };
 
   patches = optional stdenv.isDarwin ./darwin-compilation.patch ++ optional doCheck ./skip-timer-test.patch;
diff --git a/pkgs/development/libraries/gnutls/3.4.nix b/pkgs/development/libraries/gnutls/3.4.nix
index 6d196978cdf3..71c3010467ce 100644
--- a/pkgs/development/libraries/gnutls/3.4.nix
+++ b/pkgs/development/libraries/gnutls/3.4.nix
@@ -1,11 +1,11 @@
 { callPackage, fetchurl, autoreconfHook, ... } @ args:
 
 callPackage ./generic.nix (args // rec {
-  version = "3.4.6";
+  version = "3.4.11";
 
   src = fetchurl {
     url = "ftp://ftp.gnutls.org/gcrypt/gnutls/v3.4/gnutls-${version}.tar.xz";
-    sha256 = "1v109px1sy1s731fnawzdsvggdswmr7ha9q5lid4v8pzgznmkdgy";
+    sha256 = "1f4sbb38xab46h67a3pm6kybgrahjx3vbrn66qq3cbc2jngrrvvh";
   };
 
   # This fixes some broken parallel dependencies
diff --git a/pkgs/development/libraries/gobject-introspection/default.nix b/pkgs/development/libraries/gobject-introspection/default.nix
index 47ccb17e4845..55abb21845b9 100644
--- a/pkgs/development/libraries/gobject-introspection/default.nix
+++ b/pkgs/development/libraries/gobject-introspection/default.nix
@@ -7,7 +7,7 @@
 # In that case its about 6MB which could be separated
 
 let
-  ver_maj = "1.46";
+  ver_maj = "1.48";
   ver_min = "0";
 in
 with stdenv.lib;
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "mirror://gnome/sources/gobject-introspection/${ver_maj}/${name}.tar.xz";
-    sha256 = "6658bd3c2b8813eb3e2511ee153238d09ace9d309e4574af27443d87423e4233";
+    sha256 = "0xsqwxhfqzr79av89mg766kxpb2i41bd0vwspk01xjdzrnn5l9zs";
   };
 
   outputs = [ "dev" "out" ];
diff --git a/pkgs/development/libraries/gtk+/3.x.nix b/pkgs/development/libraries/gtk+/3.x.nix
index a2da4c7b0339..dcbf0b4a47c1 100644
--- a/pkgs/development/libraries/gtk+/3.x.nix
+++ b/pkgs/development/libraries/gtk+/3.x.nix
@@ -11,8 +11,8 @@ assert cupsSupport -> cups != null;
 with stdenv.lib;
 
 let
-  ver_maj = "3.18";
-  ver_min = "5";
+  ver_maj = "3.20";
+  ver_min = "3";
   version = "${ver_maj}.${ver_min}";
 in
 stdenv.mkDerivation rec {
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "mirror://gnome/sources/gtk+/${ver_maj}/gtk+-${version}.tar.xz";
-    sha256 = "107aeb9a4244ce3c044becdd6dffc32d83202595181597180d4c736302a71852";
+    sha256 = "3834f3bf23b260b3e5ebfea41102e2026a8af29e36c3620edf4a5cf05e82f694";
   };
 
   outputs = [ "dev" "out" ];
diff --git a/pkgs/development/libraries/herqq/default.nix b/pkgs/development/libraries/herqq/default.nix
index fee12592c636..39d5b2c792a2 100644
--- a/pkgs/development/libraries/herqq/default.nix
+++ b/pkgs/development/libraries/herqq/default.nix
@@ -1,11 +1,9 @@
-{ stdenv, fetchurl, qt4, unzip }:
+{ stdenv, fetchurl, qt4, qmake4Hook, unzip }:
 
 stdenv.mkDerivation rec {
   name = "herqq-1.0.0";
 
-  buildInputs = [ qt4 unzip ];
-
-  configurePhase = "qmake PREFIX=$out herqq.pro";
+  buildInputs = [ qt4 unzip qmake4Hook ];
 
   src = fetchurl {
     url = "mirror://sourceforge/hupnp/${name}.zip";
diff --git a/pkgs/development/libraries/json-glib/default.nix b/pkgs/development/libraries/json-glib/default.nix
index e49063a9de91..5cfafc8e69ae 100644
--- a/pkgs/development/libraries/json-glib/default.nix
+++ b/pkgs/development/libraries/json-glib/default.nix
@@ -1,12 +1,12 @@
 { stdenv, fetchurl, glib, pkgconfig, gobjectIntrospection, dbus }:
 
 stdenv.mkDerivation rec {
-  name = "json-glib-${minVer}.2";
-  minVer = "1.0";
+  name = "json-glib-${minVer}.0";
+  minVer = "1.2";
 
   src = fetchurl {
     url = "mirror://gnome/sources/json-glib/${minVer}/${name}.tar.xz";
-    sha256 = "887bd192da8f5edc53b490ec51bf3ffebd958a671f5963e4f3af32c22e35660a";
+    sha256 = "1lx7p1c7cl21byvfgw92n8dhm09vi6qxrs0zkx9dg3y096zdzmlr";
   };
 
   configureflags= "--with-introspection";
diff --git a/pkgs/development/libraries/libcommuni/default.nix b/pkgs/development/libraries/libcommuni/default.nix
index 008311c620c9..7b83be7e911a 100644
--- a/pkgs/development/libraries/libcommuni/default.nix
+++ b/pkgs/development/libraries/libcommuni/default.nix
@@ -1,4 +1,4 @@
-{ fetchgit, qt5, stdenv
+{ fetchgit, qtbase, qmakeHook, stdenv
 }:
 
 stdenv.mkDerivation rec {
@@ -11,16 +11,16 @@ stdenv.mkDerivation rec {
     sha256 = "15sb7vinaaz1v5nclxpnp5p9a0kmfmlgiqibkipnyydizclidpfx";
   };
 
-  buildInputs = [ qt5.qtbase ];
+  buildInputs = [ qtbase ];
+  nativeBuildInputs = [ qmakeHook ];
 
   enableParallelBuild = true;
 
-  postPatch = ''
-    sed -i -e 's|/bin/pwd|pwd|g' -e 's/which/type -P/' configure
+  configurePhase = ''
+    sed -i -e 's|/bin/pwd|pwd|g' configure
+    ./configure -config release -prefix $out -qmake $QMAKE
   '';
 
-  configureFlags = [ "-config release" ];
-
   meta = with stdenv.lib; {
     description = "A cross-platform IRC framework written with Qt";
     homepage = https://communi.github.io;
diff --git a/pkgs/development/libraries/libjpeg-turbo/default.nix b/pkgs/development/libraries/libjpeg-turbo/default.nix
index 79cf45a8005f..da4d3a9822f2 100644
--- a/pkgs/development/libraries/libjpeg-turbo/default.nix
+++ b/pkgs/development/libraries/libjpeg-turbo/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, nasm, autoreconfHook }:
+{ stdenv, fetchurl, nasm }:
 
 stdenv.mkDerivation rec {
   name = "libjpeg-turbo-1.4.2";
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
 
   outputs = [ "dev" "out" "doc" "bin" ];
 
-  buildInputs = [ autoreconfHook nasm ];
+  nativeBuildInputs = [ nasm ];
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/development/libraries/libkeyfinder/default.nix b/pkgs/development/libraries/libkeyfinder/default.nix
index 729df918e579..d95ada04a34b 100644
--- a/pkgs/development/libraries/libkeyfinder/default.nix
+++ b/pkgs/development/libraries/libkeyfinder/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fftw, qtbase }:
+{ stdenv, fetchFromGitHub, fftw, qtbase, qmakeHook }:
 
 stdenv.mkDerivation rec {
   name = "libkeyfinder-${version}";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
     owner = "ibsh";
   };
 
-  buildInputs = [ fftw qtbase ];
+  buildInputs = [ fftw qtbase qmakeHook ];
 
   postPatch = ''
     substituteInPlace LibKeyFinder.pro \
@@ -19,12 +19,6 @@ stdenv.mkDerivation rec {
       --replace "-stdlib=libc++" ""
   '';
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake
-    runHook postConfigure
-  '';
-
   enableParallelBuilding = true;
 
   postInstall = ''
diff --git a/pkgs/development/libraries/libqglviewer/default.nix b/pkgs/development/libraries/libqglviewer/default.nix
index 6b40eeb3b1f5..eef9e05ca036 100644
--- a/pkgs/development/libraries/libqglviewer/default.nix
+++ b/pkgs/development/libraries/libqglviewer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt4 }:
+{ stdenv, fetchurl, qt4, qmake4Hook }:
 
 stdenv.mkDerivation rec {
   name = "libqglviewer-2.6.3";
@@ -9,13 +9,11 @@ stdenv.mkDerivation rec {
     sha256 = "00jdkyk4wg1356c3ar6nk3hyp494ya3yvshq9m57kfmqpn3inqdy";
   };
 
-  buildInputs = [ qt4 ];
+  buildInputs = [ qt4 qmake4Hook ];
 
-  buildPhase =
+  postPatch =
     ''
       cd QGLViewer
-      qmake PREFIX=$out
-      make
     '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/libraries/libsigcxx/default.nix b/pkgs/development/libraries/libsigcxx/default.nix
index 1171fa079cf6..e062e2db5c29 100644
--- a/pkgs/development/libraries/libsigcxx/default.nix
+++ b/pkgs/development/libraries/libsigcxx/default.nix
@@ -1,14 +1,14 @@
 { stdenv, fetchurl, fetchpatch, pkgconfig, gnum4 }:
 let
-  ver_maj = "2.6"; # odd major numbers are unstable
-  ver_min = "2";
+  ver_maj = "2.8"; # odd major numbers are unstable
+  ver_min = "0";
 in
 stdenv.mkDerivation rec {
   name = "libsigc++-${ver_maj}.${ver_min}";
 
   src = fetchurl {
     url = "mirror://gnome/sources/libsigc++/${ver_maj}/${name}.tar.xz";
-    sha256 = "fdace7134c31de792c17570f9049ca0657909b28c4c70ec4882f91a03de54437";
+    sha256 = "0lcnzzdq6718znfshs1hflpwqq6awbzwdyp4kv5lfaf54z880jbp";
   };
   patches = [(fetchpatch {
     url = "https://anonscm.debian.org/cgit/collab-maint/libsigc++-2.0.git/plain"
diff --git a/pkgs/development/libraries/mesa/default.nix b/pkgs/development/libraries/mesa/default.nix
index ad6bf8ba3190..2d05861605a5 100644
--- a/pkgs/development/libraries/mesa/default.nix
+++ b/pkgs/development/libraries/mesa/default.nix
@@ -23,7 +23,7 @@ else
 with { inherit (stdenv.lib) optional optionalString; };
 
 let
-  version = "11.1.2";
+  version = "11.1.3";
   # this is the default search path for DRI drivers
   driverLink = "/run/opengl-driver" + optionalString stdenv.isi686 "-32";
 in
@@ -38,7 +38,7 @@ stdenv.mkDerivation {
         + head (splitString "." version) + ''.x/${version}/mesa-${version}.tar.xz'')
       "https://launchpad.net/mesa/trunk/${version}/+download/mesa-${version}.tar.xz"
     ];
-    sha256 = "8f72aead896b340ba0f7a4a474bfaf71681f5d675592aec1cb7ba698e319148b";
+    sha256 = "51f6658a214d75e4d9f05207586d7ed56ebba75c6b10841176fb6675efa310ac";
   };
 
   prePatch = "patchShebangs .";
diff --git a/pkgs/development/libraries/phonon-backend-gstreamer/qt4/default.nix b/pkgs/development/libraries/phonon-backend-gstreamer/qt4/default.nix
index 844c2e580093..2f588cbe7087 100644
--- a/pkgs/development/libraries/phonon-backend-gstreamer/qt4/default.nix
+++ b/pkgs/development/libraries/phonon-backend-gstreamer/qt4/default.nix
@@ -1,8 +1,7 @@
-{ stdenv, fetchurl, cmake, automoc4, qt4, pkgconfig, phonon, gstreamer
-, gst_plugins_base }:
+{ stdenv, fetchurl, cmake, automoc4, qt4, pkgconfig, phonon, gst_all_1 }:
 
 let
-  version = "4.7.2";
+  version = "4.8.2";
   pname = "phonon-backend-gstreamer";
 in
 
@@ -11,18 +10,24 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "mirror://kde/stable/phonon/${pname}/${version}/src/${name}.tar.xz";
-    sha256 = "1cfjk450aajr8hfhnfq7zbmryprxiwr9ha5x585dsh7mja82mdw0";
+    sha256 = "1q1ix6zsfnh6gfnpmwp67s376m7g7ahpjl1qp2fqakzb5cgzgq10";
   };
 
-  buildInputs = [ phonon qt4 gstreamer gst_plugins_base ];
+  buildInputs = with gst_all_1; [ phonon qt4 gstreamer gst-plugins-base ];
 
   nativeBuildInputs = [ cmake automoc4 pkgconfig ];
 
+  NIX_CFLAGS_COMPILE = [
+    # This flag should be picked up through pkgconfig, but it isn't.
+    "-I${gst_all_1.gstreamer}/lib/gstreamer-1.0/include"
+  ];
+
   cmakeFlags = [ "-DCMAKE_INSTALL_LIBDIR=lib" ];
 
   meta = {
     homepage = http://phonon.kde.org/;
     description = "GStreamer backend for Phonon";
     platforms = stdenv.lib.platforms.linux;
-  };  
+    maintainers = with stdenv.lib.maintainers; [ ttuegel ];
+  };
 }
diff --git a/pkgs/development/libraries/phonon/default.nix b/pkgs/development/libraries/phonon/default.nix
new file mode 100644
index 000000000000..3c731ca19e32
--- /dev/null
+++ b/pkgs/development/libraries/phonon/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchurl, cmake, mesa, pkgconfig, libpulseaudio
+, qt4 ? null, automoc4 ? null
+, qtbase ? null, qtquick1 ? null, qttools ? null
+, debug ? false }:
+
+with stdenv.lib;
+
+let
+  v = "4.8.3";
+  withQt5 = qtbase != null;
+in
+
+assert withQt5 -> qtquick1 != null;
+assert withQt5 -> qttools != null;
+assert !withQt5 -> automoc4 != null;
+
+stdenv.mkDerivation rec {
+  name = "phonon-${v}";
+
+  meta = {
+    homepage = http://phonon.kde.org/;
+    description = "Multimedia API for Qt";
+    license = stdenv.lib.licenses.lgpl2;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ ttuegel ];
+  };
+
+  src = fetchurl {
+    url = "mirror://kde/stable/phonon/${v}/src/phonon-${v}.tar.xz";
+    sha256 = "05nshngk03ln90vsjz44dx8al576f4vd5fvhs1l0jmx13jb9q551";
+  };
+
+  buildInputs =
+    [ mesa libpulseaudio ]
+    ++ (if withQt5 then [ qtbase qtquick1 qttools ] else [ qt4 ]);
+
+  nativeBuildInputs =
+    [ cmake pkgconfig ]
+    ++ optional (!withQt5) automoc4;
+
+  NIX_CFLAGS_COMPILE = "-fPIC";
+
+  cmakeFlags =
+    [ "-DCMAKE_BUILD_TYPE=${if debug then "Debug" else "Release"}" ]
+    ++ optional withQt5 "-DPHONON_BUILD_PHONON4QT5=ON";
+
+  postPatch = ''
+    sed -i PhononConfig.cmake.in \
+        -e "/get_filename_component(rootDir/ s/^.*$//" \
+        -e "s,\\(set(PHONON_INCLUDE_DIR\\).*$,\\1 \"''${!outputDev}/include\")," \
+        -e "s,\\(set(PHONON_LIBRARY_DIR\\).*$,\\1 \"''${!outputLib}/lib\")," \
+        -e "s,\\(set(PHONON_BUILDSYSTEM_DIR\\).*$,\\1 \"''${!outputDev}/share/phonon${if withQt5 then "4qt5" else ""}/buildsystem\"),"
+  '';
+}
diff --git a/pkgs/development/libraries/phonon/qt4/default.nix b/pkgs/development/libraries/phonon/qt4/default.nix
deleted file mode 100644
index 9875b216e066..000000000000
--- a/pkgs/development/libraries/phonon/qt4/default.nix
+++ /dev/null
@@ -1,28 +0,0 @@
-{ stdenv, fetchurl, cmake, automoc4, libpulseaudio, qt4 }:
-
-with stdenv.lib;
-
-let
-  v = "4.8.1";
-in
-
-stdenv.mkDerivation rec {
-  name = "phonon-${v}";
-
-  src = fetchurl {
-    url = "mirror://kde/stable/phonon/${v}/phonon-${v}.tar.xz";
-    sha256 = "1l97h1jj3gvl1chx1qbipizfvjgqc05wrhdcflc76c2krlk03jmn";
-  };
-
-  buildInputs = [ qt4 libpulseaudio ];
-
-  nativeBuildInputs = [ cmake automoc4 ];
-
-  meta = {
-    homepage = http://phonon.kde.org/;
-    description = "Multimedia API for Qt";
-    license = stdenv.lib.licenses.lgpl2;
-    platforms = stdenv.lib.platforms.linux;
-    maintainers = with stdenv.lib.maintainers; [ ttuegel ];
-  };
-}
diff --git a/pkgs/development/libraries/phonon/qt5/default.nix b/pkgs/development/libraries/phonon/qt5/default.nix
deleted file mode 100644
index fc07344d2d1a..000000000000
--- a/pkgs/development/libraries/phonon/qt5/default.nix
+++ /dev/null
@@ -1,38 +0,0 @@
-{ stdenv, fetchurl, cmake, mesa, pkgconfig, libpulseaudio
-, qtbase, qtquick1, qttools
-, debug ? false }:
-
-with stdenv.lib;
-
-let
-  v = "4.8.3";
-in
-
-stdenv.mkDerivation rec {
-  name = "phonon-${v}";
-
-  src = fetchurl {
-    url = "mirror://kde/stable/phonon/${v}/src/phonon-${v}.tar.xz";
-    sha256 = "05nshngk03ln90vsjz44dx8al576f4vd5fvhs1l0jmx13jb9q551";
-  };
-
-  buildInputs = [ mesa qtbase qtquick1 qttools libpulseaudio ];
-
-  nativeBuildInputs = [ cmake pkgconfig ];
-
-  NIX_CFLAGS_COMPILE = "-fPIC";
-
-  cmakeFlags = [
-    "-DCMAKE_BUILD_TYPE=${if debug then "Debug" else "Release"}"
-    "-DPHONON_BUILD_PHONON4QT5=ON"
-    "-DCMAKE_INSTALL_LIBDIR=lib"
-  ];
-
-  meta = {
-    homepage = http://phonon.kde.org/;
-    description = "Multimedia API for Qt";
-    license = stdenv.lib.licenses.lgpl2;
-    platforms = stdenv.lib.platforms.linux;
-    maintainers = with stdenv.lib.maintainers; [ ttuegel ];
-  };
-}
diff --git a/pkgs/development/libraries/polkit-qt-1/default.nix b/pkgs/development/libraries/polkit-qt-1/default.nix
deleted file mode 100644
index 3715158705cb..000000000000
--- a/pkgs/development/libraries/polkit-qt-1/default.nix
+++ /dev/null
@@ -1,25 +0,0 @@
-{ stdenv, fetchurl, cmake, pkgconfig, polkit, automoc4, glib
-, qt4 ? null
-, withQt5 ? false, qtbase ? null }:
-
-with stdenv.lib;
-
-assert (withQt5 -> qtbase != null); assert (!withQt5 -> qt4 != null);
-
-stdenv.mkDerivation {
-  name = "polkit-qt-1-0.112.0";
-
-  src = fetchurl {
-    url = "mirror://kde/stable/apps/KDE4.x/admin/polkit-qt-1-0.112.0.tar.bz2";
-    sha256 = "1ip78x20hjqvm08kxhp6gb8hf6k5n6sxyx6kk2yvvq53djzh7yv7";
-  };
-
-  nativeBuildInputs = [ cmake pkgconfig ] ++ optional (!withQt5) automoc4;
-
-  propagatedBuildInputs = [ polkit glib ] ++ [(if withQt5 then qtbase else qt4)];
-
-  meta = {
-    description = "A Qt wrapper around PolKit";
-    maintainers = with stdenv.lib.maintainers; [ ttuegel ];
-  };
-}
diff --git a/pkgs/development/libraries/polkit-qt-1/qt-4.nix b/pkgs/development/libraries/polkit-qt-1/qt-4.nix
new file mode 100644
index 000000000000..fa5c77aa27aa
--- /dev/null
+++ b/pkgs/development/libraries/polkit-qt-1/qt-4.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, cmake, pkgconfig, polkit, automoc4, glib, qt4 }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation {
+  name = "polkit-qt-1-qt4-0.112.0";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/apps/KDE4.x/admin/polkit-qt-1-0.112.0.tar.bz2";
+    sha256 = "1ip78x20hjqvm08kxhp6gb8hf6k5n6sxyx6kk2yvvq53djzh7yv7";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig automoc4 ];
+
+  propagatedBuildInputs = [ polkit glib qt4 ];
+
+  meta = {
+    description = "A Qt wrapper around PolKit";
+    maintainers = with stdenv.lib.maintainers; [ ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/polkit-qt-1/qt-5.nix b/pkgs/development/libraries/polkit-qt-1/qt-5.nix
new file mode 100644
index 000000000000..bdeb175b89f5
--- /dev/null
+++ b/pkgs/development/libraries/polkit-qt-1/qt-5.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, cmake, pkgconfig, polkit, glib, qtbase }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation {
+  name = "polkit-qt-1-qt5-0.112.0";
+
+  outputs = [ "dev" "out" ];
+
+  src = fetchurl {
+    url = "mirror://kde/stable/apps/KDE4.x/admin/polkit-qt-1-0.112.0.tar.bz2";
+    sha256 = "1ip78x20hjqvm08kxhp6gb8hf6k5n6sxyx6kk2yvvq53djzh7yv7";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+
+  propagatedBuildInputs = [ polkit glib qtbase ];
+
+  postFixup = ''
+    # Fix library location in CMake module
+    sed -i "$dev/lib/cmake/PolkitQt5-1/PolkitQt5-1Config.cmake" \
+        -e "s,\\(set_and_check.POLKITQT-1_LIB_DIR\\).*$,\\1 \"''${!outputLib}/lib\"),"
+  '';
+
+  meta = {
+    description = "A Qt wrapper around PolKit";
+    maintainers = with stdenv.lib.maintainers; [ ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/qmltermwidget/default.nix b/pkgs/development/libraries/qmltermwidget/default.nix
index 359a4341537d..1620649a3cce 100644
--- a/pkgs/development/libraries/qmltermwidget/default.nix
+++ b/pkgs/development/libraries/qmltermwidget/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, qtbase, qtquick1 }:
+{ stdenv, fetchgit, qtbase, qtquick1, qmakeHook }:
 
 stdenv.mkDerivation rec {
   version = "0.1.0";
@@ -11,19 +11,14 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ qtbase qtquick1 ];
+  nativeBuildInputs = [ qmakeHook ];
 
   patchPhase = ''
     substituteInPlace qmltermwidget.pro \
       --replace '$$[QT_INSTALL_QML]' "/lib/qt5/qml/"
   '';
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake PREFIX=$out
-    runHook postConfigure
-  '';
-
-  installPhase=''make INSTALL_ROOT="$out" install'';
+  installFlags = [ "INSTALL_ROOT=$(out)" ];
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/development/libraries/qoauth/default.nix b/pkgs/development/libraries/qoauth/default.nix
index f93e4479e71e..5a448d330671 100644
--- a/pkgs/development/libraries/qoauth/default.nix
+++ b/pkgs/development/libraries/qoauth/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt4, qca2 }:
+{ stdenv, fetchurl, qt4, qca2, qmake4Hook }:
 
 stdenv.mkDerivation {
   name = "qoauth-1.0.1";
@@ -9,13 +9,13 @@ stdenv.mkDerivation {
     sha256 = "1ax0g4dd49a3a1699ams13bkhz690xfwqg8rxp1capbdpf2aa8cp";
   };
 
-  configurePhase = "qmake PREFIX=$prefix";
   patchPhase = "sed -e 's/lib64/lib/g' -i src/src.pro";
 
   buildInputs = [ qt4 qca2 ];
+  nativeBuildInputs = [ qmake4Hook ];
 
-  NIX_CFLAGS_COMPILE="-I${qca2}/include/QtCrypto";
-  NIX_LDFLAGS = "-lqca";
+  NIX_CFLAGS_COMPILE = [ "-I${qca2}/include/QtCrypto" ];
+  NIX_LDFLAGS = [ "-lqca" ];
 
   meta = {
     description = "Qt library for OAuth authentication";
diff --git a/pkgs/development/libraries/qscintilla/default.nix b/pkgs/development/libraries/qscintilla/default.nix
index 26d412e5a8cb..bc44f53fa6ef 100644
--- a/pkgs/development/libraries/qscintilla/default.nix
+++ b/pkgs/development/libraries/qscintilla/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt }:
+{ stdenv, fetchurl, qt4, qmake4Hook }:
 
 stdenv.mkDerivation rec {
   pname = "qscintilla";
@@ -11,7 +11,8 @@ stdenv.mkDerivation rec {
     sha256 = "d7c32e32582f93779de861006d87467b38b9ebc06e3d0b32e981cb24369fa417";
   };
 
-  buildInputs = [ qt ];
+  buildInputs = [ qt4 ];
+  nativeBuildInputs = [ qmake4Hook ];
 
   preConfigure = ''
     cd Qt4Qt5
@@ -20,7 +21,6 @@ stdenv.mkDerivation rec {
            -e "s,\$\$\\[QT_INSTALL_TRANSLATIONS\\],$out/share/qt/translations," \
            -e "s,\$\$\\[QT_INSTALL_DATA\\],$out/share/qt," \
            qscintilla.pro
-    qmake qscintilla.pro
   '';
 
   meta = {
diff --git a/pkgs/development/libraries/qt-4.x/4.8/qmake-hook.sh b/pkgs/development/libraries/qt-4.x/4.8/qmake-hook.sh
new file mode 100644
index 000000000000..bf716a72d0fc
--- /dev/null
+++ b/pkgs/development/libraries/qt-4.x/4.8/qmake-hook.sh
@@ -0,0 +1,11 @@
+qmakeConfigurePhase() {
+    runHook preConfigure
+
+    $QMAKE PREFIX=$out $qmakeFlags
+
+    runHook postConfigure
+}
+
+export QMAKE=@qt4@/bin/qmake
+
+configurePhase=qmakeConfigurePhase
diff --git a/pkgs/development/libraries/qt-5/5.4/default.nix b/pkgs/development/libraries/qt-5/5.4/default.nix
index df2fb8ad1862..950129ba5413 100644
--- a/pkgs/development/libraries/qt-5/5.4/default.nix
+++ b/pkgs/development/libraries/qt-5/5.4/default.nix
@@ -37,12 +37,10 @@ let
       inherit src;
 
       propagatedBuildInputs = args.qtInputs ++ (args.propagatedBuildInputs or []);
-      nativeBuildInputs = (args.nativeBuildInputs or []) ++ [ self.fixQtModuleCMakeConfig ];
+      nativeBuildInputs = (args.nativeBuildInputs or []) ++ [ self.fixQtModuleCMakeConfig self.qmakeHook ];
 
       NIX_QT_SUBMODULE = args.NIX_QT_SUBMODULE or true;
-      dontAddPrefix = args.dontAddPrefix or true;
       dontFixLibtool = args.dontFixLibtool or true;
-      configureScript = args.configureScript or "qmake";
 
       outputs = args.outputs or [ "dev" "out" ];
       setOutputFlags = false;
@@ -109,6 +107,7 @@ let
 
       makeQtWrapper = makeSetupHook { deps = [ makeWrapper ]; } ./make-qt-wrapper.sh;
       fixQtModuleCMakeConfig = makeSetupHook { } ./fix-qt-module-cmake-config.sh;
+      qmakeHook = makeSetupHook { substitutions = { qt_dev = qtbase.dev; lndir = pkgs.xorg.lndir; }; } ./qmake-hook.sh;
 
     };
 
diff --git a/pkgs/development/libraries/qt-5/5.4/qmake-hook.sh b/pkgs/development/libraries/qt-5/5.4/qmake-hook.sh
new file mode 100644
index 000000000000..a38f9f578e38
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.4/qmake-hook.sh
@@ -0,0 +1,101 @@
+if [[ -z "$QMAKE" ]]; then
+
+_qtLinkDependencyDir() {
+    @lndir@/bin/lndir -silent "$1/$2" "$qtOut/$2"
+    if [ -n "$NIX_QT_SUBMODULE" ]; then
+        find "$1/$2" -printf "$2/%P\n" >> "$out/nix-support/qt-inputs"
+    fi
+}
+
+_qtLinkModule() {
+    if [ -d "$1/mkspecs" ]; then
+        # $1 is a Qt module
+        _qtLinkDependencyDir "$1" mkspecs
+
+        for dir in bin include lib share; do
+            if [ -d "$1/$dir" ]; then
+                _qtLinkDependencyDir "$1" "$dir"
+            fi
+        done
+    fi
+}
+
+_qtRmModules() {
+    cat "$out/nix-support/qt-inputs" | while read file; do
+      if [ -h "$out/$file" ]; then
+        rm "$out/$file"
+      fi
+    done
+
+    cat "$out/nix-support/qt-inputs" | while read file; do
+      if [ -d "$out/$file" ]; then
+        rmdir --ignore-fail-on-non-empty -p "$out/$file"
+      fi
+    done
+
+    rm "$out/nix-support/qt-inputs"
+}
+
+_qtRmQmake() {
+    rm "$qtOut/bin/qmake" "$qtOut/bin/qt.conf"
+}
+
+_qtSetQmakePath() {
+    export PATH="$qtOut/bin${PATH:+:}$PATH"
+}
+
+_qtMultioutModuleDevs() {
+    # We cannot simply set these paths in configureFlags because libQtCore retains
+    # references to the paths it was built with.
+    moveToOutput "bin" "${!outputDev}"
+    moveToOutput "include" "${!outputDev}"
+
+    # The destination directory must exist or moveToOutput will do nothing
+    mkdir -p "${!outputDev}/share"
+    moveToOutput "share/doc" "${!outputDev}"
+}
+
+qmakeConfigurePhase() {
+    runHook preConfigure
+
+    qmake PREFIX=$out $qmakeFlags
+
+    runHook postConfigure
+}
+
+qtOut=""
+if [[ -z "$NIX_QT_SUBMODULE" ]]; then
+    qtOut=`mktemp -d`
+else
+    qtOut=$out
+fi
+
+mkdir -p "$qtOut/bin" "$qtOut/mkspecs" "$qtOut/include" "$qtOut/nix-support" "$qtOut/lib" "$qtOut/share"
+
+cp "@qt_dev@/bin/qmake" "$qtOut/bin"
+cat >"$qtOut/bin/qt.conf" <<EOF
+[Paths]
+Prefix = $qtOut
+Plugins = lib/qt5/plugins
+Imports = lib/qt5/imports
+Qml2Imports = lib/qt5/qml
+Documentation = share/doc/qt5
+EOF
+
+export QMAKE="$qtOut/bin/qmake"
+
+envHooks+=(_qtLinkModule)
+# Set PATH to find qmake first in a preConfigure hook
+# It must run after all the envHooks!
+postHooks+=(_qtSetQmakePath)
+
+if [  -z "$dontUseQmakeConfigure" -a -z "$configurePhase" ]; then
+    configurePhase=qmakeConfigurePhase
+fi
+
+if [ -n "$NIX_QT_SUBMODULE" ]; then
+    postInstallHooks+=(_qtRmQmake _qtRmModules)
+    preFixupHooks+=(_qtMultioutModuleDevs)
+fi
+
+fi
diff --git a/pkgs/development/libraries/qt-5/5.4/qtbase/default.nix b/pkgs/development/libraries/qt-5/5.4/qtbase/default.nix
index 0585601db765..32e8bacd1e7b 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtbase/default.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtbase/default.nix
@@ -239,7 +239,6 @@ stdenv.mkDerivation {
       fixQtModuleCMakeConfig "Xml"
     '';
 
-  inherit lndir;
   setupHook = ./setup-hook.sh;
 
   enableParallelBuilding = true;
diff --git a/pkgs/development/libraries/qt-5/5.4/qtbase/setup-hook.sh b/pkgs/development/libraries/qt-5/5.4/qtbase/setup-hook.sh
index c44cd2234d76..a9c4fbc855f7 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtbase/setup-hook.sh
+++ b/pkgs/development/libraries/qt-5/5.4/qtbase/setup-hook.sh
@@ -1,41 +1,3 @@
-if [[ -z "$QMAKE" ]]; then
-
-_qtLinkDependencyDir() {
-    @lndir@/bin/lndir -silent "$1/$2" "$qtOut/$2"
-    if [[ -n "$NIX_QT_SUBMODULE" ]]; then
-        find "$1/$2" -printf "$2/%P\n" >> "$out/nix-support/qt-inputs"
-    fi
-}
-
-_qtLinkModule() {
-    if [ -d "$1/mkspecs" ]; then
-        # $1 is a Qt module
-        _qtLinkDependencyDir "$1" mkspecs
-
-        for dir in bin include lib share; do
-            if [ -d "$1/$dir" ]; then
-                _qtLinkDependencyDir "$1" "$dir"
-            fi
-        done
-    fi
-}
-
-_qtRmModules() {
-    cat "$out/nix-support/qt-inputs" | while read file; do
-      if [[ -h "$out/$file" ]]; then
-        rm "$out/$file"
-      fi
-    done
-
-    cat "$out/nix-support/qt-inputs" | while read file; do
-      if [[ -d "$out/$file" ]]; then
-        rmdir --ignore-fail-on-non-empty -p "$out/$file"
-      fi
-    done
-
-    rm "$out/nix-support/qt-inputs"
-}
-
 addToSearchPathOnceWithCustomDelimiter() {
     local delim="$1"
     local search="$2"
@@ -43,11 +5,14 @@ addToSearchPathOnceWithCustomDelimiter() {
     local dirs
     local exported
     IFS="$delim" read -a dirs <<< "${!search}"
-    for dir in ${dirs[@]}; do
-        if [ "z$dir" == "z$target" ]; then exported=1; fi
-    done
-    if [ -z $exported ]; then
-        eval "export ${search}=\"${!search}${!search:+$delim}$target\""
+    local canonical
+    if canonical=$(readlink -e "$target"); then
+        for dir in ${dirs[@]}; do
+            if [ "z$dir" == "z$canonical" ]; then exported=1; fi
+        done
+        if [ -z $exported ]; then
+            eval "export ${search}=\"${!search}${!search:+$delim}$canonical\""
+        fi
     fi
 }
 
@@ -63,6 +28,7 @@ _qtPropagateRuntimeDependencies() {
     for dir in "lib/qt5/plugins" "lib/qt5/qml" "lib/qt5/imports"; do
         if [ -d "$1/$dir" ]; then
             propagateOnce propagatedBuildInputs "$1"
+            propagateOnce propagatedUserEnvPkgs "$1"
             break
         fi
     done
@@ -71,63 +37,14 @@ _qtPropagateRuntimeDependencies() {
     addToSearchPathOnce QML2_IMPORT_PATH "$1/lib/qt5/qml"
 }
 
-_qtRmQmake() {
-    rm "$qtOut/bin/qmake" "$qtOut/bin/qt.conf"
-}
-
-_qtSetQmakePath() {
-    export PATH="$qtOut/bin${PATH:+:}$PATH"
-}
-
-_qtMultioutModuleDevs() {
-    # We cannot simply set these paths in configureFlags because libQtCore retains
-    # references to the paths it was built with.
-    moveToOutput "bin" "${!outputDev}"
-    moveToOutput "include" "${!outputDev}"
-
-    # The destination directory must exist or moveToOutput will do nothing
-    mkdir -p "${!outputDev}/share"
-    moveToOutput "share/doc" "${!outputDev}"
-}
+envHooks+=(_qtPropagateRuntimeDependencies)
 
 _qtMultioutDevs() {
     # This is necessary whether the package is a Qt module or not
     moveToOutput "mkspecs" "${!outputDev}"
 }
 
-qtOut=""
-if [[ -z "$NIX_QT_SUBMODULE" ]]; then
-    qtOut=`mktemp -d`
-else
-    qtOut=$out
-fi
-
-mkdir -p "$qtOut/bin" "$qtOut/mkspecs" "$qtOut/include" "$qtOut/nix-support" "$qtOut/lib" "$qtOut/share"
-
-cp "@dev@/bin/qmake" "$qtOut/bin"
-cat >"$qtOut/bin/qt.conf" <<EOF
-[Paths]
-Prefix = $qtOut
-Plugins = lib/qt5/plugins
-Imports = lib/qt5/imports
-Qml2Imports = lib/qt5/qml
-Documentation = share/doc/qt5
-EOF
-
-export QMAKE="$qtOut/bin/qmake"
-
-envHooks+=(_qtLinkModule _qtPropagateRuntimeDependencies)
-# Set PATH to find qmake first in a preConfigure hook
-# It must run after all the envHooks!
-preConfigureHooks+=(_qtSetQmakePath)
-
 preFixupHooks+=(_qtMultioutDevs)
-if [[ -n "$NIX_QT_SUBMODULE" ]]; then
-    postInstallHooks+=(_qtRmQmake _qtRmModules)
-    preFixupHooks+=(_qtMultioutModuleDevs)
-fi
-
-fi
 
 if [[ -z "$NIX_QT_PIC" ]]; then
     export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE${NIX_CFLAGS_COMPILE:+ }-fPIC"
diff --git a/pkgs/development/libraries/qt-5/5.4/qtmultimedia.nix b/pkgs/development/libraries/qt-5/5.4/qtmultimedia.nix
index 8db8fa5f4b96..9eb68ba6b5ba 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtmultimedia.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtmultimedia.nix
@@ -8,7 +8,7 @@ qtSubmodule {
   buildInputs = [
     pkgconfig alsaLib gstreamer gst-plugins-base libpulseaudio
   ];
-  configureFlags = "GST_VERSION=1.0";
+  qmakeFlags = [ "GST_VERSION=1.0" ];
   postFixup = ''
     fixQtModuleCMakeConfig "Multimedia"
     fixQtModuleCMakeConfig "MultimediaWidgets"
diff --git a/pkgs/development/libraries/qt-5/5.5/default.nix b/pkgs/development/libraries/qt-5/5.5/default.nix
index 955d57350c29..034e25662ea1 100644
--- a/pkgs/development/libraries/qt-5/5.5/default.nix
+++ b/pkgs/development/libraries/qt-5/5.5/default.nix
@@ -42,12 +42,10 @@ let
       inherit src;
 
       propagatedBuildInputs = args.qtInputs ++ (args.propagatedBuildInputs or []);
-      nativeBuildInputs = (args.nativeBuildInputs or []) ++ [ self.fixQtModuleCMakeConfig ];
+      nativeBuildInputs = (args.nativeBuildInputs or []) ++ [ self.fixQtModuleCMakeConfig self.qmakeHook ];
 
       NIX_QT_SUBMODULE = args.NIX_QT_SUBMODULE or true;
-      dontAddPrefix = args.dontAddPrefix or true;
       dontFixLibtool = args.dontFixLibtool or true;
-      configureScript = args.configureScript or "qmake";
 
       outputs = args.outputs or [ "dev" "out" ];
       setOutputFlags = args.setOutputFlags or false;
@@ -115,6 +113,7 @@ let
 
       makeQtWrapper = makeSetupHook { deps = [ makeWrapper ]; } ./make-qt-wrapper.sh;
       fixQtModuleCMakeConfig = makeSetupHook { } ./fix-qt-module-cmake-config.sh;
+      qmakeHook = makeSetupHook { substitutions = { qt_dev = qtbase.dev; lndir = pkgs.xorg.lndir; }; } ./qmake-hook.sh;
 
     };
 
diff --git a/pkgs/development/libraries/qt-5/5.5/make-qt-wrapper.sh b/pkgs/development/libraries/qt-5/5.5/make-qt-wrapper.sh
index f29bbb73639b..3b537430371a 100644
--- a/pkgs/development/libraries/qt-5/5.5/make-qt-wrapper.sh
+++ b/pkgs/development/libraries/qt-5/5.5/make-qt-wrapper.sh
@@ -24,11 +24,15 @@ makeQtWrapper() {
         "$@"
 }
 
-# cannot use addToSearchPath because these directories may not exist yet
-export QT_PLUGIN_PATH="$QT_PLUGIN_PATH${QT_PLUGIN_PATH:+:}${!outputLib}/lib/qt5/plugins"
-export QML_IMPORT_PATH="$QML_IMPORT_PATH${QML_IMPORT_PATH:+:}${!outputLib}/lib/qt5/imports"
-export QML2_IMPORT_PATH="$QML2_IMPORT_PATH${QML2_IMPORT_PATH:+:}${!outputLib}/lib/qt5/qml"
-export XDG_CONFIG_DIRS="$XDG_CONFIG_DIRS${XDG_CONFIG_DIRS:+:}${!outputLib}/etc/xdg"
-export XDG_DATA_DIRS="$XDG_DATA_DIRS${XDG_DATA_DIRS:+:}${!outputLib}/share"
-export NIX_WRAP_XDG_CONFIG_DIRS="$NIX_WRAP_XDG_CONFIG_DIRS${NIX_WRAP_XDG_CONFIG_DIRS:+:}${!outputLib}/etc/xdg"
-export NIX_WRAP_XDG_DATA_DIRS="$NIX_WRAP_XDG_DATA_DIRS${NIX_WRAP_XDG_DATA_DIRS:+:}${!outputLib}/share"
+_makeQtWrapperSetup() {
+    # cannot use addToSearchPath because these directories may not exist yet
+    export QT_PLUGIN_PATH="$QT_PLUGIN_PATH${QT_PLUGIN_PATH:+:}${!outputLib}/lib/qt5/plugins"
+    export QML_IMPORT_PATH="$QML_IMPORT_PATH${QML_IMPORT_PATH:+:}${!outputLib}/lib/qt5/imports"
+    export QML2_IMPORT_PATH="$QML2_IMPORT_PATH${QML2_IMPORT_PATH:+:}${!outputLib}/lib/qt5/qml"
+    export XDG_CONFIG_DIRS="$XDG_CONFIG_DIRS${XDG_CONFIG_DIRS:+:}${!outputLib}/etc/xdg"
+    export XDG_DATA_DIRS="$XDG_DATA_DIRS${XDG_DATA_DIRS:+:}${!outputLib}/share"
+    export NIX_WRAP_XDG_CONFIG_DIRS="$NIX_WRAP_XDG_CONFIG_DIRS${NIX_WRAP_XDG_CONFIG_DIRS:+:}${!outputLib}/etc/xdg"
+    export NIX_WRAP_XDG_DATA_DIRS="$NIX_WRAP_XDG_DATA_DIRS${NIX_WRAP_XDG_DATA_DIRS:+:}${!outputLib}/share"
+}
+
+prePhases+=(_makeQtWrapperSetup)
diff --git a/pkgs/development/libraries/qt-5/5.5/qmake-hook.sh b/pkgs/development/libraries/qt-5/5.5/qmake-hook.sh
new file mode 100644
index 000000000000..f059c19e03bb
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/qmake-hook.sh
@@ -0,0 +1,101 @@
+if [[ -z "$QMAKE" ]]; then
+
+_qtLinkDependencyDir() {
+    @lndir@/bin/lndir -silent "$1/$2" "$qtOut/$2"
+    if [ -n "$NIX_QT_SUBMODULE" ]; then
+        find "$1/$2" -printf "$2/%P\n" >> "$out/nix-support/qt-inputs"
+    fi
+}
+
+_qtLinkModule() {
+    if [ -d "$1/mkspecs" ]; then
+        # $1 is a Qt module
+        _qtLinkDependencyDir "$1" mkspecs
+
+        for dir in bin include lib share; do
+            if [ -d "$1/$dir" ]; then
+                _qtLinkDependencyDir "$1" "$dir"
+            fi
+        done
+    fi
+}
+
+_qtRmModules() {
+    cat "$out/nix-support/qt-inputs" | while read file; do
+      if [ -h "$out/$file" ]; then
+        rm "$out/$file"
+      fi
+    done
+
+    cat "$out/nix-support/qt-inputs" | while read file; do
+      if [ -d "$out/$file" ]; then
+        rmdir --ignore-fail-on-non-empty -p "$out/$file"
+      fi
+    done
+
+    rm "$out/nix-support/qt-inputs"
+}
+
+_qtRmQmake() {
+    rm "$qtOut/bin/qmake" "$qtOut/bin/qt.conf"
+}
+
+_qtSetQmakePath() {
+    export PATH="$qtOut/bin${PATH:+:}$PATH"
+}
+
+_qtMultioutModuleDevs() {
+    # We cannot simply set these paths in configureFlags because libQtCore retains
+    # references to the paths it was built with.
+    moveToOutput "bin" "${!outputDev}"
+    moveToOutput "include" "${!outputDev}"
+
+    # The destination directory must exist or moveToOutput will do nothing
+    mkdir -p "${!outputDev}/share"
+    moveToOutput "share/doc" "${!outputDev}"
+}
+
+qmakeConfigurePhase() {
+    runHook preConfigure
+
+    qmake PREFIX=$out $qmakeFlags
+
+    runHook postConfigure
+}
+
+qtOut=""
+if [[ -z "$NIX_QT_SUBMODULE" ]]; then
+    qtOut=`mktemp -d`
+else
+    qtOut=$out
+fi
+
+mkdir -p "$qtOut/bin" "$qtOut/mkspecs" "$qtOut/include" "$qtOut/nix-support" "$qtOut/lib" "$qtOut/share"
+
+cp "@qt_dev@/bin/qmake" "$qtOut/bin"
+cat >"$qtOut/bin/qt.conf" <<EOF
+[Paths]
+Prefix = $qtOut
+Plugins = lib/qt5/plugins
+Imports = lib/qt5/imports
+Qml2Imports = lib/qt5/qml
+Documentation = share/doc/qt5
+EOF
+
+export QMAKE="$qtOut/bin/qmake"
+
+envHooks+=(_qtLinkModule)
+# Set PATH to find qmake first in a preConfigure hook
+# It must run after all the envHooks!
+postHooks+=(_qtSetQmakePath)
+
+if [ -z "$dontUseQmakeConfigure" -a -z "$configurePhase" ]; then
+    configurePhase=qmakeConfigurePhase
+fi
+
+if [ -n "$NIX_QT_SUBMODULE" ]; then
+    postInstallHooks+=(_qtRmQmake _qtRmModules)
+    preFixupHooks+=(_qtMultioutModuleDevs)
+fi
+
+fi
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/default.nix b/pkgs/development/libraries/qt-5/5.5/qtbase/default.nix
index 35410d55e66d..7d68116d7168 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtbase/default.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/default.nix
@@ -121,11 +121,6 @@ stdenv.mkDerivation {
         # The destination directory must exist or moveToOutput will do nothing
         mkdir -p "$dev/share"
         moveToOutput "share/doc" "$dev"
-
-        mkdir -p "$dev/lib"
-        lndir -silent "$out/lib" "$dev/lib"
-        if [[ -h "$dev/lib/cmake" ]]; then rm "$dev/lib/cmake"; fi
-        if [[ -h "$dev/lib/pkgconfig" ]]; then rm "$dev/lib/pkgconfig"; fi
     }
     preFixupHooks+=(_multioutQtDevs)
 
@@ -259,7 +254,6 @@ stdenv.mkDerivation {
       fixQtModuleCMakeConfig "Xml"
     '';
 
-  inherit lndir;
   setupHook = ./setup-hook.sh;
 
   enableParallelBuilding = true;
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/nix-profiles-library-paths.patch b/pkgs/development/libraries/qt-5/5.5/qtbase/nix-profiles-library-paths.patch
index d20767a38e5b..b4561db6e77d 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtbase/nix-profiles-library-paths.patch
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/nix-profiles-library-paths.patch
@@ -2,24 +2,18 @@ Index: qt-everywhere-opensource-src-5.5.1/qtbase/src/corelib/kernel/qcoreapplica
 ===================================================================
 --- qt-everywhere-opensource-src-5.5.1.orig/qtbase/src/corelib/kernel/qcoreapplication.cpp
 +++ qt-everywhere-opensource-src-5.5.1/qtbase/src/corelib/kernel/qcoreapplication.cpp
-@@ -2498,6 +2498,22 @@ QStringList QCoreApplication::libraryPat
+@@ -2498,6 +2498,16 @@ QStringList QCoreApplication::libraryPat
                  }
              }
          }
 +        qunsetenv("QT_PLUGIN_PATH"); // do not propagate to child processes
 +
 +        // Add library paths derived from NIX_PROFILES.
-+        const QByteArray nixProfilesEnv = qgetenv("NIX_PROFILES");
-+        if (!nixProfilesEnv.isEmpty()) {
-+            QLatin1Char pathSep(' ');
-+            QStringList paths = QFile::decodeName(nixProfilesEnv).split(pathSep, QString::SkipEmptyParts);
-+            for (QStringList::iterator it = paths.begin(); it != paths.end(); ++it) {
-+                it->append("/lib/qt5/plugins");
-+                QString canonicalPath = QDir(*it).canonicalPath();
-+                if (!canonicalPath.isEmpty()
-+                    && !app_libpaths->contains(canonicalPath)) {
-+                    app_libpaths->append(canonicalPath);
-+                }
++        const QByteArrayList profiles = qgetenv("NIX_PROFILES").split(' ');
++        const QString plugindir = QString::fromLatin1("/lib/qt5/plugins");
++        Q_FOREACH (const QByteArray &profile, profiles) {
++            if (!profile.isEmpty()) {
++                app_libpaths->append(QFile::decodeName(profile) + plugindir);
 +            }
 +        }
      }
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/setup-hook.sh b/pkgs/development/libraries/qt-5/5.5/qtbase/setup-hook.sh
index 9cf1ef9ccb61..a9c4fbc855f7 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtbase/setup-hook.sh
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/setup-hook.sh
@@ -1,41 +1,3 @@
-if [[ -z "$QMAKE" ]]; then
-
-_qtLinkDependencyDir() {
-    @lndir@/bin/lndir -silent "$1/$2" "$qtOut/$2"
-    if [[ -n "$NIX_QT_SUBMODULE" ]]; then
-        find "$1/$2" -printf "$2/%P\n" >> "$out/nix-support/qt-inputs"
-    fi
-}
-
-_qtLinkModule() {
-    if [ -d "$1/mkspecs" ]; then
-        # $1 is a Qt module
-        _qtLinkDependencyDir "$1" mkspecs
-
-        for dir in bin include lib share; do
-            if [ -d "$1/$dir" ]; then
-                _qtLinkDependencyDir "$1" "$dir"
-            fi
-        done
-    fi
-}
-
-_qtRmModules() {
-    cat "$out/nix-support/qt-inputs" | while read file; do
-      if [[ -h "$out/$file" ]]; then
-        rm "$out/$file"
-      fi
-    done
-
-    cat "$out/nix-support/qt-inputs" | while read file; do
-      if [[ -d "$out/$file" ]]; then
-        rmdir --ignore-fail-on-non-empty -p "$out/$file"
-      fi
-    done
-
-    rm "$out/nix-support/qt-inputs"
-}
-
 addToSearchPathOnceWithCustomDelimiter() {
     local delim="$1"
     local search="$2"
@@ -43,11 +5,14 @@ addToSearchPathOnceWithCustomDelimiter() {
     local dirs
     local exported
     IFS="$delim" read -a dirs <<< "${!search}"
-    for dir in ${dirs[@]}; do
-        if [ "z$dir" == "z$target" ]; then exported=1; fi
-    done
-    if [ -z $exported ]; then
-        eval "export ${search}=\"${!search}${!search:+$delim}$target\""
+    local canonical
+    if canonical=$(readlink -e "$target"); then
+        for dir in ${dirs[@]}; do
+            if [ "z$dir" == "z$canonical" ]; then exported=1; fi
+        done
+        if [ -z $exported ]; then
+            eval "export ${search}=\"${!search}${!search:+$delim}$canonical\""
+        fi
     fi
 }
 
@@ -72,63 +37,14 @@ _qtPropagateRuntimeDependencies() {
     addToSearchPathOnce QML2_IMPORT_PATH "$1/lib/qt5/qml"
 }
 
-_qtRmQmake() {
-    rm "$qtOut/bin/qmake" "$qtOut/bin/qt.conf"
-}
-
-_qtSetQmakePath() {
-    export PATH="$qtOut/bin${PATH:+:}$PATH"
-}
-
-_qtMultioutModuleDevs() {
-    # We cannot simply set these paths in configureFlags because libQtCore retains
-    # references to the paths it was built with.
-    moveToOutput "bin" "${!outputDev}"
-    moveToOutput "include" "${!outputDev}"
-
-    # The destination directory must exist or moveToOutput will do nothing
-    mkdir -p "${!outputDev}/share"
-    moveToOutput "share/doc" "${!outputDev}"
-}
+envHooks+=(_qtPropagateRuntimeDependencies)
 
 _qtMultioutDevs() {
     # This is necessary whether the package is a Qt module or not
     moveToOutput "mkspecs" "${!outputDev}"
 }
 
-qtOut=""
-if [[ -z "$NIX_QT_SUBMODULE" ]]; then
-    qtOut=`mktemp -d`
-else
-    qtOut=$out
-fi
-
-mkdir -p "$qtOut/bin" "$qtOut/mkspecs" "$qtOut/include" "$qtOut/nix-support" "$qtOut/lib" "$qtOut/share"
-
-cp "@dev@/bin/qmake" "$qtOut/bin"
-cat >"$qtOut/bin/qt.conf" <<EOF
-[Paths]
-Prefix = $qtOut
-Plugins = lib/qt5/plugins
-Imports = lib/qt5/imports
-Qml2Imports = lib/qt5/qml
-Documentation = share/doc/qt5
-EOF
-
-export QMAKE="$qtOut/bin/qmake"
-
-envHooks+=(_qtLinkModule _qtPropagateRuntimeDependencies)
-# Set PATH to find qmake first in a preConfigure hook
-# It must run after all the envHooks!
-preConfigureHooks+=(_qtSetQmakePath)
-
 preFixupHooks+=(_qtMultioutDevs)
-if [[ -n "$NIX_QT_SUBMODULE" ]]; then
-    postInstallHooks+=(_qtRmQmake _qtRmModules)
-    preFixupHooks+=(_qtMultioutModuleDevs)
-fi
-
-fi
 
 if [[ -z "$NIX_QT_PIC" ]]; then
     export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE${NIX_CFLAGS_COMPILE:+ }-fPIC"
diff --git a/pkgs/development/libraries/qt-5/5.5/qtdeclarative/nix-profiles-import-paths.patch b/pkgs/development/libraries/qt-5/5.5/qtdeclarative/nix-profiles-import-paths.patch
index e69de29bb2d1..06b244b974ff 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtdeclarative/nix-profiles-import-paths.patch
+++ b/pkgs/development/libraries/qt-5/5.5/qtdeclarative/nix-profiles-import-paths.patch
@@ -0,0 +1,20 @@
+Index: qtdeclarative-opensource-src-5.5.1/src/qml/qml/qqmlimport.cpp
+===================================================================
+--- qtdeclarative-opensource-src-5.5.1.orig/src/qml/qml/qqmlimport.cpp
++++ qtdeclarative-opensource-src-5.5.1/src/qml/qml/qqmlimport.cpp
+@@ -1549,6 +1549,15 @@ QQmlImportDatabase::QQmlImportDatabase(Q
+     QString installImportsPath =  QLibraryInfo::location(QLibraryInfo::Qml2ImportsPath);
+     addImportPath(installImportsPath);
+ 
++    // Add library paths derived from NIX_PROFILES.
++    const QByteArrayList profiles = qgetenv("NIX_PROFILES").split(' ');
++    const QString qmldir = QString::fromLatin1("/lib/qt5/qml");
++    Q_FOREACH (const QByteArray &profile, profiles) {
++        if (!profile.isEmpty()) {
++            addImportPath(QFile::decodeName(profile) + qmldir);
++        }
++    }
++
+     // env import paths
+     QByteArray envImportPath = qgetenv("QML2_IMPORT_PATH");
+     if (!envImportPath.isEmpty()) {
diff --git a/pkgs/development/libraries/qt-5/5.5/qtmultimedia.nix b/pkgs/development/libraries/qt-5/5.5/qtmultimedia.nix
index 8db8fa5f4b96..9eb68ba6b5ba 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtmultimedia.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtmultimedia.nix
@@ -8,7 +8,7 @@ qtSubmodule {
   buildInputs = [
     pkgconfig alsaLib gstreamer gst-plugins-base libpulseaudio
   ];
-  configureFlags = "GST_VERSION=1.0";
+  qmakeFlags = [ "GST_VERSION=1.0" ];
   postFixup = ''
     fixQtModuleCMakeConfig "Multimedia"
     fixQtModuleCMakeConfig "MultimediaWidgets"
diff --git a/pkgs/development/libraries/qt-5/5.5/qtquick1/nix-profiles-import-paths.patch b/pkgs/development/libraries/qt-5/5.5/qtquick1/nix-profiles-import-paths.patch
index e69de29bb2d1..c01061d3378b 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtquick1/nix-profiles-import-paths.patch
+++ b/pkgs/development/libraries/qt-5/5.5/qtquick1/nix-profiles-import-paths.patch
@@ -0,0 +1,20 @@
+Index: qtquick1-opensource-src-5.5.1/src/declarative/qml/qdeclarativeimport.cpp
+===================================================================
+--- qtquick1-opensource-src-5.5.1.orig/src/declarative/qml/qdeclarativeimport.cpp
++++ qtquick1-opensource-src-5.5.1/src/declarative/qml/qdeclarativeimport.cpp
+@@ -725,6 +725,15 @@ QDeclarativeImportDatabase::QDeclarative
+ 
+     addImportPath(installImportsPath);
+ 
++    // Add library paths derived from NIX_PROFILES.
++    const QByteArrayList profiles = qgetenv("NIX_PROFILES").split(' ');
++    const QString importdir = QString::fromLatin1("/lib/qt5/imports");
++    Q_FOREACH (const QByteArray &profile, profiles) {
++        if (!profile.isEmpty()) {
++            addImportPath(QFile::decodeName(profile) + importdir);
++        }
++    }
++
+     // env import paths
+     QByteArray envImportPath = qgetenv("QML_IMPORT_PATH");
+     if (!envImportPath.isEmpty()) {
diff --git a/pkgs/development/libraries/qtscriptgenerator/default.nix b/pkgs/development/libraries/qtscriptgenerator/default.nix
index b8ed81de487b..5b93fbfaade9 100644
--- a/pkgs/development/libraries/qtscriptgenerator/default.nix
+++ b/pkgs/development/libraries/qtscriptgenerator/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, qt4}:
+{ stdenv, fetchurl, qt4 }:
 
 stdenv.mkDerivation {
   name = "qtscriptgenerator-0.1.0";
diff --git a/pkgs/development/libraries/quazip/default.nix b/pkgs/development/libraries/quazip/default.nix
index 7ef1a9212a14..a1eb2ad7084c 100644
--- a/pkgs/development/libraries/quazip/default.nix
+++ b/pkgs/development/libraries/quazip/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, zip, zlib, qt }:
+{ fetchurl, stdenv, zip, zlib, qt, qmakeHook }:
 
 stdenv.mkDerivation rec {
   name = "quazip-0.7.1";
@@ -8,15 +8,10 @@ stdenv.mkDerivation rec {
     sha256 = "1pijy6zn8kdx9m6wrckid24vkgp250hklbpmgrpixiam6l889jbq";
   };
 
-  configurePhase = ''
-    runHook preConfigure
-    cd quazip && qmake quazip.pro
-    runHook postConfigure
-  '';
-
-  installFlags = "INSTALL_ROOT=$(out)";
+  preConfigure = "cd quazip";
 
   buildInputs = [ zlib qt ];
+  nativeBuildInputs = [ qmakeHook ];
 
   meta = {
     description = "Provides access to ZIP archives from Qt programs";
diff --git a/pkgs/development/libraries/qwt/6.nix b/pkgs/development/libraries/qwt/6.nix
index a99573ca5e43..cd940b818e92 100644
--- a/pkgs/development/libraries/qwt/6.nix
+++ b/pkgs/development/libraries/qwt/6.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qtbase, qtsvg, qttools }:
+{ stdenv, fetchurl, qtbase, qtsvg, qttools, qmakeHook }:
 
 stdenv.mkDerivation rec {
   name = "qwt-6.1.2";
@@ -9,16 +9,13 @@ stdenv.mkDerivation rec {
   };
 
   propagatedBuildInputs = [ qtbase qtsvg qttools ];
+  nativeBuildInputs = [ qmakeHook ];
 
   postPatch = ''
     sed -e "s|QWT_INSTALL_PREFIX.*=.*|QWT_INSTALL_PREFIX = $out|g" -i qwtconfig.pri
   '';
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake -after doc.path=$out/share/doc/${name} -r
-    runHook postConfigure
-  '';
+  qmakeFlags = [ "-after doc.path=$out/share/doc/${name}" ];
 
   meta = with stdenv.lib; {
     description = "Qt widgets for technical applications";
diff --git a/pkgs/development/libraries/qwt/default.nix b/pkgs/development/libraries/qwt/default.nix
index 451784261f82..da5769e92cd1 100644
--- a/pkgs/development/libraries/qwt/default.nix
+++ b/pkgs/development/libraries/qwt/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt4 }:
+{ stdenv, fetchurl, qt4, qmake4Hook }:
 
 stdenv.mkDerivation rec {
   name = "qwt-5.2.3";
@@ -9,16 +9,15 @@ stdenv.mkDerivation rec {
   };
 
   propagatedBuildInputs = [ qt4 ];
+  nativeBuildInputs = [ qmake4Hook ];
 
   postPatch = ''
     sed -e "s@\$\$\[QT_INSTALL_PLUGINS\]@$out/lib/qt4/plugins@" -i designer/designer.pro
     sed -e "s|INSTALLBASE.*=.*|INSTALLBASE = $out|g" -i qwtconfig.pri
   '';
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake INSTALLBASE=$out -after doc.path=$out/share/doc/${name} -r
-    runHook postConfigure
+  preConfigure = ''
+    qmakeFlags="$qmakeFlags INSTALLBASE=$out -after doc.path=$out/share/doc/${name}"
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/libraries/signon/default.nix b/pkgs/development/libraries/signon/default.nix
index 2da555635b29..f2f7de5b7125 100644
--- a/pkgs/development/libraries/signon/default.nix
+++ b/pkgs/development/libraries/signon/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, doxygen, qtbase }:
+{ stdenv, fetchurl, doxygen, qtbase, qmakeHook }:
 
 stdenv.mkDerivation rec {
   name = "signon-${version}";
@@ -9,12 +9,10 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ qtbase ];
-  nativeBuildInputs = [ doxygen ];
+  nativeBuildInputs = [ doxygen qmakeHook ];
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake PREFIX=$out LIBDIR=$out/lib CMAKE_CONFIG_PATH=$out/lib/cmake/SignOnQt5
-    runHook postConfigure
+  preConfigure = ''
+    qmakeFlags="$qmakeFlags LIBDIR=$out/lib CMAKE_CONFIG_PATH=$out/lib/cmake/SignOnQt5"
   '';
 
 }
diff --git a/pkgs/development/libraries/telepathy/glib/default.nix b/pkgs/development/libraries/telepathy/glib/default.nix
index 9167ecc76d4a..bb187ce1202b 100644
--- a/pkgs/development/libraries/telepathy/glib/default.nix
+++ b/pkgs/development/libraries/telepathy/glib/default.nix
@@ -2,11 +2,11 @@
 , gobjectIntrospection, valaSupport ? true, vala }:
 
 stdenv.mkDerivation rec {
-  name = "telepathy-glib-0.24.0";
+  name = "telepathy-glib-0.24.1";
 
   src = fetchurl {
     url = "${meta.homepage}/releases/telepathy-glib/${name}.tar.gz";
-    sha256 = "ae0002134991217f42e503c43dea7817853afc18863b913744d51ffa029818cf";
+    sha256 = "1symyzbjmxvksn2ifdkk50lafjm2llf2sbmky062gq2pz3cg23cy";
   };
 
   configureFlags = stdenv.lib.optional valaSupport "--enable-vala-bindings";
diff --git a/pkgs/development/python-modules/pygobject/3.nix b/pkgs/development/python-modules/pygobject/3.nix
index b8082890299b..6a58550e7c58 100644
--- a/pkgs/development/python-modules/pygobject/3.nix
+++ b/pkgs/development/python-modules/pygobject/3.nix
@@ -1,11 +1,13 @@
 { stdenv, fetchurl, python, pkgconfig, glib, gobjectIntrospection, pycairo, cairo }:
 
 stdenv.mkDerivation rec {
-  name = "pygobject-3.18.2";
+  major = "3.20";
+  minor = "0";
+  name = "pygobject-${major}.${minor}";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/pygobject/3.18/${name}.tar.xz";
-    sha256 = "0prc3ky7g50ixmfxbc7zf43fw6in4hw2q07667hp8swi2wassg1a";
+    url = "mirror://gnome/sources/pygobject/${major}/${name}.tar.xz";
+    sha256 = "0ikzh3l7g1gjh8jj8vg6mdvrb25svp63gxcam4m0i404yh0lgari";
   };
 
   buildInputs = [ python pkgconfig glib gobjectIntrospection ];
diff --git a/pkgs/development/python-modules/pyqt/5.x.nix b/pkgs/development/python-modules/pyqt/5.x.nix
index b11e87fe1d93..0e5f5604a988 100644
--- a/pkgs/development/python-modules/pyqt/5.x.nix
+++ b/pkgs/development/python-modules/pyqt/5.x.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchurl, python, pkgconfig, qtbase, qtsvg, qtwebkit, sip, pythonDBus
-, lndir, makeWrapper }:
+, lndir, makeWrapper, qmakeHook }:
 
 let
   version = "5.5.1";
@@ -21,13 +21,12 @@ in stdenv.mkDerivation {
 
   buildInputs = [
     python pkgconfig makeWrapper lndir
-    qtbase qtsvg qtwebkit
+    qtbase qtsvg qtwebkit qmakeHook
   ];
 
   propagatedBuildInputs = [ sip ];
 
   configurePhase = ''
-    runHook preConfigure
     mkdir -p $out
     lndir ${pythonDBus} $out
 
@@ -45,7 +44,6 @@ in stdenv.mkDerivation {
       --destdir=$out/lib/${python.libPrefix}/site-packages \
       --sipdir=$out/share/sip \
       --designer-plugindir=$out/plugins/designer
-    runHook postConfigure
   '';
 
   postInstall = ''
diff --git a/pkgs/development/qtcreator/default.nix b/pkgs/development/qtcreator/default.nix
index a5005932103e..18e06cb81263 100644
--- a/pkgs/development/qtcreator/default.nix
+++ b/pkgs/development/qtcreator/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchurl, makeWrapper
-, qtbase, qtquickcontrols, qtscript, qtdeclarative
+, qtbase, makeQtWrapper, qtquickcontrols, qtscript, qtdeclarative, qmakeHook
 , withDocumentation ? false
 }:
 
@@ -21,20 +21,15 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ makeWrapper qtbase qtscript qtquickcontrols qtdeclarative ];
 
+  nativeBuildInputs = [ qmakeHook makeQtWrapper ];
+
   doCheck = false;
 
   enableParallelBuilding = true;
 
-  configurePhase = ''
-    runHook preConfigure
-    qmake -spec linux-g++ qtcreator.pro
-    runHook postConfigure
-  '';
-
-  buildFlags = optionalString withDocumentation " docs";
+  buildFlags = optional withDocumentation "docs";
 
-  installFlags = "INSTALL_ROOT=$(out)"
-    + optionalString withDocumentation " install_docs";
+  installFlags = [ "INSTALL_ROOT=$(out)" ] ++ optional withDocumentation "install_docs";
 
   postInstall = ''
     # Install desktop file
@@ -49,13 +44,7 @@ stdenv.mkDerivation rec {
     Type=Application
     Categories=Qt;Development;IDE;
     __EOF__
-    # Wrap the qtcreator binary
-    addToSearchPath QML2_IMPORT_PATH "${qtquickcontrols}/lib/qt5/qml"
-    addToSearchPath QML2_IMPORT_PATH "${qtdeclarative}/lib/qt5/qml"
-    wrapProgram $out/bin/qtcreator \
-      --prefix QT_PLUGIN_PATH : "$QT_PLUGIN_PATH" \
-      --prefix QML_IMPORT_PATH : "$QML_IMPORT_PATH" \
-      --prefix QML2_IMPORT_PATH : "$QML2_IMPORT_PATH"
+    wrapQtProgram $out/bin/qtcreator
   '';
 
   meta = {
diff --git a/pkgs/development/tools/analysis/valkyrie/default.nix b/pkgs/development/tools/analysis/valkyrie/default.nix
index 76becca74cff..1da6c6a1e864 100644
--- a/pkgs/development/tools/analysis/valkyrie/default.nix
+++ b/pkgs/development/tools/analysis/valkyrie/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt4 }:
+{ stdenv, fetchurl, qt4, qmake4Hook }:
 
 stdenv.mkDerivation rec {
   name = "valkyrie-2.0.0";
@@ -9,8 +9,7 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ qt4 ];
-
-  configurePhase = "qmake PREFIX=$out";
+  nativeBuildInputs = [ qmake4Hook ];
 
   meta = {
     homepage = http://www.valgrind.org/;
diff --git a/pkgs/development/tools/build-managers/cmake/setup-hook.sh b/pkgs/development/tools/build-managers/cmake/setup-hook.sh
index b14e9984bc3c..eaabb37f4987 100755
--- a/pkgs/development/tools/build-managers/cmake/setup-hook.sh
+++ b/pkgs/development/tools/build-managers/cmake/setup-hook.sh
@@ -44,6 +44,8 @@ cmakeConfigurePhase() {
     # executable. This flag makes the shared library accessible from its
     # nix/store directory.
     cmakeFlags="-DCMAKE_INSTALL_NAME_DIR=$prefix/lib $cmakeFlags"
+    cmakeFlags="-DCMAKE_INSTALL_LIBDIR=${!outputLib}/lib $cmakeFlags"
+    cmakeFlags="-DCMAKE_INSTALL_INCLUDEDIR=${!outputDev}/include $cmakeFlags"
 
     # Avoid cmake resetting the rpath of binaries, on make install
     # And build always Release, to ensure optimisation flags
diff --git a/pkgs/games/chessx/default.nix b/pkgs/games/chessx/default.nix
index 39ec3670e54e..63a1adb7155a 100644
--- a/pkgs/games/chessx/default.nix
+++ b/pkgs/games/chessx/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, pkgconfig, zlib, qtbase, qtsvg, qttools, qtmultimedia, fetchurl }:
+{ stdenv, pkgconfig, zlib, qtbase, qtsvg, qttools, qtmultimedia, qmakeHook, fetchurl }:
 stdenv.mkDerivation rec {
   name = "chessx-${version}";
   version = "1.3.2";
@@ -6,9 +6,6 @@ stdenv.mkDerivation rec {
     url = "mirror://sourceforge/chessx/chessx-${version}.tgz";
     sha256 = "b136cf56d37d34867cdb9538176e1703b14f61b3384885b6f100580d0af0a3ff";
   };
-  preConfigure = ''
-    qmake -spec linux-g++ chessx.pro
-  '';
   buildInputs = [
    stdenv
    pkgconfig
@@ -17,6 +14,7 @@ stdenv.mkDerivation rec {
    qttools
    qtmultimedia
    zlib
+   qmakeHook
   ];
 
   enableParallelBuilding = true;
diff --git a/pkgs/games/mudlet/default.nix b/pkgs/games/mudlet/default.nix
index 8b51d6174039..d684cc22c38f 100644
--- a/pkgs/games/mudlet/default.nix
+++ b/pkgs/games/mudlet/default.nix
@@ -1,5 +1,5 @@
-{ fetchurl, pkgs, stdenv, makeWrapper, qtbase, yajl, libzip, hunspell
-, boost, lua5_1, luafilesystem, luazip, lrexlib, luasqlite3 }:
+{ fetchurl, unzip, stdenv, makeWrapper, qtbase, yajl, libzip, hunspell
+, boost, lua5_1, luafilesystem, luazip, lrexlib, luasqlite3, qmakeHook }:
 
 stdenv.mkDerivation rec {
   name = "mudlet-${version}";
@@ -11,11 +11,11 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [
-    pkgs.unzip qtbase lua5_1 hunspell libzip yajl boost makeWrapper
-    luafilesystem luazip lrexlib luasqlite3
+    unzip qtbase lua5_1 hunspell libzip yajl boost makeWrapper
+    luafilesystem luazip lrexlib luasqlite3 qmakeHook
   ];
 
-  configurePhase = "cd src && qmake";
+  preConfigure = "cd src";
 
   installPhase = let
     luaZipPath = "${luazip}/lib/lua/5.1/?.so";
diff --git a/pkgs/misc/emulators/ppsspp/default.nix b/pkgs/misc/emulators/ppsspp/default.nix
index 439566de0cad..87ae977c7cc7 100644
--- a/pkgs/misc/emulators/ppsspp/default.nix
+++ b/pkgs/misc/emulators/ppsspp/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, zlib, libpng, qt4, pkgconfig
+{ stdenv, fetchgit, zlib, libpng, qt4, qmake4Hook, pkgconfig
 , withGamepads ? true, SDL # SDL is used for gamepad functionality
 }:
 
@@ -19,10 +19,10 @@ stdenv.mkDerivation rec{
     sha256 = "71dfa0be045f31969b1d6ab4f1adf6a208f9ef4834d708bc7bf6d9195efb5f80";
   };
 
-  buildInputs = [ zlib libpng pkgconfig qt4 ]
+  buildInputs = [ zlib libpng pkgconfig qt4 qmake4Hook ]
                 ++ (if withGamepads then [ SDL ] else [ ]);
 
-  configurePhase = "cd Qt && qmake PPSSPPQt.pro";
+  preConfigure = "cd Qt";
   installPhase = "mkdir -p $out/bin && cp ppsspp $out/bin";
 
   meta = {
diff --git a/pkgs/os-specific/linux/i7z/default.nix b/pkgs/os-specific/linux/i7z/default.nix
index 1fe1f48f4ef3..1ca200a11210 100644
--- a/pkgs/os-specific/linux/i7z/default.nix
+++ b/pkgs/os-specific/linux/i7z/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt4, ncurses}:
+{ stdenv, fetchurl, qt4, ncurses }:
 
 stdenv.mkDerivation rec {
   name = "i7z-0.27.2";
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "1wa7ix6m75wl3k2n88sz0x8cckvlzqklja2gvzqfw5rcfdjjvxx7";
   };
 
-  buildInputs = [qt4 ncurses];
+  buildInputs = [ qt4 ncurses ];
 
   buildPhase = ''
     make
diff --git a/pkgs/os-specific/linux/wpa_supplicant/gui.nix b/pkgs/os-specific/linux/wpa_supplicant/gui.nix
index 59a3c51c4d6e..a75367f0bb0c 100644
--- a/pkgs/os-specific/linux/wpa_supplicant/gui.nix
+++ b/pkgs/os-specific/linux/wpa_supplicant/gui.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt4, inkscape, wpa_supplicant }:
+{ stdenv, fetchurl, qt4, qmake4Hook, inkscape, wpa_supplicant }:
 
 stdenv.mkDerivation {
   name = "wpa_gui-${wpa_supplicant.version}";
@@ -7,14 +7,13 @@ stdenv.mkDerivation {
 
   buildInputs = [ qt4 ];
 
-  nativeBuildInputs = [ inkscape ];
+  nativeBuildInputs = [ inkscape qmake4Hook ];
 
   prePatch = "cd wpa_supplicant/wpa_gui-qt4";
 
-  configurePhase =
+  preConfigure =
     ''
       lrelease wpa_gui.pro
-      qmake
     '';
 
   # We do not install .xpm icons. First of all, I don't know where they should
diff --git a/pkgs/os-specific/windows/jom/default.nix b/pkgs/os-specific/windows/jom/default.nix
index 4b118a5a7cdc..6537503add8f 100644
--- a/pkgs/os-specific/windows/jom/default.nix
+++ b/pkgs/os-specific/windows/jom/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, qt48, flex, cmake }:
+{ stdenv, fetchgit, qt48, qmake4Hook, flex }:
 
 # At the time of committing this, the expression fails for me to cross-build in
 # both mingw32 and mingw64.
@@ -13,12 +13,9 @@ stdenv.mkDerivation {
   };
 
   buildInputs = [ qt48 ];
-  nativeBuildInputs = [ flex /*cmake*/ ];
+  nativeBuildInputs = [ flex qmake4Hook ];
 
   QTDIR = qt48;
-  configurePhase = ''
-    qmake PREFIX=$out
-  '';
   
   crossAttrs = {
     # cmakeFlags = "-DWIN32=1 -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_RC_COMPILER=${stdenv.cross.config}-windres";
diff --git a/pkgs/tools/audio/qastools/default.nix b/pkgs/tools/audio/qastools/default.nix
index 3743b38a2103..3fe5b4b8d1a6 100644
--- a/pkgs/tools/audio/qastools/default.nix
+++ b/pkgs/tools/audio/qastools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, alsaLib, udev, qt }:
+{ stdenv, fetchurl, cmake, alsaLib, udev, qt4 }:
 
 let
   version = "0.18.1";
@@ -13,7 +13,7 @@ stdenv.mkDerivation {
   };
 
   buildInputs = [
-    cmake alsaLib udev qt
+    cmake alsaLib udev qt4
   ];
 
   cmakeFlags = [
diff --git a/pkgs/tools/cd-dvd/unetbootin/default.nix b/pkgs/tools/cd-dvd/unetbootin/default.nix
index 1234ecd770bb..bf8cefd057ef 100644
--- a/pkgs/tools/cd-dvd/unetbootin/default.nix
+++ b/pkgs/tools/cd-dvd/unetbootin/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, makeWrapper, qt4, utillinux, coreutils, which
+{ stdenv, fetchurl, makeWrapper, qt4, utillinux, coreutils, which, qmake4Hook
 , p7zip, mtools, syslinux }:
 
 stdenv.mkDerivation rec {
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
 
   sourceRoot = ".";
 
-  buildInputs = [ makeWrapper qt4 ];
+  buildInputs = [ makeWrapper qt4 qmake4Hook ];
 
   # Lots of nice hard-coded paths...
   postUnpack = ''
@@ -30,11 +30,9 @@ stdenv.mkDerivation rec {
       --replace /usr/bin $out/bin
   '';
 
-  buildPhase = ''
+  preConfigure = ''
     lupdate unetbootin.pro
     lrelease unetbootin.pro
-    qmake
-    make
   '';
 
   installPhase = ''
diff --git a/pkgs/tools/compression/gzip/default.nix b/pkgs/tools/compression/gzip/default.nix
index 009246b69a08..cf09ec8bf739 100644
--- a/pkgs/tools/compression/gzip/default.nix
+++ b/pkgs/tools/compression/gzip/default.nix
@@ -1,11 +1,12 @@
 { stdenv, fetchurl, xz }:
 
 stdenv.mkDerivation rec {
-  name = "gzip-1.6";
+  name = "gzip-${version}";
+  version = "1.7";
 
   src = fetchurl {
     url = "mirror://gnu/gzip/${name}.tar.xz";
-    sha256 = "0ivqnbhiwd12q8hp3qw6rpsrpw2jg5y2mymk8cn22lsx90dfvprp";
+    sha256 = "1as1ddq58spflzz5kxm0ni0xfpswrkkrncjpxyb3aw77gizcacgv";
   };
 
   outputs = [ "out" "man" "info" ];
@@ -22,7 +23,7 @@ stdenv.mkDerivation rec {
   makeFlags = "SHELL=/bin/sh GREP=grep";
 
   meta = {
-    homepage = http://www.gnu.org/software/gzip/;
+    homepage = https://www.gnu.org/software/gzip/;
     description = "GNU zip compression program";
 
     longDescription =
diff --git a/pkgs/tools/graphics/nifskope/default.nix b/pkgs/tools/graphics/nifskope/default.nix
index 13dc27921a43..decd6fb56fd3 100644
--- a/pkgs/tools/graphics/nifskope/default.nix
+++ b/pkgs/tools/graphics/nifskope/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt4 }:
+{ stdenv, fetchurl, qt4, qmake4Hook }:
 
 stdenv.mkDerivation rec {
   name = "nifskope-1.1.3";
@@ -10,14 +10,16 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ qt4 ];
 
-  configurePhase =
+  nativeBuildInputs = [ qmake4Hook ];
+
+  preConfigure =
     ''
       for i in *.cpp gl/*.cpp widgets/*.cpp; do
         substituteInPlace $i --replace /usr/share/nifskope $out/share/nifskope
       done
+    '';
 
-      qmake -after TARGET=nifskope
-    ''; # */
+  qmakeFlags = [ "-after TARGET=nifskope" ];
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/tools/inputmethods/touchegg/default.nix b/pkgs/tools/inputmethods/touchegg/default.nix
index 4ac3c02d4103..6ab53f9d7633 100644
--- a/pkgs/tools/inputmethods/touchegg/default.nix
+++ b/pkgs/tools/inputmethods/touchegg/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, xorg, xorgserver, qt4, mesa, geis  }:
+{ stdenv, fetchurl, xorg, xorgserver, qt4, mesa, geis, qmake4Hook }:
 
 stdenv.mkDerivation rec {
   name = "touchegg-${version}";
@@ -10,10 +10,11 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ xorgserver mesa xorg.libX11 xorg.libXtst xorg.libXext qt4 geis ];
 
-  configurePhase = ''
+  nativeBuildInputs = [ qmake4Hook ];
+
+  preConfigure = ''
     sed -e "s@/usr/@$out/@g" -i $(find . -name touchegg.pro)
     sed -e "s@/usr/@$out/@g" -i $(find ./src/touchegg/config/ -name Config.cpp)
-    qmake touchegg.pro
   '';
 
   meta = {
@@ -22,4 +23,4 @@ stdenv.mkDerivation rec {
     license = stdenv.lib.licenses.gpl2;
     platforms = stdenv.lib.platforms.linux;
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/misc/rockbox-utility/default.nix b/pkgs/tools/misc/rockbox-utility/default.nix
index c9c0cf6949f8..54a6b0309b00 100644
--- a/pkgs/tools/misc/rockbox-utility/default.nix
+++ b/pkgs/tools/misc/rockbox-utility/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libusb1, qt4 }:
+{ stdenv, fetchurl, libusb1, qt4, qmake4Hook }:
 
 stdenv.mkDerivation  rec {
   name = "rockbox-utility-${version}";
@@ -10,10 +10,10 @@ stdenv.mkDerivation  rec {
   };
 
   buildInputs = [ libusb1 qt4 ];
+  nativeBuildInputs = [ qmake4Hook ];
 
-  preBuild = ''
+  preConfigure = ''
     cd rbutil/rbutilqt
-    qmake
   '';
 
   installPhase = ''
diff --git a/pkgs/tools/misc/yubikey-personalization-gui/default.nix b/pkgs/tools/misc/yubikey-personalization-gui/default.nix
index 57952b80daf5..4bc68aba29df 100644
--- a/pkgs/tools/misc/yubikey-personalization-gui/default.nix
+++ b/pkgs/tools/misc/yubikey-personalization-gui/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, yubikey-personalization, qt, libyubikey }:
+{ stdenv, fetchurl, pkgconfig, yubikey-personalization, qt4, qmake4Hook, libyubikey }:
 
 stdenv.mkDerivation rec {
   name = "yubikey-personalization-gui-3.1.24";
@@ -8,13 +8,9 @@ stdenv.mkDerivation rec {
     sha256 = "0aj8cvajswkwzig0py0mjnfw0m8xsilisdcnixpjx9xxsxz5yacq";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ yubikey-personalization qt libyubikey ];
+  nativeBuildInputs = [ pkgconfig qmake4Hook ];
+  buildInputs = [ yubikey-personalization qt4 libyubikey ];
   
-  configurePhase = ''
-    qmake
-  '';
-
   installPhase = ''
     mkdir -p $out/bin
     cp build/release/yubikey-personalization-gui $out/bin
diff --git a/pkgs/tools/networking/cmst/default.nix b/pkgs/tools/networking/cmst/default.nix
index 5c8b801dbbe3..d9c6c2630fa6 100644
--- a/pkgs/tools/networking/cmst/default.nix
+++ b/pkgs/tools/networking/cmst/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, qtbase, makeWrapper, libX11 }:
+{ stdenv, fetchFromGitHub, qtbase, qmakeHook, makeWrapper, libX11 }:
 
 stdenv.mkDerivation rec {
   name = "cmst-2016.01.28";
@@ -10,10 +10,9 @@ stdenv.mkDerivation rec {
     owner  = "andrew-bibb";
   };
 
-  buildInputs = [ qtbase makeWrapper ];
+  buildInputs = [ qtbase makeWrapper qmakeHook ];
 
-  configurePhase = ''
-    runHook preConfigure
+  preConfigure = ''
     substituteInPlace ./cmst.pro \
       --replace "/usr/bin" "$out/bin" \
       --replace "/usr/share" "$out/usr/share"
@@ -29,14 +28,6 @@ stdenv.mkDerivation rec {
     substituteInPlace ./apps/rootapp/rootapp.pro \
       --replace "/etc" "$out/etc" \
       --replace "/usr/share" "$out/share"
-    runHook postConfigure
-  '';
-
-  buildPhase = ''
-    runHook preBuild
-    qmake PREFIX=$out
-    make
-    runHook postBuild
   '';
 
   postInstall = ''
diff --git a/pkgs/tools/text/groff/default.nix b/pkgs/tools/text/groff/default.nix
index e08c10fd9ed2..728e9de8b488 100644
--- a/pkgs/tools/text/groff/default.nix
+++ b/pkgs/tools/text/groff/default.nix
@@ -32,13 +32,12 @@ stdenv.mkDerivation rec {
     '';
   };
 
+  # Remove example output with (random?) colors and creation date
+  # to avoid non-determinism in the output.
   postInstall = ''
-      # Remove example output with (random?) colors to 
-      # avoid non-determinism in the output
-      rm $doc/share/doc/examples/hdtbl/*color*ps
-      # Remove creation date
-      find $doc/share/doc/ -type f -print0 | xargs -0 sed -i -e 's/%%CreationDate: .*//'
-    '';
+    rm $doc/share/doc/groff/examples/hdtbl/*color*ps
+    find $doc/share/doc/groff/ -type f -print0 | xargs -0 sed -i -e 's/%%CreationDate: .*//'
+  '';
 
   meta = with stdenv.lib; {
     homepage = http://www.gnu.org/software/groff/;
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index bba0883c923b..23973250a4eb 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -1939,7 +1939,7 @@ in
 
   iasl = callPackage ../development/compilers/iasl { };
 
-  iannix = callPackage ../applications/audio/iannix { };
+  iannix = qt5.callPackage ../applications/audio/iannix { };
 
   icecast = callPackage ../servers/icecast { };
 
@@ -2976,13 +2976,10 @@ in
 
   qalculate-gtk = callPackage ../applications/science/math/qalculate-gtk { };
 
-  qastools = callPackage ../tools/audio/qastools {
-    qt = qt4;
-  };
+  qastools = callPackage ../tools/audio/qastools { };
 
   qgifer = callPackage ../applications/video/qgifer {
     giflib = giflib_4_1;
-    qt = qt4;
   };
 
   qhull = callPackage ../development/libraries/qhull { };
@@ -2993,9 +2990,7 @@ in
 
   qprint = callPackage ../tools/text/qprint { };
 
-  qscintilla = callPackage ../development/libraries/qscintilla {
-    qt = qt4;
-  };
+  qscintilla = callPackage ../development/libraries/qscintilla { };
 
   qshowdiff = callPackage ../tools/text/qshowdiff { };
 
@@ -3152,7 +3147,7 @@ in
   screen-message = callPackage ../tools/X11/screen-message { };
 
   screencloud = callPackage ../applications/graphics/screencloud {
-    quazip = qt5.quazip.override { qt = qt4; };
+    quazip = qt5.quazip.override { qt = qt4; qmakeHook = qmake4Hook; };
   };
 
   scrot = callPackage ../tools/graphics/scrot { };
@@ -7389,7 +7384,7 @@ in
 
   libcm = callPackage ../development/libraries/libcm { };
 
-  libcommuni = callPackage ../development/libraries/libcommuni { };
+  libcommuni = qt5.callPackage ../development/libraries/libcommuni { };
 
   libconfuse = callPackage ../development/libraries/libconfuse { };
 
@@ -8443,7 +8438,7 @@ in
 
   pdf2xml = callPackage ../development/libraries/pdf2xml {} ;
 
-  phonon = callPackage ../development/libraries/phonon/qt4 {};
+  phonon = callPackage ../development/libraries/phonon {};
 
   phonon_backend_gstreamer = callPackage ../development/libraries/phonon-backend-gstreamer/qt4 {};
 
@@ -8472,7 +8467,7 @@ in
     spidermonkey = spidermonkey_17;
   };
 
-  polkit_qt4 = callPackage ../development/libraries/polkit-qt-1 { };
+  polkit_qt4 = callPackage ../development/libraries/polkit-qt-1/qt-4.nix { };
 
   poppler = callPackage ../development/libraries/poppler { lcms = lcms2; };
 
@@ -8547,6 +8542,12 @@ in
     inherit (pkgs.darwin.apple_sdk.frameworks) ApplicationServices OpenGL Cocoa AGL;
   };
 
+  qmake48Hook = makeSetupHook
+    { substitutions = { qt4 = qt48; }; }
+    ../development/libraries/qt-4.x/4.8/qmake-hook.sh;
+
+  qmake4Hook = qmake48Hook;
+
   qt48Full = appendToName "full" (qt48.override {
     docs = true;
     demos = true;
@@ -8578,15 +8579,13 @@ in
 
     openbr = callPackage ../development/libraries/openbr { };
 
-    phonon = callPackage ../development/libraries/phonon/qt5 { };
+    phonon = callPackage ../development/libraries/phonon { };
 
     phonon-backend-gstreamer = callPackage ../development/libraries/phonon-backend-gstreamer/qt5 { };
 
     phonon-backend-vlc = callPackage ../development/libraries/phonon-backend-vlc/qt5 { };
 
-    polkit-qt = callPackage ../development/libraries/polkit-qt-1 {
-      withQt5 = true;
-    };
+    polkit-qt = callPackage ../development/libraries/polkit-qt-1/qt-5.nix { };
 
     poppler = callPackage ../development/libraries/poppler {
       lcms = lcms2;
@@ -9170,9 +9169,7 @@ in
     libusb = libusb1;
   };
 
-  yubikey-personalization-gui = callPackage ../tools/misc/yubikey-personalization-gui {
-    qt = qt4;
-  };
+  yubikey-personalization-gui = callPackage ../tools/misc/yubikey-personalization-gui { };
 
   zeitgeist = callPackage ../development/libraries/zeitgeist { };
 
@@ -13663,13 +13660,9 @@ in
 
   remotebox = callPackage ../applications/virtualization/remotebox { };
 
-  retroshare = callPackage ../applications/networking/p2p/retroshare {
-    qt = qt4;
-  };
+  retroshare = callPackage ../applications/networking/p2p/retroshare { };
 
-  retroshare06 = lowPrio (callPackage ../applications/networking/p2p/retroshare/0.6.nix {
-    qt = qt4;
-  });
+  retroshare06 = lowPrio (callPackage ../applications/networking/p2p/retroshare/0.6.nix { });
 
   RhythmDelay = callPackage ../applications/audio/RhythmDelay { };
 
@@ -14589,9 +14582,7 @@ in
 
   qgroundcontrol = qt55.callPackage ../applications/science/robotics/qgroundcontrol { };
 
-  qtbitcointrader = callPackage ../applications/misc/qtbitcointrader {
-    qt = qt4;
-  };
+  qtbitcointrader = callPackage ../applications/misc/qtbitcointrader { };
 
   pahole = callPackage ../development/tools/misc/pahole {};
 
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 77974dff752f..c59bec38d3b8 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -166,10 +166,9 @@ in modules // {
     pythonPackages = self;
   };
 
-  pyqt5 = callPackage ../development/python-modules/pyqt/5.x.nix {
+  pyqt5 = pkgs.qt55.callPackage ../development/python-modules/pyqt/5.x.nix {
     sip = self.sip_4_16;
     pythonDBus = self.dbus;
-    inherit (pkgs.qt55) qtbase qtsvg qtwebkit;
   };
 
   pyside = callPackage ../development/python-modules/pyside { };