summary refs log tree commit diff
path: root/pkgs/development/libraries
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/libraries')
-rw-r--r--pkgs/development/libraries/SDL/default.nix7
-rw-r--r--pkgs/development/libraries/SDL2/default.nix2
-rw-r--r--pkgs/development/libraries/aalib/default.nix16
-rw-r--r--pkgs/development/libraries/acl/default.nix2
-rw-r--r--pkgs/development/libraries/apr-util/default.nix8
-rw-r--r--pkgs/development/libraries/apr/default.nix14
-rw-r--r--pkgs/development/libraries/at-spi2-core/default.nix2
-rw-r--r--pkgs/development/libraries/atk/default.nix6
-rw-r--r--pkgs/development/libraries/attr/default.nix2
-rw-r--r--pkgs/development/libraries/boehm-gc/default.nix9
-rw-r--r--pkgs/development/libraries/boost/generic.nix7
-rw-r--r--pkgs/development/libraries/cairo/default.nix24
-rw-r--r--pkgs/development/libraries/cogl/1.20.nix2
-rw-r--r--pkgs/development/libraries/cogl/1.22.nix2
-rw-r--r--pkgs/development/libraries/cogl/default.nix2
-rw-r--r--pkgs/development/libraries/cyrus-sasl/default.nix8
-rw-r--r--pkgs/development/libraries/dbus-glib/default.nix5
-rw-r--r--pkgs/development/libraries/dbus/default.nix128
-rw-r--r--pkgs/development/libraries/dbus/no-create-dirs.patch26
-rw-r--r--pkgs/development/libraries/dbus/ucred-dirty-hack.patch18
-rw-r--r--pkgs/development/libraries/epoxy/default.nix2
-rw-r--r--pkgs/development/libraries/expat/default.nix5
-rw-r--r--pkgs/development/libraries/ffmpeg/generic.nix9
-rw-r--r--pkgs/development/libraries/fftw/default.nix3
-rw-r--r--pkgs/development/libraries/fontconfig/2.10.nix2
-rw-r--r--pkgs/development/libraries/fontconfig/default.nix4
-rw-r--r--pkgs/development/libraries/fontconfig/make-fonts-cache.nix2
-rw-r--r--pkgs/development/libraries/fontconfig/make-fonts-conf.nix6
-rw-r--r--pkgs/development/libraries/freetype/default.nix4
-rw-r--r--pkgs/development/libraries/gdk-pixbuf/default.nix18
-rw-r--r--pkgs/development/libraries/geoclue/2.0.nix4
-rw-r--r--pkgs/development/libraries/gettext/default.nix2
-rw-r--r--pkgs/development/libraries/git2/default.nix2
-rw-r--r--pkgs/development/libraries/glfw/3.x.nix1
-rw-r--r--pkgs/development/libraries/glib-networking/default.nix4
-rw-r--r--pkgs/development/libraries/glib/default.nix34
-rw-r--r--pkgs/development/libraries/glib/setup-hook.sh19
-rw-r--r--pkgs/development/libraries/glibc/builder.sh16
-rw-r--r--pkgs/development/libraries/glibc/common.nix2
-rw-r--r--pkgs/development/libraries/glibc/default.nix2
-rw-r--r--pkgs/development/libraries/glibc/info.nix2
-rw-r--r--pkgs/development/libraries/glibc/locales.nix4
-rw-r--r--pkgs/development/libraries/glibc/multi.nix36
-rw-r--r--pkgs/development/libraries/gmime/default.nix4
-rw-r--r--pkgs/development/libraries/gmp/5.1.x.nix2
-rw-r--r--pkgs/development/libraries/gmp/6.x.nix13
-rw-r--r--pkgs/development/libraries/gnutls/generic.nix12
-rw-r--r--pkgs/development/libraries/gobject-introspection/default.nix13
-rw-r--r--pkgs/development/libraries/gobject-introspection/setup-hook.sh7
-rw-r--r--pkgs/development/libraries/gpgme/default.nix11
-rw-r--r--pkgs/development/libraries/gstreamer/default.nix7
-rw-r--r--pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/default.nix7
-rw-r--r--pkgs/development/libraries/gstreamer/vaapi/default.nix8
-rw-r--r--pkgs/development/libraries/gtk+/2.x.nix11
-rw-r--r--pkgs/development/libraries/gtk+/3.x.nix29
-rw-r--r--pkgs/development/libraries/gtk+/setup-hook.sh10
-rw-r--r--pkgs/development/libraries/gupnp/default.nix2
-rw-r--r--pkgs/development/libraries/gvfs/default.nix2
-rw-r--r--pkgs/development/libraries/harfbuzz/default.nix37
-rw-r--r--pkgs/development/libraries/hunspell/default.nix6
-rw-r--r--pkgs/development/libraries/icu/default.nix5
-rw-r--r--pkgs/development/libraries/jasper/default.nix9
-rw-r--r--pkgs/development/libraries/json-c/default.nix6
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/attica.nix11
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/baloo.nix25
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/bluez-qt.nix17
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/breeze-icons.nix10
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/default.nix114
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/extra-cmake-modules/default.nix20
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/extra-cmake-modules/nix-lib-path.patch37
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/extra-cmake-modules/series1
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/extra-cmake-modules/setup-hook.sh81
-rwxr-xr-xpkgs/development/libraries/kde-frameworks-5.19/fetchsrcs.sh57
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/frameworkintegration.nix17
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kactivities.nix22
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kapidox.nix12
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/karchive.nix11
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kauth/cmake-install-paths.patch17
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kauth/default.nix16
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kauth/series1
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kbookmarks.nix25
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kcmutils/0001-qdiriterator-follow-symlinks.patch25
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kcmutils/default.nix17
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kcodecs.nix11
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kcompletion.nix14
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kconfig.nix16
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kconfigwidgets/0001-qdiriterator-follow-symlinks.patch25
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kconfigwidgets/default.nix17
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kcoreaddons.nix16
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kcrash.nix16
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kdbusaddons.nix17
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kdeclarative.nix22
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kded.nix19
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kdelibs4support/default.nix36
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kdelibs4support/nix-kde-include-dir.patch13
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kdelibs4support/series1
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kdelibs4support/setup-hook.sh1
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kdesignerplugin.nix34
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kdesu.nix13
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kdewebkit.nix13
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kdnssd.nix13
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kdoctools/default.nix19
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kdoctools/kdoctools-no-find-docbook-xml.patch12
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kemoticons.nix17
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kfilemetadata/cmake-install-paths.patch13
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kfilemetadata/default.nix14
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kfilemetadata/series1
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kglobalaccel.nix23
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kguiaddons.nix13
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/khtml.nix21
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/ki18n.nix17
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kiconthemes/default-theme-breeze.patch13
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kiconthemes/default.nix18
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kiconthemes/series1
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kidletime.nix15
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kimageformats.nix13
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kinit/0001-kinit-libpath.patch42
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kinit/default.nix17
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kio/default.nix33
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kio/samba-search-path.patch28
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kio/series1
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kitemmodels.nix11
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kitemviews.nix11
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kjobwidgets.nix16
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kjs.nix16
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kjsembed.nix17
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kmediaplayer.nix15
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/knewstuff.nix17
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/knotifications.nix21
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/knotifyconfig.nix13
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kpackage/allow-external-paths.patch13
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kpackage/default.nix23
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kpackage/qdiriterator-follow-symlinks.patch26
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kpackage/series2
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kparts.nix17
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kpeople.nix15
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kplotting.nix11
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kpty.nix10
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kross.nix14
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/krunner.nix16
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kservice/0001-qdiriterator-follow-symlinks.patch25
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kservice/0002-no-canonicalize-path.patch25
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kservice/default.nix18
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/ktexteditor/default.nix22
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/ktexteditor/no-qcoreapplication.patch36
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/ktexteditor/series1
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/ktextwidgets.nix16
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kunitconversion.nix10
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kwallet.nix21
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kwidgetsaddons.nix11
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kwindowsystem.nix13
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kxmlgui.nix18
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/kxmlrpcclient.nix10
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/modemmanager-qt.nix13
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/networkmanager-qt.nix13
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/oxygen-icons5.nix13
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/plasma-framework/default.nix25
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/solid.nix17
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/sonnet.nix13
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/srcs.nix565
-rw-r--r--pkgs/development/libraries/kde-frameworks-5.19/threadweaver.nix11
-rw-r--r--pkgs/development/libraries/lame/default.nix3
-rw-r--r--pkgs/development/libraries/lcms/default.nix2
-rw-r--r--pkgs/development/libraries/lcms2/default.nix11
-rw-r--r--pkgs/development/libraries/libao/default.nix2
-rw-r--r--pkgs/development/libraries/libarchive/default.nix2
-rw-r--r--pkgs/development/libraries/libassuan/default.nix5
-rw-r--r--pkgs/development/libraries/libav/default.nix14
-rw-r--r--pkgs/development/libraries/libcaca/default.nix7
-rw-r--r--pkgs/development/libraries/libcanberra/default.nix2
-rw-r--r--pkgs/development/libraries/libdbi-drivers/default.nix6
-rw-r--r--pkgs/development/libraries/libdrm/default.nix2
-rw-r--r--pkgs/development/libraries/libdvdcss/default.nix6
-rw-r--r--pkgs/development/libraries/libedit/default.nix2
-rw-r--r--pkgs/development/libraries/libelf/default.nix16
-rw-r--r--pkgs/development/libraries/libevent/default.nix8
-rw-r--r--pkgs/development/libraries/libextractor/default.nix2
-rw-r--r--pkgs/development/libraries/libffi/default.nix14
-rw-r--r--pkgs/development/libraries/libfm/default.nix12
-rw-r--r--pkgs/development/libraries/libgcrypt/1.5.nix4
-rw-r--r--pkgs/development/libraries/libgcrypt/default.nix9
-rw-r--r--pkgs/development/libraries/libgpg-error/default.nix11
-rw-r--r--pkgs/development/libraries/libgphoto2/default.nix4
-rw-r--r--pkgs/development/libraries/libgsf/default.nix4
-rw-r--r--pkgs/development/libraries/libguestfs/default.nix2
-rw-r--r--pkgs/development/libraries/libidn/default.nix2
-rw-r--r--pkgs/development/libraries/libjpeg-turbo/default.nix8
-rw-r--r--pkgs/development/libraries/libjpeg/default.nix2
-rw-r--r--pkgs/development/libraries/libmbim/default.nix2
-rw-r--r--pkgs/development/libraries/libmicrohttpd/default.nix2
-rw-r--r--pkgs/development/libraries/libmng/default.nix11
-rw-r--r--pkgs/development/libraries/libmpc/default.nix2
-rw-r--r--pkgs/development/libraries/libmtp/default.nix14
-rw-r--r--pkgs/development/libraries/liboauth/default.nix2
-rw-r--r--pkgs/development/libraries/libogg/default.nix2
-rw-r--r--pkgs/development/libraries/liboil/default.nix7
-rw-r--r--pkgs/development/libraries/libopus/default.nix2
-rw-r--r--pkgs/development/libraries/libpng/12.nix4
-rw-r--r--pkgs/development/libraries/libpng/default.nix7
-rw-r--r--pkgs/development/libraries/libproxy/default.nix2
-rw-r--r--pkgs/development/libraries/libqmi/default.nix2
-rw-r--r--pkgs/development/libraries/libraw/default.nix2
-rw-r--r--pkgs/development/libraries/librsvg/default.nix4
-rw-r--r--pkgs/development/libraries/libsamplerate/default.nix8
-rw-r--r--pkgs/development/libraries/libsndfile/default.nix8
-rw-r--r--pkgs/development/libraries/libsodium/default.nix4
-rw-r--r--pkgs/development/libraries/libsoup/default.nix4
-rw-r--r--pkgs/development/libraries/libssh/default.nix2
-rw-r--r--pkgs/development/libraries/libssh2/default.nix2
-rw-r--r--pkgs/development/libraries/libtasn1/default.nix3
-rw-r--r--pkgs/development/libraries/libtheora/default.nix3
-rw-r--r--pkgs/development/libraries/libtiff/default.nix2
-rw-r--r--pkgs/development/libraries/libtoxcore/new-api/default.nix4
-rw-r--r--pkgs/development/libraries/libtoxcore/old-api/default.nix4
-rw-r--r--pkgs/development/libraries/libuchardet/default.nix6
-rw-r--r--pkgs/development/libraries/libunwind/default.nix4
-rw-r--r--pkgs/development/libraries/libusb/default.nix3
-rw-r--r--pkgs/development/libraries/libusb1/default.nix8
-rw-r--r--pkgs/development/libraries/libva/default.nix17
-rw-r--r--pkgs/development/libraries/libvdpau/default.nix2
-rw-r--r--pkgs/development/libraries/libvirt/default.nix10
-rw-r--r--pkgs/development/libraries/libvorbis/default.nix3
-rw-r--r--pkgs/development/libraries/libvpx/default.nix5
-rw-r--r--pkgs/development/libraries/libvpx/git.nix5
-rw-r--r--pkgs/development/libraries/libwnck/3.x.nix3
-rw-r--r--pkgs/development/libraries/libwnck/default.nix3
-rw-r--r--pkgs/development/libraries/libxkbcommon/default.nix2
-rw-r--r--pkgs/development/libraries/libxklavier/default.nix2
-rw-r--r--pkgs/development/libraries/libxml2/default.nix38
-rw-r--r--pkgs/development/libraries/libxslt/default.nix15
-rw-r--r--pkgs/development/libraries/mailcore2/default.nix3
-rw-r--r--pkgs/development/libraries/mesa/default.nix57
-rw-r--r--pkgs/development/libraries/mesa/dlopen-absolute-paths.diff2
-rw-r--r--pkgs/development/libraries/mpfr/default.nix2
-rw-r--r--pkgs/development/libraries/mygui/default.nix19
-rw-r--r--pkgs/development/libraries/ncurses/default.nix49
-rw-r--r--pkgs/development/libraries/nettle/generic.nix5
-rw-r--r--pkgs/development/libraries/newt/default.nix10
-rw-r--r--pkgs/development/libraries/nspr/default.nix4
-rw-r--r--pkgs/development/libraries/nss/default.nix18
-rw-r--r--pkgs/development/libraries/nss_wrapper/default.nix3
-rw-r--r--pkgs/development/libraries/ogrepaged/default.nix4
-rw-r--r--pkgs/development/libraries/opendkim/default.nix2
-rw-r--r--pkgs/development/libraries/openldap/default.nix9
-rw-r--r--pkgs/development/libraries/openscenegraph/default.nix9
-rw-r--r--pkgs/development/libraries/openssl/default.nix19
-rw-r--r--pkgs/development/libraries/p11-kit/default.nix3
-rw-r--r--pkgs/development/libraries/pango/default.nix14
-rw-r--r--pkgs/development/libraries/pcre/CVE-2016-1283.patch18
-rw-r--r--pkgs/development/libraries/pcre/default.nix45
-rw-r--r--pkgs/development/libraries/pdf2xml/default.nix4
-rw-r--r--pkgs/development/libraries/polkit/default.nix2
-rw-r--r--pkgs/development/libraries/poppler/default.nix2
-rw-r--r--pkgs/development/libraries/portaudio/default.nix2
-rw-r--r--pkgs/development/libraries/qhull/default.nix5
-rw-r--r--pkgs/development/libraries/qt-3/default.nix6
-rw-r--r--pkgs/development/libraries/qt-4.x/4.8/default.nix19
-rw-r--r--pkgs/development/libraries/qt-5/5.4/default.nix17
-rw-r--r--pkgs/development/libraries/qt-5/5.4/fix-qt-module-cmake-config.sh5
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtbase/default.nix101
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtbase/dlopen-gl.patch2
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtbase/mkspecs-libgl.patch4
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtbase/setup-hook.sh103
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtconnectivity.nix4
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtdeclarative/default.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtenginio.nix3
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtlocation.nix4
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtmultimedia.nix4
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtquick1/default.nix3
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtscript/default.nix3
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtsensors.nix3
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtserialport/0001-dlopen-serialport-udev.patch4
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtserialport/default.nix13
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtsvg.nix3
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qttools.nix9
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtwebkit/0003-dlopen-webkit-udev.patch4
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtwebkit/default.nix13
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtwebsockets.nix3
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtx11extras.nix3
-rw-r--r--pkgs/development/libraries/qt-5/5.4/qtxmlpatterns.nix3
-rw-r--r--pkgs/development/libraries/qt-5/5.5/default.nix47
-rw-r--r--pkgs/development/libraries/qt-5/5.5/fix-qt-module-cmake-config.sh5
-rw-r--r--pkgs/development/libraries/qt-5/5.5/make-qt-wrapper.sh30
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/default.nix121
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/dlopen-gl.patch2
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/mkspecs-libgl.patch4
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtbase/setup-hook.sh104
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtconnectivity.nix4
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtdeclarative/default.nix6
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtenginio.nix3
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtlocation.nix4
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtmultimedia.nix4
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtquick1/default.nix3
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtscript/default.nix3
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtsensors.nix3
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtserialport/0001-dlopen-serialport-udev.patch4
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtserialport/default.nix12
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtsvg.nix3
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qttools.nix10
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtwebkit/0003-dlopen-webkit-udev.patch4
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtwebkit/default.nix13
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtwebsockets.nix3
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtx11extras.nix3
-rw-r--r--pkgs/development/libraries/qt-5/5.5/qtxmlpatterns.nix3
-rw-r--r--pkgs/development/libraries/rdkafka/default.nix2
-rw-r--r--pkgs/development/libraries/readline/6.3.nix2
-rw-r--r--pkgs/development/libraries/schroedinger/default.nix16
-rw-r--r--pkgs/development/libraries/science/robotics/ispike/default.nix24
-rw-r--r--pkgs/development/libraries/scmccid/default.nix2
-rw-r--r--pkgs/development/libraries/slang/default.nix23
-rw-r--r--pkgs/development/libraries/smpeg/default.nix2
-rw-r--r--pkgs/development/libraries/socket_wrapper/default.nix1
-rw-r--r--pkgs/development/libraries/speex/default.nix6
-rw-r--r--pkgs/development/libraries/speexdsp/default.nix2
-rw-r--r--pkgs/development/libraries/sqlite/default.nix2
-rw-r--r--pkgs/development/libraries/tbb/default.nix7
-rw-r--r--pkgs/development/libraries/tokyo-cabinet/default.nix4
-rw-r--r--pkgs/development/libraries/uid_wrapper/default.nix1
-rw-r--r--pkgs/development/libraries/vaapi-intel/default.nix4
-rw-r--r--pkgs/development/libraries/webkitgtk/2.4.nix4
-rw-r--r--pkgs/development/libraries/webkitgtk/default.nix4
-rw-r--r--pkgs/development/libraries/wildmidi/default.nix2
-rw-r--r--pkgs/development/libraries/wxGTK-2.8/default.nix6
-rw-r--r--pkgs/development/libraries/x264/default.nix2
-rw-r--r--pkgs/development/libraries/x265/default.nix2
-rw-r--r--pkgs/development/libraries/xvidcore/default.nix4
-rw-r--r--pkgs/development/libraries/zlib/default.nix34
327 files changed, 3814 insertions, 807 deletions
diff --git a/pkgs/development/libraries/SDL/default.nix b/pkgs/development/libraries/SDL/default.nix
index 7ca594e9bc4a..6c3920ff8aa8 100644
--- a/pkgs/development/libraries/SDL/default.nix
+++ b/pkgs/development/libraries/SDL/default.nix
@@ -27,7 +27,8 @@ stdenv.mkDerivation rec {
     sha256 = "005d993xcac8236fpvd1iawkz4wqjybkpn8dbwaliqz5jfkidlyn";
   };
 
-  outputs = [ "out" "man" ];
+  outputs = [ "dev" "out" ];
+  outputBin = "dev"; # sdl-config
 
   nativeBuildInputs = [ pkgconfig ];
 
@@ -58,7 +59,7 @@ stdenv.mkDerivation rec {
     "--disable-osmesa-shared"
   ] ++ stdenv.lib.optionals (stdenv ? cross) ([
     "--without-x"
-  ] ++ stdenv.lib.optional alsaSupport "--with-alsa-prefix=${alsaLib}/lib");
+  ] ++ stdenv.lib.optional alsaSupport "--with-alsa-prefix=${alsaLib.out}/lib");
 
   patches = [
     # Fix window resizing issues, e.g. for xmonad
@@ -96,6 +97,8 @@ stdenv.mkDerivation rec {
     })
   ];
 
+  postFixup = ''moveToOutput share/aclocal "$dev" '';
+
   passthru = { inherit openglSupport; };
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/libraries/SDL2/default.nix b/pkgs/development/libraries/SDL2/default.nix
index 529c485930b3..1c260c2ba911 100644
--- a/pkgs/development/libraries/SDL2/default.nix
+++ b/pkgs/development/libraries/SDL2/default.nix
@@ -19,7 +19,7 @@ let
   configureFlagsFun = attrs: ''
         --disable-oss --disable-x11-shared
         --disable-pulseaudio-shared --disable-alsa-shared
-        ${if alsaSupport then "--with-alsa-prefix=${attrs.alsaLib}/lib" else ""}
+        ${if alsaSupport then "--with-alsa-prefix=${attrs.alsaLib.out}/lib" else ""}
         ${if (!x11Support) then "--without-x" else ""}
       '';
 in
diff --git a/pkgs/development/libraries/aalib/default.nix b/pkgs/development/libraries/aalib/default.nix
index d7dcbeba330b..7ddb78d052e0 100644
--- a/pkgs/development/libraries/aalib/default.nix
+++ b/pkgs/development/libraries/aalib/default.nix
@@ -8,16 +8,30 @@ stdenv.mkDerivation {
     sha256 = "1vkh19gb76agvh4h87ysbrgy82hrw88lnsvhynjf4vng629dmpgv";
   };
 
+  outputs = [ "dev" "out" "bin" "doc" ];
+  setOutputFlags = false; # Doesn't support all the flags
+
+  patches = stdenv.lib.optionals stdenv.isDarwin [ ./darwin.patch ];
+
   # The fuloong2f is not supported by aalib still
   preConfigure = ''
     cp ${automake}/share/automake*/config.{sub,guess} .
+    configureFlagsArray+=(
+      "--bindir=$bin/bin"
+      "--includedir=$dev/include"
+      "--libdir=$out/lib"
+    )
   '';
 
   buildInputs = [ ncurses ];
 
   configureFlags = "--without-x --with-ncurses=${ncurses}";
 
-  patches = stdenv.lib.optionals stdenv.isDarwin [ ./darwin.patch ];
+  postInstall = ''
+    mkdir -p $dev/bin
+    mv $bin/bin/aalib-config $dev/bin/aalib-config
+    substituteInPlace $out/lib/libaa.la --replace "${ncurses.dev}/lib" "${ncurses.out}/lib"
+  '';
 
   meta = {
     description = "ASCII art graphics library";
diff --git a/pkgs/development/libraries/acl/default.nix b/pkgs/development/libraries/acl/default.nix
index f6445874913a..29b31a8b492c 100644
--- a/pkgs/development/libraries/acl/default.nix
+++ b/pkgs/development/libraries/acl/default.nix
@@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "08qd9s3wfhv0ajswsylnfwr5h0d7j9d4rgip855nrh400nxp940p";
   };
 
+  outputs = [ "dev" "out" "bin" "doc" ];
+
   nativeBuildInputs = [ gettext ];
   buildInputs = [ attr ];
 
diff --git a/pkgs/development/libraries/apr-util/default.nix b/pkgs/development/libraries/apr-util/default.nix
index c123740f5c12..6f0956f1d1d1 100644
--- a/pkgs/development/libraries/apr-util/default.nix
+++ b/pkgs/development/libraries/apr-util/default.nix
@@ -22,6 +22,9 @@ stdenv.mkDerivation rec {
 
   patches = optional stdenv.isFreeBSD ./include-static-dependencies.patch;
 
+  outputs = [ "dev" "out" ];
+  outputBin = "dev";
+
   buildInputs = optional stdenv.isFreeBSD autoreconfHook;
 
   configureFlags = [ "--with-apr=${apr}" "--with-expat=${expat}" ]
@@ -42,7 +45,10 @@ stdenv.mkDerivation rec {
 
   # Give apr1 access to sed for runtime invocations
   postInstall = ''
-    wrapProgram $out/bin/apu-1-config --prefix PATH : "${gnused}/bin"
+    for f in $out/lib/*.la $out/lib/apr-util-1/*.la; do
+      substituteInPlace $f --replace "${expat.dev}/lib" "${expat.out}/lib"
+    done
+    wrapProgram $dev/bin/apu-1-config --prefix PATH : "${gnused}/bin"
   '';
 
   enableParallelBuilding = true;
diff --git a/pkgs/development/libraries/apr/default.nix b/pkgs/development/libraries/apr/default.nix
index 08fd1fe4d5f3..c6e505f43d23 100644
--- a/pkgs/development/libraries/apr/default.nix
+++ b/pkgs/development/libraries/apr/default.nix
@@ -10,6 +10,14 @@ stdenv.mkDerivation rec {
 
   patches = stdenv.lib.optionals stdenv.isDarwin [ ./is-this-a-compiler-bug.patch ];
 
+  outputs = [ "dev" "out" ];
+  outputBin = "dev";
+
+  preConfigure =
+    ''
+      configureFlagsArray+=("--with-installbuilddir=$dev/share/build")
+    '';
+
   configureFlags =
     # Including the Windows headers breaks unistd.h.
     # Based on ftp://sourceware.org/pub/cygwin/release/libapr1/libapr1-1.3.8-2-src.tar.bz2
@@ -17,10 +25,10 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = {
+  meta = with stdenv.lib; {
     homepage = http://apr.apache.org/;
     description = "The Apache Portable Runtime library";
-    platforms = stdenv.lib.platforms.all;
-    maintainers = [ stdenv.lib.maintainers.eelco ];
+    platforms = platforms.all;
+    maintainers = [ maintainers.eelco ];
   };
 }
diff --git a/pkgs/development/libraries/at-spi2-core/default.nix b/pkgs/development/libraries/at-spi2-core/default.nix
index 808de07c52fd..e49569bc226a 100644
--- a/pkgs/development/libraries/at-spi2-core/default.nix
+++ b/pkgs/development/libraries/at-spi2-core/default.nix
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
     sha256 = "0afn4x04j5l352vj0dccb2hkpzg3l2vhr8h1yv89fpqmjkfnm8md";
   };
 
-  outputs = [ "out" "doc" ];
+  outputs = [ "dev" "out" ];
 
   buildInputs = [
     python pkgconfig popt  intltool dbus_glib
diff --git a/pkgs/development/libraries/atk/default.nix b/pkgs/development/libraries/atk/default.nix
index dcb90aa16cd1..14e2e71c0bd0 100644
--- a/pkgs/development/libraries/atk/default.nix
+++ b/pkgs/development/libraries/atk/default.nix
@@ -12,6 +12,10 @@ stdenv.mkDerivation rec {
     sha256 = "ce6c48d77bf951083029d5a396dd552d836fff3c1715d3a7022e917e46d0c92b";
   };
 
+  enableParallelBuilding = true;
+
+  outputs = [ "dev" "out" ];
+
   buildInputs = libintlOrEmpty;
 
   nativeBuildInputs = [ pkgconfig perl ];
@@ -20,8 +24,6 @@ stdenv.mkDerivation rec {
 
   #doCheck = true; # no checks in there (2.10.0)
 
-  postInstall = "rm -rf $out/share/gtk-doc";
-
   meta = {
     description = "Accessibility toolkit";
 
diff --git a/pkgs/development/libraries/attr/default.nix b/pkgs/development/libraries/attr/default.nix
index 3c69a7328b23..2bb5b2d25807 100644
--- a/pkgs/development/libraries/attr/default.nix
+++ b/pkgs/development/libraries/attr/default.nix
@@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "0nd8y0m6awc9ahv0ciiwf8gy54c8d3j51pw9xg7f7cn579jjyxr5";
   };
 
+  outputs = [ "dev" "out" "bin" "doc" ];
+
   nativeBuildInputs = [ gettext ];
 
   configureFlags = "MAKE=make MSGFMT=msgfmt MSGMERGE=msgmerge XGETTEXT=xgettext ECHO=echo SED=sed AWK=gawk";
diff --git a/pkgs/development/libraries/boehm-gc/default.nix b/pkgs/development/libraries/boehm-gc/default.nix
index 158f4b227dd3..4839bedd8bb0 100644
--- a/pkgs/development/libraries/boehm-gc/default.nix
+++ b/pkgs/development/libraries/boehm-gc/default.nix
@@ -7,9 +7,10 @@ stdenv.mkDerivation rec {
     url = http://www.hboehm.info/gc/gc_source/gc-7.2f.tar.gz;
     sha256 = "119x7p1cqw40mpwj80xfq879l9m1dkc7vbc1f3bz3kvkf8bf6p16";
   };
-
   patches = if stdenv.isCygwin then [ ./cygwin.patch ] else null;
 
+  outputs = [ "dev" "out" "doc" ];
+
   configureFlags =
     [ "--enable-cplusplus" ]
     ++ lib.optional enableLargeConfig "--enable-large-config";
@@ -19,6 +20,12 @@ stdenv.mkDerivation rec {
   # Don't run the native `strip' when cross-compiling.
   dontStrip = stdenv ? cross;
 
+  postInstall =
+    ''
+      mkdir -p $out/share/doc
+      mv $out/share/gc $out/share/doc/gc
+    '';
+
   meta = {
     description = "The Boehm-Demers-Weiser conservative garbage collector for C and C++";
 
diff --git a/pkgs/development/libraries/boost/generic.nix b/pkgs/development/libraries/boost/generic.nix
index b28668e7b301..5b0c06bd6bb2 100644
--- a/pkgs/development/libraries/boost/generic.nix
+++ b/pkgs/development/libraries/boost/generic.nix
@@ -64,8 +64,8 @@ let
   ] ++ optional (variant == "release") "debug-symbols=off";
 
   nativeB2Flags = [
-    "-sEXPAT_INCLUDE=${expat}/include"
-    "-sEXPAT_LIBPATH=${expat}/lib"
+    "-sEXPAT_INCLUDE=${expat.dev}/include"
+    "-sEXPAT_LIBPATH=${expat.out}/lib"
   ] ++ optional (toolset != null) "toolset=${toolset}"
     ++ optional (mpi != null) "--user-config=user-config.jam";
   nativeB2Args = concatStringsSep " " (genericB2Flags ++ nativeB2Flags);
@@ -148,7 +148,7 @@ stdenv.mkDerivation {
 
   configureScript = "./bootstrap.sh";
   configureFlags = commonConfigureFlags ++ [
-    "--with-icu=${icu}"
+    "--with-icu=${icu.dev}"
     "--with-python=${python.interpreter}"
   ] ++ optional (toolset != null) "--with-toolset=${toolset}";
 
@@ -159,6 +159,7 @@ stdenv.mkDerivation {
   postFixup = fixup;
 
   outputs = [ "out" "dev" "lib" ];
+  setOutputFlags = false;
 
   crossAttrs = rec {
     buildInputs = [ expat.crossDrv zlib.crossDrv bzip2.crossDrv ];
diff --git a/pkgs/development/libraries/cairo/default.nix b/pkgs/development/libraries/cairo/default.nix
index 537107f3f6a8..2e4821b30738 100644
--- a/pkgs/development/libraries/cairo/default.nix
+++ b/pkgs/development/libraries/cairo/default.nix
@@ -19,6 +19,9 @@ stdenv.mkDerivation rec {
     sha256 = "0lmjlzmghmr27y615px9hkm552x7ap6pmq9mfbzr6smp8y2b6g31";
   };
 
+  outputs = [ "dev" "out" "docdev" ];
+  outputBin = "dev"; # very small
+
   nativeBuildInputs = [
     pkgconfig
     libiconv
@@ -29,12 +32,12 @@ stdenv.mkDerivation rec {
   ]);
 
   propagatedBuildInputs =
-    with xorg; [ xorg.xlibsWrapper fontconfig expat freetype pixman zlib libpng ]
+    with xorg; [ libXext fontconfig expat freetype pixman zlib libpng ]
     ++ optional (!stdenv.isDarwin) libXrender
     ++ optionals xcbSupport [ libxcb xcbutil ]
     ++ optional gobjectSupport glib
-    ++ optionals glSupport [ mesa_noglu ]
-    ;
+    ++ optional glSupport mesa_noglu
+    ; # TODO: maybe liblzo but what would it be for here?
 
   configureFlags = if stdenv.isDarwin then [
     "--disable-dependency-tracking"
@@ -50,29 +53,24 @@ stdenv.mkDerivation rec {
 
   preConfigure =
   # On FreeBSD, `-ldl' doesn't exist.
-    (stdenv.lib.optionalString stdenv.isFreeBSD
+    stdenv.lib.optionalString stdenv.isFreeBSD
        '' for i in "util/"*"/Makefile.in" boilerplate/Makefile.in
           do
             cat "$i" | sed -es/-ldl//g > t
             mv t "$i"
           done
-       '') 
-       +
+       ''
+    +
     ''
     # Work around broken `Requires.private' that prevents Freetype
     # `-I' flags to be propagated.
     sed -i "src/cairo.pc.in" \
-        -es'|^Cflags:\(.*\)$|Cflags: \1 -I${freetype}/include/freetype2 -I${freetype}/include|g'
+        -es'|^Cflags:\(.*\)$|Cflags: \1 -I${freetype.dev}/include/freetype2 -I${freetype.dev}/include|g'
     '';
 
   enableParallelBuilding = true;
 
-  # The default `--disable-gtk-doc' is ignored.
-  postInstall = "rm -rf $out/share/gtk-doc"
-    + stdenv.lib.optionalString stdenv.isDarwin (''
-      #newline
-    '' + glib.flattenInclude
-    );
+  postInstall = stdenv.lib.optionalString stdenv.isDarwin glib.flattenInclude;
 
   meta = with stdenv.lib; {
     description = "A 2D graphics library with support for multiple output devices";
diff --git a/pkgs/development/libraries/cogl/1.20.nix b/pkgs/development/libraries/cogl/1.20.nix
index 5eb12fe29989..ae202b093777 100644
--- a/pkgs/development/libraries/cogl/1.20.nix
+++ b/pkgs/development/libraries/cogl/1.20.nix
@@ -34,7 +34,7 @@ stdenv.mkDerivation rec {
 
   COGL_PANGO_DEP_CFLAGS
     = stdenv.lib.optionalString (stdenv.isDarwin && pangoSupport)
-      "-I${pango}/include/pango-1.0 -I${cairo}/include/cairo";
+      "-I${pango.dev}/include/pango-1.0 -I${cairo.dev}/include/cairo";
 
   NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isDarwin "-lintl";
 
diff --git a/pkgs/development/libraries/cogl/1.22.nix b/pkgs/development/libraries/cogl/1.22.nix
index ce4fda5bd468..88bb67077490 100644
--- a/pkgs/development/libraries/cogl/1.22.nix
+++ b/pkgs/development/libraries/cogl/1.22.nix
@@ -34,7 +34,7 @@ stdenv.mkDerivation rec {
 
   COGL_PANGO_DEP_CFLAGS
     = stdenv.lib.optionalString (stdenv.isDarwin && pangoSupport)
-      "-I${pango}/include/pango-1.0 -I${cairo}/include/cairo";
+      "-I${pango.dev}/include/pango-1.0 -I${cairo.dev}/include/cairo";
 
   NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isDarwin "-lintl";
 
diff --git a/pkgs/development/libraries/cogl/default.nix b/pkgs/development/libraries/cogl/default.nix
index a4a20fce023a..e45702090665 100644
--- a/pkgs/development/libraries/cogl/default.nix
+++ b/pkgs/development/libraries/cogl/default.nix
@@ -35,7 +35,7 @@ stdenv.mkDerivation rec {
 
   COGL_PANGO_DEP_CFLAGS
     = stdenv.lib.optionalString (stdenv.isDarwin && pangoSupport)
-      "-I${pango}/include/pango-1.0 -I${cairo}/include/cairo";
+      "-I${pango.dev}/include/pango-1.0 -I${cairo.dev}/include/cairo";
 
   NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isDarwin "-lintl";
 
diff --git a/pkgs/development/libraries/cyrus-sasl/default.nix b/pkgs/development/libraries/cyrus-sasl/default.nix
index 059b0ab0042a..21ad12869f9c 100644
--- a/pkgs/development/libraries/cyrus-sasl/default.nix
+++ b/pkgs/development/libraries/cyrus-sasl/default.nix
@@ -9,6 +9,8 @@ stdenv.mkDerivation rec {
     sha256 = "1hvvbcsg21nlncbgs0cgn3iwlnb3vannzwsp6rwvnn9ba4v53g4g";
   };
 
+  outputs = [ "dev" "bin" "out" "man" "docdev" ];
+
   buildInputs =
     [ openssl db gettext kerberos ]
     ++ lib.optional stdenv.isFreeBSD autoreconfHook
@@ -39,6 +41,12 @@ stdenv.mkDerivation rec {
 
   installFlags = lib.optional stdenv.isDarwin [ "framedir=$(out)/Library/Frameworks/SASL2.framework" ];
 
+  postInstall = ''
+    for f in $out/lib/*.la $out/lib/sasl2/*.la; do
+      substituteInPlace $f --replace "${openssl.dev}/lib" "${openssl.out}/lib"
+    done
+  '';
+
   meta = {
     homepage = "http://cyrusimap.web.cmu.edu/";
     description = "library for adding authentication support to connection-based protocols";
diff --git a/pkgs/development/libraries/dbus-glib/default.nix b/pkgs/development/libraries/dbus-glib/default.nix
index 480dc61897bb..59d227f0e868 100644
--- a/pkgs/development/libraries/dbus-glib/default.nix
+++ b/pkgs/development/libraries/dbus-glib/default.nix
@@ -8,13 +8,14 @@ stdenv.mkDerivation rec {
     sha256 = "1xi1v1msz75qs0s4lkyf1psrksdppa3hwkg0mznc6gpw5flg3hdz";
   };
 
-  outputs = [ "out" "doc" ];
+  outputs = [ "dev" "out" "docdev" ];
+  outputBin = "dev";
 
   nativeBuildInputs = [ pkgconfig gettext ];
 
   buildInputs = [ expat libiconv ];
 
-  propagatedBuildInputs = [ dbus.libs glib ];
+  propagatedBuildInputs = [ dbus glib ];
 
   doCheck = true;
 
diff --git a/pkgs/development/libraries/dbus/default.nix b/pkgs/development/libraries/dbus/default.nix
index 7f5e2f6311b2..83635d9739f1 100644
--- a/pkgs/development/libraries/dbus/default.nix
+++ b/pkgs/development/libraries/dbus/default.nix
@@ -1,5 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, autoreconfHook
-, expat, systemd, glib, dbus_glib, python
+{ stdenv, lib, fetchurl, pkgconfig, expat, systemd, glib, dbus_glib, python
 , libX11 ? null, libICE ? null, libSM ? null, x11Support ? (stdenv.isLinux || stdenv.isDarwin) }:
 
 assert x11Support -> libX11 != null
@@ -10,108 +9,77 @@ let
   version = "1.8.20";
   sha256 = "0fkh3d5r57a659hw9lqnw4v0bc5556vx54fsf7l9c732ci6byksw";
 
-  inherit (stdenv) lib;
-
-  buildInputsX = lib.optionals x11Support [ libX11 libICE libSM ];
-
-  # also other parts than "libs" need this statically linked lib
-  makeInternalLib = "(cd dbus && make libdbus-internal.la)";
-
-  systemdOrEmpty = lib.optional stdenv.isLinux systemd;
-
-  # A generic builder for individual parts (subdirs) of D-Bus
-  dbus_drv = name: subdirs: merge: stdenv.mkDerivation (lib.mergeAttrsByFuncDefaultsClean [{
-
-    name = "dbus-${name}-${version}";
+self =  stdenv.mkDerivation {
+    name = "dbus-${version}";
 
     src = fetchurl {
       url = "http://dbus.freedesktop.org/releases/dbus/dbus-${version}.tar.gz";
       inherit sha256;
     };
 
-    patches = [
-        ./ignore-missing-includedirs.patch
-        ./ucred-dirty-hack.patch
-        ./no-create-dirs.patch
-      ]
-      ++ lib.optional (stdenv.isSunOS || stdenv.isLinux) ./implement-getgrouplist.patch
-      ;
-
-    # build only the specified subdirs
-    postPatch = "sed '/SUBDIRS/s/=.*/=" + subdirs + "/' -i Makefile.am\n"
-      # use already packaged libdbus instead of trying to build it again
-      + lib.optionalString (name != "libs") ''
-          for mfile in */Makefile.am; do
-            sed 's,\$(top_builddir)/dbus/\(libdbus-[0-9]\),${libs}/lib/\1,g' -i "$mfile"
-          done
-        '';
-
-    nativeBuildInputs = [ pkgconfig autoreconfHook ];
-    propagatedBuildInputs = [ expat ];
-
-    preAutoreconf = ''
-      substituteInPlace tools/Makefile.am --replace 'install-localstatelibDATA:' 'disabled:'
+    patches = [ ./ignore-missing-includedirs.patch ]
+      ++ lib.optional stdenv.isSunOS ./implement-getgrouplist.patch;
+    postPatch = ''
+      substituteInPlace tools/Makefile.in \
+        --replace 'install-localstatelibDATA:' 'disabled:' \
+        --replace 'install-data-local:' 'disabled:' \
+        --replace 'installcheck-local:' 'disabled:'
+      substituteInPlace bus/Makefile.in \
+        --replace '$(mkinstalldirs) $(DESTDIR)$(localstatedir)/run/dbus' ':'
+    '' + /* cleanup of runtime references */ ''
+      substituteInPlace ./dbus/dbus-sysdeps-unix.c \
+        --replace 'DBUS_BINDIR "/dbus-launch"' "\"$lib/bin/dbus-launch\""
+      substituteInPlace ./tools/dbus-launch.c \
+        --replace 'DBUS_DAEMONDIR"/dbus-daemon"' '"/run/current-system/sw/bin/dbus-daemon"'
     '';
 
-    preConfigure = ''
-      patchShebangs .
-    '';
+    outputs = [ "dev" "out" "lib" "doc" ];
+
+    nativeBuildInputs = [ pkgconfig ];
+    propagatedBuildInputs = [ expat ];
+    buildInputs = lib.optional stdenv.isLinux systemd
+      ++ lib.optionals x11Support [ libX11 libICE libSM ];
+    # ToDo: optional selinux?
 
     configureFlags = [
       "--localstatedir=/var"
       "--sysconfdir=/etc"
       "--with-session-socket-dir=/tmp"
       "--with-systemdsystemunitdir=$(out)/etc/systemd/system"
+      # this package installs nothing into those dirs and they create a dependency
+      "--datadir=/run/current-system/sw/share"
+      "--libexecdir=$(out)/libexec" # we don't need dbus-daemon-launch-helper
     ] ++ lib.optional (!x11Support) "--without-x";
 
-    enableParallelBuilding = true;
-
-    doCheck = true;
-
-    installFlags = "sysconfdir=$(out)/etc";
-
-  } merge ]);
-
-  libs = dbus_drv "libs" "dbus" {
     # Enable X11 autolaunch support in libdbus. This doesn't actually depend on X11
     # (it just execs dbus-launch in dbus.tools), contrary to what the configure script demands.
-    NIX_CFLAGS_COMPILE = "-DDBUS_ENABLE_X11_AUTOLAUNCH=1";
-    buildInputs = [ systemdOrEmpty ];
-    meta.platforms = stdenv.lib.platforms.all;
-  };
-
-
-  attrs = rec {
-  # If you change much fix indentation
+    # problems building without x11Support so disabled in that case for now
+    NIX_CFLAGS_COMPILE = lib.optionalString x11Support "-DDBUS_ENABLE_X11_AUTOLAUNCH=1";
+    NIX_CFLAGS_LINK = lib.optionalString (!stdenv.isDarwin) "-Wl,--as-needed";
 
-  # This package has been split because most applications only need dbus.lib
-  # which serves as an interface to a *system-wide* daemon,
-  # see e.g. http://en.wikipedia.org/wiki/D-Bus#Architecture .
+    enableParallelBuilding = true;
 
-  inherit libs;
+    doCheck = true;
 
-  tools = dbus_drv "tools" "tools bus" {
-    preBuild = makeInternalLib;
-    buildInputs = buildInputsX ++ systemdOrEmpty ++ [ libs ];
-    NIX_CFLAGS_LINK =
-      stdenv.lib.optionalString (!stdenv.isDarwin && !stdenv.isSunOS) "-Wl,--as-needed "
-      + "-ldbus-1";
+    installFlags = "sysconfdir=$(out)/etc datadir=$(out)/share";
 
-    # don't provide another dbus-1.pc (with incorrect include and link dirs),
-    # also remove useless empty dirs
-    postInstall = ''
-      rm "$out"/lib/pkgconfig/dbus-1.pc
-      rmdir --parents --ignore-fail-on-non-empty "$out"/{lib/pkgconfig,share/dbus-1/*}
+    # it's executed from $lib by absolute path
+    postFixup = ''
+      moveToOutput bin/dbus-launch "$lib"
+      ln -s "$lib/bin/dbus-launch" "$out/bin/"
     '';
 
-    meta.platforms = with stdenv.lib.platforms; allBut darwin;
-  };
-
-  daemon = tools;
+    passthru = {
+      dbus-launch = "${self.lib}/bin/dbus-launch";
+      daemon = self.out;
+    };
 
-  docs = dbus_drv "docs" "doc" {
-    postInstall = ''rm -r "$out/lib"'';
+    meta = with stdenv.lib; {
+      description = "Simple interprocess messaging system";
+      homepage = http://www.freedesktop.org/wiki/Software/dbus/;
+      license = licenses.gpl2Plus; # most is also under AFL-2.1
+      platforms = platforms.unix;
+    };
   };
-};
-in attrs.libs // attrs
+in self
 
diff --git a/pkgs/development/libraries/dbus/no-create-dirs.patch b/pkgs/development/libraries/dbus/no-create-dirs.patch
deleted file mode 100644
index cf10d9775991..000000000000
--- a/pkgs/development/libraries/dbus/no-create-dirs.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-diff --git a/bus/Makefile.am b/bus/Makefile.am
-index 6cbc09a..be60bb8 100644
---- a/bus/Makefile.am
-+++ b/bus/Makefile.am
-@@ -212,7 +212,6 @@ clean-local:
- 	/bin/rm *.bb *.bbg *.da *.gcov || true
- 
- install-data-hook:
--	$(mkinstalldirs) $(DESTDIR)$(localstatedir)/run/dbus
- 	$(mkinstalldirs) $(DESTDIR)$(configdir)/system.d
- 	$(mkinstalldirs) $(DESTDIR)$(configdir)/session.d
- 	$(mkinstalldirs) $(DESTDIR)$(datadir)/dbus-1/services
-diff --git a/tools/Makefile.am b/tools/Makefile.am
-index cfd54b8..b6e28f9 100644
---- a/tools/Makefile.am
-+++ b/tools/Makefile.am
-@@ -74,7 +74,7 @@ CLEANFILES = 				\
- 
- # create the /var/lib/dbus directory for dbus-uuidgen
- install-data-local:
--	$(MKDIR_P) $(DESTDIR)$(localstatedir)/lib/dbus
-+	:
- 
- installcheck-local:
--	test -d $(DESTDIR)$(localstatedir)/lib/dbus
-+	:
diff --git a/pkgs/development/libraries/dbus/ucred-dirty-hack.patch b/pkgs/development/libraries/dbus/ucred-dirty-hack.patch
deleted file mode 100644
index a07abcc15fb0..000000000000
--- a/pkgs/development/libraries/dbus/ucred-dirty-hack.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c
-index b4ecc96..267984a 100644
---- a/dbus/dbus-sysdeps-unix.c
-+++ b/dbus/dbus-sysdeps-unix.c
-@@ -1635,6 +1635,13 @@ write_credentials_byte (int             server_fd,
-     }
- }
- 
-+struct ucred
-+{
-+  pid_t pid;			/* PID of sending process.  */
-+  uid_t uid;			/* UID of sending process.  */
-+  gid_t gid;			/* GID of sending process.  */
-+};
-+
- /**
-  * Reads a single byte which must be nul (an error occurs otherwise),
-  * and reads unix credentials if available. Clears the credentials
diff --git a/pkgs/development/libraries/epoxy/default.nix b/pkgs/development/libraries/epoxy/default.nix
index daffae90b127..009624096605 100644
--- a/pkgs/development/libraries/epoxy/default.nix
+++ b/pkgs/development/libraries/epoxy/default.nix
@@ -13,6 +13,8 @@ stdenv.mkDerivation rec {
     sha256 = "0dfkd4xbp7v5gwsf6qwaraz54yzizf3lj5ymyc0msjn0adq3j5yl";
   };
 
+  outputs = [ "dev" "out" ];
+
   nativeBuildInputs = [ autoreconfHook pkgconfig utilmacros python ];
   buildInputs = [ mesa libX11 ];
 
diff --git a/pkgs/development/libraries/expat/default.nix b/pkgs/development/libraries/expat/default.nix
index 96d46649d916..774190278cb3 100644
--- a/pkgs/development/libraries/expat/default.nix
+++ b/pkgs/development/libraries/expat/default.nix
@@ -10,8 +10,13 @@ stdenv.mkDerivation rec {
 
   patches = [ ./CVE-2015-1283.patch ];
 
+  outputs = [ "dev" "out" ]; # TODO: fix referrers
+  outputBin = "dev";
+
   configureFlags = stdenv.lib.optional stdenv.isFreeBSD "--with-pic";
 
+  outputMan = "dev"; # tiny page for a dev tool
+
   meta = with stdenv.lib; {
     homepage = http://www.libexpat.org/;
     description = "A stream-oriented XML parser library written in C";
diff --git a/pkgs/development/libraries/ffmpeg/generic.nix b/pkgs/development/libraries/ffmpeg/generic.nix
index d8c488d2999f..d50c20331e4a 100644
--- a/pkgs/development/libraries/ffmpeg/generic.nix
+++ b/pkgs/development/libraries/ffmpeg/generic.nix
@@ -71,6 +71,10 @@ stdenv.mkDerivation rec {
 
   patchPhase = ''patchShebangs .'';
 
+  outputs = [ "dev" "out" "bin" ]
+    ++ optional (reqMin "1.0") "doc" ; # just dev-doc
+  setOutputFlags = false; # doesn't accept all and stores configureFlags in libs!
+
   configureFlags = [
     # License
       "--enable-gpl"
@@ -155,6 +159,11 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
+  postFixup = ''
+    moveToOutput bin "$bin"
+    moveToOutput share/ffmpeg/examples "$doc"
+  '';
+
   /* Cross-compilation is untested, consider this an outline, more work
      needs to be done to portions of the build to get it to work correctly */
   crossAttrs = let
diff --git a/pkgs/development/libraries/fftw/default.nix b/pkgs/development/libraries/fftw/default.nix
index dfa4541e34b7..a7a02521c69c 100644
--- a/pkgs/development/libraries/fftw/default.nix
+++ b/pkgs/development/libraries/fftw/default.nix
@@ -14,6 +14,9 @@ stdenv.mkDerivation rec {
     sha256 = "10h9mzjxnwlsjziah4lri85scc05rlajz39nqf3mbh4vja8dw34g";
   };
 
+  outputs = [ "dev" "out" "doc" ]; # it's dev-doc only
+  outputBin = "dev"; # fftw-wisdom
+
   configureFlags =
     [ "--enable-shared" "--disable-static"
       "--enable-threads"
diff --git a/pkgs/development/libraries/fontconfig/2.10.nix b/pkgs/development/libraries/fontconfig/2.10.nix
index 2951dbb44d4f..fea9efde1cfd 100644
--- a/pkgs/development/libraries/fontconfig/2.10.nix
+++ b/pkgs/development/libraries/fontconfig/2.10.nix
@@ -16,6 +16,8 @@ stdenv.mkDerivation rec {
       }
     ;
 
+  outputs = [ "dev" "lib" "bin" "out" ]; # $out contains all the config
+
   propagatedBuildInputs = [ freetype ];
   buildInputs = [ pkgconfig expat ];
 
diff --git a/pkgs/development/libraries/fontconfig/default.nix b/pkgs/development/libraries/fontconfig/default.nix
index b03528de2d5d..6acf1ebce29c 100644
--- a/pkgs/development/libraries/fontconfig/default.nix
+++ b/pkgs/development/libraries/fontconfig/default.nix
@@ -36,6 +36,8 @@ stdenv.mkDerivation rec {
     })
   ];
 
+  outputs = [ "dev" "lib" "bin" "out" ]; # $out contains all the config
+
   propagatedBuildInputs = [ freetype ];
   buildInputs = [ pkgconfig expat ];
 
@@ -65,7 +67,7 @@ stdenv.mkDerivation rec {
   postInstall = ''
     cd "$out/etc/fonts"
     rm conf.d/{50-user,51-local}.conf
-    "${libxslt}/bin/xsltproc" --stringparam fontDirectories "${fontbhttf}" \
+    "${libxslt.bin}/bin/xsltproc" --stringparam fontDirectories "${fontbhttf}" \
       --stringparam fontconfig "$out" \
       --stringparam fontconfigConfigVersion "${configVersion}" \
       --path $out/share/xml/fontconfig \
diff --git a/pkgs/development/libraries/fontconfig/make-fonts-cache.nix b/pkgs/development/libraries/fontconfig/make-fonts-cache.nix
index 1321948c3c81..b996cd228c77 100644
--- a/pkgs/development/libraries/fontconfig/make-fonts-cache.nix
+++ b/pkgs/development/libraries/fontconfig/make-fonts-cache.nix
@@ -16,7 +16,7 @@ runCommand "fc-cache"
     <?xml version='1.0'?>
     <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
     <fontconfig>
-      <include>${fontconfig}/etc/fonts/fonts.conf</include>
+      <include>${fontconfig.out}/etc/fonts/fonts.conf</include>
       <cachedir>$out</cachedir>
     EOF
     cat "$fontDirsPath" >> fonts.conf
diff --git a/pkgs/development/libraries/fontconfig/make-fonts-conf.nix b/pkgs/development/libraries/fontconfig/make-fonts-conf.nix
index 2b02e0df7a04..2d0a21ea9ddf 100644
--- a/pkgs/development/libraries/fontconfig/make-fonts-conf.nix
+++ b/pkgs/development/libraries/fontconfig/make-fonts-conf.nix
@@ -8,9 +8,9 @@ runCommand "fonts.conf"
   }
   ''
     xsltproc --stringparam fontDirectories "$fontDirectories" \
-      --stringparam fontconfig "${fontconfig}" \
+      --stringparam fontconfig "${fontconfig.out}" \
       --stringparam fontconfigConfigVersion "${fontconfig.configVersion}" \
-      --path ${fontconfig}/share/xml/fontconfig \
-      ${./make-fonts-conf.xsl} ${fontconfig}/etc/fonts/fonts.conf \
+      --path ${fontconfig.out}/share/xml/fontconfig \
+      ${./make-fonts-conf.xsl} ${fontconfig.out}/etc/fonts/fonts.conf \
       > $out
   ''
diff --git a/pkgs/development/libraries/freetype/default.nix b/pkgs/development/libraries/freetype/default.nix
index 61d8cb582a01..81e98056e90b 100644
--- a/pkgs/development/libraries/freetype/default.nix
+++ b/pkgs/development/libraries/freetype/default.nix
@@ -35,12 +35,16 @@ stdenv.mkDerivation rec {
         "0wcjf9hiymplgqm3szla633i417pb57vpzzs2dyl1dnmcxgqa2y8")
     ];
 
+  outputs = [ "dev" "out" ];
+
   propagatedBuildInputs = [ zlib bzip2 libpng ]; # needed when linking against freetype
   # dependence on harfbuzz is looser than the reverse dependence
   buildInputs = [ pkgconfig which ]
     # FreeType requires GNU Make, which is not part of stdenv on FreeBSD.
     ++ optional (!stdenv.isLinux) gnumake;
 
+  configureFlags = "--disable-static --bindir=$(dev)/bin";
+
   # from Gentoo, see https://bugzilla.redhat.com/show_bug.cgi?id=506840
   NIX_CFLAGS_COMPILE = "-fno-strict-aliasing";
   # The asm for armel is written with the 'asm' keyword.
diff --git a/pkgs/development/libraries/gdk-pixbuf/default.nix b/pkgs/development/libraries/gdk-pixbuf/default.nix
index 18562d1d12e3..756ebf816199 100644
--- a/pkgs/development/libraries/gdk-pixbuf/default.nix
+++ b/pkgs/development/libraries/gdk-pixbuf/default.nix
@@ -13,12 +13,17 @@ stdenv.mkDerivation rec {
     sha256 = "0cfh87aqyqbfcwpbv1ihgmgfcn66il5q2n8yjyl8gxkjmkqp2rrb";
   };
 
+  outputs = [ "dev" "out" "docdev" ];
+  outputBin = "dev";
+
   setupHook = ./setup-hook.sh;
 
+  enableParallelBuilding = true;
+
   # !!! We might want to factor out the gdk-pixbuf-xlib subpackage.
-  buildInputs = [ libX11 libintlOrEmpty ];
+  buildInputs = [ libX11 gobjectIntrospection ] ++ libintlOrEmpty;
 
-  nativeBuildInputs = [ pkgconfig gobjectIntrospection ];
+  nativeBuildInputs = [ pkgconfig ];
 
   propagatedBuildInputs = [ glib libtiff libjpeg libpng jasper ];
 
@@ -34,12 +39,11 @@ stdenv.mkDerivation rec {
   # The tests take an excessive amount of time (> 1.5 hours) and memory (> 6 GB).
   inherit (doCheck);
 
-  postInstall = "rm -rf $out/share/gtk-doc";
-
-  meta = {
+  meta = with stdenv.lib; {
     description = "A library for image loading and manipulation";
     homepage = http://library.gnome.org/devel/gdk-pixbuf/;
-    maintainers = [ stdenv.lib.maintainers.eelco ];
-    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ maintainers.eelco ];
+    platforms = platforms.unix;
   };
 }
+
diff --git a/pkgs/development/libraries/geoclue/2.0.nix b/pkgs/development/libraries/geoclue/2.0.nix
index 83becae05a4c..0c22cc9ff9fd 100644
--- a/pkgs/development/libraries/geoclue/2.0.nix
+++ b/pkgs/development/libraries/geoclue/2.0.nix
@@ -3,11 +3,11 @@
 }:
 
 stdenv.mkDerivation rec {
-  name = "geoclue-2.4.2";
+  name = "geoclue-2.4.3";
 
   src = fetchurl {
     url = "http://www.freedesktop.org/software/geoclue/releases/2.4/${name}.tar.xz";
-    sha256 = "0g4krigdaf5ipkp4mi16rca62crr8pdk3wkhm0fxbcqnil75fyy4";
+    sha256 = "0pk07k65dlw37nz8z5spksivsv5nh96xmbi336rf2yfxf2ldpadd";
   };
 
   buildInputs =
diff --git a/pkgs/development/libraries/gettext/default.nix b/pkgs/development/libraries/gettext/default.nix
index c96d241ee903..940df56c03c3 100644
--- a/pkgs/development/libraries/gettext/default.nix
+++ b/pkgs/development/libraries/gettext/default.nix
@@ -50,7 +50,7 @@ stdenv.mkDerivation rec {
     sed -i -e "s/\(am_libgettextlib_la_OBJECTS = \)error.lo/\\1/" gettext-tools/gnulib-lib/Makefile.in
   '';
 
-  buildInputs = [ xz ] ++ lib.optional (!stdenv.isLinux) libiconv;
+  buildInputs = [ xz xz.bin libiconv ];
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/development/libraries/git2/default.nix b/pkgs/development/libraries/git2/default.nix
index fb380d60cf92..3cf429ab1d73 100644
--- a/pkgs/development/libraries/git2/default.nix
+++ b/pkgs/development/libraries/git2/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, pkgconfig, cmake, zlib, python, libssh2, openssl, http-parser, libiconv}:
+{ stdenv, fetchurl, pkgconfig, cmake, zlib, python, libssh2, openssl, http-parser, libiconv }:
 
 stdenv.mkDerivation (rec {
   version = "0.23.2";
diff --git a/pkgs/development/libraries/glfw/3.x.nix b/pkgs/development/libraries/glfw/3.x.nix
index 681137cd590b..094856b66ab7 100644
--- a/pkgs/development/libraries/glfw/3.x.nix
+++ b/pkgs/development/libraries/glfw/3.x.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
   ];
 
   cmakeFlags = "-DBUILD_SHARED_LIBS=ON";
+  NIX_LDFLAGS= "-lpthread -L${stdenv.cc.libc.out}/lib";
 
   meta = with stdenv.lib; { 
     description = "Multi-platform library for creating OpenGL contexts and managing input, including keyboard, mouse, joystick and time";
diff --git a/pkgs/development/libraries/glib-networking/default.nix b/pkgs/development/libraries/glib-networking/default.nix
index 6bb3c8c1e5a2..fc4707aedb75 100644
--- a/pkgs/development/libraries/glib-networking/default.nix
+++ b/pkgs/development/libraries/glib-networking/default.nix
@@ -13,10 +13,12 @@ stdenv.mkDerivation rec {
     sha256 = "1cchmi08jpjypgmm9i7xzh5qfg2q5k61kry9ns8mhw3z44a440ym";
   };
 
+  outputs = [ "dev" "out" ]; # to deal with propagatedBuildInputs
+
   configureFlags = "--with-ca-certificates=/etc/ssl/certs/ca-certificates.crt";
 
   preBuild = ''
-    sed -e "s@${glib}/lib/gio/modules@$out/lib/gio/modules@g" -i $(find . -name Makefile)
+    sed -e "s@${glib.out}/lib/gio/modules@$out/lib/gio/modules@g" -i $(find . -name Makefile)
   '';
 
   nativeBuildInputs = [ pkgconfig intltool ];
diff --git a/pkgs/development/libraries/glib/default.nix b/pkgs/development/libraries/glib/default.nix
index 9dd927d55ced..120d398bd44d 100644
--- a/pkgs/development/libraries/glib/default.nix
+++ b/pkgs/development/libraries/glib/default.nix
@@ -31,12 +31,12 @@ let
   # This is intended to be run in postInstall of any package
   # which has $out/include/ containing just some disjunct directories.
   flattenInclude = ''
-    for dir in "$out"/include/*; do
-      cp -r "$dir"/* "$out/include/"
+    for dir in "''${!outputInclude}"/include/*; do
+      cp -r "$dir"/* "''${!outputInclude}/include/"
       rm -r "$dir"
       ln -s . "$dir"
     done
-    ln -sr -t "$out/include/" "$out"/lib/*/include/* 2>/dev/null || true
+    ln -sr -t "''${!outputInclude}/include/" "''${!outputInclude}"/lib/*/include/* 2>/dev/null || true
   '';
 
   ver_maj = "2.46";
@@ -53,21 +53,22 @@ stdenv.mkDerivation rec {
 
   patches = optional stdenv.isDarwin ./darwin-compilation.patch ++ optional doCheck ./skip-timer-test.patch;
 
+  outputs = [ "dev" "out" "docdev" ];
+  outputBin = "dev";
+
   setupHook = ./setup-hook.sh;
 
-  buildInputs = [ libelf ]
+  buildInputs = [ libelf setupHook pcre ]
     ++ optionals doCheck [ tzdata libxml2 desktop_file_utils shared_mime_info ];
 
   nativeBuildInputs = [ pkgconfig gettext perl python ];
 
-  propagatedBuildInputs = [ pcre zlib libffi libiconv ]
+  propagatedBuildInputs = [ zlib libffi libiconv ]
     ++ libintlOrEmpty;
 
-  LIBELF_CFLAGS = optional stdenv.isFreeBSD "-I${libelf}";
-  LIBELF_LIBS = optional stdenv.isFreeBSD "-L${libelf} -lelf";
-
-  configureFlags =
-    optional stdenv.isDarwin "--disable-compile-warnings"
+  # internal pcre would only add <200kB, but it's relatively common
+  configureFlags = [ "--with-pcre=system" ]
+    ++ optional stdenv.isDarwin "--disable-compile-warnings"
     ++ optional (stdenv.isFreeBSD || stdenv.isSunOS) "--with-libiconv=gnu"
     ++ optional stdenv.isSunOS "--disable-dtrace";
 
@@ -79,6 +80,9 @@ stdenv.mkDerivation rec {
       sed -i -e 's|inotify.h|foobar-inotify.h|g' configure
     '';
 
+  LIBELF_CFLAGS = optional stdenv.isFreeBSD "-I${libelf}";
+  LIBELF_LIBS = optional stdenv.isFreeBSD "-L${libelf} -lelf";
+
   preBuild = optionalString stdenv.isDarwin
     ''
       export MACOSX_DEPLOYMENT_TARGET=
@@ -87,6 +91,12 @@ stdenv.mkDerivation rec {
   enableParallelBuilding = true;
   DETERMINISTIC_BUILD = 1;
 
+  postInstall = ''
+    moveToOutput "share/glib-2.0" "$dev"
+    substituteInPlace "$dev/bin/gdbus-codegen" --replace "$out" "$dev"
+    sed -i "$dev/bin/glib-gettextize" -e "s|^gettext_dir=.*|gettext_dir=$dev/share/glib-2.0/gettext|"
+  '';
+
   inherit doCheck;
   preCheck = optionalString doCheck
     '' export LD_LIBRARY_PATH="$NIX_BUILD_TOP/${name}/glib/.libs:$LD_LIBRARY_PATH"
@@ -95,7 +105,7 @@ stdenv.mkDerivation rec {
        export XDG_RUNTIME_HOME="$TMP"
        export HOME="$TMP"
        export XDG_DATA_DIRS="${desktop_file_utils}/share:${shared_mime_info}/share"
-       export G_TEST_DBUS_DAEMON="${dbus_daemon}/bin/dbus-daemon"
+       export G_TEST_DBUS_DAEMON="${dbus_daemon.out}/bin/dbus-daemon"
 
        substituteInPlace gio/tests/desktop-files/home/applications/epiphany-weather-for-toronto-island-9c6a4e022b17686306243dada811d550d25eb1fb.desktop --replace "Exec=/bin/true" "Exec=${coreutils}/bin/true"
        # Needs machine-id, comment the test
@@ -109,8 +119,6 @@ stdenv.mkDerivation rec {
        sed -e '/g_subprocess_launcher_set_environ (launcher, envp);/a g_subprocess_launcher_setenv (launcher, "PATH", g_getenv("PATH"), TRUE);' -i gio/tests/gsubprocess.c
     '';
 
-  postInstall = ''rm -rvf $out/share/gtk-doc'';
-
   passthru = {
      gioModuleDir = "lib/gio/modules";
      inherit flattenInclude;
diff --git a/pkgs/development/libraries/glib/setup-hook.sh b/pkgs/development/libraries/glib/setup-hook.sh
index ca7e326bd02e..c5cf293902cd 100644
--- a/pkgs/development/libraries/glib/setup-hook.sh
+++ b/pkgs/development/libraries/glib/setup-hook.sh
@@ -1,5 +1,3 @@
-# Install gschemas, if any, in a package-specific directory
-installFlagsArray+=("gsettingsschemadir=$out/share/gsettings-schemas/$name/glib-2.0/schemas/")
 
 make_glib_find_gsettings_schemas() {
     # For packages that need gschemas of other packages (e.g. empathy)
@@ -7,17 +5,22 @@ make_glib_find_gsettings_schemas() {
         addToSearchPath GSETTINGS_SCHEMAS_PATH "$1/share/gsettings-schemas/"*
     fi
 }
-
 envHooks+=(make_glib_find_gsettings_schemas)
 
+# Install gschemas, if any, in a package-specific directory
+glibPreInstallPhase() {
+  installFlagsArray+=("gsettingsschemadir=${!outputLib}/share/gsettings-schemas/$name/glib-2.0/schemas/")
+}
+preInstallPhases+=(glibPreInstallPhase)
+
 glibPreFixupPhase() {
     # Move gschemas in case the install flag didn't help
-    if [ -d "$out/share/glib-2.0/schemas" ]; then
-        mkdir -p "$out/share/gsettings-schemas/$name/glib-2.0"
-        mv "$out/share/glib-2.0/schemas" "$out/share/gsettings-schemas/$name/glib-2.0/"
+    if [ -d "${!outputLib}/share/glib-2.0/schemas" ]; then
+        mkdir -p "${!outputLib}/share/gsettings-schemas/$name/glib-2.0"
+        mv "${!outputLib}/share/glib-2.0/schemas" "${!outputLib}/share/gsettings-schemas/$name/glib-2.0/"
     fi
 
-    addToSearchPath GSETTINGS_SCHEMAS_PATH "$out/share/gsettings-schemas/$name"
+    addToSearchPath GSETTINGS_SCHEMAS_PATH "${!outputLib}/share/gsettings-schemas/$name"
 }
+preFixupPhases+=(glibPreFixupPhase)
 
-preFixupPhases="$preFixupPhases glibPreFixupPhase"
diff --git a/pkgs/development/libraries/glibc/builder.sh b/pkgs/development/libraries/glibc/builder.sh
index d60b143a1eca..85f27c7b3559 100644
--- a/pkgs/development/libraries/glibc/builder.sh
+++ b/pkgs/development/libraries/glibc/builder.sh
@@ -12,8 +12,10 @@ postConfigure() {
 
     export NIX_DONT_SET_RPATH=1
     unset CFLAGS
-}
 
+    # Apparently --bindir is not respected.
+    makeFlagsArray+=("bindir=$bin/bin" "sbindir=$bin/sbin" "rootsbindir=$bin/sbin")
+}
 
 postInstall() {
     if test -n "$installLocales"; then
@@ -25,7 +27,7 @@ postInstall() {
     if test -n "$linuxHeaders"; then
         # Include the Linux kernel headers in Glibc, except the `scsi'
         # subdirectory, which Glibc provides itself.
-        (cd $out/include && \
+        (cd $dev/include && \
          ln -sv $(ls -d $linuxHeaders/include/* | grep -v 'scsi$') .)
     fi
 
@@ -41,6 +43,16 @@ postInstall() {
     for i in $out/lib/*.a; do
         strip -S "$i"
     done
+    # Put libraries for static linking in a separate output.  Note
+    # that libc_nonshared.a and libpthread_nonshared.a are required
+    # for dynamically-linked applications.
+    mkdir -p $static/lib
+    mv $out/lib/*.a $static/lib
+    mv $static/lib/lib*_nonshared.a $out/lib
+
+    # Work around a Nix bug: hard links across outputs cause a build failure.
+    cp $bin/bin/getconf $bin/bin/getconf_
+    mv $bin/bin/getconf_ $bin/bin/getconf
 }
 
 genericBuild
diff --git a/pkgs/development/libraries/glibc/common.nix b/pkgs/development/libraries/glibc/common.nix
index 13d5adcd9b13..893f65c3e205 100644
--- a/pkgs/development/libraries/glibc/common.nix
+++ b/pkgs/development/libraries/glibc/common.nix
@@ -112,6 +112,8 @@ stdenv.mkDerivation ({
 
   installFlags = [ "sysconfdir=$(out)/etc" ];
 
+  outputs = [ "dev" "out" "bin" "static" ];
+
   buildInputs = lib.optionals (cross != null) [ gccCross ]
     ++ lib.optionals withGd [ gd libpng ];
 
diff --git a/pkgs/development/libraries/glibc/default.nix b/pkgs/development/libraries/glibc/default.nix
index 2630cdb127f7..80fc2ce1e93d 100644
--- a/pkgs/development/libraries/glibc/default.nix
+++ b/pkgs/development/libraries/glibc/default.nix
@@ -64,7 +64,7 @@ in
 
       # To avoid a dependency on the build system 'bash'.
       preFixup = ''
-        rm $out/bin/{ldd,tzselect,catchsegv,xtrace}
+        rm $bin/bin/{ldd,tzselect,catchsegv,xtrace}
       '';
     }
    else {}))
diff --git a/pkgs/development/libraries/glibc/info.nix b/pkgs/development/libraries/glibc/info.nix
index 1e60856430db..84ec43e11a85 100644
--- a/pkgs/development/libraries/glibc/info.nix
+++ b/pkgs/development/libraries/glibc/info.nix
@@ -8,6 +8,8 @@ build null {
 
   inherit fetchurl stdenv lib;
 
+  outputs = [ "out" ];
+
   configureFlags = [ "--enable-add-ons" ];
 
   buildInputs = [ texinfo perl ];
diff --git a/pkgs/development/libraries/glibc/locales.nix b/pkgs/development/libraries/glibc/locales.nix
index 9607d7ecb223..994390cf8290 100644
--- a/pkgs/development/libraries/glibc/locales.nix
+++ b/pkgs/development/libraries/glibc/locales.nix
@@ -18,6 +18,8 @@ build null {
 
   builder = ./locales-builder.sh;
 
+  outputs = [ "out" ];
+
   # Awful hack: `localedef' doesn't allow the path to `locale-archive'
   # to be overriden, but you *can* specify a prefix, i.e. it will use
   # <prefix>/<path-to-glibc>/lib/locale/locale-archive.  So we use
@@ -25,7 +27,7 @@ build null {
   # $TMPDIR/nix/store/...-glibc-.../lib/locale/locale-archive.
   buildPhase =
     ''
-      mkdir -p $TMPDIR/"$(dirname $(readlink -f $(type -p localedef)))/../lib/locale"
+      mkdir -p $TMPDIR/"${stdenv.cc.libc.out}/lib/locale"
 
       # Hack to allow building of the locales (needed since glibc-2.12)
       sed -i -e 's,^$(rtld-prefix) $(common-objpfx)locale/localedef,localedef --prefix='$TMPDIR',' ../glibc-2*/localedata/Makefile
diff --git a/pkgs/development/libraries/glibc/multi.nix b/pkgs/development/libraries/glibc/multi.nix
index b5b4eabe9c74..0d7bed99f22f 100644
--- a/pkgs/development/libraries/glibc/multi.nix
+++ b/pkgs/development/libraries/glibc/multi.nix
@@ -3,32 +3,26 @@
 
 let
   nameVersion = builtins.parseDrvName glibc.name;
+  glibc64 = glibc;
 in
 runCommand "${nameVersion.name}-multi-${nameVersion.version}"
-  { inherit glibc32;
-   glibc64 = glibc;
-  }
+  { outputs = [ "dev" "out" "bin" ]; } # TODO: no static version here (yet)
   ''
-    mkdir -p $out
-    ln -s $glibc64/* $out/
-
-    rm $out/lib $out/lib64
-    mkdir -p $out/lib
-    ln -s $glibc64/lib/* $out/lib
-    ln -s $glibc32/lib $out/lib/32
-    ln -s lib $out/lib64
+    mkdir -p "$out/lib"
+    ln -s '${glibc64.out}'/lib/* "$out/lib"
+    ln -s '${glibc32.out}/lib' "$out/lib/32"
+    ln -s lib "$out/lib64"
 
     # fixing ldd RLTDLIST
-    rm $out/bin
-    cp -rs $glibc64/bin $out
-    chmod u+w $out/bin
-    rm $out/bin/ldd
+    mkdir -p "$bin/bin"
+    cp -s '${glibc64.bin}'/bin/* "$bin/bin/"
+    rm "$bin/bin/ldd"
     sed -e "s|^RTLDLIST=.*$|RTLDLIST=\"$out/lib/ld-linux-x86-64.so.2 $out/lib/32/ld-linux.so.2\"|g" \
-        $glibc64/bin/ldd > $out/bin/ldd
-    chmod 555 $out/bin/ldd
+        '${glibc64.bin}/bin/ldd' > "$bin/bin/ldd"
+    chmod +x "$bin/bin/ldd"
 
-    rm $out/include
-    cp -rs $glibc32/include $out
-    chmod -R u+w $out/include
-    cp -rsf $glibc64/include $out
+    mkdir "$dev"
+    cp -rs '${glibc32}'/include "$dev/"
+    chmod +w -R "$dev"
+    cp -rsf '${glibc64}'/include "$dev/"
   ''
diff --git a/pkgs/development/libraries/gmime/default.nix b/pkgs/development/libraries/gmime/default.nix
index 6564fc511867..ee81aec07976 100644
--- a/pkgs/development/libraries/gmime/default.nix
+++ b/pkgs/development/libraries/gmime/default.nix
@@ -8,9 +8,13 @@ stdenv.mkDerivation rec {
     sha256 = "0rfzbgsh8ira5p76kdghygl5i3fvmmx4wbw5rp7f8ajc4vxp18g0";
   };
 
+  outputs = [ "dev" "out" ];
+
   nativeBuildInputs = [ pkgconfig ];
   propagatedBuildInputs = [ glib zlib libgpgerror ];
 
+  enableParallelBuilding = true;
+
   meta = {
     homepage = http://spruce.sourceforge.net/gmime/;
     description = "A C/C++ library for manipulating MIME messages";
diff --git a/pkgs/development/libraries/gmp/5.1.x.nix b/pkgs/development/libraries/gmp/5.1.x.nix
index 7b393067ff52..0768df60a794 100644
--- a/pkgs/development/libraries/gmp/5.1.x.nix
+++ b/pkgs/development/libraries/gmp/5.1.x.nix
@@ -10,6 +10,8 @@ stdenv.mkDerivation rec {
     sha256 = "0q5i39pxrasgn9qdxzpfbwhh11ph80p57x6hf48m74261d97j83m";
   };
 
+  outputs = [ "out" "info" ];
+
   nativeBuildInputs = [ m4 ];
 
   patches = if stdenv.isDarwin then [ ./need-size-t.patch ] else null;
diff --git a/pkgs/development/libraries/gmp/6.x.nix b/pkgs/development/libraries/gmp/6.x.nix
index 5025557458cd..a7443c02c5b6 100644
--- a/pkgs/development/libraries/gmp/6.x.nix
+++ b/pkgs/development/libraries/gmp/6.x.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, m4, cxx ? true, withStatic ? true }:
+{ stdenv, fetchurl, m4, cxx ? true, withStatic ? false }:
 
 with { inherit (stdenv.lib) optional optionalString; };
 
-stdenv.mkDerivation rec {
+let self = stdenv.mkDerivation rec {
   name = "gmp-6.1.0";
 
   src = fetchurl { # we need to use bz2, others aren't in bootstrapping stdenv
@@ -10,6 +10,12 @@ stdenv.mkDerivation rec {
     sha256 = "1s3kddydvngqrpc6i1vbz39raya2jdcl042wi0ksbszgjjllk129";
   };
 
+  #outputs TODO: split $cxx due to libstdc++ dependency; maybe port to gmp5;
+  # maybe let ghc use a version with *.so shared with rest of nixpkgs and *.a added
+  # - see #5855 for related discussion
+  outputs = [ "dev" "out" "info" ];
+  passthru.static = self.out;
+
   nativeBuildInputs = [ m4 ];
 
   configureFlags =
@@ -69,4 +75,5 @@ stdenv.mkDerivation rec {
     platforms = platforms.all;
     maintainers = [ maintainers.simons ];
   };
-}
+};
+  in self
diff --git a/pkgs/development/libraries/gnutls/generic.nix b/pkgs/development/libraries/gnutls/generic.nix
index e51b77eb5b07..b54ea52b880b 100644
--- a/pkgs/development/libraries/gnutls/generic.nix
+++ b/pkgs/development/libraries/gnutls/generic.nix
@@ -13,7 +13,8 @@ stdenv.mkDerivation {
 
   inherit src patches postPatch;
 
-  outputs = [ "out" "man" ];
+  outputs = [ "dev" "out" "bin" "man" "docdev" ];
+  outputInfo = "docdev";
 
   configureFlags =
     lib.optional stdenv.isLinux "--with-default-trust-store-file=/etc/ssl/certs/ca-certificates.crt"
@@ -34,8 +35,6 @@ stdenv.mkDerivation {
     ++ [ unbound ]
     ++ lib.optional guileBindings guile;
 
-  # AutoreconfHook is temporary until the patch lands upstream to fix
-  # header file generation with parallel building
   nativeBuildInputs = [ perl pkgconfig ] ++ nativeBuildInputs;
 
   # XXX: Gnulib's `test-select' fails on FreeBSD:
@@ -45,9 +44,10 @@ stdenv.mkDerivation {
   # Fixup broken libtool and pkgconfig files
   preFixup = lib.optionalString (!stdenv.isDarwin) ''
     sed ${lib.optionalString tpmSupport "-e 's,-ltspi,-L${trousers}/lib -ltspi,'"} \
-        -e 's,-lz,-L${zlib}/lib -lz,' \
-        -e 's,-lgmp,-L${gmp}/lib -lgmp,' \
-        -i $out/lib/libgnutls.la $out/lib/pkgconfig/gnutls.pc
+        -e 's,-lz,-L${zlib.out}/lib -lz,' \
+        -e 's,-L${gmp.dev}/lib,-L${gmp.out}/lib,' \
+        -e 's,-lgmp,-L${gmp.out}/lib -lgmp,' \
+        -i $out/lib/*.la "$dev/lib/pkgconfig/gnutls.pc"
   '';
 
   meta = with lib; {
diff --git a/pkgs/development/libraries/gobject-introspection/default.nix b/pkgs/development/libraries/gobject-introspection/default.nix
index e13ce337f388..47ccb17e4845 100644
--- a/pkgs/development/libraries/gobject-introspection/default.nix
+++ b/pkgs/development/libraries/gobject-introspection/default.nix
@@ -19,20 +19,21 @@ stdenv.mkDerivation rec {
     sha256 = "6658bd3c2b8813eb3e2511ee153238d09ace9d309e4574af27443d87423e4233";
   };
 
-  buildInputs = [ flex bison pkgconfig python ]
+  outputs = [ "dev" "out" ];
+  outputBin = "dev";
+  outputMan = "dev"; # tiny pages
+
+  buildInputs = [ flex bison pkgconfig python setupHook/*move .gir*/ ]
     ++ libintlOrEmpty
     ++ stdenv.lib.optional stdenv.isDarwin cctools;
   propagatedBuildInputs = [ libffi glib ];
 
-  # The '--disable-tests' flag is no longer recognized, so can be safely removed
-  # next time this package changes.
-  configureFlags = [ "--disable-tests" ];
-
   preConfigure = ''
     sed 's|/usr/bin/env ||' -i tools/g-ir-tool-template.in
   '';
 
-  postInstall = "rm -rf $out/share/gtk-doc";
+  # outputs TODO: share/gobject-introspection-1.0/tests is needed during build
+  # by pygobject3 (and maybe others), but it's only searched in $out
 
   setupHook = ./setup-hook.sh;
 
diff --git a/pkgs/development/libraries/gobject-introspection/setup-hook.sh b/pkgs/development/libraries/gobject-introspection/setup-hook.sh
index d411ad69dc43..583d8475ec3b 100644
--- a/pkgs/development/libraries/gobject-introspection/setup-hook.sh
+++ b/pkgs/development/libraries/gobject-introspection/setup-hook.sh
@@ -12,3 +12,10 @@ make_gobject_introspection_find_gir_files() {
 }
 
 envHooks+=(make_gobject_introspection_find_gir_files)
+
+_multioutMoveGlibGir() {
+  moveToOutput share/gir-1.0 "${!outputDev}"
+}
+
+preFixupHooks+=(_multioutMoveGlibGir)
+
diff --git a/pkgs/development/libraries/gpgme/default.nix b/pkgs/development/libraries/gpgme/default.nix
index 4572387e2252..c60311423233 100644
--- a/pkgs/development/libraries/gpgme/default.nix
+++ b/pkgs/development/libraries/gpgme/default.nix
@@ -16,6 +16,9 @@ stdenv.mkDerivation rec {
     sha256 = "17892sclz3yg45wbyqqrzzpq3l0icbnfl28f101b3062g8cy97dh";
   };
 
+  outputs = [ "dev" "out" "info" ];
+  outputBin = "dev"; # gpgme-config; not so sure about gpgme-tool
+
   propagatedBuildInputs = [ libgpgerror glib libassuan pth ];
 
   nativeBuildInputs = [ pkgconfig gnupg ];
@@ -25,11 +28,11 @@ stdenv.mkDerivation rec {
     "--enable-fixed-path=${gpgStorePath}/bin"
   ];
 
-  meta = {
+  meta = with stdenv.lib; {
     homepage = "http://www.gnupg.org/related_software/gpgme";
     description = "Library for making GnuPG easier to use";
-    license = stdenv.lib.licenses.gpl2;
-    platforms = stdenv.lib.platforms.unix;
-    maintainers = with stdenv.lib.maintainers; [ fuuzetsu ];
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.fuuzetsu ];
   };
 }
diff --git a/pkgs/development/libraries/gstreamer/default.nix b/pkgs/development/libraries/gstreamer/default.nix
index 81e5726fa946..3118caffb11a 100644
--- a/pkgs/development/libraries/gstreamer/default.nix
+++ b/pkgs/development/libraries/gstreamer/default.nix
@@ -1,4 +1,4 @@
-{ callPackage }:
+{ callPackage, libva-full }:
 
 rec {
   gstreamer = callPackage ./core { };
@@ -21,7 +21,10 @@ rec {
   # (Non Linear Engine).
   gst-editing-services = callPackage ./ges { inherit gnonlin; };
 
-  gst-vaapi = callPackage ./vaapi { inherit gst-plugins-base gstreamer gst-plugins-bad; };
+  gst-vaapi = callPackage ./vaapi {
+    inherit gst-plugins-base gstreamer gst-plugins-bad;
+    libva = libva-full; # looks also for libva-{x11,wayland}
+  };
 
   gst-validate = callPackage ./validate { inherit gst-plugins-base; };
 }
diff --git a/pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/default.nix b/pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/default.nix
index dc39bddc232f..191c1f6b0f2c 100644
--- a/pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/default.nix
+++ b/pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/default.nix
@@ -1,7 +1,7 @@
 { fetchurl, stdenv, pkgconfig, gst_plugins_base, aalib, cairo
 , flac, libjpeg, zlib, speex, libpng, libdv, libcaca, libvpx
 , libiec61883, libavc1394, taglib, libpulseaudio, gdk_pixbuf, orc
-, glib, gstreamer, bzip2, libsoup, libshout, libintlOrEmpty
+, glib, gstreamer, bzip2, libsoup, libshout, ncurses, libintlOrEmpty
 , # Whether to build no plugins that have external dependencies
   # (except the PulseAudio plugin).
   minimalDeps ? false
@@ -34,6 +34,11 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
+  postInstall = ''
+    substituteInPlace $out/lib/gstreamer-0.10/libgstaasink.la \
+      --replace "${ncurses.dev}/lib" "${ncurses.out}/lib"
+  '';
+
   meta = {
     homepage = http://gstreamer.freedesktop.org;
 
diff --git a/pkgs/development/libraries/gstreamer/vaapi/default.nix b/pkgs/development/libraries/gstreamer/vaapi/default.nix
index 015aa4e07f5d..bf061b4125b5 100644
--- a/pkgs/development/libraries/gstreamer/vaapi/default.nix
+++ b/pkgs/development/libraries/gstreamer/vaapi/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, gst-plugins-base, bzip2, libva
+{ stdenv, fetchurl, pkgconfig, gst-plugins-base, bzip2, libva, wayland
 , libdrm, udev, xorg, mesa, yasm, gstreamer, gst-plugins-bad, nasm
 , libvpx
 }:
@@ -14,8 +14,10 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = with stdenv.lib; [ pkgconfig bzip2 ];
 
-  buildInputs = with stdenv.lib; [ gstreamer gst-plugins-base gst-plugins-bad libva libdrm udev
-    xorg.libX11 xorg.libXext xorg.libXv xorg.libXrandr xorg.libSM xorg.libICE mesa nasm libvpx ];
+  buildInputs = [
+    gstreamer gst-plugins-base gst-plugins-bad libva wayland libdrm udev
+    xorg.libX11 xorg.libXext xorg.libXv xorg.libXrandr xorg.libSM xorg.libICE mesa nasm libvpx
+  ];
 
   preConfigure = "
     export GST_PLUGIN_PATH_1_0=$out/lib/gstreamer-1.0
diff --git a/pkgs/development/libraries/gtk+/2.x.nix b/pkgs/development/libraries/gtk+/2.x.nix
index 8830e1425b68..d4d4cddb4023 100644
--- a/pkgs/development/libraries/gtk+/2.x.nix
+++ b/pkgs/development/libraries/gtk+/2.x.nix
@@ -15,11 +15,16 @@ stdenv.mkDerivation rec {
     sha256 = "1f1ifv1ijrda4jx831l24d3ww65v5gf56r464fi11n6k02bcah87";
   };
 
+  outputs = [ "dev" "out" "docdev" ];
+  outputBin = "dev";
+
   enableParallelBuilding = true;
 
   NIX_CFLAGS_COMPILE = stdenv.lib.optionalString (libintlOrEmpty != []) "-lintl";
 
-  nativeBuildInputs = [ perl pkgconfig gettext ];
+  setupHook = ./setup-hook.sh;
+
+  nativeBuildInputs = [ setupHook perl pkgconfig gettext ];
 
   propagatedBuildInputs = with xorg; with stdenv.lib;
     [ glib cairo pango gdk_pixbuf atk ]
@@ -35,7 +40,9 @@ stdenv.mkDerivation rec {
     then "--disable-glibtest --disable-introspection --disable-visibility"
     else "--with-xinput=yes";
 
-  postInstall = "rm -rf $out/share/gtk-doc";
+  postInstall = ''
+    moveToOutput share/gtk-2.0/demo "$docdev"
+  '';
 
   passthru = {
     gtkExeEnvPostBuild = ''
diff --git a/pkgs/development/libraries/gtk+/3.x.nix b/pkgs/development/libraries/gtk+/3.x.nix
index f738f76ca029..a2da4c7b0339 100644
--- a/pkgs/development/libraries/gtk+/3.x.nix
+++ b/pkgs/development/libraries/gtk+/3.x.nix
@@ -1,12 +1,11 @@
 { stdenv, fetchurl, pkgconfig, gettext, perl
 , expat, glib, cairo, pango, gdk_pixbuf, atk, at_spi2_atk, gobjectIntrospection
-, xlibs, x11, wayland, libxkbcommon, epoxy
+, xorg, wayland, epoxy, json_glib, libxkbcommon, gmp
 , xineramaSupport ? stdenv.isLinux
 , cupsSupport ? stdenv.isLinux, cups ? null
 , darwin
 }:
 
-assert xineramaSupport -> xlibs.libXinerama != null;
 assert cupsSupport -> cups != null;
 
 with stdenv.lib;
@@ -24,17 +23,22 @@ stdenv.mkDerivation rec {
     sha256 = "107aeb9a4244ce3c044becdd6dffc32d83202595181597180d4c736302a71852";
   };
 
+  outputs = [ "dev" "out" ];
+  outputBin = "dev";
+
   nativeBuildInputs = [ pkgconfig gettext gobjectIntrospection perl ];
 
-  buildInputs = [ libxkbcommon epoxy ];
-  propagatedBuildInputs = with xlibs; with stdenv.lib;
-    [ expat glib cairo pango gdk_pixbuf atk at_spi2_atk libXrandr libXrender libXcomposite libXi libXcursor ]
+  buildInputs = [ libxkbcommon epoxy json_glib ];
+  propagatedBuildInputs = with xorg; with stdenv.lib;
+    [ expat glib cairo pango gdk_pixbuf atk at_spi2_atk
+      libXrandr libXrender libXcomposite libXi libXcursor libSM libICE ]
     ++ optionals stdenv.isLinux [ wayland ]
     ++ optional stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ AppKit Cocoa ])
     ++ optional xineramaSupport libXinerama
     ++ optional cupsSupport cups;
+  #TODO: colord?
 
-  NIX_LDFLAGS = if stdenv.isDarwin then "-lintl" else null;
+  NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isDarwin "-lintl";
 
   # demos fail to install, no idea where's the problem
   preConfigure = "sed '/^SRC_SUBDIRS /s/demos//' -i Makefile.in";
@@ -49,7 +53,10 @@ stdenv.mkDerivation rec {
     "--enable-quartz-backend"
   ];
 
-  postInstall = "rm -rf $out/share/gtk-doc";
+  postInstall = ''
+    substituteInPlace "$out/lib/gtk-3.0/3.0.0/printbackends/libprintbackend-cups.la" \
+      --replace '-L${gmp.dev}/lib' '-L${gmp.out}/lib'
+  '';
 
   passthru = {
     gtkExeEnvPostBuild = ''
@@ -58,7 +65,7 @@ stdenv.mkDerivation rec {
     ''; # workaround for bug of nix-mode for Emacs */ '';
   };
 
-  meta = {
+  meta = with stdenv.lib; {
     description = "A multi-platform toolkit for creating graphical user interfaces";
 
     longDescription = ''
@@ -74,9 +81,9 @@ stdenv.mkDerivation rec {
 
     homepage = http://www.gtk.org/;
 
-    license = stdenv.lib.licenses.lgpl2Plus;
+    license = licenses.lgpl2Plus;
 
-    maintainers = with stdenv.lib.maintainers; [ urkud raskin vcunat lethalman ];
-    platforms = stdenv.lib.platforms.all;
+    maintainers = with maintainers; [ urkud raskin vcunat lethalman ];
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/development/libraries/gtk+/setup-hook.sh b/pkgs/development/libraries/gtk+/setup-hook.sh
new file mode 100644
index 000000000000..c2b0ab502db7
--- /dev/null
+++ b/pkgs/development/libraries/gtk+/setup-hook.sh
@@ -0,0 +1,10 @@
+fixupOutputHooks+=(_gtk2CleanComments)
+
+# Clean comments that link to generator of the file
+_gtk2CleanComments() {
+    local f="$prefix/lib/gtk-2.0/2.10.0/immodules.cache"
+    if [ -f "$f" ]; then
+        sed 's|Created by .*bin/gtk-query-|Created by bin/gtk-query-|' -i "$f"
+    fi
+}
+
diff --git a/pkgs/development/libraries/gupnp/default.nix b/pkgs/development/libraries/gupnp/default.nix
index 6145c8c49477..45f5217d3c91 100644
--- a/pkgs/development/libraries/gupnp/default.nix
+++ b/pkgs/development/libraries/gupnp/default.nix
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 
   postInstall = ''
     ln -sv ${libsoup}/include/*/libsoup $out/include
-    ln -sv ${libxml2}/include/*/libxml $out/include
+    ln -sv ${libxml2.dev}/include/*/libxml $out/include
     ln -sv ${gssdp}/include/*/libgssdp $out/include
   '';
 
diff --git a/pkgs/development/libraries/gvfs/default.nix b/pkgs/development/libraries/gvfs/default.nix
index d2a958faed8b..37403f50e2b1 100644
--- a/pkgs/development/libraries/gvfs/default.nix
+++ b/pkgs/development/libraries/gvfs/default.nix
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ pkgconfig intltool libtool ];
 
   buildInputs =
-    [ makeWrapper glib dbus.libs udev libgudev udisks2 libgcrypt
+    [ makeWrapper glib dbus udev libgudev udisks2 libgcrypt
       libgphoto2 avahi libarchive fuse libcdio
       libxml2 libxslt docbook_xsl samba libmtp
       # ToDo: a ligther version of libsoup to have FTP/HTTP support?
diff --git a/pkgs/development/libraries/harfbuzz/default.nix b/pkgs/development/libraries/harfbuzz/default.nix
index d2546ebd496d..2d84b1e73a82 100644
--- a/pkgs/development/libraries/harfbuzz/default.nix
+++ b/pkgs/development/libraries/harfbuzz/default.nix
@@ -1,38 +1,49 @@
 { stdenv, fetchurl, pkgconfig, glib, freetype, cairo, libintlOrEmpty
-, icu, graphite2
+, icu, graphite2, harfbuzz # The icu variant uses and propagates the non-icu one.
 , withIcu ? false # recommended by upstream as default, but most don't needed and it's big
 , withGraphite2 ? true # it is small and major distros do include it
 }:
 
-# TODO: split non-icu and icu lib into different outputs?
-# (icu is a ~30 MB dependency, the rest is very small in comparison)
+let
+  version = "1.1.2";
+  inherit (stdenv.lib) optional optionals optionalString;
+in
 
-stdenv.mkDerivation rec {
-  name = "harfbuzz-1.1.2";
+stdenv.mkDerivation {
+  name = "harfbuzz${optionalString withIcu "-icu"}-${version}";
 
   src = fetchurl {
-    url = "http://www.freedesktop.org/software/harfbuzz/release/${name}.tar.bz2";
+    url = "http://www.freedesktop.org/software/harfbuzz/release/harfbuzz-${version}.tar.bz2";
     sha256 = "07s6z3hbrb4rdfgzmln169wxz4nm5y7qbr02ik5c7drxpn85fb2a";
   };
 
-  outputs = [ "out" "doc" ];
+  outputs = [ "dev" "out" ];
+  outputBin = "dev";
 
   configureFlags = [
     ( "--with-graphite2=" + (if withGraphite2 then "yes" else "no") ) # not auto-detected by default
     ( "--with-icu=" +       (if withIcu       then "yes" else "no") )
   ];
 
-  buildInputs = [ pkgconfig glib freetype cairo ] # recommended by upstream
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ glib freetype cairo ] # recommended by upstream
     ++ libintlOrEmpty;
   propagatedBuildInputs = []
-    ++ stdenv.lib.optional withGraphite2 graphite2
-    ++ stdenv.lib.optional withIcu icu
+    ++ optional withGraphite2 graphite2
+    ++ optionals withIcu [ icu harfbuzz ]
     ;
 
-  meta = {
+  # Slightly hacky; some pkgs expect them in a single directory.
+  postInstall = optionalString withIcu ''
+    rm "$out"/lib/libharfbuzz.* "$dev/lib/pkgconfig/harfbuzz.pc"
+    ln -s {'${harfbuzz.out}',"$out"}/lib/libharfbuzz.la
+    ln -s {'${harfbuzz.dev}',"$dev"}/lib/pkgconfig/harfbuzz.pc
+  '';
+
+  meta = with stdenv.lib; {
     description = "An OpenType text shaping engine";
     homepage = http://www.freedesktop.org/wiki/Software/HarfBuzz;
-    maintainers = [ stdenv.lib.maintainers.eelco ];
-    platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+    maintainers = [ maintainers.eelco ];
+    platforms = with platforms; linux ++ darwin;
   };
 }
diff --git a/pkgs/development/libraries/hunspell/default.nix b/pkgs/development/libraries/hunspell/default.nix
index 98f6511f3917..0d0ff38fb47f 100644
--- a/pkgs/development/libraries/hunspell/default.nix
+++ b/pkgs/development/libraries/hunspell/default.nix
@@ -8,8 +8,10 @@ stdenv.mkDerivation rec {
     sha256 = "0v14ff9s37vkh45diaddndcrj0hmn67arh8xh8k79q9c1vgc1cm7";
   };
 
-  propagatedBuildInputs = [ ncurses readline ];
-  configureFlags = "--with-ui --with-readline";
+  outputs = [ "dev" "out" "bin" "man" ];
+
+  buildInputs = [ ncurses readline ];
+  configureFlags = [ "--with-ui" "--with-readline" ];
 
   meta = with stdenv.lib; {
     homepage = http://hunspell.sourceforge.net;
diff --git a/pkgs/development/libraries/icu/default.nix b/pkgs/development/libraries/icu/default.nix
index 224e9302baa6..d2604b03f74f 100644
--- a/pkgs/development/libraries/icu/default.nix
+++ b/pkgs/development/libraries/icu/default.nix
@@ -13,6 +13,9 @@ stdenv.mkDerivation ({
     sha256 = "05j86714qaj0lvhvyr2s1xncw6sk0h2dcghb3iiwykbkbh8fjr1s";
   };
 
+  outputs = [ "dev" "out" ];
+  outputBin = "dev";
+
   makeFlags = stdenv.lib.optionalString stdenv.isDarwin
     "CXXFLAGS=-headerpad_max_install_names";
 
@@ -37,6 +40,8 @@ stdenv.mkDerivation ({
     sed -i 's/INSTALL_CMD=.*install/INSTALL_CMD=install/' $out/lib/icu/${version}/pkgdata.inc
   '';
 
+  postFixup = ''moveToOutput lib/icu "$dev" '';
+
   enableParallelBuilding = true;
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/libraries/jasper/default.nix b/pkgs/development/libraries/jasper/default.nix
index 40d54ed400a3..50bebca6b312 100644
--- a/pkgs/development/libraries/jasper/default.nix
+++ b/pkgs/development/libraries/jasper/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, unzip, xorg, libjpeg }:
+{ stdenv, fetchurl, unzip, libjpeg, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   name = "jasper-1.900.1";
@@ -18,11 +18,16 @@ stdenv.mkDerivation rec {
     ./jasper-CVE-2014-9029.diff
   ];
 
-  nativeBuildInputs = [unzip];
+  # newer reconf to recognize a multiout flag
+  nativeBuildInputs = [ unzip autoreconfHook ];
   propagatedBuildInputs = [ libjpeg ];
 
   configureFlags = "--enable-shared";
 
+  outputs = [ "dev" "out" "man" "bin" ];
+
+  enableParallelBuilding = true;
+
   meta = {
     homepage = https://www.ece.uvic.ca/~frodo/jasper/;
     description = "JPEG2000 Library";
diff --git a/pkgs/development/libraries/json-c/default.nix b/pkgs/development/libraries/json-c/default.nix
index ad425f2a3812..d5e0694e0516 100644
--- a/pkgs/development/libraries/json-c/default.nix
+++ b/pkgs/development/libraries/json-c/default.nix
@@ -9,11 +9,13 @@ stdenv.mkDerivation rec {
 
   patches = [ ./unused-variable.patch ];
 
-  buildInputs = [ autoreconfHook ]; # won't configure without it, no idea why
+  outputs = [ "dev" "out" ];
+
+  nativeBuildInputs = [ autoreconfHook ]; # won't configure without it, no idea why
 
   # compatibility hack (for mypaint at least)
   postInstall = ''
-    ln -s json-c.pc "$out/lib/pkgconfig/json.pc"
+    ln -s json-c.pc "$dev/lib/pkgconfig/json.pc"
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/attica.nix b/pkgs/development/libraries/kde-frameworks-5.19/attica.nix
new file mode 100644
index 000000000000..98721876c120
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/attica.nix
@@ -0,0 +1,11 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+}:
+
+kdeFramework {
+  name = "attica";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/baloo.nix b/pkgs/development/libraries/kde-frameworks-5.19/baloo.nix
new file mode 100644
index 000000000000..38c41d9271d8
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/baloo.nix
@@ -0,0 +1,25 @@
+{ kdeFramework, lib, extra-cmake-modules, kauth, kconfig
+, kcoreaddons, kcrash, kdbusaddons, kfilemetadata, ki18n, kidletime
+, kio, lmdb, makeQtWrapper, qtbase, qtquick1, solid
+}:
+
+kdeFramework {
+  name = "baloo";
+  nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
+  buildInputs = [
+    kconfig kcrash kdbusaddons lmdb qtquick1 solid
+  ];
+  propagatedBuildInputs = [
+    kauth kcoreaddons kfilemetadata ki18n kio kidletime qtbase
+  ];
+  postInstall = ''
+    wrapQtProgram "$out/bin/baloo_file"
+    wrapQtProgram "$out/bin/baloo_file_extractor"
+    wrapQtProgram "$out/bin/balooctl"
+    wrapQtProgram "$out/bin/baloosearch"
+    wrapQtProgram "$out/bin/balooshow"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/bluez-qt.nix b/pkgs/development/libraries/kde-frameworks-5.19/bluez-qt.nix
new file mode 100644
index 000000000000..f981b0516f72
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/bluez-qt.nix
@@ -0,0 +1,17 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, qtdeclarative
+}:
+
+kdeFramework {
+  name = "bluez-qt";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ qtdeclarative ];
+  preConfigure = ''
+    substituteInPlace CMakeLists.txt \
+      --replace /lib/udev/rules.d "$out/lib/udev/rules.d"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/breeze-icons.nix b/pkgs/development/libraries/kde-frameworks-5.19/breeze-icons.nix
new file mode 100644
index 000000000000..44cc99daf261
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/breeze-icons.nix
@@ -0,0 +1,10 @@
+{ kdeFramework
+, extra-cmake-modules
+, qtsvg
+}:
+
+kdeFramework {
+  name = "breeze-icons";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ qtsvg ];
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/default.nix b/pkgs/development/libraries/kde-frameworks-5.19/default.nix
new file mode 100644
index 000000000000..bb96048d6ff5
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/default.nix
@@ -0,0 +1,114 @@
+# Maintainer's Notes:
+#
+# How To Update
+#  1. Edit the URL in ./manifest.sh
+#  2. Run ./manifest.sh
+#  3. Fix build errors.
+
+{ pkgs, debug ? false }:
+
+let
+
+  inherit (pkgs) lib makeSetupHook stdenv;
+
+  mirror = "mirror://kde";
+  srcs = import ./srcs.nix { inherit (pkgs) fetchurl; inherit mirror; };
+
+  packages = self: with self; {
+    kdeFramework = args:
+      let
+        inherit (args) name;
+        inherit (srcs."${name}") src version;
+      in stdenv.mkDerivation (args // {
+        name = "${name}-${version}";
+        inherit src;
+
+        outputs = args.outputs or [ "dev" "out" ];
+
+        cmakeFlags =
+          (args.cmakeFlags or [])
+          ++ [ "-DBUILD_TESTING=OFF" ]
+          ++ lib.optional debug "-DCMAKE_BUILD_TYPE=Debug";
+
+        meta = {
+          license = with lib.licenses; [
+            lgpl21Plus lgpl3Plus bsd2 mit gpl2Plus gpl3Plus fdl12
+          ];
+          platforms = lib.platforms.linux;
+          homepage = "http://www.kde.org";
+        } // (args.meta or {});
+      });
+
+    attica = callPackage ./attica.nix {};
+    baloo = callPackage ./baloo.nix {};
+    bluez-qt = callPackage ./bluez-qt.nix {};
+    breeze-icons = callPackage ./breeze-icons.nix {};
+    extra-cmake-modules = callPackage ./extra-cmake-modules {};
+    frameworkintegration = callPackage ./frameworkintegration.nix {};
+    kactivities = callPackage ./kactivities.nix {};
+    kapidox = callPackage ./kapidox.nix {};
+    karchive = callPackage ./karchive.nix {};
+    kauth = callPackage ./kauth {};
+    kbookmarks = callPackage ./kbookmarks.nix {};
+    kcmutils = callPackage ./kcmutils {};
+    kcodecs = callPackage ./kcodecs.nix {};
+    kcompletion = callPackage ./kcompletion.nix {};
+    kconfig = callPackage ./kconfig.nix {};
+    kconfigwidgets = callPackage ./kconfigwidgets {};
+    kcoreaddons = callPackage ./kcoreaddons.nix {};
+    kcrash = callPackage ./kcrash.nix {};
+    kdbusaddons = callPackage ./kdbusaddons.nix {};
+    kdeclarative = callPackage ./kdeclarative.nix {};
+    kded = callPackage ./kded.nix {};
+    kdelibs4support = callPackage ./kdelibs4support {};
+    kdesignerplugin = callPackage ./kdesignerplugin.nix {};
+    kdewebkit = callPackage ./kdewebkit.nix {};
+    kdesu = callPackage ./kdesu.nix {};
+    kdnssd = callPackage ./kdnssd.nix {};
+    kdoctools = callPackage ./kdoctools {};
+    kemoticons = callPackage ./kemoticons.nix {};
+    kfilemetadata = callPackage ./kfilemetadata {};
+    kglobalaccel = callPackage ./kglobalaccel.nix {};
+    kguiaddons = callPackage ./kguiaddons.nix {};
+    khtml = callPackage ./khtml.nix {};
+    ki18n = callPackage ./ki18n.nix {};
+    kiconthemes = callPackage ./kiconthemes {};
+    kidletime = callPackage ./kidletime.nix {};
+    kimageformats = callPackage ./kimageformats.nix {};
+    kinit = callPackage ./kinit {};
+    kio = callPackage ./kio {};
+    kitemmodels = callPackage ./kitemmodels.nix {};
+    kitemviews = callPackage ./kitemviews.nix {};
+    kjobwidgets = callPackage ./kjobwidgets.nix {};
+    kjs = callPackage ./kjs.nix {};
+    kjsembed = callPackage ./kjsembed.nix {};
+    kmediaplayer = callPackage ./kmediaplayer.nix {};
+    knewstuff = callPackage ./knewstuff.nix {};
+    knotifications = callPackage ./knotifications.nix {};
+    knotifyconfig = callPackage ./knotifyconfig.nix {};
+    kpackage = callPackage ./kpackage {};
+    kparts = callPackage ./kparts.nix {};
+    kpeople = callPackage ./kpeople.nix {};
+    kplotting = callPackage ./kplotting.nix {};
+    kpty = callPackage ./kpty.nix {};
+    kross = callPackage ./kross.nix {};
+    krunner = callPackage ./krunner.nix {};
+    kservice = callPackage ./kservice {};
+    ktexteditor = callPackage ./ktexteditor {};
+    ktextwidgets = callPackage ./ktextwidgets.nix {};
+    kunitconversion = callPackage ./kunitconversion.nix {};
+    kwallet = callPackage ./kwallet.nix {};
+    kwidgetsaddons = callPackage ./kwidgetsaddons.nix {};
+    kwindowsystem = callPackage ./kwindowsystem.nix {};
+    kxmlgui = callPackage ./kxmlgui.nix {};
+    kxmlrpcclient = callPackage ./kxmlrpcclient.nix {};
+    modemmanager-qt = callPackage ./modemmanager-qt.nix {};
+    networkmanager-qt = callPackage ./networkmanager-qt.nix {};
+    oxygen-icons5 = callPackage ./oxygen-icons5.nix {};
+    plasma-framework = callPackage ./plasma-framework {};
+    solid = callPackage ./solid.nix {};
+    sonnet = callPackage ./sonnet.nix {};
+    threadweaver = callPackage ./threadweaver.nix {};
+  };
+
+in packages
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/extra-cmake-modules/default.nix b/pkgs/development/libraries/kde-frameworks-5.19/extra-cmake-modules/default.nix
new file mode 100644
index 000000000000..1c2ea70442d3
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/extra-cmake-modules/default.nix
@@ -0,0 +1,20 @@
+{ kdeFramework, lib, copyPathsToStore, cmake, pkgconfig, qttools }:
+
+kdeFramework {
+  name = "extra-cmake-modules";
+
+  patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
+
+  outputs = [ "out" ];  # this package has no runtime components
+  setupHook = ./setup-hook.sh;
+
+  # It is OK to propagate these inputs as long as
+  # extra-cmake-modules is never a propagated input
+  # of some other derivation.
+  propagatedNativeBuildInputs = [ cmake pkgconfig qttools ];
+
+  meta = with lib; {
+    license = licenses.bsd2;
+    maintainers = [ maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/extra-cmake-modules/nix-lib-path.patch b/pkgs/development/libraries/kde-frameworks-5.19/extra-cmake-modules/nix-lib-path.patch
new file mode 100644
index 000000000000..a74340a6dc96
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/extra-cmake-modules/nix-lib-path.patch
@@ -0,0 +1,37 @@
+Index: extra-cmake-modules-5.18.0/kde-modules/KDEInstallDirs.cmake
+===================================================================
+--- extra-cmake-modules-5.18.0.orig/kde-modules/KDEInstallDirs.cmake
++++ extra-cmake-modules-5.18.0/kde-modules/KDEInstallDirs.cmake
+@@ -200,32 +200,6 @@
+ # GNUInstallDirs code deals with re-configuring, but that is dealt with
+ # by the _define_* macros in this module).
+ set(_LIBDIR_DEFAULT "lib")
+-# Override this default 'lib' with 'lib64' iff:
+-#  - we are on a Linux, kFreeBSD or Hurd system but NOT cross-compiling
+-#  - we are NOT on debian
+-#  - we are on a 64 bits system
+-# reason is: amd64 ABI: http://www.x86-64.org/documentation/abi.pdf
+-# For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if
+-# CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu"
+-# See http://wiki.debian.org/Multiarch
+-if((CMAKE_SYSTEM_NAME MATCHES "Linux|kFreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "GNU")
+-   AND NOT CMAKE_CROSSCOMPILING)
+-  if (EXISTS "/etc/debian_version") # is this a debian system ?
+-    if(CMAKE_LIBRARY_ARCHITECTURE)
+-      set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
+-    endif()
+-  else() # not debian, rely on CMAKE_SIZEOF_VOID_P:
+-    if(NOT DEFINED CMAKE_SIZEOF_VOID_P)
+-      message(AUTHOR_WARNING
+-        "Unable to determine default LIB_INSTALL_LIBDIR directory because no target architecture is known. "
+-        "Please enable at least one language before including KDEInstallDirs.")
+-    else()
+-      if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+-        set(_LIBDIR_DEFAULT "lib64")
+-      endif()
+-    endif()
+-  endif()
+-endif()
+ 
+ set(_gnu_install_dirs_vars
+     BINDIR
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/extra-cmake-modules/series b/pkgs/development/libraries/kde-frameworks-5.19/extra-cmake-modules/series
new file mode 100644
index 000000000000..b4569e50a5f7
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/extra-cmake-modules/series
@@ -0,0 +1 @@
+nix-lib-path.patch
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/extra-cmake-modules/setup-hook.sh b/pkgs/development/libraries/kde-frameworks-5.19/extra-cmake-modules/setup-hook.sh
new file mode 100644
index 000000000000..56ed09f4ea59
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/extra-cmake-modules/setup-hook.sh
@@ -0,0 +1,81 @@
+_ecmSetXdgDirs() {
+    addToSearchPathOnce XDG_DATA_DIRS "$1/share"
+    addToSearchPathOnce XDG_CONFIG_DIRS "$1/etc/xdg"
+    addToSearchPathOnce NIX_WRAP_XDG_CONFIG_DIRS "$1/etc/xdg"
+}
+
+_ecmPropagateSharedData() {
+    local sharedPaths=( \
+        "config.cfg" \
+        "doc" \
+        "kconf_update" \
+        "kservices5" \
+        "kservicetypes5" \
+        "kxmlgui5" \
+        "knotifications5" \
+        "icons" \
+        "sounds" \
+        "templates" \
+        "wallpapers" \
+        "applications" \
+        "desktop-directories" \
+        "mime" \
+        "info" \
+        "dbus-1" \
+        "interfaces" \
+        "services" \
+        "system-services" )
+    for dir in ${sharedPaths[@]}; do
+        if [ -d "$1/share/$dir" ]; then
+            addToSearchPathOnce NIX_WRAP_XDG_DATA_DIRS "$1/share"
+            propagateOnce propagatedUserEnvPkgs "$1"
+            break
+        fi
+    done
+}
+
+_ecmConfig() {
+    # Because we need to use absolute paths here, we must set *all* the paths.
+    cmakeFlags+=" -DKDE_INSTALL_EXECROOTDIR=${!outputBin}"
+    cmakeFlags+=" -DKDE_INSTALL_BINDIR=${!outputBin}/bin"
+    cmakeFlags+=" -DKDE_INSTALL_SBINDIR=${!outputBin}/sbin"
+    cmakeFlags+=" -DKDE_INSTALL_LIBDIR=${!outputLib}/lib"
+    cmakeFlags+=" -DKDE_INSTALL_LIBEXECDIR=${!outputLib}/lib/libexec"
+    cmakeFlags+=" -DKDE_INSTALL_CMAKEPACKAGEDIR=${!outputDev}/lib/cmake"
+    cmakeFlags+=" -DKDE_INSTALL_QTPLUGINDIR=${!outputLib}/lib/qt5/plugins"
+    cmakeFlags+=" -DKDE_INSTALL_PLUGINDIR=${!outputLib}/lib/qt5/plugins"
+    cmakeFlags+=" -DKDE_INSTALL_QTQUICKIMPORTSDIR=${!outputLib}/lib/qt5/imports"
+    cmakeFlags+=" -DKDE_INSTALL_QMLDIR=${!outputLib}/lib/qt5/qml"
+    cmakeFlags+=" -DKDE_INSTALL_INCLUDEDIR=${!outputInclude}/include"
+    cmakeFlags+=" -DKDE_INSTALL_LOCALSTATEDIR=/var"
+    cmakeFlags+=" -DKDE_INSTALL_DATAROOTDIR=${!outputLib}/share"
+    cmakeFlags+=" -DKDE_INSTALL_DATADIR=${!outputLib}/share"
+    cmakeFlags+=" -DKDE_INSTALL_DOCBUNDLEDIR=${!outputLib}/share/doc/HTML"
+    cmakeFlags+=" -DKDE_INSTALL_KCFGDIR=${!outputLib}/share/config.kcfg"
+    cmakeFlags+=" -DKDE_INSTALL_KCONFUPDATEDIR=${!outputLib}/share/kconf_update"
+    cmakeFlags+=" -DKDE_INSTALL_KSERVICES5DIR=${!outputLib}/share/kservices5"
+    cmakeFlags+=" -DKDE_INSTALL_KSERVICETYPES5DIR=${!outputLib}/share/kservicetypes5"
+    cmakeFlags+=" -DKDE_INSTALL_KXMLGUI5DIR=${!outputLib}/share/kxmlgui5"
+    cmakeFlags+=" -DKDE_INSTALL_KNOTIFY5RCDIR=${!outputLib}/share/knotifications5"
+    cmakeFlags+=" -DKDE_INSTALL_ICONDIR=${!outputLib}/share/icons"
+    cmakeFlags+=" -DKDE_INSTALL_LOCALEDIR=${!outputLib}/share/locale"
+    cmakeFlags+=" -DKDE_INSTALL_SOUNDDIR=${!outputLib}/share/sounds"
+    cmakeFlags+=" -DKDE_INSTALL_TEMPLATEDIR=${!outputLib}/share/templates"
+    cmakeFlags+=" -DKDE_INSTALL_WALLPAPERDIR=${!outputLib}/share/wallpapers"
+    cmakeFlags+=" -DKDE_INSTALL_APPDIR=${!outputLib}/share/applications"
+    cmakeFlags+=" -DKDE_INSTALL_DESKTOPDIR=${!outputLib}/share/desktop-directories"
+    cmakeFlags+=" -DKDE_INSTALL_MIMEDIR=${!outputLib}/share/mime/packages"
+    cmakeFlags+=" -DKDE_INSTALL_METAINFODIR=${!outputLib}/share/appdata"
+    cmakeFlags+=" -DKDE_INSTALL_MANDIR=${!outputLib}/share/man"
+    cmakeFlags+=" -DKDE_INSTALL_INFODIR=${!outputLib}/share/info"
+    cmakeFlags+=" -DKDE_INSTALL_DBUSDIR=${!outputLib}/share/dbus-1"
+    cmakeFlags+=" -DKDE_INSTALL_DBUSINTERFACEDIR=${!outputLib}/share/dbus-1/interfaces"
+    cmakeFlags+=" -DKDE_INSTALL_DBUSSERVICEDIR=${!outputLib}/share/dbus-1/services"
+    cmakeFlags+=" -DKDE_INSTALL_DBUSSYSTEMSERVICEDIR=${!outputLib}/share/dbus-1/system-services"
+    cmakeFlags+=" -DKDE_INSTALL_SYSCONFDIR=${!outputLib}/etc"
+    cmakeFlags+=" -DKDE_INSTALL_CONFDIR=${!outputLib}/etc/xdg"
+    cmakeFlags+=" -DKDE_INSTALL_AUTOSTARTDIR=${!outputLib}/etc/xdg/autostart"
+}
+
+envHooks+=(_ecmSetXdgDirs _ecmPropagateSharedData)
+preConfigureHooks+=(_ecmConfig)
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/fetchsrcs.sh b/pkgs/development/libraries/kde-frameworks-5.19/fetchsrcs.sh
new file mode 100755
index 000000000000..7937e6f8bed9
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/fetchsrcs.sh
@@ -0,0 +1,57 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p coreutils findutils gnused nix wget
+
+set -x
+
+# The trailing slash at the end is necessary!
+RELEASE_URL="http://download.kde.org/stable/frameworks/5.19/"
+EXTRA_WGET_ARGS='-A *.tar.xz'
+
+mkdir tmp; cd tmp
+
+rm -f ../srcs.csv
+
+wget -nH -r -c --no-parent $RELEASE_URL $EXTRA_WGET_ARGS
+
+find . | while read src; do
+    if [[ -f "${src}" ]]; then
+        # Sanitize file name
+        filename=$(basename "$src" | tr '@' '_')
+        nameVersion="${filename%.tar.*}"
+        name=$(echo "$nameVersion" | sed -e 's,-[[:digit:]].*,,' | sed -e 's,-opensource-src$,,')
+        version=$(echo "$nameVersion" | sed -e 's,^\([[:alpha:]][[:alnum:]]*-\)\+,,')
+        echo "$name,$version,$src,$filename" >>../srcs.csv
+    fi
+done
+
+cat >../srcs.nix <<EOF
+# DO NOT EDIT! This file is generated automatically by fetchsrcs.sh
+{ fetchurl, mirror }:
+
+{
+EOF
+
+gawk -F , "{ print \$1 }" ../srcs.csv | sort | uniq | while read name; do
+    versions=$(gawk -F , "/^$name,/ { print \$2 }" ../srcs.csv)
+    latestVersion=$(echo "$versions" | sort -rV | head -n 1)
+    src=$(gawk -F , "/^$name,$latestVersion,/ { print \$3 }" ../srcs.csv)
+    filename=$(gawk -F , "/^$name,$latestVersion,/ { print \$4 }" ../srcs.csv)
+    url="${src:2}"
+    sha256=$(nix-hash --type sha256 --base32 --flat "$src")
+    cat >>../srcs.nix <<EOF
+  $name = {
+    version = "$latestVersion";
+    src = fetchurl {
+      url = "\${mirror}/$url";
+      sha256 = "$sha256";
+      name = "$filename";
+    };
+  };
+EOF
+done
+
+echo "}" >>../srcs.nix
+
+rm -f ../srcs.csv
+
+cd ..
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/frameworkintegration.nix b/pkgs/development/libraries/kde-frameworks-5.19/frameworkintegration.nix
new file mode 100644
index 000000000000..26987c385ad5
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/frameworkintegration.nix
@@ -0,0 +1,17 @@
+{ kdeFramework, lib, extra-cmake-modules, kbookmarks, kcompletion
+, kconfig, kconfigwidgets, ki18n, kiconthemes, kio, knotifications
+, kwidgetsaddons, libXcursor, qtx11extras
+}:
+
+kdeFramework {
+  name = "frameworkintegration";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [
+    kbookmarks kcompletion kconfig knotifications kwidgetsaddons
+    libXcursor
+  ];
+  propagatedBuildInputs = [ kconfigwidgets ki18n kio kiconthemes qtx11extras ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kactivities.nix b/pkgs/development/libraries/kde-frameworks-5.19/kactivities.nix
new file mode 100644
index 000000000000..3225098f4398
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kactivities.nix
@@ -0,0 +1,22 @@
+{ kdeFramework, lib, extra-cmake-modules, boost, kcmutils, kconfig
+, kcoreaddons, kdbusaddons, kdeclarative, kglobalaccel, ki18n
+, kio, kservice, kwindowsystem, kxmlgui, makeQtWrapper, qtdeclarative
+}:
+
+kdeFramework {
+  name = "kactivities";
+  nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
+  buildInputs = [
+    boost kcmutils kconfig kcoreaddons kdbusaddons kservice
+    kxmlgui
+  ];
+  propagatedBuildInputs = [
+    kdeclarative kglobalaccel ki18n kio kwindowsystem qtdeclarative
+  ];
+  postInstall = ''
+    wrapQtProgram "$out/bin/kactivitymanagerd"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kapidox.nix b/pkgs/development/libraries/kde-frameworks-5.19/kapidox.nix
new file mode 100644
index 000000000000..647be8f052c3
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kapidox.nix
@@ -0,0 +1,12 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, python
+}:
+
+kdeFramework {
+  name = "kapidox";
+  nativeBuildInputs = [ extra-cmake-modules python ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/karchive.nix b/pkgs/development/libraries/kde-frameworks-5.19/karchive.nix
new file mode 100644
index 000000000000..a8d9a0003c3b
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/karchive.nix
@@ -0,0 +1,11 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+}:
+
+kdeFramework {
+  name = "karchive";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kauth/cmake-install-paths.patch b/pkgs/development/libraries/kde-frameworks-5.19/kauth/cmake-install-paths.patch
new file mode 100644
index 000000000000..c66f5ecd008f
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kauth/cmake-install-paths.patch
@@ -0,0 +1,17 @@
+Index: kauth-5.18.0/KF5AuthConfig.cmake.in
+===================================================================
+--- kauth-5.18.0.orig/KF5AuthConfig.cmake.in
++++ kauth-5.18.0/KF5AuthConfig.cmake.in
+@@ -4,9 +4,9 @@ set(KAUTH_STUB_FILES_DIR "@PACKAGE_KDE_I
+ 
+ set(KAUTH_BACKEND_NAME "@KAUTH_BACKEND_NAME@")
+ set(KAUTH_HELPER_BACKEND_NAME "@KAUTH_HELPER_BACKEND_NAME@")
+-set(KAUTH_POLICY_FILES_INSTALL_DIR "@KAUTH_POLICY_FILES_INSTALL_DIR@")
+-set(KAUTH_HELPER_INSTALL_DIR "@KAUTH_HELPER_INSTALL_DIR@")
+-set(KAUTH_HELPER_INSTALL_ABSOLUTE_DIR "@KAUTH_HELPER_INSTALL_ABSOLUTE_DIR@")
++set(KAUTH_POLICY_FILES_INSTALL_DIR "${KDE_INSTALL_DATADIR}/polkit-1/actions")
++set(KAUTH_HELPER_INSTALL_DIR "${KDE_INSTALL_LIBEXECDIR}")
++set(KAUTH_HELPER_INSTALL_ABSOLUTE_DIR "${KDE_INSTALL_LIBEXECDIR}")
+ 
+ find_dependency(KF5CoreAddons "@KF5_DEP_VERSION@")
+ 
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kauth/default.nix b/pkgs/development/libraries/kde-frameworks-5.19/kauth/default.nix
new file mode 100644
index 000000000000..1352d8c5821f
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kauth/default.nix
@@ -0,0 +1,16 @@
+{ kdeFramework, lib, copyPathsToStore
+, extra-cmake-modules
+, kcoreaddons
+, polkit-qt
+}:
+
+kdeFramework {
+  name = "kauth";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ polkit-qt ];
+  propagatedBuildInputs = [ kcoreaddons ];
+  patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kauth/series b/pkgs/development/libraries/kde-frameworks-5.19/kauth/series
new file mode 100644
index 000000000000..d2689425c387
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kauth/series
@@ -0,0 +1 @@
+cmake-install-paths.patch
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kbookmarks.nix b/pkgs/development/libraries/kde-frameworks-5.19/kbookmarks.nix
new file mode 100644
index 000000000000..1a469ab4db6d
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kbookmarks.nix
@@ -0,0 +1,25 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, kcodecs
+, kconfig
+, kconfigwidgets
+, kcoreaddons
+, kiconthemes
+, kxmlgui
+}:
+
+kdeFramework {
+  name = "kbookmarks";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [
+    kcodecs
+    kconfig
+    kconfigwidgets
+    kcoreaddons
+    kiconthemes
+    kxmlgui
+  ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kcmutils/0001-qdiriterator-follow-symlinks.patch b/pkgs/development/libraries/kde-frameworks-5.19/kcmutils/0001-qdiriterator-follow-symlinks.patch
new file mode 100644
index 000000000000..0d861fa95012
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kcmutils/0001-qdiriterator-follow-symlinks.patch
@@ -0,0 +1,25 @@
+From f14d2a275323a47104b33eb61c5b6910ae1a9f59 Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Wed, 14 Oct 2015 06:43:53 -0500
+Subject: [PATCH] qdiriterator follow symlinks
+
+---
+ src/kpluginselector.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/kpluginselector.cpp b/src/kpluginselector.cpp
+index 9c3431d..d6b1ee2 100644
+--- a/src/kpluginselector.cpp
++++ b/src/kpluginselector.cpp
+@@ -305,7 +305,7 @@ void KPluginSelector::addPlugins(const QString &componentName,
+     QStringList desktopFileNames;
+     const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, componentName + QStringLiteral("/kpartplugins"), QStandardPaths::LocateDirectory);
+     Q_FOREACH (const QString &dir, dirs) {
+-        QDirIterator it(dir, QStringList() << QStringLiteral("*.desktop"), QDir::NoFilter, QDirIterator::Subdirectories);
++      QDirIterator it(dir, QStringList() << QStringLiteral("*.desktop"), QDir::NoFilter, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
+         while (it.hasNext()) {
+             desktopFileNames.append(it.next());
+         }
+-- 
+2.5.2
+
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kcmutils/default.nix b/pkgs/development/libraries/kde-frameworks-5.19/kcmutils/default.nix
new file mode 100644
index 000000000000..dbbb783ac615
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kcmutils/default.nix
@@ -0,0 +1,17 @@
+{ kdeFramework, lib, extra-cmake-modules, kconfigwidgets
+, kcoreaddons, kdeclarative, ki18n, kiconthemes, kitemviews
+, kpackage, kservice, kxmlgui
+}:
+
+kdeFramework {
+  name = "kcmutils";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [
+    kcoreaddons kiconthemes kitemviews kpackage kxmlgui
+  ];
+  propagatedBuildInputs = [ kconfigwidgets kdeclarative ki18n kservice ];
+  patches = [ ./0001-qdiriterator-follow-symlinks.patch ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kcodecs.nix b/pkgs/development/libraries/kde-frameworks-5.19/kcodecs.nix
new file mode 100644
index 000000000000..53a69a69b69c
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kcodecs.nix
@@ -0,0 +1,11 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+}:
+
+kdeFramework {
+  name = "kcodecs";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kcompletion.nix b/pkgs/development/libraries/kde-frameworks-5.19/kcompletion.nix
new file mode 100644
index 000000000000..e393774f16a5
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kcompletion.nix
@@ -0,0 +1,14 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, kconfig
+, kwidgetsaddons
+}:
+
+kdeFramework {
+  name = "kcompletion";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ kconfig kwidgetsaddons ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kconfig.nix b/pkgs/development/libraries/kde-frameworks-5.19/kconfig.nix
new file mode 100644
index 000000000000..e132afe59886
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kconfig.nix
@@ -0,0 +1,16 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, makeQtWrapper
+}:
+
+kdeFramework {
+  name = "kconfig";
+  nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
+  postInstall = ''
+    wrapQtProgram "$out/bin/kreadconfig5"
+    wrapQtProgram "$out/bin/kwriteconfig5"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kconfigwidgets/0001-qdiriterator-follow-symlinks.patch b/pkgs/development/libraries/kde-frameworks-5.19/kconfigwidgets/0001-qdiriterator-follow-symlinks.patch
new file mode 100644
index 000000000000..7a6c0ee90534
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kconfigwidgets/0001-qdiriterator-follow-symlinks.patch
@@ -0,0 +1,25 @@
+From 4f84780893d505b2d62a14633dd983baa8ec6e28 Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Wed, 14 Oct 2015 06:47:01 -0500
+Subject: [PATCH] qdiriterator follow symlinks
+
+---
+ src/khelpclient.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/khelpclient.cpp b/src/khelpclient.cpp
+index 53a331e..80fbb01 100644
+--- a/src/khelpclient.cpp
++++ b/src/khelpclient.cpp
+@@ -48,7 +48,7 @@ void KHelpClient::invokeHelp(const QString &anchor, const QString &_appname)
+     QString docPath;
+     const QStringList desktopDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
+     Q_FOREACH (const QString &dir, desktopDirs) {
+-        QDirIterator it(dir, QStringList() << appname + QLatin1String(".desktop"), QDir::NoFilter, QDirIterator::Subdirectories);
++        QDirIterator it(dir, QStringList() << appname + QLatin1String(".desktop"), QDir::NoFilter, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
+         while (it.hasNext()) {
+             const QString desktopPath(it.next());
+             KDesktopFile desktopFile(desktopPath);
+-- 
+2.5.2
+
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kconfigwidgets/default.nix b/pkgs/development/libraries/kde-frameworks-5.19/kconfigwidgets/default.nix
new file mode 100644
index 000000000000..0e14d06edd36
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kconfigwidgets/default.nix
@@ -0,0 +1,17 @@
+{ kdeFramework, lib, extra-cmake-modules, kauth, kcodecs, kconfig
+, kdoctools, kguiaddons, ki18n, kwidgetsaddons, makeQtWrapper
+}:
+
+kdeFramework {
+  name = "kconfigwidgets";
+  nativeBuildInputs = [ extra-cmake-modules kdoctools makeQtWrapper ];
+  buildInputs = [ kguiaddons ];
+  propagatedBuildInputs = [ kauth kconfig kcodecs ki18n kwidgetsaddons ];
+  patches = [ ./0001-qdiriterator-follow-symlinks.patch ];
+  postInstall = ''
+    wrapQtProgram "$out/bin/preparetips5"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kcoreaddons.nix b/pkgs/development/libraries/kde-frameworks-5.19/kcoreaddons.nix
new file mode 100644
index 000000000000..f3a1db7bd484
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kcoreaddons.nix
@@ -0,0 +1,16 @@
+{ kdeFramework, lib, makeQtWrapper
+, extra-cmake-modules
+, shared_mime_info
+}:
+
+kdeFramework {
+  name = "kcoreaddons";
+  nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
+  buildInputs = [ shared_mime_info ];
+  postInstall = ''
+    wrapQtProgram "$out/bin/desktoptojson"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kcrash.nix b/pkgs/development/libraries/kde-frameworks-5.19/kcrash.nix
new file mode 100644
index 000000000000..bbab78ccb409
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kcrash.nix
@@ -0,0 +1,16 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, kcoreaddons
+, kwindowsystem
+, qtx11extras
+}:
+
+kdeFramework {
+  name = "kcrash";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ kcoreaddons ];
+  propagatedBuildInputs = [ kwindowsystem qtx11extras ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kdbusaddons.nix b/pkgs/development/libraries/kde-frameworks-5.19/kdbusaddons.nix
new file mode 100644
index 000000000000..d2ceab31d14b
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kdbusaddons.nix
@@ -0,0 +1,17 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, makeQtWrapper
+, qtx11extras
+}:
+
+kdeFramework {
+  name = "kdbusaddons";
+  nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
+  propagatedBuildInputs = [ qtx11extras ];
+  postInstall = ''
+    wrapQtProgram "$out/bin/kquitapp5"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kdeclarative.nix b/pkgs/development/libraries/kde-frameworks-5.19/kdeclarative.nix
new file mode 100644
index 000000000000..74d107466cfc
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kdeclarative.nix
@@ -0,0 +1,22 @@
+{ kdeFramework, lib, extra-cmake-modules, epoxy, kconfig
+, kglobalaccel, kguiaddons, ki18n, kiconthemes, kio, kpackage
+, kwidgetsaddons, kwindowsystem, makeQtWrapper, pkgconfig
+, qtdeclarative
+}:
+
+kdeFramework {
+  name = "kdeclarative";
+  nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
+  buildInputs = [
+    epoxy kguiaddons kiconthemes kwidgetsaddons
+  ];
+  propagatedBuildInputs = [
+    kconfig kglobalaccel ki18n kio kpackage kwindowsystem qtdeclarative
+  ];
+  postInstall = ''
+    wrapQtProgram "$out/bin/kpackagelauncherqml"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kded.nix b/pkgs/development/libraries/kde-frameworks-5.19/kded.nix
new file mode 100644
index 000000000000..47ae2d68c68e
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kded.nix
@@ -0,0 +1,19 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, kconfig
+, kcoreaddons
+, kcrash
+, kdbusaddons
+, kdoctools
+, kinit
+, kservice
+}:
+
+kdeFramework {
+  name = "kded";
+  buildInputs = [ kconfig kcoreaddons kcrash kdbusaddons kinit kservice ];
+  nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kdelibs4support/default.nix b/pkgs/development/libraries/kde-frameworks-5.19/kdelibs4support/default.nix
new file mode 100644
index 000000000000..843db83a99b2
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kdelibs4support/default.nix
@@ -0,0 +1,36 @@
+{ kdeFramework, lib, copyPathsToStore
+, extra-cmake-modules, docbook_xml_dtd_45, kauth
+, karchive, kcompletion, kconfig, kconfigwidgets, kcoreaddons
+, kcrash, kdbusaddons, kded, kdesignerplugin, kdoctools, kemoticons
+, kglobalaccel, kguiaddons, ki18n, kiconthemes, kio, kitemmodels
+, kinit, knotifications, kparts, kservice, ktextwidgets
+, kunitconversion, kwidgetsaddons, kwindowsystem, kxmlgui
+, networkmanager, qtsvg, qtx11extras, xlibs
+}:
+
+# TODO: debug docbook detection
+
+kdeFramework {
+  name = "kdelibs4support";
+  outputs = [ "dev" "out" ];
+  patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
+  setupHook = ./setup-hook.sh;
+  nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+  buildInputs = [
+    kcompletion kconfig kded kservice kwidgetsaddons
+    kxmlgui networkmanager qtsvg qtx11extras xlibs.libSM
+  ];
+  propagatedBuildInputs = [
+    kauth karchive kconfigwidgets kcoreaddons kcrash kdbusaddons
+    kdesignerplugin kemoticons kglobalaccel kguiaddons ki18n kio
+    kiconthemes kitemmodels kinit knotifications kparts ktextwidgets
+    kunitconversion kwindowsystem
+  ];
+  cmakeFlags = [
+    "-DDocBookXML4_DTD_DIR=${docbook_xml_dtd_45}/xml/dtd/docbook"
+    "-DDocBookXML4_DTD_VERSION=4.5"
+  ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kdelibs4support/nix-kde-include-dir.patch b/pkgs/development/libraries/kde-frameworks-5.19/kdelibs4support/nix-kde-include-dir.patch
new file mode 100644
index 000000000000..eabb70254483
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kdelibs4support/nix-kde-include-dir.patch
@@ -0,0 +1,13 @@
+Index: kdelibs4support-5.18.0/src/kdecore/kstandarddirs.cpp
+===================================================================
+--- kdelibs4support-5.18.0.orig/src/kdecore/kstandarddirs.cpp
++++ kdelibs4support-5.18.0/src/kdecore/kstandarddirs.cpp
+@@ -292,7 +292,7 @@ static QString relativeInstallPath(const
+             return QFile::decodeName(ICON_INSTALL_DIR "/");
+         }
+         if (strcmp("include", type) == 0) {
+-            return QFile::decodeName(INCLUDE_INSTALL_DIR "/");
++            return QFile::decodeName(qgetenv("NIX_KDE_INCLUDE_DIR"));
+         }
+         break;
+     case 'l':
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kdelibs4support/series b/pkgs/development/libraries/kde-frameworks-5.19/kdelibs4support/series
new file mode 100644
index 000000000000..9b08ab208774
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kdelibs4support/series
@@ -0,0 +1 @@
+nix-kde-include-dir.patch
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kdelibs4support/setup-hook.sh b/pkgs/development/libraries/kde-frameworks-5.19/kdelibs4support/setup-hook.sh
new file mode 100644
index 000000000000..21ac2e83b5da
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kdelibs4support/setup-hook.sh
@@ -0,0 +1 @@
+export NIX_KDE_INCLUDE_DIR="@dev@/include/"  # trailing slash is required!
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kdesignerplugin.nix b/pkgs/development/libraries/kde-frameworks-5.19/kdesignerplugin.nix
new file mode 100644
index 000000000000..cbc114ccca03
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kdesignerplugin.nix
@@ -0,0 +1,34 @@
+{ kdeFramework, lib, makeQtWrapper
+, extra-cmake-modules
+, kcompletion
+, kconfig
+, kconfigwidgets
+, kcoreaddons
+, kdewebkit
+, kdoctools
+, kiconthemes
+, kio
+, kitemviews
+, kplotting
+, ktextwidgets
+, kwidgetsaddons
+, kxmlgui
+, sonnet
+}:
+
+kdeFramework {
+  name = "kdesignerplugin";
+  nativeBuildInputs = [ extra-cmake-modules kdoctools makeQtWrapper ];
+  buildInputs = [
+    kcompletion kconfig kconfigwidgets kcoreaddons kdewebkit
+    kiconthemes kitemviews kplotting ktextwidgets kwidgetsaddons
+    kxmlgui
+  ];
+  propagatedBuildInputs = [ kio sonnet ];
+  postInstall = ''
+    wrapQtProgram "$out/bin/kgendesignerplugin"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kdesu.nix b/pkgs/development/libraries/kde-frameworks-5.19/kdesu.nix
new file mode 100644
index 000000000000..364fbd6a720b
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kdesu.nix
@@ -0,0 +1,13 @@
+{ kdeFramework, lib, extra-cmake-modules, kcoreaddons, ki18n, kpty
+, kservice
+}:
+
+kdeFramework {
+  name = "kdesu";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ kcoreaddons kservice ];
+  propagatedBuildInputs = [ ki18n kpty ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kdewebkit.nix b/pkgs/development/libraries/kde-frameworks-5.19/kdewebkit.nix
new file mode 100644
index 000000000000..d361313d1d49
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kdewebkit.nix
@@ -0,0 +1,13 @@
+{ kdeFramework, lib, extra-cmake-modules, kconfig, kcoreaddons
+, ki18n, kio, kjobwidgets, kparts, kservice, kwallet, qtwebkit
+}:
+
+kdeFramework {
+  name = "kdewebkit";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ kconfig kcoreaddons kjobwidgets kparts kservice kwallet ];
+  propagatedBuildInputs = [ ki18n kio qtwebkit ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kdnssd.nix b/pkgs/development/libraries/kde-frameworks-5.19/kdnssd.nix
new file mode 100644
index 000000000000..f00432b0c9ce
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kdnssd.nix
@@ -0,0 +1,13 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, avahi
+}:
+
+kdeFramework {
+  name = "kdnssd";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ avahi ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kdoctools/default.nix b/pkgs/development/libraries/kde-frameworks-5.19/kdoctools/default.nix
new file mode 100644
index 000000000000..f67c19f42395
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kdoctools/default.nix
@@ -0,0 +1,19 @@
+{ kdeFramework, lib, extra-cmake-modules, docbook_xml_dtd_45
+, docbook5_xsl, karchive, ki18n, makeQtWrapper, perl, perlPackages
+}:
+
+kdeFramework {
+  name = "kdoctools";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ karchive ];
+  propagatedBuildInputs = [ ki18n ];
+  propagatedNativeBuildInputs = [ makeQtWrapper perl perlPackages.URI ];
+  cmakeFlags = [
+    "-DDocBookXML4_DTD_DIR=${docbook_xml_dtd_45}/xml/dtd/docbook"
+    "-DDocBookXSL_DIR=${docbook5_xsl}/xml/xsl/docbook"
+  ];
+  patches = [ ./kdoctools-no-find-docbook-xml.patch ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kdoctools/kdoctools-no-find-docbook-xml.patch b/pkgs/development/libraries/kde-frameworks-5.19/kdoctools/kdoctools-no-find-docbook-xml.patch
new file mode 100644
index 000000000000..4e3a33efab32
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kdoctools/kdoctools-no-find-docbook-xml.patch
@@ -0,0 +1,12 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 5c4863c..f731775 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -46,7 +46,6 @@ set_package_properties(LibXml2 PROPERTIES
+                       )
+ 
+ 
+-find_package(DocBookXML4 "4.5")
+ 
+ set_package_properties(DocBookXML4 PROPERTIES
+                        TYPE REQUIRED
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kemoticons.nix b/pkgs/development/libraries/kde-frameworks-5.19/kemoticons.nix
new file mode 100644
index 000000000000..d165f84e3a2d
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kemoticons.nix
@@ -0,0 +1,17 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, karchive
+, kconfig
+, kcoreaddons
+, kservice
+}:
+
+kdeFramework {
+  name = "kemoticons";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ karchive kconfig kcoreaddons ];
+  propagatedBuildInputs = [ kservice ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kfilemetadata/cmake-install-paths.patch b/pkgs/development/libraries/kde-frameworks-5.19/kfilemetadata/cmake-install-paths.patch
new file mode 100644
index 000000000000..732f7b69c828
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kfilemetadata/cmake-install-paths.patch
@@ -0,0 +1,13 @@
+Index: kfilemetadata-5.18.0/src/CMakeLists.txt
+===================================================================
+--- kfilemetadata-5.18.0.orig/src/CMakeLists.txt
++++ kfilemetadata-5.18.0/src/CMakeLists.txt
+@@ -49,7 +49,7 @@ install(TARGETS KF5FileMetaData EXPORT K
+ 
+ install(EXPORT KF5FileMetaDataTargets
+         NAMESPACE KF5::
+-        DESTINATION ${LIB_INSTALL_DIR}/cmake/KF5FileMetaData
++        DESTINATION ${KDE_INSTALL_FULL_CMAKEPACKAGEDIR}/KF5FileMetaData
+         FILE KF5FileMetaDataTargets.cmake)
+ 
+ install(FILES
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kfilemetadata/default.nix b/pkgs/development/libraries/kde-frameworks-5.19/kfilemetadata/default.nix
new file mode 100644
index 000000000000..9bb4831cf8da
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kfilemetadata/default.nix
@@ -0,0 +1,14 @@
+{ kdeFramework, lib, copyPathsToStore, extra-cmake-modules
+, attr, ebook_tools, exiv2, ffmpeg, karchive, ki18n, poppler, qtbase, taglib
+}:
+
+kdeFramework {
+  name = "kfilemetadata";
+  patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ attr ebook_tools exiv2 ffmpeg karchive poppler taglib ];
+  propagatedBuildInputs = [ qtbase ki18n ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kfilemetadata/series b/pkgs/development/libraries/kde-frameworks-5.19/kfilemetadata/series
new file mode 100644
index 000000000000..d2689425c387
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kfilemetadata/series
@@ -0,0 +1 @@
+cmake-install-paths.patch
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kglobalaccel.nix b/pkgs/development/libraries/kde-frameworks-5.19/kglobalaccel.nix
new file mode 100644
index 000000000000..c535b3590a38
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kglobalaccel.nix
@@ -0,0 +1,23 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, kconfig
+, kcoreaddons
+, kcrash
+, kdbusaddons
+, kwindowsystem
+, makeQtWrapper
+, qtx11extras
+}:
+
+kdeFramework {
+  name = "kglobalaccel";
+  nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
+  buildInputs = [ kconfig kcoreaddons kcrash kdbusaddons ];
+  propagatedBuildInputs = [ kwindowsystem qtx11extras ];
+  postInstall = ''
+    wrapQtProgram "$out/bin/kglobalaccel5"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kguiaddons.nix b/pkgs/development/libraries/kde-frameworks-5.19/kguiaddons.nix
new file mode 100644
index 000000000000..bc4e9ab11843
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kguiaddons.nix
@@ -0,0 +1,13 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, qtx11extras
+}:
+
+kdeFramework {
+  name = "kguiaddons";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ qtx11extras ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/khtml.nix b/pkgs/development/libraries/kde-frameworks-5.19/khtml.nix
new file mode 100644
index 000000000000..d40df466ebbd
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/khtml.nix
@@ -0,0 +1,21 @@
+{ kdeFramework, lib, extra-cmake-modules, giflib, karchive
+, kcodecs, kglobalaccel, ki18n, kiconthemes, kio, kjs
+, knotifications, kparts, ktextwidgets, kwallet, kwidgetsaddons
+, kwindowsystem, kxmlgui, perl, phonon, qtx11extras, sonnet
+}:
+
+kdeFramework {
+  name = "khtml";
+  nativeBuildInputs = [ extra-cmake-modules perl ];
+  buildInputs = [
+    giflib karchive kiconthemes knotifications kwallet kwidgetsaddons
+    kxmlgui phonon
+  ];
+  propagatedBuildInputs = [
+    kcodecs kglobalaccel ki18n kio kjs kparts ktextwidgets
+    kwindowsystem qtx11extras sonnet
+  ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/ki18n.nix b/pkgs/development/libraries/kde-frameworks-5.19/ki18n.nix
new file mode 100644
index 000000000000..268006512e7c
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/ki18n.nix
@@ -0,0 +1,17 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, gettext
+, python
+, qtdeclarative
+, qtscript
+}:
+
+kdeFramework {
+  name = "ki18n";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ qtdeclarative qtscript ];
+  propagatedNativeBuildInputs = [ gettext python ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kiconthemes/default-theme-breeze.patch b/pkgs/development/libraries/kde-frameworks-5.19/kiconthemes/default-theme-breeze.patch
new file mode 100644
index 000000000000..5b3b15d5d5b5
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kiconthemes/default-theme-breeze.patch
@@ -0,0 +1,13 @@
+Index: kiconthemes-5.17.0/src/kicontheme.cpp
+===================================================================
+--- kiconthemes-5.17.0.orig/src/kicontheme.cpp
++++ kiconthemes-5.17.0/src/kicontheme.cpp
+@@ -557,7 +557,7 @@ void KIconTheme::reconfigure()
+ // static
+ QString KIconTheme::defaultThemeName()
+ {
+-    return QStringLiteral("oxygen");
++    return QStringLiteral("breeze");
+ }
+ 
+ void KIconTheme::assignIconsToContextMenu(ContextMenus type,
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kiconthemes/default.nix b/pkgs/development/libraries/kde-frameworks-5.19/kiconthemes/default.nix
new file mode 100644
index 000000000000..b78b25582beb
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kiconthemes/default.nix
@@ -0,0 +1,18 @@
+{ kdeFramework, lib, copyPathsToStore
+, extra-cmake-modules, makeQtWrapper
+, kconfigwidgets, ki18n, breeze-icons, kitemviews, qtsvg
+}:
+
+kdeFramework {
+  name = "kiconthemes";
+  patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
+  nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
+  buildInputs = [ kconfigwidgets kitemviews qtsvg ];
+  propagatedBuildInputs = [ breeze-icons ki18n ];
+  postInstall = ''
+    wrapQtProgram "$out/bin/kiconfinder5"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kiconthemes/series b/pkgs/development/libraries/kde-frameworks-5.19/kiconthemes/series
new file mode 100644
index 000000000000..ab5cc8a3edb2
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kiconthemes/series
@@ -0,0 +1 @@
+default-theme-breeze.patch
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kidletime.nix b/pkgs/development/libraries/kde-frameworks-5.19/kidletime.nix
new file mode 100644
index 000000000000..fc0865600239
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kidletime.nix
@@ -0,0 +1,15 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, qtbase
+, qtx11extras
+}:
+
+kdeFramework {
+  name = "kidletime";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ qtx11extras ];
+  propagatedBuildInputs = [ qtbase ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kimageformats.nix b/pkgs/development/libraries/kde-frameworks-5.19/kimageformats.nix
new file mode 100644
index 000000000000..49d66bbcc2c6
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kimageformats.nix
@@ -0,0 +1,13 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, ilmbase
+}:
+
+kdeFramework {
+  name = "kimageformats";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  NIX_CFLAGS_COMPILE = "-I${ilmbase}/include/OpenEXR";
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kinit/0001-kinit-libpath.patch b/pkgs/development/libraries/kde-frameworks-5.19/kinit/0001-kinit-libpath.patch
new file mode 100644
index 000000000000..9c76079a382a
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kinit/0001-kinit-libpath.patch
@@ -0,0 +1,42 @@
+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/development/libraries/kde-frameworks-5.19/kinit/default.nix b/pkgs/development/libraries/kde-frameworks-5.19/kinit/default.nix
new file mode 100644
index 000000000000..5f644d7c424e
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kinit/default.nix
@@ -0,0 +1,17 @@
+{ kdeFramework, lib, extra-cmake-modules, kconfig, kcrash
+, kdoctools, ki18n, kio, kservice, kwindowsystem, libcap
+, libcap_progs
+}:
+
+# TODO: setuid wrapper
+
+kdeFramework {
+  name = "kinit";
+  nativeBuildInputs = [ extra-cmake-modules kdoctools libcap_progs ];
+  buildInputs = [ kconfig kcrash kservice libcap ];
+  propagatedBuildInputs = [ ki18n kio kwindowsystem ];
+  patches = [ ./0001-kinit-libpath.patch ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kio/default.nix b/pkgs/development/libraries/kde-frameworks-5.19/kio/default.nix
new file mode 100644
index 000000000000..a2131ff33850
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kio/default.nix
@@ -0,0 +1,33 @@
+{ kdeFramework, lib, copyPathsToStore
+, extra-cmake-modules, acl, karchive
+, kbookmarks, kcompletion, kconfig, kconfigwidgets, kcoreaddons
+, kdbusaddons, kdoctools, ki18n, kiconthemes, kitemviews
+, kjobwidgets, knotifications, kservice, ktextwidgets, kwallet
+, kwidgetsaddons, kwindowsystem, kxmlgui, makeQtWrapper
+, qtscript, qtx11extras, solid
+}:
+
+kdeFramework {
+  name = "kio";
+  patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
+  nativeBuildInputs = [ extra-cmake-modules kdoctools makeQtWrapper ];
+  buildInputs = [
+    acl karchive kconfig kcoreaddons kdbusaddons kiconthemes
+    knotifications ktextwidgets kwallet kwidgetsaddons
+    qtscript
+  ];
+  propagatedBuildInputs = [
+    kbookmarks kcompletion kconfigwidgets ki18n kitemviews kjobwidgets
+    kservice kwindowsystem kxmlgui solid qtx11extras
+  ];
+  postInstall = ''
+    wrapQtProgram "$out/bin/kcookiejar5"
+    wrapQtProgram "$out/bin/ktelnetservice5"
+    wrapQtProgram "$out/bin/ktrash5"
+    wrapQtProgram "$out/bin/kmailservice5"
+    wrapQtProgram "$out/bin/protocoltojson"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kio/samba-search-path.patch b/pkgs/development/libraries/kde-frameworks-5.19/kio/samba-search-path.patch
new file mode 100644
index 000000000000..c9ad46b41bb7
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kio/samba-search-path.patch
@@ -0,0 +1,28 @@
+Index: kio-5.17.0/src/core/ksambashare.cpp
+===================================================================
+--- kio-5.17.0.orig/src/core/ksambashare.cpp
++++ kio-5.17.0/src/core/ksambashare.cpp
+@@ -67,13 +67,18 @@ KSambaSharePrivate::~KSambaSharePrivate(
+ 
+ bool KSambaSharePrivate::isSambaInstalled()
+ {
+-    if (QFile::exists(QStringLiteral("/usr/sbin/smbd"))
+-            || QFile::exists(QStringLiteral("/usr/local/sbin/smbd"))) {
+-        return true;
++    const QByteArray pathEnv = qgetenv("PATH");
++    if (!pathEnv.isEmpty()) {
++        QLatin1Char pathSep(':');
++        QStringList paths = QFile::decodeName(pathEnv).split(pathSep, QString::SkipEmptyParts);
++        for (QStringList::iterator it = paths.begin(); it != paths.end(); ++it) {
++            it->append("/smbd");
++            if (QFile::exists(*it)) {
++                return true;
++            }
++        }
+     }
+ 
+-    //qDebug() << "Samba is not installed!";
+-
+     return false;
+ }
+ 
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kio/series b/pkgs/development/libraries/kde-frameworks-5.19/kio/series
new file mode 100644
index 000000000000..77ca15450047
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kio/series
@@ -0,0 +1 @@
+samba-search-path.patch
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kitemmodels.nix b/pkgs/development/libraries/kde-frameworks-5.19/kitemmodels.nix
new file mode 100644
index 000000000000..a9024d771cc3
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kitemmodels.nix
@@ -0,0 +1,11 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+}:
+
+kdeFramework {
+  name = "kitemmodels";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kitemviews.nix b/pkgs/development/libraries/kde-frameworks-5.19/kitemviews.nix
new file mode 100644
index 000000000000..931019ce495d
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kitemviews.nix
@@ -0,0 +1,11 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+}:
+
+kdeFramework {
+  name = "kitemviews";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kjobwidgets.nix b/pkgs/development/libraries/kde-frameworks-5.19/kjobwidgets.nix
new file mode 100644
index 000000000000..746edf12eea0
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kjobwidgets.nix
@@ -0,0 +1,16 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, kcoreaddons
+, kwidgetsaddons
+, qtx11extras
+}:
+
+kdeFramework {
+  name = "kjobwidgets";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ kcoreaddons kwidgetsaddons ];
+  propagatedBuildInputs = [ qtx11extras ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kjs.nix b/pkgs/development/libraries/kde-frameworks-5.19/kjs.nix
new file mode 100644
index 000000000000..768720f178c8
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kjs.nix
@@ -0,0 +1,16 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, kdoctools
+, makeQtWrapper
+}:
+
+kdeFramework {
+  name = "kjs";
+  nativeBuildInputs = [ extra-cmake-modules kdoctools makeQtWrapper ];
+  postInstall = ''
+    wrapQtProgram "$out/bin/kjs5"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kjsembed.nix b/pkgs/development/libraries/kde-frameworks-5.19/kjsembed.nix
new file mode 100644
index 000000000000..22eef2d47bde
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kjsembed.nix
@@ -0,0 +1,17 @@
+{ kdeFramework, lib, extra-cmake-modules, kdoctools, ki18n, kjs
+, makeQtWrapper, qtsvg
+}:
+
+kdeFramework {
+  name = "kjsembed";
+  nativeBuildInputs = [ extra-cmake-modules kdoctools makeQtWrapper ];
+  buildInputs = [ qtsvg ];
+  propagatedBuildInputs = [ ki18n kjs ];
+  postInstall = ''
+    wrapQtProgram "$out/bin/kjscmd5"
+    wrapQtProgram "$out/bin/kjsconsole"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kmediaplayer.nix b/pkgs/development/libraries/kde-frameworks-5.19/kmediaplayer.nix
new file mode 100644
index 000000000000..460458b22323
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kmediaplayer.nix
@@ -0,0 +1,15 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, kparts
+, kxmlgui
+}:
+
+kdeFramework {
+  name = "kmediaplayer";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ kxmlgui ];
+  propagatedBuildInputs = [ kparts ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/knewstuff.nix b/pkgs/development/libraries/kde-frameworks-5.19/knewstuff.nix
new file mode 100644
index 000000000000..5bcd6f301462
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/knewstuff.nix
@@ -0,0 +1,17 @@
+{ kdeFramework, lib, extra-cmake-modules, attica, karchive
+, kcompletion, kconfig, kcoreaddons, ki18n, kiconthemes, kio
+, kitemviews, kservice, ktextwidgets, kwidgetsaddons, kxmlgui
+}:
+
+kdeFramework {
+  name = "knewstuff";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [
+    karchive kcompletion kconfig kcoreaddons kiconthemes
+    kitemviews ktextwidgets kwidgetsaddons
+  ];
+  propagatedBuildInputs = [ attica ki18n kio kservice kxmlgui ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/knotifications.nix b/pkgs/development/libraries/kde-frameworks-5.19/knotifications.nix
new file mode 100644
index 000000000000..7e301dd0f268
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/knotifications.nix
@@ -0,0 +1,21 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, kcodecs
+, kconfig
+, kcoreaddons
+, kwindowsystem
+, phonon
+, qtx11extras
+}:
+
+kdeFramework {
+  name = "knotifications";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [
+    kcodecs kconfig kcoreaddons phonon
+  ];
+  propagatedBuildInputs = [ kwindowsystem qtx11extras ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/knotifyconfig.nix b/pkgs/development/libraries/kde-frameworks-5.19/knotifyconfig.nix
new file mode 100644
index 000000000000..dd99d2d4f1e5
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/knotifyconfig.nix
@@ -0,0 +1,13 @@
+{ kdeFramework, lib, extra-cmake-modules, kcompletion, kconfig
+, ki18n, kio, phonon
+}:
+
+kdeFramework {
+  name = "knotifyconfig";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ kcompletion kconfig phonon ];
+  propagatedBuildInputs = [ ki18n kio ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kpackage/allow-external-paths.patch b/pkgs/development/libraries/kde-frameworks-5.19/kpackage/allow-external-paths.patch
new file mode 100644
index 000000000000..e9d744448148
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kpackage/allow-external-paths.patch
@@ -0,0 +1,13 @@
+Index: kpackage-5.18.0/src/kpackage/package.cpp
+===================================================================
+--- kpackage-5.18.0.orig/src/kpackage/package.cpp
++++ kpackage-5.18.0/src/kpackage/package.cpp
+@@ -808,7 +808,7 @@ PackagePrivate::PackagePrivate()
+     : QSharedData(),
+       fallbackPackage(0),
+       metadata(0),
+-      externalPaths(false),
++      externalPaths(true),
+       valid(false),
+       checkedValid(false)
+ {
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kpackage/default.nix b/pkgs/development/libraries/kde-frameworks-5.19/kpackage/default.nix
new file mode 100644
index 000000000000..aea1b0d31a0d
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kpackage/default.nix
@@ -0,0 +1,23 @@
+{ kdeFramework, lib, copyPathsToStore
+, extra-cmake-modules
+, karchive
+, kconfig
+, kcoreaddons
+, kdoctools
+, ki18n
+, makeQtWrapper
+}:
+
+kdeFramework {
+  name = "kpackage";
+  nativeBuildInputs = [ extra-cmake-modules kdoctools makeQtWrapper ];
+  buildInputs = [ karchive kconfig ];
+  propagatedBuildInputs = [ kcoreaddons ki18n ];
+  patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
+  postInstall = ''
+    wrapQtProgram "$out/bin/kpackagetool5"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kpackage/qdiriterator-follow-symlinks.patch b/pkgs/development/libraries/kde-frameworks-5.19/kpackage/qdiriterator-follow-symlinks.patch
new file mode 100644
index 000000000000..ddbf17d00064
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kpackage/qdiriterator-follow-symlinks.patch
@@ -0,0 +1,26 @@
+Index: kpackage-5.18.0/src/kpackage/packageloader.cpp
+===================================================================
+--- kpackage-5.18.0.orig/src/kpackage/packageloader.cpp
++++ kpackage-5.18.0/src/kpackage/packageloader.cpp
+@@ -241,7 +241,7 @@ QList<KPluginMetaData> PackageLoader::li
+         } else {
+             //qDebug() << "Not cached";
+             // If there's no cache file, fall back to listing the directory
+-            const QDirIterator::IteratorFlags flags = QDirIterator::Subdirectories;
++            const QDirIterator::IteratorFlags flags = QDirIterator::Subdirectories | QDirIterator::FollowSymlinks;
+             const QStringList nameFilters = QStringList(QStringLiteral("metadata.desktop")) << QStringLiteral("metadata.json");
+ 
+             QDirIterator it(plugindir, nameFilters, QDir::Files, flags);
+Index: kpackage-5.18.0/src/kpackage/private/packagejobthread.cpp
+===================================================================
+--- kpackage-5.18.0.orig/src/kpackage/private/packagejobthread.cpp
++++ kpackage-5.18.0/src/kpackage/private/packagejobthread.cpp
+@@ -146,7 +146,7 @@ bool indexDirectory(const QString& dir,
+ 
+     QJsonArray plugins;
+ 
+-    QDirIterator it(dir, *metaDataFiles, QDir::Files, QDirIterator::Subdirectories);
++    QDirIterator it(dir, *metaDataFiles, QDir::Files, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
+     while (it.hasNext()) {
+         it.next();
+         const QString path = it.fileInfo().absoluteFilePath();
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kpackage/series b/pkgs/development/libraries/kde-frameworks-5.19/kpackage/series
new file mode 100644
index 000000000000..9b7f076efc70
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kpackage/series
@@ -0,0 +1,2 @@
+allow-external-paths.patch
+qdiriterator-follow-symlinks.patch
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kparts.nix b/pkgs/development/libraries/kde-frameworks-5.19/kparts.nix
new file mode 100644
index 000000000000..1c3e0b2cbc51
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kparts.nix
@@ -0,0 +1,17 @@
+{ kdeFramework, lib, extra-cmake-modules, kconfig, kcoreaddons
+, ki18n, kiconthemes, kio, kjobwidgets, knotifications, kservice
+, ktextwidgets, kwidgetsaddons, kxmlgui
+}:
+
+kdeFramework {
+  name = "kparts";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [
+    kconfig kcoreaddons kiconthemes kjobwidgets knotifications
+    kservice kwidgetsaddons
+  ];
+  propagatedBuildInputs = [ ki18n kio ktextwidgets kxmlgui ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kpeople.nix b/pkgs/development/libraries/kde-frameworks-5.19/kpeople.nix
new file mode 100644
index 000000000000..4c3877e7efd2
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kpeople.nix
@@ -0,0 +1,15 @@
+{ kdeFramework, lib, extra-cmake-modules, kcoreaddons, ki18n
+, kitemviews, kservice, kwidgetsaddons, qtdeclarative
+}:
+
+kdeFramework {
+  name = "kpeople";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [
+    kcoreaddons kitemviews kservice kwidgetsaddons
+  ];
+  propagatedBuildInputs = [ ki18n qtdeclarative ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kplotting.nix b/pkgs/development/libraries/kde-frameworks-5.19/kplotting.nix
new file mode 100644
index 000000000000..c16f51b5ac3c
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kplotting.nix
@@ -0,0 +1,11 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+}:
+
+kdeFramework {
+  name = "kplotting";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kpty.nix b/pkgs/development/libraries/kde-frameworks-5.19/kpty.nix
new file mode 100644
index 000000000000..2e34e6f674ce
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kpty.nix
@@ -0,0 +1,10 @@
+{ kdeFramework, lib, extra-cmake-modules, kcoreaddons, ki18n }:
+
+kdeFramework {
+  name = "kpty";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  propagatedBuildInputs = [ kcoreaddons ki18n ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kross.nix b/pkgs/development/libraries/kde-frameworks-5.19/kross.nix
new file mode 100644
index 000000000000..7c6f079feaa7
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kross.nix
@@ -0,0 +1,14 @@
+{ kdeFramework, lib, extra-cmake-modules, kcompletion, kcoreaddons
+, kdoctools, ki18n, kiconthemes, kio, kparts, kwidgetsaddons
+, kxmlgui, qtscript
+}:
+
+kdeFramework {
+  name = "kross";
+  nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+  buildInputs = [ kcompletion kcoreaddons kxmlgui ];
+  propagatedBuildInputs = [ ki18n kiconthemes kio kparts kwidgetsaddons qtscript ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/krunner.nix b/pkgs/development/libraries/kde-frameworks-5.19/krunner.nix
new file mode 100644
index 000000000000..12d2b54d0eb3
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/krunner.nix
@@ -0,0 +1,16 @@
+{ kdeFramework, lib, extra-cmake-modules, kconfig, kcoreaddons
+, ki18n, kio, kservice, plasma-framework, qtquick1, solid
+, threadweaver
+}:
+
+kdeFramework {
+  name = "krunner";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [
+    kconfig kcoreaddons kservice qtquick1 solid threadweaver
+  ];
+  propagatedBuildInputs = [ ki18n kio plasma-framework ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kservice/0001-qdiriterator-follow-symlinks.patch b/pkgs/development/libraries/kde-frameworks-5.19/kservice/0001-qdiriterator-follow-symlinks.patch
new file mode 100644
index 000000000000..3d8397d8ee2d
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kservice/0001-qdiriterator-follow-symlinks.patch
@@ -0,0 +1,25 @@
+From ae8919eb81abad369e4a26ffcd845b140983398d Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Wed, 14 Oct 2015 06:28:57 -0500
+Subject: [PATCH 1/2] qdiriterator follow symlinks
+
+---
+ src/sycoca/kbuildsycoca.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/sycoca/kbuildsycoca.cpp b/src/sycoca/kbuildsycoca.cpp
+index 1deae14..250baa8 100644
+--- a/src/sycoca/kbuildsycoca.cpp
++++ b/src/sycoca/kbuildsycoca.cpp
+@@ -208,7 +208,7 @@ bool KBuildSycoca::build()
+         QStringList relFiles;
+         const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, m_resourceSubdir, QStandardPaths::LocateDirectory);
+         Q_FOREACH (const QString &dir, dirs) {
+-            QDirIterator it(dir, QDirIterator::Subdirectories);
++            QDirIterator it(dir, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
+             while (it.hasNext()) {
+                 const QString filePath = it.next();
+                 Q_ASSERT(filePath.startsWith(dir)); // due to the line below...
+-- 
+2.5.2
+
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kservice/0002-no-canonicalize-path.patch b/pkgs/development/libraries/kde-frameworks-5.19/kservice/0002-no-canonicalize-path.patch
new file mode 100644
index 000000000000..685c68526119
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kservice/0002-no-canonicalize-path.patch
@@ -0,0 +1,25 @@
+From 46d124da602d84b7611a7ff0ac0862168d451cdb Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Wed, 14 Oct 2015 06:31:29 -0500
+Subject: [PATCH 2/2] no canonicalize path
+
+---
+ src/sycoca/vfolder_menu.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/sycoca/vfolder_menu.cpp b/src/sycoca/vfolder_menu.cpp
+index d3e31c3..d15d743 100644
+--- a/src/sycoca/vfolder_menu.cpp
++++ b/src/sycoca/vfolder_menu.cpp
+@@ -415,7 +415,7 @@ VFolderMenu::absoluteDir(const QString &_dir, const QString &baseDir, bool keepR
+     }
+ 
+     if (!relative) {
+-        QString resolved = QDir(dir).canonicalPath();
++      QString resolved = QDir::cleanPath(dir);
+         if (!resolved.isEmpty()) {
+             dir = resolved;
+         }
+-- 
+2.5.2
+
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kservice/default.nix b/pkgs/development/libraries/kde-frameworks-5.19/kservice/default.nix
new file mode 100644
index 000000000000..3a27d85b9166
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kservice/default.nix
@@ -0,0 +1,18 @@
+{ kdeFramework, lib, extra-cmake-modules, kconfig, kcoreaddons
+, kcrash, kdbusaddons, kdoctools, ki18n, kwindowsystem
+}:
+
+kdeFramework {
+  name = "kservice";
+  propagatedNativeBuildInputs = [ extra-cmake-modules ];
+  nativeBuildInputs = [ kdoctools ];
+  buildInputs = [ kcrash kdbusaddons ];
+  propagatedBuildInputs = [ kconfig kcoreaddons ki18n kwindowsystem ];
+  patches = [
+    ./0001-qdiriterator-follow-symlinks.patch
+    ./0002-no-canonicalize-path.patch
+  ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/ktexteditor/default.nix b/pkgs/development/libraries/kde-frameworks-5.19/ktexteditor/default.nix
new file mode 100644
index 000000000000..b8df6a5f4c0d
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/ktexteditor/default.nix
@@ -0,0 +1,22 @@
+{ kdeFramework, lib, copyPathsToStore
+, extra-cmake-modules, makeQtWrapper, perl
+, karchive, kconfig, kguiaddons, kiconthemes, kparts
+, libgit2
+, qtscript, qtxmlpatterns
+, ki18n, kio, sonnet
+}:
+
+kdeFramework {
+  name = "ktexteditor";
+  nativeBuildInputs = [ extra-cmake-modules makeQtWrapper perl ];
+  buildInputs = [
+    karchive kconfig kguiaddons kiconthemes kparts
+    libgit2
+    qtscript qtxmlpatterns
+  ];
+  propagatedBuildInputs = [ ki18n kio sonnet ];
+  patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/ktexteditor/no-qcoreapplication.patch b/pkgs/development/libraries/kde-frameworks-5.19/ktexteditor/no-qcoreapplication.patch
new file mode 100644
index 000000000000..19ab1e1e5513
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/ktexteditor/no-qcoreapplication.patch
@@ -0,0 +1,36 @@
+Index: ktexteditor-5.18.0/src/syntax/data/katehighlightingindexer.cpp
+===================================================================
+--- ktexteditor-5.18.0.orig/src/syntax/data/katehighlightingindexer.cpp
++++ ktexteditor-5.18.0/src/syntax/data/katehighlightingindexer.cpp
+@@ -55,19 +55,16 @@ QStringList readListing(const QString &f
+ 
+ int main(int argc, char *argv[])
+ {
+-    // get app instance
+-    QCoreApplication app(argc, argv);
+-
+     // ensure enough arguments are passed
+-    if (app.arguments().size() < 3)
++    if (argc < 3)
+         return 1;
+ 
+     // open schema
+     QXmlSchema schema;
+-    if (!schema.load(QUrl::fromLocalFile(app.arguments().at(2))))
++    if (!schema.load(QUrl::fromLocalFile(QString::fromLocal8Bit(argv[2]))))
+         return 2;
+ 
+-    const QString hlFilenamesListing = app.arguments().value(3);
++    const QString hlFilenamesListing = QString::fromLocal8Bit(argv[3]);
+     if (hlFilenamesListing.isEmpty()) {
+         return 1;
+     }
+@@ -152,7 +149,7 @@ int main(int argc, char *argv[])
+         return anyError;
+ 
+     // create outfile, after all has worked!
+-    QFile outFile(app.arguments().at(1));
++    QFile outFile(QString::fromLocal8Bit(argv[1]));
+     if (!outFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
+         return 7;
+ 
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/ktexteditor/series b/pkgs/development/libraries/kde-frameworks-5.19/ktexteditor/series
new file mode 100644
index 000000000000..46cd23829a2f
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/ktexteditor/series
@@ -0,0 +1 @@
+no-qcoreapplication.patch
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/ktextwidgets.nix b/pkgs/development/libraries/kde-frameworks-5.19/ktextwidgets.nix
new file mode 100644
index 000000000000..e332d4ff9a83
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/ktextwidgets.nix
@@ -0,0 +1,16 @@
+{ kdeFramework, lib, extra-cmake-modules, kcompletion, kconfig
+, kconfigwidgets, ki18n, kiconthemes, kservice, kwindowsystem
+, sonnet
+}:
+
+kdeFramework {
+  name = "ktextwidgets";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [
+    kcompletion kconfig kconfigwidgets kiconthemes kservice
+  ];
+  propagatedBuildInputs = [ ki18n kwindowsystem sonnet ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kunitconversion.nix b/pkgs/development/libraries/kde-frameworks-5.19/kunitconversion.nix
new file mode 100644
index 000000000000..3cf0f847d83d
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kunitconversion.nix
@@ -0,0 +1,10 @@
+{ kdeFramework, lib, extra-cmake-modules, ki18n }:
+
+kdeFramework {
+  name = "kunitconversion";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  propagatedBuildInputs = [ ki18n ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kwallet.nix b/pkgs/development/libraries/kde-frameworks-5.19/kwallet.nix
new file mode 100644
index 000000000000..5ade5f63a8d0
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kwallet.nix
@@ -0,0 +1,21 @@
+{ kdeFramework, lib, extra-cmake-modules, kconfig, kconfigwidgets
+, kcoreaddons , kdbusaddons, kdoctools, ki18n, kiconthemes
+, knotifications , kservice, kwidgetsaddons, kwindowsystem, libgcrypt
+, makeQtWrapper }:
+
+kdeFramework {
+  name = "kwallet";
+  nativeBuildInputs = [ extra-cmake-modules kdoctools makeQtWrapper ];
+  buildInputs = [
+    kconfig kconfigwidgets kcoreaddons kdbusaddons kiconthemes
+    knotifications kservice kwidgetsaddons libgcrypt
+  ];
+  propagatedBuildInputs = [ ki18n kwindowsystem ];
+  postInstall = ''
+    wrapQtProgram "$out/bin/kwalletd5"
+    wrapQtProgram "$out/bin/kwallet-query"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kwidgetsaddons.nix b/pkgs/development/libraries/kde-frameworks-5.19/kwidgetsaddons.nix
new file mode 100644
index 000000000000..d95f44d3fecf
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kwidgetsaddons.nix
@@ -0,0 +1,11 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+}:
+
+kdeFramework {
+  name = "kwidgetsaddons";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kwindowsystem.nix b/pkgs/development/libraries/kde-frameworks-5.19/kwindowsystem.nix
new file mode 100644
index 000000000000..09ab1f2200de
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kwindowsystem.nix
@@ -0,0 +1,13 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, qtx11extras
+}:
+
+kdeFramework {
+  name = "kwindowsystem";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ qtx11extras ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kxmlgui.nix b/pkgs/development/libraries/kde-frameworks-5.19/kxmlgui.nix
new file mode 100644
index 000000000000..f081d5f9170e
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kxmlgui.nix
@@ -0,0 +1,18 @@
+{ kdeFramework, lib, extra-cmake-modules, attica, kconfig
+, kconfigwidgets, kglobalaccel, ki18n, kiconthemes, kitemviews
+, ktextwidgets, kwindowsystem, sonnet
+}:
+
+kdeFramework {
+  name = "kxmlgui";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [
+    attica kconfig kiconthemes kitemviews ktextwidgets
+  ];
+  propagatedBuildInputs = [
+    kconfigwidgets kglobalaccel ki18n kwindowsystem sonnet
+  ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/kxmlrpcclient.nix b/pkgs/development/libraries/kde-frameworks-5.19/kxmlrpcclient.nix
new file mode 100644
index 000000000000..20a300b68bc8
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/kxmlrpcclient.nix
@@ -0,0 +1,10 @@
+{ kdeFramework, lib, extra-cmake-modules, ki18n, kio }:
+
+kdeFramework {
+  name = "kxmlrpcclient";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  propagatedBuildInputs = [ ki18n kio ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/modemmanager-qt.nix b/pkgs/development/libraries/kde-frameworks-5.19/modemmanager-qt.nix
new file mode 100644
index 000000000000..7d7f769d6a9b
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/modemmanager-qt.nix
@@ -0,0 +1,13 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, modemmanager
+}:
+
+kdeFramework {
+  name = "modemmanager-qt";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  propagatedBuildInputs = [ modemmanager ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/networkmanager-qt.nix b/pkgs/development/libraries/kde-frameworks-5.19/networkmanager-qt.nix
new file mode 100644
index 000000000000..333378bd1431
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/networkmanager-qt.nix
@@ -0,0 +1,13 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, networkmanager
+}:
+
+kdeFramework {
+  name = "networkmanager-qt";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  propagatedBuildInputs = [ networkmanager ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/oxygen-icons5.nix b/pkgs/development/libraries/kde-frameworks-5.19/oxygen-icons5.nix
new file mode 100644
index 000000000000..ee350f8e1536
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/oxygen-icons5.nix
@@ -0,0 +1,13 @@
+{ kdeFramework
+, lib
+, extra-cmake-modules
+}:
+
+kdeFramework {
+  name = "oxygen-icons5";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  meta = {
+    license = lib.licenses.lgpl3Plus;
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/plasma-framework/default.nix b/pkgs/development/libraries/kde-frameworks-5.19/plasma-framework/default.nix
new file mode 100644
index 000000000000..d8846f777231
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/plasma-framework/default.nix
@@ -0,0 +1,25 @@
+{ kdeFramework, lib, extra-cmake-modules, kactivities, karchive
+, kconfig, kconfigwidgets, kcoreaddons, kdbusaddons, kdeclarative
+, kdoctools, kglobalaccel, kguiaddons, ki18n, kiconthemes, kio
+, knotifications, kpackage, kservice, kwindowsystem, kxmlgui
+, makeQtWrapper, qtscript, qtx11extras
+}:
+
+kdeFramework {
+  name = "plasma-framework";
+  nativeBuildInputs = [ extra-cmake-modules kdoctools makeQtWrapper ];
+  buildInputs = [
+    karchive kconfig kconfigwidgets kcoreaddons kdbusaddons kguiaddons
+    kiconthemes knotifications kxmlgui qtscript
+  ];
+  propagatedBuildInputs = [
+    kactivities kdeclarative kglobalaccel ki18n kio kpackage kservice kwindowsystem
+    qtx11extras
+  ];
+  postInstall = ''
+    wrapQtProgram "$out/bin/plasmapkg2"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/solid.nix b/pkgs/development/libraries/kde-frameworks-5.19/solid.nix
new file mode 100644
index 000000000000..afd125e3c597
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/solid.nix
@@ -0,0 +1,17 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, makeQtWrapper
+, qtdeclarative
+}:
+
+kdeFramework {
+  name = "solid";
+  nativeBuildInputs = [ extra-cmake-modules makeQtWrapper ];
+  buildInputs = [ qtdeclarative ];
+  postInstall = ''
+    wrapQtProgram "$out/bin/solid-hardware5"
+  '';
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/sonnet.nix b/pkgs/development/libraries/kde-frameworks-5.19/sonnet.nix
new file mode 100644
index 000000000000..943fe04a1c92
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/sonnet.nix
@@ -0,0 +1,13 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+, hunspell
+}:
+
+kdeFramework {
+  name = "sonnet";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ hunspell ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/srcs.nix b/pkgs/development/libraries/kde-frameworks-5.19/srcs.nix
new file mode 100644
index 000000000000..b86c0b71224d
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/srcs.nix
@@ -0,0 +1,565 @@
+# DO NOT EDIT! This file is generated automatically by fetchsrcs.sh
+{ fetchurl, mirror }:
+
+{
+  attica = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/attica-5.19.0.tar.xz";
+      sha256 = "0cbvjnv2fcqsxspiy5pzmnnzrpfamlsc9j927kd6gpzai1ckf1lv";
+      name = "attica-5.19.0.tar.xz";
+    };
+  };
+  baloo = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/baloo-5.19.0.tar.xz";
+      sha256 = "02yy0w13h5wxm74a87zi439f6yd9miid6rb54nia0pgvcka98svg";
+      name = "baloo-5.19.0.tar.xz";
+    };
+  };
+  bluez-qt = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/bluez-qt-5.19.0.tar.xz";
+      sha256 = "0609i7rzhnnnp4fqnwscwp6y646ji8kl2hw5sy7azc87yllisnyv";
+      name = "bluez-qt-5.19.0.tar.xz";
+    };
+  };
+  breeze-icons = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/breeze-icons-5.19.0.tar.xz";
+      sha256 = "0bwix0jl1dscqfb7ygn9drpd9ivfx4g15vz6h01mswvxa9lz1vj0";
+      name = "breeze-icons-5.19.0.tar.xz";
+    };
+  };
+  extra-cmake-modules = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/extra-cmake-modules-5.19.0.tar.xz";
+      sha256 = "1dl3hhbara7iswb5wsc5dp17ar3ljw5f0nrncl8vry9smaz2zl63";
+      name = "extra-cmake-modules-5.19.0.tar.xz";
+    };
+  };
+  frameworkintegration = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/frameworkintegration-5.19.0.tar.xz";
+      sha256 = "00la7p7wcyqpxyi73h4fjrmm9d2gqzdaljn4468xya4bfns5ijy3";
+      name = "frameworkintegration-5.19.0.tar.xz";
+    };
+  };
+  kactivities = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kactivities-5.19.0.tar.xz";
+      sha256 = "0yml1sbn3z4jd4vsfs25kqrl03pmlcgamzbgpw3248sabhyg7ks3";
+      name = "kactivities-5.19.0.tar.xz";
+    };
+  };
+  kapidox = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kapidox-5.19.0.tar.xz";
+      sha256 = "0a9731xrkd6mnqh72592rx6gfnxxdfd7xl8pdpgdn7qs3394k1yz";
+      name = "kapidox-5.19.0.tar.xz";
+    };
+  };
+  karchive = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/karchive-5.19.0.tar.xz";
+      sha256 = "043spmi7s2d1bj8d3wbgzbhisip6h92kqjhlvg8gyv0a7vy54ymv";
+      name = "karchive-5.19.0.tar.xz";
+    };
+  };
+  kauth = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kauth-5.19.0.tar.xz";
+      sha256 = "0fm9ih2hkh2rpmlf98yw8z1r5bn2qmpva2k7mrv6ijd5h767fxss";
+      name = "kauth-5.19.0.tar.xz";
+    };
+  };
+  kbookmarks = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kbookmarks-5.19.0.tar.xz";
+      sha256 = "0q418jpdc348nqgdavsmxxka4g8sldpdi9n89i1pllfmq10kw9sd";
+      name = "kbookmarks-5.19.0.tar.xz";
+    };
+  };
+  kcmutils = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kcmutils-5.19.0.tar.xz";
+      sha256 = "0qhdjb3zvqq9ycfgb52lz4flgipyplj5ksz8h8y71bbs4w6lazd8";
+      name = "kcmutils-5.19.0.tar.xz";
+    };
+  };
+  kcodecs = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kcodecs-5.19.0.tar.xz";
+      sha256 = "1rzp314fv9n5168j7nhv1c8fjaszpmgdx6javrx4w0hyrjdfkg66";
+      name = "kcodecs-5.19.0.tar.xz";
+    };
+  };
+  kcompletion = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kcompletion-5.19.0.tar.xz";
+      sha256 = "05n0y5kf3bcc4wgn6k0js5cravv1k93xxzrgapm21323qgvfagwd";
+      name = "kcompletion-5.19.0.tar.xz";
+    };
+  };
+  kconfig = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kconfig-5.19.0.tar.xz";
+      sha256 = "0nk5hfl8yh0kgaa7xi0cc05dl6nf7prvbvxv0i99207xh9dafdmm";
+      name = "kconfig-5.19.0.tar.xz";
+    };
+  };
+  kconfigwidgets = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kconfigwidgets-5.19.0.tar.xz";
+      sha256 = "1nld27chcjwjgwv76s2j77ifmca235yp10bm08rjmvnfn6778ypv";
+      name = "kconfigwidgets-5.19.0.tar.xz";
+    };
+  };
+  kcoreaddons = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kcoreaddons-5.19.0.tar.xz";
+      sha256 = "07sm0givfdx28p302fkynzsd3xkpn1hbs43d4rscyx18yxfsldcw";
+      name = "kcoreaddons-5.19.0.tar.xz";
+    };
+  };
+  kcrash = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kcrash-5.19.0.tar.xz";
+      sha256 = "1dy03gp1sj96wn0zfa0dpbvz8pz0ia1j7p1wcif3iqk55pjxdgyl";
+      name = "kcrash-5.19.0.tar.xz";
+    };
+  };
+  kdbusaddons = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kdbusaddons-5.19.0.tar.xz";
+      sha256 = "1bb5aik0kl3kab5399drfjxrm8iysgkf813xgr0y4k64c9kwfp28";
+      name = "kdbusaddons-5.19.0.tar.xz";
+    };
+  };
+  kdeclarative = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kdeclarative-5.19.0.tar.xz";
+      sha256 = "03g02zy7wjzmpvqzxx32z8ap7jyj9sf432g1d3csb0dcbx2ny52g";
+      name = "kdeclarative-5.19.0.tar.xz";
+    };
+  };
+  kded = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kded-5.19.0.tar.xz";
+      sha256 = "0nyvg0h2aqy7qr57bad6wyc2rmcv9nhdq0py4fxc3irb6516p9hz";
+      name = "kded-5.19.0.tar.xz";
+    };
+  };
+  kdelibs4support = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/portingAids/kdelibs4support-5.19.0.tar.xz";
+      sha256 = "0iqnb2j6gfy8006arwv65vljfhxdnk6aia0zppngb481jnd9n2pn";
+      name = "kdelibs4support-5.19.0.tar.xz";
+    };
+  };
+  kdesignerplugin = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kdesignerplugin-5.19.0.tar.xz";
+      sha256 = "11inmvyair796rx4842naf1dnxqvc6bqqzrv700ycvisad646ws5";
+      name = "kdesignerplugin-5.19.0.tar.xz";
+    };
+  };
+  kdesu = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kdesu-5.19.0.tar.xz";
+      sha256 = "19w8m7ji61bpd368lzkwlizcwa1l968l568lksgm2mm9pnyjjhgz";
+      name = "kdesu-5.19.0.tar.xz";
+    };
+  };
+  kdewebkit = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kdewebkit-5.19.0.tar.xz";
+      sha256 = "04b5qanhxggffnvmi28lspyi8kj4kq7mxhxndar9fmkzzgvy70hj";
+      name = "kdewebkit-5.19.0.tar.xz";
+    };
+  };
+  kdnssd = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kdnssd-5.19.0.tar.xz";
+      sha256 = "15a8w2i29mrbhadw6y123mr0cc45ijabnwdfp3lbkd40lk8nq314";
+      name = "kdnssd-5.19.0.tar.xz";
+    };
+  };
+  kdoctools = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kdoctools-5.19.0.tar.xz";
+      sha256 = "06g77n9wxpiv4skc1kz794ppfb2mkmd3fgn6an5kr301xc76cnpn";
+      name = "kdoctools-5.19.0.tar.xz";
+    };
+  };
+  kemoticons = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kemoticons-5.19.0.tar.xz";
+      sha256 = "0fiix2sf2wrvmrpx8whdr1bzm7gbv7pvg02y47w5bl6s9gh176g5";
+      name = "kemoticons-5.19.0.tar.xz";
+    };
+  };
+  kfilemetadata = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kfilemetadata-5.19.0.tar.xz";
+      sha256 = "11j8if3xhp3xxwibwm6nxb4lh8wx40ni3zf5hki327pxv4vpq3qr";
+      name = "kfilemetadata-5.19.0.tar.xz";
+    };
+  };
+  kglobalaccel = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kglobalaccel-5.19.0.tar.xz";
+      sha256 = "021j98f7217m83aqxpamg0lzlaiskdaqsd9iabc8wrp1g0nkm05d";
+      name = "kglobalaccel-5.19.0.tar.xz";
+    };
+  };
+  kguiaddons = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kguiaddons-5.19.0.tar.xz";
+      sha256 = "019xaf7vpgifcw8wibli9d2b50brhgdaypsqknh6mqq8q9g06jhy";
+      name = "kguiaddons-5.19.0.tar.xz";
+    };
+  };
+  khtml = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/portingAids/khtml-5.19.0.tar.xz";
+      sha256 = "0hqa54a9nxy954vy8gf52y89xd3ibz9b4jgh6w347b1alp1zn145";
+      name = "khtml-5.19.0.tar.xz";
+    };
+  };
+  ki18n = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/ki18n-5.19.0.tar.xz";
+      sha256 = "0v3arc20y5d8afm9zfrz1skd2xg3ng62cq1xvxiq645w6mxf7y05";
+      name = "ki18n-5.19.0.tar.xz";
+    };
+  };
+  kiconthemes = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kiconthemes-5.19.0.tar.xz";
+      sha256 = "0riicirgda3w2b30dzsa2lq9xrr4y04qwhxyzq1p8gn2x4pp3g3n";
+      name = "kiconthemes-5.19.0.tar.xz";
+    };
+  };
+  kidletime = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kidletime-5.19.0.tar.xz";
+      sha256 = "0jlbzqv36ddhfhk8xkkgw0xhq8s371z9ama1cyv2xq8kk4vjywc6";
+      name = "kidletime-5.19.0.tar.xz";
+    };
+  };
+  kimageformats = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kimageformats-5.19.0.tar.xz";
+      sha256 = "1ydizc6b0ncndazk62h8y249yfcx381pwzyivfpka1f69zfgyvv5";
+      name = "kimageformats-5.19.0.tar.xz";
+    };
+  };
+  kinit = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kinit-5.19.0.tar.xz";
+      sha256 = "03l7pijqdnnsfg6yz9p73p7xa86sldayggl6rc5hpkzmgyczcfzm";
+      name = "kinit-5.19.0.tar.xz";
+    };
+  };
+  kio = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kio-5.19.0.tar.xz";
+      sha256 = "0c7smp7cajivx53shy65mp9zcc51pha9iyvh37dggfflxy3xf9nv";
+      name = "kio-5.19.0.tar.xz";
+    };
+  };
+  kitemmodels = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kitemmodels-5.19.0.tar.xz";
+      sha256 = "0skmim986qnncbzd84vm1wp1fr41jn04af2dgckirsk23d35bln7";
+      name = "kitemmodels-5.19.0.tar.xz";
+    };
+  };
+  kitemviews = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kitemviews-5.19.0.tar.xz";
+      sha256 = "118zv46mvrfwbvl06bb1m8axv92wnp4pfs36hsxvnjl7gfjk5xjn";
+      name = "kitemviews-5.19.0.tar.xz";
+    };
+  };
+  kjobwidgets = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kjobwidgets-5.19.0.tar.xz";
+      sha256 = "1qzf8nzy8rxkdai9aj2lyrww90245v0p2q115xiz73bsg9rahmji";
+      name = "kjobwidgets-5.19.0.tar.xz";
+    };
+  };
+  kjs = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/portingAids/kjs-5.19.0.tar.xz";
+      sha256 = "08m01762hb25vm020g3v37bh40cgvcfrj45ql135klx96x9imfaf";
+      name = "kjs-5.19.0.tar.xz";
+    };
+  };
+  kjsembed = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/portingAids/kjsembed-5.19.0.tar.xz";
+      sha256 = "1wmkgy8jgm21y2cvcbv1fdv29dxxla8n6ws78kzzbbw4cgqwwl48";
+      name = "kjsembed-5.19.0.tar.xz";
+    };
+  };
+  kmediaplayer = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/portingAids/kmediaplayer-5.19.0.tar.xz";
+      sha256 = "1vhqr2c7q8vwzdj29vpmfjfhyal8wp9ffirrnqc98vb6sffs85ay";
+      name = "kmediaplayer-5.19.0.tar.xz";
+    };
+  };
+  knewstuff = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/knewstuff-5.19.0.tar.xz";
+      sha256 = "12acd12vxk9z83zg3yz8lvmmb8737z9lzd4hs9a3jcs1z5k2nhb4";
+      name = "knewstuff-5.19.0.tar.xz";
+    };
+  };
+  knotifications = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/knotifications-5.19.0.tar.xz";
+      sha256 = "0grgm0ws16gp2j77nslqpl1jpxbi0m6g59zr7v1xnmzdk2j6n4av";
+      name = "knotifications-5.19.0.tar.xz";
+    };
+  };
+  knotifyconfig = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/knotifyconfig-5.19.0.tar.xz";
+      sha256 = "161brvryxzdkny7sf6icn1jpyi6rnw6jc808gdf5g41v50xpnxfj";
+      name = "knotifyconfig-5.19.0.tar.xz";
+    };
+  };
+  kpackage = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kpackage-5.19.0.tar.xz";
+      sha256 = "1km4sjgxfljp2pnjnzj48q3c574zvj7341a57n4ifhjwj37yzxdv";
+      name = "kpackage-5.19.0.tar.xz";
+    };
+  };
+  kparts = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kparts-5.19.0.tar.xz";
+      sha256 = "05g59x2mrqygawzcwgw3igl5n96l649h0kpzh37sfq4i8kg15g7l";
+      name = "kparts-5.19.0.tar.xz";
+    };
+  };
+  kpeople = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kpeople-5.19.0.tar.xz";
+      sha256 = "1ksf6g71li1xk4q98cvwkam8m8g32x2815kj1gfwbg4g6iw74w98";
+      name = "kpeople-5.19.0.tar.xz";
+    };
+  };
+  kplotting = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kplotting-5.19.0.tar.xz";
+      sha256 = "169x4m9ms8yhfha8zclnl8wrnfhfqshpwwg4b5bd046pcrkqmnqq";
+      name = "kplotting-5.19.0.tar.xz";
+    };
+  };
+  kpty = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kpty-5.19.0.tar.xz";
+      sha256 = "0289vzfjwppwqj9h03flzhwm18dnxz11hqhdhr9990x7rw6a4n03";
+      name = "kpty-5.19.0.tar.xz";
+    };
+  };
+  kross = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/portingAids/kross-5.19.0.tar.xz";
+      sha256 = "1nv7mrhn7wa4bs2a164x42d3b37akyvhkxqs8cg5fqp4vr2wkw0p";
+      name = "kross-5.19.0.tar.xz";
+    };
+  };
+  krunner = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/portingAids/krunner-5.19.0.tar.xz";
+      sha256 = "054s8309lxi27gpbg7iygbcxsp0pwrzbzww3h8zp2a9yiic4s5mx";
+      name = "krunner-5.19.0.tar.xz";
+    };
+  };
+  kservice = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kservice-5.19.0.tar.xz";
+      sha256 = "02lbia26r2462nwksizaxjfkhxfqqs732dp495yx8bjc7wcv3srm";
+      name = "kservice-5.19.0.tar.xz";
+    };
+  };
+  ktexteditor = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/ktexteditor-5.19.0.tar.xz";
+      sha256 = "0v3l44w4k43ajs81i8386hszk3x7rajjlb6z3jb7q98vhp91b5dp";
+      name = "ktexteditor-5.19.0.tar.xz";
+    };
+  };
+  ktextwidgets = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/ktextwidgets-5.19.0.tar.xz";
+      sha256 = "1xydb76r6x1p10bkr2nlqg3md78jw8zvqad0h42dgvl4f5xvjknp";
+      name = "ktextwidgets-5.19.0.tar.xz";
+    };
+  };
+  kunitconversion = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kunitconversion-5.19.0.tar.xz";
+      sha256 = "11g1vhqkrb1k748drj7klkbb7jca3dybakcmcgqf53g8vxfih8kb";
+      name = "kunitconversion-5.19.0.tar.xz";
+    };
+  };
+  kwallet = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kwallet-5.19.0.tar.xz";
+      sha256 = "0z0c62fdfx9syrq6z7bk0ihac4yqyxpycll7h3mijj29km4jnpjm";
+      name = "kwallet-5.19.0.tar.xz";
+    };
+  };
+  kwidgetsaddons = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kwidgetsaddons-5.19.0.tar.xz";
+      sha256 = "0b85ng0dj5gpzifqmhyzgx61nb37vq7d0gvfpfazlcp5n27ywivm";
+      name = "kwidgetsaddons-5.19.0.tar.xz";
+    };
+  };
+  kwindowsystem = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kwindowsystem-5.19.0.tar.xz";
+      sha256 = "115xs34r74j9zcsw69glnh8w59iyh764n3gniawwrk23c6yb8fch";
+      name = "kwindowsystem-5.19.0.tar.xz";
+    };
+  };
+  kxmlgui = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kxmlgui-5.19.0.tar.xz";
+      sha256 = "1al2xifiyvl3zpva9nqap8gb6vqfgmf2fnhkmymm02rwg4yn4gah";
+      name = "kxmlgui-5.19.0.tar.xz";
+    };
+  };
+  kxmlrpcclient = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/kxmlrpcclient-5.19.0.tar.xz";
+      sha256 = "0lji7cxvh2lmjz42lx6ymz962gr4cyqfzksz0n5vgzfk5z0vq98g";
+      name = "kxmlrpcclient-5.19.0.tar.xz";
+    };
+  };
+  modemmanager-qt = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/modemmanager-qt-5.19.0.tar.xz";
+      sha256 = "05x9jicryjw9fj02arpya8xsh79rsnljnqjfpwbb7pi38f9i8v4w";
+      name = "modemmanager-qt-5.19.0.tar.xz";
+    };
+  };
+  networkmanager-qt = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/networkmanager-qt-5.19.0.tar.xz";
+      sha256 = "0wi0mkygzbvvyil1nyzc3ihgilvpx6j7caqaa9k38p85g93vsq13";
+      name = "networkmanager-qt-5.19.0.tar.xz";
+    };
+  };
+  oxygen-icons5 = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/oxygen-icons5-5.19.0.tar.xz";
+      sha256 = "09vfwcyidj3bl0qr4sq78bkc69zp9x8dwp8bsay5y05q8591dkg0";
+      name = "oxygen-icons5-5.19.0.tar.xz";
+    };
+  };
+  plasma-framework = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/plasma-framework-5.19.0.tar.xz";
+      sha256 = "1588r1jag0s9hhw4qq7mr2mcdd3d9az5ngb3z1l58xdhvfcc4497";
+      name = "plasma-framework-5.19.0.tar.xz";
+    };
+  };
+  solid = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/solid-5.19.0.tar.xz";
+      sha256 = "02bnvhscb55r6q5hkyh7rqi6zsc3r974y3x9shi8l0xbs78snkgz";
+      name = "solid-5.19.0.tar.xz";
+    };
+  };
+  sonnet = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/sonnet-5.19.0.tar.xz";
+      sha256 = "02ringh0wyiq1n19c200bcyf5x2w5jhw0pcxvfjzjai1sjig03x7";
+      name = "sonnet-5.19.0.tar.xz";
+    };
+  };
+  threadweaver = {
+    version = "5.19.0";
+    src = fetchurl {
+      url = "${mirror}/stable/frameworks/5.19/threadweaver-5.19.0.tar.xz";
+      sha256 = "1jm1sw7xq76s2ggghm6qqdn7452myy9n7p5zzdb01qbaw2y1x4pw";
+      name = "threadweaver-5.19.0.tar.xz";
+    };
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks-5.19/threadweaver.nix b/pkgs/development/libraries/kde-frameworks-5.19/threadweaver.nix
new file mode 100644
index 000000000000..52817921cc72
--- /dev/null
+++ b/pkgs/development/libraries/kde-frameworks-5.19/threadweaver.nix
@@ -0,0 +1,11 @@
+{ kdeFramework, lib
+, extra-cmake-modules
+}:
+
+kdeFramework {
+  name = "threadweaver";
+  nativeBuildInputs = [ extra-cmake-modules ];
+  meta = {
+    maintainers = [ lib.maintainers.ttuegel ];
+  };
+}
diff --git a/pkgs/development/libraries/lame/default.nix b/pkgs/development/libraries/lame/default.nix
index f4ea47e633f9..b324494faff7 100644
--- a/pkgs/development/libraries/lame/default.nix
+++ b/pkgs/development/libraries/lame/default.nix
@@ -32,6 +32,9 @@ stdenv.mkDerivation rec {
 
   patches = [ ./gcc-4.9.patch ];
 
+  outputs = [ "out" "lib" "doc" ]; # a small single header
+  outputMan = "out";
+
   nativeBuildInputs = [ ]
     ++ optional nasmSupport nasm;
 
diff --git a/pkgs/development/libraries/lcms/default.nix b/pkgs/development/libraries/lcms/default.nix
index c98a01f6f70f..9365cf0b5f09 100644
--- a/pkgs/development/libraries/lcms/default.nix
+++ b/pkgs/development/libraries/lcms/default.nix
@@ -8,6 +8,8 @@ stdenv.mkDerivation {
     sha256 = "1abkf8iphwyfs3z305z3qczm3z1i9idc1lz4gvfg92jnkz5k5bl0";
   };
 
+  outputs = [ "dev" "out" "bin" "man" ];
+
   meta = {
     description = "Color management engine";
     homepage = http://www.littlecms.com/;
diff --git a/pkgs/development/libraries/lcms2/default.nix b/pkgs/development/libraries/lcms2/default.nix
index db82c943d7c2..7dea029491aa 100644
--- a/pkgs/development/libraries/lcms2/default.nix
+++ b/pkgs/development/libraries/lcms2/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, libtiff, libjpeg, zlib}:
+{ stdenv, fetchurl, libtiff, libjpeg, zlib }:
 
 stdenv.mkDerivation rec {
   name = "lcms2-2.7";
@@ -8,13 +8,14 @@ stdenv.mkDerivation rec {
     sha256 = "0lvaglcjsvnyglgj3cb3pjc22nq8fml1vlx5dmmmw66ywx526925";
   };
 
+  outputs = [ "dev" "out" "bin" ];
+
   propagatedBuildInputs = [ libtiff libjpeg zlib ];
 
-  meta = {
+  meta = with stdenv.lib; {
     description = "Color management engine";
     homepage = http://www.littlecms.com/;
-    license = stdenv.lib.licenses.mit;
-    platforms = stdenv.lib.platforms.all;
-    maintainers = [ stdenv.lib.maintainers.urkud ];
+    license = licenses.mit;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/development/libraries/libao/default.nix b/pkgs/development/libraries/libao/default.nix
index c0a6d4b6b1f1..776cd0f5b91f 100644
--- a/pkgs/development/libraries/libao/default.nix
+++ b/pkgs/development/libraries/libao/default.nix
@@ -10,6 +10,8 @@ stdenv.mkDerivation rec {
     sha256 = "1bwwv1g9lchaq6qmhvj1pp3hnyqr64ydd4j38x94pmprs4d27b83";
   };
 
+  outputs = [ "dev" "out" "doc" ];
+
   buildInputs =
     [ pkgconfig ] ++
     lib.optional stdenv.isLinux (if usePulseAudio then libpulseaudio else alsaLib) ++
diff --git a/pkgs/development/libraries/libarchive/default.nix b/pkgs/development/libraries/libarchive/default.nix
index ff33043dbaea..467dd87f43e9 100644
--- a/pkgs/development/libraries/libarchive/default.nix
+++ b/pkgs/development/libraries/libarchive/default.nix
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
 
   preFixup = ''
     sed -i $out/lib/libarchive.la \
-      -e 's|-lcrypto|-L${openssl}/lib -lcrypto|' \
+      -e 's|-lcrypto|-L${openssl.out}/lib -lcrypto|' \
       -e 's|-llzo2|-L${lzo}/lib -llzo2|'
   '';
 
diff --git a/pkgs/development/libraries/libassuan/default.nix b/pkgs/development/libraries/libassuan/default.nix
index a9c83594179f..f2f31963d670 100644
--- a/pkgs/development/libraries/libassuan/default.nix
+++ b/pkgs/development/libraries/libassuan/default.nix
@@ -8,13 +8,16 @@ stdenv.mkDerivation rec {
     sha256 = "086bbcdnvs48qq5g4iac7dpk76j0q3jrp16mchdvyx0b720xq1mv";
   };
 
+  outputs = [ "dev" "out" "info" ];
+  outputBin = "dev"; # libassuan-config
+
   buildInputs = [ libgpgerror pth ];
 
   doCheck = true;
 
   # Make sure includes are fixed for callers who don't use libassuan-config
   postInstall = ''
-    sed -i 's,#include <gpg-error.h>,#include "${libgpgerror}/include/gpg-error.h",g' $out/include/assuan.h
+    sed -i 's,#include <gpg-error.h>,#include "${libgpgerror.dev}/include/gpg-error.h",g' $dev/include/assuan.h
   '';
 
   meta = {
diff --git a/pkgs/development/libraries/libav/default.nix b/pkgs/development/libraries/libav/default.nix
index 4d5563adab02..b84b852691fd 100644
--- a/pkgs/development/libraries/libav/default.nix
+++ b/pkgs/development/libraries/libav/default.nix
@@ -7,10 +7,10 @@
 , x264Support   ? false,  x264      ? null
 , xvidSupport   ? true,   xvidcore  ? null
 , faacSupport   ? false,  faac      ? null
-, vaapiSupport  ? false,  libva     ? null # ToDo: it has huge closure
+, vaapiSupport  ? true,   libva     ? null
 , vdpauSupport  ? true,   libvdpau  ? null
 , freetypeSupport ? true, freetype  ? null # it's small and almost everywhere
-, SDL # only for avplay in $tools, adds nontrivial closure to it
+, SDL # only for avplay in $bin, adds nontrivial closure to it
 , enableGPL ? true # ToDo: some additional default stuff may need GPL
 , enableUnfree ? faacSupport
 }:
@@ -81,20 +81,18 @@ let
 
     enableParallelBuilding = true;
 
-    outputs = [ "out" "tools" ];
+    outputs = [ "dev" "out" "bin" ];
+    setOutputFlags = false;
 
     # alltools to build smaller tools, incl. aviocat, ismindex, qt-faststart, etc.
     buildFlags = "all alltools install-man";
 
     postInstall = ''
-      # move avplay to get rid of the SDL dependency in the main output
-      mkdir -p "$tools/bin"
-      mv "$out/bin/avplay" "$tools/bin"
-
+      moveToOutput bin "$bin"
       # alltools target compiles an executable in tools/ for every C
       # source file in tools/, so move those to $out
       for tool in $(find tools -type f -executable); do
-        mv "$tool" "$out/bin/"
+        mv "$tool" "$bin/bin/"
       done
     '';
 
diff --git a/pkgs/development/libraries/libcaca/default.nix b/pkgs/development/libraries/libcaca/default.nix
index c3059642382a..7a905d9c82a6 100644
--- a/pkgs/development/libraries/libcaca/default.nix
+++ b/pkgs/development/libraries/libcaca/default.nix
@@ -11,10 +11,17 @@ stdenv.mkDerivation rec {
     sha256 = "1x3j6yfyxl52adgnabycr0n38j9hx2j74la0hz0n8cnh9ry4d2qj";
   };
 
+  outputs = [ "dev" "bin" "out" "man" ];
+
   configureFlags = "--disable-x11 --disable-imlib2 --disable-doc";
 
   propagatedBuildInputs = [ ncurses zlib ];
 
+  postInstall = ''
+    mkdir -p $dev/bin
+    mv $bin/bin/caca-config $dev/bin/caca-config
+  '';
+
   meta = {
     homepage = http://libcaca.zoy.org/;
     description = "A graphics library that outputs text instead of pixels";
diff --git a/pkgs/development/libraries/libcanberra/default.nix b/pkgs/development/libraries/libcanberra/default.nix
index b441719d31cd..8e3523a27e9f 100644
--- a/pkgs/development/libraries/libcanberra/default.nix
+++ b/pkgs/development/libraries/libcanberra/default.nix
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
 
   postInstall = ''
     for f in $out/lib/*.la; do
-      sed 's|-lltdl|-L${libtool}/lib -lltdl|' -i $f
+      sed 's|-lltdl|-L${libtool.lib}/lib -lltdl|' -i $f
     done
   '';
 
diff --git a/pkgs/development/libraries/libdbi-drivers/default.nix b/pkgs/development/libraries/libdbi-drivers/default.nix
index ccc0a1996549..f64174778b20 100644
--- a/pkgs/development/libraries/libdbi-drivers/default.nix
+++ b/pkgs/development/libraries/libdbi-drivers/default.nix
@@ -31,11 +31,11 @@ stdenv.mkDerivation rec {
   ] ++ optionals (postgresql != null) [
     "--with-pgsql"
     "--with-pgsql_incdir=${postgresql}/include"
-    "--with-pgsql_libdir=${postgresql}/lib"
+    "--with-pgsql_libdir=${postgresql.lib}/lib"
   ] ++ optionals (sqlite != null) [
     "--with-sqlite3"
-    "--with-sqlite3-incdir=${sqlite}/include/sqlite"
-    "--with-sqlite3-libdir=${sqlite}/lib/sqlite"
+    "--with-sqlite3-incdir=${sqlite.dev}/include/sqlite"
+    "--with-sqlite3-libdir=${sqlite.out}/lib/sqlite"
   ];
 
   installFlags = [ "DESTDIR=\${out}" ];
diff --git a/pkgs/development/libraries/libdrm/default.nix b/pkgs/development/libraries/libdrm/default.nix
index 154277f9cc66..ad524ffeb027 100644
--- a/pkgs/development/libraries/libdrm/default.nix
+++ b/pkgs/development/libraries/libdrm/default.nix
@@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "79cb8e988749794edfb2d777b298d5292eff353bbbb71ed813589e61d2bc2d76";
   };
 
+  outputs = [ "dev" "out" ];
+
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [ libpthreadstubs libpciaccess ]
     ++ stdenv.lib.optional stdenv.isLinux udev;
diff --git a/pkgs/development/libraries/libdvdcss/default.nix b/pkgs/development/libraries/libdvdcss/default.nix
index d68b0a367517..c5cdec0ae5ff 100644
--- a/pkgs/development/libraries/libdvdcss/default.nix
+++ b/pkgs/development/libraries/libdvdcss/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl}:
+{ stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "libdvdcss-${version}";
@@ -9,8 +9,10 @@ stdenv.mkDerivation rec {
     sha256 = "158k9zagmbk5bkbz96l6lwhh7xcgfcnzflkr4vblskhcab6llhbw";
   };
 
-  meta = {
+  meta = with stdenv.lib; {
     homepage = http://www.videolan.org/developers/libdvdcss.html;
     description = "A library for decrypting DVDs";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/development/libraries/libedit/default.nix b/pkgs/development/libraries/libedit/default.nix
index 6e8d85cb88d9..7868c2cfd140 100644
--- a/pkgs/development/libraries/libedit/default.nix
+++ b/pkgs/development/libraries/libedit/default.nix
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
 
   postInstall = ''
     find $out/lib -type f | grep '\.\(la\|pc\)''$' | xargs sed -i \
-      -e 's,-lncurses[a-z]*,-L${ncurses}/lib -lncursesw,g'
+      -e 's,-lncurses[a-z]*,-L${ncurses.out}/lib -lncursesw,g'
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/libraries/libelf/default.nix b/pkgs/development/libraries/libelf/default.nix
index 048902f4fc49..623256bb6b7b 100644
--- a/pkgs/development/libraries/libelf/default.nix
+++ b/pkgs/development/libraries/libelf/default.nix
@@ -1,6 +1,6 @@
 { fetchurl, stdenv, gettext, glibc }:
 
-stdenv.mkDerivation (rec {
+stdenv.mkDerivation rec {
   name = "libelf-0.8.13";
 
   src = fetchurl {
@@ -15,6 +15,11 @@ stdenv.mkDerivation (rec {
     nativeBuildInputs = [ glibc ];
   };
 
+  # Libelf's custom NLS macros fail to determine the catalog file extension on
+  # Darwin, so disable NLS for now.
+  # FIXME: Eventually make Gettext a build input on all platforms.
+  configureFlags = stdenv.lib.optional stdenv.isDarwin "--disable-nls";
+
   buildInputs = [ gettext ];
 
   meta = {
@@ -28,12 +33,3 @@ stdenv.mkDerivation (rec {
     maintainers = [ ];
   };
 }
-
-//
-
-# Libelf's custom NLS macros fail to determine the catalog file extension on
-# Darwin, so disable NLS for now.
-# FIXME: Eventually make Gettext a build input on all platforms.
-(if stdenv.isDarwin
- then { configureFlags = [ "--disable-nls" ]; }
- else { }))
diff --git a/pkgs/development/libraries/libevent/default.nix b/pkgs/development/libraries/libevent/default.nix
index bddda9f3eadd..b0b537ddb175 100644
--- a/pkgs/development/libraries/libevent/default.nix
+++ b/pkgs/development/libraries/libevent/default.nix
@@ -8,14 +8,14 @@ stdenv.mkDerivation {
     url = "mirror://sourceforge/levent/libevent-${version}-stable.tar.gz";
     sha256 = "18qz9qfwrkakmazdlwxvjmw8p76g70n3faikwvdwznns1agw9hki";
   };
+  postPatch = "patchShebangs event_rpcgen.py";
+
+  outputs = [ "dev" "out" ];
+  outputBin = "dev";
 
   nativeBuildInputs = [ autoreconfHook ];
   buildInputs = [ openssl python ] ++ stdenv.lib.optional stdenv.isCygwin findutils;
 
-  patchPhase = ''
-    patchShebangs event_rpcgen.py
-  '';
-
   meta = with stdenv.lib; {
     description = "Event notification library";
 
diff --git a/pkgs/development/libraries/libextractor/default.nix b/pkgs/development/libraries/libextractor/default.nix
index 18387c904f83..2b6571290dfb 100644
--- a/pkgs/development/libraries/libextractor/default.nix
+++ b/pkgs/development/libraries/libextractor/default.nix
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
 
   configureFlags = "--disable-ltdl-install "
     + "--with-ltdl-include=${libtool}/include "
-    + "--with-ltdl-lib=${libtool}/lib "
+    + "--with-ltdl-lib=${libtool.lib}/lib "
     + "--enable-xpdf";
 
   # Checks need to be run after "make install", otherwise plug-ins are not in
diff --git a/pkgs/development/libraries/libffi/default.nix b/pkgs/development/libraries/libffi/default.nix
index 5c981e664cb4..962f716c120a 100644
--- a/pkgs/development/libraries/libffi/default.nix
+++ b/pkgs/development/libraries/libffi/default.nix
@@ -8,7 +8,9 @@ stdenv.mkDerivation rec {
     sha256 = "0dya49bnhianl0r65m65xndz6ls2jn1xngyn72gd28ls3n7bnvnh";
   };
 
-  patches = if stdenv.isCygwin then [ ./3.2.1-cygwin.patch ] else null;
+  patches = stdenv.lib.optional stdenv.isCygwin ./3.2.1-cygwin.patch;
+
+  outputs = [ "dev" "out" "doc" ];
 
   buildInputs = stdenv.lib.optional doCheck dejagnu;
 
@@ -21,9 +23,13 @@ stdenv.mkDerivation rec {
 
   dontStrip = stdenv ? cross; # Don't run the native `strip' when cross-compiling.
 
-  # Install headers in the right place.
-  postInstall = ''
-    ln -s${if (stdenv.isFreeBSD || stdenv.isOpenBSD || stdenv.isDarwin) then "" else "r"}v "$out/lib/"libffi*/include "$out/include"
+  # Install headers and libs in the right places.
+  postFixup = ''
+    mkdir -p "$dev/"
+    mv "$out/lib/${name}/include" "$dev/include"
+    rmdir "$out/lib/${name}"
+    substituteInPlace "$dev/lib/pkgconfig/libffi.pc" \
+      --replace 'includedir=''${libdir}/libffi-3.2.1' "includedir=$dev"
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/libraries/libfm/default.nix b/pkgs/development/libraries/libfm/default.nix
index efa9b90e869f..db17b46b0d35 100644
--- a/pkgs/development/libraries/libfm/default.nix
+++ b/pkgs/development/libraries/libfm/default.nix
@@ -3,11 +3,15 @@
 let
     inherit (stdenv.lib) optional;
 in
-stdenv.mkDerivation {
-  name = if extraOnly then "libfm-extra-1.2.3" else "libfm-1.2.3";
+stdenv.mkDerivation rec {
+  name = if extraOnly
+    then "libfm-extra-${version}"
+    else "libfm-${version}";
+  version = "1.2.4";
+
   src = fetchurl {
-    url = "mirror://sourceforge/pcmanfm/libfm-1.2.3.tar.xz";
-    sha256 = "1ygvw52262r3jp1f45m9cdpx5xgvd4rkyfszslfqvg2c99ig34n6";
+    url = "mirror://sourceforge/pcmanfm/libfm-${version}.tar.xz";
+    sha256 = "0bsh4p7h2glhxf1cc1lvbxyb4qy0y1zsnl9izf7vrldkikrgc13q";
   };
 
   buildInputs = [ glib gtk intltool pango pkgconfig vala ]
diff --git a/pkgs/development/libraries/libgcrypt/1.5.nix b/pkgs/development/libraries/libgcrypt/1.5.nix
index 990e73d0a63e..d77946e5ec37 100644
--- a/pkgs/development/libraries/libgcrypt/1.5.nix
+++ b/pkgs/development/libraries/libgcrypt/1.5.nix
@@ -17,9 +17,9 @@ stdenv.mkDerivation rec {
   # Make sure libraries are correct for .pc and .la files
   # Also make sure includes are fixed for callers who don't use libgpgcrypt-config
   postInstall = ''
-    sed -i 's,#include <gpg-error.h>,#include "${libgpgerror}/include/gpg-error.h",g' $out/include/gcrypt.h
+    sed -i 's,#include <gpg-error.h>,#include "${libgpgerror.dev}/include/gpg-error.h",g' $out/include/gcrypt.h
   '' + stdenv.lib.optionalString enableCapabilities ''
-    sed -i 's,\(-lcap\),-L${libcap}/lib \1,' $out/lib/libgcrypt.la
+    sed -i 's,\(-lcap\),-L${libcap.out}/lib \1,' $out/lib/libgcrypt.la
   '';
 
   doCheck = true;
diff --git a/pkgs/development/libraries/libgcrypt/default.nix b/pkgs/development/libraries/libgcrypt/default.nix
index 835d6f0f5c29..f36113090ce4 100644
--- a/pkgs/development/libraries/libgcrypt/default.nix
+++ b/pkgs/development/libraries/libgcrypt/default.nix
@@ -10,16 +10,19 @@ stdenv.mkDerivation rec {
     sha256 = "0959mwfzsxhallxdqlw359xg180ll2skxwyy35qawmfl89cbr7pl";
   };
 
+  outputs = [ "dev" "out" "info" ];
+  outputBin = "dev";
+
   buildInputs =
     [ libgpgerror ]
     ++ lib.optional enableCapabilities libcap;
 
   # Make sure libraries are correct for .pc and .la files
   # Also make sure includes are fixed for callers who don't use libgpgcrypt-config
-  postInstall = ''
-    sed -i 's,#include <gpg-error.h>,#include "${libgpgerror}/include/gpg-error.h",g' $out/include/gcrypt.h
+  postFixup = ''
+    sed -i 's,#include <gpg-error.h>,#include "${libgpgerror.dev}/include/gpg-error.h",g' "$dev/include/gcrypt.h"
   '' + stdenv.lib.optionalString enableCapabilities ''
-    sed -i 's,\(-lcap\),-L${libcap}/lib \1,' $out/lib/libgcrypt.la
+    sed -i 's,\(-lcap\),-L${libcap.out}/lib \1,' $out/lib/libgcrypt.la
   '';
 
   # TODO: figure out why this is even necessary and why the missing dylib only crashes
diff --git a/pkgs/development/libraries/libgpg-error/default.nix b/pkgs/development/libraries/libgpg-error/default.nix
index 26214bd8801b..9c4f3705b3ed 100644
--- a/pkgs/development/libraries/libgpg-error/default.nix
+++ b/pkgs/development/libraries/libgpg-error/default.nix
@@ -10,6 +10,9 @@ stdenv.mkDerivation rec {
 
   postPatch = "sed '/BUILD_TIMESTAMP=/s/=.*/=1970-01-01T00:01+0000/' -i ./configure";
 
+  outputs = [ "dev" "out" "info" ];
+  outputBin = "dev"; # deps want just the lib, most likely
+
   # If architecture-dependent MO files aren't available, they're generated
   # during build, so we need gettext for cross-builds.
   crossAttrs.buildInputs = [ gettext ];
@@ -25,7 +28,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = {
+  meta = with stdenv.lib; {
     homepage = "https://www.gnupg.org/related_software/libgpg-error/index.html";
     description = "A small library that defines common error values for all GnuPG components";
 
@@ -36,9 +39,9 @@ stdenv.mkDerivation rec {
       Daemon and possibly more in the future.
     '';
 
-    license = stdenv.lib.licenses.lgpl2Plus;
-    platforms = stdenv.lib.platforms.all;
-    maintainers = with stdenv.lib.maintainers; [ fuuzetsu ];
+    license = licenses.lgpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.fuuzetsu ];
   };
 }
 
diff --git a/pkgs/development/libraries/libgphoto2/default.nix b/pkgs/development/libraries/libgphoto2/default.nix
index e25cdb61d86a..55129a94476a 100644
--- a/pkgs/development/libraries/libgphoto2/default.nix
+++ b/pkgs/development/libraries/libgphoto2/default.nix
@@ -5,7 +5,7 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "mirror://sourceforge/gphoto/${name}.tar.bz2";
-    sha256 = "0chz57rhzdz1cbdjw1q5rs439s879kk06jrci4jyn5rlm7iyic6d";
+    sha256 = "1wjf79ipqwb5phfjjwf15rwgigakylnfqaj4crs5qnds6ba6i1ld";
   };
 
   nativeBuildInputs = [ pkgconfig gettext ];
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
       MTP, and other vendor specific protocols for controlling and transferring data
       from digital cameras.
     '';
-    version = "2.5.9";
+    version = "2.5.10";
     # XXX: the homepage claims LGPL, but several src files are lgpl21Plus
     license = stdenv.lib.licenses.lgpl21Plus;
     platforms = with stdenv.lib.platforms; unix;
diff --git a/pkgs/development/libraries/libgsf/default.nix b/pkgs/development/libraries/libgsf/default.nix
index b7e774b52235..25d1ceb40bdb 100644
--- a/pkgs/development/libraries/libgsf/default.nix
+++ b/pkgs/development/libraries/libgsf/default.nix
@@ -4,11 +4,11 @@
 with { inherit (stdenv.lib) optionals; };
 
 stdenv.mkDerivation rec {
-  name = "libgsf-1.14.34";
+  name = "libgsf-1.14.36";
 
   src = fetchurl {
     url    = "mirror://gnome/sources/libgsf/1.14/${name}.tar.xz";
-    sha256 = "f0fea447e0374a73df45b498fd1701393f8e6acb39746119f8a292fb4a0cb528";
+    sha256 = "0h19ssxzz0cmznwga2xy55kjibm24mwxqarnpd0w7xy0hrzm1dvi";
   };
 
   nativeBuildInputs = [ pkgconfig intltool ];
diff --git a/pkgs/development/libraries/libguestfs/default.nix b/pkgs/development/libraries/libguestfs/default.nix
index 2e3307b54bf5..8901fef21fd0 100644
--- a/pkgs/development/libraries/libguestfs/default.nix
+++ b/pkgs/development/libraries/libguestfs/default.nix
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
 
   configureFlags = "--disable-appliance --disable-daemon";
   patches = [ ./libguestfs-syms.patch ];
-  NIX_CFLAGS_COMPILE="-I${libxml2}/include/libxml2/";
+  NIX_CFLAGS_COMPILE="-I${libxml2.dev}/include/libxml2/";
 
   postInstall = ''
     for bin in $out/bin/*; do
diff --git a/pkgs/development/libraries/libidn/default.nix b/pkgs/development/libraries/libidn/default.nix
index c3c6c13c98fc..b16dc8357414 100644
--- a/pkgs/development/libraries/libidn/default.nix
+++ b/pkgs/development/libraries/libidn/default.nix
@@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "1xf4hphhahcjm2xwx147lfpsavjwv9l4c2gf6hx71zxywbz5lpds";
   };
 
+  outputs = [ "dev" "out" "bin" "info" "docdev" ];
+
   doCheck = ! stdenv.isDarwin;
 
   buildInputs = stdenv.lib.optional stdenv.isDarwin libiconv;
diff --git a/pkgs/development/libraries/libjpeg-turbo/default.nix b/pkgs/development/libraries/libjpeg-turbo/default.nix
index 3660a652e79d..79cf45a8005f 100644
--- a/pkgs/development/libraries/libjpeg-turbo/default.nix
+++ b/pkgs/development/libraries/libjpeg-turbo/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, nasm }:
+{ stdenv, fetchurl, nasm, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   name = "libjpeg-turbo-1.4.2";
@@ -8,7 +8,11 @@ stdenv.mkDerivation rec {
     sha256 = "0gi349hp1x7mb98s4mf66sb2xay2kjjxj9ihrriw0yiy0k9va6sj";
   };
 
-  buildInputs = [ nasm ];
+  outputs = [ "dev" "out" "doc" "bin" ];
+
+  buildInputs = [ autoreconfHook nasm ];
+
+  enableParallelBuilding = true;
 
   doCheck = true;
   checkTarget = "test";
diff --git a/pkgs/development/libraries/libjpeg/default.nix b/pkgs/development/libraries/libjpeg/default.nix
index bf2ebb27f37f..025be2009599 100644
--- a/pkgs/development/libraries/libjpeg/default.nix
+++ b/pkgs/development/libraries/libjpeg/default.nix
@@ -12,6 +12,8 @@ stdenv.mkDerivation {
 
   configureFlags = optional static "--enable-static --disable-shared";
 
+  outputs = [ "dev" "out" "man" "bin" ];
+
   meta = {
     homepage = http://www.ijg.org/;
     description = "A library that implements the JPEG image file format";
diff --git a/pkgs/development/libraries/libmbim/default.nix b/pkgs/development/libraries/libmbim/default.nix
index f910741c446e..8baf4a77c362 100644
--- a/pkgs/development/libraries/libmbim/default.nix
+++ b/pkgs/development/libraries/libmbim/default.nix
@@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "0abv0h9c3kbw4bq1b9270sg189jcjj3x3wa91bj836ynwg9m34wl";
   };
 
+  outputs = [ "dev" "out" "doc" ];
+
   preConfigure = ''
     patchShebangs .
   '';
diff --git a/pkgs/development/libraries/libmicrohttpd/default.nix b/pkgs/development/libraries/libmicrohttpd/default.nix
index 3ef4ba77c31c..c68187945334 100644
--- a/pkgs/development/libraries/libmicrohttpd/default.nix
+++ b/pkgs/development/libraries/libmicrohttpd/default.nix
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "07j1p21rvbrrfpxngk8xswzkmjkh94bp1971xfjh1p0ja709qwzj";
   };
 
-  outputs = [ "out" "info" ];
+  outputs = [ "dev" "out" "docdev" ];
 
   buildInputs = [ libgcrypt ];
 
diff --git a/pkgs/development/libraries/libmng/default.nix b/pkgs/development/libraries/libmng/default.nix
index 234f56863c09..b97ee6a4ced0 100644
--- a/pkgs/development/libraries/libmng/default.nix
+++ b/pkgs/development/libraries/libmng/default.nix
@@ -8,13 +8,16 @@ stdenv.mkDerivation rec {
     sha256 = "0l5wa3b9rr4zl49zbbjpapqyccqjwzkzw1ph3p4pk9p5h73h9317";
   };
 
+  outputs = [ "dev" "out" "docdev" ];
+  outputMan= "docdev";
+
   propagatedBuildInputs = [ zlib libpng libjpeg lcms2 ];
 
-  meta = {
+  meta = with stdenv.lib; {
     description = "Reference library for reading, displaying, writing and examining Multiple-Image Network Graphics";
     homepage = http://www.libmng.com;
-    license = stdenv.lib.licenses.zlib;
-    maintainers = with stdenv.lib.maintainers; [ marcweber urkud ];
-    hydraPlatforms = stdenv.lib.platforms.linux;
+    license = licenses.zlib;
+    maintainers = with maintainers; [ marcweber urkud ];
+    hydraPlatforms = platforms.linux;
   };
 }
diff --git a/pkgs/development/libraries/libmpc/default.nix b/pkgs/development/libraries/libmpc/default.nix
index 1e8ea0ffa138..2a4600f52045 100644
--- a/pkgs/development/libraries/libmpc/default.nix
+++ b/pkgs/development/libraries/libmpc/default.nix
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ gmp mpfr ];
 
-  CFLAGS = "-I${gmp}/include";
+  CFLAGS = "-I${gmp.dev}/include";
 
   doCheck = true;
 
diff --git a/pkgs/development/libraries/libmtp/default.nix b/pkgs/development/libraries/libmtp/default.nix
index 13b405019336..671169b9ab3a 100644
--- a/pkgs/development/libraries/libmtp/default.nix
+++ b/pkgs/development/libraries/libmtp/default.nix
@@ -3,17 +3,19 @@
 stdenv.mkDerivation rec {
   name = "libmtp-1.1.9";
 
-  propagatedBuildInputs = [ libusb1 ];
-  buildInputs = [ pkgconfig ];
-
-  # tried to install files to /lib/udev, hopefully OK
-  configureFlags = [ "--with-udev=$$out/lib/udev" ];
-
   src = fetchurl {
     url = "mirror://sourceforge/libmtp/${name}.tar.gz";
     sha256 = "12dinqic0ljnhrwx3rc61jc7q24ybr0mckc2ya5kh1s1np0d7w93";
   };
 
+  outputs = [ "dev" "bin" "out" ];
+
+  propagatedBuildInputs = [ libusb1 ];
+  buildInputs = [ pkgconfig ];
+
+  # tried to install files to /lib/udev, hopefully OK
+  configureFlags = [ "--with-udev=$$bin/lib/udev" ];
+
   meta = {
     homepage = http://libmtp.sourceforge.net;
     description = "An implementation of Microsoft's Media Transfer Protocol";
diff --git a/pkgs/development/libraries/liboauth/default.nix b/pkgs/development/libraries/liboauth/default.nix
index 479a187cf87c..f62fb400199f 100644
--- a/pkgs/development/libraries/liboauth/default.nix
+++ b/pkgs/development/libraries/liboauth/default.nix
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 
   postInstall = ''
     substituteInPlace $out/lib/liboauth.la \
-      --replace "-lnss3" "-L${nss}/lib -lnss3"
+      --replace "-lnss3" "-L${nss.out}/lib -lnss3"
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/libraries/libogg/default.nix b/pkgs/development/libraries/libogg/default.nix
index 407e218065bb..1aa4b8ad0453 100644
--- a/pkgs/development/libraries/libogg/default.nix
+++ b/pkgs/development/libraries/libogg/default.nix
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "16z74q422jmprhyvy7c9x909li8cqzmvzyr8cgbm52xcsp6pqs1z";
   };
 
-  outputs = [ "out" "doc" ];
+  outputs = [ "dev" "out" "doc" ];
 
   meta = with stdenv.lib; {
     homepage = http://xiph.org/ogg/;
diff --git a/pkgs/development/libraries/liboil/default.nix b/pkgs/development/libraries/liboil/default.nix
index 43b1f3470934..754e308ac15b 100644
--- a/pkgs/development/libraries/liboil/default.nix
+++ b/pkgs/development/libraries/liboil/default.nix
@@ -8,10 +8,13 @@ stdenv.mkDerivation rec {
     sha256 = "0sgwic99hxlb1av8cm0albzh8myb7r3lpcwxfm606l0bkc3h4pqh";
   };
 
-  buildInputs = [ pkgconfig ];
-
   patches = [ ./x86_64-cpuid.patch ];
 
+  outputs = [ "dev" "out" "docdev" ];
+  outputBin = "dev"; # oil-bugreport
+
+  nativeBuildInputs = [ pkgconfig ];
+
   # fix "argb_paint_i386.c:53:Incorrect register `%rax' used with `l' suffix"
   # errors
   configureFlags = stdenv.lib.optional stdenv.isDarwin "--build=x86_64";
diff --git a/pkgs/development/libraries/libopus/default.nix b/pkgs/development/libraries/libopus/default.nix
index 460aaa2b0eca..b8951e66c8bd 100644
--- a/pkgs/development/libraries/libopus/default.nix
+++ b/pkgs/development/libraries/libopus/default.nix
@@ -11,6 +11,8 @@ stdenv.mkDerivation rec {
     sha256 = "158xprn2086arvdib3vbbygz7z6jqkw2nci7nlywzzwallap0wmr";
   };
 
+  outputs = [ "dev" "out" ];
+
   configureFlags = stdenv.lib.optional fixedPoint "--enable-fixed-point"
                 ++ stdenv.lib.optional withCustomModes "--enable-custom-modes";
 
diff --git a/pkgs/development/libraries/libpng/12.nix b/pkgs/development/libraries/libpng/12.nix
index 7ae3d0e1d682..01e90cb19132 100644
--- a/pkgs/development/libraries/libpng/12.nix
+++ b/pkgs/development/libraries/libpng/12.nix
@@ -10,6 +10,8 @@ stdenv.mkDerivation rec {
     sha256 = "0zkra0b9lrpk2axassdgkqinmc2ba6b473sm52xbpyknaqs2fljy";
   };
 
+  outputs = [ "dev" "out" "man" ];
+
   propagatedBuildInputs = [ zlib ];
 
   passthru = { inherit zlib; };
@@ -21,6 +23,8 @@ stdenv.mkDerivation rec {
 
   configureFlags = "--enable-static";
 
+  postInstall = ''mv "$out/bin" "$dev/bin"'';
+
   meta = with stdenv.lib; {
     description = "The official reference implementation for the PNG file format";
     homepage = http://www.libpng.org/pub/png/libpng.html;
diff --git a/pkgs/development/libraries/libpng/default.nix b/pkgs/development/libraries/libpng/default.nix
index 4e18dcb680f9..6faed97aaee2 100644
--- a/pkgs/development/libraries/libpng/default.nix
+++ b/pkgs/development/libraries/libpng/default.nix
@@ -18,13 +18,18 @@ in stdenv.mkDerivation rec {
     url = "mirror://sourceforge/libpng/libpng-${version}.tar.xz";
     inherit sha256;
   };
-
   postPatch = whenPatched "gunzip < ${patch_src} | patch -Np1";
 
+  outputs = [ "dev" "out" "man" ];
+
   propagatedBuildInputs = [ zlib ];
 
+  preConfigure = "export bin=$dev";
+
   doCheck = true;
 
+  postInstall = ''mv "$out/bin" "$dev/bin"'';
+
   passthru = { inherit zlib; };
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/libraries/libproxy/default.nix b/pkgs/development/libraries/libproxy/default.nix
index 7085236feb52..0f0808506398 100644
--- a/pkgs/development/libraries/libproxy/default.nix
+++ b/pkgs/development/libraries/libproxy/default.nix
@@ -7,6 +7,8 @@ stdenv.mkDerivation rec {
     sha256 = "0jw6454gxjykmbnbh544axi8hzz9gmm4jz1y5gw1hdqnakg36gyw";
   };
 
+  outputs = [ "dev" "out" ]; # to deal with propagatedBuildInputs
+
   nativeBuildInputs = [ pkgconfig cmake ];
   propagatedBuildInputs = [ zlib ]
     # now some optional deps, but many more are possible
diff --git a/pkgs/development/libraries/libqmi/default.nix b/pkgs/development/libraries/libqmi/default.nix
index 9699d67d7b87..82768cd350dd 100644
--- a/pkgs/development/libraries/libqmi/default.nix
+++ b/pkgs/development/libraries/libqmi/default.nix
@@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "101ppan2q1h4pyp2zbn9b8sdwy2c7fk9rp91yykxz3afrvzbymq8";
   };
 
+  outputs = [ "dev" "out" "docdev" ];
+
   preBuild = ''
     patchShebangs .
   '';
diff --git a/pkgs/development/libraries/libraw/default.nix b/pkgs/development/libraries/libraw/default.nix
index 3d564fc00f8b..031886d34516 100644
--- a/pkgs/development/libraries/libraw/default.nix
+++ b/pkgs/development/libraries/libraw/default.nix
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "043kckxjqanw8dl3m9f6kvsf0l20ywxmgxd1xb0slj6m8l4w4hz6";
   };
 
-  buildInputs = [ lcms2 jasper ] ;
+  buildInputs = [ lcms2 jasper ];
 
   nativeBuildInputs = [ pkgconfig ];
 
diff --git a/pkgs/development/libraries/librsvg/default.nix b/pkgs/development/libraries/librsvg/default.nix
index ea1910733e7d..0768a21bf543 100644
--- a/pkgs/development/libraries/librsvg/default.nix
+++ b/pkgs/development/libraries/librsvg/default.nix
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
     ++ stdenv.lib.optional stdenv.isDarwin "--disable-Bsymbolic";
 
   NIX_CFLAGS_COMPILE
-    = stdenv.lib.optionalString stdenv.isDarwin "-I${cairo}/include/cairo";
+    = stdenv.lib.optionalString stdenv.isDarwin "-I${cairo.dev}/include/cairo";
 
   # It wants to add loaders and update the loaders.cache in gdk-pixbuf
   # Patching the Makefiles to it creates rsvg specific loaders and the
@@ -47,7 +47,7 @@ stdenv.mkDerivation rec {
   # Merge gdkpixbuf and librsvg loaders
   postInstall = ''
     mv $GDK_PIXBUF/loaders.cache $GDK_PIXBUF/loaders.cache.tmp
-    cat ${gdk_pixbuf}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache $GDK_PIXBUF/loaders.cache.tmp > $GDK_PIXBUF/loaders.cache
+    cat ${gdk_pixbuf.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache $GDK_PIXBUF/loaders.cache.tmp > $GDK_PIXBUF/loaders.cache
     rm $GDK_PIXBUF/loaders.cache.tmp
   '';
 }
diff --git a/pkgs/development/libraries/libsamplerate/default.nix b/pkgs/development/libraries/libsamplerate/default.nix
index 481d82c0c9ad..f0ff549c7168 100644
--- a/pkgs/development/libraries/libsamplerate/default.nix
+++ b/pkgs/development/libraries/libsamplerate/default.nix
@@ -1,6 +1,4 @@
-{ stdenv, fetchurl, pkgconfig
-, fftw, libsndfile
-}:
+{ stdenv, fetchurl, pkgconfig, libsndfile }:
 
 stdenv.mkDerivation rec {
   name = "libsamplerate-0.1.8";
@@ -11,12 +9,14 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ fftw libsndfile ];
+  buildInputs = [ libsndfile ];
 
   # maybe interesting configure flags:
   #--disable-fftw          disable usage of FFTW
   #--disable-cpu-clip      disable tricky cpu specific clipper
 
+  outputs = [ "dev" "bin" "out" ];
+
   postConfigure = stdenv.lib.optionalString stdenv.isDarwin
     ''
       # need headers from the Carbon.framework in /System/Library/Frameworks to
diff --git a/pkgs/development/libraries/libsndfile/default.nix b/pkgs/development/libraries/libsndfile/default.nix
index 48a2999e7af9..547c7647b7a8 100644
--- a/pkgs/development/libraries/libsndfile/default.nix
+++ b/pkgs/development/libraries/libsndfile/default.nix
@@ -3,16 +3,20 @@
 }:
 
 stdenv.mkDerivation rec {
-  name = "libsndfile-1.0.25";
+  name = "libsndfile-1.0.26";
 
   src = fetchurl {
     url = "http://www.mega-nerd.com/libsndfile/files/${name}.tar.gz";
-    sha256 = "10j8mbb65xkyl0kfy0hpzpmrp0jkr12c7mfycqipxgka6ayns0ar";
+    sha256 = "14jhla289cj45946h0hq2an0a9g4wkwb3v4571bla6ixfvn20rfd";
   };
 
   buildInputs = [ pkgconfig flac libogg libvorbis ]
     ++ stdenv.lib.optional stdenv.isDarwin Carbon;
 
+  enableParallelBuilding = true;
+
+  outputs = [ "dev" "out" "bin" "doc" ];
+
   # need headers from the Carbon.framework in /System/Library/Frameworks to
   # compile this on darwin -- not sure how to handle
   preConfigure = stdenv.lib.optionalString stdenv.isDarwin
diff --git a/pkgs/development/libraries/libsodium/default.nix b/pkgs/development/libraries/libsodium/default.nix
index 1490e15c361f..e8b3bc1cebc9 100644
--- a/pkgs/development/libraries/libsodium/default.nix
+++ b/pkgs/development/libraries/libsodium/default.nix
@@ -8,7 +8,9 @@ stdenv.mkDerivation rec {
     sha256 = "1gn45g956lyz8l6iq187yc6l627vyivyp8qc5dkr6dnhdnlqddvi";
   };
 
-  NIX_LDFLAGS = stdenv.lib.optionalString stdenv.cc.isGNU "-lssp";
+  outputs = [ "dev" "out" ];
+
+  enableParallelBuilding = true;
 
   doCheck = true;
 
diff --git a/pkgs/development/libraries/libsoup/default.nix b/pkgs/development/libraries/libsoup/default.nix
index 3d10e6135055..aa84c507c97a 100644
--- a/pkgs/development/libraries/libsoup/default.nix
+++ b/pkgs/development/libraries/libsoup/default.nix
@@ -18,11 +18,13 @@ stdenv.mkDerivation {
     patchShebangs libsoup/
   '';
 
+  outputs = [ "dev" "out" ];
+
   buildInputs = libintlOrEmpty ++ [ intltool python sqlite ];
   nativeBuildInputs = [ pkgconfig ];
   propagatedBuildInputs = [ glib libxml2 gobjectIntrospection ]
     ++ stdenv.lib.optionals gnomeSupport [ libgnome_keyring ];
-  passthru.propagatedUserEnvPackages = [ glib_networking ];
+  passthru.propagatedUserEnvPackages = [ glib_networking.out ];
 
   # glib_networking is a runtime dependency, not a compile-time dependency
   configureFlags = "--disable-tls-check --enable-vala=no" + stdenv.lib.optionalString (!gnomeSupport) " --without-gnome";
diff --git a/pkgs/development/libraries/libssh/default.nix b/pkgs/development/libraries/libssh/default.nix
index 17538a6c3803..adfd11d9b197 100644
--- a/pkgs/development/libraries/libssh/default.nix
+++ b/pkgs/development/libraries/libssh/default.nix
@@ -13,6 +13,8 @@ stdenv.mkDerivation rec {
     sed -i 's,nacl/,sodium/,g' ./include/libssh/curve25519.h src/curve25519.c
   '';
 
+  outputs = [ "dev" "out" ];
+
   buildInputs = [ zlib openssl libsodium ];
 
   nativeBuildInputs = [ cmake pkgconfig ];
diff --git a/pkgs/development/libraries/libssh2/default.nix b/pkgs/development/libraries/libssh2/default.nix
index 326817843351..855e57c0550a 100644
--- a/pkgs/development/libraries/libssh2/default.nix
+++ b/pkgs/development/libraries/libssh2/default.nix
@@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "116mh112w48vv9k3f15ggp5kxw5sj4b88dzb5j69llsh7ba1ymp4";
   };
 
+  outputs = [ "dev" "out" "docdev" ];
+
   buildInputs = [ openssl zlib ];
 
   crossAttrs = {
diff --git a/pkgs/development/libraries/libtasn1/default.nix b/pkgs/development/libraries/libtasn1/default.nix
index 1ae26c48fc21..5ac8cc94d044 100644
--- a/pkgs/development/libraries/libtasn1/default.nix
+++ b/pkgs/development/libraries/libtasn1/default.nix
@@ -8,6 +8,9 @@ stdenv.mkDerivation rec {
     sha256 = "1j8iixynchziw1y39lnibyl5h81m4p78w3i4f28q2vgwjgf801x4";
   };
 
+  outputs = [ "dev" "out" "docdev" ];
+  outputBin = "dev";
+
   buildInputs = [ perl texinfo ];
 
   doCheck = true;
diff --git a/pkgs/development/libraries/libtheora/default.nix b/pkgs/development/libraries/libtheora/default.nix
index da590adae062..129dface2d93 100644
--- a/pkgs/development/libraries/libtheora/default.nix
+++ b/pkgs/development/libraries/libtheora/default.nix
@@ -8,6 +8,9 @@ stdenv.mkDerivation rec {
     sha256 = "0swiaj8987n995rc7hw0asvpwhhzpjiws8kr3s6r44bqqib2k5a0";
   };
 
+  outputs = [ "dev" "out" "docdev" ];
+  outputDoc = "docdev";
+
   nativeBuildInputs = [ pkgconfig ];
   propagatedBuildInputs = [ libogg libvorbis ];
 
diff --git a/pkgs/development/libraries/libtiff/default.nix b/pkgs/development/libraries/libtiff/default.nix
index 2c559d221abe..a506279c2a4a 100644
--- a/pkgs/development/libraries/libtiff/default.nix
+++ b/pkgs/development/libraries/libtiff/default.nix
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
     sha256 = "136nf1rj9dp5jgv1p7z4dk0xy3wki1w0vfjbk82f645m0w4samsd";
   };
 
-  outputs = [ "out" "doc" "man" ];
+  outputs = [ "dev" "out" "bin" "doc" ];
 
   nativeBuildInputs = [ pkgconfig ];
 
diff --git a/pkgs/development/libraries/libtoxcore/new-api/default.nix b/pkgs/development/libraries/libtoxcore/new-api/default.nix
index 9702fbd02da3..eff8e2449a13 100644
--- a/pkgs/development/libraries/libtoxcore/new-api/default.nix
+++ b/pkgs/development/libraries/libtoxcore/new-api/default.nix
@@ -23,8 +23,8 @@ stdenv.mkDerivation rec {
   '';
 
   configureFlags = [
-    "--with-libsodium-headers=${libsodium}/include"
-    "--with-libsodium-libs=${libsodium}/lib"
+    "--with-libsodium-headers=${libsodium.dev}/include"
+    "--with-libsodium-libs=${libsodium.out}/lib"
     "--enable-ntox"
     "--enable-daemon"
   ];
diff --git a/pkgs/development/libraries/libtoxcore/old-api/default.nix b/pkgs/development/libraries/libtoxcore/old-api/default.nix
index 471fafdad38b..2fb5e93eab95 100644
--- a/pkgs/development/libraries/libtoxcore/old-api/default.nix
+++ b/pkgs/development/libraries/libtoxcore/old-api/default.nix
@@ -27,8 +27,8 @@ stdenv.mkDerivation rec {
   '';
 
   configureFlags = [
-    "--with-libsodium-headers=${libsodium}/include"
-    "--with-libsodium-libs=${libsodium}/lib"
+    "--with-libsodium-headers=${libsodium.dev}/include"
+    "--with-libsodium-libs=${libsodium.out}/lib"
     "--enable-ntox"
     "--enable-daemon"
   ];
diff --git a/pkgs/development/libraries/libuchardet/default.nix b/pkgs/development/libraries/libuchardet/default.nix
index 86428e08c475..4b81152a4329 100644
--- a/pkgs/development/libraries/libuchardet/default.nix
+++ b/pkgs/development/libraries/libuchardet/default.nix
@@ -3,13 +3,13 @@
 stdenv.mkDerivation rec {
   name = "libuchardet-${version}";
 
-  version = "0.0.1";
+  version = "0.0.5";
 
   src = fetchFromGitHub {
     owner  = "BYVoid";
     repo   = "uchardet";
-    rev    = "69b7133995e4ee260b093323c57a7f8c6c6803b8";
-    sha256 = "0yqrc9a7wxsh2fvigjppjp55v4r1q8p40yh048xsvl3kly2rkqy9";
+    rev    = "v${version}";
+    sha256 = "0rkym5bhq3hn7623fy0fggw0qaghha71k8bi41ywqd2lchpahrrm";
   };
 
   buildInputs = [ cmake ];
diff --git a/pkgs/development/libraries/libunwind/default.nix b/pkgs/development/libraries/libunwind/default.nix
index 3fc8b5085590..da09e2fcbe25 100644
--- a/pkgs/development/libraries/libunwind/default.nix
+++ b/pkgs/development/libraries/libunwind/default.nix
@@ -20,6 +20,8 @@ stdenv.mkDerivation rec {
     sed -i -e '/LIBLZMA/s:-lzma:-llzma:' configure
   '';
 
+  outputs = [ "dev" "out" ];
+
   propagatedBuildInputs = [ xz ];
 
   NIX_CFLAGS_COMPILE = if stdenv.system == "x86_64-linux" then "-fPIC" else "";
@@ -30,7 +32,7 @@ stdenv.mkDerivation rec {
 
   postInstall = ''
     find $out -name \*.la | while read file; do
-      sed -i 's,-llzma,${xz}/lib/liblzma.la,' $file
+      sed -i 's,-llzma,${xz.out}/lib/liblzma.la,' $file
     done
   '';
 
diff --git a/pkgs/development/libraries/libusb/default.nix b/pkgs/development/libraries/libusb/default.nix
index 7aec64d596fc..b1872779b707 100644
--- a/pkgs/development/libraries/libusb/default.nix
+++ b/pkgs/development/libraries/libusb/default.nix
@@ -3,6 +3,9 @@
 stdenv.mkDerivation {
   name = "libusb-compat-0.1.5";
 
+  outputs = [ "dev" "out" ]; # get rid of propagating systemd closure
+  outputBin = "dev";
+
   nativeBuildInputs = [ pkgconfig ];
   propagatedBuildInputs = [ libusb1 ];
 
diff --git a/pkgs/development/libraries/libusb1/default.nix b/pkgs/development/libraries/libusb1/default.nix
index 75d6bdb4cc6a..fe920bba411f 100644
--- a/pkgs/development/libraries/libusb1/default.nix
+++ b/pkgs/development/libraries/libusb1/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, udev ? null, libobjc, IOKit }:
+{ stdenv, fetchurl, pkgconfig, libudev ? null, libobjc, IOKit }:
 
 stdenv.mkDerivation rec {
   name = "libusb-1.0.19";
@@ -8,15 +8,17 @@ stdenv.mkDerivation rec {
     sha256 = "0h38p9rxfpg9vkrbyb120i1diq57qcln82h5fr7hvy82c20jql3c";
   };
 
+  outputs = [ "dev" "out" ]; # get rid of propagating systemd closure
+
   buildInputs = [ pkgconfig ];
   propagatedBuildInputs =
-    stdenv.lib.optional stdenv.isLinux udev ++
+    stdenv.lib.optional stdenv.isLinux libudev ++
     stdenv.lib.optionals stdenv.isDarwin [ libobjc IOKit ];
 
   NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lgcc_s";
 
   preFixup = stdenv.lib.optionalString stdenv.isLinux ''
-    sed 's,-ludev,-L${udev}/lib -ludev,' -i $out/lib/libusb-1.0.la
+    sed 's,-ludev,-L${libudev.out}/lib -ludev,' -i $out/lib/libusb-1.0.la
   '';
 
   meta = {
diff --git a/pkgs/development/libraries/libva/default.nix b/pkgs/development/libraries/libva/default.nix
index 557d0f591553..9e22aa1d37cf 100644
--- a/pkgs/development/libraries/libva/default.nix
+++ b/pkgs/development/libraries/libva/default.nix
@@ -1,10 +1,9 @@
 { stdenv, lib, fetchurl, libX11, pkgconfig, libXext, libdrm, libXfixes, wayland, libffi
-, mesa_noglu ? null
+, mesa_noglu
+, minimal ? true, libva
 }:
 
-let
-  withMesa = mesa_noglu != null;
-in stdenv.mkDerivation rec {
+stdenv.mkDerivation rec {
   name = "libva-1.6.2";
 
   src = fetchurl {
@@ -12,9 +11,15 @@ in stdenv.mkDerivation rec {
     sha256 = "1l4bij21shqbfllbxicmqgmay4v509v9hpxyyia9wm7gvsfg05y4";
   };
 
-  buildInputs = [ libX11 libXext pkgconfig libdrm libXfixes wayland libffi mesa_noglu ];
+  outputs = [ "dev" "out" "bin" ];
 
-  configureFlags = lib.optionals withMesa [
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ libdrm ]
+    ++ lib.optionals (!minimal) [ libva libX11 libXext libXfixes wayland libffi mesa_noglu ];
+  # TODO: share libs between minimal and !minimal - perhaps just symlink them
+
+  configureFlags = lib.optionals (!minimal) [
     "--with-drivers-path=${mesa_noglu.driverLink}/lib/dri"
     "--enable-glx"
   ];
diff --git a/pkgs/development/libraries/libvdpau/default.nix b/pkgs/development/libraries/libvdpau/default.nix
index 446f2917fe71..3337a89dd1ce 100644
--- a/pkgs/development/libraries/libvdpau/default.nix
+++ b/pkgs/development/libraries/libvdpau/default.nix
@@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "857a01932609225b9a3a5bf222b85e39b55c08787d0ad427dbd9ec033d58d736";
   };
 
+  outputs = [ "dev" "out" ];
+
   buildInputs = with xorg; [ pkgconfig dri2proto libXext ];
 
   propagatedBuildInputs = [ xorg.libX11 ];
diff --git a/pkgs/development/libraries/libvirt/default.nix b/pkgs/development/libraries/libvirt/default.nix
index 343f3b757e33..1d1945af3194 100644
--- a/pkgs/development/libraries/libvirt/default.nix
+++ b/pkgs/development/libraries/libvirt/default.nix
@@ -1,7 +1,7 @@
 { stdenv, fetchurl, fetchpatch
 , pkgconfig, makeWrapper
 , libxml2, gnutls, devicemapper, perl, python
-, iproute, iptables, readline, lvm2, utillinux, udev, libpciaccess, gettext
+, iproute, iptables, readline, lvm2, utillinux, systemd, libpciaccess, gettext
 , libtasn1, ebtables, libgcrypt, yajl, pmutils, libcap_ng
 , dnsmasq, libnl, libpcap, libxslt, xhtml1, numad, numactl, perlPackages
 , curl, libiconv, gmp, xen
@@ -9,11 +9,11 @@
 
 stdenv.mkDerivation rec {
   name = "libvirt-${version}";
-  version = "1.3.2";
+  version = "1.3.3";
 
   src = fetchurl {
     url = "http://libvirt.org/sources/${name}.tar.gz";
-    sha256 = "01fg9jbifndwc3jzzizsisvz98q325xarczgf6rn11hphckgrip3";
+    sha256 = "13w56fhspf7ygr3v0jhh44g25xbcx5vmrprzcy9cajsppa6knq4r";
   };
 
   patches = [ ./build-on-bsd.patch ];
@@ -24,14 +24,14 @@ stdenv.mkDerivation rec {
     gettext libtasn1 libgcrypt yajl
     libxslt xhtml1 perlPackages.XMLXPath curl libpcap
   ] ++ stdenv.lib.optionals stdenv.isLinux [
-    libpciaccess devicemapper lvm2 utillinux udev libcap_ng
+    libpciaccess devicemapper lvm2 utillinux systemd.udev.lib libcap_ng
     libnl numad numactl xen
   ] ++ stdenv.lib.optionals stdenv.isDarwin [
      libiconv gmp
   ];
 
   preConfigure = stdenv.lib.optionalString stdenv.isLinux ''
-    PATH=${iproute}/sbin:${iptables}/sbin:${ebtables}/sbin:${lvm2}/sbin:${udev}/sbin:$PATH
+    PATH=${iproute}/sbin:${iptables}/sbin:${ebtables}/sbin:${lvm2}/sbin:${systemd.udev.bin}/bin:$PATH
     substituteInPlace configure --replace 'as_dummy="/bin:/usr/bin:/usr/sbin"' 'as_dummy="${numad}/bin"'
   '' + ''
     PATH=${dnsmasq}/bin:$PATH
diff --git a/pkgs/development/libraries/libvorbis/default.nix b/pkgs/development/libraries/libvorbis/default.nix
index 68f1fe720856..0022799c88fe 100644
--- a/pkgs/development/libraries/libvorbis/default.nix
+++ b/pkgs/development/libraries/libvorbis/default.nix
@@ -8,7 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "1lg1n3a6r41492r7in0fpvzc7909mc5ir9z0gd3qh2pz4yalmyal";
   };
 
-  outputs = [ "out" "doc" ];
+  outputs = [ "dev" "out" "doc" ];
+
 
   nativeBuildInputs = [ pkgconfig ];
   propagatedBuildInputs = [ libogg ];
diff --git a/pkgs/development/libraries/libvpx/default.nix b/pkgs/development/libraries/libvpx/default.nix
index 6a4756670786..5c593dd1f75e 100644
--- a/pkgs/development/libraries/libvpx/default.nix
+++ b/pkgs/development/libraries/libvpx/default.nix
@@ -72,6 +72,9 @@ stdenv.mkDerivation rec {
 
   patchPhase = ''patchShebangs .'';
 
+  outputs = [ "dev" "out" "bin" ];
+  setOutputFlags = false;
+
   configureFlags = [
     (enableFeature (vp8EncoderSupport || vp8DecoderSupport) "vp8")
     (enableFeature vp8EncoderSupport "vp8-encoder")
@@ -146,6 +149,8 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
+  postInstall = ''moveToOutput bin "$bin" '';
+
   crossAttrs = let
     isCygwin = stdenv.cross.libc == "msvcrt";
     isDarwin = stdenv.cross.libc == "libSystem";
diff --git a/pkgs/development/libraries/libvpx/git.nix b/pkgs/development/libraries/libvpx/git.nix
index 31b1c197e9ff..064fb807a214 100644
--- a/pkgs/development/libraries/libvpx/git.nix
+++ b/pkgs/development/libraries/libvpx/git.nix
@@ -73,6 +73,9 @@ stdenv.mkDerivation rec {
 
   patchPhase = ''patchShebangs .'';
 
+  outputs = [ "dev" "out" "bin" ];
+  setOutputFlags = false;
+
   configureFlags = [
     (enableFeature (vp8EncoderSupport || vp8DecoderSupport) "vp8")
     (enableFeature vp8EncoderSupport "vp8-encoder")
@@ -147,6 +150,8 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
+  postInstall = ''moveToOutput bin "$bin" '';
+
   crossAttrs = let
     isCygwin = stdenv.cross.libc == "msvcrt";
     isDarwin = stdenv.cross.libc == "libSystem";
diff --git a/pkgs/development/libraries/libwnck/3.x.nix b/pkgs/development/libraries/libwnck/3.x.nix
index 6c6c0812c43c..a763af96667b 100644
--- a/pkgs/development/libraries/libwnck/3.x.nix
+++ b/pkgs/development/libraries/libwnck/3.x.nix
@@ -8,6 +8,9 @@ stdenv.mkDerivation {
     sha256 = "d48ac9c7f50c0d563097f63d07bcc83744c7d92a1b4ef65e5faeab32b5ccb723";
   };
 
+  outputs = [ "dev" "out" "docdev" ];
+  outputBin = "dev";
+
   patches = [ ./install_introspection_to_prefix.patch ];
 
   buildInputs = [ pkgconfig intltool ];
diff --git a/pkgs/development/libraries/libwnck/default.nix b/pkgs/development/libraries/libwnck/default.nix
index 6a4479bdda38..bb5258120494 100644
--- a/pkgs/development/libraries/libwnck/default.nix
+++ b/pkgs/development/libraries/libwnck/default.nix
@@ -12,6 +12,9 @@ stdenv.mkDerivation rec {
     sha256 = "17isfjvrzgj5znld2a7zsk9vd39q9wnsysnw5jr8iz410z935xw3";
   };
 
+  outputs = [ "dev" "out" "docdev" ];
+  outputBin = "dev";
+
   buildInputs = [ pkgconfig gtk intltool xorg.libX11 xorg.libXres ];
   # ?another optional: startup-notification
 
diff --git a/pkgs/development/libraries/libxkbcommon/default.nix b/pkgs/development/libraries/libxkbcommon/default.nix
index ea74bea152c2..2bf7bbaabb31 100644
--- a/pkgs/development/libraries/libxkbcommon/default.nix
+++ b/pkgs/development/libraries/libxkbcommon/default.nix
@@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "176ii5dn2wh74q48sd8ac37ljlvgvp5f506glr96z6ibfhj7igch";
   };
 
+  outputs = [ "dev" "out" ];
+
   buildInputs = [ pkgconfig yacc flex xkeyboard_config libxcb ];
 
   configureFlags = ''
diff --git a/pkgs/development/libraries/libxklavier/default.nix b/pkgs/development/libraries/libxklavier/default.nix
index d69276a070bb..f074b31bb682 100644
--- a/pkgs/development/libraries/libxklavier/default.nix
+++ b/pkgs/development/libraries/libxklavier/default.nix
@@ -12,6 +12,8 @@ stdenv.mkDerivation rec {
     sha256 = "016lpdv35z0qsw1cprdc2k5qzkdi5waj6qmr0a2q6ljn9g2kpv7b";
   };
 
+  outputs = [ "dev" "out" "docdev" ];
+
   # TODO: enable xmodmap support, needs xmodmap DB
   propagatedBuildInputs = with xorg; [ libX11 libXi xkeyboard_config libxml2 libICE glib libxkbfile isocodes ];
 
diff --git a/pkgs/development/libraries/libxml2/default.nix b/pkgs/development/libraries/libxml2/default.nix
index cac8f10d37aa..f7e175373e12 100644
--- a/pkgs/development/libraries/libxml2/default.nix
+++ b/pkgs/development/libraries/libxml2/default.nix
@@ -1,10 +1,6 @@
-{ stdenv, fetchurl, zlib, xz, python ? null, pythonSupport ? true, findXMLCatalogs }:
+{ stdenv, fetchurl, zlib, xz, python, findXMLCatalogs }:
 
-assert pythonSupport -> python != null;
-
-#TODO: share most stuff between python and non-python builds, perhaps via multiple-output
-
-stdenv.mkDerivation (rec {
+stdenv.mkDerivation rec {
   name = "libxml2-${version}";
   version = "2.9.3";
 
@@ -13,9 +9,10 @@ stdenv.mkDerivation (rec {
     sha256 = "0bd17g6znn2r98gzpjppsqjg33iraky4px923j3k8kdl8qgy7sad";
   };
 
-  outputs = [ "out" "doc" ];
+  outputs = [ "dev" "out" "bin" "doc" "py" ];
+  propagatedBuildOutputs = "out bin py";
 
-  buildInputs = stdenv.lib.optional pythonSupport python
+  buildInputs = [ python ]
     # Libxml2 has an optional dependency on liblzma.  However, on impure
     # platforms, it may end up using that from /usr/lib, and thus lack a
     # RUNPATH for that, leading to undefined references for its users.
@@ -23,10 +20,21 @@ stdenv.mkDerivation (rec {
 
   propagatedBuildInputs = [ zlib findXMLCatalogs ];
 
-  passthru = { inherit pythonSupport version; };
+  configureFlags = "--with-python=${python}";
 
   enableParallelBuilding = true;
 
+  preInstall = ''substituteInPlace python/libxml2mod.la --replace "${python}" "$py"'';
+  installFlags = ''pythondir="$(py)/lib/${python.libPrefix}/site-packages"'';
+
+  postFixup = ''
+    moveToOutput bin/xml2-config "$dev"
+    moveToOutput lib/xml2Conf.sh "$dev"
+    moveToOutput share/man/man1 "$bin"
+  '';
+
+  passthru = { inherit version; pythonSupport = true; };
+
   meta = {
     homepage = http://xmlsoft.org/;
     description = "An XML parsing library for C";
@@ -34,14 +42,4 @@ stdenv.mkDerivation (rec {
     platforms = stdenv.lib.platforms.unix;
     maintainers = [ stdenv.lib.maintainers.eelco ];
   };
-
-} // stdenv.lib.optionalAttrs pythonSupport {
-  configureFlags = "--with-python=${python}";
-
-  # this is a pair of ugly hacks to make python stuff install into the right place
-  preInstall = ''substituteInPlace python/libxml2mod.la --replace "${python}" "$out"'';
-  installFlags = ''pythondir="$(out)/lib/${python.libPrefix}/site-packages"'';
-
-} // stdenv.lib.optionalAttrs (!pythonSupport) {
-  configureFlags = "--with-python=no"; # otherwise build impurity bites us
-})
+}
diff --git a/pkgs/development/libraries/libxslt/default.nix b/pkgs/development/libraries/libxslt/default.nix
index 9aa70ea04716..0eda42879ece 100644
--- a/pkgs/development/libraries/libxslt/default.nix
+++ b/pkgs/development/libraries/libxslt/default.nix
@@ -17,14 +17,13 @@ stdenv.mkDerivation rec {
       })
     ];
 
-  outputs = [ "out" "doc" ];
+  outputs = [ "dev" "out" "bin" "doc" ];
 
   buildInputs = [ libxml2 ];
 
   propagatedBuildInputs = [ findXMLCatalogs ];
 
   configureFlags = [
-    "--with-libxml-prefix=${libxml2}"
     "--without-python"
     "--without-crypto"
     "--without-debug"
@@ -32,11 +31,17 @@ stdenv.mkDerivation rec {
     "--without-debugger"
   ];
 
-  meta = {
+  postFixup = ''
+    moveToOutput bin/xslt-config "$dev"
+    moveToOutput lib/xsltConf.sh "$dev"
+    moveToOutput share/man/man1 "$bin"
+  '';
+
+  meta = with stdenv.lib; {
     homepage = http://xmlsoft.org/XSLT/;
     description = "A C library and tools to do XSL transformations";
     license = "bsd";
-    platforms = stdenv.lib.platforms.unix;
-    maintainers = [ stdenv.lib.maintainers.eelco ];
+    platforms = platforms.unix;
+    maintainers = [ maintainers.eelco ];
   };
 }
diff --git a/pkgs/development/libraries/mailcore2/default.nix b/pkgs/development/libraries/mailcore2/default.nix
index de82bd0243e9..f535b19bd0eb 100644
--- a/pkgs/development/libraries/mailcore2/default.nix
+++ b/pkgs/development/libraries/mailcore2/default.nix
@@ -23,9 +23,10 @@ stdenv.mkDerivation rec {
     substituteInPlace CMakeLists.txt \
        --replace "tidy/tidy.h" "tidy.h" \
        --replace "/usr/include/tidy" "${libtidy}/include" \
-       --replace "/usr/include/libxml2" "${libxml2}/include/libxml2"
+       --replace "/usr/include/libxml2" "${libxml2.dev}/include/libxml2"
     substituteInPlace src/core/basetypes/MCHTMLCleaner.cpp \
       --replace buffio.h tidybuffio.h
+>>>>>>> master
   '';
 
   cmakeFlags = [
diff --git a/pkgs/development/libraries/mesa/default.nix b/pkgs/development/libraries/mesa/default.nix
index 1c2257998e86..ad6bf8ba3190 100644
--- a/pkgs/development/libraries/mesa/default.nix
+++ b/pkgs/development/libraries/mesa/default.nix
@@ -1,6 +1,5 @@
-{ stdenv, fetchurl, fetchpatch, pkgconfig, intltool, flex, bison, autoreconfHook, substituteAll
-, python, libxml2Python, file, expat, makedepend, pythonPackages
-, libdrm, xorg, wayland, udev, llvmPackages, libffi, libomxil-bellagio
+{ stdenv, fetchurl, fetchpatch, pkgconfig, intltool, autoreconfHook, substituteAll
+, file, expat, libdrm, xorg, wayland, libudev, llvmPackages, libffi, libomxil-bellagio
 , libvdpau, libelf, libva
 , grsecEnabled
 , enableTextureFloats ? false # Texture floats are patented, see docs/patents.txt
@@ -21,12 +20,13 @@ else
   - libOSMesa is in $osmesa (~4 MB)
 */
 
+with { inherit (stdenv.lib) optional optionalString; };
+
 let
   version = "11.1.2";
   # this is the default search path for DRI drivers
-  driverLink = "/run/opengl-driver" + stdenv.lib.optionalString stdenv.isi686 "-32";
+  driverLink = "/run/opengl-driver" + optionalString stdenv.isi686 "-32";
 in
-with { inherit (stdenv.lib) optional optionals optionalString; };
 
 stdenv.mkDerivation {
   name = "mesa-noglu-${version}";
@@ -50,7 +50,7 @@ stdenv.mkDerivation {
   ] ++ optional stdenv.isLinux
       (substituteAll {
         src = ./dlopen-absolute-paths.diff;
-        inherit udev;
+        libudev = libudev.out;
       });
 
   postPatch = ''
@@ -58,7 +58,7 @@ stdenv.mkDerivation {
       --replace _EGL_DRIVER_SEARCH_DIR '"${driverLink}"'
   '';
 
-  outputs = ["out" "drivers" "osmesa"];
+  outputs = [ "dev" "out" "drivers" "osmesa" ];
 
   configureFlags = [
     "--sysconfdir=/etc"
@@ -103,17 +103,17 @@ stdenv.mkDerivation {
   ] ++ optional enableTextureFloats "--enable-texture-float"
     ++ optional grsecEnabled "--enable-glx-rts"; # slight performance degradation, enable only for grsec
 
-  nativeBuildInputs = [ pkgconfig python makedepend file flex bison pythonPackages.Mako ];
+  nativeBuildInputs = [ pkgconfig file ];
 
   propagatedBuildInputs = with xorg; [ libXdamage libXxf86vm ]
-    ++ optionals stdenv.isLinux [ libdrm ];
+    ++ optional stdenv.isLinux libdrm;
 
   buildInputs = with xorg; [
-    autoreconfHook intltool expat libxml2Python llvmPackages.llvm
+    autoreconfHook intltool expat llvmPackages.llvm
     glproto dri2proto dri3proto presentproto
     libX11 libXext libxcb libXt libXfixes libxshmfence
     libffi wayland libvdpau libelf libXvMC /* libomxil-bellagio libva */
-  ] ++ optional stdenv.isLinux udev;
+  ] ++ optional stdenv.isLinux libudev;
 
   enableParallelBuilding = true;
   doCheck = false;
@@ -133,41 +133,42 @@ stdenv.mkDerivation {
       $out/lib/vdpau \
       $out/lib/libxatracker*
 
-    mkdir -p {$osmesa,$drivers}/lib/pkgconfig
+    mkdir -p {$osmesa,$drivers}/lib/
     mv -t $osmesa/lib/ \
       $out/lib/libOSMesa*
 
-    mv -t $drivers/lib/pkgconfig/ \
-      $out/lib/pkgconfig/xatracker.pc
-
-    mv -t $osmesa/lib/pkgconfig/ \
-      $out/lib/pkgconfig/osmesa.pc
-
   '' + /* now fix references in .la files */ ''
     sed "/^libdir=/s,$out,$osmesa," -i \
       $osmesa/lib/libOSMesa*.la
 
-  '' + /* work around bug #529, but maybe $drivers should also be patchelf-ed */ ''
-    find $drivers/ $osmesa/ -type f -executable -print0 | xargs -0 strip -S || true
+  '' + /* set the default search path for DRI drivers; used e.g. by X server */ ''
+    substituteInPlace "$dev/lib/pkgconfig/dri.pc" --replace '$(drivers)' "${driverLink}"
+  '' + /* move vdpau drivers to $drivers/lib, so they are found */ ''
+    mv "$drivers"/lib/vdpau/* "$drivers"/lib/ && rmdir "$drivers"/lib/vdpau
+  '';
+  #ToDo: @vcunat isn't sure if drirc will be found when in $out/etc/, but it doesn't seem important ATM */
 
-  '' + /* add RPATH so the drivers can find the moved libgallium and libdricore9 */ ''
+  postFixup =
+    # add RPATH so the drivers can find the moved libgallium and libdricore9
+    # moved here to avoid problems with stripping patchelfed files
+  ''
     for lib in $drivers/lib/*.so* $drivers/lib/*/*.so*; do
       if [[ ! -L "$lib" ]]; then
         patchelf --set-rpath "$(patchelf --print-rpath $lib):$drivers/lib" "$lib"
       fi
     done
-  '' + /* set the default search path for DRI drivers; used e.g. by X server */ ''
-    substituteInPlace "$out/lib/pkgconfig/dri.pc" --replace '$(drivers)' "${driverLink}"
   '';
-  #ToDo: @vcunat isn't sure if drirc will be found when in $out/etc/, but it doesn't seem important ATM
+  # ToDo + /* check $out doesn't depend on llvm */ ''
+  # builder failures are ignored for some reason
+  #   grep -qv '${llvmPackages.llvm}' -R "$out"
 
   passthru = { inherit libdrm version driverLink; };
 
-  meta = {
+  meta = with stdenv.lib; {
     description = "An open source implementation of OpenGL";
     homepage = http://www.mesa3d.org/;
-    license = "bsd";
-    platforms = stdenv.lib.platforms.mesaPlatforms;
-    maintainers = with stdenv.lib.maintainers; [ eduarrrd simons vcunat ];
+    license = licenses.mit; # X11 variant, in most files
+    platforms = platforms.mesaPlatforms;
+    maintainers = with maintainers; [ eduarrrd simons vcunat ];
   };
 }
diff --git a/pkgs/development/libraries/mesa/dlopen-absolute-paths.diff b/pkgs/development/libraries/mesa/dlopen-absolute-paths.diff
index a4bb6a72b138..9a5226572239 100644
--- a/pkgs/development/libraries/mesa/dlopen-absolute-paths.diff
+++ b/pkgs/development/libraries/mesa/dlopen-absolute-paths.diff
@@ -16,7 +16,7 @@ index 4fdf3c2..69ea22d 100644
     do {
        for (version = 1; version >= 0; version--) {
 -         snprintf(name, sizeof(name), "libudev.so.%d", version);
-+         snprintf(name, sizeof(name), "@udev@/lib/libudev.so.%d", version);
++         snprintf(name, sizeof(name), "@libudev@/lib/libudev.so.%d", version);
           udev_handle = dlopen(name, flags);
           if (udev_handle)
              return udev_handle;
diff --git a/pkgs/development/libraries/mpfr/default.nix b/pkgs/development/libraries/mpfr/default.nix
index 581f956b0afd..8a964af01c80 100644
--- a/pkgs/development/libraries/mpfr/default.nix
+++ b/pkgs/development/libraries/mpfr/default.nix
@@ -10,6 +10,8 @@ stdenv.mkDerivation rec {
 
   patches = [ ./upstream.patch ];
 
+  outputs = [ "dev" "out" "doc" ];
+
   # mpfr.h requires gmp.h
   propagatedBuildInputs = [ gmp ];
 
diff --git a/pkgs/development/libraries/mygui/default.nix b/pkgs/development/libraries/mygui/default.nix
index 2fa62ced2d5b..6e4b3e6a862a 100644
--- a/pkgs/development/libraries/mygui/default.nix
+++ b/pkgs/development/libraries/mygui/default.nix
@@ -1,9 +1,12 @@
-{stdenv, fetchFromGitHub, libX11, unzip, ogre, cmake, ois, freetype, libuuid, boost, pkgconfig}:
+{  stdenv, fetchFromGitHub, libX11, unzip, cmake, ois, freetype, libuuid,
+   boost, pkgconfig, withOgre ? false, ogre ? null, mesa ? null } :
 
-stdenv.mkDerivation rec {
+let
+  renderSystem = if withOgre then "3" else "4";
+in stdenv.mkDerivation rec {
   name = "mygui-${version}";
   version = "3.2.2";
-  
+
   src = fetchFromGitHub {
     owner = "MyGUI";
     repo = "mygui";
@@ -13,11 +16,15 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  buildInputs = [ libX11 unzip ogre cmake ois freetype libuuid boost pkgconfig ];
+  buildInputs = [ libX11 unzip cmake ois freetype libuuid boost pkgconfig (if withOgre then ogre else mesa) ];
+
+  # Tools are disabled due to compilation failures.
+  cmakeFlags = [ "-DMYGUI_BUILD_TOOLS=OFF" "-DMYGUI_BUILD_DEMOS=OFF" "-DMYGUI_RENDERSYSTEM=${renderSystem}" ];
 
-  meta = {
+  meta = with stdenv.lib; {
     homepage = http://mygui.info/;
     description = "Library for creating GUIs for games and 3D applications";
-    license = stdenv.lib.licenses.lgpl3Plus;
+    license = licenses.lgpl3Plus;
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/development/libraries/ncurses/default.nix b/pkgs/development/libraries/ncurses/default.nix
index 8817e2c5523b..edd263605960 100644
--- a/pkgs/development/libraries/ncurses/default.nix
+++ b/pkgs/development/libraries/ncurses/default.nix
@@ -20,6 +20,9 @@ stdenv.mkDerivation rec {
   # gcc-5.patch should be removed after 5.9
   patches = [ ./clang.patch ./gcc-5.patch ];
 
+  outputs = [ "dev" "out" "man" ];
+  setOutputFlags = false; # some aren't supported
+
   configureFlags = [
     "--with-shared"
     "--without-debug"
@@ -33,9 +36,15 @@ stdenv.mkDerivation rec {
   buildInputs = lib.optional (mouseSupport && stdenv.isLinux) gpm;
 
   preConfigure = ''
-    configureFlagsArray+=("--includedir=$out/include")
-    export PKG_CONFIG_LIBDIR="$out/lib/pkgconfig"
+    export PKG_CONFIG_LIBDIR="$dev/lib/pkgconfig"
     mkdir -p "$PKG_CONFIG_LIBDIR"
+    configureFlagsArray+=(
+      "--libdir=$out/lib"
+      "--includedir=$dev/include"
+      "--bindir=$dev/bin"
+      "--mandir=$man/share/man"
+      "--with-pkg-config-libdir=$PKG_CONFIG_LIBDIR"
+    )
   ''
   + lib.optionalString stdenv.isSunOS ''
     sed -i -e '/-D__EXTENSIONS__/ s/-D_XOPEN_SOURCE=\$cf_XOPEN_SOURCE//' \
@@ -55,44 +64,52 @@ stdenv.mkDerivation rec {
   # When building a wide-character (Unicode) build, create backward
   # compatibility links from the the "normal" libraries to the
   # wide-character libraries (e.g. libncurses.so to libncursesw.so).
-  postInstall = ''
+  postFixup = ''
     # Determine what suffixes our libraries have
     suffix="$(awk -F': ' 'f{print $3; f=0} /default library suffix/{f=1}' config.log)"
-    libs="$(ls $out/lib/pkgconfig | tr ' ' '\n' | sed "s,\(.*\)$suffix\.pc,\1,g")"
+    libs="$(ls $dev/lib/pkgconfig | tr ' ' '\n' | sed "s,\(.*\)$suffix\.pc,\1,g")"
     suffixes="$(echo "$suffix" | awk '{for (i=1; i < length($0); i++) {x=substr($0, i+1, length($0)-i); print x}}')"
 
     # Get the path to the config util
-    cfg=$(basename $out/bin/ncurses*-config)
+    cfg=$(basename $dev/bin/ncurses*-config)
 
     # symlink the full suffixed include directory
-    ln -svf . $out/include/ncurses$suffix
+    ln -svf . $dev/include/ncurses$suffix
 
     for newsuffix in $suffixes ""; do
       # Create a non-abi versioned config util links
-      ln -svf $cfg $out/bin/ncurses$newsuffix-config
+      ln -svf $cfg $dev/bin/ncurses$newsuffix-config
 
       # Allow for end users who #include <ncurses?w/*.h>
-      ln -svf . $out/include/ncurses$newsuffix
+      ln -svf . $dev/include/ncurses$newsuffix
 
-      for lib in $libs; do
+      for library in $libs; do
         for dylibtype in so dll dylib; do
-          if [ -e "$out/lib/lib''${lib}$suffix.$dylibtype" ]; then
-            ln -svf lib''${lib}$suffix.$dylibtype $out/lib/lib$lib$newsuffix.$dylibtype
-            ln -svf lib''${lib}$suffix.$dylibtype.${abiVersion} $out/lib/lib$lib$newsuffix.$dylibtype.${abiVersion}
+          if [ -e "$out/lib/lib''${library}$suffix.$dylibtype" ]; then
+            ln -svf lib''${library}$suffix.$dylibtype $out/lib/lib$library$newsuffix.$dylibtype
+            ln -svf lib''${library}$suffix.$dylibtype.${abiVersion} $out/lib/lib$library$newsuffix.$dylibtype.${abiVersion}
           fi
         done
         for statictype in a dll.a la; do
-          if [ -e "$out/lib/lib''${lib}$suffix.$statictype" ]; then
-            ln -svf lib''${lib}$suffix.$statictype $out/lib/lib$lib$newsuffix.$statictype
+          if [ -e "$out/lib/lib''${library}$suffix.$statictype" ]; then
+            ln -svf lib''${library}$suffix.$statictype $out/lib/lib$library$newsuffix.$statictype
           fi
         done
-        ln -svf ''${lib}$suffix.pc $out/lib/pkgconfig/$lib$newsuffix.pc
+        ln -svf ''${library}$suffix.pc $dev/lib/pkgconfig/$library$newsuffix.pc
       done
     done
+
+    # move some utilities to $bin
+    # these programs are used at runtime and don't really belong in $dev
+    moveToOutput "bin/clear" "$out"
+    moveToOutput "bin/reset" "$out"
+    moveToOutput "bin/tabs" "$out"
+    moveToOutput "bin/tput" "$out"
+    moveToOutput "bin/tset" "$out"
   '';
 
   preFixup = ''
-    rm $out/lib/*.a
+    rm "$out"/lib/*.a
   '';
 
   meta = {
diff --git a/pkgs/development/libraries/nettle/generic.nix b/pkgs/development/libraries/nettle/generic.nix
index 3c439eb404cc..1bfb739712f4 100644
--- a/pkgs/development/libraries/nettle/generic.nix
+++ b/pkgs/development/libraries/nettle/generic.nix
@@ -9,6 +9,9 @@ stdenv.mkDerivation (rec {
 
   inherit src;
 
+  outputs = [ "dev" "out" ];
+  outputBin = "dev";
+
   buildInputs = [ gnum4 ];
   propagatedBuildInputs = [ gmp ];
 
@@ -61,5 +64,5 @@ stdenv.lib.optionalAttrs stdenv.isSunOS {
   # /usr/include/mp.h from OpenSolaris.  See
   # <https://lists.gnu.org/archive/html/hydra-users/2012-08/msg00000.html>
   # for details.
-  configureFlags = [ "--with-include-path=${gmp}/include" ];
+  configureFlags = [ "--with-include-path=${gmp.dev}/include" ];
 })
diff --git a/pkgs/development/libraries/newt/default.nix b/pkgs/development/libraries/newt/default.nix
index f5f72c006c73..8a4b793cad79 100644
--- a/pkgs/development/libraries/newt/default.nix
+++ b/pkgs/development/libraries/newt/default.nix
@@ -14,16 +14,18 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ slang popt ];
 
+  NIX_LDFLAGS = "-lncurses";
+
   crossAttrs = {
     makeFlags = "CROSS_COMPILE=${stdenv.cross.config}-";
   };
 
-  meta = {
+  meta = with stdenv.lib; {
     homepage = https://fedorahosted.org/newt/;
     description = "Library for color text mode, widget based user interfaces";
 
-    license = stdenv.lib.licenses.lgpl2;
-    platforms = stdenv.lib.platforms.linux;
-    maintainers = [ stdenv.lib.maintainers.viric ];
+    license = licenses.lgpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.viric ];
   };
 }
diff --git a/pkgs/development/libraries/nspr/default.nix b/pkgs/development/libraries/nspr/default.nix
index 230c22258e2e..726b5d7b29af 100644
--- a/pkgs/development/libraries/nspr/default.nix
+++ b/pkgs/development/libraries/nspr/default.nix
@@ -10,6 +10,9 @@ stdenv.mkDerivation {
     sha256 = "1pk98bmc5xzbl62q5wf2d6mryf0v95z6rsmxz27nclwiaqg0mcg0";
   };
 
+  outputs = [ "dev" "out" ];
+  outputBin = "dev";
+
   preConfigure = ''
     cd nspr
   '';
@@ -21,6 +24,7 @@ stdenv.mkDerivation {
 
   postInstall = ''
     find $out -name "*.a" -delete
+    moveToOutput share "$dev" # just aclocal
   '';
 
   enableParallelBuilding = true;
diff --git a/pkgs/development/libraries/nss/default.nix b/pkgs/development/libraries/nss/default.nix
index e8be72999527..fc5bffe6b740 100644
--- a/pkgs/development/libraries/nss/default.nix
+++ b/pkgs/development/libraries/nss/default.nix
@@ -1,6 +1,4 @@
-{ stdenv, fetchurl, nspr, perl, zlib, sqlite
-, includeTools ? false
-}:
+{ stdenv, fetchurl, nspr, perl, zlib, sqlite }:
 
 let
 
@@ -46,15 +44,18 @@ in stdenv.mkDerivation rec {
     INSTALL_TARGET
   '';
 
+  outputs = [ "dev" "out" "tools" ];
+
   preConfigure = "cd nss";
 
   makeFlags = [
-    "NSPR_INCLUDE_DIR=${nspr}/include/nspr"
-    "NSPR_LIB_DIR=${nspr}/lib"
+    "NSPR_INCLUDE_DIR=${nspr.dev}/include/nspr"
+    "NSPR_LIB_DIR=${nspr.out}/lib"
     "NSDISTMODE=copy"
     "BUILD_OPT=1"
     "SOURCE_PREFIX=\$(out)"
     "NSS_ENABLE_ECC=1"
+    "USE_SYSTEM_ZLIB=1"
     "NSS_USE_SYSTEM_SQLITE=1"
   ] ++ stdenv.lib.optional stdenv.is64bit "USE_64=1";
 
@@ -77,8 +78,11 @@ in stdenv.mkDerivation rec {
       libfile="$out/lib/lib$libname.so"
       LD_LIBRARY_PATH=$out/lib $out/bin/shlibsign -v -i "$libfile"
     done
-  '' + stdenv.lib.optionalString (!includeTools) ''
-    find $out/bin -type f \( -name nss-config -o -delete \)
+
+    moveToOutput bin "$tools"
+    moveToOutput bin/nss-config "$dev"
+    moveToOutput lib/libcrmf.a "$dev" # needed by firefox, for example
+    rm "$out"/lib/*.a
   '';
 
   meta = {
diff --git a/pkgs/development/libraries/nss_wrapper/default.nix b/pkgs/development/libraries/nss_wrapper/default.nix
index 278834190bbf..a81d95e6b987 100644
--- a/pkgs/development/libraries/nss_wrapper/default.nix
+++ b/pkgs/development/libraries/nss_wrapper/default.nix
@@ -8,7 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "0bysdijvi9n0jk74iklbfhbp0kvv81a727lcfd5q03q2hkzjfm18";
   };
 
-  buildInputs = [ cmake pkgconfig ];
+  buildInputs = [ cmake pkgconfig (stdenv.cc.libc.out or null) ];
+  # outputs TODO: missing glibc.out might become a general problem
 
   meta = with stdenv.lib; {
     description = "A wrapper for the user, group and hosts NSS API";
diff --git a/pkgs/development/libraries/ogrepaged/default.nix b/pkgs/development/libraries/ogrepaged/default.nix
index 27193e045450..3539a6302b14 100644
--- a/pkgs/development/libraries/ogrepaged/default.nix
+++ b/pkgs/development/libraries/ogrepaged/default.nix
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
   buildInputs = [ ois ogre libX11 boost ];
   nativeBuildInputs = [ cmake pkgconfig ];
 
-  cmakeFlags = "-DPAGEDGEOMETRY_BUILD_SAMPLES=OFF";
+  cmakeFlags = [ "-DPAGEDGEOMETRY_BUILD_SAMPLES=OFF" ];
 
   enableParallelBuilding = true;
 
@@ -19,5 +19,7 @@ stdenv.mkDerivation rec {
     description = "Paged Geometry for Ogre3D";
     homepage = http://code.google.com/p/ogre-paged/;
     license = stdenv.lib.licenses.mit;
+    # Build failures
+    broken = true;
   };
 }
diff --git a/pkgs/development/libraries/opendkim/default.nix b/pkgs/development/libraries/opendkim/default.nix
index e89cd880df13..7f4b5ba2e328 100644
--- a/pkgs/development/libraries/opendkim/default.nix
+++ b/pkgs/development/libraries/opendkim/default.nix
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
 
   postInstall = ''
     wrapProgram $out/sbin/opendkim-genkey \
-      --prefix PATH : ${openssl}/bin
+      --prefix PATH : ${openssl.bin}/bin
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/libraries/openldap/default.nix b/pkgs/development/libraries/openldap/default.nix
index c4f8ef0ee661..cc5a26a557d5 100644
--- a/pkgs/development/libraries/openldap/default.nix
+++ b/pkgs/development/libraries/openldap/default.nix
@@ -8,7 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "0044p20hx07fwgw2mbwj1fkx04615hhs1qyx4mawj2bhqvrnppnp";
   };
 
-  outputs = [ "out" "man" ];
+  # TODO: separate "out" and "bin"
+  outputs = [ "dev" "out" "man" "docdev" ];
 
   buildInputs = [ openssl cyrus_sasl db groff ];
 
@@ -19,12 +20,10 @@ stdenv.mkDerivation rec {
       ++ stdenv.lib.optional (cyrus_sasl == null) "--without-cyrus-sasl"
       ++ stdenv.lib.optional stdenv.isFreeBSD "--with-pic";
 
-  dontPatchELF = 1; # !!!
-
   # Fixup broken libtool
   preFixup = ''
-    sed -e 's,-lsasl2,-L${cyrus_sasl}/lib -lsasl2,' \
-        -e 's,-lssl,-L${openssl}/lib -lssl,' \
+    sed -e 's,-lsasl2,-L${cyrus_sasl.out}/lib -lsasl2,' \
+        -e 's,-lssl,-L${openssl.out}/lib -lssl,' \
         -i $out/lib/libldap.la -i $out/lib/libldap_r.la
   '';
 
diff --git a/pkgs/development/libraries/openscenegraph/default.nix b/pkgs/development/libraries/openscenegraph/default.nix
index 578d0219c020..1b69563355bc 100644
--- a/pkgs/development/libraries/openscenegraph/default.nix
+++ b/pkgs/development/libraries/openscenegraph/default.nix
@@ -1,8 +1,9 @@
-{ stdenv, fetchurl, cmake, giflib, libjpeg, libtiff, lib3ds, freetype
+{ stdenv, lib, fetchurl, cmake, giflib, libjpeg, libtiff, lib3ds, freetype
 , libpng, coin3d, jasper, gdal_1_11, xproto, libX11, libXmu
 , freeglut, mesa, doxygen, ffmpeg, xineLib, unzip, zlib, openal
 , libxml2, curl, a52dec, faad2, gdk_pixbuf, pkgconfig, kbproto, SDL
-, qt4, poppler, librsvg, gtk }:
+, qt4, poppler, librsvg, gtk
+, withApps ? true }:
 
 stdenv.mkDerivation rec {
   name = "openscenegraph-${version}";
@@ -20,11 +21,13 @@ stdenv.mkDerivation rec {
     pkgconfig kbproto SDL qt4 poppler librsvg gtk
   ];
 
+  enableParallelBuilding = true;
+
   cmakeFlags = [
     "-DMATH_LIBRARY="
     "-DCMAKE_C_FLAGS=-D__STDC_CONSTANT_MACROS=1"
     "-DCMAKE_CXX_FLAGS=-D__STDC_CONSTANT_MACROS=1"
-  ];
+  ] ++ lib.optional (!withApps) "-DBUILD_OSG_APPLICATIONS=OFF";
 
   meta = with stdenv.lib; {
     description = "A 3D graphics toolkit";
diff --git a/pkgs/development/libraries/openssl/default.nix b/pkgs/development/libraries/openssl/default.nix
index 081f71b498e1..1e0f419c5f73 100644
--- a/pkgs/development/libraries/openssl/default.nix
+++ b/pkgs/development/libraries/openssl/default.nix
@@ -16,8 +16,6 @@ let
       inherit sha256;
     };
 
-    outputs = [ "out" "man" ];
-
     patches =
       [ ./use-etc-ssl-certs.patch ]
       ++ optional stdenv.isCygwin ./1.0.1-cygwin64.patch
@@ -25,6 +23,9 @@ let
            (versionOlder version "1.0.2" && (stdenv.isDarwin || (stdenv ? cross && stdenv.cross.libc == "libSystem")))
            ./darwin-arch.patch;
 
+  outputs = [ "dev" "out" "man" "bin" ];
+  setOutputFlags = false;
+
     nativeBuildInputs = [ perl ];
     buildInputs = stdenv.lib.optional withCryptodev cryptodevHeaders;
 
@@ -44,9 +45,7 @@ let
       "-DUSE_CRYPTODEV_DIGESTS"
     ];
 
-    makeFlags = [
-      "MANDIR=$(out)/share/man"
-    ];
+  makeFlags = [ "MANDIR=$(man)/share/man" ];
 
     # Parallel building is broken in OpenSSL.
     enableParallelBuilding = false;
@@ -58,14 +57,20 @@ let
           rm "$out/lib/"*.a
       fi
 
+    mkdir -p $bin
+    mv $out/bin $bin/
+
+    mkdir $dev
+    mv $out/include $dev/
+
       # remove dependency on Perl at runtime
-      rm -r $out/etc/ssl/misc $out/bin/c_rehash
+    rm -r $out/etc/ssl/misc
 
       rmdir $out/etc/ssl/{certs,private}
     '';
 
     postFixup = ''
-      # Check to make sure we don't depend on perl
+    # Check to make sure the main output doesn't depend on perl
       if grep -r '${perl}' $out; then
         echo "Found an erroneous dependency on perl ^^^" >&2
         exit 1
diff --git a/pkgs/development/libraries/p11-kit/default.nix b/pkgs/development/libraries/p11-kit/default.nix
index eefed304134f..f2a9bdc12309 100644
--- a/pkgs/development/libraries/p11-kit/default.nix
+++ b/pkgs/development/libraries/p11-kit/default.nix
@@ -8,6 +8,9 @@ stdenv.mkDerivation rec {
     sha256 = "1i3a1wdpagm0p3y1bwaz5x5rjhcpqbcrnhkcp10p259vkxk72wz5";
   };
 
+  outputs = [ "dev" "out" "docdev" ];
+  outputBin = "dev";
+
   buildInputs = [ pkgconfig libffi libtasn1 libiconv ];
 
   configureFlags = [
diff --git a/pkgs/development/libraries/pango/default.nix b/pkgs/development/libraries/pango/default.nix
index bb619c7fda5f..c4456035cca2 100644
--- a/pkgs/development/libraries/pango/default.nix
+++ b/pkgs/development/libraries/pango/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, pkgconfig, xlibsWrapper, glib, cairo, libpng, harfbuzz
-, fontconfig, freetype, libintlOrEmpty, gobjectIntrospection
+{ stdenv, fetchurl, pkgconfig, libXft, cairo, harfbuzz
+, libintlOrEmpty, gobjectIntrospection
 }:
 
 with stdenv.lib;
@@ -16,11 +16,11 @@ stdenv.mkDerivation rec {
     sha256 = "1dsf45m51i4rcyvh5wlxxrjfhvn5b67d5ckjc6vdcxbddjgmc80k";
   };
 
-  buildInputs = with stdenv.lib; [ gobjectIntrospection ]
-    ++ optional stdenv.isDarwin fontconfig;
-  nativeBuildInputs = [ pkgconfig ];
+  outputs = [ "dev" "out" "bin" "docdev" ];
 
-  propagatedBuildInputs = [ xlibsWrapper glib cairo libpng fontconfig freetype harfbuzz ] ++ libintlOrEmpty;
+  buildInputs = [ gobjectIntrospection ];
+  nativeBuildInputs = [ pkgconfig ];
+  propagatedBuildInputs = [ cairo harfbuzz libXft ] ++ libintlOrEmpty;
 
   enableParallelBuilding = true;
 
@@ -33,8 +33,6 @@ stdenv.mkDerivation rec {
 
   configureFlags = optional stdenv.isDarwin "--without-x";
 
-  postInstall = "rm -rf $out/share/gtk-doc";
-
   meta = with stdenv.lib; {
     description = "A library for laying out and rendering of text, with an emphasis on internationalization";
 
diff --git a/pkgs/development/libraries/pcre/CVE-2016-1283.patch b/pkgs/development/libraries/pcre/CVE-2016-1283.patch
new file mode 100644
index 000000000000..2c2dad29e929
--- /dev/null
+++ b/pkgs/development/libraries/pcre/CVE-2016-1283.patch
@@ -0,0 +1,18 @@
+Index: pcre_compile.c
+===================================================================
+--- a/pcre_compile.c	(revision 1635)
++++ b/pcre_compile.c	(revision 1636)
+@@ -7311,7 +7311,12 @@
+           so far in order to get the number. If the name is not found, leave
+           the value of recno as 0 for a forward reference. */
+ 
+-          else
++          /* This patch (removing "else") fixes a problem when a reference is
++          to multiple identically named nested groups from within the nest.
++          Once again, it is not the "proper" fix, and it results in an
++          over-allocation of memory. */
++
++          /* else */
+             {
+             ng = cd->named_groups;
+             for (i = 0; i < cd->names_found; i++, ng++)
diff --git a/pkgs/development/libraries/pcre/default.nix b/pkgs/development/libraries/pcre/default.nix
index afeffae3e5fa..8bce1512d138 100644
--- a/pkgs/development/libraries/pcre/default.nix
+++ b/pkgs/development/libraries/pcre/default.nix
@@ -1,43 +1,50 @@
-{ stdenv, lib, fetchurl, unicodeSupport ? true, cplusplusSupport ? true
-, windows ? null
+{ stdenv, fetchurl
+, windows ? null, variant ? null, pcre
 , withCharSize ? 8
 }:
 
 with stdenv.lib;
 
-assert withCharSize != 8 -> !cplusplusSupport;
+assert elem variant [ null "cpp" "pcre16" "pcre32" ];
 
 let
-  charFlags = if withCharSize == 8 then [ ]
-              else if withCharSize == 16 then [ "--enable-pcre16" "--disable-pcre8" ]
-              else if withCharSize == 32 then [ "--enable-pcre32" "--disable-pcre8" ]
-              else abort "Invalid character size";
+  version = "8.38";
+  pname = if (variant == null) then "pcre"
+    else  if (variant == "cpp") then "pcre-cpp"
+    else  variant;
 
 in stdenv.mkDerivation rec {
-  name = "pcre${lib.optionalString (withCharSize != 8) (toString withCharSize)}-8.38";
-  # FIXME: add "version" attribute and use it in URL
+  name = "${pname}-${version}";
 
   src = fetchurl {
-    url = "ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.bz2";
+    url = "ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-${version}.tar.bz2";
     sha256 = "1pvra19ljkr5ky35y2iywjnsckrs9ch2anrf5b0dc91hw8v2vq5r";
   };
 
-  patches =
-    [ ];
+  patches = [
+    ./CVE-2016-1283.patch
+  ];
 
-  outputs = [ "out" "doc" "man" ];
+  outputs = [ "dev" "out" "bin" "doc" "man" ];
 
-  # FIXME: Refactor into list!
-  configureFlags = ''
-    --enable-jit
-    ${lib.optionalString unicodeSupport "--enable-unicode-properties"}
-    ${lib.optionalString (!cplusplusSupport) "--disable-cpp"}
-  '' + lib.optionalString (charFlags != []) " ${toString charFlags}";
+  configureFlags = [
+    "--enable-jit"
+    "--enable-unicode-properties"
+    "--disable-cpp"
+  ]
+    ++ optional (variant != null) "--enable-${variant}";
 
   doCheck = with stdenv; !(isCygwin || isFreeBSD);
     # XXX: test failure on Cygwin
     # we are running out of stack on both freeBSDs on Hydra
 
+  postFixup = ''
+    moveToOutput bin/pcre-config "$dev"
+  ''
+    + optionalString (variant != null) ''
+    ln -sf -t "$out/lib/" '${pcre.out}'/lib/libpcre{,posix}.so.*.*.*
+  '';
+
   crossAttrs = optionalAttrs (stdenv.cross.libc == "msvcrt") {
     buildInputs = [ windows.mingw_w64_pthreads.crossDrv ];
   };
diff --git a/pkgs/development/libraries/pdf2xml/default.nix b/pkgs/development/libraries/pdf2xml/default.nix
index c7c5aff24558..4ebb0cbcc260 100644
--- a/pkgs/development/libraries/pdf2xml/default.nix
+++ b/pkgs/development/libraries/pdf2xml/default.nix
@@ -16,8 +16,8 @@ stdenv.mkDerivation {
   preBuild = ''
     cp Makefile.linux Makefile
   
-    sed -i 's|/usr/include/libxml2|${libxml2}/include/libxml2|' Makefile
-    sed -i 's|-lxml2|-lxml2 -L${libxml2}/lib|' Makefile
+    sed -i 's|/usr/include/libxml2|${libxml2.dev}/include/libxml2|' Makefile
+    sed -i 's|-lxml2|-lxml2 -L${libxml2.out}/lib|' Makefile
     sed -i 's|XPDF = xpdf_3.01|XPDF = ${libxpdf}/lib|' Makefile
 
     mkdir exe
diff --git a/pkgs/development/libraries/polkit/default.nix b/pkgs/development/libraries/polkit/default.nix
index cdeaa0cb1d96..5744460008fd 100644
--- a/pkgs/development/libraries/polkit/default.nix
+++ b/pkgs/development/libraries/polkit/default.nix
@@ -22,6 +22,8 @@ stdenv.mkDerivation rec {
     sha256 = "109w86kfqrgz83g9ivggplmgc77rz8kx8646izvm2jb57h4rbh71";
   };
 
+  outputs = [ "dev" "out" "bin" ]; # small man pages in $bin
+
   buildInputs =
     [ pkgconfig glib expat pam intltool spidermonkey gobjectIntrospection ]
     ++ [ libxslt docbook_xsl docbook_xml_dtd_412 ] # man pages
diff --git a/pkgs/development/libraries/poppler/default.nix b/pkgs/development/libraries/poppler/default.nix
index 92777f001695..ebcdcc2b3efd 100644
--- a/pkgs/development/libraries/poppler/default.nix
+++ b/pkgs/development/libraries/poppler/default.nix
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
     inherit sha256;
   };
 
-  outputs = [ "out" ] ++ lib.optional (!minimal) "doc";
+  outputs = [ "dev" "out" ];
 
   patches = [ ./datadir_env.patch ];
 
diff --git a/pkgs/development/libraries/portaudio/default.nix b/pkgs/development/libraries/portaudio/default.nix
index 46d512814015..5d8c2430ab9f 100644
--- a/pkgs/development/libraries/portaudio/default.nix
+++ b/pkgs/development/libraries/portaudio/default.nix
@@ -35,7 +35,7 @@ stdenv.mkDerivation rec {
     make install
 
     # fixup .pc file to find alsa library
-    sed -i "s|-lasound|-L${alsaLib}/lib -lasound|" "$out/lib/pkgconfig/"*.pc
+    sed -i "s|-lasound|-L${alsaLib.out}/lib -lasound|" "$out/lib/pkgconfig/"*.pc
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/libraries/qhull/default.nix b/pkgs/development/libraries/qhull/default.nix
index 76ceb12b401f..f98c7bdb97e4 100644
--- a/pkgs/development/libraries/qhull/default.nix
+++ b/pkgs/development/libraries/qhull/default.nix
@@ -12,6 +12,11 @@ stdenv.mkDerivation rec {
 
   cmakeFlags = "-DMAN_INSTALL_DIR=share/man/man1 -DDOC_INSTALL_DIR=share/doc/qhull";
 
+  patchPhase = stdenv.lib.optionalString stdenv.isDarwin ''
+    sed -i 's/namespace std { struct bidirectional_iterator_tag; struct random_access_iterator_tag; }/#include <iterator>/' ./src/libqhullcpp/QhullIterator.h
+    sed -i 's/namespace std { struct bidirectional_iterator_tag; struct random_access_iterator_tag; }/#include <iterator>/' ./src/libqhullcpp/QhullLinkedList.h
+  '';
+
   meta = {
     homepage = http://www.qhull.org/;
     description = "Computes the convex hull, Delaunay triangulation, Voronoi diagram and more";
diff --git a/pkgs/development/libraries/qt-3/default.nix b/pkgs/development/libraries/qt-3/default.nix
index 08d8f141deb0..40fa63d75caf 100644
--- a/pkgs/development/libraries/qt-3/default.nix
+++ b/pkgs/development/libraries/qt-3/default.nix
@@ -49,9 +49,9 @@ stdenv.mkDerivation {
     ${if cursorSupport then "-L${libXcursor}/lib -I${libXcursor}/include" else ""}
     ${if mysqlSupport then "-qt-sql-mysql -L${mysql.lib}/lib/mysql -I${mysql.lib}/include/mysql" else ""}
     ${if xftSupport then "-xft
-      -L${libXft}/lib -I${libXft}/include
-      -L${libXft.freetype}/lib -I${libXft.freetype}/include
-      -L${libXft.fontconfig}/lib -I${libXft.fontconfig}/include" else "-no-xft"}
+      -L${libXft.out}/lib -I${libXft.dev}/include
+      -L${libXft.freetype.out}/lib -I${libXft.freetype.dev}/include
+      -L${libXft.fontconfig.lib}/lib -I${libXft.fontconfig.dev}/include" else "-no-xft"}
   ";
 
   patches = [
diff --git a/pkgs/development/libraries/qt-4.x/4.8/default.nix b/pkgs/development/libraries/qt-4.x/4.8/default.nix
index 17e0485b29fe..788fb8741402 100644
--- a/pkgs/development/libraries/qt-4.x/4.8/default.nix
+++ b/pkgs/development/libraries/qt-4.x/4.8/default.nix
@@ -53,19 +53,24 @@ stdenv.mkDerivation rec {
       ./libressl.patch
       (substituteAll {
         src = ./dlopen-absolute-paths.diff;
-        inherit cups icu libXfixes;
-        glibc = stdenv.cc.libc;
+        cups = if cups != null then cups.out else null;
+        icu = icu.out;
+        libXfixes = libXfixes.out;
+        glibc = stdenv.cc.libc.out;
         openglDriver = if mesaSupported then mesa.driverLink else "/no-such-path";
       })
     ] ++ stdenv.lib.optional gtkStyle (substituteAll {
         src = ./dlopen-gtkstyle.diff;
         # substituteAll ignores env vars starting with capital letter
-        gconf = GConf;
-        inherit gnome_vfs libgnomeui gtk;
+        gconf = GConf.out;
+        gtk = gtk.out;
+        libgnomeui = libgnomeui.out;
+        gnome_vfs = gnome_vfs.out;
       })
     ++ stdenv.lib.optional flashplayerFix (substituteAll {
         src = ./dlopen-webkit-nsplugin.diff;
-        inherit gtk gdk_pixbuf;
+        gtk = gtk.out;
+        gdk_pixbuf = gdk_pixbuf.out;
       })
     ++ [(fetchpatch {
         name = "fix-medium-font.patch";
@@ -113,7 +118,7 @@ stdenv.mkDerivation rec {
 
   propagatedBuildInputs =
     [ libXrender libXrandr libXinerama libXcursor libXext libXfixes libXv libXi
-      libSM zlib libpng openssl dbus.libs freetype fontconfig glib ]
+      libSM zlib libpng openssl dbus freetype fontconfig glib ]
         # Qt doesn't directly need GLU (just GL), but many apps use, it's small and doesn't remain a runtime-dep if not used
     ++ optional mesaSupported mesa_glu
     ++ optional ((buildWebkit || buildMultimedia) && stdenv.isLinux ) alsaLib
@@ -131,7 +136,7 @@ stdenv.mkDerivation rec {
   enableParallelBuilding = false;
 
   NIX_CFLAGS_COMPILE = optionalString (stdenv.isFreeBSD || stdenv.isDarwin)
-    "-I${glib}/include/glib-2.0 -I${glib}/lib/glib-2.0/include";
+    "-I${glib.dev}/include/glib-2.0 -I${glib.out}/lib/glib-2.0/include";
 
   NIX_LDFLAGS = optionalString (stdenv.isFreeBSD || stdenv.isDarwin)
     "-lglib-2.0";
diff --git a/pkgs/development/libraries/qt-5/5.4/default.nix b/pkgs/development/libraries/qt-5/5.4/default.nix
index 9b1324d11373..df2fb8ad1862 100644
--- a/pkgs/development/libraries/qt-5/5.4/default.nix
+++ b/pkgs/development/libraries/qt-5/5.4/default.nix
@@ -37,21 +37,19 @@ let
       inherit src;
 
       propagatedBuildInputs = args.qtInputs ++ (args.propagatedBuildInputs or []);
+      nativeBuildInputs = (args.nativeBuildInputs or []) ++ [ self.fixQtModuleCMakeConfig ];
 
       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;
+
       enableParallelBuilding = args.enableParallelBuilding or true;
 
-      meta = {
-        homepage = http://qt-project.org;
-        description = "A cross-platform application framework for C++";
-        license = with licenses; [ fdl13 gpl2 lgpl21 lgpl3 ];
-        maintainers = with maintainers; [ bbenoist qknight ttuegel ];
-        platforms = platforms.linux;
-      } // (args.meta or {});
+      meta = self.qtbase.meta // (args.meta or {});
     });
 
   addPackages = self: with self;
@@ -110,7 +108,10 @@ let
       ];
 
       makeQtWrapper = makeSetupHook { deps = [ makeWrapper ]; } ./make-qt-wrapper.sh;
+      fixQtModuleCMakeConfig = makeSetupHook { } ./fix-qt-module-cmake-config.sh;
 
     };
 
-in makeScope pkgs.newScope addPackages
+    self = makeScope pkgs.newScope addPackages;
+
+in self
diff --git a/pkgs/development/libraries/qt-5/5.4/fix-qt-module-cmake-config.sh b/pkgs/development/libraries/qt-5/5.4/fix-qt-module-cmake-config.sh
new file mode 100644
index 000000000000..7ca3e33b613c
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.4/fix-qt-module-cmake-config.sh
@@ -0,0 +1,5 @@
+fixQtModuleCMakeConfig() {
+    local module="$1"
+    sed -e "/set(imported_location/ s@\\\${_qt5${module}_install_prefix}@${!outputLib}@" \
+        -i "${!outputDev}/lib/cmake/Qt5${module}/Qt5${module}Config.cmake"
+}
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 36bd3822bf73..0585601db765 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtbase/default.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtbase/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchurl, copyPathsToStore, makeWrapper
+{ stdenv, lib, fetchurl, copyPathsToStore, fixQtModuleCMakeConfig
 , srcs
 
 , xlibs, libX11, libxcb, libXcursor, libXext, libXrender, libXi
@@ -14,8 +14,7 @@
 , mysql ? null, postgresql ? null
 
 # options
-, mesaSupported, mesa, mesa_glu
-, buildDocs ? false
+, mesaSupported, mesa
 , buildExamples ? false
 , buildTests ? false
 , developerBuild ? false
@@ -37,6 +36,8 @@ stdenv.mkDerivation {
 
   sourceRoot = "qt-everywhere-opensource-src-${version}";
 
+  outputs = [ "dev" "out" ];
+
   postUnpack = ''
     mv qtbase-opensource-src-${version} ./qt-everywhere-opensource-src-${version}/qtbase
   '';
@@ -60,27 +61,27 @@ stdenv.mkDerivation {
       sed -i 's/PATHS.*NO_DEFAULT_PATH//' "qtbase/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in"
 
       substituteInPlace qtbase/src/network/kernel/qdnslookup_unix.cpp \
-        --replace "@glibc@" "${stdenv.cc.libc}"
+        --replace "@glibc@" "${stdenv.cc.libc.out}"
       substituteInPlace qtbase/src/network/kernel/qhostinfo_unix.cpp \
-        --replace "@glibc@" "${stdenv.cc.libc}"
+        --replace "@glibc@" "${stdenv.cc.libc.out}"
 
       substituteInPlace qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp \
-        --replace "@libXcursor@" "${libXcursor}"
+        --replace "@libXcursor@" "${libXcursor.out}"
 
       substituteInPlace qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp \
-        --replace "@openssl@" "${openssl}"
+        --replace "@openssl@" "${openssl.out}"
 
       substituteInPlace qtbase/src/dbus/qdbus_symbols.cpp \
-        --replace "@dbus_libs@" "${dbus}"
+        --replace "@dbus_libs@" "${dbus.lib}"
 
       substituteInPlace \
         qtbase/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp \
-        --replace "@libX11@" "${libX11}"
+        --replace "@libX11@" "${libX11.out}"
     ''
     + lib.optionalString gtkStyle ''
-      substituteInPlace qtbase/src/widgets/styles/qgtk2painter.cpp --replace "@gtk@" "${gtk}"
+      substituteInPlace qtbase/src/widgets/styles/qgtk2painter.cpp --replace "@gtk@" "${gtk.out}"
       substituteInPlace qtbase/src/widgets/styles/qgtkstyle_p.cpp \
-        --replace "@gtk@" "${gtk}" \
+        --replace "@gtk@" "${gtk.out}" \
         --replace "@gnome_vfs@" "${gnome_vfs}" \
         --replace "@libgnomeui@" "${libgnomeui}" \
         --replace "@gconf@" "${GConf}"
@@ -88,16 +89,40 @@ stdenv.mkDerivation {
     + lib.optionalString mesaSupported ''
       substituteInPlace \
         qtbase/src/plugins/platforms/xcb/qglxintegration.cpp \
-        --replace "@mesa@" "${mesa}"
-      substituteInPlace qtbase/mkspecs/common/linux.conf --replace "@mesa@" "${mesa}"
+        --replace "@mesa_lib@" "${mesa.out}"
+      substituteInPlace qtbase/mkspecs/common/linux.conf \
+        --replace "@mesa_lib@" "${mesa.out}" \
+        --replace "@mesa_inc@" "${mesa.dev}"
     '';
 
+  setOutputFlags = false;
   preConfigure = ''
     export LD_LIBRARY_PATH="$PWD/qtbase/lib:$PWD/qtbase/plugins/platforms:$LD_LIBRARY_PATH"
     export MAKEFLAGS=-j$NIX_BUILD_CORES
 
-    export configureFlags+="-plugindir $out/lib/qt5/plugins -importdir $out/lib/qt5/imports -qmldir $out/lib/qt5/qml"
-    export configureFlags+=" -docdir $out/share/doc/qt5"
+    _multioutQtDevs() {
+        # We cannot simply set these paths in configureFlags because libQtCore retains
+        # references to the paths it was built with.
+        moveToOutput "bin" "$dev"
+        moveToOutput "include" "$dev"
+        moveToOutput "mkspecs" "$dev"
+
+        # 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)
+
+    configureFlags+="\
+        -plugindir $out/lib/qt5/plugins \
+        -importdir $out/lib/qt5/imports \
+        -qmldir $out/lib/qt5/qml \
+        -docdir $out/share/doc/qt5"
   '';
 
   prefixKey = "-prefix ";
@@ -172,40 +197,46 @@ stdenv.mkDerivation {
   # PostgreSQL autodetection fails sporadically because Qt omits the "-lpq" flag
   # if dependency paths contain the string "pq", which can occur in the hash.
   # To prevent these failures, we need to override PostgreSQL detection.
-  PSQL_LIBS = lib.optionalString (postgresql != null) "-L${postgresql}/lib -lpq";
+  PSQL_LIBS = lib.optionalString (postgresql != null) "-L${postgresql.lib}/lib -lpq";
 
   propagatedBuildInputs = [
     xlibs.libXcomposite libX11 libxcb libXext libXrender libXi
-    fontconfig freetype openssl dbus.libs glib udev libxml2 libxslt pcre
+    fontconfig freetype openssl dbus glib udev libxml2 libxslt pcre
     zlib libjpeg libpng libtiff sqlite icu
     xcbutil xcbutilimage xcbutilkeysyms xcbutilwm libxkbcommon
   ]
-  # Qt doesn't directly need GLU (just GL), but many apps use, it's small and
-  # doesn't remain a runtime-dep if not used
-  ++ lib.optionals mesaSupported [ mesa mesa_glu ]
-  ++ lib.optional (cups != null) cups
-  ++ lib.optional (mysql != null) mysql.lib
-  ++ lib.optional (postgresql != null) postgresql
-  ++ lib.optionals gtkStyle [gnome_vfs libgnomeui gtk GConf];
+  ++ lib.optional mesaSupported mesa;
 
   buildInputs =
     [ bison flex gperf ruby ]
-    ++ lib.optional developerBuild gdb;
-
-  nativeBuildInputs = [ python perl pkgconfig ];
+    ++ lib.optional developerBuild gdb
+    ++ lib.optional (cups != null) cups
+    ++ lib.optional (mysql != null) mysql.lib
+    ++ lib.optional (postgresql != null) postgresql
+    ++ lib.optionals gtkStyle [gnome_vfs libgnomeui gtk GConf];
 
-  propagatedNativeBuildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ fixQtModuleCMakeConfig lndir python perl pkgconfig ];
 
   # freetype-2.5.4 changed signedness of some struct fields
   NIX_CFLAGS_COMPILE = "-Wno-error=sign-compare";
 
-  postInstall =
+  postFixup =
     ''
       # Don't retain build-time dependencies like gdb and ruby.
-      sed '/QMAKE_DEFAULT_.*DIRS/ d' -i $out/mkspecs/qconfig.pri
-    ''
-    + lib.optionalString buildDocs ''
-      make docs && make install_docs
+      sed '/QMAKE_DEFAULT_.*DIRS/ d' -i "$dev/mkspecs/qconfig.pri"
+
+      fixQtModuleCMakeConfig "Concurrent"
+      fixQtModuleCMakeConfig "Core"
+      fixQtModuleCMakeConfig "DBus"
+      fixQtModuleCMakeConfig "Gui"
+      fixQtModuleCMakeConfig "Network"
+      fixQtModuleCMakeConfig "OpenGL"
+      fixQtModuleCMakeConfig "OpenGLExtensions"
+      fixQtModuleCMakeConfig "PrintSupport"
+      fixQtModuleCMakeConfig "Sql"
+      fixQtModuleCMakeConfig "Test"
+      fixQtModuleCMakeConfig "Widgets"
+      fixQtModuleCMakeConfig "Xml"
     '';
 
   inherit lndir;
@@ -214,9 +245,9 @@ stdenv.mkDerivation {
   enableParallelBuilding = true;
 
   meta = with lib; {
-    homepage = http://qt-project.org;
+    homepage = http://www.qt.io;
     description = "A cross-platform application framework for C++";
-    license = "GPL/LGPL";
+    license = with licenses; [ fdl13 gpl2 lgpl21 lgpl3 ];
     maintainers = with maintainers; [ bbenoist qknight ttuegel ];
     platforms = platforms.linux;
   };
diff --git a/pkgs/development/libraries/qt-5/5.4/qtbase/dlopen-gl.patch b/pkgs/development/libraries/qt-5/5.4/qtbase/dlopen-gl.patch
index d6e08cd24106..d5c4c2b97cb6 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtbase/dlopen-gl.patch
+++ b/pkgs/development/libraries/qt-5/5.4/qtbase/dlopen-gl.patch
@@ -10,7 +10,7 @@ Index: qt-everywhere-opensource-src-5.4.2/qtbase/src/plugins/platforms/xcb/qglxi
                  QLibrary lib(QLatin1String("GL"));
 +                if (!lib.load()) {
 +                    // Fallback to Mesa driver
-+                    lib.setFileName(QLatin1String("@mesa@/lib/libGL"));
++                    lib.setFileName(QLatin1String("@mesa_lib@/lib/libGL"));
 +                }
                  glXGetProcAddressARB = (qt_glXGetProcAddressARB) lib.resolve("glXGetProcAddressARB");
              }
diff --git a/pkgs/development/libraries/qt-5/5.4/qtbase/mkspecs-libgl.patch b/pkgs/development/libraries/qt-5/5.4/qtbase/mkspecs-libgl.patch
index 10115e8144ad..56ee0a411d4d 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtbase/mkspecs-libgl.patch
+++ b/pkgs/development/libraries/qt-5/5.4/qtbase/mkspecs-libgl.patch
@@ -8,8 +8,8 @@ Index: qt-everywhere-opensource-src-5.5.1/qtbase/mkspecs/common/linux.conf
  QMAKE_LIBDIR_X11        =
 -QMAKE_INCDIR_OPENGL     =
 -QMAKE_LIBDIR_OPENGL     =
-+QMAKE_INCDIR_OPENGL     = @mesa@/include
-+QMAKE_LIBDIR_OPENGL     = @mesa@/lib
++QMAKE_INCDIR_OPENGL     = @mesa_inc@/include
++QMAKE_LIBDIR_OPENGL     = @mesa_lib@/lib
  QMAKE_INCDIR_OPENGL_ES2 = $$QMAKE_INCDIR_OPENGL
  QMAKE_LIBDIR_OPENGL_ES2 = $$QMAKE_LIBDIR_OPENGL
  QMAKE_INCDIR_EGL        =
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 b86b6df28ac8..c44cd2234d76 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,45 +1,26 @@
 if [[ -z "$QMAKE" ]]; then
 
-linkDependencyDir() {
+_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
 }
 
-addQtModule() {
-    if [[ -d "$1/mkspecs" ]]; then
+_qtLinkModule() {
+    if [ -d "$1/mkspecs" ]; then
         # $1 is a Qt module
-        linkDependencyDir "$1" mkspecs
+        _qtLinkDependencyDir "$1" mkspecs
 
         for dir in bin include lib share; do
-            if [[ -d "$1/$dir" ]]; then
-                linkDependencyDir "$1" "$dir"
+            if [ -d "$1/$dir" ]; then
+                _qtLinkDependencyDir "$1" "$dir"
             fi
         done
     fi
 }
 
-propagateRuntimeDeps() {
-    local propagated
-    for dir in "etc/xdg" "lib/qt5/plugins" "lib/qt5/qml" "lib/qt5/imports" "share"; do
-        if [[ -d "$1/$dir" ]]; then
-            propagated=
-            for pkg in $propagatedBuildInputs; do
-                if [[ "z$pkg" == "z$1" ]]; then
-                    propagated=1
-                    break
-                fi
-            done
-            if [[ -z $propagated ]]; then
-                propagatedBuildInputs="$propagatedBuildInputs $1"
-            fi
-            break
-        fi
-    done
-}
-
-rmQtModules() {
+_qtRmModules() {
     cat "$out/nix-support/qt-inputs" | while read file; do
       if [[ -h "$out/$file" ]]; then
         rm "$out/$file"
@@ -55,14 +36,65 @@ rmQtModules() {
     rm "$out/nix-support/qt-inputs"
 }
 
-rmQMake() {
+addToSearchPathOnceWithCustomDelimiter() {
+    local delim="$1"
+    local search="$2"
+    local target="$3"
+    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\""
+    fi
+}
+
+addToSearchPathOnce() {
+    addToSearchPathOnceWithCustomDelimiter ':' "$@"
+}
+
+propagateOnce() {
+    addToSearchPathOnceWithCustomDelimiter ' ' "$@"
+}
+
+_qtPropagateRuntimeDependencies() {
+    for dir in "lib/qt5/plugins" "lib/qt5/qml" "lib/qt5/imports"; do
+        if [ -d "$1/$dir" ]; then
+            propagateOnce propagatedBuildInputs "$1"
+            break
+        fi
+    done
+    addToSearchPathOnce QT_PLUGIN_PATH "$1/lib/qt5/plugins"
+    addToSearchPathOnce QML_IMPORT_PATH "$1/lib/qt5/imports"
+    addToSearchPathOnce QML2_IMPORT_PATH "$1/lib/qt5/qml"
+}
+
+_qtRmQmake() {
     rm "$qtOut/bin/qmake" "$qtOut/bin/qt.conf"
 }
 
-setQMakePath() {
+_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}"
+}
+
+_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`
@@ -72,7 +104,7 @@ fi
 
 mkdir -p "$qtOut/bin" "$qtOut/mkspecs" "$qtOut/include" "$qtOut/nix-support" "$qtOut/lib" "$qtOut/share"
 
-cp "@out@/bin/qmake" "$qtOut/bin"
+cp "@dev@/bin/qmake" "$qtOut/bin"
 cat >"$qtOut/bin/qt.conf" <<EOF
 [Paths]
 Prefix = $qtOut
@@ -84,17 +116,20 @@ EOF
 
 export QMAKE="$qtOut/bin/qmake"
 
-envHooks+=(addQtModule propagateRuntimeDeps)
-preConfigurePhases+=(setQMakePath)
+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
-    preFixupPhases+=(rmQtModules)
-    postPhases+=(rmQMake)
+    postInstallHooks+=(_qtRmQmake _qtRmModules)
+    preFixupHooks+=(_qtMultioutModuleDevs)
 fi
 
 fi
 
 if [[ -z "$NIX_QT_PIC" ]]; then
-    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -fPIC"
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE${NIX_CFLAGS_COMPILE:+ }-fPIC"
     export NIX_QT_PIC=1
 fi
diff --git a/pkgs/development/libraries/qt-5/5.4/qtconnectivity.nix b/pkgs/development/libraries/qt-5/5.4/qtconnectivity.nix
index 95cd6fea79b4..35538c7261f1 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtconnectivity.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtconnectivity.nix
@@ -3,4 +3,8 @@
 qtSubmodule {
   name = "qtconnectivity";
   qtInputs = [ qtbase qtdeclarative ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "Bluetooth"
+    fixQtModuleCMakeConfig "Nfc"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.4/qtdeclarative/default.nix b/pkgs/development/libraries/qt-5/5.4/qtdeclarative/default.nix
index 9181c37b2258..e2219642a122 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtdeclarative/default.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtdeclarative/default.nix
@@ -5,4 +5,10 @@ qtSubmodule {
   patches = [ ./0001-nix-profiles-import-paths.patch ];
   qtInputs = [ qtbase qtsvg qtxmlpatterns ];
   nativeBuildInputs = [ python ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "Qml"
+    fixQtModuleCMakeConfig "Quick"
+    fixQtModuleCMakeConfig "QuickTest"
+    fixQtModuleCMakeConfig "QuickWidgets"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.4/qtenginio.nix b/pkgs/development/libraries/qt-5/5.4/qtenginio.nix
index b860a73ef890..503a0f7ce4f5 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtenginio.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtenginio.nix
@@ -3,4 +3,7 @@
 qtSubmodule {
   name = "qtenginio";
   qtInputs = [ qtdeclarative ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "Enginio"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.4/qtlocation.nix b/pkgs/development/libraries/qt-5/5.4/qtlocation.nix
index 1e134057c4b4..0e2ad8bafb30 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtlocation.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtlocation.nix
@@ -3,4 +3,8 @@
 qtSubmodule {
   name = "qtlocation";
   qtInputs = [ qtbase qtmultimedia ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "Location"
+    fixQtModuleCMakeConfig "Positioning"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.4/qtmultimedia.nix b/pkgs/development/libraries/qt-5/5.4/qtmultimedia.nix
index b6b4d8ea0cf4..8db8fa5f4b96 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtmultimedia.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtmultimedia.nix
@@ -9,4 +9,8 @@ qtSubmodule {
     pkgconfig alsaLib gstreamer gst-plugins-base libpulseaudio
   ];
   configureFlags = "GST_VERSION=1.0";
+  postFixup = ''
+    fixQtModuleCMakeConfig "Multimedia"
+    fixQtModuleCMakeConfig "MultimediaWidgets"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.4/qtquick1/default.nix b/pkgs/development/libraries/qt-5/5.4/qtquick1/default.nix
index d1c7bb389a49..d81abbcd6140 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtquick1/default.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtquick1/default.nix
@@ -4,4 +4,7 @@ qtSubmodule {
   name = "qtquick1";
   patches = [ ./0001-nix-profiles-import-paths.patch ];
   qtInputs = [ qtscript qtsvg qtwebkit qtxmlpatterns ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "Declarative"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.4/qtscript/default.nix b/pkgs/development/libraries/qt-5/5.4/qtscript/default.nix
index 127766e2ebd6..b81a43aeadb0 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtscript/default.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtscript/default.nix
@@ -4,4 +4,7 @@ qtSubmodule {
   name = "qtscript";
   qtInputs = [ qtbase qttools ];
   patches = [ ./0001-glib-2.32.patch ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "Script"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.4/qtsensors.nix b/pkgs/development/libraries/qt-5/5.4/qtsensors.nix
index 61e64dc47e4d..5776f45a7068 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtsensors.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtsensors.nix
@@ -3,4 +3,7 @@
 qtSubmodule {
   name = "qtsensors";
   qtInputs = [ qtbase qtdeclarative ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "Sensors"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.4/qtserialport/0001-dlopen-serialport-udev.patch b/pkgs/development/libraries/qt-5/5.4/qtserialport/0001-dlopen-serialport-udev.patch
index 6636cc9265a8..3a813dc80074 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtserialport/0001-dlopen-serialport-udev.patch
+++ b/pkgs/development/libraries/qt-5/5.4/qtserialport/0001-dlopen-serialport-udev.patch
@@ -16,10 +16,10 @@ index 6f2cabd..81b9849 100644
  {
      if (!udevLibrary->isLoaded()) {
 -        udevLibrary->setFileNameAndVersion(QStringLiteral("udev"), 1);
-+        udevLibrary->setFileNameAndVersion(QStringLiteral("@udev@/lib/libudev"), 1);
++        udevLibrary->setFileNameAndVersion(QStringLiteral("@libudev@/lib/libudev"), 1);
          if (!udevLibrary->load()) {
 -            udevLibrary->setFileNameAndVersion(QStringLiteral("udev"), 0);
-+            udevLibrary->setFileNameAndVersion(QStringLiteral("@udev@/lib/libudev"), 0);
++            udevLibrary->setFileNameAndVersion(QStringLiteral("@libudev@/lib/libudev"), 0);
              if (!udevLibrary->load()) {
                  qWarning("Failed to load the library: %s, supported version(s): %i and %i", qPrintable(udevLibrary->fileName()), 1, 0);
                  return false;
diff --git a/pkgs/development/libraries/qt-5/5.4/qtserialport/default.nix b/pkgs/development/libraries/qt-5/5.4/qtserialport/default.nix
index fa7383fc1e76..2c9575f122e7 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtserialport/default.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtserialport/default.nix
@@ -1,7 +1,16 @@
-{ qtSubmodule, qtbase }:
+{ qtSubmodule, qtbase, substituteAll, libudev }:
 
 qtSubmodule {
   name = "qtserialport";
   qtInputs = [ qtbase ];
-  patches = [ ./0001-dlopen-serialport-udev.patch ];
+
+  patches = [
+    (substituteAll {
+      src = ./0001-dlopen-serialport-udev.patch;
+      libudev = libudev.out;
+    })
+  ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "SerialPort"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.4/qtsvg.nix b/pkgs/development/libraries/qt-5/5.4/qtsvg.nix
index b9ccac7cf933..a460d6da4c2a 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtsvg.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtsvg.nix
@@ -3,4 +3,7 @@
 qtSubmodule {
   name = "qtsvg";
   qtInputs = [ qtbase ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "Svg"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.4/qttools.nix b/pkgs/development/libraries/qt-5/5.4/qttools.nix
index 65edc4508128..16887c4265a8 100644
--- a/pkgs/development/libraries/qt-5/5.4/qttools.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qttools.nix
@@ -3,4 +3,13 @@
 qtSubmodule {
   name = "qttools";
   qtInputs = [ qtbase ];
+  postFixup = ''
+    moveToOutput "bin/qdbus" "$out"
+    moveToOutput "bin/qtpaths" "$out"
+
+    fixQtModuleCMakeConfig "Designer"
+    fixQtModuleCMakeConfig "Help"
+    fixQtModuleCMakeConfig "LinguistTools"
+    fixQtModuleCMakeConfig "UiTools"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.4/qtwebkit/0003-dlopen-webkit-udev.patch b/pkgs/development/libraries/qt-5/5.4/qtwebkit/0003-dlopen-webkit-udev.patch
index f3b9d407bd72..1c360cd81aa2 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtwebkit/0003-dlopen-webkit-udev.patch
+++ b/pkgs/development/libraries/qt-5/5.4/qtwebkit/0003-dlopen-webkit-udev.patch
@@ -16,13 +16,13 @@ index 60ff317..da8ac69 100644
      {
          m_libUdev.setLoadHints(QLibrary::ResolveAllSymbolsHint);
 -        m_libUdev.setFileNameAndVersion(QStringLiteral("udev"), 1);
-+        m_libUdev.setFileNameAndVersion(QStringLiteral("@udev@/lib/libudev"), 1);
++        m_libUdev.setFileNameAndVersion(QStringLiteral("@libudev@/lib/libudev"), 1);
          m_loaded = m_libUdev.load();
          if (resolveMethods())
              return true;
  
 -        m_libUdev.setFileNameAndVersion(QStringLiteral("udev"), 0);
-+        m_libUdev.setFileNameAndVersion(QStringLiteral("@udev@/lib/libudev"), 0);
++        m_libUdev.setFileNameAndVersion(QStringLiteral("@libudev@/lib/libudev"), 0);
          m_loaded = m_libUdev.load();
          return resolveMethods();
      }
diff --git a/pkgs/development/libraries/qt-5/5.4/qtwebkit/default.nix b/pkgs/development/libraries/qt-5/5.4/qtwebkit/default.nix
index 596c02d39afb..7ed3017b95a3 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtwebkit/default.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtwebkit/default.nix
@@ -1,6 +1,6 @@
 { qtSubmodule, stdenv, qtdeclarative, qtlocation, qtmultimedia, qtsensors
 , fontconfig, gdk_pixbuf, gtk, libwebp, libxml2, libxslt
-, sqlite, udev
+, sqlite, libudev
 , bison2, flex, gdb, gperf, perl, pkgconfig, python, ruby
 , substituteAll
 , flashplayerFix ? false
@@ -18,16 +18,21 @@ qtSubmodule {
   patches =
     let dlopen-webkit-nsplugin = substituteAll {
           src = ./0001-dlopen-webkit-nsplugin.patch;
-          inherit gtk gdk_pixbuf;
+          gtk = gtk.out;
+          gdk_pixbuf = gdk_pixbuf.out;
         };
         dlopen-webkit-gtk = substituteAll {
           src = ./0002-dlopen-webkit-gtk.patch;
-          inherit gtk;
+          gtk = gtk.out;
         };
         dlopen-webkit-udev = substituteAll {
           src = ./0003-dlopen-webkit-udev.patch;
-          inherit udev;
+          udev = libudev.out;
         };
     in optionals flashplayerFix [ dlopen-webkit-nsplugin dlopen-webkit-gtk ]
     ++ [ dlopen-webkit-udev ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "WebKit"
+    fixQtModuleCMakeConfig "WebKitWidgets"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.4/qtwebsockets.nix b/pkgs/development/libraries/qt-5/5.4/qtwebsockets.nix
index fbdfbbcf0dbe..c0d0f9e7d714 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtwebsockets.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtwebsockets.nix
@@ -3,4 +3,7 @@
 qtSubmodule {
   name = "qtwebsockets";
   qtInputs = [ qtbase qtdeclarative ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "WebSockets"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.4/qtx11extras.nix b/pkgs/development/libraries/qt-5/5.4/qtx11extras.nix
index a765161e2d7e..db92f1353627 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtx11extras.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtx11extras.nix
@@ -3,4 +3,7 @@
 qtSubmodule {
   name = "qtx11extras";
   qtInputs = [ qtbase ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "X11Extras"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.4/qtxmlpatterns.nix b/pkgs/development/libraries/qt-5/5.4/qtxmlpatterns.nix
index 9a8ddbba2bd2..3b22132e4c38 100644
--- a/pkgs/development/libraries/qt-5/5.4/qtxmlpatterns.nix
+++ b/pkgs/development/libraries/qt-5/5.4/qtxmlpatterns.nix
@@ -3,4 +3,7 @@
 qtSubmodule {
   name = "qtxmlpatterns";
   qtInputs = [ qtbase ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "XmlPatterns"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.5/default.nix b/pkgs/development/libraries/qt-5/5.5/default.nix
index 9b1324d11373..955d57350c29 100644
--- a/pkgs/development/libraries/qt-5/5.5/default.nix
+++ b/pkgs/development/libraries/qt-5/5.5/default.nix
@@ -1,15 +1,20 @@
-# Maintainer's Notes:
-#
-# Minor updates:
-#  1. Edit ./fetchsrcs.sh to point to the updated URL.
-#  2. Run ./fetchsrcs.sh.
-#  3. Build and enjoy.
-#
-# Major updates:
-#  We prefer not to immediately overwrite older versions with major updates, so
-#  make a copy of this directory first. After copying, be sure to delete ./tmp
-#  if it exists. Then follow the minor update instructions. Be sure to check if
-#  any new components have been added and package them as necessary.
+/*
+
+# Minor Updates
+
+1. Edit ./fetchsrcs.sh to point to the updated URL.
+2. Run ./fetchsrcs.sh.
+3. Build and enjoy.
+
+# Major Updates
+
+1. Make a copy of this directory. (We like to keep the old version around
+   for a short time after major updates.)
+2. Delete the tmp/ subdirectory of the copy.
+3. Follow the minor update instructions above.
+4. Package any new Qt modules, if necessary.
+
+*/
 
 { pkgs
 
@@ -37,21 +42,19 @@ let
       inherit src;
 
       propagatedBuildInputs = args.qtInputs ++ (args.propagatedBuildInputs or []);
+      nativeBuildInputs = (args.nativeBuildInputs or []) ++ [ self.fixQtModuleCMakeConfig ];
 
       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;
+
       enableParallelBuilding = args.enableParallelBuilding or true;
 
-      meta = {
-        homepage = http://qt-project.org;
-        description = "A cross-platform application framework for C++";
-        license = with licenses; [ fdl13 gpl2 lgpl21 lgpl3 ];
-        maintainers = with maintainers; [ bbenoist qknight ttuegel ];
-        platforms = platforms.linux;
-      } // (args.meta or {});
+      meta = self.qtbase.meta // (args.meta or {});
     });
 
   addPackages = self: with self;
@@ -61,6 +64,7 @@ let
 
       qtbase = callPackage ./qtbase {
         mesa = pkgs.mesa_noglu;
+        harfbuzz = pkgs.harfbuzz-icu;
         cups = if stdenv.isLinux then pkgs.cups else null;
         # GNOME dependencies are not used unless gtkStyle == true
         inherit (pkgs.gnome) libgnomeui GConf gnome_vfs;
@@ -110,7 +114,10 @@ let
       ];
 
       makeQtWrapper = makeSetupHook { deps = [ makeWrapper ]; } ./make-qt-wrapper.sh;
+      fixQtModuleCMakeConfig = makeSetupHook { } ./fix-qt-module-cmake-config.sh;
 
     };
 
-in makeScope pkgs.newScope addPackages
+   self = makeScope pkgs.newScope addPackages;
+
+in self
diff --git a/pkgs/development/libraries/qt-5/5.5/fix-qt-module-cmake-config.sh b/pkgs/development/libraries/qt-5/5.5/fix-qt-module-cmake-config.sh
new file mode 100644
index 000000000000..7ca3e33b613c
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.5/fix-qt-module-cmake-config.sh
@@ -0,0 +1,5 @@
+fixQtModuleCMakeConfig() {
+    local module="$1"
+    sed -e "/set(imported_location/ s@\\\${_qt5${module}_install_prefix}@${!outputLib}@" \
+        -i "${!outputDev}/lib/cmake/Qt5${module}/Qt5${module}Config.cmake"
+}
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 d61665455bf4..f29bbb73639b 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
@@ -1,11 +1,3 @@
-addQtDependency() {
-    addToSearchPath QT_PLUGIN_PATH "$1/lib/qt5/plugins"
-    addToSearchPath QML_IMPORT_PATH "$1/lib/qt5/imports"
-    addToSearchPath QML2_IMPORT_PATH "$1/lib/qt5/qml"
-    addToSearchPath XDG_CONFIG_DIRS "$1/etc/xdg"
-    addToSearchPath XDG_DATA_DIRS "$1/share"
-}
-
 wrapQtProgram() {
     local prog="$1"
     shift
@@ -13,8 +5,8 @@ wrapQtProgram() {
         --prefix QT_PLUGIN_PATH : "$QT_PLUGIN_PATH" \
         --prefix QML_IMPORT_PATH : "$QML_IMPORT_PATH" \
         --prefix QML2_IMPORT_PATH : "$QML2_IMPORT_PATH" \
-        --prefix XDG_CONFIG_DIRS : "$XDG_CONFIG_DIRS" \
-        --prefix XDG_DATA_DIRS : "$XDG_DATA_DIRS" \
+        --prefix XDG_CONFIG_DIRS : "$NIX_WRAP_XDG_CONFIG_DIRS" \
+        --prefix XDG_DATA_DIRS : "$NIX_WRAP_XDG_DATA_DIRS" \
         "$@"
 }
 
@@ -27,16 +19,16 @@ makeQtWrapper() {
         --prefix QT_PLUGIN_PATH : "$QT_PLUGIN_PATH" \
         --prefix QML_IMPORT_PATH : "$QML_IMPORT_PATH" \
         --prefix QML2_IMPORT_PATH : "$QML2_IMPORT_PATH" \
-        --prefix XDG_CONFIG_DIRS : "$XDG_CONFIG_DIRS" \
-        --prefix XDG_DATA_DIRS : "$XDG_DATA_DIRS" \
+        --prefix XDG_CONFIG_DIRS : "$NIX_WRAP_XDG_CONFIG_DIRS" \
+        --prefix XDG_DATA_DIRS : "$NIX_WRAP_XDG_DATA_DIRS" \
         "$@"
 }
 
 # cannot use addToSearchPath because these directories may not exist yet
-export QT_PLUGIN_PATH="$QT_PLUGIN_PATH${QT_PLUGIN_PATH:+:}$out/lib/qt5/plugins"
-export QML_IMPORT_PATH="$QML_IMPORT_PATH${QML_IMPORT_PATH:+:}$out/lib/qt5/imports"
-export QML2_IMPORT_PATH="$QML2_IMPORT_PATH${QML2_IMPORT_PATH:+:}$out/lib/qt5/qml"
-export XDG_CONFIG_DIRS="$XDG_CONFIG_DIRS${XDG_CONFIG_DIRS:+:}$out/etc/xdg"
-export XDG_DATA_DIRS="$XDG_DATA_DIRS${XDG_DATA_DIRS:+:}$out/share"
-
-envHooks+=(addQtDependency)
+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"
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 ffa0a95be2c0..35410d55e66d 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtbase/default.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/default.nix
@@ -1,10 +1,11 @@
-{ stdenv, lib, fetchurl, copyPathsToStore, makeWrapper
+{ stdenv, lib, fetchurl, copyPathsToStore, fixQtModuleCMakeConfig
 , srcs
 
 , xlibs, libX11, libxcb, libXcursor, libXext, libXrender, libXi
 , xcbutil, xcbutilimage, xcbutilkeysyms, xcbutilwm, libxkbcommon
-, fontconfig, freetype, openssl, dbus, glib, udev, libxml2, libxslt, pcre16
-, zlib, libjpeg, libpng, libtiff, sqlite, icu, harfbuzz
+, fontconfig, freetype, harfbuzz
+, openssl, dbus, glib, udev, libxml2, libxslt, pcre16
+, zlib, libjpeg, libpng, libtiff, sqlite, icu
 
 , coreutils, bison, flex, gdb, gperf, lndir, ruby
 , python, perl, pkgconfig
@@ -14,8 +15,7 @@
 , mysql ? null, postgresql ? null
 
 # options
-, mesaSupported, mesa, mesa_glu
-, buildDocs ? false
+, mesaSupported, mesa
 , buildExamples ? false
 , buildTests ? false
 , developerBuild ? false
@@ -43,6 +43,8 @@ stdenv.mkDerivation {
 
   sourceRoot = "qt-everywhere-opensource-src-${version}";
 
+  outputs = [ "dev" "out" ];
+
   postUnpack = ''
     mv qtbase-opensource-src-${version} ./qt-everywhere-opensource-src-${version}/qtbase
   '';
@@ -70,44 +72,68 @@ stdenv.mkDerivation {
       sed -i 's/PATHS.*NO_DEFAULT_PATH//' "qtbase/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in"
 
       substituteInPlace qtbase/src/network/kernel/qdnslookup_unix.cpp \
-        --replace "@glibc@" "${stdenv.cc.libc}"
+        --replace "@glibc@" "${stdenv.cc.libc.out}"
       substituteInPlace qtbase/src/network/kernel/qhostinfo_unix.cpp \
-        --replace "@glibc@" "${stdenv.cc.libc}"
+        --replace "@glibc@" "${stdenv.cc.libc.out}"
 
       substituteInPlace qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp \
-        --replace "@libXcursor@" "${libXcursor}"
+        --replace "@libXcursor@" "${libXcursor.out}"
 
       substituteInPlace qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp \
-        --replace "@openssl@" "${openssl}"
+        --replace "@openssl@" "${openssl.out}"
 
       substituteInPlace qtbase/src/dbus/qdbus_symbols.cpp \
-        --replace "@dbus_libs@" "${dbus}"
+        --replace "@dbus_libs@" "${dbus.lib}"
 
       substituteInPlace \
         qtbase/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp \
-        --replace "@libX11@" "${libX11}"
+        --replace "@libX11@" "${libX11.out}"
     ''
     + lib.optionalString gtkStyle ''
-      substituteInPlace qtbase/src/widgets/styles/qgtk2painter.cpp --replace "@gtk@" "${gtk}"
+      substituteInPlace qtbase/src/widgets/styles/qgtk2painter.cpp --replace "@gtk@" "${gtk.out}"
       substituteInPlace qtbase/src/widgets/styles/qgtkstyle_p.cpp \
-        --replace "@gtk@" "${gtk}" \
-        --replace "@gnome_vfs@" "${gnome_vfs}" \
-        --replace "@libgnomeui@" "${libgnomeui}" \
-        --replace "@gconf@" "${GConf}"
+        --replace "@gtk@" "${gtk.out}" \
+        --replace "@gnome_vfs@" "${gnome_vfs.out}" \
+        --replace "@libgnomeui@" "${libgnomeui.out}" \
+        --replace "@gconf@" "${GConf.out}"
     ''
     + lib.optionalString mesaSupported ''
       substituteInPlace \
         qtbase/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp \
-        --replace "@mesa@" "${mesa}"
-      substituteInPlace qtbase/mkspecs/common/linux.conf --replace "@mesa@" "${mesa}"
+        --replace "@mesa_lib@" "${mesa.out}"
+      substituteInPlace qtbase/mkspecs/common/linux.conf \
+        --replace "@mesa_lib@" "${mesa.out}" \
+        --replace "@mesa_inc@" "${mesa.dev}"
     '';
 
+  setOutputFlags = false;
   preConfigure = ''
     export LD_LIBRARY_PATH="$PWD/qtbase/lib:$PWD/qtbase/plugins/platforms:$LD_LIBRARY_PATH"
     export MAKEFLAGS=-j$NIX_BUILD_CORES
 
-    export configureFlags+="-plugindir $out/lib/qt5/plugins -importdir $out/lib/qt5/imports -qmldir $out/lib/qt5/qml"
-    export configureFlags+=" -docdir $out/share/doc/qt5"
+    _multioutQtDevs() {
+        # We cannot simply set these paths in configureFlags because libQtCore retains
+        # references to the paths it was built with.
+        moveToOutput "bin" "$dev"
+        moveToOutput "include" "$dev"
+        moveToOutput "mkspecs" "$dev"
+
+        # 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)
+
+    configureFlags+="\
+        -plugindir $out/lib/qt5/plugins \
+        -importdir $out/lib/qt5/imports \
+        -qmldir $out/lib/qt5/qml \
+        -docdir $out/share/doc/qt5"
   '';
 
   prefixKey = "-prefix ";
@@ -184,40 +210,53 @@ stdenv.mkDerivation {
   # PostgreSQL autodetection fails sporadically because Qt omits the "-lpq" flag
   # if dependency paths contain the string "pq", which can occur in the hash.
   # To prevent these failures, we need to override PostgreSQL detection.
-  PSQL_LIBS = lib.optionalString (postgresql != null) "-L${postgresql}/lib -lpq";
+  PSQL_LIBS = lib.optionalString (postgresql != null) "-L${postgresql.lib}/lib -lpq";
 
   propagatedBuildInputs = [
+    dbus glib libxml2 libxslt openssl pcre16 sqlite udev zlib
+
+    # Image formats
+    libjpeg libpng libtiff
+
+    # Text rendering
+    fontconfig freetype harfbuzz icu
+
+    # X11 libs
     xlibs.libXcomposite libX11 libxcb libXext libXrender libXi
-    fontconfig freetype openssl dbus.libs glib udev libxml2 libxslt pcre16
-    zlib libjpeg libpng libtiff sqlite icu harfbuzz
     xcbutil xcbutilimage xcbutilkeysyms xcbutilwm libxkbcommon
   ]
-  # Qt doesn't directly need GLU (just GL), but many apps use, it's small and
-  # doesn't remain a runtime-dep if not used
-  ++ lib.optionals mesaSupported [ mesa mesa_glu ]
-  ++ lib.optional (cups != null) cups
-  ++ lib.optional (mysql != null) mysql.lib
-  ++ lib.optional (postgresql != null) postgresql
-  ++ lib.optionals gtkStyle [gnome_vfs libgnomeui gtk GConf];
+  ++ lib.optional mesaSupported mesa;
 
   buildInputs =
     [ bison flex gperf ruby ]
-    ++ lib.optional developerBuild gdb;
-
-  nativeBuildInputs = [ python perl pkgconfig ];
+    ++ lib.optional developerBuild gdb
+    ++ lib.optional (cups != null) cups
+    ++ lib.optional (mysql != null) mysql.lib
+    ++ lib.optional (postgresql != null) postgresql
+    ++ lib.optionals gtkStyle [gnome_vfs.out libgnomeui.out gtk GConf];
 
-  propagatedNativeBuildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ fixQtModuleCMakeConfig lndir python perl pkgconfig ];
 
   # freetype-2.5.4 changed signedness of some struct fields
   NIX_CFLAGS_COMPILE = "-Wno-error=sign-compare";
 
-  postInstall =
+  postFixup =
     ''
       # Don't retain build-time dependencies like gdb and ruby.
-      sed '/QMAKE_DEFAULT_.*DIRS/ d' -i $out/mkspecs/qconfig.pri
-    ''
-    + lib.optionalString buildDocs ''
-      make docs && make install_docs
+      sed '/QMAKE_DEFAULT_.*DIRS/ d' -i $dev/mkspecs/qconfig.pri
+
+      fixQtModuleCMakeConfig "Concurrent"
+      fixQtModuleCMakeConfig "Core"
+      fixQtModuleCMakeConfig "DBus"
+      fixQtModuleCMakeConfig "Gui"
+      fixQtModuleCMakeConfig "Network"
+      fixQtModuleCMakeConfig "OpenGL"
+      fixQtModuleCMakeConfig "OpenGLExtensions"
+      fixQtModuleCMakeConfig "PrintSupport"
+      fixQtModuleCMakeConfig "Sql"
+      fixQtModuleCMakeConfig "Test"
+      fixQtModuleCMakeConfig "Widgets"
+      fixQtModuleCMakeConfig "Xml"
     '';
 
   inherit lndir;
@@ -226,9 +265,9 @@ stdenv.mkDerivation {
   enableParallelBuilding = true;
 
   meta = with lib; {
-    homepage = http://qt-project.org;
+    homepage = http://www.qt.io;
     description = "A cross-platform application framework for C++";
-    license = "GPL/LGPL";
+    license = with licenses; [ fdl13 gpl2 lgpl21 lgpl3 ];
     maintainers = with maintainers; [ bbenoist qknight ttuegel ];
     platforms = platforms.linux;
   };
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/dlopen-gl.patch b/pkgs/development/libraries/qt-5/5.5/qtbase/dlopen-gl.patch
index 14411a95f3ac..59f510ac54da 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtbase/dlopen-gl.patch
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/dlopen-gl.patch
@@ -10,7 +10,7 @@ Index: qt-everywhere-opensource-src-5.5.1/qtbase/src/plugins/platforms/xcb/gl_in
                  QLibrary lib(QLatin1String("GL"));
 +                if (!lib.load()) {
 +                    // Fallback to Mesa driver
-+                    lib.setFileName(QLatin1String("@mesa@/lib/libGL"));
++                    lib.setFileName(QLatin1String("@mesa_lib@/lib/libGL"));
 +                }
                  glXGetProcAddressARB = (qt_glXGetProcAddressARB) lib.resolve("glXGetProcAddressARB");
              }
diff --git a/pkgs/development/libraries/qt-5/5.5/qtbase/mkspecs-libgl.patch b/pkgs/development/libraries/qt-5/5.5/qtbase/mkspecs-libgl.patch
index 10115e8144ad..56ee0a411d4d 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtbase/mkspecs-libgl.patch
+++ b/pkgs/development/libraries/qt-5/5.5/qtbase/mkspecs-libgl.patch
@@ -8,8 +8,8 @@ Index: qt-everywhere-opensource-src-5.5.1/qtbase/mkspecs/common/linux.conf
  QMAKE_LIBDIR_X11        =
 -QMAKE_INCDIR_OPENGL     =
 -QMAKE_LIBDIR_OPENGL     =
-+QMAKE_INCDIR_OPENGL     = @mesa@/include
-+QMAKE_LIBDIR_OPENGL     = @mesa@/lib
++QMAKE_INCDIR_OPENGL     = @mesa_inc@/include
++QMAKE_LIBDIR_OPENGL     = @mesa_lib@/lib
  QMAKE_INCDIR_OPENGL_ES2 = $$QMAKE_INCDIR_OPENGL
  QMAKE_LIBDIR_OPENGL_ES2 = $$QMAKE_LIBDIR_OPENGL
  QMAKE_INCDIR_EGL        =
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 b86b6df28ac8..9cf1ef9ccb61 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,45 +1,26 @@
 if [[ -z "$QMAKE" ]]; then
 
-linkDependencyDir() {
+_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
 }
 
-addQtModule() {
-    if [[ -d "$1/mkspecs" ]]; then
+_qtLinkModule() {
+    if [ -d "$1/mkspecs" ]; then
         # $1 is a Qt module
-        linkDependencyDir "$1" mkspecs
+        _qtLinkDependencyDir "$1" mkspecs
 
         for dir in bin include lib share; do
-            if [[ -d "$1/$dir" ]]; then
-                linkDependencyDir "$1" "$dir"
+            if [ -d "$1/$dir" ]; then
+                _qtLinkDependencyDir "$1" "$dir"
             fi
         done
     fi
 }
 
-propagateRuntimeDeps() {
-    local propagated
-    for dir in "etc/xdg" "lib/qt5/plugins" "lib/qt5/qml" "lib/qt5/imports" "share"; do
-        if [[ -d "$1/$dir" ]]; then
-            propagated=
-            for pkg in $propagatedBuildInputs; do
-                if [[ "z$pkg" == "z$1" ]]; then
-                    propagated=1
-                    break
-                fi
-            done
-            if [[ -z $propagated ]]; then
-                propagatedBuildInputs="$propagatedBuildInputs $1"
-            fi
-            break
-        fi
-    done
-}
-
-rmQtModules() {
+_qtRmModules() {
     cat "$out/nix-support/qt-inputs" | while read file; do
       if [[ -h "$out/$file" ]]; then
         rm "$out/$file"
@@ -55,14 +36,66 @@ rmQtModules() {
     rm "$out/nix-support/qt-inputs"
 }
 
-rmQMake() {
+addToSearchPathOnceWithCustomDelimiter() {
+    local delim="$1"
+    local search="$2"
+    local target="$3"
+    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\""
+    fi
+}
+
+addToSearchPathOnce() {
+    addToSearchPathOnceWithCustomDelimiter ':' "$@"
+}
+
+propagateOnce() {
+    addToSearchPathOnceWithCustomDelimiter ' ' "$@"
+}
+
+_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
+    addToSearchPathOnce QT_PLUGIN_PATH "$1/lib/qt5/plugins"
+    addToSearchPathOnce QML_IMPORT_PATH "$1/lib/qt5/imports"
+    addToSearchPathOnce QML2_IMPORT_PATH "$1/lib/qt5/qml"
+}
+
+_qtRmQmake() {
     rm "$qtOut/bin/qmake" "$qtOut/bin/qt.conf"
 }
 
-setQMakePath() {
+_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}"
+}
+
+_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`
@@ -72,7 +105,7 @@ fi
 
 mkdir -p "$qtOut/bin" "$qtOut/mkspecs" "$qtOut/include" "$qtOut/nix-support" "$qtOut/lib" "$qtOut/share"
 
-cp "@out@/bin/qmake" "$qtOut/bin"
+cp "@dev@/bin/qmake" "$qtOut/bin"
 cat >"$qtOut/bin/qt.conf" <<EOF
 [Paths]
 Prefix = $qtOut
@@ -84,17 +117,20 @@ EOF
 
 export QMAKE="$qtOut/bin/qmake"
 
-envHooks+=(addQtModule propagateRuntimeDeps)
-preConfigurePhases+=(setQMakePath)
+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
-    preFixupPhases+=(rmQtModules)
-    postPhases+=(rmQMake)
+    postInstallHooks+=(_qtRmQmake _qtRmModules)
+    preFixupHooks+=(_qtMultioutModuleDevs)
 fi
 
 fi
 
 if [[ -z "$NIX_QT_PIC" ]]; then
-    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -fPIC"
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE${NIX_CFLAGS_COMPILE:+ }-fPIC"
     export NIX_QT_PIC=1
 fi
diff --git a/pkgs/development/libraries/qt-5/5.5/qtconnectivity.nix b/pkgs/development/libraries/qt-5/5.5/qtconnectivity.nix
index 95cd6fea79b4..35538c7261f1 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtconnectivity.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtconnectivity.nix
@@ -3,4 +3,8 @@
 qtSubmodule {
   name = "qtconnectivity";
   qtInputs = [ qtbase qtdeclarative ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "Bluetooth"
+    fixQtModuleCMakeConfig "Nfc"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.5/qtdeclarative/default.nix b/pkgs/development/libraries/qt-5/5.5/qtdeclarative/default.nix
index 328d8aee72bd..407513f78498 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtdeclarative/default.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtdeclarative/default.nix
@@ -5,4 +5,10 @@ qtSubmodule {
   patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
   qtInputs = [ qtbase qtsvg qtxmlpatterns ];
   nativeBuildInputs = [ python ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "Qml"
+    fixQtModuleCMakeConfig "Quick"
+    fixQtModuleCMakeConfig "QuickTest"
+    fixQtModuleCMakeConfig "QuickWidgets"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.5/qtenginio.nix b/pkgs/development/libraries/qt-5/5.5/qtenginio.nix
index b860a73ef890..503a0f7ce4f5 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtenginio.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtenginio.nix
@@ -3,4 +3,7 @@
 qtSubmodule {
   name = "qtenginio";
   qtInputs = [ qtdeclarative ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "Enginio"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.5/qtlocation.nix b/pkgs/development/libraries/qt-5/5.5/qtlocation.nix
index 1e134057c4b4..0e2ad8bafb30 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtlocation.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtlocation.nix
@@ -3,4 +3,8 @@
 qtSubmodule {
   name = "qtlocation";
   qtInputs = [ qtbase qtmultimedia ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "Location"
+    fixQtModuleCMakeConfig "Positioning"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.5/qtmultimedia.nix b/pkgs/development/libraries/qt-5/5.5/qtmultimedia.nix
index b6b4d8ea0cf4..8db8fa5f4b96 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtmultimedia.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtmultimedia.nix
@@ -9,4 +9,8 @@ qtSubmodule {
     pkgconfig alsaLib gstreamer gst-plugins-base libpulseaudio
   ];
   configureFlags = "GST_VERSION=1.0";
+  postFixup = ''
+    fixQtModuleCMakeConfig "Multimedia"
+    fixQtModuleCMakeConfig "MultimediaWidgets"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.5/qtquick1/default.nix b/pkgs/development/libraries/qt-5/5.5/qtquick1/default.nix
index 64937b3dcd37..4bf92fa01473 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtquick1/default.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtquick1/default.nix
@@ -4,4 +4,7 @@ qtSubmodule {
   name = "qtquick1";
   patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
   qtInputs = [ qtscript qtsvg qtwebkit qtxmlpatterns ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "Declarative"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.5/qtscript/default.nix b/pkgs/development/libraries/qt-5/5.5/qtscript/default.nix
index 127766e2ebd6..b81a43aeadb0 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtscript/default.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtscript/default.nix
@@ -4,4 +4,7 @@ qtSubmodule {
   name = "qtscript";
   qtInputs = [ qtbase qttools ];
   patches = [ ./0001-glib-2.32.patch ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "Script"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.5/qtsensors.nix b/pkgs/development/libraries/qt-5/5.5/qtsensors.nix
index 61e64dc47e4d..5776f45a7068 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtsensors.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtsensors.nix
@@ -3,4 +3,7 @@
 qtSubmodule {
   name = "qtsensors";
   qtInputs = [ qtbase qtdeclarative ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "Sensors"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.5/qtserialport/0001-dlopen-serialport-udev.patch b/pkgs/development/libraries/qt-5/5.5/qtserialport/0001-dlopen-serialport-udev.patch
index 6636cc9265a8..3a813dc80074 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtserialport/0001-dlopen-serialport-udev.patch
+++ b/pkgs/development/libraries/qt-5/5.5/qtserialport/0001-dlopen-serialport-udev.patch
@@ -16,10 +16,10 @@ index 6f2cabd..81b9849 100644
  {
      if (!udevLibrary->isLoaded()) {
 -        udevLibrary->setFileNameAndVersion(QStringLiteral("udev"), 1);
-+        udevLibrary->setFileNameAndVersion(QStringLiteral("@udev@/lib/libudev"), 1);
++        udevLibrary->setFileNameAndVersion(QStringLiteral("@libudev@/lib/libudev"), 1);
          if (!udevLibrary->load()) {
 -            udevLibrary->setFileNameAndVersion(QStringLiteral("udev"), 0);
-+            udevLibrary->setFileNameAndVersion(QStringLiteral("@udev@/lib/libudev"), 0);
++            udevLibrary->setFileNameAndVersion(QStringLiteral("@libudev@/lib/libudev"), 0);
              if (!udevLibrary->load()) {
                  qWarning("Failed to load the library: %s, supported version(s): %i and %i", qPrintable(udevLibrary->fileName()), 1, 0);
                  return false;
diff --git a/pkgs/development/libraries/qt-5/5.5/qtserialport/default.nix b/pkgs/development/libraries/qt-5/5.5/qtserialport/default.nix
index fa7383fc1e76..3f409f9c0e08 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtserialport/default.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtserialport/default.nix
@@ -1,7 +1,15 @@
-{ qtSubmodule, qtbase }:
+{ qtSubmodule, qtbase, substituteAll, libudev }:
 
 qtSubmodule {
   name = "qtserialport";
   qtInputs = [ qtbase ];
-  patches = [ ./0001-dlopen-serialport-udev.patch ];
+  patches = [
+    (substituteAll {
+      src = ./0001-dlopen-serialport-udev.patch;
+      libudev = libudev.out;
+    })
+  ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "SerialPort"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.5/qtsvg.nix b/pkgs/development/libraries/qt-5/5.5/qtsvg.nix
index b9ccac7cf933..a460d6da4c2a 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtsvg.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtsvg.nix
@@ -3,4 +3,7 @@
 qtSubmodule {
   name = "qtsvg";
   qtInputs = [ qtbase ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "Svg"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.5/qttools.nix b/pkgs/development/libraries/qt-5/5.5/qttools.nix
index 65edc4508128..1472691c5254 100644
--- a/pkgs/development/libraries/qt-5/5.5/qttools.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qttools.nix
@@ -3,4 +3,14 @@
 qtSubmodule {
   name = "qttools";
   qtInputs = [ qtbase ];
+  postFixup = ''
+    moveToOutput "bin/qdbus" "$out"
+    moveToOutput "bin/qtpaths" "$out"
+
+    fixQtModuleCMakeConfig "Designer"
+    fixQtModuleCMakeConfig "Help"
+    fixQtModuleCMakeConfig "LinguistTools"
+    fixQtModuleCMakeConfig "UiPlugin"
+    fixQtModuleCMakeConfig "UiTools"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.5/qtwebkit/0003-dlopen-webkit-udev.patch b/pkgs/development/libraries/qt-5/5.5/qtwebkit/0003-dlopen-webkit-udev.patch
index f3b9d407bd72..1c360cd81aa2 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtwebkit/0003-dlopen-webkit-udev.patch
+++ b/pkgs/development/libraries/qt-5/5.5/qtwebkit/0003-dlopen-webkit-udev.patch
@@ -16,13 +16,13 @@ index 60ff317..da8ac69 100644
      {
          m_libUdev.setLoadHints(QLibrary::ResolveAllSymbolsHint);
 -        m_libUdev.setFileNameAndVersion(QStringLiteral("udev"), 1);
-+        m_libUdev.setFileNameAndVersion(QStringLiteral("@udev@/lib/libudev"), 1);
++        m_libUdev.setFileNameAndVersion(QStringLiteral("@libudev@/lib/libudev"), 1);
          m_loaded = m_libUdev.load();
          if (resolveMethods())
              return true;
  
 -        m_libUdev.setFileNameAndVersion(QStringLiteral("udev"), 0);
-+        m_libUdev.setFileNameAndVersion(QStringLiteral("@udev@/lib/libudev"), 0);
++        m_libUdev.setFileNameAndVersion(QStringLiteral("@libudev@/lib/libudev"), 0);
          m_loaded = m_libUdev.load();
          return resolveMethods();
      }
diff --git a/pkgs/development/libraries/qt-5/5.5/qtwebkit/default.nix b/pkgs/development/libraries/qt-5/5.5/qtwebkit/default.nix
index 596c02d39afb..b441a2448d76 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtwebkit/default.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtwebkit/default.nix
@@ -1,6 +1,6 @@
 { qtSubmodule, stdenv, qtdeclarative, qtlocation, qtmultimedia, qtsensors
 , fontconfig, gdk_pixbuf, gtk, libwebp, libxml2, libxslt
-, sqlite, udev
+, sqlite, libudev
 , bison2, flex, gdb, gperf, perl, pkgconfig, python, ruby
 , substituteAll
 , flashplayerFix ? false
@@ -18,16 +18,21 @@ qtSubmodule {
   patches =
     let dlopen-webkit-nsplugin = substituteAll {
           src = ./0001-dlopen-webkit-nsplugin.patch;
-          inherit gtk gdk_pixbuf;
+          gtk = gtk.out;
+          gdk_pixbuf = gdk_pixbuf.out;
         };
         dlopen-webkit-gtk = substituteAll {
           src = ./0002-dlopen-webkit-gtk.patch;
-          inherit gtk;
+          gtk = gtk.out;
         };
         dlopen-webkit-udev = substituteAll {
           src = ./0003-dlopen-webkit-udev.patch;
-          inherit udev;
+          libudev = libudev.out;
         };
     in optionals flashplayerFix [ dlopen-webkit-nsplugin dlopen-webkit-gtk ]
     ++ [ dlopen-webkit-udev ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "WebKit"
+    fixQtModuleCMakeConfig "WebKitWidgets"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.5/qtwebsockets.nix b/pkgs/development/libraries/qt-5/5.5/qtwebsockets.nix
index fbdfbbcf0dbe..c0d0f9e7d714 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtwebsockets.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtwebsockets.nix
@@ -3,4 +3,7 @@
 qtSubmodule {
   name = "qtwebsockets";
   qtInputs = [ qtbase qtdeclarative ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "WebSockets"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.5/qtx11extras.nix b/pkgs/development/libraries/qt-5/5.5/qtx11extras.nix
index a765161e2d7e..db92f1353627 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtx11extras.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtx11extras.nix
@@ -3,4 +3,7 @@
 qtSubmodule {
   name = "qtx11extras";
   qtInputs = [ qtbase ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "X11Extras"
+  '';
 }
diff --git a/pkgs/development/libraries/qt-5/5.5/qtxmlpatterns.nix b/pkgs/development/libraries/qt-5/5.5/qtxmlpatterns.nix
index 9a8ddbba2bd2..3b22132e4c38 100644
--- a/pkgs/development/libraries/qt-5/5.5/qtxmlpatterns.nix
+++ b/pkgs/development/libraries/qt-5/5.5/qtxmlpatterns.nix
@@ -3,4 +3,7 @@
 qtSubmodule {
   name = "qtxmlpatterns";
   qtInputs = [ qtbase ];
+  postFixup = ''
+    fixQtModuleCMakeConfig "XmlPatterns"
+  '';
 }
diff --git a/pkgs/development/libraries/rdkafka/default.nix b/pkgs/development/libraries/rdkafka/default.nix
index 947b06021cd2..32fff70ebfba 100644
--- a/pkgs/development/libraries/rdkafka/default.nix
+++ b/pkgs/development/libraries/rdkafka/default.nix
@@ -12,6 +12,8 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ zlib perl ];
 
+  NIX_CFLAGS_COMPILE = "-Wno-error=strict-overflow";
+
   postPatch = ''
     patchShebangs .
   '';
diff --git a/pkgs/development/libraries/readline/6.3.nix b/pkgs/development/libraries/readline/6.3.nix
index f770fabb35d3..11d4271b168b 100644
--- a/pkgs/development/libraries/readline/6.3.nix
+++ b/pkgs/development/libraries/readline/6.3.nix
@@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "0hzxr9jxqqx5sxsv9vmlxdnvlr9vi4ih1avjb869hbs6p5qn1fjn";
   };
 
+  outputs = [ "dev" "out" "doc" ];
+
   propagatedBuildInputs = [ncurses];
 
   patchFlags = "-p0";
diff --git a/pkgs/development/libraries/schroedinger/default.nix b/pkgs/development/libraries/schroedinger/default.nix
index 33f5ba867d6a..2df7d0518942 100644
--- a/pkgs/development/libraries/schroedinger/default.nix
+++ b/pkgs/development/libraries/schroedinger/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, orc, pkgconfig}:
+{ stdenv, fetchurl, orc, pkgconfig }:
 
 stdenv.mkDerivation {
   name = "schroedinger-1.0.11";
@@ -11,16 +11,12 @@ stdenv.mkDerivation {
     sha256 = "04prr667l4sn4zx256v1z36a0nnkxfdqyln48rbwlamr6l3jlmqy";
   };
 
-  buildInputs = [orc pkgconfig];
+  outputs = [ "dev" "out" "docdev" ];
 
-  # The test suite is known not to build against Orc >0.4.16 in Schroedinger 1.0.11.
-  # A fix is in upstream, so test when pulling 1.0.12 if this is still needed. See:
-  # http://www.mail-archive.com/schrodinger-devel@lists.sourceforge.net/msg00415.html
-  preBuild = ''
-    substituteInPlace Makefile \
-      --replace "SUBDIRS = schroedinger doc tools testsuite" "SUBDIRS = schroedinger doc tools" \
-      --replace "DIST_SUBDIRS = schroedinger doc tools testsuite" "DIST_SUBDIRS = schroedinger doc tools"
-  '';
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ orc ];
+
+  doCheck = true;
 
   meta = with stdenv.lib; {
     homepage = "http://diracvideo.org/";
diff --git a/pkgs/development/libraries/science/robotics/ispike/default.nix b/pkgs/development/libraries/science/robotics/ispike/default.nix
new file mode 100644
index 000000000000..5f2263d821d0
--- /dev/null
+++ b/pkgs/development/libraries/science/robotics/ispike/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, cmake, boost
+}:
+
+stdenv.mkDerivation rec {
+  name = "ispike-${version}";
+  version = "2.1.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ispike/${name}.tar.gz";
+    sha256 = "0khrxp43bi5kisr8j4lp9fl4r5marzf7b4inys62ac108sfb28lp";
+  };
+
+  buildInputs = [ cmake boost ];
+
+  meta = {
+    description = "Spiking neural interface between iCub and a spiking neural simulator";
+    homepage = https://sourceforge.net/projects/ispike/;
+    license = stdenv.lib.licenses.lgpl3;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.nico202 ];
+  };
+
+  
+}
diff --git a/pkgs/development/libraries/scmccid/default.nix b/pkgs/development/libraries/scmccid/default.nix
index 7dcde2a09a8c..f88bd64f597b 100644
--- a/pkgs/development/libraries/scmccid/default.nix
+++ b/pkgs/development/libraries/scmccid/default.nix
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
   buildInputs = [ patchelf ];
 
   installPhase = ''
-    RPATH=${libusb}/lib:${stdenv.cc.libc}/lib
+    RPATH=${libusb.out}/lib:${stdenv.cc.libc.out}/lib
 
     for a in proprietary/*/Contents/Linux/*.so*; do
         if ! test -L $a; then
diff --git a/pkgs/development/libraries/slang/default.nix b/pkgs/development/libraries/slang/default.nix
index bf1f38fbb83d..e83718673aae 100644
--- a/pkgs/development/libraries/slang/default.nix
+++ b/pkgs/development/libraries/slang/default.nix
@@ -7,20 +7,29 @@ stdenv.mkDerivation rec {
     sha256 = "0aqd2cjabj6nhd4r3dc4vhqif2bf3dmqnrn2gj0xm4gqyfd177jy";
   };
 
+  outputs = [ "dev" "out" "doc" ];
+
   # Fix some wrong hardcoded paths
   preConfigure = ''
-    sed -i -e "s|/usr/lib/terminfo|${ncurses}/lib/terminfo|" configure
-    sed -i -e "s|/usr/lib/terminfo|${ncurses}/lib/terminfo|" src/sltermin.c
+    sed -i -e "s|/usr/lib/terminfo|${ncurses.out}/lib/terminfo|" configure
+    sed -i -e "s|/usr/lib/terminfo|${ncurses.out}/lib/terminfo|" src/sltermin.c
     sed -i -e "s|/bin/ln|ln|" src/Makefile.in
+    sed -i -e "s|-ltermcap|-lncurses|" ./configure
   '';
   configureFlags = "--with-png=${libpng} --with-z=${zlib} --with-pcre=${pcre} --with-readline=${readline}";
-  buildInputs = [ncurses pcre libpng zlib readline];
+  buildInputs = [ pcre libpng zlib readline ];
+  propagatedBuildInputs = [ ncurses ];
+
+  postInstall = ''
+    find "$out"/lib/ -name '*.so' -exec chmod +x "{}" \;
+    sed '/^Libs:/s/$/ -lncurses/' -i "$dev"/lib/pkgconfig/slang.pc
+  '';
 
-  meta = {
+  meta = with stdenv.lib; {
     description = "A multi-platform programmer's library designed to allow a developer to create robust software";
     homepage = http://www.jedsoft.org/slang/;
-    license = stdenv.lib.licenses.gpl2Plus;
-    platforms = stdenv.lib.platforms.unix;
-    maintainers = with stdenv.lib.maintainers; [ fuuzetsu ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.fuuzetsu ];
   };
 }
diff --git a/pkgs/development/libraries/smpeg/default.nix b/pkgs/development/libraries/smpeg/default.nix
index c2473ae2c5db..2f300abebbf1 100644
--- a/pkgs/development/libraries/smpeg/default.nix
+++ b/pkgs/development/libraries/smpeg/default.nix
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
 
     wrapProgram $out/bin/smpeg-config \
       --prefix PATH ":" "${pkgconfig}/bin" \
-      --prefix PKG_CONFIG_PATH ":" "${SDL}/lib/pkgconfig"
+      --prefix PKG_CONFIG_PATH ":" "${SDL.dev}/lib/pkgconfig"
   '';
 
   meta = {
diff --git a/pkgs/development/libraries/socket_wrapper/default.nix b/pkgs/development/libraries/socket_wrapper/default.nix
index 0c6f40c8b143..bff4f393d1db 100644
--- a/pkgs/development/libraries/socket_wrapper/default.nix
+++ b/pkgs/development/libraries/socket_wrapper/default.nix
@@ -9,6 +9,7 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [ cmake pkgconfig ];
+  buildInputs = [ (stdenv.cc.libc.out or null) ];
 
   meta = with stdenv.lib; {
     description = "a library passing all socket communications through unix sockets";
diff --git a/pkgs/development/libraries/speex/default.nix b/pkgs/development/libraries/speex/default.nix
index 9a1c00e63b9d..8e3cf899e40b 100644
--- a/pkgs/development/libraries/speex/default.nix
+++ b/pkgs/development/libraries/speex/default.nix
@@ -2,7 +2,7 @@
 
 stdenv.mkDerivation rec {
   name = "speex-1.2rc2";
-  
+
   src = fetchurl {
     url = "http://downloads.us.xiph.org/releases/speex/${name}.tar.gz";
     sha256 = "14g8ph39inkrif749lzjm089g7kwk0hymq1a3i9ch5gz8xr7r8na";
@@ -11,7 +11,9 @@ stdenv.mkDerivation rec {
   postPatch = ''
     sed -i '/AC_CONFIG_MACRO_DIR/i PKG_PROG_PKG_CONFIG' configure.ac
   '';
-  
+
+  outputs = [ "dev" "out" "doc" ];
+
   nativeBuildInputs = [ autoreconfHook pkgconfig ];
   buildInputs = [ fftw speexdsp ];
 
diff --git a/pkgs/development/libraries/speexdsp/default.nix b/pkgs/development/libraries/speexdsp/default.nix
index 7112afbea8a2..56b1900837ac 100644
--- a/pkgs/development/libraries/speexdsp/default.nix
+++ b/pkgs/development/libraries/speexdsp/default.nix
@@ -11,6 +11,8 @@ stdenv.mkDerivation rec {
   patches = [ ./build-fix.patch ];
   postPatch = "sed '3i#include <stdint.h>' -i ./include/speex/speexdsp_config_types.h.in";
 
+  outputs = [ "dev" "out" "doc" ];
+
   nativeBuildInputs = [ autoreconfHook pkgconfig ];
   buildInputs = [ fftw ];
 
diff --git a/pkgs/development/libraries/sqlite/default.nix b/pkgs/development/libraries/sqlite/default.nix
index 24be2c2a9c85..feb5e5d30407 100644
--- a/pkgs/development/libraries/sqlite/default.nix
+++ b/pkgs/development/libraries/sqlite/default.nix
@@ -10,6 +10,8 @@ stdenv.mkDerivation {
     sha1 = "c4b4dcd735a4daf5a2e2bb90f374484c8d4dad29";
   };
 
+  outputs = [ "dev" "out" "bin" ];
+
   buildInputs = lib.optionals interactive [ readline ncurses ];
 
   configureFlags = [ "--enable-threadsafe" ];
diff --git a/pkgs/development/libraries/tbb/default.nix b/pkgs/development/libraries/tbb/default.nix
index 58e5d0864d3f..31fc5401e754 100644
--- a/pkgs/development/libraries/tbb/default.nix
+++ b/pkgs/development/libraries/tbb/default.nix
@@ -1,5 +1,8 @@
 { stdenv, fetchurl }:
 
+let
+  SHLIB_EXT = if stdenv.isDarwin then "dylib" else "so";
+in
 stdenv.mkDerivation {
   name = "tbb-4.4-u2";
 
@@ -13,7 +16,7 @@ stdenv.mkDerivation {
 
   installPhase = ''
     mkdir -p $out/{lib,share/doc}
-    cp "build/"*release*"/"*so* $out/lib/
+    cp "build/"*release*"/"*${SHLIB_EXT}* $out/lib/
     mv include $out/
     rm $out/include/index.html
     mv doc/html $out/share/doc/tbb
@@ -33,7 +36,7 @@ stdenv.mkDerivation {
       represents a higher-level, task-based parallelism that abstracts platform
       details and threading mechanisms for scalability and performance.
     '';
-    platforms = stdenv.lib.platforms.linux;
+    platforms = with stdenv.lib.platforms; linux ++ darwin;
     maintainers = with stdenv.lib.maintainers; [ simons thoughtpolice ];
   };
 }
diff --git a/pkgs/development/libraries/tokyo-cabinet/default.nix b/pkgs/development/libraries/tokyo-cabinet/default.nix
index 0b210a589d41..b8969588b3c5 100644
--- a/pkgs/development/libraries/tokyo-cabinet/default.nix
+++ b/pkgs/development/libraries/tokyo-cabinet/default.nix
@@ -12,8 +12,8 @@ stdenv.mkDerivation rec {
 
   postInstall =
     '' sed -i "$out/lib/pkgconfig/tokyocabinet.pc" \
-           -e 's|-lz|-L${zlib}/lib -lz|g;
-               s|-lbz2|-L${bzip2}/lib -lbz2|g'
+           -e 's|-lz|-L${zlib.out}/lib -lz|g;
+               s|-lbz2|-L${bzip2.out}/lib -lbz2|g'
     '';
 
   meta = {
diff --git a/pkgs/development/libraries/uid_wrapper/default.nix b/pkgs/development/libraries/uid_wrapper/default.nix
index 35d7f53173fb..0675ec68b4e8 100644
--- a/pkgs/development/libraries/uid_wrapper/default.nix
+++ b/pkgs/development/libraries/uid_wrapper/default.nix
@@ -9,6 +9,7 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [ cmake pkgconfig ];
+  buildInputs = [ (stdenv.cc.libc.out or null) ];
 
   meta = with stdenv.lib; {
     description = "a wrapper for the user, group and hosts NSS API";
diff --git a/pkgs/development/libraries/vaapi-intel/default.nix b/pkgs/development/libraries/vaapi-intel/default.nix
index 5084fc3c10b1..6942107d146b 100644
--- a/pkgs/development/libraries/vaapi-intel/default.nix
+++ b/pkgs/development/libraries/vaapi-intel/default.nix
@@ -3,11 +3,11 @@
 }:
 
 stdenv.mkDerivation rec {
-  name = "libva-intel-driver-1.6.1";
+  name = "libva-intel-driver-1.6.2";
 
   src = fetchurl {
     url = "http://www.freedesktop.org/software/vaapi/releases/libva-intel-driver/${name}.tar.bz2";
-    sha256 = "1nsnl7gix22jbxqm7d5i3fk9gafwayhnsc3qjhbzxs6bbsffjmin";
+    sha256 = "1zl51mdxfmnn33r4b0y5qxwlkqfw919aqphsq60d50pwrvdmk1xz";
   };
 
   patchPhase = ''
diff --git a/pkgs/development/libraries/webkitgtk/2.4.nix b/pkgs/development/libraries/webkitgtk/2.4.nix
index e8f0a3d4da7e..cc7644f742d5 100644
--- a/pkgs/development/libraries/webkitgtk/2.4.nix
+++ b/pkgs/development/libraries/webkitgtk/2.4.nix
@@ -1,7 +1,7 @@
 { stdenv, fetchurl, perl, python, ruby, bison, gperf, flex
 , pkgconfig, which, gettext, gobjectIntrospection
 , gtk2, gtk3, wayland, libwebp, enchant, sqlite
-, libxml2, libsoup, libsecret, libxslt, harfbuzz
+, libxml2, libsoup, libsecret, libxslt, harfbuzz, xorg
 , gst-plugins-base
 , withGtk2 ? false
 , enableIntrospection ? !stdenv.isDarwin
@@ -71,7 +71,7 @@ stdenv.mkDerivation rec {
   buildInputs = [
     gtk2 libwebp enchant
     libxml2 libxslt
-    gst-plugins-base sqlite
+    gst-plugins-base sqlite xorg.libXt
   ] ++ optionals enableCredentialStorage [
     libsecret
   ] ++ (if stdenv.isDarwin then [
diff --git a/pkgs/development/libraries/webkitgtk/default.nix b/pkgs/development/libraries/webkitgtk/default.nix
index 1abfcbb6c860..cf22eb3aadde 100644
--- a/pkgs/development/libraries/webkitgtk/default.nix
+++ b/pkgs/development/libraries/webkitgtk/default.nix
@@ -2,7 +2,7 @@
 , pkgconfig, gettext, gobjectIntrospection, libnotify
 , gtk2, gtk3, wayland, libwebp, enchant
 , libxml2, libsoup, libsecret, libxslt, harfbuzz, libpthreadstubs
-, enableGeoLocation ? false, geoclue2, sqlite
+, enableGeoLocation ? false, geoclue2, sqlite, xorg
 , enableCredentialStorage ? !stdenv.isDarwin
 , gst-plugins-base, readline, libedit
 }:
@@ -75,7 +75,7 @@ stdenv.mkDerivation rec {
   buildInputs = [
     gtk2 libwebp enchant libnotify
     libxml2 libxslt harfbuzz libpthreadstubs
-    gst-plugins-base
+    gst-plugins-base xorg.libXt
   ] ++ optionals enableCredentialStorage [
     libsecret
   ] ++ (if stdenv.isDarwin then [
diff --git a/pkgs/development/libraries/wildmidi/default.nix b/pkgs/development/libraries/wildmidi/default.nix
index 8660d15e06a3..4dec0555ae9f 100644
--- a/pkgs/development/libraries/wildmidi/default.nix
+++ b/pkgs/development/libraries/wildmidi/default.nix
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ cmake ];
 
-  buildInputs = [ alsaLib ];
+  buildInputs = [ alsaLib stdenv.cc.libc/*couldn't find libm*/ ];
 
   preConfigure = ''
     substituteInPlace CMakeLists.txt \
diff --git a/pkgs/development/libraries/wxGTK-2.8/default.nix b/pkgs/development/libraries/wxGTK-2.8/default.nix
index 50220c227f7c..e023665f0701 100644
--- a/pkgs/development/libraries/wxGTK-2.8/default.nix
+++ b/pkgs/development/libraries/wxGTK-2.8/default.nix
@@ -33,10 +33,10 @@ stdenv.mkDerivation rec {
 
   # These variables are used by configure to find some dependencies.
   SEARCH_INCLUDE =
-    "${libXinerama}/include ${libSM}/include ${libXxf86vm}/include";
+    "${libXinerama.dev}/include ${libSM.dev}/include ${libXxf86vm.dev}/include";
   SEARCH_LIB =
-    "${libXinerama}/lib ${libSM}/lib ${libXxf86vm}/lib "
-    + optionalString withMesa "${mesa}/lib ";
+    "${libXinerama.out}/lib ${libSM.out}/lib ${libXxf86vm.out}/lib "
+    + optionalString withMesa "${mesa.out}/lib ";
 
   # Work around a bug in configure.
   NIX_CFLAGS_COMPILE = [ "-DHAVE_X11_XLIB_H=1" "-lX11" "-lcairo" ];
diff --git a/pkgs/development/libraries/x264/default.nix b/pkgs/development/libraries/x264/default.nix
index 3c2423434939..754b76de0617 100644
--- a/pkgs/development/libraries/x264/default.nix
+++ b/pkgs/development/libraries/x264/default.nix
@@ -13,6 +13,8 @@ stdenv.mkDerivation rec {
     sed -i s,/bin/bash,${stdenv.shell}, configure version.sh
   '';
 
+  outputs = [ "out" "lib" ]; # leaving 52 kB of headers
+
   configureFlags = [ "--enable-shared" ]
     ++ stdenv.lib.optional (!stdenv.isi686) "--enable-pic"
     ++ stdenv.lib.optional (enable10bit) "--bit-depth=10";
diff --git a/pkgs/development/libraries/x265/default.nix b/pkgs/development/libraries/x265/default.nix
index 736c350bc068..c41dc12bd2f1 100644
--- a/pkgs/development/libraries/x265/default.nix
+++ b/pkgs/development/libraries/x265/default.nix
@@ -49,6 +49,8 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ cmake yasm ];
 
+  NIX_LDFLAGS = "-L${stdenv.cc.libc.out}/lib"; #outputs TODO: this is strange
+
   meta = with stdenv.lib; {
     description = "Library for encoding h.265/HEVC video streams";
     homepage    = http://x265.org;
diff --git a/pkgs/development/libraries/xvidcore/default.nix b/pkgs/development/libraries/xvidcore/default.nix
index 57c66f310fbe..057be97ce96b 100644
--- a/pkgs/development/libraries/xvidcore/default.nix
+++ b/pkgs/development/libraries/xvidcore/default.nix
@@ -3,11 +3,11 @@
 with stdenv.lib;
 stdenv.mkDerivation rec {
   name = "xvidcore-${version}";
-  version = "1.3.3";
+  version = "1.3.4";
   
   src = fetchurl {
     url = "http://downloads.xvid.org/downloads/${name}.tar.bz2";
-    sha256 = "0m5g75qvapr7xpywg6a83v5x19kw1nm9l2q48lg7jvvpba0bmqdh";
+    sha256 = "1xwbmp9wqshc0ckm970zdpi0yvgqxlqg0s8bkz98mnr8p2067bsz";
   };
 
   preConfigure = ''
diff --git a/pkgs/development/libraries/zlib/default.nix b/pkgs/development/libraries/zlib/default.nix
index 7a6f480215c7..59713bb8d205 100644
--- a/pkgs/development/libraries/zlib/default.nix
+++ b/pkgs/development/libraries/zlib/default.nix
@@ -2,7 +2,7 @@
 
 let version = "1.2.8"; in
 
-stdenv.mkDerivation (rec {
+stdenv.mkDerivation rec {
   name = "zlib-${version}";
 
   src = fetchurl {
@@ -20,15 +20,31 @@ stdenv.mkDerivation (rec {
       --replace 'ARFLAGS="-o"' 'ARFLAGS="-r"'
   '';
 
-  configureFlags = if static then "" else "--shared";
+  outputs = [ "dev" "out" "static" ];
+  setOutputFlags = false;
+  outputDoc = "dev"; # single tiny man3 page
+
 
   preConfigure = ''
     if test -n "$crossConfig"; then
       export CC=$crossConfig-gcc
-      configureFlags=${if static then "" else "--shared"}
     fi
   '';
 
+  configureFlags = stdenv.lib.optional (!static) "--shared";
+
+  postInstall = ''
+    moveToOutput lib/libz.a "$static"
+  ''
+    # jww (2015-01-06): Sometimes this library install as a .so, even on
+    # Darwin; others time it installs as a .dylib.  I haven't yet figured out
+    # what causes this difference.
+  + stdenv.lib.optionalString stdenv.isDarwin ''
+    for file in $out/lib/*.so* $out/lib/*.dylib* ; do
+      install_name_tool -id "$file" $file
+    done
+  '';
+
   # As zlib takes part in the stdenv building, we don't want references
   # to the bootstrap-tools libgcc (as uses to happen on arm/mips)
   NIX_CFLAGS_COMPILE = stdenv.lib.optionalString (!stdenv.isDarwin) "-static-libgcc "
@@ -58,13 +74,5 @@ stdenv.mkDerivation (rec {
     license = licenses.zlib;
     platforms = platforms.all;
   };
-} // (if stdenv.isDarwin then {
-  postInstall = ''
-    # jww (2015-01-06): Sometimes this library install as a .so, even on
-    # Darwin; others time it installs as a .dylib.  I haven't yet figured out
-    # what causes this difference.
-    for file in $out/lib/*.so* $out/lib/*.dylib* ; do
-      install_name_tool -id "$file" $file
-    done
-  '';
-} else {}))
+}
+