summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrederik Rietdijk <fridh@fridh.nl>2019-11-24 10:13:31 +0100
committerFrederik Rietdijk <fridh@fridh.nl>2019-11-24 10:13:31 +0100
commit1d18c5a0fe6d55fa1663e945cd47bc9e8e764f3f (patch)
tree313bc0caa017c3e41a961bf63c7b70aac8bc6334
parent525c54c7ef4ac6bc86e1a9f84cff72af43884d2a (diff)
parentab0a828662c4c6a8535b630081a67c20286099ab (diff)
downloadnixpkgs-1d18c5a0fe6d55fa1663e945cd47bc9e8e764f3f.tar
nixpkgs-1d18c5a0fe6d55fa1663e945cd47bc9e8e764f3f.tar.gz
nixpkgs-1d18c5a0fe6d55fa1663e945cd47bc9e8e764f3f.tar.bz2
nixpkgs-1d18c5a0fe6d55fa1663e945cd47bc9e8e764f3f.tar.lz
nixpkgs-1d18c5a0fe6d55fa1663e945cd47bc9e8e764f3f.tar.xz
nixpkgs-1d18c5a0fe6d55fa1663e945cd47bc9e8e764f3f.tar.zst
nixpkgs-1d18c5a0fe6d55fa1663e945cd47bc9e8e764f3f.zip
Merge staging-next into staging
-rw-r--r--.github/CODEOWNERS5
-rw-r--r--maintainers/maintainer-list.nix21
-rw-r--r--nixos/doc/manual/configuration/profiles/graphical.xml4
-rwxr-xr-xnixos/doc/manual/development/releases.xml21
-rw-r--r--nixos/doc/manual/installation/installing.xml14
-rw-r--r--nixos/doc/manual/release-notes/rl-2003.xml13
-rw-r--r--nixos/lib/test-driver/test-driver.py26
-rwxr-xr-xnixos/maintainers/scripts/ec2/create-amis.sh4
-rw-r--r--nixos/modules/config/qt5.nix2
-rw-r--r--nixos/modules/installer/cd-dvd/installation-cd-graphical-kde.nix1
-rw-r--r--nixos/modules/profiles/graphical.nix1
-rw-r--r--nixos/modules/programs/adb.nix3
-rw-r--r--nixos/modules/services/misc/beanstalkd.nix3
-rw-r--r--nixos/modules/services/web-apps/nextcloud.nix1
-rw-r--r--nixos/modules/services/web-servers/phpfpm/default.nix1
-rw-r--r--nixos/modules/services/x11/desktop-managers/gnome3.nix2
-rw-r--r--nixos/modules/services/x11/desktop-managers/plasma5.nix15
-rw-r--r--nixos/modules/services/x11/display-managers/gdm.nix40
-rwxr-xr-xnixos/modules/services/x11/display-managers/set-session.py86
-rw-r--r--nixos/modules/system/boot/networkd.nix2
-rw-r--r--nixos/tests/ceph-multi-node.nix162
-rw-r--r--nixos/tests/ceph-single-node.nix156
-rw-r--r--nixos/tests/clickhouse.nix20
-rw-r--r--nixos/tests/deluge.nix26
-rw-r--r--nixos/tests/dovecot.nix16
-rw-r--r--nixos/tests/fancontrol.nix9
-rw-r--r--nixos/tests/firewall.nix30
-rw-r--r--nixos/tests/fish.nix11
-rw-r--r--nixos/tests/fluentd.nix17
-rw-r--r--nixos/tests/gitlab.nix48
-rw-r--r--nixos/tests/glusterfs.nix32
-rw-r--r--nixos/tests/handbrake.nix12
-rw-r--r--nixos/tests/hibernate.nix23
-rw-r--r--nixos/tests/hound.nix19
-rw-r--r--nixos/tests/icingaweb2.nix8
-rw-r--r--nixos/tests/incron.nix32
-rw-r--r--nixos/tests/jackett.nix9
-rw-r--r--nixos/tests/kerberos/heimdal.nix39
-rw-r--r--nixos/tests/kerberos/mit.nix28
-rw-r--r--nixos/tests/minidlna.nix14
-rw-r--r--nixos/tests/miniflux.nix24
-rw-r--r--nixos/tests/mongodb.nix10
-rw-r--r--nixos/tests/mosquitto.nix70
-rw-r--r--nixos/tests/mpd.nix45
-rw-r--r--nixos/tests/neo4j.nix10
-rw-r--r--nixos/tests/roundcube.nix11
-rw-r--r--nixos/tests/rxe.nix32
-rw-r--r--nixos/tests/systemd-networkd-wireguard.nix14
-rw-r--r--nixos/tests/yggdrasil.nix40
-rw-r--r--pkgs/applications/audio/gnome-podcasts/default.nix85
-rw-r--r--pkgs/applications/audio/strawberry/default.nix4
-rw-r--r--pkgs/applications/backup/deja-dup/default.nix90
-rw-r--r--pkgs/applications/backup/deja-dup/hardcode-gsettings.patch30
-rw-r--r--pkgs/applications/blockchains/parity/beta.nix6
-rw-r--r--pkgs/applications/blockchains/parity/default.nix6
-rw-r--r--pkgs/applications/display-managers/lightdm/default.nix3
-rw-r--r--pkgs/applications/editors/gobby/default.nix4
-rw-r--r--pkgs/applications/editors/neovim/default.nix4
-rw-r--r--pkgs/applications/graphics/gimp/default.nix2
-rw-r--r--pkgs/applications/graphics/gimp/plugins/default.nix17
-rw-r--r--pkgs/applications/graphics/glabels/default.nix4
-rw-r--r--pkgs/applications/graphics/ideogram/default.nix12
-rw-r--r--pkgs/applications/graphics/seg3d/cstdio.patch81
-rw-r--r--pkgs/applications/graphics/seg3d/default.nix54
-rw-r--r--pkgs/applications/kde/kcachegrind.nix5
-rw-r--r--pkgs/applications/misc/blender/default.nix11
-rw-r--r--pkgs/applications/misc/elogind/default.nix4
-rw-r--r--pkgs/applications/misc/et/default.nix6
-rw-r--r--pkgs/applications/misc/font-manager/default.nix4
-rw-r--r--pkgs/applications/misc/formatter/default.nix4
-rw-r--r--pkgs/applications/misc/glom/default.nix3
-rw-r--r--pkgs/applications/misc/gpxsee/default.nix4
-rw-r--r--pkgs/applications/misc/houdini/runtime.nix3
-rw-r--r--pkgs/applications/misc/kdeconnect/default.nix3
-rw-r--r--pkgs/applications/misc/orca/default.nix77
-rw-r--r--pkgs/applications/misc/tasksh/default.nix2
-rw-r--r--pkgs/applications/misc/xpdf/default.nix57
-rw-r--r--pkgs/applications/networking/browsers/ephemeral/default.nix4
-rw-r--r--pkgs/applications/networking/cluster/sonobuoy/default.nix12
-rw-r--r--pkgs/applications/networking/instant-messengers/riot/riot-desktop.nix4
-rwxr-xr-xpkgs/applications/networking/instant-messengers/riot/update-riot-desktop.sh2
-rw-r--r--pkgs/applications/networking/instant-messengers/zoom-us/default.nix4
-rw-r--r--pkgs/applications/networking/sync/rclone/default.nix4
-rw-r--r--pkgs/applications/networking/weather/meteo/default.nix10
-rw-r--r--pkgs/applications/office/aesop/default.nix4
-rw-r--r--pkgs/applications/office/libreoffice/default.nix5
-rw-r--r--pkgs/applications/office/libreoffice/still.nix5
-rw-r--r--pkgs/applications/office/softmaker/freeoffice.nix4
-rw-r--r--pkgs/applications/office/softmaker/generic.nix4
-rw-r--r--pkgs/applications/science/biology/freebayes/default.nix6
-rw-r--r--pkgs/applications/version-management/git-and-tools/git/default.nix4
-rw-r--r--pkgs/applications/version-management/gitlab/default.nix4
-rwxr-xr-xpkgs/applications/version-management/gitlab/update.py2
-rw-r--r--pkgs/applications/version-management/pijul/default.nix15
-rw-r--r--pkgs/applications/window-managers/cage/default.nix4
-rw-r--r--pkgs/build-support/appimage/default.nix2
-rw-r--r--pkgs/build-support/emacs/setup-hook.sh6
-rw-r--r--pkgs/data/documentation/gnome-user-docs/default.nix34
-rw-r--r--pkgs/data/fonts/babelstone-han/default.nix2
-rw-r--r--pkgs/data/fonts/fantasque-sans-mono/default.nix4
-rw-r--r--pkgs/desktops/deepin/deepin-editor/default.nix64
-rw-r--r--pkgs/desktops/deepin/default.nix1
-rw-r--r--pkgs/desktops/enlightenment/terminology.nix4
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-documents/default.nix98
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-music/default.nix90
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-user-docs/default.nix26
-rw-r--r--pkgs/desktops/gnome-3/default.nix8
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-calculator/default.nix4
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-photos/default.nix4
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-screenshot-tool/default.nix4
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-terminal/default.nix4
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix4
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/applications/default.nix6
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix4
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/default.nix8
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/hardcode-settings-daemon-gsettings.patch81
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/network/default.nix10
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/network/fix-paths.patch35
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/network/nma.patch43
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/default.nix14
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/hardcode-gsettings.patch20
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/power/default.nix4
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix14
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/sound/default.nix6
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-onboarding/default.nix18
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-shortcut-overlay/default.nix4
-rw-r--r--pkgs/desktops/pantheon/services/pantheon-agent-geoclue2/default.nix4
-rw-r--r--pkgs/desktops/pantheon/services/pantheon-agent-polkit/default.nix6
-rw-r--r--pkgs/desktops/plasma-5/default.nix2
-rw-r--r--pkgs/development/compilers/carp/default.nix11
-rw-r--r--pkgs/development/compilers/gerbil/unstable.nix13
-rw-r--r--pkgs/development/compilers/ghc/head.nix27
-rw-r--r--pkgs/development/compilers/openjdk/8.nix5
-rw-r--r--pkgs/development/compilers/unison/default.nix6
-rw-r--r--pkgs/development/interpreters/eff/default.nix2
-rw-r--r--pkgs/development/interpreters/lua-5/CVE-2019-6706.patch22
-rw-r--r--pkgs/development/interpreters/lua-5/default.nix7
-rw-r--r--pkgs/development/interpreters/lua-5/wrapper.nix13
-rw-r--r--pkgs/development/interpreters/python/cpython/default.nix3
-rw-r--r--pkgs/development/interpreters/python/default.nix15
-rw-r--r--pkgs/development/libraries/gjs/default.nix20
-rw-r--r--pkgs/development/libraries/glib/setup-hook.sh4
-rw-r--r--pkgs/development/libraries/glui/default.nix40
-rw-r--r--pkgs/development/libraries/hyphen/default.nix27
-rw-r--r--pkgs/development/libraries/kde-frameworks/default.nix2
-rw-r--r--pkgs/development/libraries/kde-frameworks/extra-cmake-modules/setup-hook.sh4
-rw-r--r--pkgs/development/libraries/ldns/default.nix37
-rw-r--r--pkgs/development/libraries/libheif/default.nix6
-rw-r--r--pkgs/development/libraries/libwmf/default.nix2
-rw-r--r--pkgs/development/libraries/phonon/backends/gstreamer.nix41
-rw-r--r--pkgs/development/libraries/phonon/backends/vlc.nix45
-rw-r--r--pkgs/development/libraries/phonon/default.nix57
-rw-r--r--pkgs/development/libraries/polkit/default.nix3
-rw-r--r--pkgs/development/libraries/qgnomeplatform/default.nix11
-rw-r--r--pkgs/development/libraries/rocksdb/default.nix28
-rw-r--r--pkgs/development/libraries/science/math/scalapack/default.nix15
-rw-r--r--pkgs/development/libraries/science/math/scalapack/openmpi4.patch143
-rw-r--r--pkgs/development/libraries/snappy/default.nix2
-rw-r--r--pkgs/development/libraries/unixODBCDrivers/default.nix35
-rw-r--r--pkgs/development/libraries/wlroots/default.nix11
-rw-r--r--pkgs/development/libraries/zeitgeist/default.nix69
-rw-r--r--pkgs/development/lisp-modules/clwrapper/default.nix1
-rw-r--r--pkgs/development/lisp-modules/clwrapper/setup-hook.sh6
-rw-r--r--pkgs/development/lisp-modules/define-package.nix8
-rw-r--r--pkgs/development/lua-modules/overrides.nix2
-rw-r--r--pkgs/development/misc/yelp-tools/default.nix (renamed from pkgs/desktops/gnome-3/core/yelp-tools/default.nix)4
-rw-r--r--pkgs/development/ocaml-modules/lwt/4.x.nix15
-rw-r--r--pkgs/development/ocaml-modules/sodium/default.nix27
-rw-r--r--pkgs/development/python-modules/ansible/default.nix8
-rw-r--r--pkgs/development/python-modules/anytree/default.nix10
-rw-r--r--pkgs/development/python-modules/azure-cosmos/default.nix5
-rw-r--r--pkgs/development/python-modules/azure-functions-devops-build/default.nix30
-rw-r--r--pkgs/development/python-modules/azure-keyvault/default.nix6
-rw-r--r--pkgs/development/python-modules/azure-mgmt-apimanagement/default.nix31
-rw-r--r--pkgs/development/python-modules/azure-mgmt-appconfiguration/default.nix31
-rw-r--r--pkgs/development/python-modules/azure-mgmt-applicationinsights/default.nix6
-rw-r--r--pkgs/development/python-modules/azure-mgmt-batchai/default.nix5
-rw-r--r--pkgs/development/python-modules/azure-mgmt-billing/default.nix28
-rw-r--r--pkgs/development/python-modules/azure-mgmt-botservice/default.nix31
-rw-r--r--pkgs/development/python-modules/azure-mgmt-consumption/default.nix7
-rw-r--r--pkgs/development/python-modules/azure-mgmt-containerregistry/default.nix31
-rw-r--r--pkgs/development/python-modules/azure-mgmt-datalake-analytics/default.nix8
-rw-r--r--pkgs/development/python-modules/azure-mgmt-datalake-store/default.nix10
-rw-r--r--pkgs/development/python-modules/azure-mgmt-datamigration/default.nix10
-rw-r--r--pkgs/development/python-modules/azure-mgmt-deploymentmanager/default.nix31
-rw-r--r--pkgs/development/python-modules/azure-mgmt-devtestlabs/default.nix10
-rw-r--r--pkgs/development/python-modules/azure-mgmt-dns/default.nix11
-rw-r--r--pkgs/development/python-modules/azure-mgmt-hdinsight/default.nix31
-rw-r--r--pkgs/development/python-modules/azure-mgmt-imagebuilder/default.nix31
-rw-r--r--pkgs/development/python-modules/azure-mgmt-iothubprovisioningservices/default.nix9
-rw-r--r--pkgs/development/python-modules/azure-mgmt-keyvault/default.nix9
-rw-r--r--pkgs/development/python-modules/azure-mgmt-kusto/azure-mgmt-apimanagement/default.nix31
-rw-r--r--pkgs/development/python-modules/azure-mgmt-kusto/default.nix31
-rw-r--r--pkgs/development/python-modules/azure-mgmt-loganalytics/default.nix7
-rw-r--r--pkgs/development/python-modules/azure-mgmt-managedservices/default.nix31
-rw-r--r--pkgs/development/python-modules/azure-mgmt-maps/default.nix7
-rw-r--r--pkgs/development/python-modules/azure-mgmt-monitor/default.nix8
-rw-r--r--pkgs/development/python-modules/azure-mgmt-msi/default.nix7
-rw-r--r--pkgs/development/python-modules/azure-mgmt-netapp/default.nix31
-rw-r--r--pkgs/development/python-modules/azure-mgmt-privatedns/default.nix31
-rw-r--r--pkgs/development/python-modules/azure-mgmt-relay/default.nix7
-rw-r--r--pkgs/development/python-modules/azure-mgmt-security/default.nix31
-rw-r--r--pkgs/development/python-modules/azure-mgmt-servicefabric/default.nix7
-rw-r--r--pkgs/development/python-modules/azure-mgmt-sqlvirtualmachine/default.nix31
-rw-r--r--pkgs/development/python-modules/azure-multiapi-storage/default.nix36
-rw-r--r--pkgs/development/python-modules/babelgladeextractor/default.nix35
-rw-r--r--pkgs/development/python-modules/croniter/default.nix2
-rw-r--r--pkgs/development/python-modules/flask-babelex/default.nix2
-rw-r--r--pkgs/development/python-modules/flask-openid/default.nix2
-rw-r--r--pkgs/development/python-modules/google-auth-httplib2/default.nix6
-rw-r--r--pkgs/development/python-modules/google_cloud_translate/default.nix13
-rw-r--r--pkgs/development/python-modules/javaproperties/default.nix32
-rw-r--r--pkgs/development/python-modules/keyring/2.nix33
-rw-r--r--pkgs/development/python-modules/kmapper/default.nix2
-rw-r--r--pkgs/development/python-modules/mahotas/default.nix2
-rw-r--r--pkgs/development/python-modules/meinheld/default.nix2
-rw-r--r--pkgs/development/python-modules/micawber/default.nix2
-rw-r--r--pkgs/development/python-modules/mnist/default.nix36
-rw-r--r--pkgs/development/python-modules/monty/default.nix4
-rw-r--r--pkgs/development/python-modules/msrest/default.nix4
-rw-r--r--pkgs/development/python-modules/msrestazure/default.nix4
-rw-r--r--pkgs/development/python-modules/nuitka/default.nix2
-rw-r--r--pkgs/development/python-modules/openpyxl/2.nix38
-rw-r--r--pkgs/development/python-modules/pandas/2.nix4
-rw-r--r--pkgs/development/python-modules/portalocker/default.nix3
-rw-r--r--pkgs/development/python-modules/pydocstyle/2.nix33
-rw-r--r--pkgs/development/python-modules/pydocstyle/default.nix20
-rw-r--r--pkgs/development/python-modules/pydrive/default.nix33
-rw-r--r--pkgs/development/python-modules/secure/default.nix30
-rw-r--r--pkgs/development/python-modules/spglib/default.nix13
-rw-r--r--pkgs/development/python-modules/sshtunnel/default.nix31
-rw-r--r--pkgs/development/python-modules/tables/3.5.nix4
-rw-r--r--pkgs/development/python-modules/tensorflow-tensorboard/default.nix26
-rw-r--r--pkgs/development/python-modules/twine/default.nix2
-rw-r--r--pkgs/development/python-modules/vsts-cd-manager/default.nix28
-rw-r--r--pkgs/development/tools/build-managers/bloop/default.nix8
-rw-r--r--pkgs/development/tools/clj-kondo/default.nix4
-rw-r--r--pkgs/development/tools/continuous-integration/gitlab-runner/default.nix8
-rw-r--r--pkgs/development/tools/continuous-integration/jenkins/default.nix4
-rw-r--r--pkgs/development/tools/cue/default.nix10
-rw-r--r--pkgs/development/tools/documentation/mkdocs/default.nix15
-rw-r--r--pkgs/development/tools/gamecube-tools/default.nix15
-rw-r--r--pkgs/development/tools/git-series/default.nix7
-rw-r--r--pkgs/development/tools/gotools/default.nix6
-rw-r--r--pkgs/development/tools/misc/texlab/default.nix6
-rw-r--r--pkgs/development/tools/misc/travis/Gemfile3
-rw-r--r--pkgs/development/tools/misc/travis/Gemfile.lock14
-rw-r--r--pkgs/development/tools/misc/travis/gemset.nix51
-rw-r--r--pkgs/development/tools/rust/cargo-make/Cargo.lock10
-rw-r--r--pkgs/development/tools/rust/cargo-make/default.nix6
-rw-r--r--pkgs/development/tools/rust/cargo-watch/default.nix6
-rw-r--r--pkgs/development/tools/yarn2nix-moretea/fetch-source.nix4
-rw-r--r--pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix7
-rw-r--r--pkgs/development/web/nodejs/v13.nix4
-rw-r--r--pkgs/games/boohu/default.nix4
-rw-r--r--pkgs/games/boohu/deps.nix8
-rw-r--r--pkgs/games/construo/default.nix14
-rw-r--r--pkgs/games/gzdoom/default.nix4
-rw-r--r--pkgs/games/steam/chrootenv.nix4
-rw-r--r--pkgs/misc/cups/drivers/canon/default.nix88
-rw-r--r--pkgs/misc/gnash/default.nix9
-rw-r--r--pkgs/misc/themes/adwaita-qt/default.nix4
-rw-r--r--pkgs/os-specific/linux/kernel/linux-4.14.nix4
-rw-r--r--pkgs/os-specific/linux/kernel/linux-4.19.nix4
-rw-r--r--pkgs/os-specific/linux/kernel/linux-5.3.nix4
-rw-r--r--pkgs/servers/consul/default.nix4
-rw-r--r--pkgs/servers/jackett/default.nix4
-rw-r--r--pkgs/servers/monitoring/loki/default.nix8
-rw-r--r--pkgs/servers/rainloop/default.nix6
-rw-r--r--pkgs/servers/roundcube/default.nix4
-rw-r--r--pkgs/servers/routinator/default.nix6
-rw-r--r--pkgs/servers/web-apps/codimd/default.nix14
-rw-r--r--pkgs/shells/zsh/oh-my-zsh/default.nix6
-rw-r--r--pkgs/tools/admin/azure-cli/default.nix248
-rw-r--r--pkgs/tools/admin/azure-cli/python-packages.nix247
-rw-r--r--pkgs/tools/admin/eksctl/default.nix6
-rw-r--r--pkgs/tools/audio/beets/default.nix18
-rw-r--r--pkgs/tools/backup/duplicity/default.nix2
-rw-r--r--pkgs/tools/compression/lz4/default.nix17
-rw-r--r--pkgs/tools/compression/zstd/default.nix30
-rw-r--r--pkgs/tools/compression/zstd/mcfgthreads-no-pthread.patch13
-rw-r--r--pkgs/tools/filesystems/duff/default.nix2
-rw-r--r--pkgs/tools/filesystems/nixpart/0.4/default.nix1
-rw-r--r--pkgs/tools/misc/vector/default.nix25
-rw-r--r--pkgs/tools/misc/youtube-dl/default.nix4
-rw-r--r--pkgs/tools/security/gnome-keysign/default.nix15
-rw-r--r--pkgs/tools/security/sequoia/default.nix8
-rw-r--r--pkgs/tools/security/sops/default.nix8
-rw-r--r--pkgs/tools/text/kdiff3/default.nix4
-rw-r--r--pkgs/tools/text/mdbook/default.nix6
-rw-r--r--pkgs/top-level/aliases.nix5
-rw-r--r--pkgs/top-level/all-packages.nix76
-rw-r--r--pkgs/top-level/ocaml-packages.nix2
-rw-r--r--pkgs/top-level/perl-packages.nix14
-rw-r--r--pkgs/top-level/python-packages.nix62
295 files changed, 3870 insertions, 1804 deletions
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 238ba161b58..6eda7473bf6 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -167,3 +167,8 @@
 /nixos/modules/services/monitoring/prometheus/exporters.nix  @WilliButz
 /nixos/modules/services/monitoring/prometheus/exporters.xml  @WilliButz
 /nixos/tests/prometheus-exporters.nix                        @WilliButz
+
+# PHP
+/pkgs/development/interpreters/php  @etu
+/pkgs/top-level/php-packages.nix    @etu
+/pkgs/build-support/build-pecl.nix  @etu
diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix
index bb7bc8bd827..a9bf3ed1539 100644
--- a/maintainers/maintainer-list.nix
+++ b/maintainers/maintainer-list.nix
@@ -1780,6 +1780,12 @@
     githubId = 875324;
     name = "David Johnson";
   };
+  dmrauh = {
+    email = "dmrauh@posteo.de";
+    github = "dmrauh";
+    githubId = 37698547;
+    name = "Dominik Michael Rauh";
+  };
   dmvianna = {
     email = "dmlvianna@gmail.com";
     github = "dmvianna";
@@ -2515,6 +2521,7 @@
   gazally = {
     email = "gazally@runbox.com";
     github = "gazally";
+    githubId = 16470252;
     name = "Gemini Lasswell";
   };
   gebner = {
@@ -3700,6 +3707,18 @@
     githubId = 449813;
     name = "Roman Kuznetsov";
   };
+  kylesferrazza = {
+    name = "Kyle Sferrazza";
+    email = "kyle.sferrazza@gmail.com";
+
+    github = "kylesferrazza";
+    githubId = 6677292;
+
+    keys = [{
+      longkeyid = "rsa4096/81A1540948162372";
+      fingerprint = "5A9A 1C9B 2369 8049 3B48  CF5B 81A1 5409 4816 2372";
+    }];
+  };
   kylewlacy = {
     email = "kylelacy+nix@pm.me";
     github = "kylewlacy";
@@ -6087,7 +6106,7 @@
     name = "Shahrukh Khan";
   };
   shanemikel = {
-    email = "shanemikel1@gmail.com";
+    email = "shanepearlman@pm.me";
     github = "shanemikel";
     githubId = 6720672;
     name = "Shane Pearlman";
diff --git a/nixos/doc/manual/configuration/profiles/graphical.xml b/nixos/doc/manual/configuration/profiles/graphical.xml
index 73e3abc59d0..cc6d0825d24 100644
--- a/nixos/doc/manual/configuration/profiles/graphical.xml
+++ b/nixos/doc/manual/configuration/profiles/graphical.xml
@@ -13,9 +13,7 @@
  <para>
   It sets <xref linkend="opt-services.xserver.enable"/>,
   <xref linkend="opt-services.xserver.displayManager.sddm.enable"/>,
-  <xref linkend="opt-services.xserver.desktopManager.plasma5.enable"/> (
-  <link linkend="opt-services.xserver.desktopManager.plasma5.enableQt4Support">
-  without Qt4 Support</link>), and
+  <xref linkend="opt-services.xserver.desktopManager.plasma5.enable"/>, and
   <xref linkend="opt-services.xserver.libinput.enable"/> to true. It also
   includes glxinfo and firefox in the system packages list.
  </para>
diff --git a/nixos/doc/manual/development/releases.xml b/nixos/doc/manual/development/releases.xml
index 1cdec64f69b..9371af9984d 100755
--- a/nixos/doc/manual/development/releases.xml
+++ b/nixos/doc/manual/development/releases.xml
@@ -45,12 +45,12 @@
     <listitem>
      <para>
       <literal>git tag -a -s -m &quot;Release 17.09-beta&quot; 17.09-beta
-      &amp;&amp; git push --tags</literal>
+      &amp;&amp; git push origin 17.09-beta</literal>
      </para>
     </listitem>
     <listitem>
      <para>
-      From the master branch run <literal>git checkout -B
+      From the master branch run <literal>git checkout -b
       release-17.09</literal>.
      </para>
     </listitem>
@@ -157,7 +157,7 @@
     <listitem>
      <para>
       Release Nix (currently only Eelco Dolstra can do that).
-      <link xlink:href="https://github.com/NixOS/nixpkgs/commit/53710c752a85f00658882531bc90a23a3d1287e4">
+      <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/installer/tools/nix-fallback-paths.nix">
       Make sure fallback is updated. </link>
      </para>
     </listitem>
@@ -169,8 +169,8 @@
     </listitem>
     <listitem>
      <para>
-      Change <literal>stableBranch</literal> to true and wait for channel to
-      update.
+      Change <literal>stableBranch</literal> to <literal>true</literal> in Hydra and wait for
+      the channel to update.
      </para>
     </listitem>
    </itemizedlist>
@@ -193,9 +193,11 @@
     </listitem>
     <listitem>
      <para>
-      Update http://nixos.org/nixos/download.html and
-      http://nixos.org/nixos/manual in
-      https://github.com/NixOS/nixos-org-configurations
+      Update the
+      <link xlink:href="https://github.com/NixOS/nixos-homepage/commit/2a37975d5a617ecdfca94696242b6f32ffcba9f1"><code>NIXOS_SERIES</code></link>
+      in the
+      <link xlink:href="https://github.com/NixOS/nixos-homepage">nixos-homepage</link>
+      repository.
      </para>
     </listitem>
     <listitem>
@@ -212,7 +214,8 @@
     </listitem>
     <listitem>
      <para>
-      Send an email to nix-dev to announce the release with above information.
+      Create a new topic on <link xlink:href="https://discourse.nixos.org/">the
+      Discourse instance</link> to announce the release with the above information.
       Best to check how previous email was formulated to see what needs to be
       included.
      </para>
diff --git a/nixos/doc/manual/installation/installing.xml b/nixos/doc/manual/installation/installing.xml
index 8ff920eb5a8..7991c43e01f 100644
--- a/nixos/doc/manual/installation/installing.xml
+++ b/nixos/doc/manual/installation/installing.xml
@@ -392,11 +392,11 @@
      <filename>hardware-configuration.nix</filename> is included from
      <filename>configuration.nix</filename> and will be overwritten by future
      invocations of <command>nixos-generate-config</command>; thus, you
-     generally should not modify it.) Additionally, you may want to look at 
+     generally should not modify it.) Additionally, you may want to look at
      <link xlink:href="https://github.com/NixOS/nixos-hardware">Hardware
      configuration for known-hardware</link> at this point or after
      installation.
-      
+
     </para>
     <note>
      <para>
@@ -418,11 +418,11 @@
      Do the installation:
 <screen>
 <prompt># </prompt>nixos-install</screen>
-     Cross fingers. If this fails due to a temporary problem (such as a network
-     issue while downloading binaries from the NixOS binary cache), you can
-     just re-run <command>nixos-install</command>. Otherwise, fix your
-     <filename>configuration.nix</filename> and then re-run
-     <command>nixos-install</command>.
+     This will install your system based on the configuration you provided.
+     If anything fails due to a configuration problem or any other issue
+     (such as a network outage while downloading binaries from the NixOS
+     binary cache), you can re-run <command>nixos-install</command> after
+     fixing your <filename>configuration.nix</filename>.
     </para>
     <para>
      As the last step, <command>nixos-install</command> will ask you to set the
diff --git a/nixos/doc/manual/release-notes/rl-2003.xml b/nixos/doc/manual/release-notes/rl-2003.xml
index c0e7a00d757..6916fd225da 100644
--- a/nixos/doc/manual/release-notes/rl-2003.xml
+++ b/nixos/doc/manual/release-notes/rl-2003.xml
@@ -163,6 +163,19 @@
      time during the releases development (if viable).
     </para>
    </listitem>
+   <listitem>
+    <para>
+      The <link linkend="opt-services.phpfpm.pools">phpfpm</link> module now sets
+      <literal>PrivateTmp=true</literal> in its systemd units for better process isolation.
+      If you rely on <literal>/tmp</literal> being shared with other services, explicitly override this by
+      setting <literal>serviceConfig.PrivateTmp</literal> to <literal>false</literal> for each phpfpm unit.
+    </para>
+   </listitem>
+   <listitem>
+    <para>
+     KDE’s old multimedia framework Phonon no longer supports Qt 4. For that reason, Plasma desktop also does not have <option>enableQt4Support</option> option any more.
+    </para>
+   </listitem>
   </itemizedlist>
  </section>
 
diff --git a/nixos/lib/test-driver/test-driver.py b/nixos/lib/test-driver/test-driver.py
index 9d89960876e..0b8e3b67c9b 100644
--- a/nixos/lib/test-driver/test-driver.py
+++ b/nixos/lib/test-driver/test-driver.py
@@ -290,10 +290,15 @@ class Machine:
 
     def wait_for_monitor_prompt(self) -> str:
         assert self.monitor is not None
+        answer = ""
         while True:
-            answer = self.monitor.recv(1024).decode()
+            undecoded_answer = self.monitor.recv(1024)
+            if not undecoded_answer:
+                break
+            answer += undecoded_answer.decode()
             if answer.endswith("(qemu) "):
-                return answer
+                break
+        return answer
 
     def send_monitor_command(self, command: str) -> str:
         message = ("{}\n".format(command)).encode()
@@ -606,12 +611,15 @@ class Machine:
             + os.environ.get("QEMU_OPTS", "")
         )
 
-        environment = {
-            "QEMU_OPTS": qemu_options,
-            "SHARED_DIR": self.shared_dir,
-            "USE_TMPDIR": "1",
-        }
-        environment.update(dict(os.environ))
+        environment = dict(os.environ)
+        environment.update(
+            {
+                "TMPDIR": self.state_dir,
+                "SHARED_DIR": self.shared_dir,
+                "USE_TMPDIR": "1",
+                "QEMU_OPTS": qemu_options,
+            }
+        )
 
         self.process = subprocess.Popen(
             self.script,
@@ -749,7 +757,7 @@ def run_tests() -> None:
     if tests is not None:
         with log.nested("running the VM test script"):
             try:
-                exec(tests)
+                exec(tests, globals())
             except Exception as e:
                 eprint("error: {}".format(str(e)))
                 sys.exit(1)
diff --git a/nixos/maintainers/scripts/ec2/create-amis.sh b/nixos/maintainers/scripts/ec2/create-amis.sh
index f08e500e079..5dc1c5aaed5 100755
--- a/nixos/maintainers/scripts/ec2/create-amis.sh
+++ b/nixos/maintainers/scripts/ec2/create-amis.sh
@@ -211,11 +211,11 @@ upload_image() {
         log "Registering snapshot $snapshot_id as AMI"
 
         local block_device_mappings=(
-            "DeviceName=/dev/sda1,Ebs={SnapshotId=$snapshot_id,VolumeSize=$image_logical_gigabytes,DeleteOnTermination=true,VolumeType=gp2}"
+            "DeviceName=/dev/xvda,Ebs={SnapshotId=$snapshot_id,VolumeSize=$image_logical_gigabytes,DeleteOnTermination=true,VolumeType=gp2}"
         )
 
         local extra_flags=(
-            --root-device-name /dev/sda1
+            --root-device-name /dev/xvda
             --sriov-net-support simple
             --ena-support
             --virtualization-type hvm
diff --git a/nixos/modules/config/qt5.nix b/nixos/modules/config/qt5.nix
index 7de1c0f5d55..d9dec74f155 100644
--- a/nixos/modules/config/qt5.nix
+++ b/nixos/modules/config/qt5.nix
@@ -10,7 +10,7 @@ let
   isQtStyle = cfg.platformTheme == "gtk2" && cfg.style != "adwaita";
 
   packages = if isQGnome then [ pkgs.qgnomeplatform pkgs.adwaita-qt ]
-    else if isQtStyle then [ pkgs.qtstyleplugins ]
+    else if isQtStyle then [ pkgs.libsForQt5.qtstyleplugins ]
     else throw "`qt5.platformTheme` ${cfg.platformTheme} and `qt5.style` ${cfg.style} are not compatible.";
 
 in
diff --git a/nixos/modules/installer/cd-dvd/installation-cd-graphical-kde.nix b/nixos/modules/installer/cd-dvd/installation-cd-graphical-kde.nix
index 6a10a6404e6..e00d3f7535b 100644
--- a/nixos/modules/installer/cd-dvd/installation-cd-graphical-kde.nix
+++ b/nixos/modules/installer/cd-dvd/installation-cd-graphical-kde.nix
@@ -11,7 +11,6 @@ with lib;
   services.xserver = {
     desktopManager.plasma5 = {
       enable = true;
-      enableQt4Support = false;
     };
 
     # Automatically login as nixos.
diff --git a/nixos/modules/profiles/graphical.nix b/nixos/modules/profiles/graphical.nix
index ac3c228b3c6..d80456cede5 100644
--- a/nixos/modules/profiles/graphical.nix
+++ b/nixos/modules/profiles/graphical.nix
@@ -9,7 +9,6 @@
     displayManager.sddm.enable = true;
     desktopManager.plasma5 = {
       enable = true;
-      enableQt4Support = false;
     };
     libinput.enable = true; # for touchpad support on many laptops
   };
diff --git a/nixos/modules/programs/adb.nix b/nixos/modules/programs/adb.nix
index 250d8c252a3..83bcfe886aa 100644
--- a/nixos/modules/programs/adb.nix
+++ b/nixos/modules/programs/adb.nix
@@ -23,7 +23,8 @@ with lib;
   ###### implementation
   config = mkIf config.programs.adb.enable {
     services.udev.packages = [ pkgs.android-udev-rules ];
-    environment.systemPackages = [ pkgs.androidenv.androidPkgs_9_0.platform-tools ];
+    # Give platform-tools lower priority so mke2fs+friends are taken from other packages first
+    environment.systemPackages = [ (lowPrio pkgs.androidenv.androidPkgs_9_0.platform-tools) ];
     users.groups.adbusers = {};
   };
 }
diff --git a/nixos/modules/services/misc/beanstalkd.nix b/nixos/modules/services/misc/beanstalkd.nix
index 06e881406b5..bcd133c9741 100644
--- a/nixos/modules/services/misc/beanstalkd.nix
+++ b/nixos/modules/services/misc/beanstalkd.nix
@@ -44,7 +44,8 @@ in
       serviceConfig = {
         DynamicUser = true;
         Restart = "always";
-        ExecStart = "${pkg}/bin/beanstalkd -l ${cfg.listen.address} -p ${toString cfg.listen.port}";
+        ExecStart = "${pkg}/bin/beanstalkd -l ${cfg.listen.address} -p ${toString cfg.listen.port} -b $STATE_DIRECTORY";
+        StateDirectory = "beanstalkd";
       };
     };
 
diff --git a/nixos/modules/services/web-apps/nextcloud.nix b/nixos/modules/services/web-apps/nextcloud.nix
index b9186a1dc07..b67f0880878 100644
--- a/nixos/modules/services/web-apps/nextcloud.nix
+++ b/nixos/modules/services/web-apps/nextcloud.nix
@@ -390,6 +390,7 @@ in {
         in {
           wantedBy = [ "multi-user.target" ];
           before = [ "phpfpm-nextcloud.service" ];
+          path = [ occ ];
           script = ''
             chmod og+x ${cfg.home}
             ln -sf ${pkgs.nextcloud}/apps ${cfg.home}/
diff --git a/nixos/modules/services/web-servers/phpfpm/default.nix b/nixos/modules/services/web-servers/phpfpm/default.nix
index 095de64dfb1..7698f8c3a26 100644
--- a/nixos/modules/services/web-servers/phpfpm/default.nix
+++ b/nixos/modules/services/web-servers/phpfpm/default.nix
@@ -262,6 +262,7 @@ in {
         in {
           Slice = "phpfpm.slice";
           PrivateDevices = true;
+          PrivateTmp = true;
           ProtectSystem = "full";
           ProtectHome = true;
           # XXX: We need AF_NETLINK to make the sendmail SUID binary from postfix work
diff --git a/nixos/modules/services/x11/desktop-managers/gnome3.nix b/nixos/modules/services/x11/desktop-managers/gnome3.nix
index 0135ac19cbf..6725595e1cf 100644
--- a/nixos/modules/services/x11/desktop-managers/gnome3.nix
+++ b/nixos/modules/services/x11/desktop-managers/gnome3.nix
@@ -309,7 +309,7 @@ in
         gnome-shell
         gnome-shell-extensions
         gnome-themes-extra
-        gnome-user-docs
+        pkgs.gnome-user-docs
         pkgs.orca
         pkgs.glib # for gsettings
         pkgs.gnome-menus
diff --git a/nixos/modules/services/x11/desktop-managers/plasma5.nix b/nixos/modules/services/x11/desktop-managers/plasma5.nix
index b48ca3fad93..da8bdcb78c4 100644
--- a/nixos/modules/services/x11/desktop-managers/plasma5.nix
+++ b/nixos/modules/services/x11/desktop-managers/plasma5.nix
@@ -27,20 +27,13 @@ in
         example = "vlc";
         description = "Phonon audio backend to install.";
       };
-
-      enableQt4Support = mkOption {
-        type = types.bool;
-        default = true;
-        description = ''
-          Enable support for Qt 4-based applications. Particularly, install a
-          default backend for Phonon.
-        '';
-      };
-
     };
 
   };
 
+  imports = [
+    (mkRemovedOptionModule [ "services" "xserver" "desktopManager" "plasma5" "enableQt4Support" ] "Phonon no longer supports Qt 4.")
+  ];
 
   config = mkMerge [
     (mkIf cfg.enable {
@@ -173,9 +166,7 @@ in
 
         # Phonon audio backend
         ++ lib.optional (cfg.phononBackend == "gstreamer") libsForQt5.phonon-backend-gstreamer
-        ++ lib.optional (cfg.phononBackend == "gstreamer" && cfg.enableQt4Support) pkgs.phonon-backend-gstreamer
         ++ lib.optional (cfg.phononBackend == "vlc") libsForQt5.phonon-backend-vlc
-        ++ lib.optional (cfg.phononBackend == "vlc" && cfg.enableQt4Support) pkgs.phonon-backend-vlc
 
         # Optional hardware support features
         ++ lib.optionals config.hardware.bluetooth.enable [ bluedevil bluez-qt ]
diff --git a/nixos/modules/services/x11/display-managers/gdm.nix b/nixos/modules/services/x11/display-managers/gdm.nix
index e5990aec4b9..0af9ccfcf3e 100644
--- a/nixos/modules/services/x11/display-managers/gdm.nix
+++ b/nixos/modules/services/x11/display-managers/gdm.nix
@@ -31,6 +31,44 @@ let
     load-module module-position-event-sounds
   '';
 
+  dmDefault = config.services.xserver.desktopManager.default;
+  wmDefault = config.services.xserver.windowManager.default;
+  hasDefaultUserSession = dmDefault != "none" || wmDefault != "none";
+  defaultSessionName = dmDefault + optionalString (wmDefault != "none") ("+" + wmDefault);
+
+  setSessionScript = pkgs.python3.pkgs.buildPythonApplication {
+    name = "set-session";
+
+    format = "other";
+
+    src = ./set-session.py;
+
+    dontUnpack = true;
+
+    strictDeps = false;
+
+    nativeBuildInputs = with pkgs; [
+      wrapGAppsHook
+      gobject-introspection
+    ];
+
+    buildInputs = with pkgs; [
+      accountsservice
+      glib
+    ];
+
+    propagatedBuildInputs = with pkgs.python3.pkgs; [
+      pygobject3
+      ordered-set
+    ];
+
+    installPhase = ''
+      mkdir -p $out/bin
+      cp $src $out/bin/set-session
+      chmod +x $out/bin/set-session
+    '';
+  };
+
 in
 
 {
@@ -156,6 +194,8 @@ in
           cat - > /run/gdm/.config/gnome-initial-setup-done <<- EOF
           yes
           EOF
+        '' + optionalString hasDefaultUserSession ''
+          ${setSessionScript}/bin/set-session ${defaultSessionName}
         '';
       };
 
diff --git a/nixos/modules/services/x11/display-managers/set-session.py b/nixos/modules/services/x11/display-managers/set-session.py
new file mode 100755
index 00000000000..0cca80af44e
--- /dev/null
+++ b/nixos/modules/services/x11/display-managers/set-session.py
@@ -0,0 +1,86 @@
+#!/usr/bin/env python
+
+import gi, argparse, os, logging, sys
+
+gi.require_version("AccountsService", "1.0")
+from gi.repository import AccountsService, GLib
+from ordered_set import OrderedSet
+
+
+def get_session_file(session):
+    system_data_dirs = GLib.get_system_data_dirs()
+
+    session_dirs = OrderedSet(
+        os.path.join(data_dir, session)
+        for data_dir in system_data_dirs
+        for session in {"wayland-sessions", "xsessions"}
+    )
+
+    session_files = OrderedSet(
+        os.path.join(dir, session + ".desktop")
+        for dir in session_dirs
+        if os.path.exists(os.path.join(dir, session + ".desktop"))
+    )
+
+    # Deal with duplicate wayland-sessions and xsessions.
+    # Needed for the situation in gnome-session, where there's
+    # a xsession named the same as a wayland session.
+    if any(map(is_session_wayland, session_files)):
+        session_files = OrderedSet(
+            session for session in session_files if is_session_wayland(session)
+        )
+    else:
+        session_files = OrderedSet(
+            session for session in session_files if is_session_xsession(session)
+        )
+
+    if len(session_files) == 0:
+        logging.warning("No session files are found.")
+        sys.exit(0)
+    else:
+        return session_files[0]
+
+
+def is_session_xsession(session_file):
+    return "/xsessions/" in session_file
+
+
+def is_session_wayland(session_file):
+    return "/wayland-sessions/" in session_file
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        description="Set session type for all normal users."
+    )
+    parser.add_argument("session", help="Name of session to set.")
+
+    args = parser.parse_args()
+
+    session = getattr(args, "session")
+    session_file = get_session_file(session)
+
+    user_manager = AccountsService.UserManager.get_default()
+    users = user_manager.list_users()
+
+    for user in users:
+        if user.is_system_account():
+            continue
+        else:
+            if is_session_wayland(session_file):
+                logging.debug(
+                    f"Setting session name: {session}, as we found the existing wayland-session: {session_file}"
+                )
+                user.set_session(session)
+            elif is_session_xsession(session_file):
+                logging.debug(
+                    f"Setting session name: {session}, as we found the existing xsession: {session_file}"
+                )
+                user.set_x_session(session)
+            else:
+                logging.error(f"Couldn't figure out session type for {session_file}")
+                sys.exit(1)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/nixos/modules/system/boot/networkd.nix b/nixos/modules/system/boot/networkd.nix
index c091d863034..f80d5afc55f 100644
--- a/nixos/modules/system/boot/networkd.nix
+++ b/nixos/modules/system/boot/networkd.nix
@@ -201,7 +201,7 @@ let
     (assertValueOneOf "IPv6AcceptRA" boolValues)
     (assertValueOneOf "IPv4ProxyARP" boolValues)
     (assertValueOneOf "IPv6ProxyNDP" boolValues)
-    (assertValueOneOf "IPv6PrefixDelegation" boolValues)
+    (assertValueOneOf "IPv6PrefixDelegation" (boolValues ++ [ "dhcpv6" "static" ]))
     (assertValueOneOf "ActiveSlave" boolValues)
     (assertValueOneOf "PrimarySlave" boolValues)
     (assertValueOneOf "ConfigureWithoutCarrier" boolValues)
diff --git a/nixos/tests/ceph-multi-node.nix b/nixos/tests/ceph-multi-node.nix
index ed493d6a1b3..52a0b5caf23 100644
--- a/nixos/tests/ceph-multi-node.nix
+++ b/nixos/tests/ceph-multi-node.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix ({pkgs, lib, ...}:
+import ./make-test-python.nix ({pkgs, lib, ...}:
 
 let
   cfg = {
@@ -109,105 +109,105 @@ let
   # For other ways to deploy a ceph cluster, look at the documentation at
   # https://docs.ceph.com/docs/master/
   testscript = { ... }: ''
-    startAll;
+    start_all()
 
-    $monA->waitForUnit("network.target");
-    $osd0->waitForUnit("network.target");
-    $osd1->waitForUnit("network.target");
+    monA.wait_for_unit("network.target")
+    osd0.wait_for_unit("network.target")
+    osd1.wait_for_unit("network.target")
 
     # Bootstrap ceph-mon daemon
-    $monA->mustSucceed(
-      "sudo -u ceph ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'",
-      "sudo -u ceph ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'",
-      "sudo -u ceph ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring",
-      "monmaptool --create --add ${cfg.monA.name} ${cfg.monA.ip} --fsid ${cfg.clusterId} /tmp/monmap",
-      "sudo -u ceph ceph-mon --mkfs -i ${cfg.monA.name} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring",
-      "sudo -u ceph mkdir -p /var/lib/ceph/mgr/ceph-${cfg.monA.name}/",
-      "sudo -u ceph touch /var/lib/ceph/mon/ceph-${cfg.monA.name}/done",
-      "systemctl start ceph-mon-${cfg.monA.name}"
-    );
-    $monA->waitForUnit("ceph-mon-${cfg.monA.name}");
-    $monA->mustSucceed("ceph mon enable-msgr2");
+    monA.succeed(
+        "sudo -u ceph ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'",
+        "sudo -u ceph ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'",
+        "sudo -u ceph ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring",
+        "monmaptool --create --add ${cfg.monA.name} ${cfg.monA.ip} --fsid ${cfg.clusterId} /tmp/monmap",
+        "sudo -u ceph ceph-mon --mkfs -i ${cfg.monA.name} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring",
+        "sudo -u ceph mkdir -p /var/lib/ceph/mgr/ceph-${cfg.monA.name}/",
+        "sudo -u ceph touch /var/lib/ceph/mon/ceph-${cfg.monA.name}/done",
+        "systemctl start ceph-mon-${cfg.monA.name}",
+    )
+    monA.wait_for_unit("ceph-mon-${cfg.monA.name}")
+    monA.succeed("ceph mon enable-msgr2")
 
     # Can't check ceph status until a mon is up
-    $monA->succeed("ceph -s | grep 'mon: 1 daemons'");
+    monA.succeed("ceph -s | grep 'mon: 1 daemons'")
 
     # Start the ceph-mgr daemon, it has no deps and hardly any setup
-    $monA->mustSucceed(
-      "ceph auth get-or-create mgr.${cfg.monA.name} mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-${cfg.monA.name}/keyring",
-      "systemctl start ceph-mgr-${cfg.monA.name}"
-    );
-    $monA->waitForUnit("ceph-mgr-a");
-    $monA->waitUntilSucceeds("ceph -s | grep 'quorum ${cfg.monA.name}'");
-    $monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'");
+    monA.succeed(
+        "ceph auth get-or-create mgr.${cfg.monA.name} mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-${cfg.monA.name}/keyring",
+        "systemctl start ceph-mgr-${cfg.monA.name}",
+    )
+    monA.wait_for_unit("ceph-mgr-a")
+    monA.wait_until_succeeds("ceph -s | grep 'quorum ${cfg.monA.name}'")
+    monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
 
     # Send the admin keyring to the OSD machines
-    $monA->mustSucceed("cp /etc/ceph/ceph.client.admin.keyring /tmp/shared");
-    $osd0->mustSucceed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph");
-    $osd1->mustSucceed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph");
+    monA.succeed("cp /etc/ceph/ceph.client.admin.keyring /tmp/shared")
+    osd0.succeed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph")
+    osd1.succeed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph")
 
     # Bootstrap both OSDs
-    $osd0->mustSucceed(
-      "mkfs.xfs /dev/vdb",
-      "mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd0.name}",
-      "mount /dev/vdb /var/lib/ceph/osd/ceph-${cfg.osd0.name}",
-      "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd0.name}/keyring --name osd.${cfg.osd0.name} --add-key ${cfg.osd0.key}",
-      "echo '{\"cephx_secret\": \"${cfg.osd0.key}\"}' | ceph osd new ${cfg.osd0.uuid} -i -",
-    );
-    $osd1->mustSucceed(
-      "mkfs.xfs /dev/vdb",
-      "mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd1.name}",
-      "mount /dev/vdb /var/lib/ceph/osd/ceph-${cfg.osd1.name}",
-      "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd1.name}/keyring --name osd.${cfg.osd1.name} --add-key ${cfg.osd1.key}",
-      "echo '{\"cephx_secret\": \"${cfg.osd1.key}\"}' | ceph osd new ${cfg.osd1.uuid} -i -"
-    );
+    osd0.succeed(
+        "mkfs.xfs /dev/vdb",
+        "mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd0.name}",
+        "mount /dev/vdb /var/lib/ceph/osd/ceph-${cfg.osd0.name}",
+        "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd0.name}/keyring --name osd.${cfg.osd0.name} --add-key ${cfg.osd0.key}",
+        'echo \'{"cephx_secret": "${cfg.osd0.key}"}\' | ceph osd new ${cfg.osd0.uuid} -i -',
+    )
+    osd1.succeed(
+        "mkfs.xfs /dev/vdb",
+        "mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd1.name}",
+        "mount /dev/vdb /var/lib/ceph/osd/ceph-${cfg.osd1.name}",
+        "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd1.name}/keyring --name osd.${cfg.osd1.name} --add-key ${cfg.osd1.key}",
+        'echo \'{"cephx_secret": "${cfg.osd1.key}"}\' | ceph osd new ${cfg.osd1.uuid} -i -',
+    )
 
     # Initialize the OSDs with regular filestore
-    $osd0->mustSucceed(
-      "ceph-osd -i ${cfg.osd0.name} --mkfs --osd-uuid ${cfg.osd0.uuid}",
-      "chown -R ceph:ceph /var/lib/ceph/osd",
-      "systemctl start ceph-osd-${cfg.osd0.name}",
-    );
-    $osd1->mustSucceed(
-      "ceph-osd -i ${cfg.osd1.name} --mkfs --osd-uuid ${cfg.osd1.uuid}",
-      "chown -R ceph:ceph /var/lib/ceph/osd",
-      "systemctl start ceph-osd-${cfg.osd1.name}"
-    );
-    $monA->waitUntilSucceeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'");
-    $monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'");
-    $monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'");
-
-    $monA->mustSucceed(
-      "ceph osd pool create multi-node-test 100 100",
-      "ceph osd pool ls | grep 'multi-node-test'",
-      "ceph osd pool rename multi-node-test multi-node-other-test",
-      "ceph osd pool ls | grep 'multi-node-other-test'"
-    );
-    $monA->waitUntilSucceeds("ceph -s | grep '1 pools, 100 pgs'");
-    $monA->mustSucceed("ceph osd pool set multi-node-other-test size 2");
-    $monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'");
-    $monA->waitUntilSucceeds("ceph -s | grep '100 active+clean'");
-    $monA->mustFail(
-      "ceph osd pool ls | grep 'multi-node-test'",
-      "ceph osd pool delete multi-node-other-test multi-node-other-test --yes-i-really-really-mean-it"
-    );
+    osd0.succeed(
+        "ceph-osd -i ${cfg.osd0.name} --mkfs --osd-uuid ${cfg.osd0.uuid}",
+        "chown -R ceph:ceph /var/lib/ceph/osd",
+        "systemctl start ceph-osd-${cfg.osd0.name}",
+    )
+    osd1.succeed(
+        "ceph-osd -i ${cfg.osd1.name} --mkfs --osd-uuid ${cfg.osd1.uuid}",
+        "chown -R ceph:ceph /var/lib/ceph/osd",
+        "systemctl start ceph-osd-${cfg.osd1.name}",
+    )
+    monA.wait_until_succeeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'")
+    monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
+    monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
+
+    monA.succeed(
+        "ceph osd pool create multi-node-test 100 100",
+        "ceph osd pool ls | grep 'multi-node-test'",
+        "ceph osd pool rename multi-node-test multi-node-other-test",
+        "ceph osd pool ls | grep 'multi-node-other-test'",
+    )
+    monA.wait_until_succeeds("ceph -s | grep '1 pools, 100 pgs'")
+    monA.succeed("ceph osd pool set multi-node-other-test size 2")
+    monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
+    monA.wait_until_succeeds("ceph -s | grep '100 active+clean'")
+    monA.fail(
+        "ceph osd pool ls | grep 'multi-node-test'",
+        "ceph osd pool delete multi-node-other-test multi-node-other-test --yes-i-really-really-mean-it",
+    )
 
     # Shut down ceph on all machines in a very unpolite way
-    $monA->crash;
-    $osd0->crash;
-    $osd1->crash;
+    monA.crash()
+    osd0.crash()
+    osd1.crash()
 
     # Start it up
-    $osd0->start;
-    $osd1->start;
-    $monA->start;
+    osd0.start()
+    osd1.start()
+    monA.start()
 
     # Ensure the cluster comes back up again
-    $monA->succeed("ceph -s | grep 'mon: 1 daemons'");
-    $monA->waitUntilSucceeds("ceph -s | grep 'quorum ${cfg.monA.name}'");
-    $monA->waitUntilSucceeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'");
-    $monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'");
-    $monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'");
+    monA.succeed("ceph -s | grep 'mon: 1 daemons'")
+    monA.wait_until_succeeds("ceph -s | grep 'quorum ${cfg.monA.name}'")
+    monA.wait_until_succeeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'")
+    monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
+    monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
   '';
 in {
   name = "basic-multi-node-ceph-cluster";
diff --git a/nixos/tests/ceph-single-node.nix b/nixos/tests/ceph-single-node.nix
index 041fbd7e8e6..da92a73e14d 100644
--- a/nixos/tests/ceph-single-node.nix
+++ b/nixos/tests/ceph-single-node.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix ({pkgs, lib, ...}:
+import ./make-test-python.nix ({pkgs, lib, ...}:
 
 let
   cfg = {
@@ -74,100 +74,100 @@ let
   # For other ways to deploy a ceph cluster, look at the documentation at
   # https://docs.ceph.com/docs/master/
   testscript = { ... }: ''
-    startAll;
+    start_all()
 
-    $monA->waitForUnit("network.target");
+    monA.wait_for_unit("network.target")
 
     # Bootstrap ceph-mon daemon
-    $monA->mustSucceed(
-      "sudo -u ceph ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'",
-      "sudo -u ceph ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'",
-      "sudo -u ceph ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring",
-      "monmaptool --create --add ${cfg.monA.name} ${cfg.monA.ip} --fsid ${cfg.clusterId} /tmp/monmap",
-      "sudo -u ceph ceph-mon --mkfs -i ${cfg.monA.name} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring",
-      "sudo -u ceph touch /var/lib/ceph/mon/ceph-${cfg.monA.name}/done",
-      "systemctl start ceph-mon-${cfg.monA.name}"
-    );
-    $monA->waitForUnit("ceph-mon-${cfg.monA.name}");
-    $monA->mustSucceed("ceph mon enable-msgr2");
+    monA.succeed(
+        "sudo -u ceph ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'",
+        "sudo -u ceph ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'",
+        "sudo -u ceph ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring",
+        "monmaptool --create --add ${cfg.monA.name} ${cfg.monA.ip} --fsid ${cfg.clusterId} /tmp/monmap",
+        "sudo -u ceph ceph-mon --mkfs -i ${cfg.monA.name} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring",
+        "sudo -u ceph touch /var/lib/ceph/mon/ceph-${cfg.monA.name}/done",
+        "systemctl start ceph-mon-${cfg.monA.name}",
+    )
+    monA.wait_for_unit("ceph-mon-${cfg.monA.name}")
+    monA.succeed("ceph mon enable-msgr2")
 
     # Can't check ceph status until a mon is up
-    $monA->succeed("ceph -s | grep 'mon: 1 daemons'");
+    monA.succeed("ceph -s | grep 'mon: 1 daemons'")
 
     # Start the ceph-mgr daemon, after copying in the keyring
-    $monA->mustSucceed(
-      "sudo -u ceph mkdir -p /var/lib/ceph/mgr/ceph-${cfg.monA.name}/",
-      "ceph auth get-or-create mgr.${cfg.monA.name} mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-${cfg.monA.name}/keyring",
-      "systemctl start ceph-mgr-${cfg.monA.name}"
-    );
-    $monA->waitForUnit("ceph-mgr-a");
-    $monA->waitUntilSucceeds("ceph -s | grep 'quorum ${cfg.monA.name}'");
-    $monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'");
+    monA.succeed(
+        "sudo -u ceph mkdir -p /var/lib/ceph/mgr/ceph-${cfg.monA.name}/",
+        "ceph auth get-or-create mgr.${cfg.monA.name} mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-${cfg.monA.name}/keyring",
+        "systemctl start ceph-mgr-${cfg.monA.name}",
+    )
+    monA.wait_for_unit("ceph-mgr-a")
+    monA.wait_until_succeeds("ceph -s | grep 'quorum ${cfg.monA.name}'")
+    monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
 
     # Bootstrap both OSDs
-    $monA->mustSucceed(
-      "mkfs.xfs /dev/vdb",
-      "mkfs.xfs /dev/vdc",
-      "mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd0.name}",
-      "mount /dev/vdb /var/lib/ceph/osd/ceph-${cfg.osd0.name}",
-      "mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd1.name}",
-      "mount /dev/vdc /var/lib/ceph/osd/ceph-${cfg.osd1.name}",
-      "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd0.name}/keyring --name osd.${cfg.osd0.name} --add-key ${cfg.osd0.key}",
-      "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd1.name}/keyring --name osd.${cfg.osd1.name} --add-key ${cfg.osd1.key}",
-      "echo '{\"cephx_secret\": \"${cfg.osd0.key}\"}' | ceph osd new ${cfg.osd0.uuid} -i -",
-      "echo '{\"cephx_secret\": \"${cfg.osd1.key}\"}' | ceph osd new ${cfg.osd1.uuid} -i -"
-    );
+    monA.succeed(
+        "mkfs.xfs /dev/vdb",
+        "mkfs.xfs /dev/vdc",
+        "mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd0.name}",
+        "mount /dev/vdb /var/lib/ceph/osd/ceph-${cfg.osd0.name}",
+        "mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd1.name}",
+        "mount /dev/vdc /var/lib/ceph/osd/ceph-${cfg.osd1.name}",
+        "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd0.name}/keyring --name osd.${cfg.osd0.name} --add-key ${cfg.osd0.key}",
+        "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd1.name}/keyring --name osd.${cfg.osd1.name} --add-key ${cfg.osd1.key}",
+        'echo \'{"cephx_secret": "${cfg.osd0.key}"}\' | ceph osd new ${cfg.osd0.uuid} -i -',
+        'echo \'{"cephx_secret": "${cfg.osd1.key}"}\' | ceph osd new ${cfg.osd1.uuid} -i -',
+    )
 
     # Initialize the OSDs with regular filestore
-    $monA->mustSucceed(
-      "ceph-osd -i ${cfg.osd0.name} --mkfs --osd-uuid ${cfg.osd0.uuid}",
-      "ceph-osd -i ${cfg.osd1.name} --mkfs --osd-uuid ${cfg.osd1.uuid}",
-      "chown -R ceph:ceph /var/lib/ceph/osd",
-      "systemctl start ceph-osd-${cfg.osd0.name}",
-      "systemctl start ceph-osd-${cfg.osd1.name}"
-    );
-    $monA->waitUntilSucceeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'");
-    $monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'");
-    $monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'");
-
-    $monA->mustSucceed(
-      "ceph osd pool create single-node-test 100 100",
-      "ceph osd pool ls | grep 'single-node-test'",
-      "ceph osd pool rename single-node-test single-node-other-test",
-      "ceph osd pool ls | grep 'single-node-other-test'"
-    );
-    $monA->waitUntilSucceeds("ceph -s | grep '1 pools, 100 pgs'");
-    $monA->mustSucceed(
-      "ceph osd getcrushmap -o crush",
-      "crushtool -d crush -o decrushed",
-      "sed 's/step chooseleaf firstn 0 type host/step chooseleaf firstn 0 type osd/' decrushed > modcrush",
-      "crushtool -c modcrush -o recrushed",
-      "ceph osd setcrushmap -i recrushed",
-      "ceph osd pool set single-node-other-test size 2"
-    );
-    $monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'");
-    $monA->waitUntilSucceeds("ceph -s | grep '100 active+clean'");
-    $monA->mustFail(
-      "ceph osd pool ls | grep 'multi-node-test'",
-      "ceph osd pool delete single-node-other-test single-node-other-test --yes-i-really-really-mean-it"
-    );
+    monA.succeed(
+        "ceph-osd -i ${cfg.osd0.name} --mkfs --osd-uuid ${cfg.osd0.uuid}",
+        "ceph-osd -i ${cfg.osd1.name} --mkfs --osd-uuid ${cfg.osd1.uuid}",
+        "chown -R ceph:ceph /var/lib/ceph/osd",
+        "systemctl start ceph-osd-${cfg.osd0.name}",
+        "systemctl start ceph-osd-${cfg.osd1.name}",
+    )
+    monA.wait_until_succeeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'")
+    monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
+    monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
+
+    monA.succeed(
+        "ceph osd pool create single-node-test 100 100",
+        "ceph osd pool ls | grep 'single-node-test'",
+        "ceph osd pool rename single-node-test single-node-other-test",
+        "ceph osd pool ls | grep 'single-node-other-test'",
+    )
+    monA.wait_until_succeeds("ceph -s | grep '1 pools, 100 pgs'")
+    monA.succeed(
+        "ceph osd getcrushmap -o crush",
+        "crushtool -d crush -o decrushed",
+        "sed 's/step chooseleaf firstn 0 type host/step chooseleaf firstn 0 type osd/' decrushed > modcrush",
+        "crushtool -c modcrush -o recrushed",
+        "ceph osd setcrushmap -i recrushed",
+        "ceph osd pool set single-node-other-test size 2",
+    )
+    monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
+    monA.wait_until_succeeds("ceph -s | grep '100 active+clean'")
+    monA.fail(
+        "ceph osd pool ls | grep 'multi-node-test'",
+        "ceph osd pool delete single-node-other-test single-node-other-test --yes-i-really-really-mean-it",
+    )
 
     # Shut down ceph by stopping ceph.target.
-    $monA->mustSucceed("systemctl stop ceph.target");
+    monA.succeed("systemctl stop ceph.target")
 
     # Start it up
-    $monA->succeed("systemctl start ceph.target");
-    $monA->waitForUnit("ceph-mon-${cfg.monA.name}");
-    $monA->waitForUnit("ceph-mgr-${cfg.monA.name}");
-    $monA->waitForUnit("ceph-osd-${cfg.osd0.name}");
-    $monA->waitForUnit("ceph-osd-${cfg.osd1.name}");
+    monA.succeed("systemctl start ceph.target")
+    monA.wait_for_unit("ceph-mon-${cfg.monA.name}")
+    monA.wait_for_unit("ceph-mgr-${cfg.monA.name}")
+    monA.wait_for_unit("ceph-osd-${cfg.osd0.name}")
+    monA.wait_for_unit("ceph-osd-${cfg.osd1.name}")
 
     # Ensure the cluster comes back up again
-    $monA->succeed("ceph -s | grep 'mon: 1 daemons'");
-    $monA->waitUntilSucceeds("ceph -s | grep 'quorum ${cfg.monA.name}'");
-    $monA->waitUntilSucceeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'");
-    $monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'");
-    $monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'");
+    monA.succeed("ceph -s | grep 'mon: 1 daemons'")
+    monA.wait_until_succeeds("ceph -s | grep 'quorum ${cfg.monA.name}'")
+    monA.wait_until_succeeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'")
+    monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
+    monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
   '';
 in {
   name = "basic-single-node-ceph-cluster";
diff --git a/nixos/tests/clickhouse.nix b/nixos/tests/clickhouse.nix
index 7d835069ec4..2d8a7cf7aa9 100644
--- a/nixos/tests/clickhouse.nix
+++ b/nixos/tests/clickhouse.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix ({ pkgs, ... }: {
+import ./make-test-python.nix ({ pkgs, ... }: {
   name = "clickhouse";
   meta.maintainers = with pkgs.stdenv.lib.maintainers; [ ma27 ];
 
@@ -14,12 +14,18 @@ import ./make-test.nix ({ pkgs, ... }: {
       selectQuery = pkgs.writeText "select.sql" "SELECT * from `demo`";
     in
       ''
-        $machine->start();
-        $machine->waitForUnit("clickhouse.service");
-        $machine->waitForOpenPort(9000);
+        machine.start()
+        machine.wait_for_unit("clickhouse.service")
+        machine.wait_for_open_port(9000)
 
-        $machine->succeed("cat ${tableDDL} | clickhouse-client");
-        $machine->succeed("cat ${insertQuery} | clickhouse-client");
-        $machine->succeed("cat ${selectQuery} | clickhouse-client | grep foo");
+        machine.succeed(
+            "cat ${tableDDL} | clickhouse-client"
+        )
+        machine.succeed(
+            "cat ${insertQuery} | clickhouse-client"
+        )
+        machine.succeed(
+            "cat ${selectQuery} | clickhouse-client | grep foo"
+        )
       '';
 })
diff --git a/nixos/tests/deluge.nix b/nixos/tests/deluge.nix
index b58030409b5..37689c3d913 100644
--- a/nixos/tests/deluge.nix
+++ b/nixos/tests/deluge.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix ({ pkgs, ...} : {
+import ./make-test-python.nix ({ pkgs, ...} : {
   name = "deluge";
   meta = with pkgs.stdenv.lib.maintainers; {
     maintainers = [ flokli ];
@@ -45,18 +45,20 @@ import ./make-test.nix ({ pkgs, ...} : {
   };
 
   testScript = ''
-    startAll;
+    start_all()
 
-    $simple->waitForUnit("deluged");
-    $simple->waitForUnit("delugeweb");
-    $simple->waitForOpenPort("8112");
-    $declarative->waitForUnit("network.target");
-    $declarative->waitUntilSucceeds("curl --fail http://simple:8112");
+    simple.wait_for_unit("deluged")
+    simple.wait_for_unit("delugeweb")
+    simple.wait_for_open_port("8112")
+    declarative.wait_for_unit("network.target")
+    declarative.wait_until_succeeds("curl --fail http://simple:8112")
 
-    $declarative->waitForUnit("deluged");
-    $declarative->waitForUnit("delugeweb");
-    $declarative->waitUntilSucceeds("curl --fail http://declarative:3142");
-    $declarative->succeed("deluge-console 'help' | grep -q 'rm - Remove a torrent'");
-    $declarative->succeed("deluge-console 'connect 127.0.0.1:58846 andrew password; help' | grep -q 'rm - Remove a torrent'");
+    declarative.wait_for_unit("deluged")
+    declarative.wait_for_unit("delugeweb")
+    declarative.wait_until_succeeds("curl --fail http://declarative:3142")
+    declarative.succeed("deluge-console 'help' | grep -q 'rm - Remove a torrent'")
+    declarative.succeed(
+        "deluge-console 'connect 127.0.0.1:58846 andrew password; help' | grep -q 'rm - Remove a torrent'"
+    )
   '';
 })
diff --git a/nixos/tests/dovecot.nix b/nixos/tests/dovecot.nix
index 156079d1d58..c19850f418b 100644
--- a/nixos/tests/dovecot.nix
+++ b/nixos/tests/dovecot.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix {
+import ./make-test-python.nix {
   name = "dovecot";
 
   machine = { pkgs, ... }: {
@@ -66,12 +66,12 @@ import ./make-test.nix {
   };
 
   testScript = ''
-    $machine->waitForUnit('postfix.service');
-    $machine->waitForUnit('dovecot2.service');
-    $machine->succeed('send-testmail');
-    $machine->succeed('send-lda');
-    $machine->waitUntilFails('[ "$(postqueue -p)" != "Mail queue is empty" ]');
-    $machine->succeed('test-imap');
-    $machine->succeed('test-pop');
+    machine.wait_for_unit("postfix.service")
+    machine.wait_for_unit("dovecot2.service")
+    machine.succeed("send-testmail")
+    machine.succeed("send-lda")
+    machine.wait_until_fails('[ "$(postqueue -p)" != "Mail queue is empty" ]')
+    machine.succeed("test-imap")
+    machine.succeed("test-pop")
   '';
 }
diff --git a/nixos/tests/fancontrol.nix b/nixos/tests/fancontrol.nix
index 83ddbb54c5b..356cd57ffa1 100644
--- a/nixos/tests/fancontrol.nix
+++ b/nixos/tests/fancontrol.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix ({ pkgs, ... } : {
+import ./make-test-python.nix ({ pkgs, ... } : {
   name = "fancontrol";
 
   machine =
@@ -19,7 +19,10 @@ import ./make-test.nix ({ pkgs, ... } : {
 
   # This configuration cannot be valid for the test VM, so it's expected to get an 'outdated' error.
   testScript = ''
-    $machine->waitForUnit("fancontrol.service");
-    $machine->waitUntilSucceeds("journalctl -eu fancontrol | grep 'Configuration appears to be outdated'");
+    start_all()
+    machine.wait_for_unit("fancontrol.service")
+    machine.wait_until_succeeds(
+        "journalctl -eu fancontrol | grep 'Configuration appears to be outdated'"
+    )
   '';
 })
diff --git a/nixos/tests/firewall.nix b/nixos/tests/firewall.nix
index fcf758910e0..09a1fef852e 100644
--- a/nixos/tests/firewall.nix
+++ b/nixos/tests/firewall.nix
@@ -1,6 +1,6 @@
 # Test the firewall module.
 
-import ./make-test.nix ( { pkgs, ... } : {
+import ./make-test-python.nix ( { pkgs, ... } : {
   name = "firewall";
   meta = with pkgs.stdenv.lib.maintainers; {
     maintainers = [ eelco ];
@@ -36,30 +36,30 @@ import ./make-test.nix ( { pkgs, ... } : {
   testScript = { nodes, ... }: let
     newSystem = nodes.walled2.config.system.build.toplevel;
   in ''
-    $walled->start;
-    $attacker->start;
+    start_all()
 
-    $walled->waitForUnit("firewall");
-    $walled->waitForUnit("httpd");
-    $attacker->waitForUnit("network.target");
+    walled.wait_for_unit("firewall")
+    walled.wait_for_unit("httpd")
+    attacker.wait_for_unit("network.target")
 
     # Local connections should still work.
-    $walled->succeed("curl -v http://localhost/ >&2");
+    walled.succeed("curl -v http://localhost/ >&2")
 
     # Connections to the firewalled machine should fail, but ping should succeed.
-    $attacker->fail("curl --fail --connect-timeout 2 http://walled/ >&2");
-    $attacker->succeed("ping -c 1 walled >&2");
+    attacker.fail("curl --fail --connect-timeout 2 http://walled/ >&2")
+    attacker.succeed("ping -c 1 walled >&2")
 
     # Outgoing connections/pings should still work.
-    $walled->succeed("curl -v http://attacker/ >&2");
-    $walled->succeed("ping -c 1 attacker >&2");
+    walled.succeed("curl -v http://attacker/ >&2")
+    walled.succeed("ping -c 1 attacker >&2")
 
     # If we stop the firewall, then connections should succeed.
-    $walled->stopJob("firewall");
-    $attacker->succeed("curl -v http://walled/ >&2");
+    walled.stop_job("firewall")
+    attacker.succeed("curl -v http://walled/ >&2")
 
     # Check whether activation of a new configuration reloads the firewall.
-    $walled->succeed("${newSystem}/bin/switch-to-configuration test 2>&1" .
-                     " | grep -qF firewall.service");
+    walled.succeed(
+        "${newSystem}/bin/switch-to-configuration test 2>&1 | grep -qF firewall.service"
+    )
   '';
 })
diff --git a/nixos/tests/fish.nix b/nixos/tests/fish.nix
index 97c4e8e37ac..68fba428439 100644
--- a/nixos/tests/fish.nix
+++ b/nixos/tests/fish.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix ({ pkgs, ... }: {
+import ./make-test-python.nix ({ pkgs, ... }: {
   name = "fish";
 
   machine =
@@ -14,8 +14,11 @@ import ./make-test.nix ({ pkgs, ... }: {
 
   testScript =
     ''
-      $machine->waitForFile("/etc/fish/generated_completions/coreutils.fish");
-      $machine->waitForFile("/etc/fish/generated_completions/kill.fish");
-      $machine->succeed("fish -ic 'echo \$fish_complete_path' | grep -q '/share/fish/completions /etc/fish/generated_completions /root/.local/share/fish/generated_completions\$'");
+      start_all()
+      machine.wait_for_file("/etc/fish/generated_completions/coreutils.fish")
+      machine.wait_for_file("/etc/fish/generated_completions/kill.fish")
+      machine.succeed(
+          "fish -ic 'echo $fish_complete_path' | grep -q '/share/fish/completions /etc/fish/generated_completions /root/.local/share/fish/generated_completions$'"
+      )
     '';
 })
diff --git a/nixos/tests/fluentd.nix b/nixos/tests/fluentd.nix
index e5c4c3d2163..918f2f87db1 100644
--- a/nixos/tests/fluentd.nix
+++ b/nixos/tests/fluentd.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix ({ pkgs, lib, ... }: {
+import ./make-test-python.nix ({ pkgs, lib, ... }: {
   name = "fluentd";
 
   machine = { pkgs, ... }: {
@@ -33,14 +33,17 @@ import ./make-test.nix ({ pkgs, lib, ... }: {
       inherit testMessage;
     });
   in ''
-    $machine->start;
-    $machine->waitForUnit('fluentd.service');
-    $machine->waitForOpenPort(9880);
+    machine.start()
+    machine.wait_for_unit("fluentd.service")
+    machine.wait_for_open_port(9880)
 
-    $machine->succeed("curl -fsSL -X POST -H 'Content-type: application/json' -d @${payload} http://localhost:9880/test.tag");
+    machine.succeed(
+        "curl -fsSL -X POST -H 'Content-type: application/json' -d @${payload} http://localhost:9880/test.tag"
+    )
 
-    $machine->succeed("systemctl stop fluentd"); # blocking flush
+    # blocking flush
+    machine.succeed("systemctl stop fluentd")
 
-    $machine->succeed("grep '${testMessage}' /tmp/current-log");
+    machine.succeed("grep '${testMessage}' /tmp/current-log")
   '';
 })
diff --git a/nixos/tests/gitlab.nix b/nixos/tests/gitlab.nix
index be0b3c8746a..7e4e8bcef92 100644
--- a/nixos/tests/gitlab.nix
+++ b/nixos/tests/gitlab.nix
@@ -3,7 +3,7 @@
 let
   initialRootPassword = "notproduction";
 in
-import ./make-test.nix ({ pkgs, lib, ...} : with lib; {
+import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; {
   name = "gitlab";
   meta = with pkgs.stdenv.lib.maintainers; {
     maintainers = [ globin ];
@@ -63,21 +63,35 @@ import ./make-test.nix ({ pkgs, lib, ...} : with lib; {
     });
   in
   ''
-    $gitlab->start();
-    $gitlab->waitForUnit("gitaly.service");
-    $gitlab->waitForUnit("gitlab-workhorse.service");
-    $gitlab->waitForUnit("gitlab.service");
-    $gitlab->waitForUnit("gitlab-sidekiq.service");
-    $gitlab->waitForFile("/var/gitlab/state/tmp/sockets/gitlab.socket");
-    $gitlab->waitUntilSucceeds("curl -sSf http://gitlab/users/sign_in");
-    $gitlab->succeed("curl -isSf http://gitlab  | grep -i location | grep -q http://gitlab/users/sign_in");
-    $gitlab->succeed("${pkgs.sudo}/bin/sudo -u gitlab -H gitlab-rake gitlab:check 1>&2");
-    $gitlab->succeed("echo \"Authorization: Bearer \$(curl -X POST -H 'Content-Type: application/json' -d @${auth} http://gitlab/oauth/token | ${pkgs.jq}/bin/jq -r '.access_token')\" >/tmp/headers");
-    $gitlab->succeed("curl -X POST -H 'Content-Type: application/json' -H @/tmp/headers -d @${createProject} http://gitlab/api/v4/projects");
-    $gitlab->succeed("curl -X POST -H 'Content-Type: application/json' -H @/tmp/headers -d @${putFile} http://gitlab/api/v4/projects/1/repository/files/some-file.txt");
-    $gitlab->succeed("curl -H @/tmp/headers http://gitlab/api/v4/projects/1/repository/archive.tar.gz > /tmp/archive.tar.gz");
-    $gitlab->succeed("curl -H @/tmp/headers http://gitlab/api/v4/projects/1/repository/archive.tar.bz2 > /tmp/archive.tar.bz2");
-    $gitlab->succeed("test -s /tmp/archive.tar.gz");
-    $gitlab->succeed("test -s /tmp/archive.tar.bz2");
+    gitlab.start()
+    gitlab.wait_for_unit("gitaly.service")
+    gitlab.wait_for_unit("gitlab-workhorse.service")
+    gitlab.wait_for_unit("gitlab.service")
+    gitlab.wait_for_unit("gitlab-sidekiq.service")
+    gitlab.wait_for_file("/var/gitlab/state/tmp/sockets/gitlab.socket")
+    gitlab.wait_until_succeeds("curl -sSf http://gitlab/users/sign_in")
+    gitlab.succeed(
+        "curl -isSf http://gitlab | grep -i location | grep -q http://gitlab/users/sign_in"
+    )
+    gitlab.succeed(
+        "${pkgs.sudo}/bin/sudo -u gitlab -H gitlab-rake gitlab:check 1>&2"
+    )
+    gitlab.succeed(
+        "echo \"Authorization: Bearer \$(curl -X POST -H 'Content-Type: application/json' -d @${auth} http://gitlab/oauth/token | ${pkgs.jq}/bin/jq -r '.access_token')\" >/tmp/headers"
+    )
+    gitlab.succeed(
+        "curl -X POST -H 'Content-Type: application/json' -H @/tmp/headers -d @${createProject} http://gitlab/api/v4/projects"
+    )
+    gitlab.succeed(
+        "curl -X POST -H 'Content-Type: application/json' -H @/tmp/headers -d @${putFile} http://gitlab/api/v4/projects/1/repository/files/some-file.txt"
+    )
+    gitlab.succeed(
+        "curl -H @/tmp/headers http://gitlab/api/v4/projects/1/repository/archive.tar.gz > /tmp/archive.tar.gz"
+    )
+    gitlab.succeed(
+        "curl -H @/tmp/headers http://gitlab/api/v4/projects/1/repository/archive.tar.bz2 > /tmp/archive.tar.bz2"
+    )
+    gitlab.succeed("test -s /tmp/archive.tar.gz")
+    gitlab.succeed("test -s /tmp/archive.tar.bz2")
   '';
 })
diff --git a/nixos/tests/glusterfs.nix b/nixos/tests/glusterfs.nix
index 9fd8bd2ed12..8f9cb8973d5 100644
--- a/nixos/tests/glusterfs.nix
+++ b/nixos/tests/glusterfs.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix ({ ... } :
+import ./make-test-python.nix ({pkgs, lib, ...}:
 
 let
   client = { pkgs, ... } : {
@@ -39,27 +39,29 @@ in {
   };
 
   testScript = ''
-    $server1->waitForUnit("glusterd.service");
-    $server2->waitForUnit("glusterd.service");
+    server1.wait_for_unit("glusterd.service")
+    server2.wait_for_unit("glusterd.service")
+
+    server1.wait_until_succeeds("gluster peer status")
+    server2.wait_until_succeeds("gluster peer status")
 
     # establish initial contact
-    $server1->succeed("sleep 2");
-    $server1->succeed("gluster peer probe server2");
-    $server1->succeed("gluster peer probe server1");
+    server1.succeed("gluster peer probe server2")
+    server1.succeed("gluster peer probe server1")
 
-    $server1->succeed("gluster peer status | grep Connected");
+    server1.succeed("gluster peer status | grep Connected")
 
     # create volumes
-    $server1->succeed("mkdir -p /data/vg0");
-    $server2->succeed("mkdir -p /data/vg0");
-    $server1->succeed("gluster volume create gv0 server1:/data/vg0 server2:/data/vg0");
-    $server1->succeed("gluster volume start gv0");
+    server1.succeed("mkdir -p /data/vg0")
+    server2.succeed("mkdir -p /data/vg0")
+    server1.succeed("gluster volume create gv0 server1:/data/vg0 server2:/data/vg0")
+    server1.succeed("gluster volume start gv0")
 
     # test clients
-    $client1->waitForUnit("gluster.mount");
-    $client2->waitForUnit("gluster.mount");
+    client1.wait_for_unit("gluster.mount")
+    client2.wait_for_unit("gluster.mount")
 
-    $client1->succeed("echo test > /gluster/file1");
-    $client2->succeed("grep test /gluster/file1");
+    client1.succeed("echo test > /gluster/file1")
+    client2.succeed("grep test /gluster/file1")
   '';
 })
diff --git a/nixos/tests/handbrake.nix b/nixos/tests/handbrake.nix
index ae87e1f69a7..e5fb6b269b1 100644
--- a/nixos/tests/handbrake.nix
+++ b/nixos/tests/handbrake.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix ({ pkgs, ... }:
+import ./make-test-python.nix ({ pkgs, ... }:
 let
   # Download Big Buck Bunny example, licensed under CC Attribution 3.0.
   testMkv = pkgs.fetchurl {
@@ -19,7 +19,13 @@ in {
   testScript = ''
     # Test MP4 and MKV transcoding. Since this is a short clip, transcoding typically
     # only takes a few seconds.
-    $machine->succeed("HandBrakeCLI -i ${testMkv} -o test.mp4 -e x264 -q 20 -B 160");
-    $machine->succeed("HandBrakeCLI -i ${testMkv} -o test.mkv -e x264 -q 20 -B 160");
+    start_all()
+
+    machine.succeed(
+        "HandBrakeCLI -i ${testMkv} -o test.mp4 -e x264 -q 20 -B 160"
+    )
+    machine.succeed(
+        "HandBrakeCLI -i ${testMkv} -o test.mkv -e x264 -q 20 -B 160"
+    )
   '';
 })
diff --git a/nixos/tests/hibernate.nix b/nixos/tests/hibernate.nix
index 274aa7becc8..8251c6e7ef8 100644
--- a/nixos/tests/hibernate.nix
+++ b/nixos/tests/hibernate.nix
@@ -1,6 +1,6 @@
 # Test whether hibernation from partition works.
 
-import ./make-test.nix (pkgs: {
+import ./make-test-python.nix (pkgs: {
   name = "hibernate";
 
   nodes = {
@@ -28,16 +28,17 @@ import ./make-test.nix (pkgs: {
 
   testScript =
     ''
-      $machine->waitForUnit("multi-user.target");
-      $machine->succeed("mkswap /dev/vdb");
-      $machine->succeed("swapon -a");
-      $machine->startJob("listener");
-      $machine->waitForOpenPort(4444);
-      $machine->succeed("systemctl hibernate &");
-      $machine->waitForShutdown;
-      $probe->waitForUnit("multi-user.target");
-      $machine->start;
-      $probe->waitUntilSucceeds("echo test | nc machine 4444 -N");
+      machine.start()
+      machine.wait_for_unit("multi-user.target")
+      machine.succeed("mkswap /dev/vdb")
+      machine.succeed("swapon -a")
+      machine.start_job("listener")
+      machine.wait_for_open_port(4444)
+      machine.succeed("systemctl hibernate &")
+      machine.wait_for_shutdown()
+      probe.wait_for_unit("multi-user.target")
+      machine.start()
+      probe.wait_until_succeeds("echo test | nc machine 4444 -N")
     '';
 
 })
diff --git a/nixos/tests/hound.nix b/nixos/tests/hound.nix
index cb8e25332c0..27c65abdf27 100644
--- a/nixos/tests/hound.nix
+++ b/nixos/tests/hound.nix
@@ -1,5 +1,5 @@
 # Test whether `houndd` indexes nixpkgs
-import ./make-test.nix ({ pkgs, ... } : {
+import ./make-test-python.nix ({ pkgs, ... } : {
   name = "hound";
   meta = with pkgs.stdenv.lib.maintainers; {
     maintainers = [ grahamc ];
@@ -46,13 +46,14 @@ import ./make-test.nix ({ pkgs, ... } : {
     };
   };
 
-  testScript =
-    '' startAll;
+  testScript = ''
+    start_all()
 
-       $machine->waitForUnit("network.target");
-       $machine->waitForUnit("hound.service");
-       $machine->waitForOpenPort(6080);
-       $machine->waitUntilSucceeds('curl http://127.0.0.1:6080/api/v1/search\?stats\=fosho\&repos\=\*\&rng=%3A20\&q\=hi\&files\=\&i=nope | grep "Filename" | grep "hello"');
-
-    '';
+    machine.wait_for_unit("network.target")
+    machine.wait_for_unit("hound.service")
+    machine.wait_for_open_port(6080)
+    machine.wait_until_succeeds(
+        "curl http://127.0.0.1:6080/api/v1/search\?stats\=fosho\&repos\=\*\&rng=%3A20\&q\=hi\&files\=\&i=nope | grep 'Filename' | grep 'hello'"
+    )
+  '';
 })
diff --git a/nixos/tests/icingaweb2.nix b/nixos/tests/icingaweb2.nix
index ea1b94c526b..2f65604539c 100644
--- a/nixos/tests/icingaweb2.nix
+++ b/nixos/tests/icingaweb2.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix ({ pkgs, ... }: {
+import ./make-test-python.nix ({ pkgs, ... }: {
   name = "icingaweb2";
   meta = with pkgs.stdenv.lib.maintainers; {
     maintainers = [ das_j ];
@@ -64,8 +64,8 @@ import ./make-test.nix ({ pkgs, ... }: {
   };
 
   testScript = ''
-    startAll();
-    $icingaweb2->waitForUnit("multi-user.target");
-    $icingaweb2->succeed("curl -sSf http://icingaweb2/authentication/login");
+    start_all()
+    icingaweb2.wait_for_unit("multi-user.target")
+    icingaweb2.succeed("curl -sSf http://icingaweb2/authentication/login")
   '';
 })
diff --git a/nixos/tests/incron.nix b/nixos/tests/incron.nix
index e39bbb5f096..b22ee4c9a03 100644
--- a/nixos/tests/incron.nix
+++ b/nixos/tests/incron.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix ({ pkgs, lib, ... }:
+import ./make-test-python.nix ({ pkgs, lib, ... }:
 
 {
   name = "incron";
@@ -19,34 +19,34 @@ import ./make-test.nix ({ pkgs, lib, ... }:
     };
 
   testScript = ''
-    startAll;
+    start_all()
 
-    $machine->waitForUnit("multi-user.target");
-    $machine->waitForUnit("incron.service");
+    machine.wait_for_unit("multi-user.target")
+    machine.wait_for_unit("incron.service")
 
-    $machine->succeed("test -d /test");
+    machine.succeed("test -d /test")
     # create some activity for incron to monitor
-    $machine->succeed("touch /test/file");
-    $machine->succeed("echo foo >> /test/file");
-    $machine->succeed("mv /test/file /root");
-    $machine->succeed("mv /root/file /test");
+    machine.succeed("touch /test/file")
+    machine.succeed("echo foo >> /test/file")
+    machine.succeed("mv /test/file /root")
+    machine.succeed("mv /root/file /test")
 
-    $machine->sleep(1);
+    machine.sleep(1)
 
     # touch /test/file
-    $machine->succeed("grep '/test/file IN_CREATE' /root/incron.log");
+    machine.succeed("grep '/test/file IN_CREATE' /root/incron.log")
 
     # echo foo >> /test/file
-    $machine->succeed("grep '/test/file IN_MODIFY' /root/incron.log");
-    $machine->succeed("grep '/test/file IN_CLOSE_WRITE' /root/incron.log");
+    machine.succeed("grep '/test/file IN_MODIFY' /root/incron.log")
+    machine.succeed("grep '/test/file IN_CLOSE_WRITE' /root/incron.log")
 
     # mv /test/file /root
-    $machine->succeed("grep '/test/file IN_MOVED_FROM' /root/incron.log");
+    machine.succeed("grep '/test/file IN_MOVED_FROM' /root/incron.log")
 
     # mv /root/file /test
-    $machine->succeed("grep '/test/file IN_MOVED_TO' /root/incron.log");
+    machine.succeed("grep '/test/file IN_MOVED_TO' /root/incron.log")
 
     # ensure something unexpected is not present
-    $machine->fail("grep 'IN_OPEN' /root/incron.log");
+    machine.fail("grep 'IN_OPEN' /root/incron.log")
   '';
 })
diff --git a/nixos/tests/jackett.nix b/nixos/tests/jackett.nix
index c749c32ad04..0a706c99b99 100644
--- a/nixos/tests/jackett.nix
+++ b/nixos/tests/jackett.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix ({ lib, ... }:
+import ./make-test-python.nix ({ lib, ... }:
 
 with lib;
 
@@ -11,8 +11,9 @@ with lib;
     { services.jackett.enable = true; };
 
   testScript = ''
-    $machine->waitForUnit('jackett.service');
-    $machine->waitForOpenPort('9117');
-    $machine->succeed("curl --fail http://localhost:9117/");
+    machine.start()
+    machine.wait_for_unit("jackett.service")
+    machine.wait_for_open_port(9117)
+    machine.succeed("curl --fail http://localhost:9117/")
   '';
 })
diff --git a/nixos/tests/kerberos/heimdal.nix b/nixos/tests/kerberos/heimdal.nix
index a0551b131e9..8abae667d04 100644
--- a/nixos/tests/kerberos/heimdal.nix
+++ b/nixos/tests/kerberos/heimdal.nix
@@ -1,4 +1,4 @@
-import ../make-test.nix ({pkgs, ...}: {
+import ../make-test-python.nix ({pkgs, ...}: {
   name = "kerberos_server-heimdal";
   machine = { config, libs, pkgs, ...}:
   { services.kerberos_server =
@@ -23,31 +23,20 @@ import ../make-test.nix ({pkgs, ...}: {
   };
 
   testScript = ''
-    $machine->start;
+    machine.succeed(
+        "kadmin -l init --realm-max-ticket-life='8 day' --realm-max-renewable-life='10 day' FOO.BAR",
+        "systemctl restart kadmind.service kdc.service",
+    )
 
-    $machine->succeed(
-      "kadmin -l init --realm-max-ticket-life='8 day' \\
-       --realm-max-renewable-life='10 day' FOO.BAR"
-    );
+    for unit in ["kadmind", "kdc", "kpasswdd"]:
+        machine.wait_for_unit(f"{unit}.service")
 
-    $machine->succeed("systemctl restart kadmind.service kdc.service");
-    $machine->waitForUnit("kadmind.service");
-    $machine->waitForUnit("kdc.service");
-    $machine->waitForUnit("kpasswdd.service");
-
-    $machine->succeed(
-      "kadmin -l add --password=admin_pw --use-defaults admin"
-    );
-    $machine->succeed(
-      "kadmin -l ext_keytab --keytab=admin.keytab admin"
-    );
-    $machine->succeed(
-      "kadmin -p admin -K admin.keytab add --password=alice_pw --use-defaults \\
-       alice"
-    );
-    $machine->succeed(
-      "kadmin -l ext_keytab --keytab=alice.keytab alice"
-    );
-    $machine->succeed("kinit -kt alice.keytab alice");
+    machine.succeed(
+        "kadmin -l add --password=admin_pw --use-defaults admin",
+        "kadmin -l ext_keytab --keytab=admin.keytab admin",
+        "kadmin -p admin -K admin.keytab add --password=alice_pw --use-defaults alice",
+        "kadmin -l ext_keytab --keytab=alice.keytab alice",
+        "kinit -kt alice.keytab alice",
+    )
   '';
 })
diff --git a/nixos/tests/kerberos/mit.nix b/nixos/tests/kerberos/mit.nix
index 6da3a384aa9..93b4020d499 100644
--- a/nixos/tests/kerberos/mit.nix
+++ b/nixos/tests/kerberos/mit.nix
@@ -1,4 +1,4 @@
-import ../make-test.nix ({pkgs, ...}: {
+import ../make-test-python.nix ({pkgs, ...}: {
   name = "kerberos_server-mit";
   machine = { config, libs, pkgs, ...}:
   { services.kerberos_server =
@@ -24,22 +24,18 @@ import ../make-test.nix ({pkgs, ...}: {
   };
 
   testScript = ''
-    $machine->start;
+    machine.succeed(
+        "kdb5_util create -s -r FOO.BAR -P master_key",
+        "systemctl restart kadmind.service kdc.service",
+    )
 
-    $machine->succeed(
-      "kdb5_util create -s -r FOO.BAR -P master_key"
-    );
+    for unit in ["kadmind", "kdc"]:
+        machine.wait_for_unit(f"{unit}.service")
 
-    $machine->succeed("systemctl restart kadmind.service kdc.service");
-    $machine->waitForUnit("kadmind.service");
-    $machine->waitForUnit("kdc.service");
-
-    $machine->succeed(
-      "kadmin.local add_principal -pw admin_pw admin"
-    );
-    $machine->succeed(
-      "kadmin -p admin -w admin_pw addprinc -pw alice_pw alice"
-    );
-    $machine->succeed("echo alice_pw | sudo -u alice kinit");
+    machine.succeed(
+        "kadmin.local add_principal -pw admin_pw admin",
+        "kadmin -p admin -w admin_pw addprinc -pw alice_pw alice",
+        "echo alice_pw | sudo -u alice kinit",
+    )
   '';
 })
diff --git a/nixos/tests/minidlna.nix b/nixos/tests/minidlna.nix
index 7bf1bed69d0..d852c7f60bc 100644
--- a/nixos/tests/minidlna.nix
+++ b/nixos/tests/minidlna.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix ({ pkgs, ... }: {
+import ./make-test-python.nix ({ pkgs, ... }: {
   name = "minidlna";
 
   nodes = {
@@ -29,11 +29,11 @@ import ./make-test.nix ({ pkgs, ... }: {
 
   testScript =
   ''
-    startAll;
-    $server->succeed("mkdir -p /tmp/stuff && chown minidlna: /tmp/stuff");
-    $server->waitForUnit("minidlna");
-    $server->waitForOpenPort("8200");
-    $server->succeed("curl --fail http://localhost:8200/");
-    $client->succeed("curl --fail http://server:8200/");
+    start_all()
+    server.succeed("mkdir -p /tmp/stuff && chown minidlna: /tmp/stuff")
+    server.wait_for_unit("minidlna")
+    server.wait_for_open_port("8200")
+    server.succeed("curl --fail http://localhost:8200/")
+    client.succeed("curl --fail http://server:8200/")
   '';
 })
diff --git a/nixos/tests/miniflux.nix b/nixos/tests/miniflux.nix
index 19ab4803a1d..7d83d061a9d 100644
--- a/nixos/tests/miniflux.nix
+++ b/nixos/tests/miniflux.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix ({ pkgs, lib, ... }:
+import ./make-test-python.nix ({ pkgs, lib, ... }:
 
 let
   port = 3142;
@@ -37,16 +37,20 @@ with lib;
       };
   };
   testScript = ''
-    startAll;
+    start_all()
 
-    $default->waitForUnit('miniflux.service');
-    $default->waitForOpenPort(${toString defaultPort});
-    $default->succeed("curl --fail 'http://localhost:${toString defaultPort}/healthcheck' | grep -q OK");
-    $default->succeed("curl 'http://localhost:${toString defaultPort}/v1/me' -u '${defaultUsername}:${defaultPassword}' -H Content-Type:application/json | grep -q '\"is_admin\":true'");
+    default.wait_for_unit("miniflux.service")
+    default.wait_for_open_port(${toString defaultPort})
+    default.succeed("curl --fail 'http://localhost:${toString defaultPort}/healthcheck' | grep -q OK")
+    default.succeed(
+        "curl 'http://localhost:${toString defaultPort}/v1/me' -u '${defaultUsername}:${defaultPassword}' -H Content-Type:application/json | grep -q '\"is_admin\":true'"
+    )
 
-    $customized->waitForUnit('miniflux.service');
-    $customized->waitForOpenPort(${toString port});
-    $customized->succeed("curl --fail 'http://localhost:${toString port}/healthcheck' | grep -q OK");
-    $customized->succeed("curl 'http://localhost:${toString port}/v1/me' -u '${username}:${password}' -H Content-Type:application/json | grep -q '\"is_admin\":true'");
+    customized.wait_for_unit("miniflux.service")
+    customized.wait_for_open_port(${toString port})
+    customized.succeed("curl --fail 'http://localhost:${toString port}/healthcheck' | grep -q OK")
+    customized.succeed(
+        "curl 'http://localhost:${toString port}/v1/me' -u '${username}:${password}' -H Content-Type:application/json | grep -q '\"is_admin\":true'"
+    )
   '';
 })
diff --git a/nixos/tests/mongodb.nix b/nixos/tests/mongodb.nix
index 0ccbeb062f9..9ebf84eed23 100644
--- a/nixos/tests/mongodb.nix
+++ b/nixos/tests/mongodb.nix
@@ -1,6 +1,6 @@
 # This test start mongodb, runs a query using mongo shell
 
-import ./make-test.nix ({ pkgs, ...} : let
+import ./make-test-python.nix ({ pkgs, ...} : let
   testQuery = pkgs.writeScript "nixtest.js" ''
     db.greetings.insert({ "greeting": "hello" });
     print(db.greetings.findOne().greeting);
@@ -33,8 +33,10 @@ in {
     };
 
   testScript = ''
-    startAll;
-    $one->waitForUnit("mongodb.service");
-    $one->succeed("mongo -u nixtest -p nixtest nixtest ${testQuery}") =~ /hello/ or die;
+    start_all()
+    one.wait_for_unit("mongodb.service")
+    one.succeed(
+        "mongo -u nixtest -p nixtest nixtest ${testQuery} | grep -q hello"
+    )
   '';
 })
diff --git a/nixos/tests/mosquitto.nix b/nixos/tests/mosquitto.nix
index b4c897c3ab5..1f2fdf4237f 100644
--- a/nixos/tests/mosquitto.nix
+++ b/nixos/tests/mosquitto.nix
@@ -1,21 +1,10 @@
-import ./make-test.nix ({ pkgs, ... }:
+import ./make-test-python.nix ({ pkgs, ... }:
 
 let
   port = 1888;
   username = "mqtt";
   password = "VERY_secret";
   topic = "test/foo";
-
-  cmd = bin: pkgs.lib.concatStringsSep " " [
-    "${pkgs.mosquitto}/bin/mosquitto_${bin}"
-    "-V mqttv311"
-    "-h server"
-    "-p ${toString port}"
-    "-u ${username}"
-    "-P '${password}'"
-    "-t ${topic}"
-  ];
-
 in {
   name = "mosquitto";
   meta = with pkgs.stdenv.lib; {
@@ -49,40 +38,53 @@ in {
 
   testScript = let
     file = "/tmp/msg";
-    sub = args:
-      "(${cmd "sub"} -C 1 ${args} | tee ${file} &)";
   in ''
-    startAll;
-    $server->waitForUnit("mosquitto.service");
+    def mosquitto_cmd(binary):
+        return (
+            "${pkgs.mosquitto}/bin/mosquitto_{} "
+            "-V mqttv311 "
+            "-h server "
+            "-p ${toString port} "
+            "-u ${username} "
+            "-P '${password}' "
+            "-t ${topic}"
+        ).format(binary)
+
+
+    def publish(args):
+        return "{} {}".format(mosquitto_cmd("pub"), args)
+
 
-    $server->fail("test -f ${file}");
-    $client1->fail("test -f ${file}");
-    $client2->fail("test -f ${file}");
+    def subscribe(args):
+        return "({} -C 1 {} | tee ${file} &)".format(mosquitto_cmd("sub"), args)
 
 
+    start_all()
+    server.wait_for_unit("mosquitto.service")
+
+    for machine in server, client1, client2:
+        machine.fail("test -f ${file}")
+
     # QoS = 0, so only one subscribers should get it
-    $server->execute("${sub "-q 0"}");
+    server.execute(subscribe("-q 0"))
 
     # we need to give the subscribers some time to connect
-    $client2->execute("sleep 5");
-    $client2->succeed("${cmd "pub"} -m FOO -q 0");
-
-    $server->waitUntilSucceeds("grep -q FOO ${file}");
-    $server->execute("rm ${file}");
+    client2.execute("sleep 5")
+    client2.succeed(publish("-m FOO -q 0"))
 
+    server.wait_until_succeeds("grep -q FOO ${file}")
+    server.execute("rm ${file}")
 
     # QoS = 1, so both subscribers should get it
-    $server->execute("${sub "-q 1"}");
-    $client1->execute("${sub "-q 1"}");
+    server.execute(subscribe("-q 1"))
+    client1.execute(subscribe("-q 1"))
 
     # we need to give the subscribers some time to connect
-    $client2->execute("sleep 5");
-    $client2->succeed("${cmd "pub"} -m BAR -q 1");
-
-    $server->waitUntilSucceeds("grep -q BAR ${file}");
-    $server->execute("rm ${file}");
+    client2.execute("sleep 5")
+    client2.succeed(publish("-m BAR -q 1"))
 
-    $client1->waitUntilSucceeds("grep -q BAR ${file}");
-    $client1->execute("rm ${file}");
+    for machine in server, client1:
+        machine.wait_until_succeeds("grep -q BAR ${file}")
+        machine.execute("rm ${file}")
   '';
 })
diff --git a/nixos/tests/mpd.nix b/nixos/tests/mpd.nix
index a992576808d..895b7e2014c 100644
--- a/nixos/tests/mpd.nix
+++ b/nixos/tests/mpd.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix ({ pkgs, lib, ... }:
+import ./make-test-python.nix ({ pkgs, lib, ... }:
   let
     track = pkgs.fetchurl {
       # Sourced from http://freemusicarchive.org/music/Blue_Wave_Theory/Surf_Music_Month_Challenge/Skyhawk_Beach_fade_in
@@ -94,40 +94,39 @@ import ./make-test.nix ({ pkgs, lib, ... }:
     };
 
   testScript = ''
-    my $mpc = "${pkgs.mpc_cli}/bin/mpc --wait";
+    mpc = "${pkgs.mpc_cli}/bin/mpc --wait"
 
     # Connects to the given server and attempts to play a tune.
-    sub play_some_music {
-        my $server = $_[0];
+    def play_some_music(server):
+        server.wait_for_unit("mpd.service")
+        server.succeed(f"{mpc} update")
+        _, tracks = server.execute(f"{mpc} ls")
 
-        $server->waitForUnit("mpd.service");
-        $server->succeed("$mpc update");
-        my @tracks = $server->execute("$mpc ls");
+        for track in tracks.splitlines():
+            server.succeed(f"{mpc} add {track}")
 
-        for my $track (split(/\n/, $tracks[1])) {
-            $server->succeed("$mpc add $track");
-        };
+        _, added_tracks = server.execute(f"{mpc} listall")
 
-        my @added_tracks = $server->execute("$mpc listall");
-        (length $added_tracks[1]) > 0 or die "Failed to add audio tracks to the playlist.";
+        # Check we succeeded adding audio tracks to the playlist
+        assert len(added_tracks.splitlines()) > 0
 
-        $server->succeed("$mpc play");
+        server.succeed(f"{mpc} play")
 
-        my @status = $server->execute("$mpc status");
-        my @output = split(/\n/, $status[1]);
-        $output[1] =~ /.*playing.*/ or die "Audio track is not playing, as expected.";
+        _, output = server.execute(f"{mpc} status")
+        # Assure audio track is playing
+        assert "playing" in output
+
+        server.succeed(f"{mpc} stop")
 
-        $server->succeed("$mpc stop");
-    };
 
-    play_some_music($serverALSA);
-    play_some_music($serverPulseAudio);
+    play_some_music(serverALSA)
+    play_some_music(serverPulseAudio)
 
-    $client->waitForUnit("multi-user.target");
-    $client->succeed("$mpc -h serverALSA status");
+    client.wait_for_unit("multi-user.target")
+    client.succeed(f"{mpc} -h serverALSA status")
 
     # The PulseAudio-based server is configured not to accept external client connections
     # to perform the following test:
-    $client->fail("$mpc -h serverPulseAudio status");
+    client.fail(f"{mpc} -h serverPulseAudio status")
   '';
 })
diff --git a/nixos/tests/neo4j.nix b/nixos/tests/neo4j.nix
index 86ed8970517..32ee7f501b8 100644
--- a/nixos/tests/neo4j.nix
+++ b/nixos/tests/neo4j.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix {
+import ./make-test-python.nix {
   name = "neo4j";
 
   nodes = {
@@ -11,10 +11,10 @@ import ./make-test.nix {
   };
 
   testScript = ''
-    startAll;
+    start_all()
 
-    $master->waitForUnit("neo4j");
-    $master->sleep(20); # Hopefully this is long enough!!
-    $master->succeed("curl http://localhost:7474/");
+    master.wait_for_unit("neo4j")
+    master.wait_for_open_port(7474)
+    master.succeed("curl http://localhost:7474/")
   '';
 }
diff --git a/nixos/tests/roundcube.nix b/nixos/tests/roundcube.nix
index 4dccb411ff4..1897b53e283 100644
--- a/nixos/tests/roundcube.nix
+++ b/nixos/tests/roundcube.nix
@@ -21,11 +21,10 @@ import ./make-test-python.nix ({ pkgs, ...} : {
   };
 
   testScript = ''
-    $roundcube->start;
-    $roundcube->waitForUnit("postgresql.service");
-    $roundcube->waitForUnit("roundcube-setup.service");
-    $roundcube->waitForUnit("phpfpm-roundcube.service");
-    $roundcube->waitForUnit("nginx.service");
-    $roundcube->succeed("curl -sSfL http://roundcube/ | grep 'Keep me logged in'");
+    roundcube.start
+    roundcube.wait_for_unit("postgresql.service")
+    roundcube.wait_for_unit("phpfpm-roundcube.service")
+    roundcube.wait_for_unit("nginx.service")
+    roundcube.succeed("curl -sSfL http://roundcube/ | grep 'Keep me logged in'")
   '';
 })
diff --git a/nixos/tests/rxe.nix b/nixos/tests/rxe.nix
index d0b53db8eeb..194a2e3d2b9 100644
--- a/nixos/tests/rxe.nix
+++ b/nixos/tests/rxe.nix
@@ -1,4 +1,4 @@
-import ./make-test.nix ({ ... } :
+import ./make-test-python.nix ({ ... } :
 
 let
   node = { pkgs, ... } : {
@@ -26,27 +26,21 @@ in {
 
   testScript = ''
     # Test if rxe interface comes up
-    $server->waitForUnit("default.target");
-    $server->succeed("systemctl status rxe.service");
-    $server->succeed("ibv_devices | grep rxe0");
+    server.wait_for_unit("default.target")
+    server.succeed("systemctl status rxe.service")
+    server.succeed("ibv_devices | grep rxe0")
 
-    $client->waitForUnit("default.target");
+    client.wait_for_unit("default.target")
 
-    # ping pong test
-    $server->succeed("screen -dmS rc_pingpong ibv_rc_pingpong -p 4800 -g0");
-    $client->succeed("sleep 2; ibv_rc_pingpong -p 4800 -g0 server");
+    # ping pong tests
+    for proto in "rc", "uc", "ud", "srq":
+        server.succeed(
+            "screen -dmS {0}_pingpong ibv_{0}_pingpong -p 4800 -s 1024 -g0".format(proto)
+        )
+        client.succeed("sleep 2; ibv_{}_pingpong -p 4800 -s 1024 -g0 server".format(proto))
 
-    $server->succeed("screen -dmS uc_pingpong ibv_uc_pingpong -p 4800 -g0");
-    $client->succeed("sleep 2; ibv_uc_pingpong -p 4800 -g0 server");
-
-    $server->succeed("screen -dmS ud_pingpong ibv_ud_pingpong -p 4800 -s 1024 -g0");
-    $client->succeed("sleep 2; ibv_ud_pingpong -p 4800 -s 1024 -g0 server");
-
-    $server->succeed("screen -dmS srq_pingpong ibv_srq_pingpong -p 4800 -g0");
-    $client->succeed("sleep 2; ibv_srq_pingpong -p 4800 -g0 server");
-
-    $server->succeed("screen -dmS rping rping -s -a server -C 10");
-    $client->succeed("sleep 2; rping -c -a server -C 10");
+    server.succeed("screen -dmS rping rping -s -a server -C 10")
+    client.succeed("sleep 2; rping -c -a server -C 10")
   '';
 })
 
diff --git a/nixos/tests/systemd-networkd-wireguard.nix b/nixos/tests/systemd-networkd-wireguard.nix
index aa0ac54e796..b83e9c7ce19 100644
--- a/nixos/tests/systemd-networkd-wireguard.nix
+++ b/nixos/tests/systemd-networkd-wireguard.nix
@@ -45,7 +45,7 @@ let generateNodeConf = { lib, pkgs, config, privkpath, pubk, peerId, nodeId, ...
         };
       };
     };
-in import ./make-test.nix ({pkgs, ... }: {
+in import ./make-test-python.nix ({pkgs, ... }: {
   name = "networkd-wireguard";
   meta = with pkgs.stdenv.lib.maintainers; {
     maintainers = [ ninjatrappeur ];
@@ -70,12 +70,12 @@ in import ./make-test.nix ({pkgs, ... }: {
     in generateNodeConf (attrs // localConf);
   };
 testScript = ''
-    startAll;
-    $node1->waitForUnit('systemd-networkd-wait-online.service');
-    $node2->waitForUnit('systemd-networkd-wait-online.service');
-    $node1->succeed('ping -c 5 10.0.0.2');
-    $node2->succeed('ping -c 5 10.0.0.1');
+    start_all()
+    node1.wait_for_unit("systemd-networkd-wait-online.service")
+    node2.wait_for_unit("systemd-networkd-wait-online.service")
+    node1.succeed("ping -c 5 10.0.0.2")
+    node2.succeed("ping -c 5 10.0.0.1")
     # Is the fwmark set?
-    $node2->succeed('wg | grep -q 42');
+    node2.succeed("wg | grep -q 42")
 '';
 })
diff --git a/nixos/tests/yggdrasil.nix b/nixos/tests/yggdrasil.nix
index 0ef42a0180c..468fcf67127 100644
--- a/nixos/tests/yggdrasil.nix
+++ b/nixos/tests/yggdrasil.nix
@@ -19,7 +19,7 @@ let
     SigningPrivateKey = "2a6c21550f3fca0331df50668ffab66b6dce8237bcd5728e571e8033b363e247de111da0ec781e45bf6c63ecb45a78c24d7d4655abfaeea83b26c36eb5c0fd5b";
   };
 
-in import ./make-test.nix ({ pkgs, ...} : {
+in import ./make-test-python.nix ({ pkgs, ...} : {
   name = "yggdrasil";
   meta = with pkgs.stdenv.lib.maintainers; {
     maintainers = [ gazally ];
@@ -91,33 +91,35 @@ in import ./make-test.nix ({ pkgs, ...} : {
 
   testScript =
     ''
+      import re
+
       # Give Alice a head start so she is ready when Bob calls.
-      $alice->start;
-      $alice->waitForUnit("yggdrasil.service");
+      alice.start()
+      alice.wait_for_unit("yggdrasil.service")
 
-      $bob->start;
-      $carol->start;
-      $bob->waitForUnit("yggdrasil.service");
-      $carol->waitForUnit("yggdrasil.service");
+      bob.start()
+      carol.start()
+      bob.wait_for_unit("yggdrasil.service")
+      carol.wait_for_unit("yggdrasil.service")
 
-      $carol->waitUntilSucceeds("[ `ip -o -6 addr show dev ygg0 scope global | grep -v tentative | wc -l` -ge 1 ]");
-      my $carolIp6 = (split /[ \/]+/, $carol->succeed("ip -o -6 addr show dev ygg0 scope global"))[3];
+      ip_addr_show = "ip -o -6 addr show dev ygg0 scope global"
+      carol.wait_until_succeeds(f"[ `{ip_addr_show} | grep -v tentative | wc -l` -ge 1 ]")
+      carol_ip6 = re.split(" +|/", carol.succeed(ip_addr_show))[3]
 
       # If Alice can talk to Carol, then Bob's outbound peering and Carol's
       # local peering have succeeded and everybody is connected.
-      $alice->waitUntilSucceeds("ping -c 1 $carolIp6");
-      $alice->succeed("ping -c 1 ${bobIp6}");
-
-      $bob->succeed("ping -c 1 ${aliceIp6}");
-      $bob->succeed("ping -c 1 $carolIp6");
+      alice.wait_until_succeeds(f"ping -c 1 {carol_ip6}")
+      alice.succeed(f"ping -c 1 ${bobIp6}")
 
-      $carol->succeed("ping -c 1 ${aliceIp6}");
-      $carol->succeed("ping -c 1 ${bobIp6}");
+      bob.succeed("ping -c 1 ${aliceIp6}")
+      bob.succeed(f"ping -c 1 {carol_ip6}")
 
-      $carol->fail("journalctl -u dhcpcd | grep ygg0");
+      carol.succeed("ping -c 1 ${aliceIp6}")
+      carol.succeed("ping -c 1 ${bobIp6}")
 
-      $alice->waitForUnit("httpd.service");
-      $carol->succeed("curl --fail -g http://[${aliceIp6}]");
+      carol.fail("journalctl -u dhcpcd | grep ygg0")
 
+      alice.wait_for_unit("httpd.service")
+      carol.succeed("curl --fail -g http://[${aliceIp6}]")
     '';
 })
diff --git a/pkgs/applications/audio/gnome-podcasts/default.nix b/pkgs/applications/audio/gnome-podcasts/default.nix
index eeafdc80344..7a44ebe6769 100644
--- a/pkgs/applications/audio/gnome-podcasts/default.nix
+++ b/pkgs/applications/audio/gnome-podcasts/default.nix
@@ -1,45 +1,74 @@
-{ stdenv, fetchurl, fetchpatch, meson, ninja, gettext, cargo, rustc, python3, pkgconfig, gnome3
-, glib, libhandy, gtk3, dbus, openssl, sqlite, gst_all_1, wrapGAppsHook }:
+{ stdenv
+, rustPlatform
+, fetchFromGitLab
+, fetchpatch
+, meson
+, ninja
+, gettext
+, cargo
+, rustc
+, python3
+, pkgconfig
+, gnome3
+, glib
+, libhandy
+, gtk3
+, dbus
+, openssl
+, sqlite
+, gst_all_1
+, wrapGAppsHook
+}:
 
-# TODO: build from git for easier updates
-# rustPlatform.buildRustPackage rec {
-stdenv.mkDerivation {
-  version = "0.4.6";
+rustPlatform.buildRustPackage rec {
+  version = "0.4.7";
   pname = "gnome-podcasts";
 
-  src = fetchurl {
-    url = https://gitlab.gnome.org/World/podcasts/uploads/e59ac5d618d7daf4c7f33ba72957c466/gnome-podcasts-0.4.6.tar.xz;
-    sha256 = "0g2rk3w251fp5jwbxs5ya1adv8nsgdqjy1vmfg8qqab6qyndhbrc";
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "World";
+    repo = "podcasts";
+    rev = version;
+    sha256 = "0vy5i77bv8c22ldhrnr4z6kx22zqnb1lg3s7y8673bqjgd7dppi0";
   };
 
-  patches = [
-    # podcasts-data would fail to build because it errors on warnings
-    (fetchpatch {
-      url = "https://gitlab.gnome.org/World/podcasts/commit/7dc1b25ee7fc59a188312d31b1fa00c3110ae63e.patch";
-      sha256 = "03ibbh1snk1391vnni529agqs14lzg5g0axjgpf3gn8dwwh1yvd5";
-    })
-  ];
-
-  # src = fetchFromGitLab {
-  #   domain = "gitlab.gnome.org";
-  #   owner = "World";
-  #   repo = "podcasts";
-  #   rev = version;
-  #   sha256 = "15xj98dhxvys0cnya9488qsfsm0ys1wy69wkc39z8j6hwdm7byq2";
-  # };
+  cargoSha256 = "1h0n8zclb8a1b1ri83viiwwzlj3anm38m4cp38aqyf6q40qga35q";
 
   nativeBuildInputs = [
-    meson ninja pkgconfig gettext cargo rustc python3 wrapGAppsHook
+    meson
+    ninja
+    pkgconfig
+    gettext
+    cargo
+    rustc
+    python3
+    wrapGAppsHook
   ];
+
   buildInputs = [
-    glib gtk3 libhandy dbus openssl sqlite gst_all_1.gstreamer gst_all_1.gst-plugins-base gst_all_1.gst-plugins-bad
+    glib
+    gtk3
+    libhandy
+    dbus
+    openssl
+    sqlite
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-bad
   ];
 
-  # cargoSha256 = "0721b5f700vvvzvmdl8nfjaa6j412q1fjssgrjv8n6rmn9z13d2v";
+  # use Meson/Ninja phases
+  configurePhase = null;
+  buildPhase = null;
+  checkPhase = null;
+  installPhase = null;
+
+  # tests require network
+  doCheck = false;
 
   postPatch = ''
     chmod +x scripts/compile-gschema.py # patchShebangs requires executable file
-    patchShebangs scripts/compile-gschema.py
+    patchShebangs scripts/compile-gschema.py scripts/cargo.sh scripts/test.sh
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/applications/audio/strawberry/default.nix b/pkgs/applications/audio/strawberry/default.nix
index c62eba99845..315bb624e51 100644
--- a/pkgs/applications/audio/strawberry/default.nix
+++ b/pkgs/applications/audio/strawberry/default.nix
@@ -22,7 +22,7 @@
 , libpulseaudio ? null
 , libselinux ? null
 , libsepol ? null
-, p11_kit ? null
+, p11-kit ? null
 , utillinux ? null
 , qtbase
 , qtx11extras
@@ -66,7 +66,7 @@ mkDerivation rec {
     libpulseaudio
     libselinux
     libsepol
-    p11_kit
+    p11-kit
     utillinux
   ]
   ++ lib.optionals withGstreamer (with gst_all_1; [
diff --git a/pkgs/applications/backup/deja-dup/default.nix b/pkgs/applications/backup/deja-dup/default.nix
index 7120a1934f6..d19314ce9ce 100644
--- a/pkgs/applications/backup/deja-dup/default.nix
+++ b/pkgs/applications/backup/deja-dup/default.nix
@@ -1,20 +1,46 @@
-{ stdenv, fetchFromGitLab, substituteAll, meson, ninja, pkgconfig, vala_0_40, gettext
-, gnome3, libnotify, itstool, glib, gtk3, libxml2, gnome-online-accounts
-, coreutils, libpeas, libsecret, pcre, libxkbcommon, wrapGAppsHook
-, libpthreadstubs, libXdmcp, epoxy, at-spi2-core, dbus, libgpgerror
-, appstream-glib, desktop-file-utils, duplicity
+{ stdenv
+, fetchFromGitLab
+, substituteAll
+, meson
+, ninja
+, pkgconfig
+, vala
+, gettext
+, gnome3
+, libnotify
+, itstool
+, glib
+, gtk3
+, libxml2
+, gnome-online-accounts
+, coreutils
+, libsoup
+, libsecret
+, pcre
+, libxkbcommon
+, wrapGAppsHook
+, libpthreadstubs
+, libXdmcp
+, epoxy
+, at-spi2-core
+, dbus
+, libgpgerror
+, json-glib
+, appstream-glib
+, desktop-file-utils
+, duplicity
 }:
 
 stdenv.mkDerivation rec {
   pname = "deja-dup";
-  version = "38.3";
+  version = "40.4";
 
   src = fetchFromGitLab {
     domain = "gitlab.gnome.org";
     owner = "World";
     repo = pname;
     rev = version;
-    sha256 = "1bnvmdlm67k1b6115x75j3nl92x5yl4psq5pna2w6cg9npxdd3fa";
+    sha256 = "0x9z8z1mh1sxi28ilml3pvbc0g6ghcbyiy002rziwwlarxnbwkky";
   };
 
   patches = [
@@ -22,37 +48,55 @@ stdenv.mkDerivation rec {
       src = ./fix-paths.patch;
       inherit coreutils;
     })
+
+    # Hardcode GSettings path for Nautilus extension to avoid crashes from missing schemas
     ./hardcode-gsettings.patch
   ];
 
   postPatch = ''
-    substituteInPlace deja-dup/nautilus/NautilusExtension.c --subst-var-by DEJA_DUP_GSETTINGS_PATH ${glib.makeSchemaPath "$out" "${pname}-${version}"}
+    # substitute variable from hardcode-gsettings.patch
+    substituteInPlace deja-dup/nautilus/NautilusExtension.c --subst-var-by DEJA_DUP_GSETTINGS_PATH "${glib.makeSchemaPath (placeholder "out") "${pname}-${version}"}"
   '';
 
   nativeBuildInputs = [
-    meson ninja pkgconfig vala_0_40 gettext itstool
-    appstream-glib desktop-file-utils libxml2 wrapGAppsHook
+    meson
+    ninja
+    pkgconfig
+    vala
+    gettext
+    itstool
+    appstream-glib
+    desktop-file-utils
+    libxml2
+    wrapGAppsHook
   ];
 
   buildInputs = [
-   libnotify libpeas glib gtk3 libsecret
-   pcre libxkbcommon libpthreadstubs libXdmcp epoxy gnome3.nautilus
-   at-spi2-core dbus gnome-online-accounts libgpgerror
+    libnotify
+    libsoup
+    glib
+    gtk3
+    libsecret
+    pcre
+    libxkbcommon
+    libpthreadstubs
+    libXdmcp
+    epoxy
+    gnome3.nautilus
+    at-spi2-core
+    dbus
+    gnome-online-accounts # GOA not used any more, only for transferring legacy keys
+    libgpgerror
+    json-glib
   ];
 
+  # TODO: hard code the path
+  # https://gitlab.gnome.org/World/deja-dup/merge_requests/32
   propagatedUserEnvPkgs = [ duplicity ];
 
+  # install nautilus plug-in to correct path
   PKG_CONFIG_LIBNAUTILUS_EXTENSION_EXTENSIONDIR = "${placeholder "out"}/lib/nautilus/extensions-3.0";
 
-  postInstall = ''
-    glib-compile-schemas $out/share/glib-2.0/schemas
-  '';
-
-  postFixup = ''
-    # Unwrap accidentally wrapped library
-    mv $out/libexec/deja-dup/tools/.libduplicity.so-wrapped $out/libexec/deja-dup/tools/libduplicity.so
-  '';
-
   meta = with stdenv.lib; {
     description = "A simple backup tool";
     longDescription = ''
@@ -60,7 +104,7 @@ stdenv.mkDerivation rec {
       of backing up the Right Way (encrypted, off-site, and regular) \
       and uses duplicity as the backend.
     '';
-    homepage = https://wiki.gnome.org/Apps/DejaDup;
+    homepage = "https://wiki.gnome.org/Apps/DejaDup";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ jtojnar joncojonathan ];
     platforms = platforms.linux;
diff --git a/pkgs/applications/backup/deja-dup/hardcode-gsettings.patch b/pkgs/applications/backup/deja-dup/hardcode-gsettings.patch
index 50bf2ba4fbd..f74dbf73543 100644
--- a/pkgs/applications/backup/deja-dup/hardcode-gsettings.patch
+++ b/pkgs/applications/backup/deja-dup/hardcode-gsettings.patch
@@ -1,38 +1,16 @@
 --- a/deja-dup/nautilus/NautilusExtension.c
 +++ b/deja-dup/nautilus/NautilusExtension.c
-@@ -24,6 +24,8 @@
- #include <glib/gi18n-lib.h>
- 
- GList *dirs = NULL;
-+GSettingsSchemaSource *schema_source = NULL;
-+GSettingsSchema *schema = NULL;
- GSettings *settings = NULL;
- 
- // This will treat a < b iff a is 'lower' in the file tree than b
-@@ -313,7 +315,13 @@
+@@ -313,7 +313,12 @@
    bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR);
    bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
  
--  settings = g_settings_new("org.gnome.DejaDup");
-+  schema_source = g_settings_schema_source_new_from_directory ("@DEJA_DUP_GSETTINGS_PATH@",
+-  settings = g_settings_new(APPLICATION_ID);
++  g_autoptr (GSettingsSchemaSource) schema_source = g_settings_schema_source_new_from_directory ("@DEJA_DUP_GSETTINGS_PATH@",
 +    g_settings_schema_source_get_default (), TRUE, NULL);
 +
-+  schema = g_settings_schema_source_lookup (schema_source,
-+                                            "org.gnome.DejaDup", FALSE);
++  g_autoptr (GSettingsSchema) schema = g_settings_schema_source_lookup (schema_source, APPLICATION_ID, FALSE);
 +
 +  settings = g_settings_new_full (schema, NULL, NULL);
    g_signal_connect(settings, "changed::include-list",
                     update_include_excludes, NULL);
    g_signal_connect(settings, "changed::exclude-list",
-@@ -329,7 +337,11 @@
- 
- void nautilus_module_shutdown(void)
- {
-+  g_settings_schema_source_unref(schema_source);
-+  g_settings_schema_unref(schema);
-   g_object_unref(settings);
-+  schema_source = NULL;
-+  schema = NULL;
-   settings = NULL;
- 
-   update_include_excludes(); /* will clear it now that settings is NULL */
diff --git a/pkgs/applications/blockchains/parity/beta.nix b/pkgs/applications/blockchains/parity/beta.nix
index a26a1b7cc77..c9da6f0e7a8 100644
--- a/pkgs/applications/blockchains/parity/beta.nix
+++ b/pkgs/applications/blockchains/parity/beta.nix
@@ -1,6 +1,6 @@
 let
-  version     = "2.6.4";
-  sha256      = "11l93w97961zig4gqf345j9l20g0mjp7fayl1mdwdp14hhd5zk5g";
-  cargoSha256 = "1q6cbms7j1h726bvq38npxkjkmz14b5ir9c4z7pb0jcy7gkplyxx";
+  version     = "2.6.5";
+  sha256      = "1ykrsphqil68051wwp9b0259gsmfrj9xmx0pfhh2yvmmjzv7k4fv";
+  cargoSha256 = "1xqmnirx2r91q5gy1skxl0f79xvaqzimq3l0cj4xvfms7mpdfbg1";
 in
   import ./parity.nix { inherit version sha256 cargoSha256; }
diff --git a/pkgs/applications/blockchains/parity/default.nix b/pkgs/applications/blockchains/parity/default.nix
index 299bb0639b6..ba3491e084d 100644
--- a/pkgs/applications/blockchains/parity/default.nix
+++ b/pkgs/applications/blockchains/parity/default.nix
@@ -1,6 +1,6 @@
 let
-  version     = "2.5.9";
-  sha256      = "06gmfw5l8n5i35dimsmj6dn0fxhbp53zjrdvbkff63r5kfqnwnx2";
-  cargoSha256 = "1kdy0bnmyqx4rhpq0a8gliy6mws68n035kfkxrfa6cxr2cn53dyb";
+  version     = "2.5.10";
+  sha256      = "0s8llcb1xdzs2zb6rnbsa9hck7dj4m8mamzkkvr0xjmgvigskf64";
+  cargoSha256 = "16nf6y0hyffwdhxn1w4ms4zycs5lkzir8sj6c2lgsabig057hb6z";
 in
   import ./parity.nix { inherit version sha256 cargoSha256; }
diff --git a/pkgs/applications/display-managers/lightdm/default.nix b/pkgs/applications/display-managers/lightdm/default.nix
index 4d221e97099..952aa285637 100644
--- a/pkgs/applications/display-managers/lightdm/default.nix
+++ b/pkgs/applications/display-managers/lightdm/default.nix
@@ -27,6 +27,7 @@
 , qt4
 , withQt5 ? false
 , qtbase
+, yelp-tools
 }:
 
 with stdenv.lib;
@@ -47,7 +48,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [
     autoconf
     automake
-    gnome3.yelp-tools
+    yelp-tools
     gnome3.yelp-xsl
     gobject-introspection
     gtk-doc
diff --git a/pkgs/applications/editors/gobby/default.nix b/pkgs/applications/editors/gobby/default.nix
index 3abe2834db4..f194227932d 100644
--- a/pkgs/applications/editors/gobby/default.nix
+++ b/pkgs/applications/editors/gobby/default.nix
@@ -1,5 +1,5 @@
 { avahiSupport ? false # build support for Avahi in libinfinity
-, stdenv, fetchFromGitHub, autoconf, automake, pkgconfig, wrapGAppsHook
+, stdenv, fetchFromGitHub, autoconf, automake, pkgconfig, wrapGAppsHook, yelp-tools
 , gtkmm3, gsasl, gtksourceview3, libxmlxx, libinfinity, intltool, itstool, gnome3 }:
 
 let
@@ -13,7 +13,7 @@ in stdenv.mkDerivation {
     sha256 = "0q7lq64yn16lxvj4jphs8y9194h0xppj8k7y9x8b276krraak2az";
   };
 
-  nativeBuildInputs = [ autoconf automake pkgconfig intltool itstool gnome3.yelp-tools wrapGAppsHook ];
+  nativeBuildInputs = [ autoconf automake pkgconfig intltool itstool yelp-tools wrapGAppsHook ];
   buildInputs = [ gtkmm3 gsasl gtksourceview3 libxmlxx libinf ];
 
   preConfigure = "./autogen.sh";
diff --git a/pkgs/applications/editors/neovim/default.nix b/pkgs/applications/editors/neovim/default.nix
index 99b04059730..b3e2ed51015 100644
--- a/pkgs/applications/editors/neovim/default.nix
+++ b/pkgs/applications/editors/neovim/default.nix
@@ -21,13 +21,13 @@ let
 in
   stdenv.mkDerivation rec {
     pname = "neovim-unwrapped";
-    version = "0.4.2";
+    version = "0.4.3";
 
     src = fetchFromGitHub {
       owner = "neovim";
       repo = "neovim";
       rev = "v${version}";
-      sha256 = "13w446plvgl219lhj29jyimhiqvs1y1byrz4qpdmxgyddmx9xqss";
+      sha256 = "03p7pic7hw9yxxv7fbgls1f42apx3lik2k6mpaz1a109ngyc5kaj";
     };
 
     patches = [
diff --git a/pkgs/applications/graphics/gimp/default.nix b/pkgs/applications/graphics/gimp/default.nix
index e53deb99b5b..a67a03b3e07 100644
--- a/pkgs/applications/graphics/gimp/default.nix
+++ b/pkgs/applications/graphics/gimp/default.nix
@@ -52,6 +52,8 @@ in stdenv.mkDerivation rec {
   pname = "gimp";
   version = "2.10.14";
 
+  outputs = [ "out" "dev" ];
+
   src = fetchurl {
     url = "http://download.gimp.org/pub/gimp/v${lib.versions.majorMinor version}/${pname}-${version}.tar.bz2";
     sha256 = "0m6wdnfvsxyhimdd4v3351g4r1fklllnbipbwcfym3h7q88hz6yz";
diff --git a/pkgs/applications/graphics/gimp/plugins/default.nix b/pkgs/applications/graphics/gimp/plugins/default.nix
index 29c1445b9ce..fa29c979b05 100644
--- a/pkgs/applications/graphics/gimp/plugins/default.nix
+++ b/pkgs/applications/graphics/gimp/plugins/default.nix
@@ -68,13 +68,20 @@ stdenv.lib.makeScope pkgs.newScope (self: with self; {
        Filters/Generic/FFT Forward
        Filters/Generic/FFT Inverse
     */
-    name = "fourier-0.4.1";
+    name = "fourier-0.4.3";
     buildInputs = with pkgs; [ fftw ];
-    postInstall = "fail";
-    installPhase = "installPlugins fourier";
+
     src = fetchurl {
-      url = "http://registry.gimp.org/files/${name}.tar.gz";
-      sha256 = "1pr3y3zl9w8xs1circdrxpr98myz9m8wfzy022al79z4pdanwvs1";
+      url = "https://www.lprp.fr/files/old-web/soft/gimp/${name}.tar.gz";
+      sha256 = "0mf7f8vaqs2madx832x3kcxw3hv3w3wampvzvaps1mkf2kvrjbsn";
+    };
+
+    installPhase = "installPlugins fourier";
+
+    meta = with stdenv.lib; {
+      description = "GIMP plug-in to do the fourier transform";
+      homepage = "https://people.via.ecp.fr/~remi/soft/gimp/gimp_plugin_en.php3#fourier";
+      license = with licenses; [ gpl3Plus ];
     };
   };
 
diff --git a/pkgs/applications/graphics/glabels/default.nix b/pkgs/applications/graphics/glabels/default.nix
index 3bfd51d0370..fef296f45be 100644
--- a/pkgs/applications/graphics/glabels/default.nix
+++ b/pkgs/applications/graphics/glabels/default.nix
@@ -1,6 +1,6 @@
 { stdenv, fetchurl, barcode, gnome3, autoreconfHook
 , gtk3, gtk-doc, libxml2, librsvg , libtool, libe-book, gsettings-desktop-schemas
-, intltool, itstool, makeWrapper, pkgconfig
+, intltool, itstool, makeWrapper, pkgconfig, yelp-tools
 }:
 
 stdenv.mkDerivation rec {
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ autoreconfHook pkgconfig makeWrapper intltool ];
   buildInputs = [
-    barcode gtk3 gtk-doc gnome3.yelp-tools
+    barcode gtk3 gtk-doc yelp-tools
     gnome3.gnome-common gsettings-desktop-schemas
     itstool libxml2 librsvg libe-book libtool
   ];
diff --git a/pkgs/applications/graphics/ideogram/default.nix b/pkgs/applications/graphics/ideogram/default.nix
index 61b45ce1603..36afe8dd3e0 100644
--- a/pkgs/applications/graphics/ideogram/default.nix
+++ b/pkgs/applications/graphics/ideogram/default.nix
@@ -17,13 +17,13 @@
 
 stdenv.mkDerivation rec {
   pname = "ideogram";
-  version = "1.2.2";
+  version = "1.3.0";
 
   src = fetchFromGitHub {
     owner = "cassidyjames";
     repo = pname;
     rev = version;
-    sha256 = "1qakgg3y4n2vcnykk2004ndvwmjbk2yy0p4j30mlb7p14dxscif6";
+    sha256 = "0ghc7hk4b4r3a0x9r30rrgv3rarxyjr2hf9ig244xwvhh5rn3j10";
   };
 
   nativeBuildInputs = [
@@ -45,14 +45,6 @@ stdenv.mkDerivation rec {
     xorg.libXtst
   ];
 
-  patches = [
-    # See: https://github.com/cassidyjames/ideogram/issues/26
-    (fetchpatch {
-      url = "https://github.com/cassidyjames/ideogram/commit/65994ee11bd21f8316b057cec01afbf50639a708.patch";
-      sha256 = "12vrvvggpqq53dmhbm7gbbbigncn19m1fjln9wxaady21m0w776c";
-    })
-  ];
-
   postPatch = ''
     chmod +x meson/post_install.py
     patchShebangs meson/post_install.py
diff --git a/pkgs/applications/graphics/seg3d/cstdio.patch b/pkgs/applications/graphics/seg3d/cstdio.patch
deleted file mode 100644
index 0d9eed07a36..00000000000
--- a/pkgs/applications/graphics/seg3d/cstdio.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-diff --git a/Core/Geometry/Transform.cc b/Core/Geometry/Transform.cc
-index 4f16fdc..0da4679 100644
---- a/Core/Geometry/Transform.cc
-+++ b/Core/Geometry/Transform.cc
-@@ -28,6 +28,7 @@
- 
- #include <cassert>
- #include <cstring>
-+#include <cstdio>
- 
- #include <Core/Util/TypeDescription.h>
- #include <Core/Geometry/Transform.h>
-diff --git a/Core/Util/FullFileName.cc b/Core/Util/FullFileName.cc
-index 7a2cad7..7710e92 100644
---- a/Core/Util/FullFileName.cc
-+++ b/Core/Util/FullFileName.cc
-@@ -29,6 +29,7 @@
- 
- #include <Core/Util/FullFileName.h>
- #include <iostream>
-+#include <cstdio>
- 
- namespace SCIRun {
- 
-diff --git a/Externals/particle-system-mm/src/sizingfield/LFS.cxx b/Externals/particle-system-mm/src/sizingfield/LFS.cxx
-index d1fa5aa..a5a4358 100644
---- a/Externals/particle-system-mm/src/sizingfield/LFS.cxx
-+++ b/Externals/particle-system-mm/src/sizingfield/LFS.cxx
-@@ -1,5 +1,6 @@
- #include <cstdlib>
- #include <iostream>
-+#include <cstdio>
- #include <LFS.h>
- 
- using namespace std;
-diff --git a/Externals/slivr/Point.cc b/Externals/slivr/Point.cc
-index d3be03e..ed4e503 100644
---- a/Externals/slivr/Point.cc
-+++ b/Externals/slivr/Point.cc
-@@ -42,6 +42,7 @@
- #include <slivr/Point.h>
- #include <slivr/Vector.h>
- #include <iostream>
-+#include <cstdio>
- 
- namespace SLIVR {
- 
-diff --git a/Externals/slivr/Transform.cc b/Externals/slivr/Transform.cc
-index c0a4430..520179f 100644
---- a/Externals/slivr/Transform.cc
-+++ b/Externals/slivr/Transform.cc
-@@ -47,6 +47,7 @@
- #include <math.h>
- #include <string.h>
- #include <iostream>
-+#include <cstdio>
- 
- using namespace SLIVR;
- using namespace std;
-diff --git a/Externals/slivr/Vector.cc b/Externals/slivr/Vector.cc
-index 8370d65..8b04bb9 100644
---- a/Externals/slivr/Vector.cc
-+++ b/Externals/slivr/Vector.cc
-@@ -43,6 +43,7 @@
- #include <slivr/Point.h>
- #include <assert.h>
- #include <iostream>
-+#include <cstdio>
- 
- using std::istream;
- using std::ostream;
-diff --git a/Externals/vispack/src/image/imagefile.txx b/Externals/vispack/src/image/imagefile.txx
-index ced2590..13a32b2 100644
---- a/Externals/vispack/src/image/imagefile.txx
-+++ b/Externals/vispack/src/image/imagefile.txx
-@@ -1,3 +1,5 @@
-+#include <cstdio>
-+
- template <class T>
- int write_raw(const char* name, const VISImage<T>& im)
- {
diff --git a/pkgs/applications/graphics/seg3d/default.nix b/pkgs/applications/graphics/seg3d/default.nix
deleted file mode 100644
index 7d9b7582bd6..00000000000
--- a/pkgs/applications/graphics/seg3d/default.nix
+++ /dev/null
@@ -1,54 +0,0 @@
-{ fetchurl, stdenv, cmake, wxGTK, itk, libGLU, libGL, libXft, libXext, libXi, zlib, libXmu,
-libuuid }:
-
-assert (stdenv ? glibc);
-
-stdenv.mkDerivation {
-  name = "seg3d-1.12_20090930";
-  src = fetchurl {
-    url = https://www.sci.utah.edu/releases/seg3d_v1.12/Seg3D_1.12_20090930_source.tgz;
-    sha256 = "1wr6rc6v5qjjkmws8yrc03z35h3iydxk1z28p06v1wdnca0y71z8";
-  };
-
-  patches = [ ./cstdio.patch ];
-
-  cmakeFlags = [
-    "-DM_LIBRARY=${stdenv.glibc.out}/lib/libm.so"
-    "-DDL_LIBRARY=${stdenv.glibc.out}/lib/libdl.so"
-    "-DBUILD_UTILS=1"
-    "-DBUILD_SEG3D=1"
-    "-DBUILD_DATAFLOW=0"
-    "-DBUILD_SHARED_LIBS=0"
-    "-DWITH_X11=1"
-    "-DBUILD_BIOMESH3D=1"
-    "-DWITH_TETGEN=1"
-    "-DBUILD_TYPE=Release"
-    "-DWITH_WXWIDGETS=ON"
-    "-DITK_DIR=${itk}/lib/InsightToolkit"
-    "-DGDCM_LIBRARY=${itk}/lib/libitkgdcm.a"
-  ];
-
-
-  makeFlags = "VERBOSE=1";
-
-  preBuild = ''
-    export LD_LIBRARY_PATH=`pwd`/lib
-    export NIX_LDFLAGS="$NIX_LDFLAGS -lGLU -lSM -lICE -lX11 -lXext -luuid";
-  '';
-
-  preUnpack = ''
-    set -x
-    sourceRoot=`pwd`/src
-  '';
-
-  postInstall = ''
-    cp Seg3D $out/bin
-    exit 1
-  '';
-
-  buildInputs = [ cmake wxGTK itk libGLU libGL libXft libXext libXi zlib libXmu libuuid ];
-
-  meta = {
-    broken = true;
-  };
-}
diff --git a/pkgs/applications/kde/kcachegrind.nix b/pkgs/applications/kde/kcachegrind.nix
index 91faaef623a..16fc6c51777 100644
--- a/pkgs/applications/kde/kcachegrind.nix
+++ b/pkgs/applications/kde/kcachegrind.nix
@@ -1,7 +1,8 @@
 {
   mkDerivation, lib,
   extra-cmake-modules, kdoctools,
-  karchive, ki18n, kio, perl, python, php, qttools,
+  karchive, ki18n, kio, perl, python, php, qttools
+  , kdbusaddons
 }:
 
 mkDerivation {
@@ -11,5 +12,5 @@ mkDerivation {
     maintainers = with lib.maintainers; [ orivej ];
   };
   nativeBuildInputs = [ extra-cmake-modules kdoctools ];
-  buildInputs = [ karchive ki18n kio perl python php qttools ];
+  buildInputs = [ karchive ki18n kio perl python php qttools kdbusaddons ];
 }
diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix
index dd9f2929d36..8c4833be3e6 100644
--- a/pkgs/applications/misc/blender/default.nix
+++ b/pkgs/applications/misc/blender/default.nix
@@ -2,6 +2,7 @@
 , ilmbase, libXi, libX11, libXext, libXrender
 , libjpeg, libpng, libsamplerate, libsndfile
 , libtiff, libGLU, libGL, openal, opencolorio, openexr, openimageio, openjpeg_1, python3Packages
+, openvdb, libXxf86vm, tbb
 , zlib, fftw, opensubdiv, freetype, jemalloc, ocl-icd, addOpenGLRunpath
 , jackaudioSupport ? false, libjack2
 , cudaSupport ? config.cudaSupport or false, cudatoolkit
@@ -15,11 +16,11 @@ let python = python3Packages.python; in
 
 stdenv.mkDerivation rec {
   pname = "blender";
-  version = "2.80";
+  version = "2.81";
 
   src = fetchurl {
-    url = "https://download.blender.org/source/${pname}-${version}.tar.gz";
-    sha256 = "1h550jisdbis50hxwk5kxrvrk1a6sh2fsri3yyj66vhzbi87x7fd";
+    url = "https://download.blender.org/source/${pname}-${version}.tar.xz";
+    sha256 = "1prp0f2152f1sz23jlc86vndfvmplb7qhllikkirq7hgpykrshna";
   };
 
   nativeBuildInputs = [ cmake ] ++ optional cudaSupport addOpenGLRunpath;
@@ -29,6 +30,7 @@ stdenv.mkDerivation rec {
       freetype libjpeg libpng libsamplerate libsndfile libtiff libGLU libGL openal
       opencolorio openexr openimageio openjpeg_1 python zlib fftw jemalloc
       (opensubdiv.override { inherit cudaSupport; })
+      openvdb libXxf86vm tbb
       makeWrapper
     ]
     ++ optional jackaudioSupport libjack2
@@ -56,6 +58,9 @@ stdenv.mkDerivation rec {
       "-DWITH_PYTHON_INSTALL=OFF"
       "-DWITH_PYTHON_INSTALL_NUMPY=OFF"
       "-DPYTHON_NUMPY_PATH=${python3Packages.numpy}/${python.sitePackages}"
+      "-DWITH_OPENVDB=ON"
+      "-DWITH_TBB=ON"
+      "-DWITH_IMAGE_OPENJPEG=ON"
     ]
     ++ optional jackaudioSupport "-DWITH_JACK=ON"
     ++ optional cudaSupport "-DWITH_CYCLES_CUDA_BINARIES=ON"
diff --git a/pkgs/applications/misc/elogind/default.nix b/pkgs/applications/misc/elogind/default.nix
index acfbc7ec917..c5978dac2d5 100644
--- a/pkgs/applications/misc/elogind/default.nix
+++ b/pkgs/applications/misc/elogind/default.nix
@@ -29,13 +29,13 @@ with stdenv.lib;
 
 stdenv.mkDerivation rec {
   pname = "elogind";
-  version = "239.5";
+  version = "241.3";
 
   src = fetchFromGitHub {
     owner = "elogind";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1gdiy4vbx4gs2hnb79x14zi530mlq26glxpzp3c95w8l058wj4ba";
+    sha256 = "0jpb55prqq5cm3w2gy9766cbaqknjvbrbniyshb8bz1q31vf4jlq";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/applications/misc/et/default.nix b/pkgs/applications/misc/et/default.nix
index d8b355efe86..2cf8813aac4 100644
--- a/pkgs/applications/misc/et/default.nix
+++ b/pkgs/applications/misc/et/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "et";
-  version = "0.1.1";
+  version = "0.1.2";
 
   src = fetchFromGitHub {
     owner = "geistesk";
     repo = "et";
     rev = version;
-    sha256 = "167w9qwfpd63rgy0xmkkkh5krmd91q42c3ijy3j099krgdfbb9bc";
+    sha256 = "0i0lgmnly8n7y4y6pb10pxgxyz8s5zk26k8z1g1578v1wan01lnq";
   };
 
   buildInputs = [ libnotify gdk-pixbuf ];
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
 
   meta = with stdenv.lib; {
     description = "Minimal libnotify-based (egg) timer";
-    homepage = https://github.com/geistesk/et;
+    homepage = "https://github.com/geistesk/et";
     license = licenses.gpl3;
     platforms = platforms.unix;
     maintainers = with maintainers; [ geistesk ];
diff --git a/pkgs/applications/misc/font-manager/default.nix b/pkgs/applications/misc/font-manager/default.nix
index dad95490012..edb47e11dd7 100644
--- a/pkgs/applications/misc/font-manager/default.nix
+++ b/pkgs/applications/misc/font-manager/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchFromGitHub, meson, ninja, gettext, python3, fetchpatch,
-  pkgconfig, libxml2, json-glib , sqlite, itstool, librsvg,
+  pkgconfig, libxml2, json-glib , sqlite, itstool, librsvg, yelp-tools,
   vala, gtk3, gnome3, desktop-file-utils, wrapGAppsHook, gobject-introspection
 }:
 
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     itstool
     desktop-file-utils
     vala
-    gnome3.yelp-tools
+    yelp-tools
     wrapGAppsHook
     # For https://github.com/FontManager/master/blob/master/lib/unicode/meson.build
     gobject-introspection
diff --git a/pkgs/applications/misc/formatter/default.nix b/pkgs/applications/misc/formatter/default.nix
index d81e21f73ed..26478c7f2ed 100644
--- a/pkgs/applications/misc/formatter/default.nix
+++ b/pkgs/applications/misc/formatter/default.nix
@@ -20,13 +20,13 @@
 
 stdenv.mkDerivation rec {
   pname = "formatter";
-  version = "0.3.0";
+  version = "0.3.1";
 
   src = fetchFromGitHub {
     owner = "Djaler";
     repo = "Formatter";
     rev = version;
-    sha256 = "145742dk16736zxj30rzn61h4k0xpggfsbqkxllxd302mgbmxlzq";
+    sha256 = "1ghxd2h0pklhlrjslfr46vza1kjsm3mr0sdzzjiqi9jd6hddnk7i";
   };
 
   patches = [
diff --git a/pkgs/applications/misc/glom/default.nix b/pkgs/applications/misc/glom/default.nix
index 9e71837c0f5..b8f13d01424 100644
--- a/pkgs/applications/misc/glom/default.nix
+++ b/pkgs/applications/misc/glom/default.nix
@@ -30,6 +30,7 @@
 , postgresql
 , gnome3
 , gobject-introspection
+, yelp-tools
 , wrapGAppsHook
 }:
 
@@ -67,7 +68,7 @@ in stdenv.mkDerivation rec {
     libtool
     mm-common
     intltool
-    gnome3.yelp-tools
+    yelp-tools
     itstool
     doxygen
     graphviz
diff --git a/pkgs/applications/misc/gpxsee/default.nix b/pkgs/applications/misc/gpxsee/default.nix
index cad738908f0..9a9edba512a 100644
--- a/pkgs/applications/misc/gpxsee/default.nix
+++ b/pkgs/applications/misc/gpxsee/default.nix
@@ -2,13 +2,13 @@
 
 mkDerivation rec {
   pname = "gpxsee";
-  version = "7.17";
+  version = "7.18";
 
   src = fetchFromGitHub {
     owner = "tumic0";
     repo = "GPXSee";
     rev = version;
-    sha256 = "10mch709m4ws73yzkrx9lm2hwzl179ggpk6xkbhkvnl7rsd2yz08";
+    sha256 = "1z3knfqfv0rwsq66adk0qngw1r500yvy4z259bygqkzbn2l5fcjk";
   };
 
   nativeBuildInputs = [ qmake ];
diff --git a/pkgs/applications/misc/houdini/runtime.nix b/pkgs/applications/misc/houdini/runtime.nix
index 88c87eaca87..12364db7d4a 100644
--- a/pkgs/applications/misc/houdini/runtime.nix
+++ b/pkgs/applications/misc/houdini/runtime.nix
@@ -1,4 +1,4 @@
-{ stdenv, requireFile, zlib, libpng, libSM, libICE, fontconfig, xorg, libGLU, libGL, alsaLib, dbus, xkeyboardconfig, bc }:
+{ stdenv, requireFile, zlib, libpng, libSM, libICE, fontconfig, xorg, libGLU, libGL, alsaLib, dbus, xkeyboardconfig, bc, addOpenGLRunpath }:
 
 let
   ld_library_path = builtins.concatStringsSep ":" [
@@ -24,6 +24,7 @@ let
       zlib
       libpng
       dbus
+      addOpenGLRunpath.driverLink
     ])
   ];
   license_dir = "~/.config/houdini";
diff --git a/pkgs/applications/misc/kdeconnect/default.nix b/pkgs/applications/misc/kdeconnect/default.nix
index ed3c8672269..e8bdcb37118 100644
--- a/pkgs/applications/misc/kdeconnect/default.nix
+++ b/pkgs/applications/misc/kdeconnect/default.nix
@@ -16,6 +16,7 @@
 , sshfs
 , makeWrapper
 , kwayland
+, kio
 }:
 
 mkDerivation rec {
@@ -30,7 +31,7 @@ mkDerivation rec {
   buildInputs = [
     libfakekey libXtst
     ki18n kiconthemes kcmutils kconfigwidgets kdbusaddons knotifications
-    qca-qt5 qtx11extras makeWrapper kwayland
+    qca-qt5 qtx11extras makeWrapper kwayland kio
   ];
 
   nativeBuildInputs = [ extra-cmake-modules kdoctools ];
diff --git a/pkgs/applications/misc/orca/default.nix b/pkgs/applications/misc/orca/default.nix
index 37b93eecf39..1dc6a9cfee5 100644
--- a/pkgs/applications/misc/orca/default.nix
+++ b/pkgs/applications/misc/orca/default.nix
@@ -1,21 +1,47 @@
-{ stdenv, pkgconfig, fetchurl, buildPythonApplication
-, autoreconfHook, wrapGAppsHook, gobject-introspection
-, gettext, yelp-tools, itstool, libxmlxx3
-, python, pygobject3, gtk3, gnome3, substituteAll
-, at-spi2-atk, at-spi2-core, pyatspi, dbus, dbus-python, pyxdg
-, xkbcomp, procps, lsof, coreutils, gsettings-desktop-schemas
-, speechd, brltty, liblouis, setproctitle, gst_all_1, gst-python
+{ stdenv
+, pkgconfig
+, fetchurl
+, buildPythonApplication
+, autoreconfHook
+, wrapGAppsHook
+, gobject-introspection
+, gettext
+, yelp-tools
+, itstool
+, libxmlxx3
+, python
+, pygobject3
+, gtk3
+, gnome3
+, substituteAll
+, at-spi2-atk
+, at-spi2-core
+, pyatspi
+, dbus
+, dbus-python
+, pyxdg
+, xkbcomp
+, procps
+, lsof
+, coreutils
+, gsettings-desktop-schemas
+, speechd
+, brltty
+, liblouis
+, setproctitle
+, gst_all_1
+, gst-python
 }:
 
 buildPythonApplication rec {
   pname = "orca";
-  version = "3.34.0";
+  version = "3.34.1";
 
   format = "other";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "10h258cprsxzb2hz9wqrkzv1yrsm19ws46l6fsnspywza5wq0z4p";
+    sha256 = "1q38n7hyshkiszmn361skxjynxr31lcms7a1iny6d0zlpmh1vnk4";
   };
 
   patches = [
@@ -29,19 +55,40 @@ buildPythonApplication rec {
   ];
 
   nativeBuildInputs = [
-    autoreconfHook wrapGAppsHook pkgconfig libxmlxx3
-    gettext yelp-tools itstool gobject-introspection
+    autoreconfHook
+    wrapGAppsHook
+    pkgconfig
+    libxmlxx3
+    gettext
+    yelp-tools
+    itstool
+    gobject-introspection
   ];
 
   propagatedBuildInputs = [
-    pygobject3 pyatspi dbus-python pyxdg brltty liblouis speechd gst-python setproctitle
+    pygobject3
+    pyatspi
+    dbus-python
+    pyxdg
+    brltty
+    liblouis
+    speechd
+    gst-python
+    setproctitle
   ];
 
   strictDeps = false;
 
   buildInputs = [
-    python gtk3 at-spi2-atk at-spi2-core dbus gsettings-desktop-schemas
-    gst_all_1.gstreamer gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good
+    python
+    gtk3
+    at-spi2-atk
+    at-spi2-core
+    dbus
+    gsettings-desktop-schemas
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
   ];
 
   passthru = {
@@ -51,7 +98,7 @@ buildPythonApplication rec {
   };
 
   meta = with stdenv.lib; {
-    homepage = https://wiki.gnome.org/Projects/Orca;
+    homepage = "https://wiki.gnome.org/Projects/Orca";
     description = "Screen reader";
     longDescription = ''
       A free, open source, flexible and extensible screen reader that provides
diff --git a/pkgs/applications/misc/tasksh/default.nix b/pkgs/applications/misc/tasksh/default.nix
index feb06368de4..931a27fbeff 100644
--- a/pkgs/applications/misc/tasksh/default.nix
+++ b/pkgs/applications/misc/tasksh/default.nix
@@ -19,6 +19,6 @@ stdenv.mkDerivation rec {
     homepage = http://tasktools.org;
     license = licenses.mit;
     maintainers = with maintainers; [ matthiasbeyer ];
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/applications/misc/xpdf/default.nix b/pkgs/applications/misc/xpdf/default.nix
index d524482dee7..f5ec9b71503 100644
--- a/pkgs/applications/misc/xpdf/default.nix
+++ b/pkgs/applications/misc/xpdf/default.nix
@@ -1,20 +1,22 @@
-{ enableGUI ? true, enablePDFtoPPM ? true, useT1Lib ? false
-, stdenv, fetchurl, zlib, libpng, freetype ? null, t1lib ? null
-, cmake, qtbase ? null, qtsvg ? null, wrapQtAppsHook
+{ enableGUI ? true
+, enablePDFtoPPM ? true
+, enablePrinting ? true
+, stdenv, fetchzip, cmake, makeDesktopItem
+, zlib, libpng, cups ? null, freetype ? null
+, qtbase ? null, qtsvg ? null, wrapQtAppsHook
 }:
 
 assert enableGUI -> qtbase != null && qtsvg != null && freetype != null;
 assert enablePDFtoPPM -> freetype != null;
-assert useT1Lib -> t1lib != null;
+assert enablePrinting -> cups != null;
 
-assert !useT1Lib; # t1lib has multiple unpatched security vulnerabilities
+stdenv.mkDerivation rec {
+  pname = "xpdf";
+  version = "4.02";
 
-stdenv.mkDerivation {
-  name = "xpdf-4.00";
-
-   src = fetchurl {
-    url = http://www.xpdfreader.com/dl/xpdf-4.00.tar.gz;
-    sha256 = "1mhn89738vjva14xr5gblc2zrdgzmpqbbjdflqdmpqv647294ggz";
+  src = fetchzip {
+    url = "https://xpdfreader-dl.s3.amazonaws.com/${pname}-${version}.tar.gz";
+    sha256 = "0dzwq6fnk013wa4l5mjpvm4mms2mh5hbrxv4rhk2ab5ljbzz7b2w";
   };
 
   # Fix "No known features for CXX compiler", see
@@ -26,20 +28,33 @@ stdenv.mkDerivation {
     [ cmake ]
     ++ stdenv.lib.optional enableGUI wrapQtAppsHook;
 
-  cmakeFlags = ["-DSYSTEM_XPDFRC=/etc/xpdfrc" "-DA4_PAPER=ON"];
+  cmakeFlags = ["-DSYSTEM_XPDFRC=/etc/xpdfrc" "-DA4_PAPER=ON" "-DOPI_SUPPORT=ON"]
+    ++ stdenv.lib.optional (!enablePrinting) "-DXPDFWIDGET_PRINTING=OFF";
 
   buildInputs = [ zlib libpng ] ++
     stdenv.lib.optional enableGUI qtbase ++
-    stdenv.lib.optional useT1Lib t1lib ++
+    stdenv.lib.optional enablePrinting cups ++
     stdenv.lib.optional enablePDFtoPPM freetype;
 
-  # Debian uses '-fpermissive' to bypass some errors on char* constantness.
-  CXXFLAGS = "-O2 -fpermissive";
-
   hardeningDisable = [ "format" ];
 
+  desktopItem = makeDesktopItem {
+    name = "xpdf";
+    desktopName = "Xpdf";
+    comment = "Views Adobe PDF files";
+    icon = "xpdf";
+    exec = "xpdf %f";
+    categories = "Office;";
+    terminal = "false";
+  };
+
+  postInstall = ''
+    install -Dm644 ${desktopItem}/share/applications/xpdf.desktop $out/share/applications/xpdf.desktop
+    install -Dm644 $src/xpdf-qt/xpdf-icon.svg $out/share/pixmaps/xpdf.svg
+  '';
+
   meta = with stdenv.lib; {
-    homepage = https://www.xpdfreader.com;
+    homepage = "https://www.xpdfreader.com";
     description = "Viewer for Portable Document Format (PDF) files";
     longDescription = ''
       XPDF includes multiple tools for viewing and processing PDF files.
@@ -56,5 +71,13 @@ stdenv.mkDerivation {
     '';
     license = with licenses; [ gpl2 gpl3 ];
     platforms = platforms.unix;
+    maintainers = with maintainers; [ sikmir ];
+    knownVulnerabilities = [
+      "CVE-2018-7453: loop in PDF objects"
+      "CVE-2018-16369: loop in PDF objects"
+      "CVE-2019-9587: loop in PDF objects"
+      "CVE-2019-9588: loop in PDF objects"
+      "CVE-2019-16088: loop in PDF objects"
+    ];
   };
 }
diff --git a/pkgs/applications/networking/browsers/ephemeral/default.nix b/pkgs/applications/networking/browsers/ephemeral/default.nix
index f3fc9ab6ecb..d5a1063a688 100644
--- a/pkgs/applications/networking/browsers/ephemeral/default.nix
+++ b/pkgs/applications/networking/browsers/ephemeral/default.nix
@@ -19,13 +19,13 @@
 
 stdenv.mkDerivation rec {
   pname = "ephemeral";
-  version = "6.0.0";
+  version = "6.1.1";
 
   src = fetchFromGitHub {
     owner = "cassidyjames";
     repo = "ephemeral";
     rev = version;
-    sha256 = "0g9rrx41grmgf4nn2pp17yhjxxayk826gs6nmkfdnimd4gmlf3nk";
+    sha256 = "1i77chbjjg8zda5bnn1wj4h00a88awfls5b3i3dqwgsi356hv4wb";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/applications/networking/cluster/sonobuoy/default.nix b/pkgs/applications/networking/cluster/sonobuoy/default.nix
index ce6c5424fba..32dbced0a46 100644
--- a/pkgs/applications/networking/cluster/sonobuoy/default.nix
+++ b/pkgs/applications/networking/cluster/sonobuoy/default.nix
@@ -1,11 +1,11 @@
 { lib, buildGoPackage, fetchFromGitHub }:
 
 # SHA of ${version} for the tool's help output
-let rev = "7ad367535a6710802085d41e0dbb53df359b9882";
+let rev = "c9c2a461cd3397909fe6e45ff71836347ef89fd8";
 in
 buildGoPackage rec {
   pname = "sonobuoy";
-  version = "0.15.0";
+  version = "0.16.1";
 
   goPackagePath = "github.com/heptio/sonobuoy";
 
@@ -19,10 +19,10 @@ buildGoPackage rec {
     '';
 
   src = fetchFromGitHub {
-    sha256 = "0dkmhmr7calk8mkdxfpy3yjzk10ja4gz1jq8pgk3v8rh04f4h1x5";
+    sha256 = "14qc5a7jbr403wjpk6pgpb94i72yx647sg9srz07q6drq650kyfv";
     rev = "v${version}";
     repo = "sonobuoy";
-    owner = "heptio";
+    owner = "vmware-tanzu";
   };
 
   meta = with lib; {
@@ -36,8 +36,8 @@ buildGoPackage rec {
       accessible and non-destructive manner.
     '';
 
-    homepage = "https://github.com/heptio/sonobuoy";
+    homepage = "https://sonobuoy.io";
     license = licenses.asl20;
-    maintainers = with maintainers; [ carlosdagos ];
+    maintainers = with maintainers; [ carlosdagos saschagrunert ];
   };
 }
diff --git a/pkgs/applications/networking/instant-messengers/riot/riot-desktop.nix b/pkgs/applications/networking/instant-messengers/riot/riot-desktop.nix
index ec3b42c1553..5dc61ff5cc8 100644
--- a/pkgs/applications/networking/instant-messengers/riot/riot-desktop.nix
+++ b/pkgs/applications/networking/instant-messengers/riot/riot-desktop.nix
@@ -1,4 +1,4 @@
-{ pkgs, stdenv, fetchFromGitHub, makeWrapper, makeDesktopItem, electron_5, riot-web, yarn2nix-moretea }:
+{ pkgs, stdenv, fetchFromGitHub, makeWrapper, makeDesktopItem, electron_5, riot-web, mkYarnPackage }:
 
 # Notes for maintainers:
 # * versions of `riot-web` and `riot-desktop` should be kept in sync.
@@ -14,7 +14,7 @@ let
     sha256 = "1xi5zg3602d7gdjxskpk2q3anpn2drrkxyirfvi9mzcfp2r05557";
   };
 
-in yarn2nix-moretea.mkYarnPackage rec {
+in mkYarnPackage rec {
   name = "riot-desktop-${version}";
   inherit version;
 
diff --git a/pkgs/applications/networking/instant-messengers/riot/update-riot-desktop.sh b/pkgs/applications/networking/instant-messengers/riot/update-riot-desktop.sh
index b646a9e03ad..f516e4a76f0 100755
--- a/pkgs/applications/networking/instant-messengers/riot/update-riot-desktop.sh
+++ b/pkgs/applications/networking/instant-messengers/riot/update-riot-desktop.sh
@@ -1,5 +1,5 @@
 #!/usr/bin/env nix-shell
-#!nix-shell -I nixpkgs=../../../../../ -i bash -p wget yarn2nix-moretea.yarn2nix
+#!nix-shell -I nixpkgs=../../../../../ -i bash -p wget yarn2nix
 
 set -euo pipefail
 
diff --git a/pkgs/applications/networking/instant-messengers/zoom-us/default.nix b/pkgs/applications/networking/instant-messengers/zoom-us/default.nix
index 7f3628dfdb7..47437df25e7 100644
--- a/pkgs/applications/networking/instant-messengers/zoom-us/default.nix
+++ b/pkgs/applications/networking/instant-messengers/zoom-us/default.nix
@@ -14,11 +14,11 @@ assert pulseaudioSupport -> libpulseaudio != null;
 let
   inherit (stdenv.lib) concatStringsSep makeBinPath optional;
 
-  version = "3.0.309708.1027";
+  version = "3.0.317369.1110";
   srcs = {
     x86_64-linux = fetchurl {
       url = "https://zoom.us/client/${version}/zoom_x86_64.tar.xz";
-      sha256 = "0g0nmlbcps331vdnfj571lzhcw8cb2gxbll09jananxdpnmwv5l6";
+      sha256 = "0r4wp9qb1739xwr24kglc4sj8qaxwr4nh5p1igi3x6f1f8gczia7";
     };
   };
 
diff --git a/pkgs/applications/networking/sync/rclone/default.nix b/pkgs/applications/networking/sync/rclone/default.nix
index ca5c59379cc..71421eaf1e7 100644
--- a/pkgs/applications/networking/sync/rclone/default.nix
+++ b/pkgs/applications/networking/sync/rclone/default.nix
@@ -2,13 +2,13 @@
 
 buildGoPackage rec {
   pname = "rclone";
-  version = "1.50.1";
+  version = "1.50.2";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "v${version}";
-    sha256 = "0iwm0a9h6xxdsqw86xlqcsz7h4pzsg134m6yfqj5s2xg7kfy5laq";
+    sha256 = "0yaspkh88q8i58i8g8mm6sqb75hczavz2lvzdd1iif1bqgi6b5fz";
   };
 
   goPackagePath = "github.com/rclone/rclone";
diff --git a/pkgs/applications/networking/weather/meteo/default.nix b/pkgs/applications/networking/weather/meteo/default.nix
index 5fe52d5f33d..64fef08ceef 100644
--- a/pkgs/applications/networking/weather/meteo/default.nix
+++ b/pkgs/applications/networking/weather/meteo/default.nix
@@ -4,13 +4,13 @@
 
 stdenv.mkDerivation rec {
   pname = "meteo";
-  version = "0.9.7";
+  version = "0.9.8";
 
   src = fetchFromGitLab {
     owner = "bitseater";
     repo = pname;
     rev = version;
-    sha256 = "014x3mg2dc58h1qwy2nrz3a5mzdnbzish8zgn3x6lj6szfz5c72n";
+    sha256 = "1ll5fja0dqxcr6hrh2dk4hgw9gf8ms9bcp1ifznd21byxzyhdlr0";
   };
 
   nativeBuildInputs = [
@@ -40,9 +40,9 @@ stdenv.mkDerivation rec {
 
   meta = with stdenv.lib; {
     description = "Know the forecast of the next hours & days";
-    homepage    = https://gitlab.com/bitseater/meteo;
-    license     = licenses.gpl3Plus;
+    homepage = https://gitlab.com/bitseater/meteo;
+    license = licenses.gpl3Plus;
     maintainers = with maintainers; [ worldofpeace ];
-    platforms   = platforms.linux;
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/applications/office/aesop/default.nix b/pkgs/applications/office/aesop/default.nix
index 603f8018993..b637f6bbf06 100644
--- a/pkgs/applications/office/aesop/default.nix
+++ b/pkgs/applications/office/aesop/default.nix
@@ -3,13 +3,13 @@
 
 stdenv.mkDerivation rec {
   pname = "aesop";
-  version = "1.1.2";
+  version = "1.1.3";
 
   src = fetchFromGitHub {
     owner = "lainsce";
     repo = pname;
     rev = version;
-    sha256 = "1vadm8295jb7jaah2qykf3h9zvl5c013sanmxqi4snmmq4pa32ax";
+    sha256 = "1hnwhxaz0zx4fswrxjzyv5s77v5fimn87yid9sd1qgfv2g1ck0jc";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/applications/office/libreoffice/default.nix b/pkgs/applications/office/libreoffice/default.nix
index 506f33a2d0e..42f75560a5a 100644
--- a/pkgs/applications/office/libreoffice/default.nix
+++ b/pkgs/applications/office/libreoffice/default.nix
@@ -65,6 +65,8 @@ in stdenv.mkDerivation rec {
 
   inherit (primary-src) src;
 
+  outputs = [ "out" "dev" ];
+
   # For some reason librdf_redland sometimes refers to rasqal.h instead
   # of rasqal/rasqal.h
   NIX_CFLAGS_COMPILE = [ "-I${librdf_rasqal}/include/rasqal" ] ++ lib.optional stdenv.isx86_64 "-mno-fma";
@@ -276,6 +278,9 @@ in stdenv.mkDerivation rec {
 
     cp -r sysui/desktop/icons  "$out/share"
     sed -re 's@Icon=libreoffice(dev)?[0-9.]*-?@Icon=@' -i "$out/share/applications/"*.desktop
+
+    mkdir -p $dev
+    cp -r include $dev
   '';
 
   configureFlags = [
diff --git a/pkgs/applications/office/libreoffice/still.nix b/pkgs/applications/office/libreoffice/still.nix
index 12e49fa48fe..c42820e6114 100644
--- a/pkgs/applications/office/libreoffice/still.nix
+++ b/pkgs/applications/office/libreoffice/still.nix
@@ -65,6 +65,8 @@ in stdenv.mkDerivation rec {
 
   inherit (primary-src) src;
 
+  outputs = [ "out" "dev" ];
+
   # For some reason librdf_redland sometimes refers to rasqal.h instead
   # of rasqal/rasqal.h
   NIX_CFLAGS_COMPILE = [ "-I${librdf_rasqal}/include/rasqal" ];
@@ -276,6 +278,9 @@ in stdenv.mkDerivation rec {
 
     cp -r sysui/desktop/icons  "$out/share"
     sed -re 's@Icon=libreoffice(dev)?[0-9.]*-?@Icon=@' -i "$out/share/applications/"*.desktop
+
+    mkdir -p $dev
+    cp -r include $dev
   '';
 
   configureFlags = [
diff --git a/pkgs/applications/office/softmaker/freeoffice.nix b/pkgs/applications/office/softmaker/freeoffice.nix
index 8c862cb6ea4..ff54f8ff90f 100644
--- a/pkgs/applications/office/softmaker/freeoffice.nix
+++ b/pkgs/applications/office/softmaker/freeoffice.nix
@@ -2,13 +2,13 @@
 
 callPackage ./generic.nix (args // rec {
   pname = "freeoffice";
-  version = "971";
+  version = "973";
   edition = "2018";
   suiteName = "FreeOffice";
 
   src = fetchurl {
     url = "https://www.softmaker.net/down/softmaker-freeoffice-${version}-amd64.tgz";
-    sha256 = "1h36pjbpbiy4cw383cbrwh1jx2kp1ay29734zailmhifz53gj44f";
+    sha256 = "0xac4ynf1lfh8qmni5bhp4ybaamdfngva4bqaq21n1m4pgrx1ba5";
   };
 
   archive = "freeoffice${edition}.tar.lzma";
diff --git a/pkgs/applications/office/softmaker/generic.nix b/pkgs/applications/office/softmaker/generic.nix
index 56dc6a5e4f7..82ac2b58f68 100644
--- a/pkgs/applications/office/softmaker/generic.nix
+++ b/pkgs/applications/office/softmaker/generic.nix
@@ -96,6 +96,10 @@ in stdenv.mkDerivation rec {
       done
     done
 
+    # freeoffice 973 misses the 96x96 application icons, giving broken symbolic links
+    # remove broken symbolic links
+    find $out -xtype l -ls -exec rm {} \;
+
     # Add desktop items
     ${desktopItems.planmaker.buildCommand}
     ${desktopItems.presentations.buildCommand}
diff --git a/pkgs/applications/science/biology/freebayes/default.nix b/pkgs/applications/science/biology/freebayes/default.nix
index e1e84c9423b..7d0a36e755f 100644
--- a/pkgs/applications/science/biology/freebayes/default.nix
+++ b/pkgs/applications/science/biology/freebayes/default.nix
@@ -2,14 +2,14 @@
 
 stdenv.mkDerivation rec {
   pname = "freebayes";
-  version = "2017-08-23";
+  version = "1.3.1";
 
   src = fetchFromGitHub {
     name = "freebayes-${version}-src";
     owner  = "ekg";
     repo   = "freebayes";
-    rev    = "8d2b3a060da473e1f4f89be04edfce5cba63f1d3";
-    sha256 = "0yyrgk2639lz1yvg4jf0ccahnkic31dy77q05pb3i28rjf37v45z";
+    rev    = "v${version}";
+    sha256 = "035nriknjqq8gvil81vvsmvqwi35v80q8h1cw24vd1gdyn1x7bys";
     fetchSubmodules = true;
   };
 
diff --git a/pkgs/applications/version-management/git-and-tools/git/default.nix b/pkgs/applications/version-management/git-and-tools/git/default.nix
index a6b53561771..a8e284c6fec 100644
--- a/pkgs/applications/version-management/git-and-tools/git/default.nix
+++ b/pkgs/applications/version-management/git-and-tools/git/default.nix
@@ -298,6 +298,10 @@ stdenv.mkDerivation {
 
     # As of 2.19.0, t5562 refers to #!/usr/bin/perl
     patchShebangs t/t5562/invoke-with-content-length.pl
+  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+    # XXX: Some tests added in 2.24.0 fail.
+    # Please try to re-enable on the next release.
+    disable_test t7816-grep-binary-pattern
   '' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
     # Test fails (as of 2.17.0, musl 1.1.19)
     disable_test t3900-i18n-commit
diff --git a/pkgs/applications/version-management/gitlab/default.nix b/pkgs/applications/version-management/gitlab/default.nix
index 0075f91ae2d..545894cc1e5 100644
--- a/pkgs/applications/version-management/gitlab/default.nix
+++ b/pkgs/applications/version-management/gitlab/default.nix
@@ -1,7 +1,7 @@
 { stdenv, lib, fetchurl, fetchFromGitLab, bundlerEnv
 , ruby, tzdata, git, nettools, nixosTests, nodejs
 , gitlabEnterprise ? false, callPackage, yarn
-, yarn2nix-moretea, replace
+, fixup_yarn_lock, replace
 }:
 
 let
@@ -62,7 +62,7 @@ let
       yarn config --offline set yarn-offline-mirror ${yarnOfflineCache}
 
       # Fixup "resolved"-entries in yarn.lock to match our offline cache
-      ${yarn2nix-moretea.fixup_yarn_lock}/bin/fixup_yarn_lock yarn.lock
+      ${fixup_yarn_lock}/bin/fixup_yarn_lock yarn.lock
 
       yarn install --offline --frozen-lockfile --ignore-scripts --no-progress --non-interactive
 
diff --git a/pkgs/applications/version-management/gitlab/update.py b/pkgs/applications/version-management/gitlab/update.py
index 1aeb459f64c..a2231f813e8 100755
--- a/pkgs/applications/version-management/gitlab/update.py
+++ b/pkgs/applications/version-management/gitlab/update.py
@@ -1,5 +1,5 @@
 #!/usr/bin/env nix-shell
-#! nix-shell -i python3 -p bundix common-updater-scripts nix nix-prefetch-git python3 python3Packages.requests python3Packages.lxml python3Packages.click python3Packages.click-log vgo2nix yarn2nix-moretea.yarn2nix
+#! nix-shell -i python3 -p bundix common-updater-scripts nix nix-prefetch-git python3 python3Packages.requests python3Packages.lxml python3Packages.click python3Packages.click-log vgo2nix yarn2nix
 
 import click
 import click_log
diff --git a/pkgs/applications/version-management/pijul/default.nix b/pkgs/applications/version-management/pijul/default.nix
index 6d0e39d47bf..3c553918925 100644
--- a/pkgs/applications/version-management/pijul/default.nix
+++ b/pkgs/applications/version-management/pijul/default.nix
@@ -1,6 +1,17 @@
 { stdenv, fetchurl, rustPlatform, darwin, openssl, libsodium, nettle, clang, libclang, pkgconfig }:
 
-rustPlatform.buildRustPackage rec {
+let
+  # nettle-sys=1.0.1 requires the des-compat.h header, but it was removed in
+  # nettle 3.5.  See https://nest.pijul.com/pijul_org/pijul/discussions/416
+  # Remove with the next release
+  nettle_34 = nettle.overrideAttrs (_oldAttrs: rec {
+    version = "3.4.1";
+    src = fetchurl {
+      url = "mirror://gnu/nettle/nettle-${version}.tar.gz";
+      sha256 = "1bcji95n1iz9p9vsgdgr26v6s7zhpsxfbjjwpqcihpfd6lawyhgr";
+    };
+  });
+in rustPlatform.buildRustPackage rec {
   pname = "pijul";
   version = "0.12.0";
 
@@ -20,7 +31,7 @@ rustPlatform.buildRustPackage rec {
 
   LIBCLANG_PATH = libclang + "/lib";
 
-  buildInputs = [ openssl libsodium nettle libclang ] ++ stdenv.lib.optionals stdenv.isDarwin
+  buildInputs = [ openssl libsodium nettle_34 libclang ] ++ stdenv.lib.optionals stdenv.isDarwin
     (with darwin.apple_sdk.frameworks; [ CoreServices Security ]);
 
   doCheck = false;
diff --git a/pkgs/applications/window-managers/cage/default.nix b/pkgs/applications/window-managers/cage/default.nix
index be45d68dc5d..ce4031b92f5 100644
--- a/pkgs/applications/window-managers/cage/default.nix
+++ b/pkgs/applications/window-managers/cage/default.nix
@@ -1,7 +1,7 @@
 { stdenv, fetchFromGitHub
 , meson, ninja, pkgconfig, makeWrapper
 , wlroots, wayland, wayland-protocols, pixman, libxkbcommon
-, systemd, mesa, libX11
+, systemd, libGL, libX11
 , xwayland ? null
 }:
 
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
   buildInputs = [
     wlroots wayland wayland-protocols pixman libxkbcommon
     # TODO: Not specified but required:
-    systemd mesa libX11
+    systemd libGL libX11
   ];
 
   enableParallelBuilding = true;
diff --git a/pkgs/build-support/appimage/default.nix b/pkgs/build-support/appimage/default.nix
index 7e2b2b347d9..c871df787b7 100644
--- a/pkgs/build-support/appimage/default.nix
+++ b/pkgs/build-support/appimage/default.nix
@@ -185,7 +185,7 @@ rec {
       keyutils.lib
       libjack2
       fribidi
-      p11_kit
+      p11-kit
 
       # libraries not on the upstream include list, but nevertheless expected
       # by at least one appimage
diff --git a/pkgs/build-support/emacs/setup-hook.sh b/pkgs/build-support/emacs/setup-hook.sh
index b55c1873802..b210511d670 100644
--- a/pkgs/build-support/emacs/setup-hook.sh
+++ b/pkgs/build-support/emacs/setup-hook.sh
@@ -1,6 +1,8 @@
 addEmacsVars () {
-  if [[ -d "$1/share/emacs/site-lisp" ]]; then
-      export EMACSLOADPATH="$1/share/emacs/site-lisp${EMACSLOADPATH:+:}${EMACSLOADPATH-}"
+  if test -d $1/share/emacs/site-lisp; then
+      # it turns out, that the trailing : is actually required
+      # see https://www.gnu.org/software/emacs/manual/html_node/elisp/Library-Search.html
+      export EMACSLOADPATH="$1/share/emacs/site-lisp:${EMACSLOADPATH-}"
   fi
 }
 
diff --git a/pkgs/data/documentation/gnome-user-docs/default.nix b/pkgs/data/documentation/gnome-user-docs/default.nix
index 4bdfa70c63f..a47ec9ea790 100644
--- a/pkgs/data/documentation/gnome-user-docs/default.nix
+++ b/pkgs/data/documentation/gnome-user-docs/default.nix
@@ -1,27 +1,41 @@
-{ stdenv, fetchurl, itstool, libxml2, gettext, gnome3 }:
+{ stdenv
+, fetchurl
+, gettext
+, gnome3
+, itstool
+, libxml2
+, yelp-tools
+}:
 
 stdenv.mkDerivation rec {
   pname = "gnome-user-docs";
-  version = "3.2.2";
+  version = "3.34.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1ka0nw2kc85p10y8x31v0wv06a88k7qrgafp4ys04y9fzz0rkcjj";
+    url = "mirror://gnome/sources/gnome-user-docs/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "11m9fv8k2hynrcgah4jvbm6yczg0s1ly302mipysbwpn6gbdkvf2";
   };
 
-  nativeBuildInputs = [ itstool libxml2 gettext ];
+  nativeBuildInputs = [
+    gettext
+    itstool
+    libxml2
+    yelp-tools
+  ];
+
+  enableParallelBuilding = true;
 
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
-      attrPath = "gnome3.gnome-user-docs";
     };
   };
 
-  meta = {
-    homepage = "https://gitlab.gnome.org/GNOME/gnome-user-docs";
-    description = "GNOME User Documentation";
-    license = stdenv.lib.licenses.cc-by-30;
+  meta = with stdenv.lib; {
+    description = "User and system administration help for the GNOME desktop";
+    homepage = "https://help.gnome.org/users/gnome-help/";
+    license = licenses.cc-by-30;
     maintainers = gnome3.maintainers;
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/data/fonts/babelstone-han/default.nix b/pkgs/data/fonts/babelstone-han/default.nix
index 3485b181d5a..0d46fc92d5f 100644
--- a/pkgs/data/fonts/babelstone-han/default.nix
+++ b/pkgs/data/fonts/babelstone-han/default.nix
@@ -14,7 +14,7 @@ in fetchzip {
 
   meta = with lib; {
     description = "Unicode CJK font with over 36000 Han characters";
-    homepage = http://www.babelstone.co.uk/Fonts/Han.html;
+    homepage = https://www.babelstone.co.uk/Fonts/Han.html;
 
     license = licenses.free;
     platforms = platforms.all;
diff --git a/pkgs/data/fonts/fantasque-sans-mono/default.nix b/pkgs/data/fonts/fantasque-sans-mono/default.nix
index 5b982dcaa3e..156db5d214c 100644
--- a/pkgs/data/fonts/fantasque-sans-mono/default.nix
+++ b/pkgs/data/fonts/fantasque-sans-mono/default.nix
@@ -1,7 +1,7 @@
 { lib, fetchzip }:
 
 let
-  version = "1.7.2";
+  version = "1.8.0";
 in
 
 fetchzip rec {
@@ -15,7 +15,7 @@ fetchzip rec {
     unzip -j $downloadedFile README.md -d $out/share/doc/${name}
   '';
 
-  sha256 = "1fwvbqfrgb539xybwdawvwa8cg4f215kw905rgl9a6p0iwa1nxqk";
+  sha256 = "07y2w6xzkbaj6vr95fvvnmwq1pw9jib4z02xf8937dx812yic9ni";
 
   meta = with lib; {
     homepage = https://github.com/belluzj/fantasque-sans;
diff --git a/pkgs/desktops/deepin/deepin-editor/default.nix b/pkgs/desktops/deepin/deepin-editor/default.nix
new file mode 100644
index 00000000000..0aea9558ec0
--- /dev/null
+++ b/pkgs/desktops/deepin/deepin-editor/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, cmake, deepin,
+  dtkcore, dtkwidget, kcodecs, qttools, syntax-highlighting,
+  wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+  pname = "deepin-editor";
+  version = "1.2.9.1";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "0g7c3adqwn8i4ndxdrzibahr75dddz1fiqnsh3bjj1jjr86rv4ks";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkgconfig
+    qttools
+    wrapQtAppsHook
+    deepin.setupHook
+  ];
+
+  buildInputs = [
+    dtkcore
+    dtkwidget
+    kcodecs
+    syntax-highlighting
+  ];
+
+  postPatch = ''
+    searchHardCodedPaths  # debugging
+
+    patchShebangs translate_generation.sh
+
+    fixPath $out /usr \
+      CMakeLists.txt \
+      dedit/main.cpp \
+      src/resources/settings.json \
+      src/thememodule/themelistmodel.cpp
+
+    substituteInPlace deepin-editor.desktop \
+      --replace "Exec=deepin-editor" "Exec=$out/bin/deepin-editor"
+
+    substituteInPlace src/editwrapper.cpp \
+      --replace "appExec = \"deepin-editor\"" "appExec = \"$out/bin/deepin-editor\""
+  '';
+
+  postFixup = ''
+    searchHardCodedPaths $out  # debugging
+  '';
+
+  passthru.updateScript = deepin.updateScript { inherit name; };
+
+  meta = with stdenv.lib; {
+    description = "Simple editor for Deepin Desktop Environment";
+    homepage = https://github.com/linuxdeepin/deepin-editor;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ romildo worldofpeace ];
+  };
+}
diff --git a/pkgs/desktops/deepin/default.nix b/pkgs/desktops/deepin/default.nix
index a2bb4ed19d9..57b0b35a532 100644
--- a/pkgs/desktops/deepin/default.nix
+++ b/pkgs/desktops/deepin/default.nix
@@ -23,6 +23,7 @@ let
     deepin-calculator = callPackage ./deepin-calculator { };
     deepin-desktop-base = callPackage ./deepin-desktop-base { };
     deepin-desktop-schemas = callPackage ./deepin-desktop-schemas { };
+    deepin-editor = callPackage ./deepin-editor { };
     deepin-gettext-tools = callPackage ./deepin-gettext-tools { };
     deepin-gtk-theme = callPackage ./deepin-gtk-theme { };
     deepin-icon-theme = callPackage ./deepin-icon-theme { };
diff --git a/pkgs/desktops/enlightenment/terminology.nix b/pkgs/desktops/enlightenment/terminology.nix
index 672e1b3da73..ee140e09150 100644
--- a/pkgs/desktops/enlightenment/terminology.nix
+++ b/pkgs/desktops/enlightenment/terminology.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "terminology";
-  version = "1.5.0";
+  version = "1.6.0";
 
   src = fetchurl {
     url = "http://download.enlightenment.org/rel/apps/${pname}/${pname}-${version}.tar.xz";
-    sha256 = "0v4amfg8ji0mb6j7kcxh3wz1xw5zyxg4rw6ylx17rfw2nc1yamfy";
+    sha256 = "0xxx4xyhis6fy3frgb34ip0aj0kc4zashf60gzbxmq5gadbb0p5r";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/desktops/gnome-3/apps/gnome-documents/default.nix b/pkgs/desktops/gnome-3/apps/gnome-documents/default.nix
index 3a7e1473332..5aa39e09cd6 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-documents/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-documents/default.nix
@@ -1,36 +1,86 @@
-{ stdenv, meson, ninja, gettext, fetchurl, evince, gjs
-, pkgconfig, gtk3, glib, tracker, tracker-miners
-, itstool, libxslt, webkitgtk, libgdata
-, gnome-desktop, libzapojit, libgepub
-, gnome3, gdk-pixbuf, libsoup, docbook_xsl, docbook_xml_dtd_42
-, gobject-introspection, inkscape, poppler_utils
-, desktop-file-utils, wrapGAppsHook, python3, gsettings-desktop-schemas }:
+{ stdenv
+, meson
+, ninja
+, gettext
+, fetchurl
+, evince
+, gjs
+, pkgconfig
+, gtk3
+, glib
+, tracker
+, tracker-miners
+, itstool
+, libxslt
+, webkitgtk
+, libgdata
+, gnome-desktop
+, libzapojit
+, libgepub
+, gnome3
+, gdk-pixbuf
+, libsoup
+, docbook_xsl
+, docbook_xml_dtd_42
+, gobject-introspection
+, inkscape
+, poppler_utils
+, desktop-file-utils
+, wrapGAppsHook
+, python3
+, gsettings-desktop-schemas
+}:
 
 stdenv.mkDerivation rec {
   pname = "gnome-documents";
-  version = "3.33.90";
+  version = "3.34.0";
 
   src = fetchurl {
     url = "mirror://gnome/sources/gnome-documents/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0l9g10i380bnjp1y3pslsy8ph1hd5x1d57dadvq70p5ki4r3qjaw";
+    sha256 = "1qph567mapg3s1a26k7b8y57g9bklhj2mh8xm758z9zkms20xafq";
   };
 
-  doCheck = true;
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkgconfig
+    gettext
+    itstool
+    libxslt
+    desktop-file-utils
+    docbook_xsl
+    docbook_xml_dtd_42
+    wrapGAppsHook
+    python3
 
-  mesonFlags = [
-    "-Dgetting-started=true"
+    # building getting started
+    inkscape
+    poppler_utils
   ];
 
-  nativeBuildInputs = [
-    meson ninja pkgconfig gettext itstool libxslt desktop-file-utils docbook_xsl docbook_xml_dtd_42 wrapGAppsHook python3
-    inkscape poppler_utils # building getting started
-  ];
   buildInputs = [
-    gtk3 glib gsettings-desktop-schemas
-    gdk-pixbuf gnome3.adwaita-icon-theme evince
-    libsoup webkitgtk gjs gobject-introspection
-    tracker tracker-miners libgdata
-    gnome-desktop libzapojit libgepub
+    gtk3
+    glib
+    gsettings-desktop-schemas
+    gdk-pixbuf
+    gnome3.adwaita-icon-theme
+    evince
+    libsoup
+    webkitgtk
+    gjs
+    gobject-introspection
+    tracker
+    tracker-miners
+    libgdata
+    gnome-desktop
+    libzapojit
+    libgepub
+  ];
+
+  doCheck = true;
+
+  mesonFlags = [
+    "-Dgetting_started=true"
   ];
 
   postPatch = ''
@@ -44,13 +94,13 @@ stdenv.mkDerivation rec {
 
   passthru = {
     updateScript = gnome3.updateScript {
-      packageName = "gnome-documents";
-      attrPath = "gnome3.gnome-documents";
+      packageName = pname;
+      attrPath = "gnome3.${pname}";
     };
   };
 
   meta = with stdenv.lib; {
-    homepage = https://wiki.gnome.org/Apps/Documents;
+    homepage = "https://wiki.gnome.org/Apps/Documents";
     description = "Document manager application designed to work with GNOME 3";
     maintainers = gnome3.maintainers;
     license = licenses.gpl2;
diff --git a/pkgs/desktops/gnome-3/apps/gnome-music/default.nix b/pkgs/desktops/gnome-3/apps/gnome-music/default.nix
index 204d0a8982e..8ac7ad7f2d2 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-music/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-music/default.nix
@@ -1,29 +1,85 @@
-{ stdenv, meson, ninja, gettext, fetchurl, gdk-pixbuf, tracker
-, libxml2, python3, libnotify, wrapGAppsHook, libmediaart
-, gobject-introspection, gnome-online-accounts, grilo, grilo-plugins
-, pkgconfig, gtk3, glib, desktop-file-utils, appstream-glib
-, itstool, gnome3, gst_all_1, libdazzle, libsoup, gsettings-desktop-schemas }:
+{ stdenv
+, meson
+, ninja
+, gettext
+, fetchurl
+, gdk-pixbuf
+, tracker
+, libxml2
+, python3
+, libnotify
+, wrapGAppsHook
+, libmediaart
+, gobject-introspection
+, gnome-online-accounts
+, grilo
+, grilo-plugins
+, pkgconfig
+, gtk3
+, glib
+, desktop-file-utils
+, appstream-glib
+, itstool
+, gnome3
+, gst_all_1
+, libdazzle
+, libsoup
+, gsettings-desktop-schemas
+}:
 
 python3.pkgs.buildPythonApplication rec {
   pname = "gnome-music";
-  version = "3.34.0";
+  version = "3.34.1";
 
   format = "other";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1a566ifx08clfm22qzdh1i6w8cr2kv7avqzkk6zgc5adba0vmzx4";
+    sha256 = "128griji0ficf9agnlhfqh9wf819zdfcz5bbrr12nkxnhksnqv99";
   };
 
-  nativeBuildInputs = [ meson ninja gettext itstool pkgconfig libxml2 wrapGAppsHook desktop-file-utils appstream-glib gobject-introspection ];
-  buildInputs = with gst_all_1; [
-    gtk3 glib libmediaart gnome-online-accounts gobject-introspection
-    gdk-pixbuf gnome3.adwaita-icon-theme python3
-    grilo grilo-plugins libnotify libdazzle libsoup
-    gsettings-desktop-schemas tracker
-    gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly
+  nativeBuildInputs = [
+    meson
+    ninja
+    gettext
+    itstool
+    pkgconfig
+    libxml2
+    wrapGAppsHook
+    desktop-file-utils
+    appstream-glib
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    gtk3
+    glib
+    libmediaart
+    gnome-online-accounts
+    gobject-introspection
+    gdk-pixbuf
+    gnome3.adwaita-icon-theme
+    python3
+    grilo
+    grilo-plugins
+    libnotify
+    libdazzle
+    libsoup
+    gsettings-desktop-schemas
+    tracker
+  ] ++ (with gst_all_1; [
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-bad
+    gst-plugins-ugly
+  ]);
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pycairo
+    dbus-python
+    pygobject3
   ];
-  propagatedBuildInputs = with python3.pkgs; [ pycairo dbus-python pygobject3 ];
 
 
   postPatch = ''
@@ -43,10 +99,10 @@ python3.pkgs.buildPythonApplication rec {
   };
 
   meta = with stdenv.lib; {
-    homepage = https://wiki.gnome.org/Apps/Music;
+    homepage = "https://wiki.gnome.org/Apps/Music";
     description = "Music player and management application for the GNOME desktop environment";
     maintainers = gnome3.maintainers;
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/desktops/gnome-3/core/gnome-user-docs/default.nix b/pkgs/desktops/gnome-3/core/gnome-user-docs/default.nix
deleted file mode 100644
index cb0c1494b94..00000000000
--- a/pkgs/desktops/gnome-3/core/gnome-user-docs/default.nix
+++ /dev/null
@@ -1,26 +0,0 @@
-{ stdenv, fetchurl, pkgconfig, gnome3, itstool, libxml2, intltool }:
-
-stdenv.mkDerivation rec {
-  pname = "gnome-user-docs";
-  version = "3.34.0";
-
-  src = fetchurl {
-    url = "mirror://gnome/sources/gnome-user-docs/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1v94mz8zwzx67db2avbi9p2klw36cz45qr6fbskpvygz2pzhg6cg";
-  };
-
-  passthru = {
-    updateScript = gnome3.updateScript { packageName = "gnome-user-docs"; attrPath = "gnome3.gnome-user-docs"; };
-  };
-
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ gnome3.yelp itstool libxml2 intltool ];
-
-  meta = with stdenv.lib; {
-    homepage = https://help.gnome.org/users/gnome-help/;
-    description = "User and system administration help for the GNOME desktop";
-    maintainers = gnome3.maintainers;
-    license = licenses.cc-by-30;
-    platforms = platforms.linux;
-  };
-}
diff --git a/pkgs/desktops/gnome-3/default.nix b/pkgs/desktops/gnome-3/default.nix
index 3b55cf86bd9..1e760c06029 100644
--- a/pkgs/desktops/gnome-3/default.nix
+++ b/pkgs/desktops/gnome-3/default.nix
@@ -99,8 +99,6 @@ lib.makeScope pkgs.newScope (self: with self; {
 
   gnome-themes-extra = callPackage ./core/gnome-themes-extra { };
 
-  gnome-user-docs = callPackage ./core/gnome-user-docs { };
-
   gnome-user-share = callPackage ./core/gnome-user-share { };
 
   gucharmap = callPackage ./core/gucharmap { };
@@ -160,8 +158,6 @@ lib.makeScope pkgs.newScope (self: with self; {
 
   yelp-xsl = callPackage ./core/yelp-xsl { };
 
-  yelp-tools = callPackage ./core/yelp-tools { };
-
   zenity = callPackage ./core/zenity { };
 
 
@@ -357,7 +353,11 @@ lib.makeScope pkgs.newScope (self: with self; {
 
   inherit (pkgs) vala; # added 2019-10-10
 
+  inherit (pkgs) gnome-user-docs; # added 2019-11-20
+
   inherit (pkgs) gegl_0_4; # added 2019-10-31
 
   inherit (pkgs) gjs; # added 2019-01-05
+
+  inherit (pkgs) yelp-tools; # added 2019-11-20
 })
diff --git a/pkgs/desktops/pantheon/apps/elementary-calculator/default.nix b/pkgs/desktops/pantheon/apps/elementary-calculator/default.nix
index bcbe50e5de3..4cdaacddbeb 100644
--- a/pkgs/desktops/pantheon/apps/elementary-calculator/default.nix
+++ b/pkgs/desktops/pantheon/apps/elementary-calculator/default.nix
@@ -18,7 +18,7 @@
 
 stdenv.mkDerivation rec {
   pname = "elementary-calculator";
-  version = "1.5.2";
+  version = "1.5.3";
 
   repoName = "calculator";
 
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
     owner = "elementary";
     repo = repoName;
     rev = version;
-    sha256 = "1vdgl89hdf9q1ya6as7310hlr0xls3w7js2gzsd9z8arb6037ccl";
+    sha256 = "0ibnj3zm93p8ghiy8gbbm0vlig9mnqjsvvp1cpw62dnap0qixdcg";
   };
 
   passthru = {
diff --git a/pkgs/desktops/pantheon/apps/elementary-photos/default.nix b/pkgs/desktops/pantheon/apps/elementary-photos/default.nix
index 94b6a2fce8e..50a797a702d 100644
--- a/pkgs/desktops/pantheon/apps/elementary-photos/default.nix
+++ b/pkgs/desktops/pantheon/apps/elementary-photos/default.nix
@@ -33,7 +33,7 @@
 
 stdenv.mkDerivation rec {
   pname = "elementary-photos";
-  version = "2.6.4";
+  version = "2.6.5";
 
   repoName = "photos";
 
@@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
     owner = "elementary";
     repo = repoName;
     rev = version;
-    sha256 = "17r9658s0pqy6s45ysi3915sm8hpvmsp7cw2jahqvjc61r4qpdc1";
+    sha256 = "0r6d9y936nw4bn0jvixi1p62dy8qsgl2bx8g3889fndnhfnhbjv0";
   };
 
   passthru = {
diff --git a/pkgs/desktops/pantheon/apps/elementary-screenshot-tool/default.nix b/pkgs/desktops/pantheon/apps/elementary-screenshot-tool/default.nix
index 4dd168f25f0..ce9d0b6c82d 100644
--- a/pkgs/desktops/pantheon/apps/elementary-screenshot-tool/default.nix
+++ b/pkgs/desktops/pantheon/apps/elementary-screenshot-tool/default.nix
@@ -17,7 +17,7 @@
 
 stdenv.mkDerivation rec {
   pname = "elementary-screenshot-tool"; # This will be renamed to "screenshot" soon. See -> https://github.com/elementary/screenshot/pull/93
-  version = "1.6.2";
+  version = "1.7.0";
 
   repoName = "screenshot";
 
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
     owner = "elementary";
     repo = repoName;
     rev = version;
-    sha256 = "1z61j96jk9zjr3bn5hgsp25m4v8h1rqwxm0kg8c34bvl06f13v8q";
+    sha256 = "09jcyy4drzpfxb1blln7hyjg5b7r8w5j5v7va2qhq31y7vzczh62";
   };
 
   passthru = {
diff --git a/pkgs/desktops/pantheon/apps/elementary-terminal/default.nix b/pkgs/desktops/pantheon/apps/elementary-terminal/default.nix
index 8bd335c6530..e847a139616 100644
--- a/pkgs/desktops/pantheon/apps/elementary-terminal/default.nix
+++ b/pkgs/desktops/pantheon/apps/elementary-terminal/default.nix
@@ -20,7 +20,7 @@
 
 stdenv.mkDerivation rec {
   pname = "elementary-terminal";
-  version = "5.3.6";
+  version = "5.4.0";
 
   repoName = "terminal";
 
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
     owner = "elementary";
     repo = repoName;
     rev = version;
-    sha256 = "0jp21sy8k3jq3ycvng9yy2hbhcvfgiknxxa8vcg3c06vqhadmnc3";
+    sha256 = "1rj4hrg5qljsv11apgdp0x4dazlfmjq3s0lk0dvwjvh9nqkr6jbw";
   };
 
   passthru = {
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix
index c179160ddab..6c97c986ae0 100644
--- a/pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix
@@ -16,13 +16,13 @@
 
 stdenv.mkDerivation rec {
   pname = "switchboard-plug-about";
-  version = "2.6.0";
+  version = "2.6.1";
 
   src = fetchFromGitHub {
     owner = "elementary";
     repo = pname;
     rev = version;
-    sha256 = "12ysymk5y2k49yh3rzmra7jmimxrd54gz2f4ssc9i8w06xj5djp7";
+    sha256 = "1z58d21xrjghvjx0ng53pcxwdk2f5d00dvngcyjja0kf7sixba71";
   };
 
   passthru = {
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/applications/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/applications/default.nix
index ddb589c9e79..c15219fbdf8 100644
--- a/pkgs/desktops/pantheon/apps/switchboard-plugs/applications/default.nix
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/applications/default.nix
@@ -13,13 +13,13 @@
 
 stdenv.mkDerivation rec {
   pname = "switchboard-plug-applications";
-  version = "2.1.5";
+  version = "2.1.6";
 
   src = fetchFromGitHub {
     owner = "elementary";
     repo = pname;
     rev = version;
-    sha256 = "1c4agff456625kycacpsww7c9jsnsg1rqps96r7cvn9zq371b5ir";
+    sha256 = "19l979sdn9jzibvn98ag3ys28ka7zqlsbs0gj2gs9jcxhzngrxvg";
   };
 
   passthru = {
@@ -42,8 +42,6 @@ stdenv.mkDerivation rec {
     switchboard
   ];
 
-  PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/lib/switchboard";
-
   meta = with stdenv.lib; {
     description = "Switchboard Applications Plug";
     homepage = https://github.com/elementary/switchboard-plug-applications;
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix
index 00524786f4b..eb3066597ed 100644
--- a/pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix
@@ -13,13 +13,13 @@
 
 stdenv.mkDerivation rec {
   pname = "switchboard-plug-display";
-  version = "2.1.9";
+  version = "2.2.0";
 
   src = fetchFromGitHub {
     owner = "elementary";
     repo = pname;
     rev = version;
-    sha256 = "0g9apywxgkan82h933rjjdm9fhd8vak8mziwsbqlprdz310b2jb2";
+    sha256 = "0mr89kyq034wffzixqlq6lmhyc4jry3dcgxrk306dhks2myindqh";
   };
 
   passthru = {
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/default.nix
index a8556bd5401..7578b779058 100644
--- a/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/default.nix
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/default.nix
@@ -15,13 +15,13 @@
 
 stdenv.mkDerivation rec {
   pname = "switchboard-plug-mouse-touchpad";
-  version = "2.2.0";
+  version = "2.3.0";
 
   src = fetchFromGitHub {
     owner = "elementary";
     repo = pname;
     rev = version;
-    sha256 = "0mr25p7j5hl8zmvz5i3g30s4xbdhk6d22lw2akch3si40il9q5fv";
+    sha256 = "1cg69nbdf4mcr16mi71aw9j8877lyj8yxjfk9bd3sml8f4fh7mmr";
   };
 
   patches = [
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
   ];
 
   postPatch = ''
-    substituteInPlace src/Views/General.vala \
+    substituteInPlace src/Views/Clicking.vala \
       --subst-var-by GSD_GSETTINGS ${glib.getSchemaPath elementary-settings-daemon}
   '';
 
@@ -54,8 +54,6 @@ stdenv.mkDerivation rec {
     switchboard
   ];
 
-  PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/lib/switchboard";
-
   meta = with stdenv.lib; {
     description = "Switchboard Mouse & Touchpad Plug";
     homepage = https://github.com/elementary/switchboard-plug-mouse-touchpad;
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/hardcode-settings-daemon-gsettings.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/hardcode-settings-daemon-gsettings.patch
index b904fe15309..591ed9fc152 100644
--- a/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/hardcode-settings-daemon-gsettings.patch
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/hardcode-settings-daemon-gsettings.patch
@@ -1,63 +1,76 @@
-diff --git a/src/Views/General.vala b/src/Views/General.vala
-index 4b19b73..dfa3d4d 100644
---- a/src/Views/General.vala
-+++ b/src/Views/General.vala
-@@ -138,32 +138,34 @@ public class MouseTouchpad.GeneralView : Gtk.Grid {
-         attach (pointer_speed_scale, 3, 8);
-         attach (pointer_speed_help, 1, 9, 3);
+diff --git a/src/Views/Clicking.vala b/src/Views/Clicking.vala
+index cc4431b..d12ddfe 100644
+--- a/src/Views/Clicking.vala
++++ b/src/Views/Clicking.vala
+@@ -123,42 +123,39 @@ public class MouseTouchpad.ClickingView : Granite.SimpleSettingsPage {
+         content_area.attach (hold_scale, 3, 3);
+        content_area. attach (hold_help, 1, 4, 3);
  
--        var xsettings_schema = SettingsSchemaSource.get_default ().lookup ("org.gnome.settings-daemon.plugins.xsettings", false);
+-        var xsettings_schema = SettingsSchemaSource.get_default ().lookup (
+-            "org.gnome.settings-daemon.plugins.xsettings",
+-            true
+-        );
+-
 -        if (xsettings_schema != null) {
 -            var primary_paste_switch = new Gtk.Switch ();
 -            primary_paste_switch.halign = Gtk.Align.START;
--
--            var primary_paste_help = new Gtk.Label (_("Middle or three-finger clicking on an input will paste any selected text"));
++        SettingsSchemaSource daemon_schema_source = new SettingsSchemaSource.from_directory ("@GSD_GSETTINGS@", null, true);
++        SettingsSchema xsettings_schema = daemon_schema_source.lookup ("org.gnome.settings-daemon.plugins.xsettings", false);
+ 
+-            var primary_paste_help = new Gtk.Label (
+-                _("Middle or three-finger clicking on an input will paste any selected text")
+-            );
 -            primary_paste_help.margin_bottom = 18;
 -            primary_paste_help.wrap = true;
 -            primary_paste_help.xalign = 0;
 -            primary_paste_help.get_style_context ().add_class (Gtk.STYLE_CLASS_DIM_LABEL);
 -
--            attach (new SettingLabel (_("Middle click paste:")), 0, 4);
--            attach (primary_paste_switch, 1, 4);
--            attach (primary_paste_help, 1, 5, 3);
+-            content_area.attach (new SettingLabel (_("Middle click paste:")), 0, 5);
+-            content_area.attach (primary_paste_switch, 1, 5);
+-            content_area.attach (primary_paste_help, 1, 6, 3);
 -
 -            var xsettings = new GLib.Settings ("org.gnome.settings-daemon.plugins.xsettings");
--            primary_paste_switch.notify["active"].connect (() => on_primary_paste_switch_changed (primary_paste_switch, xsettings));
--
--            var current_value = xsettings.get_value ("overrides").lookup_value ("Gtk/EnablePrimaryPaste", VariantType.INT32);
+-            primary_paste_switch.notify["active"].connect (() => {
+-                on_primary_paste_switch_changed (primary_paste_switch, xsettings);
+-            });
++        var primary_paste_switch = new Gtk.Switch ();
++        primary_paste_switch.halign = Gtk.Align.START;
+ 
+-            var current_value = xsettings.get_value ("overrides").lookup_value (
+-                "Gtk/EnablePrimaryPaste",
+-                VariantType.INT32
+-            );
 -            if (current_value != null) {
 -                primary_paste_switch.active = current_value.get_int32 () == 1;
 -            }
-+        var primary_paste_switch = new Gtk.Switch ();
-+        primary_paste_switch.halign = Gtk.Align.START;
-+
-+        var primary_paste_help = new Gtk.Label (_("Middle or three-finger clicking on an input will paste any selected text"));
++        var primary_paste_help = new Gtk.Label (
++            _("Middle or three-finger clicking on an input will paste any selected text")
++        );
 +        primary_paste_help.margin_bottom = 18;
 +        primary_paste_help.wrap = true;
 +        primary_paste_help.xalign = 0;
 +        primary_paste_help.get_style_context ().add_class (Gtk.STYLE_CLASS_DIM_LABEL);
 +
-+        attach (new SettingLabel (_("Middle click paste:")), 0, 4);
-+        attach (primary_paste_switch, 1, 4);
-+        attach (primary_paste_help, 1, 5, 3);
-+
-+        SettingsSchemaSource daemon_schema_source = new SettingsSchemaSource.from_directory ("@GSD_GSETTINGS@", null, true);
-+        SettingsSchema xsettings_schema = daemon_schema_source.lookup ("org.gnome.settings-daemon.plugins.xsettings", false);
++        content_area.attach (new SettingLabel (_("Middle click paste:")), 0, 5);
++        content_area.attach (primary_paste_switch, 1, 5);
++        content_area.attach (primary_paste_help, 1, 6, 3);
 +
 +        var xsettings = new GLib.Settings.full (xsettings_schema, null, null);
-+        primary_paste_switch.notify["active"].connect (() => on_primary_paste_switch_changed (primary_paste_switch, xsettings));
++        primary_paste_switch.notify["active"].connect (() => {
++            on_primary_paste_switch_changed (primary_paste_switch, xsettings);
++        });
 +
-+        var current_value = xsettings.get_value ("overrides").lookup_value ("Gtk/EnablePrimaryPaste", VariantType.INT32);
++        var current_value = xsettings.get_value ("overrides").lookup_value (
++            "Gtk/EnablePrimaryPaste",
++            VariantType.INT32
++        );
 +        if (current_value != null) {
 +            primary_paste_switch.active = current_value.get_int32 () == 1;
          }
  
 -        var daemon_settings = new GLib.Settings ("org.gnome.settings-daemon.peripherals.mouse");
--        daemon_settings.bind ("locate-pointer", reveal_pointer_switch, "active", GLib.SettingsBindFlags.DEFAULT);
-+        SettingsSchema daemon_mouse_schema = daemon_schema_source.lookup ("org.gnome.settings-daemon.peripherals.mouse", false);
-+
-+        var daemon_mouse_settings = new GLib.Settings.full (daemon_mouse_schema, null, null);
-+        daemon_mouse_settings.bind ("locate-pointer", reveal_pointer_switch, "active", GLib.SettingsBindFlags.DEFAULT);
++        SettingsSchema daemon_schema = daemon_schema_source.lookup ("org.gnome.settings-daemon.peripherals.mouse", false);
++        var daemon_settings = new GLib.Settings.full (daemon_schema, null, null);
+         daemon_settings.bind ("double-click", double_click_speed_adjustment, "value", SettingsBindFlags.DEFAULT);
  
          var a11y_mouse_settings = new GLib.Settings ("org.gnome.desktop.a11y.mouse");
-         a11y_mouse_settings.bind ("secondary-click-enabled", hold_switch, "active", GLib.SettingsBindFlags.DEFAULT);
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/network/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/network/default.nix
index 175f0e45f46..be4614df557 100644
--- a/pkgs/desktops/pantheon/apps/switchboard-plugs/network/default.nix
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/network/default.nix
@@ -16,13 +16,13 @@
 
 stdenv.mkDerivation rec {
   pname = "switchboard-plug-network";
-  version = "2.1.4";
+  version = "2.2.0";
 
   src = fetchFromGitHub {
     owner = "elementary";
     repo = pname;
     rev = version;
-    sha256 = "12lvcc15jngzsa40fjhxa6kccs58h5qq4lqrc7lcx5przmfaik8k";
+    sha256 = "0zg4bxrrw1nmm91yp8ymji7mha2wcjrwljcnpcvxq7lf8f2k0145";
   };
 
   passthru = {
@@ -49,14 +49,12 @@ stdenv.mkDerivation rec {
 
   patches = [
     (substituteAll {
-      src = ./nma.patch;
-      networkmanagerapplet = networkmanagerapplet;
+      src = ./fix-paths.patch;
+      inherit networkmanagerapplet;
     })
   ];
 
 
-  PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/lib/switchboard";
-
   meta = with stdenv.lib; {
     description = "Switchboard Networking Plug";
     homepage = https://github.com/elementary/switchboard-plug-network;
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/network/fix-paths.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/network/fix-paths.patch
new file mode 100644
index 00000000000..e2d7a6d4970
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/network/fix-paths.patch
@@ -0,0 +1,35 @@
+diff --git a/src/Views/VPNPage.vala b/src/Views/VPNPage.vala
+index 82e7826..cf00145 100644
+--- a/src/Views/VPNPage.vala
++++ b/src/Views/VPNPage.vala
+@@ -265,7 +265,7 @@ public class Network.VPNPage : Network.Widgets.Page {
+     private void try_connection_editor (string args) {
+         try {
+             var appinfo = AppInfo.create_from_commandline (
+-                "nm-connection-editor %s".printf (args),
++                "@networkmanagerapplet@/bin/nm-connection-editor %s".printf (args),
+                 null,
+                 GLib.AppInfoCreateFlags.NONE
+             );
+diff --git a/src/Widgets/SettingsButton.vala b/src/Widgets/SettingsButton.vala
+index ed36b38..bc71c0c 100644
+--- a/src/Widgets/SettingsButton.vala
++++ b/src/Widgets/SettingsButton.vala
+@@ -24,7 +24,7 @@
+             clicked.connect (() => {
+                 try {
+                     var appinfo = AppInfo.create_from_commandline (
+-                        "nm-connection-editor",
++                        "@networkmanagerapplet@/bin/nm-connection-editor",
+                         null,
+                         AppInfoCreateFlags.NONE
+                     );
+@@ -71,7 +71,7 @@
+         private void edit_connection_uuid (string uuid) {
+             try {
+                 var appinfo = AppInfo.create_from_commandline (
+-                    "nm-connection-editor --edit=%s".printf (uuid), null, AppInfoCreateFlags.NONE
++                    "@networkmanagerapplet@/bin/nm-connection-editor --edit=%s".printf (uuid), null, AppInfoCreateFlags.NONE
+                 );
+ 
+                 appinfo.launch (null, null);
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/network/nma.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/network/nma.patch
deleted file mode 100644
index a5fff9d6a32..00000000000
--- a/pkgs/desktops/pantheon/apps/switchboard-plugs/network/nma.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-diff --git a/src/Widgets/SettingsButton.vala b/src/Widgets/SettingsButton.vala
-index 19fd514..bc800d9 100644
---- a/src/Widgets/SettingsButton.vala
-+++ b/src/Widgets/SettingsButton.vala
-@@ -23,7 +23,7 @@
-             label = _("Edit Connections…");
-             clicked.connect (() => {
-                 try {
--                    var appinfo = AppInfo.create_from_commandline ("nm-connection-editor", null, AppInfoCreateFlags.NONE);
-+                    var appinfo = AppInfo.create_from_commandline ("@networkmanagerapplet@/bin/nm-connection-editor", null, AppInfoCreateFlags.NONE);
-                     appinfo.launch (null, null);
-                 } catch (Error e) {
-                     warning ("%s", e.message);
-@@ -61,13 +61,13 @@
-             label = title;
-             clicked.connect (() => {
-                 edit_connection_uuid (connection.get_uuid ());
--            });  
-+            });
-         }
- 
-         private void edit_connection_uuid (string uuid) {
-             try {
-                 var appinfo = AppInfo.create_from_commandline (
--                    "nm-connection-editor --edit=%s".printf (uuid), null, AppInfoCreateFlags.NONE
-+                    "@networkmanagerapplet@/bin/nm-connection-editor --edit=%s".printf (uuid), null, AppInfoCreateFlags.NONE
-                 );
- 
-                 appinfo.launch (null, null);
-diff --git a/src/Widgets/VPN/VPNPage.vala b/src/Widgets/VPN/VPNPage.vala
-index 23c3ae9..c71984c 100644
---- a/src/Widgets/VPN/VPNPage.vala
-+++ b/src/Widgets/VPN/VPNPage.vala
-@@ -86,8 +86,7 @@ namespace Network {
-             add_button.tooltip_text = _("Add VPN Connection…");
-             add_button.clicked.connect (() => {
-                 add_button.sensitive = false;
--                var command = new Granite.Services.SimpleCommand ("/usr/bin",
--                                                    "nm-connection-editor --create --type=vpn");
-+                var command = new Granite.Services.SimpleCommand ("@networkmanagerapplet@", "bin/nm-connection-editor --create --type=vpn");
-                 command.done.connect ((exit) => {
-                     if (exit != 0) {
-                         var dialog = new Gtk.MessageDialog (null, Gtk.DialogFlags.MODAL, Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE, "%s", _("Failed to run Connection Editor."));
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/default.nix
index 35dd958483d..cd48b9d1d78 100644
--- a/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/default.nix
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/default.nix
@@ -4,13 +4,13 @@
 
 stdenv.mkDerivation rec {
   pname = "switchboard-plug-pantheon-shell";
-  version = "2.8.1";
+  version = "2.8.2";
 
   src = fetchFromGitHub {
     owner = "elementary";
     repo = pname;
     rev = version;
-    sha256 = "1vrnzxqzl84k8gbrais4j1jyap10kvil4cr769jpr3q3bkbblwrw";
+    sha256 = "0l4js2gqvn8lmky5b3jjqw6mzxcv9i2gjqr1vka0z40px6vfzf0z";
   };
 
   passthru = {
@@ -43,23 +43,17 @@ stdenv.mkDerivation rec {
   patches = [
     ./backgrounds.patch # Having https://github.com/elementary/switchboard-plug-pantheon-shell/issues/166 would make this patch uneeded
     ./hardcode-gsettings.patch
-    # Fixes https://github.com/elementary/switchboard-plug-pantheon-shell/issues/172
-    (fetchpatch {
-      url = "https://github.com/elementary/switchboard-plug-pantheon-shell/commit/e4f86df6a6be402db4c979a4b005573618b744d1.patch";
-      sha256 = "0sa8611k6sqg96mnp2plmxd30w6zq76bfwszl8ankr9kwsgyc66y";
-    })
   ];
 
   postPatch = ''
     substituteInPlace src/Views/Appearance.vala \
       --subst-var-by GALA_GSETTINGS_PATH ${glib.getSchemaPath gala}
+    substituteInPlace src/Views/HotCorners.vala \
+      --subst-var-by GALA_GSETTINGS_PATH ${glib.getSchemaPath gala}
     substituteInPlace src/Views/Appearance.vala \
       --subst-var-by WINGPANEL_GSETTINGS_PATH ${glib.getSchemaPath wingpanel}
   '';
 
-
-  PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/lib/switchboard";
-
   meta = with stdenv.lib; {
     description = "Switchboard Desktop Plug";
     homepage = https://github.com/elementary/switchboard-plug-pantheon-shell;
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/hardcode-gsettings.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/hardcode-gsettings.patch
index d023e1b55ce..d337cf2e7b7 100644
--- a/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/hardcode-gsettings.patch
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/hardcode-gsettings.patch
@@ -1,5 +1,5 @@
 diff --git a/src/Views/Appearance.vala b/src/Views/Appearance.vala
-index 721d458..17e1c58 100644
+index c8300cc..fc48a0e 100644
 --- a/src/Views/Appearance.vala
 +++ b/src/Views/Appearance.vala
 @@ -66,10 +66,16 @@ public class Appearance : Gtk.Grid {
@@ -17,7 +17,23 @@ index 721d458..17e1c58 100644
 +        SettingsSchemaSource panel_schema_source = new SettingsSchemaSource.from_directory ("@WINGPANEL_GSETTINGS_PATH@", SettingsSchemaSource.get_default (), true);
 +        SettingsSchema panel_schema = panel_schema_source.lookup (PANEL_SCHEMA, false);
 +
-+        var panel_settings = new Settings.full (panel_schema, null, null);
++        var panel_settings = new GLib.Settings.full (panel_schema, null, null);
          panel_settings.bind (TRANSLUCENCY_KEY, translucency_switch, "active", SettingsBindFlags.DEFAULT);
  
          var interface_settings = new Settings (INTERFACE_SCHEMA);
+diff --git a/src/Views/HotCorners.vala b/src/Views/HotCorners.vala
+index 481e7c5..d102d03 100644
+--- a/src/Views/HotCorners.vala
++++ b/src/Views/HotCorners.vala
+@@ -30,7 +30,10 @@ public class HotCorners : Gtk.Grid {
+         row_spacing = 24;
+         halign = Gtk.Align.CENTER;
+ 
+-        behavior_settings = new GLib.Settings ("org.pantheon.desktop.gala.behavior");
++
++        SettingsSchemaSource gala_schema_source = new SettingsSchemaSource.from_directory ("@GALA_GSETTINGS_PATH@", SettingsSchemaSource.get_default (), true);
++        SettingsSchema behavior_schema = gala_schema_source.lookup ("org.pantheon.desktop.gala.behavior", false);
++        behavior_settings = new GLib.Settings.full (behavior_schema, null, null);
+ 
+         custom_command_revealer = new Gtk.Revealer ();
+ 
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/power/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/power/default.nix
index 7bc3f6ba7ad..1639181193a 100644
--- a/pkgs/desktops/pantheon/apps/switchboard-plugs/power/default.nix
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/power/default.nix
@@ -19,13 +19,13 @@
 
 stdenv.mkDerivation rec {
   pname = "switchboard-plug-power";
-  version = "2.3.5";
+  version = "2.4.0";
 
   src = fetchFromGitHub {
     owner = "elementary";
     repo = pname;
     rev = version;
-    sha256 = "1wcxz4jxyv8kms9gxpwvrb356h10qvcwmdjzjzl2bvj5yl1rfcs9";
+    sha256 = "1b25slfh8166v9z2zmb25k64pcj0lh001qh04qhfilzfcbh54krj";
   };
 
   passthru = {
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix
index aa65934acdb..10c95dd7b8e 100644
--- a/pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix
@@ -15,13 +15,13 @@
 
 stdenv.mkDerivation rec {
   pname = "switchboard-plug-printers";
-  version = "2.1.6";
+  version = "2.1.7";
 
   src = fetchFromGitHub {
     owner = "elementary";
     repo = pname;
     rev = version;
-    sha256 = "05pkf3whh51gd9d0h2h4clgf7r3mvzl4ybas7834vhy19dzcbzmc";
+    sha256 = "03r67q6my10i4hl8d0q3d6fhqm9abs9kn9j92hk6ykqb4ybxw1z1";
   };
 
   passthru = {
@@ -45,16 +45,6 @@ stdenv.mkDerivation rec {
     switchboard
   ];
 
-  patches = [
-    # Fix build with latest vala.
-    (fetchpatch {
-      url = "https://github.com/elementary/switchboard-plug-printers/commit/3175c2ebf106145a95355d2571e0a2aa4834e884.patch";
-      sha256 = "1b2q48a1284037nz79vjcrz8g2qpsyg7s5rag6bfp03a1ijb7gw3";
-    })
-  ];
-
-  PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/lib/switchboard";
-
   meta = with stdenv.lib; {
     description = "Switchboard Printers Plug";
     homepage = https://github.com/elementary/switchboard-plug-printers;
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/sound/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/sound/default.nix
index dee2f851e3f..cd4b4beb1df 100644
--- a/pkgs/desktops/pantheon/apps/switchboard-plugs/sound/default.nix
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/sound/default.nix
@@ -16,13 +16,13 @@
 
 stdenv.mkDerivation rec {
   pname = "switchboard-plug-sound";
-  version = "2.2.1";
+  version = "2.2.2";
 
   src = fetchFromGitHub {
     owner = "elementary";
     repo = pname;
     rev = version;
-    sha256 = "0frml591r82j7hf1zlccgv8pzk3w10x470f9nzvdgdjpz0r776k2";
+    sha256 = "1aa9wgaz34glrrnilnqis3k0bnx2a2ir38j493y4d0klkjkwyn5k";
   };
 
   passthru = {
@@ -48,8 +48,6 @@ stdenv.mkDerivation rec {
     switchboard
   ];
 
-  PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/lib/switchboard";
-
   meta = with stdenv.lib; {
     description = "Switchboard Sound Plug";
     homepage = https://github.com/elementary/switchboard-plug-sound;
diff --git a/pkgs/desktops/pantheon/desktop/elementary-onboarding/default.nix b/pkgs/desktops/pantheon/desktop/elementary-onboarding/default.nix
index 3ee55a141b8..2c532f899ab 100644
--- a/pkgs/desktops/pantheon/desktop/elementary-onboarding/default.nix
+++ b/pkgs/desktops/pantheon/desktop/elementary-onboarding/default.nix
@@ -14,12 +14,13 @@
 , elementary-icon-theme
 , elementary-gtk-theme
 , gettext
+, libhandy
 , wrapGAppsHook
 }:
 
 stdenv.mkDerivation rec {
   pname = "elementary-onboarding";
-  version = "1.0.1";
+  version = "1.1.0";
 
   repoName = "onboarding";
 
@@ -27,7 +28,7 @@ stdenv.mkDerivation rec {
     owner = "elementary";
     repo = repoName;
     rev = version;
-    sha256 = "025i9av4waqwp1gn8d6sjp8qdwg2j3jskxhmyf9qxbzwfc5msysg";
+    sha256 = "17fw95qg7j0mvam90jrvr77hw2ipxb2lkw0xxql1lzwvdx1h0r2k";
   };
 
   passthru = {
@@ -48,20 +49,13 @@ stdenv.mkDerivation rec {
   ];
 
   buildInputs = [
+    elementary-gtk-theme
     elementary-icon-theme
+    glib
     granite
     gtk3
-    elementary-gtk-theme
     libgee
-    glib
-  ];
-
-  patches = [
-    # Make sure we use our logo from /etc/os-release
-    (fetchpatch {
-      url = "https://github.com/elementary/onboarding/commit/03975bacb75741d3dd391a126217e415f43c6059.patch";
-      sha256 = "1yw7dysav90abxnmkv86bc60dyl8nvi0sgaiz8v39cc2x00rqsg1";
-    })
+    libhandy
   ];
 
   postPatch = ''
diff --git a/pkgs/desktops/pantheon/desktop/elementary-shortcut-overlay/default.nix b/pkgs/desktops/pantheon/desktop/elementary-shortcut-overlay/default.nix
index 20b1ac7d353..097c62f344f 100644
--- a/pkgs/desktops/pantheon/desktop/elementary-shortcut-overlay/default.nix
+++ b/pkgs/desktops/pantheon/desktop/elementary-shortcut-overlay/default.nix
@@ -17,7 +17,7 @@
 
 stdenv.mkDerivation rec {
   pname = "elementary-shortcut-overlay";
-  version = "1.0.1";
+  version = "1.1.0";
 
   repoName = "shortcut-overlay";
 
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
     owner = "elementary";
     repo = repoName;
     rev = version;
-    sha256 = "1ph4rx2l5fn0zh4fjfjlgbgskmzc0lvzqgcv7v4kr5m4rij1p4y4";
+    sha256 = "10s44x5qln3asrdr6v5b3v92prh8rfhv96dbm73zhifm2jjm22g8";
   };
 
   passthru = {
diff --git a/pkgs/desktops/pantheon/services/pantheon-agent-geoclue2/default.nix b/pkgs/desktops/pantheon/services/pantheon-agent-geoclue2/default.nix
index 8afbbbeed82..1e7f82f134d 100644
--- a/pkgs/desktops/pantheon/services/pantheon-agent-geoclue2/default.nix
+++ b/pkgs/desktops/pantheon/services/pantheon-agent-geoclue2/default.nix
@@ -15,13 +15,13 @@
 
 stdenv.mkDerivation rec {
   pname = "pantheon-agent-geoclue2";
-  version = "1.0.2";
+  version = "1.0.3";
 
   src = fetchFromGitHub {
     owner = "elementary";
     repo = pname;
     rev = version;
-    sha256 = "1hjnbbzsch09090b200b3i85x8fv95agfqd6nrlc9za3jqjhm2xs";
+    sha256 = "1fhgdcykn0ykn8fp7inn2akygpglhdwfpdkpnih86kqmqj8siahv";
   };
 
   passthru = {
diff --git a/pkgs/desktops/pantheon/services/pantheon-agent-polkit/default.nix b/pkgs/desktops/pantheon/services/pantheon-agent-polkit/default.nix
index 53a65ddb947..0259e687bd3 100644
--- a/pkgs/desktops/pantheon/services/pantheon-agent-polkit/default.nix
+++ b/pkgs/desktops/pantheon/services/pantheon-agent-polkit/default.nix
@@ -7,19 +7,20 @@
 , vala
 , gtk3
 , libgee
+, granite
 , polkit
 , wrapGAppsHook
 }:
 
 stdenv.mkDerivation rec {
   pname = "pantheon-agent-polkit";
-  version = "0.1.6";
+  version = "1.0.0";
 
   src = fetchFromGitHub {
     owner = "elementary";
     repo = pname;
     rev = version;
-    sha256 = "1g9l2jzpvv0dbvxh93w98a7ijsfqv3s3382li4s256179gihhd67";
+    sha256 = "1yybblprcn0cgcf9j76yckqcimm4h8l41cczxjvgp789p1pki3bn";
   };
 
   passthru = {
@@ -37,6 +38,7 @@ stdenv.mkDerivation rec {
   ];
 
   buildInputs = [
+    granite
     gtk3
     libgee
     polkit
diff --git a/pkgs/desktops/plasma-5/default.nix b/pkgs/desktops/plasma-5/default.nix
index 4a8c3f40831..d80f51831fd 100644
--- a/pkgs/desktops/plasma-5/default.nix
+++ b/pkgs/desktops/plasma-5/default.nix
@@ -43,7 +43,7 @@ let
       propagate = out:
         let setupHook = { writeScript }:
               writeScript "setup-hook" ''
-                if [ "${hookName:-}" != postHook ]; then
+                if [ "''${hookName:-}" != postHook ]; then
                     postHooks+=("source @dev@/nix-support/setup-hook")
                 else
                     # Propagate $${out} output
diff --git a/pkgs/development/compilers/carp/default.nix b/pkgs/development/compilers/carp/default.nix
index 235ec409039..e02880b314e 100644
--- a/pkgs/development/compilers/carp/default.nix
+++ b/pkgs/development/compilers/carp/default.nix
@@ -1,21 +1,22 @@
 { stdenv, fetchFromGitHub, makeWrapper, clang, haskellPackages }:
 
-haskellPackages.mkDerivation {
+haskellPackages.mkDerivation rec {
 
   pname = "carp";
-  version = "unstable-2018-09-15";
+  version = "0.3.0";
 
   src = fetchFromGitHub {
     owner = "carp-lang";
     repo = "Carp";
-    rev = "cf9286c35cab1c170aa819f7b30b5871b9e812e6";
-    sha256 = "1k6kdxbbaclhi40b9p3fgbkc1x6pc4v0029xjm6gny6pcdci2cli";
+    rev = "v${version}";
+    sha256 = "07yk3gy4l6h3k7sh8al7lgwk75a13zxwfp7siqpb5gnnqr1z3brc";
   };
 
   buildDepends = [ makeWrapper ];
 
   executableHaskellDepends = with haskellPackages; [
-    HUnit blaze-markup blaze-html split cmdargs
+    HUnit blaze-markup blaze-html split cmdargs ansi-terminal cmark
+    edit-distance
   ];
 
   isExecutable = true;
diff --git a/pkgs/development/compilers/gerbil/unstable.nix b/pkgs/development/compilers/gerbil/unstable.nix
index a9618a7e066..5f0347aa9a6 100644
--- a/pkgs/development/compilers/gerbil/unstable.nix
+++ b/pkgs/development/compilers/gerbil/unstable.nix
@@ -1,14 +1,15 @@
-{ stdenv, callPackage, fetchFromGitHub, gambit-unstable }:
+{ stdenv, callPackage, fetchFromGitHub, gambit, gambit-unstable }:
 
 callPackage ./build.nix {
-  version = "unstable-2019-08-11";
-  git-version = "0.16-DEV-132-gcb58f9a3";
-  gambit = gambit-unstable;
+  version = "unstable-2019-11-15";
+  git-version = "0.15.1-461-gee22de62";
+  #gambit = gambit-unstable;
+  gambit = gambit;
   src = fetchFromGitHub {
     owner = "vyzo";
     repo = "gerbil";
-    rev = "cb58f9a30630a6f3e85a55f2c1dcc654f517ffed";
-    sha256 = "18jh64v1gi6z3pks9zf19f2wcjpv21cs270dnaq617kgwp53vysh";
+    rev = "ee22de628a656ee59c6c72bc25d7b2e25a4ece2f";
+    sha256 = "1n1j596b91k9xcmv22l72nga6wv20bka2q51ik2jw2vkcw8zkc1c";
   };
   inherit stdenv;
 }
diff --git a/pkgs/development/compilers/ghc/head.nix b/pkgs/development/compilers/ghc/head.nix
index 565c545e48c..0e73f81fbab 100644
--- a/pkgs/development/compilers/ghc/head.nix
+++ b/pkgs/development/compilers/ghc/head.nix
@@ -2,11 +2,14 @@
 
 # build-tools
 , bootPkgs
-, autoconf, automake, coreutils, fetchgit, fetchpatch, perl, python3, m4, sphinx
+, autoconf, autoreconfHook, automake, coreutils, fetchgit, fetchpatch, perl, python3, m4, sphinx
 , bash
 
 , libiconv ? null, ncurses
 
+, enableDwarf ? !stdenv.targetPlatform.isDarwin &&
+                !stdenv.targetPlatform.isWindows, elfutils # for DWARF support
+
 , useLLVM ? !stdenv.targetPlatform.isx86
 , # LLVM is conceptually a run-time-only depedendency, but for
   # non-x86, we need LLVM to bootstrap later stages, so it becomes a
@@ -27,7 +30,7 @@
 , # Whetherto build terminfo.
   enableTerminfo ? !stdenv.targetPlatform.isWindows
 
-, version ? "8.9.20190924"
+, version ? "8.10.20191119"
 , # What flavour to build. An empty string indicates no
   # specific flavour and falls back to ghc default values.
   ghcFlavour ? stdenv.lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform)
@@ -73,7 +76,8 @@ let
   # Splicer will pull out correct variations
   libDeps = platform: stdenv.lib.optional enableTerminfo [ ncurses ]
     ++ stdenv.lib.optional (!enableIntegerSimple) gmp
-    ++ stdenv.lib.optional (platform.libc != "glibc" && !targetPlatform.isWindows) libiconv;
+    ++ stdenv.lib.optional (platform.libc != "glibc" && !targetPlatform.isWindows) libiconv
+    ++ stdenv.lib.optional enableDwarf elfutils;
 
   toolsForTarget = [
     pkgsBuildTarget.targetPackages.stdenv.cc
@@ -89,8 +93,8 @@ stdenv.mkDerivation (rec {
 
   src = fetchgit {
     url = "https://gitlab.haskell.org/ghc/ghc.git/";
-    rev = "795986aaf33e2ffc233836b86a92a77366c91db2";
-    sha256 = "0a111x6c53r07q5qdg6c8mnydqp0wh4mpxmw7ga4x5wlap8i0bji";
+    rev = "0418c38d55c7a47967187dce2db5ea2ab1021b1e";
+    sha256 = "1d8g30ii0w4xh6fh61bxbalsqqyanny99nn3p727fx7favnhgvxi";
   };
 
   enableParallelBuilding = true;
@@ -98,13 +102,6 @@ stdenv.mkDerivation (rec {
   outputs = [ "out" "doc" ];
 
   patches = [
-    (fetchpatch { # https://github.com/haskell/haddock/issues/900
-     url = "https://patch-diff.githubusercontent.com/raw/haskell/haddock/pull/983.diff";
-     name = "loadpluginsinmodules.diff";
-     sha256 = "0bvvv0zsfq2581zsir97zfkggc1kkircbbajc2fz3b169ycpbha1";
-     extraPrefix = "utils/haddock/";
-     stripLen = 1;
-   })
   ];
 
   postPatch = "patchShebangs .";
@@ -176,13 +173,17 @@ stdenv.mkDerivation (rec {
     "CONF_GCC_LINKER_OPTS_STAGE2=-fuse-ld=gold"
   ] ++ stdenv.lib.optionals (disableLargeAddressSpace) [
     "--disable-large-address-space"
+  ] ++ stdenv.lib.optional enableDwarf [
+    "--enable-dwarf-unwind"
+    "--with-libdw-includes=${stdenv.lib.getDev elfutils}/include"
+    "--with-libdw-libraries=${stdenv.lib.getLib elfutils}/lib"
   ];
 
   # Make sure we never relax`$PATH` and hooks support for compatability.
   strictDeps = true;
 
   nativeBuildInputs = [
-    perl autoconf automake m4 python3 sphinx
+    perl autoconf autoreconfHook automake m4 python3 sphinx
     ghc bootPkgs.alex bootPkgs.happy bootPkgs.hscolour
   ];
 
diff --git a/pkgs/development/compilers/openjdk/8.nix b/pkgs/development/compilers/openjdk/8.nix
index ff3d03321e2..4debf10c0cb 100644
--- a/pkgs/development/compilers/openjdk/8.nix
+++ b/pkgs/development/compilers/openjdk/8.nix
@@ -193,6 +193,11 @@ let
       mkdir $out/lib/openjdk/jre
       lndir $jre/lib/openjdk/jre $out/lib/openjdk/jre
 
+      # Make sure cmm/*.pf are not symlinks:
+      # https://youtrack.jetbrains.com/issue/IDEA-147272
+      rm -rf $out/lib/openjdk/jre/lib/cmm
+      ln -s {$jre,$out}/lib/openjdk/jre/lib/cmm
+
       # Setup fallback fonts
       ${lib.optionalString (!headless) ''
         mkdir -p $jre/lib/openjdk/jre/lib/fonts
diff --git a/pkgs/development/compilers/unison/default.nix b/pkgs/development/compilers/unison/default.nix
index 90dd233a2bb..03a62d1e4d8 100644
--- a/pkgs/development/compilers/unison/default.nix
+++ b/pkgs/development/compilers/unison/default.nix
@@ -4,18 +4,18 @@
 
 stdenv.mkDerivation rec {
   pname = "unison-code-manager";
-  milestone_id = "M1e";
+  milestone_id = "M1f";
   version = "1.0.${milestone_id}-alpha";
 
   src = if (stdenv.isDarwin) then
     fetchurl {
       url = "https://github.com/unisonweb/unison/releases/download/release/${milestone_id}/unison-osx.tar.gz";
-      sha256 = "1jcjc8drjnvr67174ym9cppzi5zdq7jrj98xmf8gvrbx45v2gc6h";
+      sha256 = "089nb0b9ghsdbs39sskwa9a6v6s5xwshcfzk9qbbpahzphp1xmfk";
     }
   else
     fetchurl {
       url = "https://github.com/unisonweb/unison/releases/download/release/${milestone_id}/unison-linux64.tar.gz";
-      sha256 = "1jq6xx879lqv3hxq8azg1rp72hy63qsn5w9nx95i4dzmmgwp0xx1";
+      sha256 = "0jq2cspanlw15910khlzfdqdfgkwkr1q4fkmrkj0q8gz70mqi6ri";
     };
 
   # The tarball is just the prebuilt binary, in the archive root.
diff --git a/pkgs/development/interpreters/eff/default.nix b/pkgs/development/interpreters/eff/default.nix
index 7c7cd9abb7e..9da2b0d899d 100644
--- a/pkgs/development/interpreters/eff/default.nix
+++ b/pkgs/development/interpreters/eff/default.nix
@@ -22,7 +22,7 @@ stdenv.mkDerivation {
   checkTarget = "test";
 
   meta = with stdenv.lib; {
-    homepage = http://www.eff-lang.org;
+    homepage = https://www.eff-lang.org;
     description = "A functional programming language based on algebraic effects and their handlers";
     longDescription = ''
       Eff is a functional language with handlers of not only exceptions,
diff --git a/pkgs/development/interpreters/lua-5/CVE-2019-6706.patch b/pkgs/development/interpreters/lua-5/CVE-2019-6706.patch
new file mode 100644
index 00000000000..89e81b7eb68
--- /dev/null
+++ b/pkgs/development/interpreters/lua-5/CVE-2019-6706.patch
@@ -0,0 +1,22 @@
+--- a/src/lapi.c
++++ b/src/lapi.c
+@@ -1285,14 +1285,14 @@ LUA_API void *lua_upvalueid (lua_State *
+ 
+ LUA_API void lua_upvaluejoin (lua_State *L, int fidx1, int n1,
+                                             int fidx2, int n2) {
+-  LClosure *f1;
+-  UpVal **up1 = getupvalref(L, fidx1, n1, &f1);
++  UpVal **up1 = getupvalref(L, fidx1, n1, NULL); /* the last parameter not needed */
+   UpVal **up2 = getupvalref(L, fidx2, n2, NULL);
++  if (*up1 == *up2) return; /* Already joined */
++  (*up2)->refcount++;
++  if (upisopen(*up2)) (*up2)->u.open.touched = 1;
++  luaC_upvalbarrier(L, *up2);
+   luaC_upvdeccount(L, *up1);
+   *up1 = *up2;
+-  (*up1)->refcount++;
+-  if (upisopen(*up1)) (*up1)->u.open.touched = 1;
+-  luaC_upvalbarrier(L, *up1);
+ }
+ 
+ 
diff --git a/pkgs/development/interpreters/lua-5/default.nix b/pkgs/development/interpreters/lua-5/default.nix
index 1398e66d9a5..7e79ff8f117 100644
--- a/pkgs/development/interpreters/lua-5/default.nix
+++ b/pkgs/development/interpreters/lua-5/default.nix
@@ -1,5 +1,5 @@
 # similar to interpreters/python/default.nix
-{ stdenv, lib, callPackage, fetchurl }:
+{ stdenv, lib, callPackage, fetchurl, fetchpatch }:
 let
   dsoPatch51 = fetchurl {
     url = "https://projects.archlinux.org/svntogit/packages.git/plain/trunk/lua-arch.patch?h=packages/lua51";
@@ -18,7 +18,10 @@ in rec {
   lua5_3 = callPackage ./interpreter.nix {
     sourceVersion = { major = "5"; minor = "3"; patch = "5"; };
     hash = "0c2eed3f960446e1a3e4b9a1ca2f3ff893b6ce41942cf54d5dd59ab4b3b058ac";
-    patches = lib.optionals stdenv.isDarwin [ ./5.2.darwin.patch ] ;
+    patches =
+      lib.optionals stdenv.isDarwin [ ./5.2.darwin.patch ] ++ [
+        ./CVE-2019-6706.patch
+      ];
     postConfigure = lib.optionalString (!stdenv.isDarwin) ''
       cat ${./lua-5.3-dso.make} >> src/Makefile
       sed -e 's/ALL_T *= */& $(LUA_SO)/' -i src/Makefile
diff --git a/pkgs/development/interpreters/lua-5/wrapper.nix b/pkgs/development/interpreters/lua-5/wrapper.nix
index 816744e61cf..53ec2baeb5e 100644
--- a/pkgs/development/interpreters/lua-5/wrapper.nix
+++ b/pkgs/development/interpreters/lua-5/wrapper.nix
@@ -11,7 +11,7 @@
 let
   env = let
     paths =  requiredLuaModules (extraLibs ++ [ lua ] );
-  in buildEnv {
+  in (buildEnv {
     name = "${lua.name}-env";
 
     inherit paths;
@@ -20,12 +20,6 @@ let
 
     # we create wrapper for the binaries in the different packages
     postBuild = ''
-
-      . "${makeWrapper}/nix-support/setup-hook"
-
-      # get access to lua functions
-      . ${lua}/nix-support/setup-hook
-
       if [ -L "$out/bin" ]; then
           unlink "$out/bin"
       fi
@@ -68,5 +62,8 @@ let
         '';
     };
     };
-  };
+  }).overrideAttrs (_: {
+    # Add extra deps needed for postBuild hook.
+    nativeBuildInputs = [ makeWrapper lua ];
+  });
 in env
diff --git a/pkgs/development/interpreters/python/cpython/default.nix b/pkgs/development/interpreters/python/cpython/default.nix
index 09c324716bd..43d2d159e36 100644
--- a/pkgs/development/interpreters/python/cpython/default.nix
+++ b/pkgs/development/interpreters/python/cpython/default.nix
@@ -17,6 +17,7 @@
 # For the Python package set
 , packageOverrides ? (self: super: {})
 , buildPackages
+, pythonForBuild ? buildPackages.${"python${sourceVersion.major}${sourceVersion.minor}"}
 , sourceVersion
 , sha256
 , passthruFun
@@ -63,7 +64,7 @@ let
 
   hasDistutilsCxxPatch = !(stdenv.cc.isGNU or false);
 
-  pythonForBuild = buildPackages.${"python${sourceVersion.major}${sourceVersion.minor}"};
+  inherit pythonForBuild;
 
   pythonForBuildInterpreter = if stdenv.hostPlatform == stdenv.buildPlatform then
     "$out/bin/python"
diff --git a/pkgs/development/interpreters/python/default.nix b/pkgs/development/interpreters/python/default.nix
index f5f4dce68b4..3be722cd156 100644
--- a/pkgs/development/interpreters/python/default.nix
+++ b/pkgs/development/interpreters/python/default.nix
@@ -46,7 +46,7 @@ with pkgs;
         inherit hasDistutilsCxxPatch pythonForBuild;
   };
 
-in {
+in rec {
 
   python27 = callPackage ./cpython/2.7 {
     self = python27;
@@ -127,18 +127,9 @@ in {
   };
 
   # Minimal versions of Python (built without optional dependencies)
-  python3Minimal = (callPackage ./cpython {
+  python3Minimal = (python37.override {
     self = python3Minimal;
-    sourceVersion = {
-      major = "3";
-      minor = "7";
-      patch = "4";
-      suffix = "";
-    };
-    sha256 = "0gxiv5617zd7dnqm5k9r4q2188lk327nf9jznwq9j6b8p0s92ygv";
-    inherit (darwin) CF configd;
-    inherit passthruFun;
-
+    pythonForBuild = pkgs.buildPackages.python3Minimal;
     # strip down that python version as much as possible
     openssl = null;
     readline = null;
diff --git a/pkgs/development/libraries/gjs/default.nix b/pkgs/development/libraries/gjs/default.nix
index 6430be0b57f..c723a54765b 100644
--- a/pkgs/development/libraries/gjs/default.nix
+++ b/pkgs/development/libraries/gjs/default.nix
@@ -7,12 +7,14 @@
 , gobject-introspection
 , spidermonkey_60
 , pango
+, cairo
 , readline
 , glib
 , libxml2
 , dbus
 , gdk-pixbuf
 , makeWrapper
+, nixosTests
 }:
 
 stdenv.mkDerivation rec {
@@ -24,24 +26,24 @@ stdenv.mkDerivation rec {
     sha256 = "1xf68rbagkflb9yi3visfw8cbxqlzd717y8jakgw0y6whzm1dpxl";
   };
 
-  outputs = [ "out" "installedTests" ];
+  outputs = [ "out" "dev" "installedTests" ];
 
   nativeBuildInputs = [
     pkgconfig
     makeWrapper
+    libxml2 # for xml-stripblanks
   ];
 
   buildInputs = [
-    libxml2
     gobject-introspection
-    glib
-    pango
+    cairo
     readline
-    dbus
+    spidermonkey_60
+    dbus # for dbus-run-session
   ];
 
   propagatedBuildInputs = [
-    spidermonkey_60
+    glib
   ];
 
   configureFlags = [
@@ -55,8 +57,6 @@ stdenv.mkDerivation rec {
   '';
 
   postInstall = ''
-    sed 's|-lreadline|-L${readline.out}/lib -lreadline|g' -i $out/lib/libgjs.la
-
     moveToOutput "share/installed-tests" "$installedTests"
     moveToOutput "libexec/gjs/installed-tests" "$installedTests"
 
@@ -67,6 +67,10 @@ stdenv.mkDerivation rec {
   separateDebugInfo = stdenv.isLinux;
 
   passthru = {
+    tests = {
+      installed-tests = nixosTests.installed-tests.gjs;
+    };
+
     updateScript = gnome3.updateScript {
       packageName = "gjs";
     };
diff --git a/pkgs/development/libraries/glib/setup-hook.sh b/pkgs/development/libraries/glib/setup-hook.sh
index 20714ea7ab8..37c750b8db6 100644
--- a/pkgs/development/libraries/glib/setup-hook.sh
+++ b/pkgs/development/libraries/glib/setup-hook.sh
@@ -1,8 +1,8 @@
 
 make_glib_find_gsettings_schemas() {
     # For packages that need gschemas of other packages (e.g. empathy)
-    for maybe_dir in "$1"/share/gsettings-schemas/*/glib-2.0; do
-        if [[ -d "$maybe_dir/schemas" ]]; then
+    for maybe_dir in "$1"/share/gsettings-schemas/*; do
+        if [[ -d "$maybe_dir/glib-2.0/schemas" ]]; then
             addToSearchPath GSETTINGS_SCHEMAS_PATH "$maybe_dir"
         fi
     done
diff --git a/pkgs/development/libraries/glui/default.nix b/pkgs/development/libraries/glui/default.nix
index 9379a0032af..8ac42375bf9 100644
--- a/pkgs/development/libraries/glui/default.nix
+++ b/pkgs/development/libraries/glui/default.nix
@@ -1,8 +1,27 @@
-{stdenv, fetchurl, freeglut, libGLU, libGL, libXmu, libXext, libX11, libXi}:
-stdenv.mkDerivation {
-  name = "glui-2.35";
-  buildInputs = [freeglut libGLU libGL libXmu libXext libX11 libXi];
+{ stdenv
+, fetchurl
+, freeglut
+, libGL
+, libGLU
+, libX11
+, libXext
+, libXi
+, libXmu
+}:
+
+stdenv.mkDerivation rec {
+  pname = "glui";
+  version = "2.36";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/glui/Source/${version}/glui-${version}.tgz";
+    sha256 = "11r7f0k5jlbl825ibhm5c6bck0fn1hbliya9x1f253ikry1mxvy1";
+  };
+
+  buildInputs = [ freeglut libGLU libGL libXmu libXext libX11 libXi ];
+
   preConfigure = ''cd src'';
+
   installPhase = ''
     mkdir -p "$out"/{bin,lib,share/glui/doc,include}
     cp -rT bin "$out/bin"
@@ -11,14 +30,11 @@ stdenv.mkDerivation {
     cp -rT doc "$out/share/glui/doc"
     cp LICENSE.txt "$out/share/glui/doc"
   '';
-  src = fetchurl {
-    url = "mirror://sourceforge/project/glui/Source/2.36/glui-2.36.tgz";
-    sha256 = "11r7f0k5jlbl825ibhm5c6bck0fn1hbliya9x1f253ikry1mxvy1";
-  };
-  meta = {
+
+  meta = with stdenv.lib; {
     description = ''A user interface library using OpenGL'';
-    license = stdenv.lib.licenses.zlib ;
-    maintainers = [stdenv.lib.maintainers.raskin];
-    platforms = stdenv.lib.platforms.linux;
+    license = licenses.zlib ;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/development/libraries/hyphen/default.nix b/pkgs/development/libraries/hyphen/default.nix
new file mode 100644
index 00000000000..9f30ff54823
--- /dev/null
+++ b/pkgs/development/libraries/hyphen/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, perl, ... }:
+
+let
+  version = "2.8.8";
+  folder = with builtins;
+    let parts = splitVersion version;
+    in concatStringsSep "." [ (elemAt parts 0) (elemAt parts 1) ];
+in stdenv.mkDerivation rec {
+  pname = "hyphen";
+  inherit version;
+
+  nativeBuildInputs = [ perl ];
+
+  src = fetchurl {
+    url =
+      "https://sourceforge.net/projects/hunspell/files/Hyphen/${folder}/${pname}-${version}.tar.gz";
+    sha256 = "01ap9pr6zzzbp4ky0vy7i1983fwyqy27pl0ld55s30fdxka3ciih";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A text hyphenation library";
+    homepage = "https://sourceforge.net/projects/hunspell/files/Hyphen/";
+    platforms = platforms.all;
+    license = with licenses; [ gpl2 lgpl21 mpl11 ];
+    maintainers = with maintainers; [ filalex77 ];
+  };
+}
diff --git a/pkgs/development/libraries/kde-frameworks/default.nix b/pkgs/development/libraries/kde-frameworks/default.nix
index aa9f95eebd3..845c911789d 100644
--- a/pkgs/development/libraries/kde-frameworks/default.nix
+++ b/pkgs/development/libraries/kde-frameworks/default.nix
@@ -42,7 +42,7 @@ let
       propagate = out:
         let setupHook = { writeScript }:
               writeScript "setup-hook" ''
-                if [ "${hookName:-}" != postHook ]; then
+                if [ "''${hookName:-}" != postHook ]; then
                     postHooks+=("source @dev@/nix-support/setup-hook")
                 else
                     # Propagate $dev so that this setup hook is propagated
diff --git a/pkgs/development/libraries/kde-frameworks/extra-cmake-modules/setup-hook.sh b/pkgs/development/libraries/kde-frameworks/extra-cmake-modules/setup-hook.sh
index 35982e86628..4135f6bfd7a 100644
--- a/pkgs/development/libraries/kde-frameworks/extra-cmake-modules/setup-hook.sh
+++ b/pkgs/development/libraries/kde-frameworks/extra-cmake-modules/setup-hook.sh
@@ -42,12 +42,12 @@ ecmPostHook() {
     cmakeFlags+=" -DKDE_INSTALL_CONFDIR=${!outputBin}/etc/xdg"
     cmakeFlags+=" -DKDE_INSTALL_AUTOSTARTDIR=${!outputBin}/etc/xdg/autostart"
 
-    if [ -n "$qtPluginPrefix" ]; then
+    if [ -n "${qtPluginPrefix-}" ]; then
         cmakeFlags+=" -DKDE_INSTALL_QTPLUGINDIR=${!outputBin}/$qtPluginPrefix"
         cmakeFlags+=" -DKDE_INSTALL_PLUGINDIR=${!outputBin}/$qtPluginPrefix"
     fi
 
-    if [ -n "$qtQmlPrefix" ]; then
+    if [ -n "${qtQmlPrefix-}" ]; then
         cmakeFlags+=" -DKDE_INSTALL_QMLDIR=${!outputBin}/$qtQmlPrefix"
     fi
 }
diff --git a/pkgs/development/libraries/ldns/default.nix b/pkgs/development/libraries/ldns/default.nix
index 1aa208c2044..74ac59fef28 100644
--- a/pkgs/development/libraries/ldns/default.nix
+++ b/pkgs/development/libraries/ldns/default.nix
@@ -1,29 +1,14 @@
-{ stdenv, fetchurl, fetchpatch, openssl, perl, which, dns-root-data }:
+{ stdenv, fetchurl, openssl, perl, which, dns-root-data }:
 
 stdenv.mkDerivation rec {
   pname = "ldns";
-  version = "1.7.0";
+  version = "1.7.1";
 
   src = fetchurl {
     url = "https://www.nlnetlabs.nl/downloads/ldns/${pname}-${version}.tar.gz";
-    sha256 = "1k56jw4hz8njspfxcfw0czf1smg0n48ylia89ziwyx5k9wdmp7y1";
+    sha256 = "0ac242n7996fswq1a3nlh1bbbhrsdwsq4mx7xq8ffq6aplb4rj4a";
   };
 
-  patches = [
-    (fetchpatch {
-      name = "CVE-2017-1000231.patch";
-      url = "https://git.nlnetlabs.nl/ldns/patch/?id=c8391790";
-      sha256 = "1rprfh0y1c28dqiy3vgwvwdhn7b5rsylfzzblx5xdhwfqgdw8vn0";
-      excludes = [ "Changelog" ];
-    })
-    (fetchpatch {
-      name = "CVE-2017-1000232.patch";
-      url = "https://git.nlnetlabs.nl/ldns/patch/?id=3bdeed02";
-      sha256 = "0bv0s5jjp0sswfg8da47d346iwp9yjhj9w7fa3bxh174br0zj07r";
-      excludes = [ "Changelog" ];
-    })
-  ];
-
   postPatch = ''
     patchShebangs doc/doxyparse.pl
   '';
@@ -38,6 +23,7 @@ stdenv.mkDerivation rec {
     "--with-trust-anchor=${dns-root-data}/root.key"
     "--with-drill"
     "--disable-gost"
+    "--with-examples"
   ] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
     "ac_cv_func_malloc_0_nonnull=yes"
     "ac_cv_func_realloc_0_nonnull=yes"
@@ -47,16 +33,11 @@ stdenv.mkDerivation rec {
   doCheck = false; # fails. missing some files
 
   postInstall = ''
+    # Only 'drill' stays in $out
+    # the rest are examples:
+    moveToOutput "bin/ldns*" "$examples"
+    # with exception of ldns-config, which goes to $dev:
     moveToOutput "bin/ldns-config" "$dev"
-
-    pushd examples
-    configureFlagsArray+=( "--bindir=$examples/bin" )
-    configurePhase
-    make
-    make install
-    popd
-
-    sed -i "$out/lib/libldns.la" -e "s,-L${openssl.dev},-L${openssl.out},g"
   '';
 
   meta = with stdenv.lib; {
@@ -64,6 +45,6 @@ stdenv.mkDerivation rec {
     license = licenses.bsd3;
     homepage = http://www.nlnetlabs.nl/projects/ldns/;
     platforms = platforms.unix;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ dtzWill ];
   };
 }
diff --git a/pkgs/development/libraries/libheif/default.nix b/pkgs/development/libraries/libheif/default.nix
index f69241ad552..85174e9c3e6 100644
--- a/pkgs/development/libraries/libheif/default.nix
+++ b/pkgs/development/libraries/libheif/default.nix
@@ -2,13 +2,15 @@
 
 stdenv.mkDerivation rec {
   pname = "libheif";
-  version = "1.5.1";
+  version = "1.6.0";
+
+  outputs = [ "bin" "out" "dev" "man" ];
 
   src = fetchFromGitHub {
     owner = "strukturag";
     repo = "libheif";
     rev = "v${version}";
-    sha256 = "0x6207hiy15k2696476qx9jcbzs90fq8cfv4jw6hi14w4wzq89kr";
+    sha256 = "0im9k2pqghlsppj165kh3nc26c4wx1brckmncdmpy0mcj56jjmba";
   };
 
   nativeBuildInputs = [ autoreconfHook pkgconfig ];
diff --git a/pkgs/development/libraries/libwmf/default.nix b/pkgs/development/libraries/libwmf/default.nix
index e7aa5f7ecc9..5c684c7fd77 100644
--- a/pkgs/development/libraries/libwmf/default.nix
+++ b/pkgs/development/libraries/libwmf/default.nix
@@ -6,6 +6,8 @@ stdenv.mkDerivation rec {
   pname = "libwmf";
   version = "0.2.12";
 
+  outputs = [ "out" "dev" ];
+
   src = fetchFromGitHub {
     owner = "caolanm";
     repo = pname;
diff --git a/pkgs/development/libraries/phonon/backends/gstreamer.nix b/pkgs/development/libraries/phonon/backends/gstreamer.nix
index ef7633dadaf..d9267827e77 100644
--- a/pkgs/development/libraries/phonon/backends/gstreamer.nix
+++ b/pkgs/development/libraries/phonon/backends/gstreamer.nix
@@ -1,21 +1,13 @@
 { stdenv, lib, fetchurl, cmake, gst_all_1, phonon, pkgconfig
-, extra-cmake-modules, qtbase ? null, qtx11extras ? null, qt4 ? null
-, withQt5 ? false
+, extra-cmake-modules, qttools, qtbase, qtx11extras
 , debug ? false
 }:
 
 with lib;
 
-let
-  v = "4.9.0";
+stdenv.mkDerivation rec {
   pname = "phonon-backend-gstreamer";
-in
-
-assert withQt5 -> qtbase != null;
-assert withQt5 -> qtx11extras != null;
-
-stdenv.mkDerivation {
-  name = "${pname}-${if withQt5 then "qt5" else "qt4"}-${v}";
+  version = "4.10.0";
 
   meta = with stdenv.lib; {
     homepage = https://phonon.kde.org/;
@@ -26,8 +18,8 @@ stdenv.mkDerivation {
   };
 
   src = fetchurl {
-    url = "mirror://kde/stable/phonon/${pname}/${v}/${pname}-${v}.tar.xz";
-    sha256 = "1wc5p1rqglf0n1avp55s50k7fjdzdrhg0gind15k8796w7nfbhyf";
+    url = "mirror://kde/stable/phonon/${pname}/${version}/${pname}-${version}.tar.xz";
+    sha256 = "1wk1ip2w7fkh65zk6rilj314dna0hgsv2xhjmpr5w08xa8sii1y5";
   };
 
   # Hardcode paths to useful plugins so the backend doesn't depend
@@ -52,17 +44,26 @@ stdenv.mkDerivation {
       ''-DGST_PLUGIN_PATH_1_0="${gstPluginPaths}"''
     ];
 
-  buildInputs = with gst_all_1;
-    [ gstreamer gst-plugins-base phonon ]
-    ++ (if withQt5 then [ qtbase qtx11extras ] else [ qt4 ]);
+  buildInputs = with gst_all_1; [
+    gstreamer
+    gst-plugins-base
+    phonon
+    qtbase
+    qtx11extras
+  ];
 
   # cleanup: the build system creates (empty) $out/$out/share/icons (double prefix)
   # if DESTDIR is unset
   DESTDIR="/";
 
-  nativeBuildInputs = [ cmake pkgconfig ] ++ optional withQt5 extra-cmake-modules;
+  nativeBuildInputs = [
+    cmake
+    pkgconfig
+    extra-cmake-modules
+    qttools
+  ];
 
-  cmakeFlags =
-    [ "-DCMAKE_BUILD_TYPE=${if debug then "Debug" else "Release"}" ]
-    ++ optional withQt5 "-DPHONON_BUILD_PHONON4QT5=ON";
+  cmakeFlags = [
+    "-DCMAKE_BUILD_TYPE=${if debug then "Debug" else "Release"}"
+  ];
 }
diff --git a/pkgs/development/libraries/phonon/backends/vlc.nix b/pkgs/development/libraries/phonon/backends/vlc.nix
index 98c6be85672..9ed137e4f45 100644
--- a/pkgs/development/libraries/phonon/backends/vlc.nix
+++ b/pkgs/development/libraries/phonon/backends/vlc.nix
@@ -1,22 +1,13 @@
 { stdenv, lib, fetchurl, cmake, phonon, pkgconfig, vlc
-, extra-cmake-modules, qtbase ? null, qtx11extras ? null, qt4 ? null
-, withQt4 ? false
+, extra-cmake-modules, qttools, qtbase, qtx11extras
 , debug ? false
 }:
 
 with lib;
 
-let
-  v = "0.10.2";
+stdenv.mkDerivation rec {
   pname = "phonon-backend-vlc";
-in
-
-assert withQt4 -> qt4 != null;
-assert !withQt4 -> qtbase != null;
-assert !withQt4 -> qtx11extras != null;
-
-stdenv.mkDerivation {
-  name = "${pname}-${if withQt4 then "qt4" else "qt5"}-${v}";
+  version = "0.11.1";
 
   meta = with stdenv.lib; {
     homepage = https://phonon.kde.org/;
@@ -26,17 +17,25 @@ stdenv.mkDerivation {
   };
 
   src = fetchurl {
-    url = "mirror://kde/stable/phonon/${pname}/${v}/${pname}-${v}.tar.xz";
-    sha256 = "163jqq5p9n0yfw2fqk0cqn3c6mqycxsvc4956zhkw5345g81a2a9";
+    url = "mirror://kde/stable/phonon/${pname}/${version}/${pname}-${version}.tar.xz";
+    sha256 = "1vp52i5996khpxs233an7mlrzdji50gcs58ig8nrwfwlgyb1xnfc";
   };
 
-  buildInputs =
-    [ phonon vlc ]
-    ++ (if withQt4 then [ qt4 ] else [ qtbase qtx11extras ]);
-
-  nativeBuildInputs = [ cmake pkgconfig ] ++ optional (!withQt4) extra-cmake-modules;
-
-  cmakeFlags =
-    [ "-DCMAKE_BUILD_TYPE=${if debug then "Debug" else "Release"}" ]
-    ++ optional (!withQt4) "-DPHONON_BUILD_PHONON4QT5=ON";
+  buildInputs = [
+    phonon
+    vlc
+    qtbase
+    qtx11extras
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkgconfig
+    qttools
+    extra-cmake-modules
+  ];
+
+  cmakeFlags = [
+    "-DCMAKE_BUILD_TYPE=${if debug then "Debug" else "Release"}"
+  ];
 }
diff --git a/pkgs/development/libraries/phonon/default.nix b/pkgs/development/libraries/phonon/default.nix
index 277823b91c0..86e3caaa148 100644
--- a/pkgs/development/libraries/phonon/default.nix
+++ b/pkgs/development/libraries/phonon/default.nix
@@ -1,22 +1,27 @@
-{ stdenv, lib, fetchurl, cmake, libGLU, libGL, pkgconfig, libpulseaudio
-, qt4 ? null, extra-cmake-modules ? null, qtbase ? null, qttools ? null
-, withQt5 ? false
-, debug ? false }:
+{ stdenv
+, lib
+, fetchurl
+, cmake
+, libGLU
+, libGL
+, pkgconfig
+, libpulseaudio
+, extra-cmake-modules
+, qtbase
+, qttools
+, debug ? false
+}:
 
 with lib;
 
 let
-  v = "4.11.1";
-
-  soname = if withQt5 then "phonon4qt5" else "phonon";
+  soname = "phonon4qt5";
   buildsystemdir = "share/cmake/${soname}";
 in
 
-assert withQt5 -> qtbase != null;
-assert withQt5 -> qttools != null;
-
-stdenv.mkDerivation {
-  name = "phonon-${if withQt5 then "qt5" else "qt4"}-${v}";
+stdenv.mkDerivation rec {
+  pname = "phonon";
+  version = "4.11.1";
 
   meta = {
     homepage = https://phonon.kde.org/;
@@ -27,25 +32,31 @@ stdenv.mkDerivation {
   };
 
   src = fetchurl {
-    url = "mirror://kde/stable/phonon/${v}/phonon-${v}.tar.xz";
+    url = "mirror://kde/stable/phonon/${version}/phonon-${version}.tar.xz";
     sha256 = "0bfy8iqmjhlg3ma3iqd3kxjc2zkzpjgashbpf5x17y0dc2i1whxl";
   };
 
-  buildInputs =
-    [ libGLU libGL libpulseaudio ]
-    ++ (if withQt5 then [ qtbase qttools ] else [ qt4 ]);
+  buildInputs = [
+    libGLU
+    libGL
+    libpulseaudio
+    qtbase
+    qttools
+  ];
 
-  nativeBuildInputs =
-    [ cmake pkgconfig ]
-    ++ optional withQt5 extra-cmake-modules;
+  nativeBuildInputs = [
+    cmake
+    pkgconfig
+    extra-cmake-modules
+  ];
 
   outputs = [ "out" "dev" ];
 
   NIX_CFLAGS_COMPILE = "-fPIC";
 
-  cmakeFlags =
-    [ "-DCMAKE_BUILD_TYPE=${if debug then "Debug" else "Release"}" ]
-    ++ optional withQt5 "-DPHONON_BUILD_PHONON4QT5=ON";
+  cmakeFlags = [
+    "-DCMAKE_BUILD_TYPE=${if debug then "Debug" else "Release"}"
+  ];
 
   preConfigure = ''
     cmakeFlags+=" -DPHONON_QT_MKSPECS_INSTALL_DIR=''${!outputDev}/mkspecs"
@@ -63,10 +74,8 @@ stdenv.mkDerivation {
     sed -i cmake/FindPhononInternal.cmake \
         -e "/set(INCLUDE_INSTALL_DIR/ c set(INCLUDE_INSTALL_DIR \"''${!outputDev}/include\")"
 
-    ${optionalString withQt5 ''
     sed -i cmake/FindPhononInternal.cmake \
         -e "/set(PLUGIN_INSTALL_DIR/ c set(PLUGIN_INSTALL_DIR \"$qtPluginPrefix/..\")"
-    ''}
 
     sed -i CMakeLists.txt \
         -e "/set(BUILDSYSTEM_INSTALL_DIR/ c set(BUILDSYSTEM_INSTALL_DIR \"''${!outputDev}/${buildsystemdir}\")"
diff --git a/pkgs/development/libraries/polkit/default.nix b/pkgs/development/libraries/polkit/default.nix
index 05813bf29dc..d0df41c3e5f 100644
--- a/pkgs/development/libraries/polkit/default.nix
+++ b/pkgs/development/libraries/polkit/default.nix
@@ -55,7 +55,8 @@ stdenv.mkDerivation rec {
     ++ [ libxslt docbook_xsl docbook_xml_dtd_412 ]; # man pages
   buildInputs =
     [ expat pam spidermonkey_60 ]
-    ++ (if useSystemd then [systemd] else [elogind])
+    # On Linux, fall back to elogind when systemd support is off.
+    ++ stdenv.lib.optional stdenv.isLinux (if useSystemd then systemd else elogind)
     ++ stdenv.lib.optional withGnome gobject-introspection;
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/libraries/qgnomeplatform/default.nix b/pkgs/development/libraries/qgnomeplatform/default.nix
index 94c69a4a14b..564fc70f2b9 100644
--- a/pkgs/development/libraries/qgnomeplatform/default.nix
+++ b/pkgs/development/libraries/qgnomeplatform/default.nix
@@ -1,14 +1,14 @@
-{ mkDerivation, lib, fetchFromGitHub, pkgconfig, gtk3, qtbase, qmake }:
+{ mkDerivation, lib, fetchFromGitHub, pkgconfig, gtk3, qtbase, qmake, qtx11extras }:
 
 mkDerivation rec {
   pname = "qgnomeplatform";
-  version = "0.5";
+  version = "0.6.0";
 
   src = fetchFromGitHub {
     owner = "FedoraQt";
     repo = "QGnomePlatform";
     rev = version;
-    sha256 = "01ncj21cxd5p7pch6p3zbhv5wp0dgn9vy5hrw54g49fmqnbb1ymz";
+    sha256 = "0fb1mzs6sx76bl7f0z2xhc0jq6y1c55jrw1v3na8577is6g5ji0a";
   };
 
   nativeBuildInputs = [
@@ -19,11 +19,14 @@ mkDerivation rec {
   buildInputs = [
     gtk3
     qtbase
+    qtx11extras
   ];
 
   postPatch = ''
     # Fix plugin dir
-    substituteInPlace qgnomeplatform.pro \
+    substituteInPlace decoration/decoration.pro \
+      --replace "\$\$[QT_INSTALL_PLUGINS]" "$out/$qtPluginPrefix"
+    substituteInPlace theme/theme.pro \
       --replace "\$\$[QT_INSTALL_PLUGINS]" "$out/$qtPluginPrefix"
   '';
 
diff --git a/pkgs/development/libraries/rocksdb/default.nix b/pkgs/development/libraries/rocksdb/default.nix
index 2bb56bec8c0..ac70d6ec0f2 100644
--- a/pkgs/development/libraries/rocksdb/default.nix
+++ b/pkgs/development/libraries/rocksdb/default.nix
@@ -1,4 +1,8 @@
-{ stdenv, fetchFromGitHub, lib, bzip2, cmake, lz4, snappy, zlib, zstd, enableLite ? false }:
+{ stdenv, fetchFromGitHub, fetchpatch
+, cmake, ninja
+, bzip2, lz4, snappy, zlib, zstd
+, enableLite ? false
+}:
 
 stdenv.mkDerivation rec {
   pname = "rocksdb";
@@ -11,9 +15,17 @@ stdenv.mkDerivation rec {
     sha256 = "0s0n4p1b4jzmslz9d2xd4ajra0m6l9x26mjwlbgw0klxjggmy8qn";
   };
 
-  nativeBuildInputs = [ cmake ];
+  nativeBuildInputs = [ cmake ninja ];
   buildInputs = [ bzip2 lz4 snappy zlib zstd ];
 
+  patches = [
+    # https://github.com/facebook/rocksdb/pull/6076
+    (fetchpatch {
+      url = "https://github.com/facebook/rocksdb/commit/c0be4b2ff1a5393419673fab961cb9b09ba38752.diff";
+      sha256 = "1f2wg9kqlmf2hiiihmbp8m5fr2wnn7896g6i9yg9hdgi40pw30w6";
+    })
+  ];
+
   postPatch = ''
     substituteInPlace CMakeLists.txt --replace "find_package(zlib " "find_package(ZLIB "
   '';
@@ -31,13 +43,17 @@ stdenv.mkDerivation rec {
     "-DWITH_ZSTD=1"
     "-DWITH_GFLAGS=0"
     "-DUSE_RTTI=1"
-    (lib.optional
-        (stdenv.hostPlatform.system == "i686-linux"
-         || stdenv.hostPlatform.system == "x86_64-linux")
+    "-DROCKSDB_INSTALL_ON_WINDOWS=YES" # harmless elsewhere
+    (stdenv.lib.optional
+        (stdenv.hostPlatform.isx86 && stdenv.hostPlatform.isLinux)
         "-DFORCE_SSE42=1")
-    (lib.optional enableLite "-DROCKSDB_LITE=1")
+    (stdenv.lib.optional enableLite "-DROCKSDB_LITE=1")
+    "-DFAIL_ON_WARNINGS=${if stdenv.hostPlatform.isMinGW then "NO" else "YES"}"
   ];
 
+  # otherwise "cc1: error: -Wformat-security ignored without -Wformat [-Werror=format-security]"
+  hardeningDisable = stdenv.lib.optional stdenv.hostPlatform.isWindows "format";
+
   meta = with stdenv.lib; {
     homepage = https://rocksdb.org;
     description = "A library that provides an embeddable, persistent key-value store for fast storage";
diff --git a/pkgs/development/libraries/science/math/scalapack/default.nix b/pkgs/development/libraries/science/math/scalapack/default.nix
index 14277c8c631..bff0d9a85fa 100644
--- a/pkgs/development/libraries/science/math/scalapack/default.nix
+++ b/pkgs/development/libraries/science/math/scalapack/default.nix
@@ -1,20 +1,19 @@
-{ stdenv, fetchurl, cmake, openssh
+{ stdenv, fetchFromGitHub, cmake, openssh
 , gfortran, mpi, openblasCompat
 } :
 
 
 stdenv.mkDerivation rec {
   pname = "scalapack";
-  version = "2.0.2";
+  version = "2.1";
 
-  src = fetchurl {
-    url = "http://www.netlib.org/scalapack/scalapack-${version}.tgz";
-    sha256 = "0p1r61ss1fq0bs8ynnx7xq4wwsdvs32ljvwjnx6yxr8gd6pawx0c";
+  src = fetchFromGitHub {
+    owner = "Reference-ScaLAPACK";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "042q9kc383h7y0had9a37702z4s0szavss063ljvfdsbjy07gzb1";
   };
 
-  # patch to rename outdated MPI functions
-  patches = [ ./openmpi4.patch ];
-
   nativeBuildInputs = [ cmake openssh ];
   buildInputs = [ mpi gfortran openblasCompat ];
 
diff --git a/pkgs/development/libraries/science/math/scalapack/openmpi4.patch b/pkgs/development/libraries/science/math/scalapack/openmpi4.patch
deleted file mode 100644
index 5d0afb58c02..00000000000
--- a/pkgs/development/libraries/science/math/scalapack/openmpi4.patch
+++ /dev/null
@@ -1,143 +0,0 @@
-diff --git a/BLACS/SRC/blacs_get_.c b/BLACS/SRC/blacs_get_.c
-index e979767..d4b04cf 100644
---- a/BLACS/SRC/blacs_get_.c
-+++ b/BLACS/SRC/blacs_get_.c
-@@ -23,7 +23,7 @@ F_VOID_FUNC blacs_get_(int *ConTxt, int *what, int *val)
-    case SGET_MSGIDS:
-       if (BI_COMM_WORLD == NULL) Cblacs_pinfo(val, &val[1]);
-       iptr = &val[1];
--      ierr=MPI_Attr_get(MPI_COMM_WORLD, MPI_TAG_UB, (BVOID **) &iptr,val);
-+      ierr=MPI_Comm_get_attr(MPI_COMM_WORLD, MPI_TAG_UB, (BVOID **) &iptr,val);
-       val[0] = 0;
-       val[1] = *iptr;
-       break;
-diff --git a/BLACS/SRC/cgamn2d_.c b/BLACS/SRC/cgamn2d_.c
-index 2db6ccb..6958f32 100644
---- a/BLACS/SRC/cgamn2d_.c
-+++ b/BLACS/SRC/cgamn2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC cgamn2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/cgamx2d_.c b/BLACS/SRC/cgamx2d_.c
-index 707c0b6..f802d01 100644
---- a/BLACS/SRC/cgamx2d_.c
-+++ b/BLACS/SRC/cgamx2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC cgamx2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/dgamn2d_.c b/BLACS/SRC/dgamn2d_.c
-index dff23b4..a2627ac 100644
---- a/BLACS/SRC/dgamn2d_.c
-+++ b/BLACS/SRC/dgamn2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC dgamn2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/dgamx2d_.c b/BLACS/SRC/dgamx2d_.c
-index a51f731..2a644d0 100644
---- a/BLACS/SRC/dgamx2d_.c
-+++ b/BLACS/SRC/dgamx2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC dgamx2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/igamn2d_.c b/BLACS/SRC/igamn2d_.c
-index 16bc003..f6a7859 100644
---- a/BLACS/SRC/igamn2d_.c
-+++ b/BLACS/SRC/igamn2d_.c
-@@ -218,7 +218,7 @@ F_VOID_FUNC igamn2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/igamx2d_.c b/BLACS/SRC/igamx2d_.c
-index 8165cbe..a7cfcc6 100644
---- a/BLACS/SRC/igamx2d_.c
-+++ b/BLACS/SRC/igamx2d_.c
-@@ -218,7 +218,7 @@ F_VOID_FUNC igamx2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/sgamn2d_.c b/BLACS/SRC/sgamn2d_.c
-index d6c95e5..569c797 100644
---- a/BLACS/SRC/sgamn2d_.c
-+++ b/BLACS/SRC/sgamn2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC sgamn2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/sgamx2d_.c b/BLACS/SRC/sgamx2d_.c
-index 4b0af6f..8897ece 100644
---- a/BLACS/SRC/sgamx2d_.c
-+++ b/BLACS/SRC/sgamx2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC sgamx2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/zgamn2d_.c b/BLACS/SRC/zgamn2d_.c
-index 9de2b23..37897df 100644
---- a/BLACS/SRC/zgamn2d_.c
-+++ b/BLACS/SRC/zgamn2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC zgamn2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
-diff --git a/BLACS/SRC/zgamx2d_.c b/BLACS/SRC/zgamx2d_.c
-index 414c381..0e9d474 100644
---- a/BLACS/SRC/zgamx2d_.c
-+++ b/BLACS/SRC/zgamx2d_.c
-@@ -221,7 +221,7 @@ F_VOID_FUNC zgamx2d_(int *ConTxt, F_CHAR scope, F_CHAR top, int *m, int *n,
-       {
- #endif
-       i = 2;
--      ierr=MPI_Type_struct(i, len, disp, dtypes, &MyType);
-+      ierr=MPI_Type_create_struct(i, len, disp, dtypes, &MyType);
-       ierr=MPI_Type_commit(&MyType);
-       bp->N = bp2->N = 1;
-       bp->dtype = bp2->dtype = MyType;
diff --git a/pkgs/development/libraries/snappy/default.nix b/pkgs/development/libraries/snappy/default.nix
index 80c3630af29..f35f5bfc55a 100644
--- a/pkgs/development/libraries/snappy/default.nix
+++ b/pkgs/development/libraries/snappy/default.nix
@@ -32,6 +32,6 @@ stdenv.mkDerivation rec {
     homepage = https://google.github.io/snappy/;
     license = licenses.bsd3;
     description = "Compression/decompression library for very high speeds";
-    platforms = platforms.unix;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/development/libraries/unixODBCDrivers/default.nix b/pkgs/development/libraries/unixODBCDrivers/default.nix
index c1810443bdb..78f85afca91 100644
--- a/pkgs/development/libraries/unixODBCDrivers/default.nix
+++ b/pkgs/development/libraries/unixODBCDrivers/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, unixODBC, cmake, postgresql, mysql, libmysqlclient, sqlite, zlib, libxml2, dpkg, lib, openssl, kerberos, libuuid, patchelf }:
+{ fetchurl, stdenv, unixODBC, cmake, postgresql, mysql, sqlite, zlib, libxml2, dpkg, lib, openssl, kerberos, libuuid, patchelf, libiconv, fetchFromGitHub }:
 
 # I haven't done any parameter tweaking.. So the defaults provided here might be bad
 
@@ -29,35 +29,42 @@
 
   mariadb = stdenv.mkDerivation rec {
     pname = "mariadb-connector-odbc";
-    version = "3.1.2";
-
-    src = fetchurl {
-      url = "https://downloads.mariadb.org/interstitial/connector-odbc-${version}/${pname}-${version}-ga-src.tar.gz";
-      sha256 = "0iibly2mbqijqyq4pzpb6dh40clqhvqrhgnj8knm4bw3nlksd0d5";
+    version = "3.1.4";
+
+    src = fetchFromGitHub {
+      owner = "MariaDB";
+      repo = "mariadb-connector-odbc";
+      rev = version;
+      sha256 = "1kbz5mng9vx89cw2sx7gsvhbv4h86zwp31fr0hxqing3cwxhkfgw";
+      # this driver only seems to build correctly when built against the mariadb-connect-c subrepo
+      # (see https://github.com/NixOS/nixpkgs/issues/73258)
+      fetchSubmodules = true;
     };
 
     nativeBuildInputs = [ cmake ];
-    buildInputs = [ unixODBC libmysqlclient openssl ];
+    buildInputs = [ unixODBC openssl libiconv ];
+
+    preConfigure = ''
+      # we don't want to build a .pkg
+      sed -i 's/ADD_SUBDIRECTORY(osxinstall)//g' CMakeLists.txt
+    '';
 
     cmakeFlags = [
       "-DWITH_OPENSSL=ON"
-    ];
-
-   NIX_CFLAGS_COMPILE = [
-     "-I${libmysqlclient}/include/mysql"
-     "-L${libmysqlclient}/lib/mysql"
+      # on darwin this defaults to ON but we want to build against unixODBC
+      "-DWITH_IODBC=OFF"
     ];
 
     passthru = {
       fancyName = "MariaDB";
-      driver = "lib/libmaodbc.so";
+      driver = if stdenv.isDarwin then "lib/libmaodbc.dylib" else "lib/libmaodbc.so";
     };
 
     meta = with stdenv.lib; {
       description = "MariaDB ODBC database driver";
       homepage =  https://downloads.mariadb.org/connector-odbc/;
       license = licenses.gpl2;
-      platforms = platforms.linux;
+      platforms = platforms.linux ++ platforms.darwin;
     };
   };
 
diff --git a/pkgs/development/libraries/wlroots/default.nix b/pkgs/development/libraries/wlroots/default.nix
index 54464ffd4b6..a567e66285c 100644
--- a/pkgs/development/libraries/wlroots/default.nix
+++ b/pkgs/development/libraries/wlroots/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig
+{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig, fetchpatch
 , wayland, libGL, wayland-protocols, libinput, libxkbcommon, pixman
 , xcbutilwm, libX11, libcap, xcbutilimage, xcbutilerrors, mesa
 , libpng, ffmpeg_4, freerdp
@@ -15,6 +15,15 @@ stdenv.mkDerivation rec {
     sha256 = "1ak86kx617c81dy85wg9rldy1z3n8ch93cjc05a4j6sifv0nkyfm";
   };
 
+  patches = [
+    # add missing header that changed in mesa-19.2.2
+    # https://github.com/swaywm/wlroots/issues/1862
+    (fetchpatch {
+      url = "https://github.com/swaywm/wlroots/commit/d113e48a2a32542fe6e12f1759f07888364609bf.diff";
+      sha256 = "1h09j1gmnzlz4py92a92chgy8xzsd8h8xn5irq9s2hq4cla66h87";
+    })
+  ];
+
   # $out for the library and $examples for the example programs (in examples):
   outputs = [ "out" "examples" ];
 
diff --git a/pkgs/development/libraries/zeitgeist/default.nix b/pkgs/development/libraries/zeitgeist/default.nix
index 9e3b06453bf..98c94cfecca 100644
--- a/pkgs/development/libraries/zeitgeist/default.nix
+++ b/pkgs/development/libraries/zeitgeist/default.nix
@@ -1,7 +1,23 @@
-{ stdenv, fetchFromGitLab, pkgconfig, glib, sqlite, gobject-introspection, vala
-, autoconf, automake, libtool, gettext, dbus, telepathy-glib
-, gtk3, json-glib, librdf_raptor2, dbus-glib
-, pythonSupport ? true, python2Packages
+{ stdenv
+, fetchFromGitLab
+, fetchpatch
+, pkgconfig
+, glib
+, sqlite
+, gobject-introspection
+, vala
+, autoconf
+, automake
+, libtool
+, gettext
+, dbus
+, telepathy-glib
+, gtk3
+, json-glib
+, librdf_raptor2
+, dbus-glib
+, pythonSupport ? true
+, python2Packages
 }:
 
 stdenv.mkDerivation rec {
@@ -18,31 +34,58 @@ stdenv.mkDerivation rec {
     sha256 = "0ig3d3j1n0ghaxsgfww6g2hhcdwx8cljwwfmp9jk1nrvkxd6rnmv";
   };
 
-  preConfigure = "NOCONFIGURE=1 ./autogen.sh";
-
-  configureFlags = [ "--with-session-bus-services-dir=${placeholder "out"}/share/dbus-1/services" ];
+  patches = [
+    # Fix build with gettext 0.20
+    (fetchpatch {
+      url = "https://gitlab.freedesktop.org/zeitgeist/zeitgeist/commit/b5c00e80189fd59a059a95c4e276728a2492cb89.patch";
+      sha256 = "1r7f7j3l2p6xlzxajihgx8bzbc2sxcb9spc9pi26rz9bwmngdyq7";
+    })
+  ];
 
   nativeBuildInputs = [
-    autoconf automake libtool pkgconfig gettext gobject-introspection vala python2Packages.python
+    autoconf
+    automake
+    libtool
+    pkgconfig
+    gettext
+    gobject-introspection
+    vala
+    python2Packages.python
   ];
+
   buildInputs = [
-    glib sqlite dbus telepathy-glib dbus-glib
-    gtk3 json-glib librdf_raptor2 python2Packages.rdflib
+    glib
+    sqlite
+    dbus
+    telepathy-glib
+    dbus-glib
+    gtk3
+    json-glib
+    librdf_raptor2
+    python2Packages.rdflib
+  ];
+
+  configureFlags = [
+    "--with-session-bus-services-dir=${placeholder "out"}/share/dbus-1/services"
   ];
 
+  enableParallelBuilding = true;
+
   postPatch = ''
     patchShebangs data/ontology2code
   '';
 
-  enableParallelBuilding = true;
+  preConfigure = ''
+    NOCONFIGURE=1 ./autogen.sh
+  '';
 
   postFixup = stdenv.lib.optionalString pythonSupport ''
     moveToOutput lib/${python2Packages.python.libPrefix} "$py"
   '';
 
   meta = with stdenv.lib; {
-    description = "A service which logs the users's activities and events";
-    homepage = https://zeitgeist.freedesktop.org/;
+    description = "A service which logs the users’s activities and events";
+    homepage = "https://zeitgeist.freedesktop.org/";
     maintainers = with maintainers; [ lethalman worldofpeace ];
     license = licenses.gpl2;
     platforms = platforms.linux;
diff --git a/pkgs/development/lisp-modules/clwrapper/default.nix b/pkgs/development/lisp-modules/clwrapper/default.nix
index 019a44482b9..3cb8219e687 100644
--- a/pkgs/development/lisp-modules/clwrapper/default.nix
+++ b/pkgs/development/lisp-modules/clwrapper/default.nix
@@ -15,6 +15,7 @@ stdenv.mkDerivation {
     chmod a+x "$out"/bin/*
 
     substituteAll "${./setup-hook.sh}" "setup-hook-parsed"
+    addEnvHooks(){ true; };
     source setup-hook-parsed
     setLisp "${lisp}"
     echo "$NIX_LISP"
diff --git a/pkgs/development/lisp-modules/clwrapper/setup-hook.sh b/pkgs/development/lisp-modules/clwrapper/setup-hook.sh
index da2303a18bf..abbbdc3e77a 100644
--- a/pkgs/development/lisp-modules/clwrapper/setup-hook.sh
+++ b/pkgs/development/lisp-modules/clwrapper/setup-hook.sh
@@ -9,7 +9,7 @@ addASDFPaths () {
 }
 
 setLisp () {
-    if [ -z "$NIX_LISP_COMMAND" ]; then 
+    if [ -z "${NIX_LISP_COMMAND:-}" ]; then 
       for j in "$1"/bin/*; do
           case "$(basename "$j")" in
               sbcl) NIX_LISP_COMMAND="$j" ;;
@@ -20,7 +20,7 @@ setLisp () {
           esac
       done
     fi
-    if [ -z "$NIX_LISP" ]; then 
+    if [ -n "${NIX_LISP_COMMAND:-}" ] && [ -z "${NIX_LISP:-}" ]; then 
         NIX_LISP="${NIX_LISP_COMMAND##*/}"
     fi
 }
@@ -35,5 +35,5 @@ export NIX_LISP_COMMAND NIX_LISP CL_SOURCE_REGISTRY NIX_LISP_ASDF
 
 addEnvHooks "$targetOffset" addASDFPaths setLisp collectNixLispLDLP
 
-mkdir -p "$HOME"/.cache/common-lisp || HOME="$TMP/.temp-$USER-home"
+mkdir -p "$HOME"/.cache/common-lisp || HOME="$TMP/.temp-${USER:-nixbld}-home"
 mkdir -p "$HOME"/.cache/common-lisp
diff --git a/pkgs/development/lisp-modules/define-package.nix b/pkgs/development/lisp-modules/define-package.nix
index 49eb9c40344..67a688342b2 100644
--- a/pkgs/development/lisp-modules/define-package.nix
+++ b/pkgs/development/lisp-modules/define-package.nix
@@ -18,7 +18,7 @@ let
     touch "$path_config_script"
     chmod a+x "$config_script"
     chmod a+x "$path_config_script"
-    echo "if test -z \"\''${_''${outhash}_NIX_LISP_CONFIG}\"; then export _''${outhash}_NIX_LISP_CONFIG=1; " >> "$config_script"
+    echo "if test -z \"\''${_''${outhash}_NIX_LISP_CONFIG:-}\"; then export _''${outhash}_NIX_LISP_CONFIG=1; " >> "$config_script"
     echo "export NIX_CFLAGS_COMPILE='$NIX_CFLAGS_COMPILE'\"\''${NIX_CFLAGS_COMPILE:+ \$NIX_CFLAGS_COMPILE}\"" >> "$config_script"
     echo "export NIX_LDFLAGS='$NIX_LDFLAGS'\"\''${NIX_LDFLAGS:+ \$NIX_LDFLAGS}\"" >> "$config_script"
     echo "export NIX_LISP_COMMAND='$NIX_LISP_COMMAND'" >> "$config_script"
@@ -28,12 +28,12 @@ let
     echo "echo \"\$ASDF_OUTPUT_TRANSLATIONS\" | grep -E '(^|:)$store_translation(:|\$)' >/dev/null || export ASDF_OUTPUT_TRANSLATIONS=\"\''${ASDF_OUTPUT_TRANSLATIONS:+\$ASDF_OUTPUT_TRANSLATIONS:}\"'$store_translation'" >> "$config_script"
     echo "source '$path_config_script'" >> "$config_script"
     echo "fi" >> "$config_script"
-    echo "if test -z \"\''${_''${outhash}_NIX_LISP_PATH_CONFIG}\"; then export _''${outhash}_NIX_LISP_PATH_CONFIG=1; " >> "$path_config_script"
-    echo "export NIX_LISP_ASDF_PATHS=\"$( ( echo "\$NIX_LISP_ASDF_PATHS"; echo "$NIX_LISP_ASDF_PATHS"; echo "$out/lib/common-lisp/${args.baseName}" ) | grep . | sort | uniq)\"" >> "$path_config_script"
+    echo "if test -z \"\''${_''${outhash}_NIX_LISP_PATH_CONFIG:-}\"; then export _''${outhash}_NIX_LISP_PATH_CONFIG=1; " >> "$path_config_script"
+    echo "export NIX_LISP_ASDF_PATHS=\"$( ( echo "\''${NIX_LISP_ASDF_PATHS:-}"; echo "$NIX_LISP_ASDF_PATHS"; echo "$out/lib/common-lisp/${args.baseName}" ) | grep . | sort | uniq)\"" >> "$path_config_script"
     test -n "$LD_LIBRARY_PATH" &&
         echo "export LD_LIBRARY_PATH=\"\$LD_LIBRARY_PATH\''${LD_LIBRARY_PATH:+:}\"'$LD_LIBRARY_PATH'" >> "$path_config_script"
     test -n "$NIX_LISP_LD_LIBRARY_PATH" &&
-        echo "export NIX_LISP_LD_LIBRARY_PATH=\"\$NIX_LISP_LD_LIBRARY_PATH\''${NIX_LISP_LD_LIBRARY_PATH:+:}\"'$(echo "$NIX_LISP_LD_LIBRARY_PATH" | tr -d '\n' | tr : '\n' | sort | uniq | tr '\n' ':' | sed -e 's/:$//')'" >> "$path_config_script"
+        echo "export NIX_LISP_LD_LIBRARY_PATH=\"\''${NIX_LISP_LD_LIBRARY_PATH:-}\''${NIX_LISP_LD_LIBRARY_PATH:+:}\"'$(echo "$NIX_LISP_LD_LIBRARY_PATH" | tr -d '\n' | tr : '\n' | sort | uniq | tr '\n' ':' | sed -e 's/:$//')'" >> "$path_config_script"
     echo "fi" >> "$path_config_script"
   '';
   deployLaunchScript = ''
diff --git a/pkgs/development/lua-modules/overrides.nix b/pkgs/development/lua-modules/overrides.nix
index ce213535519..9139befe020 100644
--- a/pkgs/development/lua-modules/overrides.nix
+++ b/pkgs/development/lua-modules/overrides.nix
@@ -105,7 +105,7 @@ with super;
     ];
     buildInputs = [
       pkgs.glib
-      pkgs.gobjectIntrospection
+      pkgs.gobject-introspection
     ];
     patches = [
       (pkgs.fetchpatch {
diff --git a/pkgs/desktops/gnome-3/core/yelp-tools/default.nix b/pkgs/development/misc/yelp-tools/default.nix
index 43863bf7f85..75754bec7a1 100644
--- a/pkgs/desktops/gnome-3/core/yelp-tools/default.nix
+++ b/pkgs/development/misc/yelp-tools/default.nix
@@ -10,7 +10,9 @@ stdenv.mkDerivation rec {
   };
 
   passthru = {
-    updateScript = gnome3.updateScript { packageName = "yelp-tools"; attrPath = "gnome3.yelp-tools"; };
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+    };
   };
 
   nativeBuildInputs = [ pkgconfig ];
diff --git a/pkgs/development/ocaml-modules/lwt/4.x.nix b/pkgs/development/ocaml-modules/lwt/4.x.nix
index 4850a853ea0..3ec3574ea09 100644
--- a/pkgs/development/ocaml-modules/lwt/4.x.nix
+++ b/pkgs/development/ocaml-modules/lwt/4.x.nix
@@ -1,5 +1,5 @@
 { lib, fetchzip, pkgconfig, ncurses, libev, buildDunePackage, ocaml
-, cppo, ocaml-migrate-parsetree, ppx_tools_versioned, result
+, cppo, ocaml-migrate-parsetree, ocplib-endian, result
 , mmap, seq
 }:
 
@@ -7,22 +7,17 @@ let inherit (lib) optional versionAtLeast; in
 
 buildDunePackage rec {
   pname = "lwt";
-  version = "4.2.1";
+  version = "4.4.0";
 
   src = fetchzip {
     url = "https://github.com/ocsigen/${pname}/archive/${version}.tar.gz";
-    sha256 = "1hz24fyhpm7d6603v399pgxvdl236srwagqja41ljvjx83y10ysr";
+    sha256 = "1l97zdcql7y13fhaq0m9n9xvxf712jg0w70r72fvv6j49xm4nlhi";
   };
 
-  postPatch = ''
-    substituteInPlace lwt.opam \
-    --replace 'version: "dev"' 'version: "${version}"'
-  '';
-
   nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ cppo ocaml-migrate-parsetree ppx_tools_versioned ]
+  buildInputs = [ cppo ocaml-migrate-parsetree ]
    ++ optional (!versionAtLeast ocaml.version "4.07") ncurses;
-  propagatedBuildInputs = [ libev mmap seq result ];
+  propagatedBuildInputs = [ libev mmap ocplib-endian seq result ];
 
   meta = {
     homepage = "https://ocsigen.org/lwt/";
diff --git a/pkgs/development/ocaml-modules/sodium/default.nix b/pkgs/development/ocaml-modules/sodium/default.nix
new file mode 100644
index 00000000000..8c8895d4520
--- /dev/null
+++ b/pkgs/development/ocaml-modules/sodium/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, ocaml, findlib, ocamlbuild, ctypes, libsodium }:
+
+stdenv.mkDerivation rec {
+  pname = "ocaml${ocaml.version}-sodium";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner  = "dsheets";
+    repo   = "ocaml-sodium";
+    rev    = version;
+    sha256 = "124gpi1jhac46x05gp5viykyrafnlp03v1cmkl13c6pgcs8w04pv";
+  };
+
+  buildInputs = [ ocaml findlib ocamlbuild ];
+  propagatedBuildInputs = [ ctypes libsodium ];
+
+  createFindlibDestdir = true;
+
+  hardeningDisable = stdenv.lib.optional stdenv.isDarwin "strictoverflow";
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/dsheets/ocaml-sodium;
+    description = "Binding to libsodium 1.0.9+";
+    platforms = ocaml.meta.platforms or [];
+    maintainers = [ maintainers.rixed ];
+  };
+}
diff --git a/pkgs/development/python-modules/ansible/default.nix b/pkgs/development/python-modules/ansible/default.nix
index fcc984faf8c..74775cf756f 100644
--- a/pkgs/development/python-modules/ansible/default.nix
+++ b/pkgs/development/python-modules/ansible/default.nix
@@ -6,12 +6,12 @@
 , jinja2
 , pyyaml
 , httplib2
-, boto
 , six
 , netaddr
 , dnspython
 , jmespath
 , dopy
+, ncclient
 , windowsSupport ? false
 , pywinrm
 }:
@@ -28,7 +28,9 @@ buildPythonPackage rec {
   };
 
   prePatch = ''
-    sed -i "s,/usr/,$out," lib/ansible/constants.py
+    # ansible-connection is wrapped, so make sure it's not passed
+    # through the python interpreter.
+    sed -i "s/\[python, /[/" lib/ansible/executor/task_executor.py
   '';
 
   postInstall = ''
@@ -39,7 +41,7 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [
     pycrypto paramiko jinja2 pyyaml httplib2
-    six netaddr dnspython jmespath dopy
+    six netaddr dnspython jmespath dopy ncclient
   ] ++ lib.optional windowsSupport pywinrm;
 
   # dificult to test
diff --git a/pkgs/development/python-modules/anytree/default.nix b/pkgs/development/python-modules/anytree/default.nix
index 3821fea2446..638b2c2baa3 100644
--- a/pkgs/development/python-modules/anytree/default.nix
+++ b/pkgs/development/python-modules/anytree/default.nix
@@ -11,13 +11,13 @@
 
 buildPythonPackage rec {
   pname = "anytree";
-  version = "2.6.0";
+  version = "2.7.2";
 
   src = fetchFromGitHub {
     owner = "c0fec0de";
     repo = pname;
     rev = version;
-    sha256 = "1k3yj9h3ssjlz57r4g1qzxvprxjp7n92vms9fv0d46pigylxm5i3";
+    sha256 = "0ag5ir9h5p7rbm2pmpxlkflwigrm7z4afh24jvbhqj7pyrbjmk9w";
   };
 
   patches = [
@@ -25,12 +25,6 @@ buildPythonPackage rec {
       src = ./graphviz.patch;
       inherit graphviz;
     })
-    # Fix tests python3.7
-    # See: https://github.com/c0fec0de/anytree/pull/85
-    (fetchpatch {
-      url = "https://github.com/c0fec0de/anytree/commit/dd1b3d325546fef7436711e4cfea9a5fb61daaf8.patch";
-      sha256 = "1dpa2jh2kakfaapnqrz03frb67q5fwxzc8c70i6nv1b01i9xw0bn";
-    })
   ];
 
   checkInputs = [
diff --git a/pkgs/development/python-modules/azure-cosmos/default.nix b/pkgs/development/python-modules/azure-cosmos/default.nix
index c1a001bb1eb..5716b1254af 100644
--- a/pkgs/development/python-modules/azure-cosmos/default.nix
+++ b/pkgs/development/python-modules/azure-cosmos/default.nix
@@ -1,5 +1,6 @@
 { buildPythonPackage
 , lib
+, python
 , fetchPypi
 , six
 , requests
@@ -16,6 +17,10 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ six requests ];
 
+  postInstall = ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+  '';
+
   # requires an active Azure Cosmos service
   doCheck = false;
 
diff --git a/pkgs/development/python-modules/azure-functions-devops-build/default.nix b/pkgs/development/python-modules/azure-functions-devops-build/default.nix
new file mode 100644
index 00000000000..03007ae3c23
--- /dev/null
+++ b/pkgs/development/python-modules/azure-functions-devops-build/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildPythonPackage, fetchFromGitHub
+, jinja2
+, msrest
+, vsts
+}:
+
+buildPythonPackage rec {
+  version = "0.0.22";
+  pname = "azure-functions-devops-build";
+
+  src = fetchFromGitHub {
+    owner = "Azure";
+    repo = "azure-functions-devops-build";
+    # rev picked based on pypi release date
+    rev = "c8249670acc77333e3de8b21dec60faf7ecf0951";
+    sha256 = "1slc7jd92v9q1qg1yacnrpi2a7hi7iw61wzbzfd6wx9q63pw9yqi";
+  };
+
+  propagatedBuildInputs = [ jinja2 msrest vsts ];
+
+  # circular dependency with azure-cli-core
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Integrate Azure Functions with Azure DevOps. Specifically made for the Azure CLI";
+    homepage = "https://github.com/Azure/azure-functions-devops-build";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/azure-keyvault/default.nix b/pkgs/development/python-modules/azure-keyvault/default.nix
index 1c4f9f4ee80..91f31ec0a01 100644
--- a/pkgs/development/python-modules/azure-keyvault/default.nix
+++ b/pkgs/development/python-modules/azure-keyvault/default.nix
@@ -1,5 +1,7 @@
 { lib
 , buildPythonPackage
+, python
+, isPy3k
 , fetchPypi
 , azure-common
 , azure-nspkg
@@ -26,6 +28,10 @@ buildPythonPackage rec {
     cryptography
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
diff --git a/pkgs/development/python-modules/azure-mgmt-apimanagement/default.nix b/pkgs/development/python-modules/azure-mgmt-apimanagement/default.nix
new file mode 100644
index 00000000000..9f5c04adb26
--- /dev/null
+++ b/pkgs/development/python-modules/azure-mgmt-apimanagement/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, isPy27
+, azure-common
+, msrest
+, msrestazure
+}:
+
+buildPythonPackage rec {
+  version = "0.1.0";
+  pname = "azure-mgmt-apimanagement";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "06bqqkn5mx127x1z7ycm6rl8ajxlrmrm2kcdpgkbl4baii1x6iax";
+    extension = "zip";
+  };
+
+  propagatedBuildInputs = [ azure-common msrest msrestazure ];
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "azure.common" "azure.mgmt.apimanagement" ];
+
+  meta = with lib; {
+    description = "Microsoft Azure API Management Client Library for Python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/azure-mgmt-appconfiguration/default.nix b/pkgs/development/python-modules/azure-mgmt-appconfiguration/default.nix
new file mode 100644
index 00000000000..271fb2e6aef
--- /dev/null
+++ b/pkgs/development/python-modules/azure-mgmt-appconfiguration/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, isPy27
+, azure-common
+, msrest
+, msrestazure
+}:
+
+buildPythonPackage rec {
+  version = "0.1.0";
+  pname = "azure-mgmt-appconfiguration";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0z2f0rbv7drdxihny479bv80bnhgvx8gb2pr0jvbaslll6d6rxig";
+    extension = "zip";
+  };
+
+  propagatedBuildInputs = [ azure-common msrest msrestazure ];
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "azure.common" "azure.mgmt.appconfiguration" ];
+
+  meta = with lib; {
+    description = "Microsoft Azure App Configuration Management Client Library for Python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/azure-mgmt-applicationinsights/default.nix b/pkgs/development/python-modules/azure-mgmt-applicationinsights/default.nix
index 57c3aec3d45..0a485f05f91 100644
--- a/pkgs/development/python-modules/azure-mgmt-applicationinsights/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-applicationinsights/default.nix
@@ -1,5 +1,6 @@
 { lib
 , buildPythonPackage
+, python
 , fetchPypi
 , msrest
 , msrestazure
@@ -26,6 +27,11 @@ buildPythonPackage rec {
     azure-mgmt-nspkg
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
diff --git a/pkgs/development/python-modules/azure-mgmt-batchai/default.nix b/pkgs/development/python-modules/azure-mgmt-batchai/default.nix
index e1938738597..6da0cf2210c 100644
--- a/pkgs/development/python-modules/azure-mgmt-batchai/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-batchai/default.nix
@@ -24,6 +24,11 @@ buildPythonPackage rec {
     azure-mgmt-nspkg
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
diff --git a/pkgs/development/python-modules/azure-mgmt-billing/default.nix b/pkgs/development/python-modules/azure-mgmt-billing/default.nix
index 666d10d87e5..8c658145d7e 100644
--- a/pkgs/development/python-modules/azure-mgmt-billing/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-billing/default.nix
@@ -1,6 +1,6 @@
 { lib
 , buildPythonPackage
-, fetchFromGitHub
+, fetchPypi
 , msrestazure
 , azure-common
 , azure-mgmt-nspkg
@@ -8,27 +8,33 @@
 , isPy3k
 }:
 
-buildPythonPackage {
+buildPythonPackage rec {
   pname = "azure-mgmt-billing";
   version = "0.2.0"; #pypi's 0.2.0 doesn't build ootb
 
-  src = fetchFromGitHub {
-    owner = "Azure";
-    repo = "azure-sdk-for-python";
-    rev = "ee5b47525d6c1eae3b1fd5f65b0421eab62a6e6f";
-    sha256 = "0xzdn7da5c3q5knh033vbsqk36vwbm75cx8vf10x0yj58krb4kn4";
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1li2bcdwdapwwx7xbvgfsq51f2mrwm0qyzih8cjhszcah2rkpxw5";
+    extension = "zip";
   };
 
-  preBuild = ''
-    cd ./azure-mgmt-billing
-  '';
-
   propagatedBuildInputs = [
     msrestazure
     azure-common
     azure-mgmt-nspkg
   ];
 
+  preBuild = ''
+    rm azure_bdist_wheel.py
+    substituteInPlace setup.cfg \
+      --replace "azure-namespace-package = azure-mgmt-nspkg" ""
+  '';
+
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
diff --git a/pkgs/development/python-modules/azure-mgmt-botservice/default.nix b/pkgs/development/python-modules/azure-mgmt-botservice/default.nix
new file mode 100644
index 00000000000..d9375942b4d
--- /dev/null
+++ b/pkgs/development/python-modules/azure-mgmt-botservice/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, isPy27
+, azure-common
+, msrest
+, msrestazure
+}:
+
+buildPythonPackage rec {
+  version = "0.2.0";
+  pname = "azure-mgmt-botservice";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "10sxllwvybjlp35h5mjdxhkw2wzpl4b03i08p4jnv8cswrc8h7dj";
+    extension = "zip";
+  };
+
+  propagatedBuildInputs = [ azure-common msrest msrestazure ];
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "azure.common" "azure.mgmt.botservice" ];
+
+  meta = with lib; {
+    description = "Microsoft Azure API Management Client Library for Python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/azure-mgmt-consumption/default.nix b/pkgs/development/python-modules/azure-mgmt-consumption/default.nix
index 59b4cbee5bf..b69e4b649de 100644
--- a/pkgs/development/python-modules/azure-mgmt-consumption/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-consumption/default.nix
@@ -1,6 +1,8 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, python
+, isPy3k
 , msrestazure
 , azure-common
 , azure-mgmt-nspkg
@@ -22,6 +24,11 @@ buildPythonPackage rec {
     azure-mgmt-nspkg
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
diff --git a/pkgs/development/python-modules/azure-mgmt-containerregistry/default.nix b/pkgs/development/python-modules/azure-mgmt-containerregistry/default.nix
new file mode 100644
index 00000000000..821c7db0d32
--- /dev/null
+++ b/pkgs/development/python-modules/azure-mgmt-containerregistry/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, isPy27
+, azure-common
+, msrest
+, msrestazure
+}:
+
+buildPythonPackage rec {
+  version = "2.8.0";
+  pname = "azure-mgmt-containerregistry";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "193k07a77z7bj61zn2gxvvfqi20cgxksvxp7if71bwsl1l2y2jxj";
+    extension = "zip";
+  };
+
+  propagatedBuildInputs = [ azure-common msrest msrestazure ];
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "azure.common" "azure.mgmt.containerregistry" ];
+
+  meta = with lib; {
+    description = "Microsoft Azure Container Registry Client Library for Python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/azure-mgmt-datalake-analytics/default.nix b/pkgs/development/python-modules/azure-mgmt-datalake-analytics/default.nix
index c3d690088d1..ad77a75fe83 100644
--- a/pkgs/development/python-modules/azure-mgmt-datalake-analytics/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-datalake-analytics/default.nix
@@ -1,6 +1,8 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, python
+, isPy3k
 , msrestazure
 , azure-common
 , azure-mgmt-datalake-nspkg
@@ -22,6 +24,12 @@ buildPythonPackage rec {
     azure-mgmt-datalake-nspkg
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/datalake/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
diff --git a/pkgs/development/python-modules/azure-mgmt-datalake-store/default.nix b/pkgs/development/python-modules/azure-mgmt-datalake-store/default.nix
index 3164cf2bf15..5d2db3c2112 100644
--- a/pkgs/development/python-modules/azure-mgmt-datalake-store/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-datalake-store/default.nix
@@ -1,6 +1,8 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, python
+, isPy3k
 , msrestazure
 , azure-common
 , azure-mgmt-datalake-nspkg
@@ -22,6 +24,12 @@ buildPythonPackage rec {
     azure-mgmt-datalake-nspkg
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/datalake/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
@@ -29,6 +37,6 @@ buildPythonPackage rec {
     description = "This is the Microsoft Azure Data Lake Store Management Client Library";
     homepage = "https://github.com/Azure/azure-sdk-for-python";
     license = licenses.mit;
-    maintainers = with maintainers; [ mwilsoninsight ];
+    maintainers = with maintainers; [ jonringer mwilsoninsight ];
   };
 }
diff --git a/pkgs/development/python-modules/azure-mgmt-datamigration/default.nix b/pkgs/development/python-modules/azure-mgmt-datamigration/default.nix
index cd98e6f98b0..7fc7c568301 100644
--- a/pkgs/development/python-modules/azure-mgmt-datamigration/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-datamigration/default.nix
@@ -1,11 +1,12 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, python
+, isPy3k
 , msrest
 , msrestazure
 , azure-common
 , azure-mgmt-nspkg
-, isPy3k
 }:
 
 buildPythonPackage rec {
@@ -26,6 +27,11 @@ buildPythonPackage rec {
     azure-mgmt-nspkg
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
@@ -33,6 +39,6 @@ buildPythonPackage rec {
     description = "This is the Microsoft Azure Data Migration Client Library";
     homepage = "https://github.com/Azure/azure-sdk-for-python";
     license = licenses.mit;
-    maintainers = with maintainers; [ mwilsoninsight ];
+    maintainers = with maintainers; [ jonringer mwilsoninsight ];
   };
 }
diff --git a/pkgs/development/python-modules/azure-mgmt-deploymentmanager/default.nix b/pkgs/development/python-modules/azure-mgmt-deploymentmanager/default.nix
new file mode 100644
index 00000000000..276cc86ad8f
--- /dev/null
+++ b/pkgs/development/python-modules/azure-mgmt-deploymentmanager/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, isPy27
+, azure-common
+, msrest
+, msrestazure
+}:
+
+buildPythonPackage rec {
+  version = "0.1.0";
+  pname = "azure-mgmt-deploymentmanager";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0gvh17bhfcpvr6w0nd06v482m8lqxchlk256w68agi2qnqw6v2ir";
+    extension = "zip";
+  };
+
+  propagatedBuildInputs = [ azure-common msrest msrestazure ];
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "azure.common" "azure.mgmt.deploymentmanager" ];
+
+  meta = with lib; {
+    description = "Microsoft Azure Deployment Manager Client Library for Python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/azure-mgmt-devtestlabs/default.nix b/pkgs/development/python-modules/azure-mgmt-devtestlabs/default.nix
index 76a5f0cbcd2..546ec5ab840 100644
--- a/pkgs/development/python-modules/azure-mgmt-devtestlabs/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-devtestlabs/default.nix
@@ -1,11 +1,12 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, python
+, isPy3k
 , msrest
 , msrestazure
 , azure-common
 , azure-mgmt-nspkg
-, isPy3k
 }:
 
 buildPythonPackage rec {
@@ -26,6 +27,11 @@ buildPythonPackage rec {
     azure-mgmt-nspkg
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
@@ -33,6 +39,6 @@ buildPythonPackage rec {
     description = "This is the Microsoft Azure DevTestLabs Management Client Library";
     homepage = "https://github.com/Azure/azure-sdk-for-python";
     license = licenses.mit;
-    maintainers = with maintainers; [ mwilsoninsight ];
+    maintainers = with maintainers; [ jonringer mwilsoninsight ];
   };
 }
diff --git a/pkgs/development/python-modules/azure-mgmt-dns/default.nix b/pkgs/development/python-modules/azure-mgmt-dns/default.nix
index 94d51b765e9..89ae5912b39 100644
--- a/pkgs/development/python-modules/azure-mgmt-dns/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-dns/default.nix
@@ -1,12 +1,12 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, python
+, isPy3k
 , msrest
 , msrestazure
 , azure-common
 , azure-mgmt-nspkg
-, python
-, isPy3k
 }:
 
 buildPythonPackage rec {
@@ -26,6 +26,11 @@ buildPythonPackage rec {
     azure-mgmt-nspkg
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
@@ -33,6 +38,6 @@ buildPythonPackage rec {
     description = "This is the Microsoft Azure DNS Management Client Library";
     homepage = "https://github.com/Azure/azure-sdk-for-python";
     license = licenses.mit;
-    maintainers = with maintainers; [ mwilsoninsight ];
+    maintainers = with maintainers; [ jonringer mwilsoninsight ];
   };
 }
diff --git a/pkgs/development/python-modules/azure-mgmt-hdinsight/default.nix b/pkgs/development/python-modules/azure-mgmt-hdinsight/default.nix
new file mode 100644
index 00000000000..82955674c4b
--- /dev/null
+++ b/pkgs/development/python-modules/azure-mgmt-hdinsight/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, isPy27
+, azure-common
+, msrest
+, msrestazure
+}:
+
+buildPythonPackage rec {
+  version = "1.2.0";
+  pname = "azure-mgmt-hdinsight";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1yq9s7a2ch8j84af3hzj350jnjq5s3ysiqvmypvcb7vl6rkkd2lm";
+    extension = "zip";
+  };
+
+  propagatedBuildInputs = [ azure-common msrest msrestazure ];
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "azure.common" "azure.mgmt.hdinsight" ];
+
+  meta = with lib; {
+    description = "Microsoft Azure HDInsight Management Client Library for Python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/azure-mgmt-imagebuilder/default.nix b/pkgs/development/python-modules/azure-mgmt-imagebuilder/default.nix
new file mode 100644
index 00000000000..bb6e06aa68b
--- /dev/null
+++ b/pkgs/development/python-modules/azure-mgmt-imagebuilder/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, isPy27
+, azure-common
+, msrest
+, msrestazure
+}:
+
+buildPythonPackage rec {
+  version = "0.2.1";
+  pname = "azure-mgmt-imagebuilder";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0mwlvy4x5nr3hsz7wdpdhpzwarzzwz4225bfpd68hr0pcjgzspky";
+    extension = "zip";
+  };
+
+  propagatedBuildInputs = [ azure-common msrest msrestazure ];
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "azure.common" "azure.mgmt.imagebuilder" ];
+
+  meta = with lib; {
+    description = "Microsoft Azure Image Builder Client Library for Python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/azure-mgmt-iothubprovisioningservices/default.nix b/pkgs/development/python-modules/azure-mgmt-iothubprovisioningservices/default.nix
index 7605e459271..c72ca47cff9 100644
--- a/pkgs/development/python-modules/azure-mgmt-iothubprovisioningservices/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-iothubprovisioningservices/default.nix
@@ -1,6 +1,8 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, python
+, isPy3k
 , msrest
 , msrestazure
 , azure-common
@@ -24,6 +26,11 @@ buildPythonPackage rec {
     azure-mgmt-nspkg
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
@@ -31,6 +38,6 @@ buildPythonPackage rec {
     description = "This is the Microsoft Azure IoTHub Provisioning Services Client Library";
     homepage = "https://github.com/Azure/azure-sdk-for-python";
     license = licenses.mit;
-    maintainers = with maintainers; [ mwilsoninsight ];
+    maintainers = with maintainers; [ jonringer mwilsoninsight ];
   };
 }
diff --git a/pkgs/development/python-modules/azure-mgmt-keyvault/default.nix b/pkgs/development/python-modules/azure-mgmt-keyvault/default.nix
index 99cdfdf922b..e3529bda8d2 100644
--- a/pkgs/development/python-modules/azure-mgmt-keyvault/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-keyvault/default.nix
@@ -1,6 +1,8 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, python
+, isPy3k
 , msrest
 , msrestazure
 , azure-common
@@ -24,6 +26,11 @@ buildPythonPackage rec {
     azure-mgmt-nspkg
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
@@ -31,6 +38,6 @@ buildPythonPackage rec {
     description = "This is the Microsoft Azure Key Vault Management Client Library";
     homepage = "https://github.com/Azure/azure-sdk-for-python";
     license = licenses.mit;
-    maintainers = with maintainers; [ mwilsoninsight ];
+    maintainers = with maintainers; [ jonringer mwilsoninsight ];
   };
 }
diff --git a/pkgs/development/python-modules/azure-mgmt-kusto/azure-mgmt-apimanagement/default.nix b/pkgs/development/python-modules/azure-mgmt-kusto/azure-mgmt-apimanagement/default.nix
new file mode 100644
index 00000000000..9f5c04adb26
--- /dev/null
+++ b/pkgs/development/python-modules/azure-mgmt-kusto/azure-mgmt-apimanagement/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, isPy27
+, azure-common
+, msrest
+, msrestazure
+}:
+
+buildPythonPackage rec {
+  version = "0.1.0";
+  pname = "azure-mgmt-apimanagement";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "06bqqkn5mx127x1z7ycm6rl8ajxlrmrm2kcdpgkbl4baii1x6iax";
+    extension = "zip";
+  };
+
+  propagatedBuildInputs = [ azure-common msrest msrestazure ];
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "azure.common" "azure.mgmt.apimanagement" ];
+
+  meta = with lib; {
+    description = "Microsoft Azure API Management Client Library for Python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/azure-mgmt-kusto/default.nix b/pkgs/development/python-modules/azure-mgmt-kusto/default.nix
new file mode 100644
index 00000000000..fe84fc01dec
--- /dev/null
+++ b/pkgs/development/python-modules/azure-mgmt-kusto/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, isPy27
+, azure-common
+, msrest
+, msrestazure
+}:
+
+buildPythonPackage rec {
+  version = "0.4.0";
+  pname = "azure-mgmt-kusto";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1sx8f98206wccj0mbmb75c4wyhf57g3pnkhl9wn70lqzi9n4mk0b";
+    extension = "zip";
+  };
+
+  propagatedBuildInputs = [ azure-common msrest msrestazure ];
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "azure.common" "azure.mgmt.kusto" ];
+
+  meta = with lib; {
+    description = "Microsoft Azure Kusto Management Client Library for Python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/azure-mgmt-loganalytics/default.nix b/pkgs/development/python-modules/azure-mgmt-loganalytics/default.nix
index 6d844117c9f..a5e2829a930 100644
--- a/pkgs/development/python-modules/azure-mgmt-loganalytics/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-loganalytics/default.nix
@@ -1,6 +1,8 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, python
+, isPy3k
 , msrest
 , msrestazure
 , azure-common
@@ -24,6 +26,11 @@ buildPythonPackage rec {
     azure-mgmt-nspkg
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
diff --git a/pkgs/development/python-modules/azure-mgmt-managedservices/default.nix b/pkgs/development/python-modules/azure-mgmt-managedservices/default.nix
new file mode 100644
index 00000000000..4d059480c44
--- /dev/null
+++ b/pkgs/development/python-modules/azure-mgmt-managedservices/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, isPy27
+, azure-common
+, msrest
+, msrestazure
+}:
+
+buildPythonPackage rec {
+  version = "1.0.0";
+  pname = "azure-mgmt-managedservices";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "06ddfqriqlvwjsjhqka9r5vhshardyj9c10xgjissfkpqsgkkn7y";
+    extension = "zip";
+  };
+
+  propagatedBuildInputs = [ azure-common msrest msrestazure ];
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "azure.common" "azure.mgmt.managedservices" ];
+
+  meta = with lib; {
+    description = "Microsoft Azure Managed Services Client Library for Python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/azure-mgmt-maps/default.nix b/pkgs/development/python-modules/azure-mgmt-maps/default.nix
index 2869b6c81d7..b18c0267236 100644
--- a/pkgs/development/python-modules/azure-mgmt-maps/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-maps/default.nix
@@ -1,6 +1,8 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, python
+, isPy3k
 , msrest
 , msrestazure
 , azure-common
@@ -24,6 +26,11 @@ buildPythonPackage rec {
     azure-mgmt-nspkg
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
diff --git a/pkgs/development/python-modules/azure-mgmt-monitor/default.nix b/pkgs/development/python-modules/azure-mgmt-monitor/default.nix
index b9a8b3c0158..23e6bcf8cb4 100644
--- a/pkgs/development/python-modules/azure-mgmt-monitor/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-monitor/default.nix
@@ -1,11 +1,12 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, python
+, isPy3k
 , msrest
 , msrestazure
 , azure-common
 , azure-mgmt-nspkg
-, isPy3k
 }:
 
 buildPythonPackage rec {
@@ -26,6 +27,11 @@ buildPythonPackage rec {
     azure-mgmt-nspkg
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
diff --git a/pkgs/development/python-modules/azure-mgmt-msi/default.nix b/pkgs/development/python-modules/azure-mgmt-msi/default.nix
index 9b1d0bf5a2b..87e70c2fdcc 100644
--- a/pkgs/development/python-modules/azure-mgmt-msi/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-msi/default.nix
@@ -1,6 +1,8 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, python
+, isPy3k
 , msrest
 , msrestazure
 , azure-common
@@ -24,6 +26,11 @@ buildPythonPackage rec {
     azure-mgmt-nspkg
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
diff --git a/pkgs/development/python-modules/azure-mgmt-netapp/default.nix b/pkgs/development/python-modules/azure-mgmt-netapp/default.nix
new file mode 100644
index 00000000000..79a3a19778d
--- /dev/null
+++ b/pkgs/development/python-modules/azure-mgmt-netapp/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, isPy27
+, azure-common
+, msrest
+, msrestazure
+}:
+
+buildPythonPackage rec {
+  version = "0.6.0";
+  pname = "azure-mgmt-netapp";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "10ymvyj386z9bjdm2g1b5a4vfnn87ig2zm6xn2xddvbpy0jxnyfv";
+    extension = "zip";
+  };
+
+  propagatedBuildInputs = [ azure-common msrest msrestazure ];
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "azure.common" "azure.mgmt.netapp" ];
+
+  meta = with lib; {
+    description = "Microsoft Azure NetApp Files Management Client Library for Python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/azure-mgmt-privatedns/default.nix b/pkgs/development/python-modules/azure-mgmt-privatedns/default.nix
new file mode 100644
index 00000000000..98855730ba3
--- /dev/null
+++ b/pkgs/development/python-modules/azure-mgmt-privatedns/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, isPy27
+, azure-common
+, msrest
+, msrestazure
+}:
+
+buildPythonPackage rec {
+  version = "0.1.0";
+  pname = "azure-mgmt-privatedns";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "08wdvfkk8jh90m3l4nz7knd5vikgfvsx70lk7mkhcvl0xj6gv76j";
+    extension = "zip";
+  };
+
+  propagatedBuildInputs = [ azure-common msrest msrestazure ];
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "azure.common" "azure.mgmt.privatedns" ];
+
+  meta = with lib; {
+    description = "Microsoft Azure DNS Private Zones Client Library for Python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/azure-mgmt-relay/default.nix b/pkgs/development/python-modules/azure-mgmt-relay/default.nix
index 718cd985443..5046bf8740f 100644
--- a/pkgs/development/python-modules/azure-mgmt-relay/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-relay/default.nix
@@ -1,6 +1,8 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, python
+, isPy3k
 , msrestazure
 , azure-common
 , azure-mgmt-nspkg
@@ -22,6 +24,11 @@ buildPythonPackage rec {
     azure-mgmt-nspkg
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
diff --git a/pkgs/development/python-modules/azure-mgmt-security/default.nix b/pkgs/development/python-modules/azure-mgmt-security/default.nix
new file mode 100644
index 00000000000..5a9d8849f8d
--- /dev/null
+++ b/pkgs/development/python-modules/azure-mgmt-security/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, isPy27
+, azure-common
+, msrest
+, msrestazure
+}:
+
+buildPythonPackage rec {
+  version = "0.3.0";
+  pname = "azure-mgmt-security";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0z766424783a6y5dp5ybxssb0bfzqb8kpa6zra8ccnbfg4fn478v";
+    extension = "zip";
+  };
+
+  propagatedBuildInputs = [ azure-common msrest msrestazure ];
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "azure.common" "azure.mgmt.security" ];
+
+  meta = with lib; {
+    description = "Microsoft Azure Security Center Management Client Library for Python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/azure-mgmt-servicefabric/default.nix b/pkgs/development/python-modules/azure-mgmt-servicefabric/default.nix
index a80c97ea377..9c849829a12 100644
--- a/pkgs/development/python-modules/azure-mgmt-servicefabric/default.nix
+++ b/pkgs/development/python-modules/azure-mgmt-servicefabric/default.nix
@@ -1,6 +1,8 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, python
+, isPy3k
 , msrest
 , msrestazure
 , azure-common
@@ -24,6 +26,11 @@ buildPythonPackage rec {
     azure-mgmt-nspkg
   ];
 
+  postInstall = lib.optionalString isPy3k ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/mgmt/__init__.py
+  '';
+
   # has no tests
   doCheck = false;
 
diff --git a/pkgs/development/python-modules/azure-mgmt-sqlvirtualmachine/default.nix b/pkgs/development/python-modules/azure-mgmt-sqlvirtualmachine/default.nix
new file mode 100644
index 00000000000..6704df2d21a
--- /dev/null
+++ b/pkgs/development/python-modules/azure-mgmt-sqlvirtualmachine/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, isPy27
+, azure-common
+, msrest
+, msrestazure
+}:
+
+buildPythonPackage rec {
+  version = "0.4.0";
+  pname = "azure-mgmt-sqlvirtualmachine";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1jxmikjvyxkwr8c9kn6xw8gvj9pajlk7y8111rq8fgkivwjq8wcm";
+    extension = "zip";
+  };
+
+  propagatedBuildInputs = [ azure-common msrest msrestazure ];
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "azure.common" "azure.mgmt.sqlvirtualmachine" ];
+
+  meta = with lib; {
+    description = "Microsoft Azure SQL Virtual Machine Management Client Library for Python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/azure-multiapi-storage/default.nix b/pkgs/development/python-modules/azure-multiapi-storage/default.nix
new file mode 100644
index 00000000000..dc4a011e078
--- /dev/null
+++ b/pkgs/development/python-modules/azure-multiapi-storage/default.nix
@@ -0,0 +1,36 @@
+{ lib, python, buildPythonPackage, fetchPypi, isPy27
+, azure-common
+, msrest
+, msrestazure
+}:
+
+buildPythonPackage rec {
+  version = "0.2.4";
+  pname = "azure-multiapi-storage";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0zqapc4dx6qd9bcim5fjykk3n1j84p85nwqyb876nb7qmqx9spig";
+  };
+
+  propagatedBuildInputs = [ azure-common msrest msrestazure ];
+
+  # fix namespace issues
+  postInstall = ''
+    rm $out/${python.sitePackages}/azure/__init__.py
+    rm $out/${python.sitePackages}/azure/multiapi/__init__.py
+  '';
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "azure.common" "azure.multiapi.storage" ];
+
+  meta = with lib; {
+    description = "Microsoft Azure Storage Client Library for Python with multi API version support.";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/babelgladeextractor/default.nix b/pkgs/development/python-modules/babelgladeextractor/default.nix
new file mode 100644
index 00000000000..40c2493c151
--- /dev/null
+++ b/pkgs/development/python-modules/babelgladeextractor/default.nix
@@ -0,0 +1,35 @@
+{ stdenv
+, lib
+, buildPythonPackage
+, fetchPypi
+, Babel
+, lxml
+}:
+
+buildPythonPackage rec {
+  pname = "babelgladeextractor";
+  version = "0.6.0";
+
+  src = fetchPypi {
+    pname = "BabelGladeExtractor";
+    inherit version;
+    extension = "tar.bz2";
+    sha256 = "18m5vi3sj2h26ibmb6fzfjs2lscg757ivk1bjgkn1haf9gdwyjj6";
+  };
+
+  propagatedBuildInputs = [
+    Babel
+    lxml # TODO: remove in 0.7.0
+  ];
+
+  # Tests missing
+  # https://github.com/gnome-keysign/babel-glade/issues/5
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/gnome-keysign/babel-glade";
+    description = "Babel Glade XML files translatable strings extractor";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jtojnar ];
+  };
+}
diff --git a/pkgs/development/python-modules/croniter/default.nix b/pkgs/development/python-modules/croniter/default.nix
index e262a7f164c..969a4e8af89 100644
--- a/pkgs/development/python-modules/croniter/default.nix
+++ b/pkgs/development/python-modules/croniter/default.nix
@@ -30,7 +30,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "croniter provides iteration for datetime object with cron like format";
-    homepage = http://github.com/kiorky/croniter;
+    homepage = https://github.com/kiorky/croniter;
     license = licenses.mit;
     maintainers = [ maintainers.costrouc ];
   };
diff --git a/pkgs/development/python-modules/flask-babelex/default.nix b/pkgs/development/python-modules/flask-babelex/default.nix
index c5968be6b8f..c61967af6bc 100644
--- a/pkgs/development/python-modules/flask-babelex/default.nix
+++ b/pkgs/development/python-modules/flask-babelex/default.nix
@@ -40,7 +40,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "Adds i18n/l10n support to Flask applications";
-    homepage = http://github.com/mrjoes/flask-babelex;
+    homepage = https://github.com/mrjoes/flask-babelex;
     license = licenses.bsd3;
     maintainers = [ maintainers.costrouc ];
   };
diff --git a/pkgs/development/python-modules/flask-openid/default.nix b/pkgs/development/python-modules/flask-openid/default.nix
index ad500163609..c1f9a51a225 100644
--- a/pkgs/development/python-modules/flask-openid/default.nix
+++ b/pkgs/development/python-modules/flask-openid/default.nix
@@ -27,7 +27,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "OpenID support for Flask";
-    homepage = http://github.com/mitsuhiko/flask-openid/;
+    homepage = https://pythonhosted.org/Flask-OpenID/;
     license = licenses.bsd3;
     maintainers = [ maintainers.costrouc ];
   };
diff --git a/pkgs/development/python-modules/google-auth-httplib2/default.nix b/pkgs/development/python-modules/google-auth-httplib2/default.nix
index c76f5c572e4..99c9945ea66 100644
--- a/pkgs/development/python-modules/google-auth-httplib2/default.nix
+++ b/pkgs/development/python-modules/google-auth-httplib2/default.nix
@@ -1,4 +1,5 @@
 { lib
+, isPy3k
 , buildPythonPackage
 , fetchPypi
 , flask
@@ -32,10 +33,13 @@ buildPythonPackage rec {
     py.test
   '';
 
+  # ImportError: No module named google.auth
+  doCheck = isPy3k;
+
   meta = {
     description = "Google Authentication Library: httplib2 transport";
     homepage = https://github.com/GoogleCloudPlatform/google-auth-library-python-httplib2;
     license = lib.licenses.asl20;
   };
 
-}
\ No newline at end of file
+}
diff --git a/pkgs/development/python-modules/google_cloud_translate/default.nix b/pkgs/development/python-modules/google_cloud_translate/default.nix
index ebe39e72c05..99494b6886c 100644
--- a/pkgs/development/python-modules/google_cloud_translate/default.nix
+++ b/pkgs/development/python-modules/google_cloud_translate/default.nix
@@ -3,24 +3,27 @@
 , fetchPypi
 , google_api_core
 , google_cloud_core
+, grpcio
 , pytest
 , mock
 }:
 
 buildPythonPackage rec {
   pname = "google-cloud-translate";
-  version = "1.7.0";
+  version = "2.0.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "55b6563121883acce5d80afbf61a59e50d52c429e6ebbfe81a1c8f2734b75e8c";
+    sha256 = "0nfc628nr2k6kd3q9qpgwz7c12l0191rv5x4pvca8q82jl96gip5";
   };
 
-  checkInputs = [ pytest mock ];
-  propagatedBuildInputs = [ google_api_core google_cloud_core ];
+  # google_cloud_core[grpc] -> grpcio
+  propagatedBuildInputs = [ google_api_core google_cloud_core grpcio ];
 
+  checkInputs = [ pytest mock ];
   checkPhase = ''
-    pytest tests/unit
+    cd tests # prevent local google/__init__.py from getting loaded
+    pytest unit
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/python-modules/javaproperties/default.nix b/pkgs/development/python-modules/javaproperties/default.nix
new file mode 100644
index 00000000000..a03aa9ec18b
--- /dev/null
+++ b/pkgs/development/python-modules/javaproperties/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildPythonPackage, fetchFromGitHub
+, six
+, pytest
+, dateutil
+}:
+
+buildPythonPackage rec {
+  version = "0.5.2";
+  pname = "javaproperties";
+
+  src = fetchFromGitHub {
+    owner = "jwodder";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "14hrp94cjj44yldf3k71wbq88cmlf01dfadi53gcirnsa56ddz5d";
+  };
+
+  propagatedBuildInputs = [ six ];
+
+  checkInputs = [ dateutil pytest ];
+  checkPhase = ''
+    rm tox.ini
+    pytest -k 'not dumps and not time' --ignore=test/test_propclass.py
+  '';
+
+  meta = with lib; {
+    description = "Microsoft Azure API Management Client Library for Python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/keyring/2.nix b/pkgs/development/python-modules/keyring/2.nix
new file mode 100644
index 00000000000..ce4aa145e8e
--- /dev/null
+++ b/pkgs/development/python-modules/keyring/2.nix
@@ -0,0 +1,33 @@
+{ stdenv, buildPythonPackage, fetchPypi
+, dbus-python, setuptools_scm, entrypoints, secretstorage
+, pytest, pytest-flake8 }:
+
+buildPythonPackage rec {
+  pname = "keyring";
+  version = "18.0.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0f58jq58jhfzlhix7x2zz7c4ycdvcs1z3sgs4lkr4xxx680wrmk7";
+  };
+
+  nativeBuildInputs = [ setuptools_scm ];
+
+  checkInputs = [ pytest pytest-flake8 ];
+
+  propagatedBuildInputs = [ dbus-python entrypoints ] ++ stdenv.lib.optional stdenv.isLinux secretstorage;
+
+  doCheck = !stdenv.isDarwin;
+
+  checkPhase = ''
+    py.test
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Store and access your passwords safely";
+    homepage    = "https://pypi.python.org/pypi/keyring";
+    license     = licenses.psfl;
+    maintainers = with maintainers; [ lovek323 orivej ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/pkgs/development/python-modules/kmapper/default.nix b/pkgs/development/python-modules/kmapper/default.nix
index 3904473f1a3..67b9343ecca 100644
--- a/pkgs/development/python-modules/kmapper/default.nix
+++ b/pkgs/development/python-modules/kmapper/default.nix
@@ -44,7 +44,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "Python implementation of Mapper algorithm for Topological Data Analysis";
-    homepage = http://kepler-mapper.scikit-tda.org;
+    homepage = https://kepler-mapper.scikit-tda.org/;
     license = licenses.mit;
     maintainers = [ maintainers.costrouc ];
   };
diff --git a/pkgs/development/python-modules/mahotas/default.nix b/pkgs/development/python-modules/mahotas/default.nix
index 101468da09f..dc18f5ac405 100644
--- a/pkgs/development/python-modules/mahotas/default.nix
+++ b/pkgs/development/python-modules/mahotas/default.nix
@@ -25,7 +25,7 @@ buildPythonPackage rec {
 
   meta = with stdenv.lib; {
     description = "Computer vision package based on numpy";
-    homepage = http://mahotas.readthedocs.io/;
+    homepage = https://mahotas.readthedocs.io/;
     maintainers = with maintainers; [ luispedro ];
     license = licenses.mit;
     platforms = platforms.unix;
diff --git a/pkgs/development/python-modules/meinheld/default.nix b/pkgs/development/python-modules/meinheld/default.nix
index 31892d12a1f..f1291a14f3f 100644
--- a/pkgs/development/python-modules/meinheld/default.nix
+++ b/pkgs/development/python-modules/meinheld/default.nix
@@ -16,7 +16,7 @@ buildPythonPackage rec {
 
   meta = with stdenv.lib; {
     description = "High performance asynchronous Python WSGI Web Server";
-    homepage = http://meinheld.org/;
+    homepage = https://meinheld.org/;
     license = licenses.bsd3;
   };
 }
diff --git a/pkgs/development/python-modules/micawber/default.nix b/pkgs/development/python-modules/micawber/default.nix
index b5fd1d33458..003234c2adf 100644
--- a/pkgs/development/python-modules/micawber/default.nix
+++ b/pkgs/development/python-modules/micawber/default.nix
@@ -12,7 +12,7 @@ buildPythonPackage rec {
   propagatedBuildInputs = [ beautifulsoup4 ];
 
   meta = with stdenv.lib; {
-    homepage = http://micawber.readthedocs.io/en/latest/;
+    homepage = https://micawber.readthedocs.io/en/latest/;
     description = "A small library for extracting rich content from urls";
     license = licenses.mit;
     longDescription = ''
diff --git a/pkgs/development/python-modules/mnist/default.nix b/pkgs/development/python-modules/mnist/default.nix
new file mode 100644
index 00000000000..022cd3a2e02
--- /dev/null
+++ b/pkgs/development/python-modules/mnist/default.nix
@@ -0,0 +1,36 @@
+{ buildPythonPackage, fetchFromGitHub, isPy27, lib, mock, numpy, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "mnist";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "datapythonista";
+    repo = "mnist";
+    rev = "${pname}-${version}";
+    sha256 = "17r37pbxiv5dw857bmg990x836gq6sgww069w3q5jjg9m3xdm7dh";
+  };
+
+  propagatedBuildInputs = [ numpy ] ++ lib.optional isPy27 mock;
+
+  checkInputs = [ pytestCheckHook ];
+
+  dontUseSetuptoolsCheck = true;
+
+  # disable tests which fail due to socket related errors
+  disabledTests = [
+    "test_test_images_has_right_size"
+    "test_test_labels_has_right_size"
+    "test_train_images_has_right_size"
+    "test_train_labels_has_right_size"
+  ];
+
+  meta = with lib; {
+    description = "Python utilities to download and parse the MNIST dataset";
+    homepage = "https://github.com/datapythonista/mnist";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ dmrauh ];
+  };
+}
+
diff --git a/pkgs/development/python-modules/monty/default.nix b/pkgs/development/python-modules/monty/default.nix
index 677cb68ca50..361be1bf184 100644
--- a/pkgs/development/python-modules/monty/default.nix
+++ b/pkgs/development/python-modules/monty/default.nix
@@ -14,14 +14,14 @@
 
 buildPythonPackage rec {
   pname = "monty";
-  version = "1.0.4";
+  version = "3.0.2";
 
   # No tests in Pypi
   src = fetchFromGitHub {
     owner = "materialsvirtuallab";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0vqaaz0dw0ypl6sfwbycpb0qs3ap04c4ghbggklxih66spdlggh6";
+    sha256 = "1wxqxp0j7i6czdpr2r1imgmy3qbgn2l7d4za2h1lg3hllvx6jra1";
   };
 
   checkInputs = [ lsof nose numpy msgpack coverage coveralls pymongo];
diff --git a/pkgs/development/python-modules/msrest/default.nix b/pkgs/development/python-modules/msrest/default.nix
index ede8e0801df..70fa6f361ca 100644
--- a/pkgs/development/python-modules/msrest/default.nix
+++ b/pkgs/development/python-modules/msrest/default.nix
@@ -18,7 +18,7 @@
 }:
 
 buildPythonPackage rec {
-  version = "0.6.9";
+  version = "0.6.10";
   pname = "msrest";
 
   # no tests in PyPI tarball
@@ -27,7 +27,7 @@ buildPythonPackage rec {
     owner = "Azure";
     repo = "msrest-for-python";
     rev = "v${version}";
-    sha256 = "0540dmxz90jsmwvd4q06cr1ficixknjk8q06f2dqcp06w92vnl8r";
+    sha256 = "1l08daq748lk8rwiv4jdlnmfl9mi7g1ln46gibhnd9xvrrjp0sdx";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/msrestazure/default.nix b/pkgs/development/python-modules/msrestazure/default.nix
index 0ef06cd8fb1..a820dd89f51 100644
--- a/pkgs/development/python-modules/msrestazure/default.nix
+++ b/pkgs/development/python-modules/msrestazure/default.nix
@@ -12,7 +12,7 @@
 }:
 
 buildPythonPackage rec {
-  version = "0.6.1";
+  version = "0.6.2";
   pname = "msrestazure";
 
   # Pypi tarball doesnt include tests
@@ -21,7 +21,7 @@ buildPythonPackage rec {
     owner = "Azure";
     repo = "msrestazure-for-python";
     rev = "v${version}";
-    sha256 = "09swndz57131b8x57mzibnsr1sv0l80pk62p89q99gsd6mvc389c";
+    sha256 = "09qwdg4la4jwp5ibypdwsn7h8m2sh8c1kdxvffyxcjan50h14s04";
   };
 
   propagatedBuildInputs = [ adal msrest ];
diff --git a/pkgs/development/python-modules/nuitka/default.nix b/pkgs/development/python-modules/nuitka/default.nix
index 6be1f39328f..ba6dbced66e 100644
--- a/pkgs/development/python-modules/nuitka/default.nix
+++ b/pkgs/development/python-modules/nuitka/default.nix
@@ -46,7 +46,7 @@ in buildPythonPackage rec {
   meta = with stdenv.lib; {
     description = "Python compiler with full language support and CPython compatibility";
     license = licenses.asl20;
-    homepage = http://nuitka.net/;
+    homepage = https://nuitka.net/;
   };
 
 }
diff --git a/pkgs/development/python-modules/openpyxl/2.nix b/pkgs/development/python-modules/openpyxl/2.nix
new file mode 100644
index 00000000000..d58192c0666
--- /dev/null
+++ b/pkgs/development/python-modules/openpyxl/2.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pytest
+, jdcal
+, et_xmlfile
+, lxml
+}:
+
+buildPythonPackage rec {
+  pname = "openpyxl";
+  version = "2.6.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1d53801678e18d7fe38c116f1ad0c2383a654670c4c8806105b611c92d92f2e3";
+  };
+
+  checkInputs = [ pytest ];
+  propagatedBuildInputs = [ jdcal et_xmlfile lxml ];
+
+  postPatch = ''
+    # LICENSE.rst is missing, and setup.cfg currently doesn't contain anything useful anyway
+    # This should likely be removed in the next update
+    rm setup.cfg
+  '';
+
+  # Tests are not included in archive.
+  # https://bitbucket.org/openpyxl/openpyxl/issues/610
+  doCheck = false;
+
+  meta = {
+    description = "A Python library to read/write Excel 2007 xlsx/xlsm files";
+    homepage = https://openpyxl.readthedocs.org;
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ lihop sjourdois ];
+  };
+}
diff --git a/pkgs/development/python-modules/pandas/2.nix b/pkgs/development/python-modules/pandas/2.nix
index 42e6fe845e0..6283addcb6e 100644
--- a/pkgs/development/python-modules/pandas/2.nix
+++ b/pkgs/development/python-modules/pandas/2.nix
@@ -32,11 +32,11 @@ let
 
 in buildPythonPackage rec {
   pname = "pandas";
-  version = "0.25.3";
+  version = "0.24.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "52da74df8a9c9a103af0a72c9d5fdc8e0183a90884278db7f386b5692a2220a4";
+    sha256 = "18imlm8xbhcbwy4wa957a1fkamrcb0z988z006jpfda3ki09z4ag";
   };
 
   checkInputs = [ pytest glibcLocales moto hypothesis ];
diff --git a/pkgs/development/python-modules/portalocker/default.nix b/pkgs/development/python-modules/portalocker/default.nix
index 7c405a514f2..b3b98b2b2ec 100644
--- a/pkgs/development/python-modules/portalocker/default.nix
+++ b/pkgs/development/python-modules/portalocker/default.nix
@@ -1,6 +1,7 @@
 { buildPythonPackage
 , fetchPypi
 , lib
+, fetchpatch
 , sphinx
 , flake8
 , pytest
@@ -15,7 +16,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "dac62e53e5670cb40d2ee4cdc785e6b829665932c3ee75307ad677cf5f7d2e9f";
+    sha256 = "17rfgmgwyxyng8q7bvn369cncadqws2wgkg45q6v8337wm9jxins";
   };
 
   checkInputs = [
diff --git a/pkgs/development/python-modules/pydocstyle/2.nix b/pkgs/development/python-modules/pydocstyle/2.nix
new file mode 100644
index 00000000000..a2f2daa2fe9
--- /dev/null
+++ b/pkgs/development/python-modules/pydocstyle/2.nix
@@ -0,0 +1,33 @@
+{ lib, buildPythonPackage, fetchFromGitHub, isPy3k, pythonOlder
+, snowballstemmer, six, configparser
+, pytest, pytestpep8, mock, pathlib }:
+
+buildPythonPackage rec {
+  pname = "pydocstyle";
+  version = "2.1.1";
+
+  # no tests on PyPI
+  # https://github.com/PyCQA/pydocstyle/issues/302
+  src = fetchFromGitHub {
+    owner = "PyCQA";
+    repo = pname;
+    rev = version;
+    sha256 = "1h0k8lpx14svc8dini62j0kqiam10pck5sdzvxa4xhsx7y689g5l";
+  };
+
+  propagatedBuildInputs = [ snowballstemmer six ] ++ lib.optional (!isPy3k) configparser;
+
+  checkInputs = [ pytest pytestpep8 mock ] ++ lib.optional (pythonOlder "3.4") pathlib;
+
+  checkPhase = ''
+    # test_integration.py installs packages via pip
+    py.test --pep8 --cache-clear -vv src/tests -k "not test_integration"
+  '';
+
+  meta = with lib; {
+    description = "Python docstring style checker";
+    homepage = https://github.com/PyCQA/pydocstyle/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ dzabraev ];
+  };
+}
diff --git a/pkgs/development/python-modules/pydocstyle/default.nix b/pkgs/development/python-modules/pydocstyle/default.nix
index a2f2daa2fe9..39d9f9f9a23 100644
--- a/pkgs/development/python-modules/pydocstyle/default.nix
+++ b/pkgs/development/python-modules/pydocstyle/default.nix
@@ -1,23 +1,25 @@
-{ lib, buildPythonPackage, fetchFromGitHub, isPy3k, pythonOlder
-, snowballstemmer, six, configparser
-, pytest, pytestpep8, mock, pathlib }:
+{ lib, buildPythonPackage, fetchFromGitHub, isPy3k
+, mock
+, pytest
+, pytestpep8
+, snowballstemmer
+}:
 
 buildPythonPackage rec {
   pname = "pydocstyle";
-  version = "2.1.1";
+  version = "4.0.1";
+  disabled = !isPy3k;
 
-  # no tests on PyPI
-  # https://github.com/PyCQA/pydocstyle/issues/302
   src = fetchFromGitHub {
     owner = "PyCQA";
     repo = pname;
     rev = version;
-    sha256 = "1h0k8lpx14svc8dini62j0kqiam10pck5sdzvxa4xhsx7y689g5l";
+    sha256 = "1sr8d2fsfpam4f14v4als6g2v6s3n9h138vxlwhd6slb3ll14y4l";
   };
 
-  propagatedBuildInputs = [ snowballstemmer six ] ++ lib.optional (!isPy3k) configparser;
+  propagatedBuildInputs = [ snowballstemmer ];
 
-  checkInputs = [ pytest pytestpep8 mock ] ++ lib.optional (pythonOlder "3.4") pathlib;
+  checkInputs = [ pytest pytestpep8 mock ];
 
   checkPhase = ''
     # test_integration.py installs packages via pip
diff --git a/pkgs/development/python-modules/pydrive/default.nix b/pkgs/development/python-modules/pydrive/default.nix
new file mode 100644
index 00000000000..aa0515323e2
--- /dev/null
+++ b/pkgs/development/python-modules/pydrive/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, google_api_python_client
+, oauth2client
+, pyyaml
+}:
+
+buildPythonPackage rec {
+  pname = "pydrive";
+  version = "1.3.1";
+
+  src = fetchPypi {
+    pname = "PyDrive";
+    inherit version;
+    sha256 = "11q7l94mb34hfh9wkdwfrh5xw99y13wa33ba7xp1q23q4b60v2c3";
+  };
+
+  propagatedBuildInputs = [
+    google_api_python_client
+    oauth2client
+    pyyaml
+  ];
+
+  # requires client_secrets.json
+  doCheck = false;
+
+  meta = {
+    description = "Google Drive API Python wrapper library";
+    homepage = "https://github.com/gsuitedevs/PyDrive";
+    license = lib.licenses.asl20;
+  };
+}
diff --git a/pkgs/development/python-modules/secure/default.nix b/pkgs/development/python-modules/secure/default.nix
new file mode 100644
index 00000000000..6d2f2871ec2
--- /dev/null
+++ b/pkgs/development/python-modules/secure/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildPythonPackage, fetchFromGitHub
+, maya
+, requests
+}:
+
+buildPythonPackage rec {
+  version = "0.2.1";
+  pname = "secure";
+
+  src = fetchFromGitHub {
+    owner = "typeerror";
+    repo = "secure.py";
+    rev = "v${version}";
+    sha256 = "1nbxwi0zccrha6js14ibd596kdi1wpqr7jgs442mqclw4b3f77q5";
+  };
+
+  propagatedBuildInputs = [ maya requests ];
+
+  # no tests in release
+  doCheck = false;
+
+  pythonImportsCheck = [ "secure" ];
+
+  meta = with lib; {
+    description = "Adds optional security headers and cookie attributes for Python web frameworks";
+    homepage = "https://github.com/TypeError/secure.py";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/spglib/default.nix b/pkgs/development/python-modules/spglib/default.nix
index 73af5d7b00c..bad76f8cb93 100644
--- a/pkgs/development/python-modules/spglib/default.nix
+++ b/pkgs/development/python-modules/spglib/default.nix
@@ -2,22 +2,13 @@
 
 buildPythonPackage rec {
   pname = "spglib";
-  version = "1.12.2.post0";
+  version = "1.14.1.post0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "15b02b74c0f06179bc3650c43a710a5200abbba387c6eda3105bfd9236041443";
+    sha256 = "0kmllcch5p20ylxirqiqzls567jr2808rbld9i8f1kf0205al8qq";
   };
 
-  patches = [
-    (fetchpatch {
-      name = "fix-assertions.patch";
-      url = https://github.com/atztogo/spglib/commit/d57070831585a6f02dec0a31d25b375ba347798c.patch;
-      stripLen = 1;
-      sha256 = "0crmkc498rbrawiy9zbl39qis2nmsbfr4s6kk6k3zhdy8z2ppxw7";
-    })
-  ];
-
   propagatedBuildInputs = [ numpy ];
 
   checkInputs = [ nose pyyaml ];
diff --git a/pkgs/development/python-modules/sshtunnel/default.nix b/pkgs/development/python-modules/sshtunnel/default.nix
new file mode 100644
index 00000000000..ff9d77bc782
--- /dev/null
+++ b/pkgs/development/python-modules/sshtunnel/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi
+, paramiko
+, pytest
+, mock
+}:
+
+buildPythonPackage rec {
+  version = "0.1.5";
+  pname = "sshtunnel";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0jcjppp6mdfsqrbfc3ddfxg1ybgvkjv7ri7azwv3j778m36zs4y8";
+  };
+
+  propagatedBuildInputs = [ paramiko ];
+
+  checkInputs = [ pytest mock ];
+
+  # disable impure tests
+  checkPhase = ''
+    pytest -k 'not connect_via_proxy and not read_ssh_config'
+  '';
+
+  meta = with lib; {
+    description = "Pure python SSH tunnels";
+    homepage = "https://github.com/pahaz/sshtunnel";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/python-modules/tables/3.5.nix b/pkgs/development/python-modules/tables/3.5.nix
index b27584d25d0..4cca72aa313 100644
--- a/pkgs/development/python-modules/tables/3.5.nix
+++ b/pkgs/development/python-modules/tables/3.5.nix
@@ -4,12 +4,12 @@
 with stdenv.lib;
 
 buildPythonPackage rec {
-  version = "3.6.1";
+  version = "3.5.2";
   pname = "tables";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "49a972b8a7c27a8a173aeb05f67acb45fe608b64cd8e9fa667c0962a60b71b49";
+    sha256 = "1hikrki0hx94ass31pn0jyz9iy0zhnkjacfk86m21cxsc8if685j";
   };
 
   buildInputs = [ hdf5 cython bzip2 lzo c-blosc ];
diff --git a/pkgs/development/python-modules/tensorflow-tensorboard/default.nix b/pkgs/development/python-modules/tensorflow-tensorboard/default.nix
index baefd635566..e0108aed5ef 100644
--- a/pkgs/development/python-modules/tensorflow-tensorboard/default.nix
+++ b/pkgs/development/python-modules/tensorflow-tensorboard/default.nix
@@ -1,5 +1,6 @@
-{ stdenv, lib, fetchPypi, buildPythonPackage, isPy3k
+{ lib, fetchPypi, buildPythonPackage, isPy3k
 , numpy
+, wheel
 , werkzeug
 , protobuf
 , grpcio
@@ -34,10 +35,29 @@ buildPythonPackage rec {
     werkzeug
     protobuf
     markdown
-    grpcio absl-py
+    grpcio
+    absl-py
+    # not declared in install_requires, but used at runtime
+    # https://github.com/NixOS/nixpkgs/issues/73840
+    wheel
   ] ++ lib.optional (!isPy3k) futures;
 
-  meta = with stdenv.lib; {
+  # in the absence of a real test suite, run cli and imports
+  checkPhase = ''
+    $out/bin/tensorboard --help > /dev/null
+  '';
+
+  pythonImportsCheck = [
+    "tensorboard"
+    "tensorboard.backend"
+    "tensorboard.compat"
+    "tensorboard.data"
+    "tensorboard.plugins"
+    "tensorboard.summary"
+    "tensorboard.util"
+  ];
+
+  meta = with lib; {
     description = "TensorFlow's Visualization Toolkit";
     homepage = http://tensorflow.org;
     license = licenses.asl20;
diff --git a/pkgs/development/python-modules/twine/default.nix b/pkgs/development/python-modules/twine/default.nix
index a84ab273a4b..92288b6c774 100644
--- a/pkgs/development/python-modules/twine/default.nix
+++ b/pkgs/development/python-modules/twine/default.nix
@@ -1,6 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, pythonOlder
 , pkginfo
 , requests
 , requests_toolbelt
@@ -12,6 +13,7 @@
 buildPythonPackage rec {
   pname = "twine";
   version = "2.0.0";
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
diff --git a/pkgs/development/python-modules/vsts-cd-manager/default.nix b/pkgs/development/python-modules/vsts-cd-manager/default.nix
new file mode 100644
index 00000000000..5946fec05b7
--- /dev/null
+++ b/pkgs/development/python-modules/vsts-cd-manager/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildPythonPackage, fetchPypi, isPy27
+, msrest
+, mock
+}:
+
+buildPythonPackage rec {
+  version = "1.0.2";
+  pname = "vsts-cd-manager";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0ys4hrmjbxl4qr26qr3dhhs27yfwn1635vwjdqh1qgjmrmcr1c0b";
+  };
+
+  propagatedBuildInputs = [ msrest mock ];
+
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "vsts_cd_manager" ];
+
+  meta = with lib; {
+    description = "Microsoft Azure API Management Client Library for Python";
+    homepage = "https://github.com/Azure/azure-sdk-for-python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/development/tools/build-managers/bloop/default.nix b/pkgs/development/tools/build-managers/bloop/default.nix
index 23ffe286824..ce656d4d78f 100644
--- a/pkgs/development/tools/build-managers/bloop/default.nix
+++ b/pkgs/development/tools/build-managers/bloop/default.nix
@@ -2,15 +2,15 @@
 
 let
   baseName = "bloop";
-  version = "1.3.2";
-  nailgunCommit = "9327a60a"; # Fetched from https://github.com/scalacenter/bloop/releases/download/v${version}/install.py
+  version = "1.3.4";
+  nailgunCommit = "d7ed5db"; # Fetched from https://github.com/scalacenter/bloop/releases/download/v${version}/install.py
 
   client = stdenv.mkDerivation {
     name = "${baseName}-client-${version}";
 
     src = fetchurl {
       url = "https://raw.githubusercontent.com/scalacenter/nailgun/${nailgunCommit}/pynailgun/ng.py";
-      sha256 = "0z4as5ibmzkd145wsch9caiy4037bgg780gcf7pyns0cv9n955b4";
+      sha256 = "0lrj25m0nvphz2i5mqjwccpyrd7gn8a5k22k5khrpdh6ldxqis8a";
     };
 
     phases = [ "installPhase" ];
@@ -33,7 +33,7 @@ let
     '';
     outputHashMode = "recursive";
     outputHashAlgo = "sha256";
-    outputHash     = "0k9zc9q793fkfwcssbkmzb0nxmgb99rwi0pjkqhvf719vmgvhc2a";
+    outputHash     = "1z33ip6hgfwiixm2gimz819p5cnxn1fmxb3ryyf77jzwsx7py718";
   };
 
   zsh = stdenv.mkDerivation {
diff --git a/pkgs/development/tools/clj-kondo/default.nix b/pkgs/development/tools/clj-kondo/default.nix
index f821ac32fc4..223da64603b 100644
--- a/pkgs/development/tools/clj-kondo/default.nix
+++ b/pkgs/development/tools/clj-kondo/default.nix
@@ -2,7 +2,7 @@
 
 stdenv.mkDerivation rec{
   pname = "clj-kondo";
-  version = "2019.11.03";
+  version = "2019.11.07";
 
   reflectionJson = fetchurl {
     name = "reflection.json";
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec{
 
   src = fetchurl {
     url = "https://github.com/borkdude/${pname}/releases/download/v${version}/${pname}-${version}-standalone.jar";
-    sha256 = "1chvdfczlxyy1jspyf4yv1kmgz6fq4fih5qvfarvcyw7nlxlj2np";
+    sha256 = "145cdpcdzh2v77kvg8a0qqac9ra7vdcf9hj71vy5w7fck08yf192";
   };
 
   dontUnpack = true;
diff --git a/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix b/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix
index 8bac62b07c1..c264e528c8d 100644
--- a/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix
+++ b/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix
@@ -1,16 +1,16 @@
 { lib, buildGoPackage, fetchFromGitLab, fetchurl }:
 
 let
-  version = "12.4.1";
+  version = "12.5.0";
   # Gitlab runner embeds some docker images these are prebuilt for arm and x86_64
   docker_x86_64 = fetchurl {
     url = "https://gitlab-runner-downloads.s3.amazonaws.com/v${version}/helper-images/prebuilt-x86_64.tar.xz";
-    sha256 = "0y68x5hl2gip7bpcgjychf5qd1535ry4qkjb3fybm2pb81qy2gy7";
+    sha256 = "1g4cgcn33zglk3az0pn81vsnq5b2csclxlx6hbp0l546lqjfw30d";
   };
 
   docker_arm = fetchurl {
     url = "https://gitlab-runner-downloads.s3.amazonaws.com/v${version}/helper-images/prebuilt-arm.tar.xz";
-    sha256 = "1nb0cspjqasyg7bppyrf3m3rg1c26iaw6h9dpnq2m7f60dciyiq2";
+    sha256 = "0v13b4likwx1szbzbj3cf9yvkc9rbn8760agrf1bxik0immhhhq4";
   };
 in
 buildGoPackage rec {
@@ -29,7 +29,7 @@ buildGoPackage rec {
     owner = "gitlab-org";
     repo = "gitlab-runner";
     rev = "v${version}";
-    sha256 = "1smn7b1dvqvaka23a7zhnlnpbqw40hpdn8vvj1r3ivx20khpsnhn";
+    sha256 = "0qlvm0ixwbkbqh73gbhvzhkaswwv1jcmqa79mazxwphxcki04m96";
   };
 
   patches = [ ./fix-shell-path.patch ];
diff --git a/pkgs/development/tools/continuous-integration/jenkins/default.nix b/pkgs/development/tools/continuous-integration/jenkins/default.nix
index 28314934b11..0efe141d7bf 100644
--- a/pkgs/development/tools/continuous-integration/jenkins/default.nix
+++ b/pkgs/development/tools/continuous-integration/jenkins/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "jenkins";
-  version = "2.190.2";
+  version = "2.190.3";
 
   src = fetchurl {
     url = "http://mirrors.jenkins.io/war-stable/${version}/jenkins.war";
-    sha256 = "09zij2gpg1i0pkx1nsgccc26p8z4gy4ljhch8m767xaa0000lqj7";
+    sha256 = "146lg8xvg38glqn00kp20gx0bm5f9vv7fn3sy6fdqwdd60mh9hkr";
   };
 
   buildCommand = ''
diff --git a/pkgs/development/tools/cue/default.nix b/pkgs/development/tools/cue/default.nix
index 754c014ee16..2046ea90fd1 100644
--- a/pkgs/development/tools/cue/default.nix
+++ b/pkgs/development/tools/cue/default.nix
@@ -2,15 +2,15 @@
 
 buildGoModule rec {
   pname = "cue";
-  version = "0.0.11";
+  version = "0.0.14";
 
   src = fetchgit {
     url = "https://cue.googlesource.com/cue";
     rev = "v${version}";
-    sha256 = "146h3nxx72n3byxr854lnxj7m33ipbmg6j9dy6dlwvqpa7rndrmp";
+    sha256 = "1gbw377wm41bhn9pw0l5l7v6g5s9jw1p2jammflac7hgwdrxkb64";
   };
 
-  modSha256 = "1q0fjm34mbijjxg089v5330vc820nrvwdkhm02zi45rk2fpdgdqd";
+  modSha256 = "04dapx75zwi8cv1pj3c6266znrhwihv3df4izm3gjk34r2i07q6s";
 
   subPackages = [ "cmd/cue" ];
 
@@ -19,8 +19,8 @@ buildGoModule rec {
   ];
 
   meta = {
-    description = "A data constraint language which aims to simplify tasks involving defining and using data.";
-    homepage = https://cue.googlesource.com/cue;
+    description = "A data constraint language which aims to simplify tasks involving defining and using data";
+    homepage = "https://cuelang.org/";
     maintainers = with stdenv.lib.maintainers; [ solson ];
     license = stdenv.lib.licenses.asl20;
   };
diff --git a/pkgs/development/tools/documentation/mkdocs/default.nix b/pkgs/development/tools/documentation/mkdocs/default.nix
index 5f3dff95e35..e9e116280a0 100644
--- a/pkgs/development/tools/documentation/mkdocs/default.nix
+++ b/pkgs/development/tools/documentation/mkdocs/default.nix
@@ -1,4 +1,4 @@
-{ lib, python, fetchFromGitHub }:
+{ stdenv, lib, python, fetchFromGitHub }:
 
 with python.pkgs;
 
@@ -35,9 +35,18 @@ buildPythonApplication rec {
     backports_tempfile
   ];
 
-  meta = {
+  meta = with stdenv.lib; {
+    description = "Project documentation with Markdown / static website generator";
+    longDescription = ''
+      MkDocs is a fast, simple and downright gorgeous static site generator that's
+      geared towards building project documentation. Documentation source files
+      are written in Markdown, and configured with a single YAML configuration file.
+      
+      MkDocs can also be used to generate general-purpose Websites.
+    '';
     homepage = http://mkdocs.org/;
-    description = "Project documentation with Markdown";
     license = lib.licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.rkoe ];
   };
 }
diff --git a/pkgs/development/tools/gamecube-tools/default.nix b/pkgs/development/tools/gamecube-tools/default.nix
index 872c8fae527..7c31f691b4e 100644
--- a/pkgs/development/tools/gamecube-tools/default.nix
+++ b/pkgs/development/tools/gamecube-tools/default.nix
@@ -1,21 +1,20 @@
-{ stdenv, which, autoconf, automake, fetchFromGitHub,
-  libtool, freeimage, mesa }:
+{ stdenv, fetchFromGitHub, autoreconfHook
+, freeimage, libGL }:
+
 stdenv.mkDerivation rec {
-  version = "v1.0.2";
+  version = "1.0.2";
   pname = "gamecube-tools";
 
-  nativeBuildInputs = [ which autoconf automake libtool ];
-  buildInputs = [ freeimage mesa ];
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ freeimage libGL ];
 
   src = fetchFromGitHub {
     owner = "devkitPro";
     repo  = "gamecube-tools";
-    rev = version;
+    rev = "v${version}";
     sha256 = "0zvpkzqvl8iv4ndzhkjkmrzpampyzgb91spv0h2x2arl8zy4z7ca";
   };
 
-  preConfigure = "./autogen.sh";
-
   meta = with stdenv.lib; {
     description = "Tools for gamecube/wii projects";
     homepage = "https://github.com/devkitPro/gamecube-tools/";
diff --git a/pkgs/development/tools/git-series/default.nix b/pkgs/development/tools/git-series/default.nix
index d2bc539860b..7e126b3d112 100644
--- a/pkgs/development/tools/git-series/default.nix
+++ b/pkgs/development/tools/git-series/default.nix
@@ -1,4 +1,6 @@
-{ stdenv, fetchFromGitHub, fetchpatch, rustPlatform, openssl, cmake, perl, pkgconfig, zlib, curl, libgit2 }:
+{ stdenv, fetchFromGitHub, fetchpatch, rustPlatform
+, openssl, cmake, perl, pkgconfig, zlib, curl, libgit2, libssh2
+}:
 
 with rustPlatform;
 
@@ -28,8 +30,9 @@ buildRustPackage rec {
   ];
 
   LIBGIT2_SYS_USE_PKG_CONFIG = true;
+  LIBSSH2_SYS_USE_PKG_CONFIG = true;
   nativeBuildInputs = [ cmake pkgconfig perl ];
-  buildInputs = [ openssl zlib curl libgit2 ];
+  buildInputs = [ openssl zlib curl libgit2 libssh2 ];
 
   postBuild = ''
     install -D "$src/git-series.1" "$out/man/man1/git-series.1"
diff --git a/pkgs/development/tools/gotools/default.nix b/pkgs/development/tools/gotools/default.nix
index 4c662f9b5c0..59416f03134 100644
--- a/pkgs/development/tools/gotools/default.nix
+++ b/pkgs/development/tools/gotools/default.nix
@@ -2,13 +2,13 @@
 
 buildGoModule rec {
   pname = "gotools-unstable";
-  version = "2019-09-05";
-  rev = "6b3d1c9ba8bf7ce410f6b490852ec54953383362";
+  version = "2019-11-14";
+  rev = "4191b8cbba092238a318a71cdff48b20b4e1e5d8";
 
   src = fetchgit {
     inherit rev;
     url = "https://go.googlesource.com/tools";
-    sha256 = "0a2xjx9hqkash7fd2qv9hd93wcqdbfrmsdzjd91dwvnk48j61daf";
+    sha256 = "16m62m303j4wqfjr1401xpqpb9m11bs6qc2dhf6x2za2d9pycish";
   };
 
   # Build of golang.org/x/tools/gopls fails with:
diff --git a/pkgs/development/tools/misc/texlab/default.nix b/pkgs/development/tools/misc/texlab/default.nix
index f55f1154b07..e11c288c1e9 100644
--- a/pkgs/development/tools/misc/texlab/default.nix
+++ b/pkgs/development/tools/misc/texlab/default.nix
@@ -8,16 +8,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "texlab";
-  version = "1.6.0";
+  version = "1.7.0";
 
   src = fetchFromGitHub {
     owner = "latex-lsp";
     repo = pname;
     rev = "v${version}";
-    sha256 = "115f63fij0lxcccf7ba9p0lzg1hlfp9i2g7gvvnx0il426h4ynnm";
+    sha256 = "0b9lw6cmh7gyzj0pb3ghvqc3q7lzl12bfg9pjhl31lib3mmga8yb";
   };
 
-  cargoSha256 = "0cp8q3qags01s6v3kbghxyzz1hc5rhq6jf15fzz10d1l8mrmw4cy";
+  cargoSha256 = "0qnysl0ayc242dgvanqgmx8v4a2cjg0f1lhbyw16qjv61qcsx8y5";
 
   nativeBuildInputs = [ nodejs ];
 
diff --git a/pkgs/development/tools/misc/travis/Gemfile b/pkgs/development/tools/misc/travis/Gemfile
index 0a470854aaf..3da9975913e 100644
--- a/pkgs/development/tools/misc/travis/Gemfile
+++ b/pkgs/development/tools/misc/travis/Gemfile
@@ -1,3 +1,4 @@
 source "https://rubygems.org"
 
-gem "travis", "1.8.10"
+gem "travis"
+gem "pry", "~> 0.11.0"
diff --git a/pkgs/development/tools/misc/travis/Gemfile.lock b/pkgs/development/tools/misc/travis/Gemfile.lock
index c5ac09cb9e6..a29f329ca8a 100644
--- a/pkgs/development/tools/misc/travis/Gemfile.lock
+++ b/pkgs/development/tools/misc/travis/Gemfile.lock
@@ -3,13 +3,14 @@ GEM
   specs:
     addressable (2.4.0)
     backports (3.15.0)
+    coderay (1.1.2)
     ethon (0.12.0)
       ffi (>= 1.3.0)
-    faraday (0.15.4)
+    faraday (0.17.0)
       multipart-post (>= 1.2, < 3)
     faraday_middleware (0.13.1)
       faraday (>= 0.7.4, < 1.0)
-    ffi (1.11.1)
+    ffi (1.11.2)
     gh (0.15.1)
       addressable (~> 2.4.0)
       backports
@@ -21,10 +22,14 @@ GEM
     json (2.2.0)
     launchy (2.4.3)
       addressable (~> 2.3)
-    multi_json (1.13.1)
+    method_source (0.9.2)
+    multi_json (1.14.1)
     multipart-post (2.1.1)
     net-http-persistent (2.9.4)
     net-http-pipeline (1.0.1)
+    pry (0.11.3)
+      coderay (~> 1.1.0)
+      method_source (~> 0.9.0)
     pusher-client (0.6.2)
       json
       websocket (~> 1.0)
@@ -45,7 +50,8 @@ PLATFORMS
   ruby
 
 DEPENDENCIES
-  travis (= 1.8.10)
+  pry (~> 0.11.0)
+  travis
 
 BUNDLED WITH
    1.17.2
diff --git a/pkgs/development/tools/misc/travis/gemset.nix b/pkgs/development/tools/misc/travis/gemset.nix
index 09d5d41454e..a12a891b3e7 100644
--- a/pkgs/development/tools/misc/travis/gemset.nix
+++ b/pkgs/development/tools/misc/travis/gemset.nix
@@ -15,6 +15,16 @@
     };
     version = "3.15.0";
   };
+  coderay = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y";
+      type = "gem";
+    };
+    version = "1.1.2";
+  };
   ethon = {
     dependencies = ["ffi"];
     source = {
@@ -26,12 +36,14 @@
   };
   faraday = {
     dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0s72m05jvzc1pd6cw1i289chas399q0a14xrwg4rvkdwy7bgzrh0";
+      sha256 = "0jk2bar4x6miq2cr73lv0lsbmw4cymiljvp29xb85jifsb3ba6az";
       type = "gem";
     };
-    version = "0.15.4";
+    version = "0.17.0";
   };
   faraday_middleware = {
     dependencies = ["faraday"];
@@ -43,12 +55,14 @@
     version = "0.13.1";
   };
   ffi = {
+    groups = ["default"];
+    platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "06mvxpjply8qh4j3fj9wh08kdzwkbnvsiysh0vrhlk5cwxzjmblh";
+      sha256 = "0cbads5da12lb3j0mg2hjrd57s5qkkairxh2y6r9bqyblb5b8xbw";
       type = "gem";
     };
-    version = "1.11.1";
+    version = "1.11.2";
   };
   gh = {
     dependencies = ["addressable" "backports" "faraday" "multi_json" "net-http-persistent" "net-http-pipeline"];
@@ -84,13 +98,25 @@
     };
     version = "2.4.3";
   };
+  method_source = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq";
+      type = "gem";
+    };
+    version = "0.9.2";
+  };
   multi_json = {
+    groups = ["default"];
+    platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
+      sha256 = "0xy54mjf7xg41l8qrg1bqri75agdqmxap9z466fjismc1rn2jwfr";
       type = "gem";
     };
-    version = "1.13.1";
+    version = "1.14.1";
   };
   multipart-post = {
     source = {
@@ -116,6 +142,17 @@
     };
     version = "1.0.1";
   };
+  pry = {
+    dependencies = ["coderay" "method_source"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mh312k3y94sj0pi160wpia0ps8f4kmzvm505i6bvwynfdh7v30g";
+      type = "gem";
+    };
+    version = "0.11.3";
+  };
   pusher-client = {
     dependencies = ["json" "websocket"];
     source = {
@@ -151,4 +188,4 @@
     };
     version = "1.2.8";
   };
-}
+}
\ No newline at end of file
diff --git a/pkgs/development/tools/rust/cargo-make/Cargo.lock b/pkgs/development/tools/rust/cargo-make/Cargo.lock
index e4c01baff9f..54d32639f88 100644
--- a/pkgs/development/tools/rust/cargo-make/Cargo.lock
+++ b/pkgs/development/tools/rust/cargo-make/Cargo.lock
@@ -107,13 +107,13 @@ dependencies = [
 
 [[package]]
 name = "cargo-make"
-version = "0.23.0"
+version = "0.24.0"
 dependencies = [
  "ci_info 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "colored 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "envmnt 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "envmnt 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "fern 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "indexmap 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -153,7 +153,7 @@ name = "ci_info"
 version = "0.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "envmnt 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "envmnt 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -223,7 +223,7 @@ dependencies = [
 
 [[package]]
 name = "envmnt"
-version = "0.7.0"
+version = "0.7.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "indexmap 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -669,7 +669,7 @@ dependencies = [
 "checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6"
 "checksum dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3"
 "checksum dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b"
-"checksum envmnt 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7760c979bc8a1f3319ee72ee71df5eaaf02ada9daaa80ae257011cab0f3a25ef"
+"checksum envmnt 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "24c6fdfb01bf7386076c5f655278306bbbed4ecc8abe30981217a11079fe3f2b"
 "checksum failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9"
 "checksum failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08"
 "checksum fern 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)" = "29d26fa0f4d433d1956746e66ec10d6bf4d6c8b93cd39965cceea7f7cc78c7dd"
diff --git a/pkgs/development/tools/rust/cargo-make/default.nix b/pkgs/development/tools/rust/cargo-make/default.nix
index 0685c11ddfa..795329e3fe9 100644
--- a/pkgs/development/tools/rust/cargo-make/default.nix
+++ b/pkgs/development/tools/rust/cargo-make/default.nix
@@ -2,7 +2,7 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "cargo-make";
-  version = "0.23.0";
+  version = "0.24.0";
 
   src =
     let
@@ -10,7 +10,7 @@ rustPlatform.buildRustPackage rec {
         owner = "sagiegurari";
         repo = pname;
         rev = version;
-        sha256 = "1g62k0g9b5m8jaxxkbx0d59k8yb3di59l3p9m32hx617rn4k5wjd";
+        sha256 = "1sdc9qkclvv99j7ag038g8h1kjvfjxxj16xy0cqn8wvyljrqn3mc";
       };
     in
     runCommand "cargo-make-src" {} ''
@@ -21,7 +21,7 @@ rustPlatform.buildRustPackage rec {
 
   buildInputs = stdenv.lib.optionals stdenv.isDarwin [ Security ];
 
-  cargoSha256 = "1mfsjxvyybq9d5702habxq5abcp9h11qx0ci2rqs2rgkbcnksk98";
+  cargoSha256 = "1hyc275drl5n0kcvkxd3blp77r8nck946bmlnnzym8cj50i5zbq1";
 
   # Some tests fail because they need network access.
   # However, Travis ensures a proper build.
diff --git a/pkgs/development/tools/rust/cargo-watch/default.nix b/pkgs/development/tools/rust/cargo-watch/default.nix
index 9f8577dc19d..55721df22d7 100644
--- a/pkgs/development/tools/rust/cargo-watch/default.nix
+++ b/pkgs/development/tools/rust/cargo-watch/default.nix
@@ -2,16 +2,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "cargo-watch";
-  version = "7.2.2";
+  version = "7.3.0";
 
   src = fetchFromGitHub {
     owner = "passcod";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1ld45xqmmi13x1wgwm9fa7sck2jiw34pr9xzdwrx5ygl81hf3plv";
+    sha256 = "0l1aalb8ans7scljrza7akhi821jbpqgn6sa8kgd8sys83r93fkj";
   };
 
-  cargoSha256 = "1g8qg7nicdan0w39rfzin573lgx3sbfr3b9hn8k3vgyq0jg6ywh7";
+  cargoSha256 = "0dlbln8nsvmrc9p99bl6yni57fravicias9gbv88fg7az904ilzz";
 
   buildInputs = lib.optional stdenv.isDarwin CoreServices;
 
diff --git a/pkgs/development/tools/yarn2nix-moretea/fetch-source.nix b/pkgs/development/tools/yarn2nix-moretea/fetch-source.nix
index b15b40c4a04..fc9b149887a 100644
--- a/pkgs/development/tools/yarn2nix-moretea/fetch-source.nix
+++ b/pkgs/development/tools/yarn2nix-moretea/fetch-source.nix
@@ -5,6 +5,6 @@
 fetchFromGitHub {
   owner  = "moretea";
   repo   = "yarn2nix";
-  rev    = "3f2dbb08724bf8841609f932bfe1d61a78277232";
-  sha256 = "142av7dwviapsnahgj8r6779gs2zr17achzhr8b97s0hsl08dcl2";
+  rev    = "9e7279edde2a4e0f5ec04c53f5cd64440a27a1ae";
+  sha256 = "0zz2lrwn3y3rb8gzaiwxgz02dvy3s552zc70zvfqc0zh5dhydgn7";
 }
diff --git a/pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix b/pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix
index f5989390c4b..22032e145d3 100644
--- a/pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix
+++ b/pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix
@@ -238,7 +238,7 @@ in rec {
       package = lib.importJSON packageJSON;
       pname = package.name;
       safeName = reformatPackageName pname;
-      version = package.version;
+      version = package.version or attrs.version;
       baseName = unlessNull name "${safeName}-${version}";
 
       workspaceDependenciesTransitive = lib.unique (
@@ -389,6 +389,11 @@ in rec {
     # yarn2nix is the only package that requires the yarnNix option.
     # All the other projects can auto-generate that file.
     yarnNix = ./yarn.nix;
+    
+    # Using the filter above and importing package.json from the filtered
+    # source results in an error in restricted mode. To circumvent this,
+    # we import package.json from the unfiltered source
+    packageJSON = ./package.json;
 
     yarnFlags = defaultYarnFlags ++ ["--production=true"];
 
diff --git a/pkgs/development/web/nodejs/v13.nix b/pkgs/development/web/nodejs/v13.nix
index 6b6e4f438b8..ee5d384f200 100644
--- a/pkgs/development/web/nodejs/v13.nix
+++ b/pkgs/development/web/nodejs/v13.nix
@@ -5,8 +5,8 @@ let
 in
   buildNodejs {
     inherit enableNpm;
-    version = "13.1.0";
-    sha256 = "0s6b2k7i89j9mxwyz271fvm6bf8jcz2v5kzmn0v5icrkpmn0ab6l";
+    version = "13.2.0";
+    sha256 = "0r0bbwnp77njhdmby7cs2g6yxfprri684s8h3gqq95ks7vgwgvhx";
 
     patches = stdenv.lib.optionals stdenv.isDarwin [ ./disable-libatomic-darwin.patch ];
   }
diff --git a/pkgs/games/boohu/default.nix b/pkgs/games/boohu/default.nix
index e658ef9f5cb..3dcfe201d2c 100644
--- a/pkgs/games/boohu/default.nix
+++ b/pkgs/games/boohu/default.nix
@@ -3,13 +3,13 @@
 buildGoPackage rec {
 
   pname = "boohu";
-  version = "0.12.0";
+  version = "0.13.0";
 
   goPackagePath = "git.tuxfamily.org/boohu/boohu.git";
 
   src = fetchurl {
     url = "https://download.tuxfamily.org/boohu/downloads/${pname}-${version}.tar.gz";
-    sha256 = "0nf3xj3lda8279cqvjv5c3vpsb7d2kynwwna5yrsy7gq8c9n4rh8";
+    sha256 = "0q89yv4klldjpli6y9xpyr6k8nsn7qa68gp90vb3dgxynn91sh68";
   };
 
   goDeps = ./deps.nix;
diff --git a/pkgs/games/boohu/deps.nix b/pkgs/games/boohu/deps.nix
index a785567addd..c2dc3b41b97 100644
--- a/pkgs/games/boohu/deps.nix
+++ b/pkgs/games/boohu/deps.nix
@@ -4,8 +4,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/nsf/termbox-go";
-      rev = "288510b9734e30e7966ec2f22b87c5f8e67345e3";
-      sha256 = "0hdyisfaf8yb55h3p03p4sbq19546mp9fy28f2kn659mycmhxqk4";
+      rev = "93860e16131719fa9722e7c448dbf8c0e3210a0d";
+      sha256 = "03hz060cy8qrl4kgr80pbq6xvr38z4c6ghr3y81i8g854rvp6426";
     };
   }
   {
@@ -13,8 +13,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/mattn/go-runewidth";
-      rev = "703b5e6b11ae25aeb2af9ebb5d5fdf8fa2575211";
-      sha256 = "0znpyz71gajx3g0j2zp63nhjj2c07g16885vxv4ykwnrfmzbgk4w";
+      rev = "f93a0d58d5fd95e53f82782d07bb0c79d23e1290";
+      sha256 = "1sq97q71vgwnbg1fphsmqrzkbfn6mjal6d8a3qgwv4nbgppwaz25";
     };
   }
 ]
diff --git a/pkgs/games/construo/default.nix b/pkgs/games/construo/default.nix
index bbd11a26046..5c74b596279 100644
--- a/pkgs/games/construo/default.nix
+++ b/pkgs/games/construo/default.nix
@@ -1,4 +1,12 @@
-{ stdenv, fetchurl, libX11, zlib, xorgproto, libGL, libGLU, freeglut ? null }:
+{ stdenv
+, fetchurl
+, libX11
+, zlib
+, xorgproto
+, libGL ? null
+, libGLU ? null
+, freeglut ? null
+}:
 
 stdenv.mkDerivation rec {
   pname = "construo";
@@ -9,7 +17,9 @@ stdenv.mkDerivation rec {
     sha256 = "1wmj527hbj1qv44cdsj6ahfjrnrjwg2dp8gdick8nd07vm062qxa";
   };
 
-  buildInputs = [ libX11 zlib xorgproto libGL libGLU ]
+  buildInputs = [ libX11 zlib xorgproto ]
+    ++ stdenv.lib.optional (libGL != null) libGL
+    ++ stdenv.lib.optional (libGLU != null) libGLU
     ++ stdenv.lib.optional (freeglut != null) freeglut;
 
   preConfigure = ''
diff --git a/pkgs/games/gzdoom/default.nix b/pkgs/games/gzdoom/default.nix
index 7eab9626877..34819f90f52 100644
--- a/pkgs/games/gzdoom/default.nix
+++ b/pkgs/games/gzdoom/default.nix
@@ -4,13 +4,13 @@
 
 stdenv.mkDerivation rec {
   pname = "gzdoom";
-  version = "4.2.3";
+  version = "4.2.4";
 
   src = fetchFromGitHub {
     owner = "coelckers";
     repo = "gzdoom";
     rev = "g${version}";
-    sha256 = "06fy4ksn1n745y86s6rlnamkfyqi0894aznf6s56ff6hz2pngsfc";
+    sha256 = "1mkfpa3mx1rpd6lywdcqcf0y9ydzr1jxpk330kl9lxw59xihk0pc";
   };
 
   nativeBuildInputs = [ cmake makeWrapper ];
diff --git a/pkgs/games/steam/chrootenv.nix b/pkgs/games/steam/chrootenv.nix
index 3be1f522974..426be1f214a 100644
--- a/pkgs/games/steam/chrootenv.nix
+++ b/pkgs/games/steam/chrootenv.nix
@@ -86,14 +86,14 @@ in buildFHSUserEnv rec {
     xorg.xkeyboardconfig
     xorg.libpciaccess
     ## screeps dependencies
-    gnome3.gtk
+    gtk3
     dbus
     zlib
     glib
     atk
     cairo
     freetype
-    gdk_pixbuf
+    gdk-pixbuf
     pango
     fontconfig
   ] ++ (if (!nativeOnly) then [
diff --git a/pkgs/misc/cups/drivers/canon/default.nix b/pkgs/misc/cups/drivers/canon/default.nix
index b6219e1c749..adc4ead94b7 100644
--- a/pkgs/misc/cups/drivers/canon/default.nix
+++ b/pkgs/misc/cups/drivers/canon/default.nix
@@ -1,49 +1,55 @@
-{stdenv, fetchurl, unzip, autoreconfHook, libtool, makeWrapper, cups, ghostscript, pkgsi686Linux }:
+{stdenv, fetchurl, unzip, autoreconfHook, libtool, makeWrapper, cups, ghostscript, pkgsi686Linux, zlib }:
 
 let
 
   i686_NIX_GCC = pkgsi686Linux.callPackage ({gcc}: gcc) {};
   i686_libxml2 = pkgsi686Linux.callPackage ({libxml2}: libxml2) {};
 
+  commonVer = "4.10";
+  version = "3.70";
+  dl = "8/0100007658/08";
+
+  versionNoDots = builtins.replaceStrings ["."] [""] version;
   src_canon = fetchurl {
-    url = "https://files.canon-europe.com/files/soft45378/software/o147jen_linuxufrII_0290.zip";
-    sha256 = "1qpdmaaw42gm5fi21rp4lf05skffkq42ka5c8xkw8rckzb13sy9j";
+    url = "http://gdlp01.c-wss.com/gds/${dl}/linux-UFRII-drv-v${versionNoDots}-uken-05.tar.gz";
+    sha256 = "0424lvyrsvsb94qga4p4ldis7f714c5yw5ydv3f84mdl2a7papg0";
   };
 
 in
 
 
 stdenv.mkDerivation {
-  name = "canon-cups-ufr2-2.90";
+  pname = "canon-cups-ufr2";
+  version = version;
   src = src_canon;
 
   phases = [ "unpackPhase" "installPhase" ];
 
   postUnpack = ''
-    (cd $sourceRoot; tar -xzf Sources/cndrvcups-common-2.90-1.tar.gz)
-    (cd $sourceRoot; tar -xzf Sources/cndrvcups-lb-2.90-1.tar.gz)
+    (cd $sourceRoot; tar -xzf Sources/cndrvcups-common-${commonVer}-1.tar.gz)
+    (cd $sourceRoot; tar -xzf Sources/cndrvcups-lb-${version}-1.tar.gz)
   '';
 
   nativeBuildInputs = [ makeWrapper unzip autoreconfHook libtool ];
 
-  buildInputs = [ cups ];
+  buildInputs = [ cups zlib ];
 
   installPhase = ''
     ##
     ## cndrvcups-common buildPhase
     ##
-    ( cd cndrvcups-common-2.90/buftool
+    ( cd cndrvcups-common-${commonVer}/buftool
       autoreconf -fi
       ./autogen.sh --prefix=$out --enable-progpath=$out/bin --libdir=$out/lib --disable-shared --enable-static
       make
     )
 
-    ( cd cndrvcups-common-2.90/backend
+    ( cd cndrvcups-common-${commonVer}/backend
       ./autogen.sh --prefix=$out --libdir=$out/lib
       make
     )
 
-    ( cd cndrvcups-common-2.90/c3plmod_ipc
+    ( cd cndrvcups-common-${commonVer}/c3plmod_ipc
       make
     )
 
@@ -51,19 +57,19 @@ stdenv.mkDerivation {
     ## cndrvcups-common installPhase
     ##
 
-    ( cd cndrvcups-common-2.90/buftool
+    ( cd cndrvcups-common-${commonVer}/buftool
       make install
     )
 
-    ( cd cndrvcups-common-2.90/backend
+    ( cd cndrvcups-common-${commonVer}/backend
       make install
     )
 
-    ( cd cndrvcups-common-2.90/c3plmod_ipc
+    ( cd cndrvcups-common-${commonVer}/c3plmod_ipc
       make install DESTDIR=$out/lib
     )
 
-    ( cd cndrvcups-common-2.90/libs
+    ( cd cndrvcups-common-${commonVer}/libs
       chmod 755 *
       mkdir -p $out/lib32
       mkdir -p $out/bin
@@ -72,15 +78,22 @@ stdenv.mkDerivation {
       cp libc3pl.so.0.0.1 $out/lib32
       cp libcaepcm.so.1.0 $out/lib32
       cp libColorGear.so.0.0.0 $out/lib32
-      cp libColorGearC.so.0.0.0 $out/lib32
+      cp libColorGearC.so.1.0.0 $out/lib32
       cp libcanon_slim.so.1.0.0 $out/lib32
       cp c3pldrv $out/bin
     )
 
-    (cd cndrvcups-common-2.90/data
+    (cd cndrvcups-common-${commonVer}/Rule
+      mkdir -p $out/share/usb
+      chmod 644 *.usb-quirks $out/share/usb
+    )
+
+    (cd cndrvcups-common-${commonVer}/data
       chmod 644 *.ICC
       mkdir -p $out/share/caepcm
       cp *.ICC $out/share/caepcm
+      cp *.icc $out/share/caepcm
+      cp *.PRF $out/share/caepcm
     )
 
     (cd $out/lib32
@@ -96,8 +109,8 @@ stdenv.mkDerivation {
       ln -sf libcanon_slim.so.1.0.0 libcanon_slim.so
       ln -sf libColorGear.so.0.0.0 libColorGear.so.0
       ln -sf libColorGear.so.0.0.0 libColorGear.so
-      ln -sf libColorGearC.so.0.0.0 libColorGearC.so.0
-      ln -sf libColorGearC.so.0.0.0 libColorGearC.so
+      ln -sf libColorGearC.so.1.0.0 libColorGearC.so.1
+      ln -sf libColorGearC.so.1.0.0 libColorGearC.so
     )
 
     (cd $out/lib
@@ -106,7 +119,7 @@ stdenv.mkDerivation {
     )
 
     patchelf --set-rpath "$(cat ${i686_NIX_GCC}/nix-support/orig-cc)/lib" $out/lib32/libColorGear.so.0.0.0
-    patchelf --set-rpath "$(cat ${i686_NIX_GCC}/nix-support/orig-cc)/lib" $out/lib32/libColorGearC.so.0.0.0
+    patchelf --set-rpath "$(cat ${i686_NIX_GCC}/nix-support/orig-cc)/lib" $out/lib32/libColorGearC.so.1.0.0
 
     patchelf --interpreter "$(cat ${i686_NIX_GCC}/nix-support/dynamic-linker)" --set-rpath "$out/lib32" $out/bin/c3pldrv
 
@@ -127,18 +140,13 @@ stdenv.mkDerivation {
     ## cndrvcups-lb buildPhase
     ##
 
-    ( cd cndrvcups-lb-2.90/ppd
-      ./autogen.sh --prefix=$out
+    ( cd cndrvcups-lb-${version}/buftool
+      ./autogen.sh --prefix=$out --libdir=$out/lib --enable-progpath=$out/bin --enable-static
       make
     )
 
-    ( cd cndrvcups-lb-2.90/pstoufr2cpca
-      CPPFLAGS="-I$out/include" LDFLAGS=" -L$out/lib" ./autogen.sh --prefix=$out --enable-progpath=$out/bin
-      make
-    )
-
-    ( cd cndrvcups-lb-2.90/cpca
-      CPPFLAGS="-I$out/include" LDFLAGS=" -L$out/lib" ./autogen.sh --prefix=$out --enable-progpath=$out/bin  --enable-static
+    ( cd cndrvcups-lb-${version}/pstoufr2cpca
+      ./autogen.sh --prefix=$out --libdir=$out/lib
       make
     )
 
@@ -146,19 +154,11 @@ stdenv.mkDerivation {
     ## cndrvcups-lb installPhase
     ##
 
-    ( cd cndrvcups-lb-2.90/ppd
+    ( cd cndrvcups-lb-${version}/pstoufr2cpca
       make install
     )
 
-    ( cd cndrvcups-lb-2.90/pstoufr2cpca
-      make install
-    )
-
-    ( cd cndrvcups-lb-2.90/cpca
-      make install
-    )
-
-    ( cd cndrvcups-lb-2.90/libs
+    ( cd cndrvcups-lb-${version}/libs
       chmod 755 *
       mkdir -p $out/lib32
       mkdir -p $out/bin
@@ -189,7 +189,7 @@ stdenv.mkDerivation {
       ln -sf libcnlbcm.so.1.0 libcnlbcm.so
     )
 
-    ( cd cndrvcups-lb-2.90
+    ( cd cndrvcups-lb-${version}
       chmod 644 data/CnLB*
       chmod 644 libs/cnpkbidi_info*
       chmod 644 libs/ThLB*
@@ -201,6 +201,9 @@ stdenv.mkDerivation {
       cp libs/ThLB* $out/share/ufr2filter
     )
 
+    mkdir -p $out/share/cups/model
+    install -c -m 644 cndrvcups-lb-${version}/ppd/CN*.ppd $out/share/cups/model/
+
     patchelf --set-rpath "$out/lib32:${i686_libxml2.out}/lib" $out/lib32/libcanonufr2.so.1.0.0
 
     patchelf --interpreter "$(cat ${i686_NIX_GCC}/nix-support/dynamic-linker)" --set-rpath "$out/lib32" $out/bin/cnpkmoduleufr2
@@ -211,9 +214,12 @@ stdenv.mkDerivation {
       --prefix PATH ":" "$out/bin"
     '';
 
-  meta = {
+  meta = with stdenv.lib; {
     description = "CUPS Linux drivers for Canon printers";
     homepage = http://www.canon.com/;
-    license = stdenv.lib.licenses.unfree;
+    license = licenses.unfree;
+    maintainers = with maintainers; [
+      kylesferrazza
+    ];
   };
 }
diff --git a/pkgs/misc/gnash/default.nix b/pkgs/misc/gnash/default.nix
index 287000bf4e3..cfc0c3f7301 100644
--- a/pkgs/misc/gnash/default.nix
+++ b/pkgs/misc/gnash/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, autoreconfHook
+{ stdenv, fetchgit, fetchpatch, autoreconfHook
 , pkgconfig, libtool, boost, SDL
 , glib, pango, gettext, curl, xorg
 , libpng, libjpeg, giflib, speex, atk
@@ -95,6 +95,13 @@ stdenv.mkDerivation {
     ++ optionals enablePlugins   [ xulrunner npapi_sdk ]
     ++ optionals enableGTK       [ gtk2 gnome2.gtkglext gnome2.GConf ];
 
+  patches = [
+    (fetchpatch { # fix compilation due to bad detection of libgif version: https://savannah.gnu.org/patch/index.php?9873
+      url = "https://savannah.gnu.org/patch/download.php?file_id=47859";
+      sha256 = "0aimayzgi5065gkcfcr8d5lkd9c0471q7dqmln42hjzq847n6d5y";
+    })
+  ];
+
   configureFlags = with stdenv.lib; [
     "--with-boost-incl=${boost.dev}/include"
     "--with-boost-lib=${boost.out}/lib"
diff --git a/pkgs/misc/themes/adwaita-qt/default.nix b/pkgs/misc/themes/adwaita-qt/default.nix
index 9b979a11b93..16ccee8540b 100644
--- a/pkgs/misc/themes/adwaita-qt/default.nix
+++ b/pkgs/misc/themes/adwaita-qt/default.nix
@@ -2,13 +2,13 @@
 
 mkDerivation rec {
   pname = "adwaita-qt";
-  version = "1.1.0";
+  version = "1.1.1";
 
   src = fetchFromGitHub {
     owner = "FedoraQt";
     repo = pname;
     rev = version;
-    sha256 = "1jlh4l3sxiwglgx6h4aqi364gr4xipmn09bk88cp997r9sm8jcp9";
+    sha256 = "1z1zl6b1190nffcdyjnwz2xy4s6cvgd98aas9z71l5iddwzy32fm";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/os-specific/linux/kernel/linux-4.14.nix b/pkgs/os-specific/linux/kernel/linux-4.14.nix
index ab15502fb78..738a55129b1 100644
--- a/pkgs/os-specific/linux/kernel/linux-4.14.nix
+++ b/pkgs/os-specific/linux/kernel/linux-4.14.nix
@@ -3,7 +3,7 @@
 with stdenv.lib;
 
 buildLinux (args // rec {
-  version = "4.14.154";
+  version = "4.14.155";
 
   # modDirVersion needs to be x.y.z, will automatically add .0 if needed
   modDirVersion = if (modDirVersionArg == null) then concatStringsSep "." (take 3 (splitVersion "${version}.0")) else modDirVersionArg;
@@ -13,6 +13,6 @@ buildLinux (args // rec {
 
   src = fetchurl {
     url = "mirror://kernel/linux/kernel/v4.x/linux-${version}.tar.xz";
-    sha256 = "00q662s8mgnzqfgk5gkzqfv9ws3vryf28blbq1zxcy4s6wj4mpl6";
+    sha256 = "10g4493ldc398qza304z5yz8qdp93w7a2bs5h5dwk0bbamwikmkp";
   };
 } // (args.argsOverride or {}))
diff --git a/pkgs/os-specific/linux/kernel/linux-4.19.nix b/pkgs/os-specific/linux/kernel/linux-4.19.nix
index 7cc597bef4a..eaf2f7a3ec0 100644
--- a/pkgs/os-specific/linux/kernel/linux-4.19.nix
+++ b/pkgs/os-specific/linux/kernel/linux-4.19.nix
@@ -3,7 +3,7 @@
 with stdenv.lib;
 
 buildLinux (args // rec {
-  version = "4.19.84";
+  version = "4.19.85";
 
   # modDirVersion needs to be x.y.z, will automatically add .0 if needed
   modDirVersion = if (modDirVersionArg == null) then concatStringsSep "." (take 3 (splitVersion "${version}.0")) else modDirVersionArg;
@@ -13,6 +13,6 @@ buildLinux (args // rec {
 
   src = fetchurl {
     url = "mirror://kernel/linux/kernel/v4.x/linux-${version}.tar.xz";
-    sha256 = "0q06mhz170x1lkx6c6qdh82rcnsj03q6f2m28aqhmc4wc694m2w6";
+    sha256 = "1dsgbys73jga5h0a9icgif6qbi31g84315zlcdid9bzf1abkbx3v";
   };
 } // (args.argsOverride or {}))
diff --git a/pkgs/os-specific/linux/kernel/linux-5.3.nix b/pkgs/os-specific/linux/kernel/linux-5.3.nix
index c3312c250a5..86fc9af4f24 100644
--- a/pkgs/os-specific/linux/kernel/linux-5.3.nix
+++ b/pkgs/os-specific/linux/kernel/linux-5.3.nix
@@ -3,7 +3,7 @@
 with stdenv.lib;
 
 buildLinux (args // rec {
-  version = "5.3.11";
+  version = "5.3.12";
 
   # modDirVersion needs to be x.y.z, will automatically add .0 if needed
   modDirVersion = if (modDirVersionArg == null) then concatStringsSep "." (take 3 (splitVersion "${version}.0")) else modDirVersionArg;
@@ -13,6 +13,6 @@ buildLinux (args // rec {
 
   src = fetchurl {
     url = "mirror://kernel/linux/kernel/v5.x/linux-${version}.tar.xz";
-    sha256 = "1dxfh0l4inpjd17pyxfsskjsphs43r8lg6nhhr3y4whxdna5cwbf";
+    sha256 = "184pmjyqh4bkrc3vj65zn6xnljzv9d1x7c1z0hlgj6fakpwgdgsk";
   };
 } // (args.argsOverride or {}))
diff --git a/pkgs/servers/consul/default.nix b/pkgs/servers/consul/default.nix
index e993f70b105..2a4361d99d2 100644
--- a/pkgs/servers/consul/default.nix
+++ b/pkgs/servers/consul/default.nix
@@ -2,7 +2,7 @@
 
 buildGoPackage rec {
   pname = "consul";
-  version = "1.6.1";
+  version = "1.6.2";
   rev = "v${version}";
 
   goPackagePath = "github.com/hashicorp/consul";
@@ -19,7 +19,7 @@ buildGoPackage rec {
     owner = "hashicorp";
     repo = pname;
     inherit rev;
-    sha256 = "00dvvxi7y80v2b6wzwyfzhxv1ksnl1m0nmdjl98dhq5ikb0v7p28";
+    sha256 = "0r9wqxhgspgypvp9xdv931r8g28gjg9njdignp84rrbxljix25my";
   };
 
   preBuild = ''
diff --git a/pkgs/servers/jackett/default.nix b/pkgs/servers/jackett/default.nix
index c5c97b51422..9f411c69a8d 100644
--- a/pkgs/servers/jackett/default.nix
+++ b/pkgs/servers/jackett/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "jackett";
-  version = "0.11.751";
+  version = "0.12.907";
 
   src = fetchurl {
     url = "https://github.com/Jackett/Jackett/releases/download/v${version}/Jackett.Binaries.LinuxAMDx64.tar.gz";
-    sha256 = "09y9pck35pj2g89936zallxr3hanmbgp8jc42nj2js68l0z64qz3";
+    sha256 = "0f88zjd8abkr72sjbzm51npxsjbk6xklfqd7iyaq3j0l5hxh6b8w";
   };
 
   buildInputs = [ makeWrapper ];
diff --git a/pkgs/servers/monitoring/loki/default.nix b/pkgs/servers/monitoring/loki/default.nix
index 96e583942dd..9bc4223b5d6 100644
--- a/pkgs/servers/monitoring/loki/default.nix
+++ b/pkgs/servers/monitoring/loki/default.nix
@@ -1,7 +1,7 @@
 { stdenv, buildGoPackage, fetchFromGitHub, makeWrapper, systemd }:
 
 buildGoPackage rec {
-  version = "0.4.0";
+  version = "1.0.0";
   pname = "grafana-loki";
   goPackagePath = "github.com/grafana/loki";
 
@@ -11,7 +11,7 @@ buildGoPackage rec {
     rev = "v${version}";
     owner = "grafana";
     repo = "loki";
-    sha256 = "1anwq5dbh29dma18hnialbb253ciazzxmnqvympbh29ricldcf8p";
+    sha256 = "0qqmxrbiph268i5c8i6wpcihspdcglfxd4hy6ag03bl66rciq8nb";
   };
 
   nativeBuildInputs = [ makeWrapper ];
@@ -23,10 +23,10 @@ buildGoPackage rec {
   '';
 
   meta = with stdenv.lib; {
-    description = "Like Prometheus, but for logs.";
+    description = "Like Prometheus, but for logs";
     license = licenses.asl20;
     homepage = "https://grafana.com/loki";
-    maintainers = with maintainers; [ willibutz globin ];
+    maintainers = with maintainers; [ willibutz globin mmahut ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/servers/rainloop/default.nix b/pkgs/servers/rainloop/default.nix
index b037524f67f..ff6cb8c98eb 100644
--- a/pkgs/servers/rainloop/default.nix
+++ b/pkgs/servers/rainloop/default.nix
@@ -1,7 +1,7 @@
 { stdenv, fetchurl, unzip, dataPath ? "/etc/rainloop" }: let
   common = { edition, sha256 }:
     stdenv.mkDerivation (rec {
-      name = "rainloop-${edition}-${version}";
+      pname = "rainloop${stdenv.lib.optionalString (edition != "") "-${edition}"}";
       version = "1.13.0";
 
       buildInputs = [ unzip ];
@@ -26,8 +26,8 @@
       meta = with stdenv.lib; {
         description = "Simple, modern & fast web-based email client";
         homepage = "https://www.rainloop.net";
-        downloadPage = https://github.com/RainLoop/rainloop-webmail/releases;
-        license = licenses.agpl3;
+        downloadPage = "https://github.com/RainLoop/rainloop-webmail/releases";
+        license = with licenses; if edition == "" then unfree else agpl3;
         platforms = platforms.all;
         maintainers = with maintainers; [ das_j ];
       };
diff --git a/pkgs/servers/roundcube/default.nix b/pkgs/servers/roundcube/default.nix
index 5953a28a283..8278674faf1 100644
--- a/pkgs/servers/roundcube/default.nix
+++ b/pkgs/servers/roundcube/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "roundcube";
-  version = "1.4.0";
+  version = "1.4.1";
 
   src = fetchurl {
     url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/roundcubemail-${version}-complete.tar.gz";
-    sha256 = "0b7gc342z0smn7q6cnznj9ncal0515ki4kkq1hlmqmyn0nna5lkb";
+    sha256 = "0jml16djrap0602agwm3hvq53c4lw5bg2qklxbfk79qs3v926134";
   };
 
   patches = [ ./0001-Don-t-resolve-symlinks-when-trying-to-find-INSTALL_P.patch ];
diff --git a/pkgs/servers/routinator/default.nix b/pkgs/servers/routinator/default.nix
index 440cd346522..360cc4d27d8 100644
--- a/pkgs/servers/routinator/default.nix
+++ b/pkgs/servers/routinator/default.nix
@@ -2,16 +2,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "routinator";
-  version = "0.6.1";
+  version = "0.6.2";
 
   src = fetchFromGitHub {
     owner = "NLnetLabs";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1knqgq8xrlvwfc3y2hki6p0zr4dblm7max37y01p3bf641gs748z";
+    sha256 = "0v0j8lv1l7mxxwv7ycissya0rrvjqidb37dylqqy4zvirmk1b2av";
   };
 
-  cargoSha256 = "13sx7mbirhrd0is7gvnk0mir5qizbhrlvsn0v55ibf3bybjsb644";
+  cargoSha256 = "19333br2r27s0rsv7imsv2y1j9gmljy4v8bqybvblrw1vc5961kq";
 
   meta = with stdenv.lib; {
     description = "An RPKI Validator written in Rust";
diff --git a/pkgs/servers/web-apps/codimd/default.nix b/pkgs/servers/web-apps/codimd/default.nix
index ab4065597ae..5b61de48b8d 100644
--- a/pkgs/servers/web-apps/codimd/default.nix
+++ b/pkgs/servers/web-apps/codimd/default.nix
@@ -1,7 +1,7 @@
 { stdenv, fetchFromGitHub, fetchpatch, makeWrapper
-, which, nodejs, yarn2nix, python2 }:
+, which, nodejs, mkYarnPackage, python2 }:
 
-yarn2nix.mkYarnPackage rec {
+mkYarnPackage rec {
   name = "codimd";
   version = "1.5.0";
 
@@ -35,14 +35,8 @@ yarn2nix.mkYarnPackage rec {
     popd
 
     pushd node_modules/sqlite3
-    export OLD_HOME="$HOME"
-    export HOME="$PWD"
-    mkdir -p .node-gyp/${nodejs.version}
-    echo 9 > .node-gyp/${nodejs.version}/installVersion
-    ln -s ${nodejs}/include .node-gyp/${nodejs.version}
-    npm run install
-    export HOME="$OLD_HOME"
-    unset OLD_HOME
+    export CPPFLAGS="-I${nodejs}/include/node"
+    npm run install --build-from-source --nodedir=${nodejs}/include/node
     popd
 
     npm run build
diff --git a/pkgs/shells/zsh/oh-my-zsh/default.nix b/pkgs/shells/zsh/oh-my-zsh/default.nix
index 647f4cc1a6e..8140e654d24 100644
--- a/pkgs/shells/zsh/oh-my-zsh/default.nix
+++ b/pkgs/shells/zsh/oh-my-zsh/default.nix
@@ -4,13 +4,13 @@
 { stdenv, fetchgit }:
 
 stdenv.mkDerivation rec {
-  version = "2019-10-30";
+  version = "2019-11-21";
   pname = "oh-my-zsh";
-  rev = "687c50bdf999f8efd45f3c8f578a62329b0633da";
+  rev = "76d6b0256398ad1becbc304a78f51bbacfee50e5";
 
   src = fetchgit { inherit rev;
     url = "https://github.com/robbyrussell/oh-my-zsh";
-    sha256 = "13vflcqshvr323sdh4yrs4wlvbxhhc7ldhcyawcwassk44g2kx8w";
+    sha256 = "0p049v1v0jk3v8inn99ankgdn2q5iamsxn203w4vb53266xjgx2r";
   };
 
   pathsToLink = [ "/share/oh-my-zsh" ];
diff --git a/pkgs/tools/admin/azure-cli/default.nix b/pkgs/tools/admin/azure-cli/default.nix
new file mode 100644
index 00000000000..3a80b4752c2
--- /dev/null
+++ b/pkgs/tools/admin/azure-cli/default.nix
@@ -0,0 +1,248 @@
+{ lib, python, fetchFromGitHub, installShellFiles }:
+
+let
+  version = "2.0.76";
+  src = fetchFromGitHub {
+    owner = "Azure";
+    repo = "azure-cli";
+    rev = "azure-cli-${version}";
+    sha256 = "0zfy8nhw4nx0idh94qidr06vsfxgdk2ky0ih76s27121pdwr05aa";
+  };
+
+  # put packages that needs to be overriden in the py package scope
+  py = import ./python-packages.nix { inherit python lib src version; };
+in
+py.pkgs.toPythonApplication (py.pkgs.buildAzureCliPackage {
+  pname = "azure-cli";
+  inherit version src;
+  disabled = python.isPy27; # namespacing assumes PEP420, which isn't compat with py2
+
+  sourceRoot = "source/src/azure-cli";
+
+  prePatch = ''
+    substituteInPlace setup.py \
+      --replace "javaproperties==0.5.1" "javaproperties" \
+      --replace "pytz==2019.1" "pytz" \
+      --replace "mock~=2.0" "mock" \
+      --replace "azure-mgmt-reservations==0.3.1" "azure-mgmt-reservations~=0.3.1"
+
+    # remove namespace hacks
+    # remove urllib3 because it was added as 'urllib3[secure]', which doesn't get handled well
+    sed -i setup.py \
+      -e '/azure-cli-command_modules-nspkg/d' \
+      -e '/azure-cli-nspkg/d' \
+      -e '/urllib3/d'
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  propagatedBuildInputs = with py.pkgs; [
+    azure-batch
+    azure-cli-core
+    azure-cli-telemetry
+    azure-cosmos
+    azure-datalake-store
+    azure-functions-devops-build
+    azure-graphrbac
+    azure-keyvault
+    azure-mgmt-advisor
+    azure-mgmt-apimanagement
+    azure-mgmt-applicationinsights
+    azure-mgmt-appconfiguration
+    azure-mgmt-authorization
+    azure-mgmt-batch
+    azure-mgmt-batchai
+    azure-mgmt-billing
+    azure-mgmt-botservice
+    azure-mgmt-cdn
+    azure-mgmt-cognitiveservices
+    azure-mgmt-compute
+    azure-mgmt-consumption
+    azure-mgmt-containerinstance
+    azure-mgmt-containerregistry
+    azure-mgmt-containerservice
+    azure-mgmt-cosmosdb
+    azure-mgmt-datalake-analytics
+    azure-mgmt-datalake-store
+    azure-mgmt-datamigration
+    azure-mgmt-deploymentmanager
+    azure-mgmt-devtestlabs
+    azure-mgmt-dns
+    azure-mgmt-eventgrid
+    azure-mgmt-eventhub
+    azure-mgmt-hdinsight
+    azure-mgmt-imagebuilder
+    azure-mgmt-iotcentral
+    azure-mgmt-iothub
+    azure-mgmt-iothubprovisioningservices
+    azure-mgmt-keyvault
+    azure-mgmt-kusto
+    azure-mgmt-loganalytics
+    azure-mgmt-managedservices
+    azure-mgmt-managementgroups
+    azure-mgmt-maps
+    azure-mgmt-marketplaceordering
+    azure-mgmt-media
+    azure-mgmt-monitor
+    azure-mgmt-msi
+    azure-mgmt-network
+    azure-mgmt-netapp
+    azure-mgmt-policyinsights
+    azure-mgmt-privatedns
+    azure-mgmt-rdbms
+    azure-mgmt-recoveryservices
+    azure-mgmt-recoveryservicesbackup
+    azure-mgmt-redis
+    azure-mgmt-relay
+    azure-mgmt-reservations
+    azure-mgmt-resource
+    azure-mgmt-search
+    azure-mgmt-security
+    azure-mgmt-servicebus
+    azure-mgmt-servicefabric
+    azure-mgmt-signalr
+    azure-mgmt-sql
+    azure-mgmt-sqlvirtualmachine
+    azure-mgmt-storage
+    azure-mgmt-trafficmanager
+    azure-mgmt-web
+    azure-multiapi-storage
+    azure-storage-blob
+    colorama
+    cryptography
+    Fabric
+    jsmin
+    knack
+    mock
+    paramiko
+    pydocumentdb
+    pygments
+    pyopenssl
+    pytz
+    pyyaml
+    psutil
+    requests
+    scp
+    six
+    sshtunnel
+    urllib3
+    vsts-cd-manager
+    websocket_client
+    xmltodict
+    javaproperties
+    jsondiff
+    # urllib3[secure]
+    ipaddress
+    # shell completion
+    argcomplete
+  ];
+
+  # TODO: make shell completion actually work
+  # uses argcomplete, so completion needs PYTHONPATH to work
+  postInstall = ''
+    installShellCompletion --bash --name az.bash az.completion.sh
+    installShellCompletion --zsh --name _az az.completion.sh
+
+    # remove garbage
+    rm $out/bin/az.bat
+    rm $out/bin/az.completion.sh
+  '';
+
+  # wrap the executable so that the python packages are available
+  # it's just a shebang script which calls `python -m azure.cli "$@"`
+  postFixup = ''
+    wrapProgram $out/bin/az \
+      --set PYTHONPATH $PYTHONPATH
+  '';
+
+  # almost the entire test suite requires an azure account setup and networking
+  # ensure that the azure namespaces are setup correctly and that azure.cli can be accessed
+  checkPhase = ''
+    cd azure # avoid finding local copy
+    ${py.interpreter} -c 'import azure.cli.core; assert "${version}" == azure.cli.core.__version__'
+    HOME=$TMPDIR ${py.interpreter} -m azure.cli --help
+  '';
+
+  # ensure these namespaces are able to be accessed
+  pythonImportsCheck = [
+    "azure.batch"
+    "azure.cli.core"
+    "azure.cli.telemetry"
+    "azure.cosmos"
+    "azure.datalake.store"
+    "azure_functions_devops_build"
+    "azure.graphrbac"
+    "azure.keyvault"
+    "azure.mgmt.advisor"
+    "azure.mgmt.apimanagement"
+    "azure.mgmt.applicationinsights"
+    "azure.mgmt.appconfiguration"
+    "azure.mgmt.authorization"
+    "azure.mgmt.batch"
+    "azure.mgmt.batchai"
+    "azure.mgmt.billing"
+    "azure.mgmt.botservice"
+    "azure.mgmt.cdn"
+    "azure.mgmt.cognitiveservices"
+    "azure.mgmt.compute"
+    "azure.mgmt.consumption"
+    "azure.mgmt.containerinstance"
+    "azure.mgmt.containerregistry"
+    "azure.mgmt.containerservice"
+    "azure.mgmt.cosmosdb"
+    "azure.mgmt.datalake.analytics"
+    "azure.mgmt.datalake.store"
+    "azure.mgmt.datamigration"
+    "azure.mgmt.deploymentmanager"
+    "azure.mgmt.devtestlabs"
+    "azure.mgmt.dns"
+    "azure.mgmt.eventgrid"
+    "azure.mgmt.eventhub"
+    "azure.mgmt.hdinsight"
+    "azure.mgmt.imagebuilder"
+    "azure.mgmt.iotcentral"
+    "azure.mgmt.iothub"
+    "azure.mgmt.iothubprovisioningservices"
+    "azure.mgmt.keyvault"
+    "azure.mgmt.kusto"
+    "azure.mgmt.loganalytics"
+    "azure.mgmt.managedservices"
+    "azure.mgmt.managementgroups"
+    "azure.mgmt.maps"
+    "azure.mgmt.marketplaceordering"
+    "azure.mgmt.media"
+    "azure.mgmt.monitor"
+    "azure.mgmt.msi"
+    "azure.mgmt.network"
+    "azure.mgmt.netapp"
+    "azure.mgmt.policyinsights"
+    "azure.mgmt.privatedns"
+    "azure.mgmt.rdbms"
+    "azure.mgmt.recoveryservices"
+    "azure.mgmt.recoveryservicesbackup"
+    "azure.mgmt.redis"
+    "azure.mgmt.relay"
+    "azure.mgmt.reservations"
+    "azure.mgmt.resource"
+    "azure.mgmt.search"
+    "azure.mgmt.security"
+    "azure.mgmt.servicebus"
+    "azure.mgmt.servicefabric"
+    "azure.mgmt.signalr"
+    "azure.mgmt.sql"
+    "azure.mgmt.sqlvirtualmachine"
+    "azure.mgmt.storage"
+    "azure.mgmt.trafficmanager"
+    "azure.mgmt.web"
+    "azure.storage.blob"
+    "azure.storage.common"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Azure/azure-cli";
+    description = "Next generation multi-platform command line experience for Azure";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+})
+
diff --git a/pkgs/tools/admin/azure-cli/python-packages.nix b/pkgs/tools/admin/azure-cli/python-packages.nix
new file mode 100644
index 00000000000..e925a239afb
--- /dev/null
+++ b/pkgs/tools/admin/azure-cli/python-packages.nix
@@ -0,0 +1,247 @@
+{ python, lib, src, version }:
+
+let
+  buildAzureCliPackage = with py.pkgs; attrs: buildPythonPackage (attrs // {
+    # Remove overly restrictive version contraints and obsolete namespace setup
+    prePatch = (attrs.prePatch or "") + ''
+      rm -f azure_bdist_wheel.py tox.ini
+      substituteInPlace setup.py \
+        --replace "wheel==0.30.0" "wheel"
+      sed -i "/azure-namespace-package/c\ " setup.cfg
+    '';
+
+    # Prevent these __init__'s from violating PEP420, only needed for python2
+    postInstall = (attrs.postInstall or "") + ''
+      rm $out/${python.sitePackages}/azure/{,__pycache__/}__init__.* \
+         $out/${python.sitePackages}/azure/cli/{,__pycache__/}__init__.*
+    '';
+
+    checkInputs = [ mock pytest ] ++ (attrs.checkInputs or []);
+    checkPhase = attrs.checkPhase or ''
+      cd azure
+      HOME=$TMPDIR pytest
+    '';
+  });
+
+  overrideAzureMgmtPackage = package: version: extension: sha256:
+    package.overrideAttrs(oldAttrs: rec {
+      inherit version;
+
+      src = py.pkgs.fetchPypi {
+        inherit (oldAttrs) pname;
+        inherit version sha256 extension;
+      };
+
+      preBuild = ''
+        rm -f azure_bdist_wheel.py
+        substituteInPlace setup.cfg \
+          --replace "azure-namespace-package = azure-mgmt-nspkg" ""
+      '';
+    });
+
+  py = python.override {
+    packageOverrides = self: super: {
+      inherit buildAzureCliPackage;
+
+      # core and the actual application are highly coupled
+      azure-cli-core = buildAzureCliPackage {
+        pname = "azure-cli-core";
+        inherit version src;
+
+        sourceRoot = "source/src/azure-cli-core";
+
+        propagatedBuildInputs = with self; [
+          adal
+          argcomplete
+          azure-cli-telemetry
+          colorama
+          jmespath
+          humanfriendly
+          knack
+          msrest
+          msrestazure
+          paramiko
+          pygments
+          pyjwt
+          pyopenssl
+          pyyaml
+          requests
+          six
+          azure-mgmt-resource
+          tabulate
+          pyperclip
+          psutil
+        ]
+        ++ lib.optionals isPy3k [ antlr4-python3-runtime ]
+        ++ lib.optionals (!isPy3k) [ enum34 futures antlr4-python2-runtime ndg-httpsclient ];
+
+        # ignore test that does network call
+        checkPhase = ''
+          HOME=$TMPDIR pytest --ignore=azure/cli/core/tests/test_profile.py
+        '';
+
+        pythonImportsCheck = [
+          "azure.cli.telemetry"
+          "azure.cli.core"
+        ];
+      };
+
+      azure-cli-telemetry = buildAzureCliPackage {
+        pname = "azure-cli-telemetry";
+        version = "1.0.4"; # might be wrong, but doesn't really matter
+        inherit src;
+
+        sourceRoot = "source/src/azure-cli-telemetry";
+
+        propagatedBuildInputs = with super; [
+          applicationinsights
+          portalocker
+        ];
+
+        # ignore flaky test
+        checkPhase = ''
+          cd azure
+          HOME=$TMPDIR pytest -k 'not test_create_telemetry_note_file_from_scratch'
+        '';
+      };
+
+      azure-mgmt-resource = overrideAzureMgmtPackage super.azure-mgmt-resource "4.0.0" "zip"
+        "0gy89bi89ikg5hps8rvnq28r33lixci3sk2m86jvziv9fh9rz41b";
+
+      azure-mgmt-compute = overrideAzureMgmtPackage super.azure-mgmt-compute "8.0.0" "zip"
+        "06hmf9iq2yqpmmvw7pr9zm4v427q03i436lnin3aczizfndrk76i";
+
+      azure-mgmt-consumption = overrideAzureMgmtPackage super.azure-mgmt-consumption "2.0.0" "zip"
+        "12ai4qps73ivawh0yzvgb148ksx02r30pqlvfihx497j62gsi1cs";
+
+      azure-mgmt-containerservice = overrideAzureMgmtPackage super.azure-mgmt-containerservice "7.0.0" "zip"
+        "104w7rxv7hy84yzddbbpkjqha04ghr0zz9qy788n3wl69cj4cv1a";
+
+      azure-mgmt-iothub = overrideAzureMgmtPackage super.azure-mgmt-iothub "0.8.2" "zip"
+        "0w3w1d156rnkwjdarv3qvycklxr3z2j7lry7a3jfgj3ykzny12rq";
+
+      azure-mgmt-kusto = overrideAzureMgmtPackage super.azure-mgmt-kusto "0.3.0" "zip"
+        "1pmcdgimd66h964a3d5m2j2fbydshcwhrk87wblhwhfl3xwbgf4y";
+
+      azure-mgmt-devtestlabs = overrideAzureMgmtPackage super.azure-mgmt-devtestlabs "2.2.0" "zip"
+        "15lpyv9z8ss47rjmg1wx5akh22p9br2vckaj7jk3639vi38ac5nl";
+
+      azure-mgmt-netapp = overrideAzureMgmtPackage super.azure-mgmt-netapp "0.6.0" "zip"
+        "10ymvyj386z9bjdm2g1b5a4vfnn87ig2zm6xn2xddvbpy0jxnyfv";
+
+      azure-mgmt-dns = overrideAzureMgmtPackage super.azure-mgmt-dns "2.1.0" "zip"
+        "1l55py4fzzwhxlmnwa41gpmqk9v2ncc79w7zq11sm9a5ynrv2c1p";
+
+      azure-mgmt-network = overrideAzureMgmtPackage super.azure-mgmt-network "7.0.0" "zip"
+        "0ss5yc9k3dh78lb88nfh3z98yz1pcd8d7d7cfjlxmv4n3dlr1kij";
+
+      azure-mgmt-msi = overrideAzureMgmtPackage super.azure-mgmt-msi "0.2.0" "zip"
+        "0rvik03njz940x2hvqg6iiq8k0d88gyygsr86w8s0sa12sdbq8l6";
+
+      azure-mgmt-web = overrideAzureMgmtPackage super.azure-mgmt-web "0.42.0" "zip"
+        "0vp40i9aaw5ycz7s7qqir6jq7327f7zg9j9i8g31qkfl1h1c7pdn";
+
+      azure-mgmt-reservations = overrideAzureMgmtPackage super.azure-mgmt-reservations "0.3.2" "zip"
+        "0nksxjh5kh09dr0zw667fg8mzik4ymvfq3dipwag6pynbqr9ls4l";
+
+      azure-mgmt-security = overrideAzureMgmtPackage super.azure-mgmt-security "0.1.0" "zip"
+        "1cb466722bs0ribrirb32kc299716pl0pwivz3jyn40dd78cwhhx";
+
+      azure-mgmt-datamigration = overrideAzureMgmtPackage super.azure-mgmt-datamigration "0.1.0" "zip"
+        "1pq5rn32yvrf5kqjafnj0kc92gpfg435w2l0k7cm8gvlja4r4m77";
+
+      azure-mgmt-relay = overrideAzureMgmtPackage super.azure-mgmt-relay "0.1.0" "zip"
+        "1jss6qhvif8l5s0lblqw3qzijjf0h88agciiydaa7f4q577qgyfr";
+
+      azure-mgmt-eventhub = overrideAzureMgmtPackage super.azure-mgmt-eventhub "2.6.0" "zip"
+        "1nnp2ki4iz4f4897psmwb0v5khrwh84fgxja7nl7g73g3ym20sz8";
+
+      azure-mgmt-keyvault = overrideAzureMgmtPackage super.azure-mgmt-keyvault "1.1.0" "zip"
+        "16a0d3j5dilbp7pd7gbwf8jr46vzbjim1p9alcmisi12m4km7885";
+
+      azure-mgmt-containerregistry = overrideAzureMgmtPackage super.azure-mgmt-containerregistry "3.0.0rc7" "zip"
+        "1bzfpbz186dhnxn0blgr20xxnk67gkr8ysn2b3f1r41bq9hz97xp";
+
+      azure-mgmt-monitor = overrideAzureMgmtPackage super.azure-mgmt-monitor "0.5.2" "zip"
+        "1r01aq5rbynbc1my4qljdifjdj9h65bh8cdzgd7vm4ij7r48v9gi";
+
+      azure-mgmt-advisor =  overrideAzureMgmtPackage super.azure-mgmt-advisor "2.0.1" "zip"
+        "1wsfkprdrn22mwm24y2zlcms8ppp7jwq3s86r3ymbl29pbaxca8r";
+
+      azure-mgmt-applicationinsights = overrideAzureMgmtPackage super.azure-mgmt-applicationinsights "0.1.1" "zip"
+        "16raxr5naszrxmgbfhsvh7rqcph5cx6x3f480790m79ykvmjj0pi";
+
+      azure-mgmt-authorization = overrideAzureMgmtPackage super.azure-mgmt-authorization "0.52.0" "zip"
+        "0357laxgldb7lvvws81r8xb6mrq9dwwnr1bnwdnyj4bw6p21i9hn";
+
+      azure-mgmt-storage = overrideAzureMgmtPackage super.azure-mgmt-storage "5.0.0" "zip"
+        "1gzsscfnnfb8gxs34dq9hs339hidlzas7kgivw0234v3qz4gy9yx";
+
+      azure-mgmt-servicefabric = overrideAzureMgmtPackage super.azure-mgmt-servicefabric "0.2.0" "zip"
+        "1bcq6fcgrsvmk6q7v8mxzn1180jm2qijdqkqbv1m117zp1wj5gxj";
+
+      azure-mgmt-hdinsight = overrideAzureMgmtPackage super.azure-mgmt-hdinsight "1.1.0" "zip"
+        "0lj9dhb14dx4ag5pgd2zvrmn9y5ziq2qywvw38ccbv9g3bxpglkn";
+
+      azure-graphrbac = super.azure-graphrbac.overrideAttrs(oldAttrs: rec {
+        version = "0.60.0";
+
+        src = super.fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          sha256 = "1zna5vb887clvpyfp5439vhlz3j4z95blw9r7y86n6cfpzc65fyh";
+          extension = "zip";
+        };
+      });
+
+      azure-storage-blob = super.azure-storage-blob.overrideAttrs(oldAttrs: rec {
+        version = "1.5.0";
+        src = super.fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          sha256 = "0b15dzy75fml994gdfmaw5qcyij15gvh968mk3hg94d1wxwai1zi";
+        };
+      });
+
+      azure-storage-common = super.azure-storage-common.overrideAttrs(oldAttrs: rec {
+        version = "1.4.2";
+        src = super.fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          sha256 = "00g41b5q4ijlv02zvzjgfwrwy71cgr3lc3if4nayqmyl6xsprj2f";
+        };
+      });
+
+      # part of azure.mgmt.datalake namespace
+      azure-mgmt-datalake-analytics = super.azure-mgmt-datalake-analytics.overrideAttrs(oldAttrs: rec {
+        version = "0.2.1";
+
+        src = super.fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          sha256 = "192icfx82gcl3igr18w062744376r2ivh63c8nd7v17mjk860yac";
+          extension = "zip";
+        };
+
+        preBuild = ''
+          rm azure_bdist_wheel.py
+          substituteInPlace setup.cfg \
+            --replace "azure-namespace-package = azure-mgmt-datalake-nspkg" ""
+        '';
+      });
+
+
+
+
+
+
+
+
+
+
+
+
+    };
+  };
+in
+  py
diff --git a/pkgs/tools/admin/eksctl/default.nix b/pkgs/tools/admin/eksctl/default.nix
index 54223dfaea8..b7208d7b867 100644
--- a/pkgs/tools/admin/eksctl/default.nix
+++ b/pkgs/tools/admin/eksctl/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "eksctl";
-  version = "0.9.0";
+  version = "0.10.2";
 
   src = fetchFromGitHub {
     owner = "weaveworks";
     repo = pname;
     rev = version;
-    sha256 = "09r8qyc9gcc3slfldkxp91bkiyfgd6qh4di0dbnjggsqfncg34ra";
+    sha256 = "0j1kzll23rj87nabzjjhxydg95cnxlwbkqp3qivf96bv1xlby75k";
   };
 
-  modSha256 = "0y222vxxs9aw17mhif4m0z35ks9xxv90ajk9am71x85sfvkglgl0";
+  modSha256 = "18n4aimf9diy9w7f2k08cd7xr8jay6pid5mwrc24y2pqkjhgpyp7";
 
   subPackages = [ "cmd/eksctl" ];
 
diff --git a/pkgs/tools/audio/beets/default.nix b/pkgs/tools/audio/beets/default.nix
index 241e552b05c..9509eccabdc 100644
--- a/pkgs/tools/audio/beets/default.nix
+++ b/pkgs/tools/audio/beets/default.nix
@@ -6,6 +6,7 @@
 # Attributes needed for tests of the external plugins
 , callPackage, beets
 
+, enableAbsubmit       ? stdenv.lib.elem stdenv.hostPlatform.system essentia-extractor.meta.platforms, essentia-extractor ? null
 , enableAcousticbrainz ? true
 , enableAcoustid       ? true
 , enableBadfiles       ? true, flac ? null, mp3val ? null
@@ -33,6 +34,7 @@
 , bashInteractive, bash-completion
 }:
 
+assert enableAbsubmit    -> essentia-extractor            != null;
 assert enableAcoustid    -> pythonPackages.pyacoustid     != null;
 assert enableBadfiles    -> flac != null && mp3val != null;
 assert enableConvert     -> ffmpeg != null;
@@ -51,6 +53,7 @@ with stdenv.lib;
 
 let
   optionalPlugins = {
+    absubmit = enableAbsubmit;
     acousticbrainz = enableAcousticbrainz;
     badfiles = enableBadfiles;
     chroma = enableAcoustid;
@@ -75,12 +78,12 @@ let
   };
 
   pluginsWithoutDeps = [
-    "absubmit" "beatport" "bench" "bpd" "bpm" "bucket" "cue" "duplicates"
-    "edit" "embedart" "export" "filefilter" "freedesktop" "fromfilename"
-    "ftintitle" "fuzzy" "hook" "ihate" "importadded" "importfeeds" "info"
-    "inline" "ipfs" "lyrics" "mbcollection" "mbsubmit" "mbsync" "metasync"
-    "missing" "permissions" "play" "plexupdate" "random" "rewrite" "scrub"
-    "smartplaylist" "spotify" "the" "types" "zero"
+    "beatport" "bench" "bpd" "bpm" "bucket" "cue" "duplicates" "edit" "embedart"
+    "export" "filefilter" "freedesktop" "fromfilename" "ftintitle" "fuzzy"
+    "hook" "ihate" "importadded" "importfeeds" "info" "inline" "ipfs" "lyrics"
+    "mbcollection" "mbsubmit" "mbsync" "metasync" "missing" "permissions" "play"
+    "plexupdate" "random" "rewrite" "scrub" "smartplaylist" "spotify" "the"
+    "types" "zero"
   ];
 
   enabledOptionalPlugins = attrNames (filterAttrs (_: id) optionalPlugins);
@@ -129,7 +132,8 @@ in pythonPackages.buildPythonApplication rec {
     pythonPackages.gst-python
     pythonPackages.pygobject3
     gobject-introspection
-  ] ++ optional enableAcoustid      pythonPackages.pyacoustid
+  ] ++ optional enableAbsubmit      essentia-extractor
+    ++ optional enableAcoustid      pythonPackages.pyacoustid
     ++ optional (enableFetchart
               || enableEmbyupdate
               || enableKodiupdate
diff --git a/pkgs/tools/backup/duplicity/default.nix b/pkgs/tools/backup/duplicity/default.nix
index c1673c8308e..a33067e8897 100644
--- a/pkgs/tools/backup/duplicity/default.nix
+++ b/pkgs/tools/backup/duplicity/default.nix
@@ -43,7 +43,7 @@ python2Packages.buildPythonApplication rec {
   buildInputs = [ librsync makeWrapper python2Packages.wrapPython ];
   propagatedBuildInputs = [ backblaze-b2 ] ++ (with python2Packages; [
     boto cffi cryptography ecdsa enum idna pygobject3 fasteners
-    ipaddress lockfile paramiko pyasn1 pycrypto six
+    ipaddress lockfile paramiko pyasn1 pycrypto six pydrive
   ]);
   checkInputs = [
     gnupg  # Add 'gpg' to PATH.
diff --git a/pkgs/tools/compression/lz4/default.nix b/pkgs/tools/compression/lz4/default.nix
index 3f2497cd8d2..3ce0eac3fc5 100644
--- a/pkgs/tools/compression/lz4/default.nix
+++ b/pkgs/tools/compression/lz4/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
     })
   ];
 
+  # TODO(@Ericson2314): Separate binaries and libraries
   outputs = [ "out" "dev" ];
 
   buildInputs = stdenv.lib.optional doCheck valgrind;
@@ -33,17 +34,27 @@ stdenv.mkDerivation rec {
     # TODO do this instead
     #"BUILD_STATIC=${if enableStatic then "yes" else "no"}"
     #"BUILD_SHARED=${if enableShared then "yes" else "no"}"
+    #"WINDRES:=${stdenv.cc.bintools.targetPrefix}windres"
   ]
     # TODO delete and do above
     ++ stdenv.lib.optional (enableStatic) "BUILD_STATIC=yes"
     ++ stdenv.lib.optional (!enableShared) "BUILD_SHARED=no"
+    ++ stdenv.lib.optional stdenv.hostPlatform.isMinGW "WINDRES:=${stdenv.cc.bintools.targetPrefix}windres"
+    # TODO make full dictionary
+    ++ stdenv.lib.optional stdenv.hostPlatform.isMinGW "TARGET_OS=MINGW"
     ;
 
   doCheck = false; # tests take a very long time
   checkTarget = "test";
 
-  # TODO remove
-  postInstall = stdenv.lib.optionalString (!enableStatic) "rm $out/lib/*.a";
+  # TODO(@Ericson2314): Make resusable setup hook for this issue on Windows.
+  postInstall =
+    stdenv.lib.optionalString stdenv.hostPlatform.isWindows ''
+      mv $out/bin/*.dll $out/lib
+      ln -s $out/lib/*.dll
+    ''
+    # TODO remove
+    + stdenv.lib.optionalString (!enableStatic) "rm $out/lib/*.a";
 
   meta = with stdenv.lib; {
     description = "Extremely fast compression algorithm";
@@ -56,6 +67,6 @@ stdenv.mkDerivation rec {
     '';
     homepage = https://lz4.github.io/lz4/;
     license = with licenses; [ bsd2 gpl2Plus ];
-    platforms = platforms.unix;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/compression/zstd/default.nix b/pkgs/tools/compression/zstd/default.nix
index 01e8525fe8f..a3aecf88c90 100644
--- a/pkgs/tools/compression/zstd/default.nix
+++ b/pkgs/tools/compression/zstd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, gnugrep
+{ stdenv, fetchFromGitHub, fetchpatch, gnugrep
 , fixDarwinDylibNames
 , file
 , legacySupport ? false }:
@@ -14,11 +14,33 @@ stdenv.mkDerivation rec {
     owner = "facebook";
   };
 
-  buildInputs = stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames;
+  patches = [
+    # All 3 from https://github.com/facebook/zstd/pull/1883
+    (fetchpatch {
+      url = "https://github.com/facebook/zstd/commit/106278e7e5fafaea3b7deb4147bdc8071562d2f0.diff";
+      sha256 = "13z7id1qbc05cv1rmak7c8xrchp7jh1i623bq5pwcihg57wzcyr8";
+    })
+    (fetchpatch {
+      url = "https://github.com/facebook/zstd/commit/0ede342acc2c26f87ae962fa88e158904d4198c4.diff";
+      sha256 = "12l5xbvnzkvr76mvl1ls767paqfwbd9q1pzq44ckacfpz4f6iaap";
+      excludes = [
+        # I think line endings are causing problems, or something like that
+        "programs/windres/generate_res.bat"
+      ];
+    })
+    (fetchpatch {
+      url = "https://github.com/facebook/zstd/commit/10552eaffef84c011f67af0e04f0780b50a5ab26.diff";
+      sha256 = "1s27ravar3rn7q8abybp9733jhpsfcaci51k04da94ahahvxwiqw";
+    })
+  ] # This I didn't upstream because if you use posix threads with MinGW it will
+    # work find, and I'm not sure how to write the condition.
+    ++ stdenv.lib.optional stdenv.hostPlatform.isWindows ./mcfgthreads-no-pthread.patch;
+
+  nativeBuildInputs = stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames;
 
   makeFlags = [
     "ZSTD_LEGACY_SUPPORT=${if legacySupport then "1" else "0"}"
-  ];
+  ] ++ stdenv.lib.optional stdenv.hostPlatform.isWindows "OS=Windows";
 
   checkInputs = [ file ];
   doCheck = true;
@@ -56,7 +78,7 @@ stdenv.mkDerivation rec {
     homepage = https://facebook.github.io/zstd/;
     license = with licenses; [ bsd3 ]; # Or, at your opinion, GPL-2.0-only.
 
-    platforms = platforms.unix;
+    platforms = platforms.all;
     maintainers = with maintainers; [ orivej ];
   };
 }
diff --git a/pkgs/tools/compression/zstd/mcfgthreads-no-pthread.patch b/pkgs/tools/compression/zstd/mcfgthreads-no-pthread.patch
new file mode 100644
index 00000000000..69921c0c7ba
--- /dev/null
+++ b/pkgs/tools/compression/zstd/mcfgthreads-no-pthread.patch
@@ -0,0 +1,13 @@
+diff --git a/programs/Makefile b/programs/Makefile
+index 7882fe8c..1e8237bb 100644
+--- a/programs/Makefile
++++ b/programs/Makefile
+@@ -107,7 +107,7 @@ HAVE_THREAD := $(shell [ "$(HAVE_PTHREAD)" -eq "1" -o -n "$(filter Windows%,$(OS
+ ifeq ($(HAVE_THREAD), 1)
+ THREAD_MSG := ==> building with threading support
+ THREAD_CPP := -DZSTD_MULTITHREAD
+-THREAD_LD := -pthread
++THREAD_LD :=
+ else
+ THREAD_MSG := $(NO_THREAD_MSG)
+ endif
diff --git a/pkgs/tools/filesystems/duff/default.nix b/pkgs/tools/filesystems/duff/default.nix
index 3981521097a..d68ad10bd0d 100644
--- a/pkgs/tools/filesystems/duff/default.nix
+++ b/pkgs/tools/filesystems/duff/default.nix
@@ -33,7 +33,7 @@ stdenv.mkDerivation {
       Duff is a Unix command-line utility for quickly finding duplicates in
       a given set of files.
     '';
-    homepage = http://duff.dreda.org/;
+    homepage = https://duff.dreda.org/;
     license = licenses.zlib;
     platforms = platforms.all;
   };
diff --git a/pkgs/tools/filesystems/nixpart/0.4/default.nix b/pkgs/tools/filesystems/nixpart/0.4/default.nix
index b293b6d8146..129283e83eb 100644
--- a/pkgs/tools/filesystems/nixpart/0.4/default.nix
+++ b/pkgs/tools/filesystems/nixpart/0.4/default.nix
@@ -73,6 +73,5 @@ in buildPythonApplication rec {
     license = licenses.gpl2Plus;
     maintainers = [ maintainers.aszlig ];
     platforms = platforms.linux;
-    broken = true;
   };
 }
diff --git a/pkgs/tools/misc/vector/default.nix b/pkgs/tools/misc/vector/default.nix
index 8c5ba4100c6..b5e34165030 100644
--- a/pkgs/tools/misc/vector/default.nix
+++ b/pkgs/tools/misc/vector/default.nix
@@ -6,20 +6,31 @@
     (if stdenv.isAarch64
      then [ "jemallocator" ]
      else [ "leveldb" "jemallocator" ])
+
+# Unfortunately, buildRustPackage does not really support using overrideAttrs
+# on the underlying fields, because it doesn't pass them to stdenv.mkDerivation
+# as an attr. making it a parameter is the only way to do so. sigh
+
+, version ? "0.5.0"
+
+, srcRef ? {
+    rev    = "refs/tags/v${version}";
+    sha256 = "0niyxlvphn3awrpfh1hbqy767cckgjzyjrkqjxj844czxhh1hhff";
+  }
+
+, cargoSha256 ? "0bdgan891hrah54g6aaysqizkxrfsbidnxihai0i7h7knzq9gsk5"
+, patches ? []
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "vector";
-  version = "0.5.0";
-
+  inherit version cargoSha256 patches;
   src = fetchFromGitHub {
-    owner  = "timberio";
-    repo   = pname;
-    rev    = "refs/tags/v${version}";
-    sha256 = "0niyxlvphn3awrpfh1hbqy767cckgjzyjrkqjxj844czxhh1hhff";
+    owner = "timberio";
+    repo  = pname;
+    inherit (srcRef) rev sha256;
   };
 
-  cargoSha256 = "0bdgan891hrah54g6aaysqizkxrfsbidnxihai0i7h7knzq9gsk5";
   buildInputs = [ openssl pkgconfig protobuf ]
                 ++ stdenv.lib.optional stdenv.isDarwin [ Security libiconv ];
 
diff --git a/pkgs/tools/misc/youtube-dl/default.nix b/pkgs/tools/misc/youtube-dl/default.nix
index bc198eb595b..da54b885bfc 100644
--- a/pkgs/tools/misc/youtube-dl/default.nix
+++ b/pkgs/tools/misc/youtube-dl/default.nix
@@ -18,11 +18,11 @@ buildPythonPackage rec {
   # The websites youtube-dl deals with are a very moving target. That means that
   # downloads break constantly. Because of that, updates should always be backported
   # to the latest stable release.
-  version = "2019.11.05";
+  version = "2019.11.22";
 
   src = fetchurl {
     url = "https://yt-dl.org/downloads/${version}/${pname}-${version}.tar.gz";
-    sha256 = "129461i4103slqj3nq69djnlmgjj3lfgmazn41avc5g967w29b85";
+    sha256 = "0avdlp0dc9p3lm68mfnic21x6blxmr0zvlxa4br5vj4y4sckq2m8";
   };
 
   nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/tools/security/gnome-keysign/default.nix b/pkgs/tools/security/gnome-keysign/default.nix
index 04fa923ce2c..2c216c0a404 100644
--- a/pkgs/tools/security/gnome-keysign/default.nix
+++ b/pkgs/tools/security/gnome-keysign/default.nix
@@ -1,5 +1,6 @@
 { stdenv
 , fetchFromGitLab
+, fetchpatch
 , python3
 , wrapGAppsHook
 , gobject-introspection
@@ -11,22 +12,30 @@
 
 python3.pkgs.buildPythonApplication rec {
   pname = "gnome-keysign";
-  version = "1.0.1";
+  version = "1.2.0";
 
   src = fetchFromGitLab {
     domain = "gitlab.gnome.org";
     owner = "GNOME";
     repo = pname;
     rev = version;
-    sha256 = "0iy70dskd7wly37lpb2ypd9phhyml5j3c7rzajii4f2s7zgb3abg";
+    sha256 = "1sjphi1lsivg9jmc8khbcqa9w6608pkrccz4nz3rlcc54hn0k0sj";
   };
 
+  patches = [
+    # fix build failure due to missing import
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/gnome-keysign/commit/216c3677e68960afc517edc00529323e85909323.patch";
+      sha256 = "1w410gvcridbq26sry7fxn49v59ss2lc0w5ab7csva8rzs1nc990";
+    })
+  ];
+
   nativeBuildInputs = [
     wrapGAppsHook
     gobject-introspection
   ] ++ (with python3.pkgs; [
     Babel
-    lxml
+    babelgladeextractor
   ]);
 
   buildInputs = [
diff --git a/pkgs/tools/security/sequoia/default.nix b/pkgs/tools/security/sequoia/default.nix
index 554ed93f093..21403225aad 100644
--- a/pkgs/tools/security/sequoia/default.nix
+++ b/pkgs/tools/security/sequoia/default.nix
@@ -9,16 +9,16 @@ assert pythonSupport -> pythonPackages != null;
 
 rustPlatform.buildRustPackage rec {
   pname = "sequoia";
-  version = "0.10.0";
+  version = "0.11.0";
 
   src = fetchFromGitLab {
     owner = "sequoia-pgp";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0gvczghyik56jlnb8cz7jg2l3nbm519gf19g7l5blxci3009v23d";
+    sha256 = "1k0pr3vn77fpfzyvbg7xb4jwm6srsiws9bsd8q7i3hl6j56a880i";
   };
 
-  cargoSha256 = "0dk9sjcbmygbdpwqnah5krli1p9j5hahgiqrca9c0kfpfiwgx62q";
+  cargoSha256 = "15bhg7b88rq8p0bn6y5wwv2l42kqb1qyx2s3kw0r0v0wadf823q3";
 
   nativeBuildInputs = [
     pkgconfig
@@ -87,6 +87,6 @@ rustPlatform.buildRustPackage rec {
     license = licenses.gpl3;
     maintainers = with maintainers; [ minijackson doronbehar ];
     platforms = platforms.all;
-    broken = true;
+    broken = stdenv.targetPlatform.isDarwin;
   };
 }
diff --git a/pkgs/tools/security/sops/default.nix b/pkgs/tools/security/sops/default.nix
index b132066fee5..8aa2e219e7d 100644
--- a/pkgs/tools/security/sops/default.nix
+++ b/pkgs/tools/security/sops/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "sops";
-  version = "3.4.0";
+  version = "3.5.0";
 
   src = fetchFromGitHub {
-    rev = version;
+    rev = "v${version}";
     owner = "mozilla";
     repo = pname;
-    sha256 = "1mrqf9xgv88v919x7gz9l1x70xwvp6cfz3zp9ip1nj2pzn6ixz3d";
+    sha256 = "1515bk0fl0pvdkp402l51gdg63bmqlh89sglss6prc1qqvv5v2xy";
   };
 
-  modSha256 = "13ja8nxycmdjnrnsxdd1qs06x408aqr4im127a6y433pkx2dg7gc";
+  modSha256 = "0vhxd3dschj5i9sig6vpxzbl59cas1qa843akzmjnfjrrafb916y";
 
   meta = with stdenv.lib; {
     homepage = "https://github.com/mozilla/sops";
diff --git a/pkgs/tools/text/kdiff3/default.nix b/pkgs/tools/text/kdiff3/default.nix
index aa53aeb4206..d55ed89e633 100644
--- a/pkgs/tools/text/kdiff3/default.nix
+++ b/pkgs/tools/text/kdiff3/default.nix
@@ -1,7 +1,7 @@
 {
   mkDerivation, lib, fetchurl,
   extra-cmake-modules, kdoctools, wrapGAppsHook,
-  kcrash, kconfig, kinit, kparts
+  kcrash, kconfig, kinit, kparts, kiconthemes
 }:
 
 mkDerivation rec {
@@ -15,7 +15,7 @@ mkDerivation rec {
 
   nativeBuildInputs = [ extra-cmake-modules kdoctools wrapGAppsHook ];
 
-  propagatedBuildInputs = [ kconfig kcrash kinit kparts ];
+  propagatedBuildInputs = [ kconfig kcrash kinit kparts kiconthemes ];
 
   meta = with lib; {
     homepage = http://kdiff3.sourceforge.net/;
diff --git a/pkgs/tools/text/mdbook/default.nix b/pkgs/tools/text/mdbook/default.nix
index 3123d31a7b5..b21523ce863 100644
--- a/pkgs/tools/text/mdbook/default.nix
+++ b/pkgs/tools/text/mdbook/default.nix
@@ -2,16 +2,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "mdbook";
-  version = "0.3.1";
+  version = "0.3.5";
 
   src = fetchFromGitHub {
     owner = "rust-lang-nursery";
     repo = "mdBook";
     rev = "v${version}";
-    sha256 = "0py69267jbs6b7zw191hcs011cm1v58jz8mglqx3ajkffdfl3ghw";
+    sha256 = "0gcrv54iswphzxxkmak1c7pmmpakiri6jk50j4bxrsplwjr76f7n";
   };
 
-  cargoSha256 = "0qwhc42a86jpvjcaysmfcw8kmwa150lmz01flmlg74g6qnimff5m";
+  cargoSha256 = "00grlxjz61vxinr18f28ga6610yjxcq48lr75wmyc5wq317j12fn";
 
   buildInputs = stdenv.lib.optionals stdenv.isDarwin [ CoreServices ];
 
diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix
index 90ce0d2bb2c..238f7b94772 100644
--- a/pkgs/top-level/aliases.nix
+++ b/pkgs/top-level/aliases.nix
@@ -309,6 +309,9 @@ mapAliases ({
   procps-ng = procps; # added 2018-06-08
   pyo3-pack = maturin;
   pulseaudioLight = pulseaudio; # added 2018-04-25
+  phonon-backend-gstreamer = throw "Please use libsForQt5.phonon-backend-gstreamer, as Qt4 support in this package has been removed."; # added 2019-11-22
+  phonon-backend-vlc = throw "Please use libsForQt5.phonon-backend-vlc, as Qt4 support in this package has been removed."; # added 2019-11-22
+  phonon = throw "Please use libsForQt5.phonon, as Qt4 support in this package has been removed."; # added 2019-11-22
   qca-qt5 = libsForQt5.qca-qt5;  # added 2015-12-19
   quake3game = ioquake3; # added 2016-01-14
   qwt6 = libsForQt5.qwt;  # added 2015-12-19
@@ -343,6 +346,7 @@ mapAliases ({
   scim = sc-im; # added 2016-01-22
   scollector = bosun; # added 2018-04-25
   sdlmame = mame; # added 2019-10-30
+  seg3d = throw "seg3d has been removed from nixpkgs (2019-11-10)";
   shared_mime_info = shared-mime-info; # added 2018-02-25
   skrooge2 = skrooge; # added 2017-02-18
   skype = skypeforlinux; # added 2017-07-27
@@ -430,6 +434,7 @@ mapAliases ({
   xpraGtk3 = xpra; # added 2018-09-13
   youtubeDL = youtube-dl;  # added 2014-10-26
   zdfmediathk = mediathekview; # added 2019-01-19
+  gnome_user_docs = gnome-user-docs; # added 2019-11-20
 
   # TODO(ekleog): add ‘wasm’ alias to ‘ocamlPackages.wasm’ after 19.03
   # branch-off
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index c06f380724b..dd71bee627e 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -710,6 +710,8 @@ in
 
   iamy = callPackage ../tools/admin/iamy { };
 
+  azure-cli = callPackage ../tools/admin/azure-cli { python = python3; };
+
   azure-storage-azcopy = callPackage ../development/tools/azcopy { };
 
   azure-vhd-utils  = callPackage ../tools/misc/azure-vhd-utils { };
@@ -2358,10 +2360,6 @@ in
 
   codimd = callPackage ../servers/web-apps/codimd {
     nodejs = nodejs-10_x;
-    yarn2nix = yarn2nix-moretea.override {
-      nodejs = nodejs-10_x;
-      yarn = yarn.override { nodejs = nodejs-10_x; };
-    };
   };
 
   colord = callPackage ../tools/misc/colord { };
@@ -4002,6 +4000,8 @@ in
 
   hylafaxplus = callPackage ../servers/hylafaxplus { };
 
+  hyphen = callPackage ../development/libraries/hyphen { };
+
   i2c-tools = callPackage ../os-specific/linux/i2c-tools { };
 
   i2p = callPackage ../tools/networking/i2p {};
@@ -7399,6 +7399,11 @@ in
 
   yarn2nix-moretea = callPackage ../development/tools/yarn2nix-moretea/yarn2nix { };
 
+  inherit (yarn2nix-moretea)
+    yarn2nix
+    mkYarnPackage
+    fixup_yarn_lock;
+
   yasr = callPackage ../applications/audio/yasr { };
 
   yank = callPackage ../tools/misc/yank { };
@@ -7461,7 +7466,7 @@ in
   zsh-navigation-tools = callPackage ../tools/misc/zsh-navigation-tools { };
 
   zsh-syntax-highlighting = callPackage ../shells/zsh/zsh-syntax-highlighting { };
-  
+
   zsh-fast-syntax-highlighting = callPackage ../shells/zsh/zsh-fast-syntax-highlighting { };
 
   zsh-autosuggestions = callPackage ../shells/zsh/zsh-autosuggestions { };
@@ -13356,9 +13361,7 @@ in
 
   openssl-chacha = callPackage ../development/libraries/openssl/chacha.nix { };
 
-  opensubdiv = callPackage ../development/libraries/opensubdiv {
-    cmake = cmake_2_8;
-  };
+  opensubdiv = callPackage ../development/libraries/opensubdiv { };
 
   open-wbo = callPackage ../applications/science/logic/open-wbo {};
 
@@ -13402,15 +13405,6 @@ in
 
   pdf2xml = callPackage ../development/libraries/pdf2xml {} ;
 
-  phonon = callPackage ../development/libraries/phonon {};
-
-  phonon-backend-gstreamer = callPackage ../development/libraries/phonon/backends/gstreamer.nix {};
-
-  # TODO(@Ma27) get rid of that as soon as QT4 can be dropped
-  phonon-backend-vlc = callPackage ../development/libraries/phonon/backends/vlc.nix {
-    withQt4 = true;
-  };
-
   inherit (callPackage ../development/libraries/physfs { })
     physfs_2
     physfs;
@@ -13659,13 +13653,9 @@ in
 
     openbr = callPackage ../development/libraries/openbr { };
 
-    phonon = callPackage ../development/libraries/phonon {
-      withQt5 = true;
-    };
+    phonon = callPackage ../development/libraries/phonon { };
 
-    phonon-backend-gstreamer = callPackage ../development/libraries/phonon/backends/gstreamer.nix {
-      withQt5 = true;
-    };
+    phonon-backend-gstreamer = callPackage ../development/libraries/phonon/backends/gstreamer.nix { };
 
     phonon-backend-vlc = callPackage ../development/libraries/phonon/backends/vlc.nix { };
 
@@ -16473,17 +16463,26 @@ in
   linuxManualConfig = makeOverridable (callPackage ../os-specific/linux/kernel/manual-config.nix {});
 
   # Derive one of the default .config files
-  linuxConfig = { src, makeTarget ? "defconfig", name ? "kernel.config" }:
-    stdenv.mkDerivation {
-      inherit name src;
-      buildPhase = ''
-        set -x
-        make ${makeTarget}
-      '';
-      installPhase = ''
-        cp .config $out
-      '';
-    };
+  linuxConfig = {
+    src,
+    version ? (builtins.parseDrvName src.name).version,
+    makeTarget ? "defconfig",
+    name ? "kernel.config",
+  }: stdenvNoCC.mkDerivation {
+    inherit name src;
+    depsBuildBuild = [ buildPackages.stdenv.cc ]
+      ++ lib.optionals (lib.versionAtLeast version "4.16") [ buildPackages.bison buildPackages.flex ];
+    buildPhase = ''
+      set -x
+      make \
+        ARCH=${stdenv.hostPlatform.kernelArch} \
+        HOSTCC=${buildPackages.stdenv.cc.targetPrefix}gcc \
+        ${makeTarget}
+    '';
+    installPhase = ''
+      cp .config $out
+    '';
+  };
 
   buildLinux = attrs: callPackage ../os-specific/linux/kernel/generic.nix attrs;
 
@@ -17210,7 +17209,7 @@ in
 
   gohufont = callPackage ../data/fonts/gohufont { };
 
-  gnome_user_docs = callPackage ../data/documentation/gnome-user-docs { };
+  gnome-user-docs = callPackage ../data/documentation/gnome-user-docs { };
 
   gsettings-desktop-schemas = callPackage ../development/libraries/gsettings-desktop-schemas { };
 
@@ -20382,7 +20381,6 @@ in
 
   orca = python3Packages.callPackage ../applications/misc/orca {
     inherit (pkgs) pkgconfig;
-    inherit (gnome3) yelp-tools;
   };
 
   osm2xmap = callPackage ../applications/misc/osm2xmap {
@@ -20937,10 +20935,6 @@ in
     protobuf = protobuf3_1;
   };
 
-  seg3d = callPackage ../applications/graphics/seg3d {
-    wxGTK = wxGTK28.override { unicode = false; };
-  };
-
   sent = callPackage ../applications/misc/sent { };
 
   seq24 = callPackage ../applications/audio/seq24 { };
@@ -22202,6 +22196,8 @@ in
 
   inherit (gnome3) yelp;
 
+  yelp-tools = callPackage ../development/misc/yelp-tools { };
+
   yokadi = python3Packages.callPackage ../applications/misc/yokadi {};
 
   yoshimi = callPackage ../applications/audio/yoshimi { };
diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix
index 38b0d43706a..20cd2965549 100644
--- a/pkgs/top-level/ocaml-packages.nix
+++ b/pkgs/top-level/ocaml-packages.nix
@@ -755,6 +755,8 @@ let
 
     sedlex = callPackage ../development/ocaml-modules/sedlex { };
 
+    sodium = callPackage ../development/ocaml-modules/sodium { };
+
     spelll = callPackage ../development/ocaml-modules/spelll { };
 
     sqlite3EZ = callPackage ../development/ocaml-modules/sqlite3EZ { };
diff --git a/pkgs/top-level/perl-packages.nix b/pkgs/top-level/perl-packages.nix
index 807c0eb1512..e24c3a5f9a4 100644
--- a/pkgs/top-level/perl-packages.nix
+++ b/pkgs/top-level/perl-packages.nix
@@ -1519,7 +1519,7 @@ let
     buildInputs = [ TestFatal ];
     propagatedBuildInputs = [ CatalystActionRenderView CatalystPluginConfigLoader CatalystPluginStaticSimple ConfigGeneral FileChangeNotify FileCopyRecursive ModuleInstall TemplateToolkit ];
     meta = {
-      homepage = http://dev.catalyst.perl.org/;
+      homepage = http://wiki.catalystframework.org/wiki/;
       description = "Catalyst Development Tools";
       license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ];
     };
@@ -1577,7 +1577,7 @@ let
     buildInputs = [ TestFatal TypeTiny ];
     propagatedBuildInputs = [ CGISimple CGIStruct ClassC3AdoptNEXT DataDump HTTPBody ModulePluggable MooseXEmulateClassAccessorFast MooseXGetopt MooseXMethodAttributes MooseXRoleWithOverloading PathClass PerlIOutf8_strict PlackMiddlewareFixMissingBodyInRedirect PlackMiddlewareMethodOverride PlackMiddlewareRemoveRedundantBody PlackMiddlewareReverseProxy PlackTestExternalServer SafeIsa StringRewritePrefix TaskWeaken TextSimpleTable TreeSimpleVisitorFactory URIws ];
     meta = {
-      homepage = http://dev.catalyst.perl.org/;
+      homepage = http://wiki.catalystframework.org/wiki/;
       description = "The Catalyst Framework Runtime";
       license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ];
     };
@@ -1971,7 +1971,7 @@ let
       sha256 = "1c32b30131871e8a7b23f47d8f65d9cdeb87069fa4c221781a03416496f91f16";
     };
     meta = {
-      homepage = "http://github.com/toddr/CDB_File";
+      homepage = "https://github.com/toddr/CDB_File";
       description = "Perl extension for access to cdb databases";
       license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ];
     };
@@ -4995,7 +4995,7 @@ let
       EOF
     '';
     meta = {
-      homepage = http://dbi.perl.org/;
+      homepage = https://dbi.perl.org/;
       description = "Database independent interface for Perl";
       license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ];
     };
@@ -5028,7 +5028,7 @@ let
     buildInputs = [ DBDSQLite TestDeep TestException TestWarn ];
     propagatedBuildInputs = [ ClassAccessorGrouped ClassC3Componentised ConfigAny ContextPreserve DBI DataDumperConcise DataPage ModuleFind PathClass SQLAbstract ScopeGuard SubName namespaceclean ];
     meta = {
-      homepage = http://www.dbix-class.org/;
+      homepage = https://metacpan.org/pod/DBIx::Class;
       description = "Extensible and flexible object <-> relational mapper";
       license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ];
     };
@@ -15444,7 +15444,7 @@ let
     };
     buildInputs = [ TestLongString TestWWWMechanize TestWWWMechanizeCGI ];
     meta = {
-      homepage = http://jaldhar.github.com/REST-Utils;
+      homepage = https://jaldhar.github.io/REST-Utils/;
       description = "Utility functions for REST applications";
       license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ];
     };
@@ -20023,7 +20023,7 @@ let
     outputs = [ "out" ];
     propagatedBuildInputs = [ CGI CSSDOM ConfigGeneral LWP NetIP TermReadKey ];
     meta = {
-      homepage = http://validator.w3.org/checklink;
+      homepage = https://validator.w3.org/checklink;
       description = "A tool to check links and anchors in Web pages or full Web sites";
       license = stdenv.lib.licenses.w3c;
     };
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index d0b22bf777d..21db43dd358 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -271,6 +271,8 @@ in {
 
   azure-eventgrid = callPackage ../development/python-modules/azure-eventgrid { };
 
+  azure-functions-devops-build = callPackage ../development/python-modules/azure-functions-devops-build { };
+
   azure-graphrbac = callPackage ../development/python-modules/azure-graphrbac { };
 
   azure-keyvault = callPackage ../development/python-modules/azure-keyvault { };
@@ -301,6 +303,10 @@ in {
 
   azure-mgmt-advisor = callPackage ../development/python-modules/azure-mgmt-advisor { };
 
+  azure-mgmt-apimanagement = callPackage ../development/python-modules/azure-mgmt-apimanagement { };
+
+  azure-mgmt-appconfiguration = callPackage ../development/python-modules/azure-mgmt-appconfiguration { };
+
   azure-mgmt-applicationinsights = callPackage ../development/python-modules/azure-mgmt-applicationinsights { };
 
   azure-mgmt-authorization = callPackage ../development/python-modules/azure-mgmt-authorization { };
@@ -311,6 +317,8 @@ in {
 
   azure-mgmt-billing = callPackage ../development/python-modules/azure-mgmt-billing { };
 
+  azure-mgmt-botservice = callPackage ../development/python-modules/azure-mgmt-botservice { };
+
   azure-mgmt-cdn = callPackage ../development/python-modules/azure-mgmt-cdn { };
 
   azure-mgmt-cognitiveservices = callPackage ../development/python-modules/azure-mgmt-cognitiveservices { };
@@ -323,6 +331,8 @@ in {
 
   azure-mgmt-containerinstance = callPackage ../development/python-modules/azure-mgmt-containerinstance { };
 
+  azure-mgmt-containerregistry = callPackage ../development/python-modules/azure-mgmt-containerregistry { };
+
   azure-mgmt-containerservice = callPackage ../development/python-modules/azure-mgmt-containerservice { };
 
   azure-mgmt-cosmosdb = callPackage ../development/python-modules/azure-mgmt-cosmosdb { };
@@ -341,6 +351,8 @@ in {
 
   azure-mgmt-devtestlabs = callPackage ../development/python-modules/azure-mgmt-devtestlabs { };
 
+  azure-mgmt-deploymentmanager = callPackage ../development/python-modules/azure-mgmt-deploymentmanager { };
+
   azure-mgmt-dns = callPackage ../development/python-modules/azure-mgmt-dns { };
 
   azure-mgmt-eventgrid = callPackage ../development/python-modules/azure-mgmt-eventgrid { };
@@ -349,6 +361,10 @@ in {
 
   azure-mgmt-hanaonazure = callPackage ../development/python-modules/azure-mgmt-hanaonazure { };
 
+  azure-mgmt-hdinsight = callPackage ../development/python-modules/azure-mgmt-hdinsight { };
+
+  azure-mgmt-imagebuilder = callPackage ../development/python-modules/azure-mgmt-imagebuilder { };
+
   azure-mgmt-iotcentral = callPackage ../development/python-modules/azure-mgmt-iotcentral { };
 
   azure-mgmt-iothub = callPackage ../development/python-modules/azure-mgmt-iothub { };
@@ -357,12 +373,16 @@ in {
 
   azure-mgmt-keyvault = callPackage ../development/python-modules/azure-mgmt-keyvault { };
 
+  azure-mgmt-kusto = callPackage ../development/python-modules/azure-mgmt-kusto { };
+
   azure-mgmt-loganalytics = callPackage ../development/python-modules/azure-mgmt-loganalytics { };
 
   azure-mgmt-logic = callPackage ../development/python-modules/azure-mgmt-logic { };
 
   azure-mgmt-machinelearningcompute = callPackage ../development/python-modules/azure-mgmt-machinelearningcompute { };
 
+  azure-mgmt-managedservices = callPackage ../development/python-modules/azure-mgmt-managedservices { };
+
   azure-mgmt-managementgroups = callPackage ../development/python-modules/azure-mgmt-managementgroups { };
 
   azure-mgmt-managementpartner = callPackage ../development/python-modules/azure-mgmt-managementpartner { };
@@ -377,6 +397,8 @@ in {
 
   azure-mgmt-msi = callPackage ../development/python-modules/azure-mgmt-msi { };
 
+  azure-mgmt-netapp = callPackage ../development/python-modules/azure-mgmt-netapp { };
+
   azure-mgmt-network = callPackage ../development/python-modules/azure-mgmt-network { };
 
   azure-mgmt-notificationhubs = callPackage ../development/python-modules/azure-mgmt-notificationhubs { };
@@ -385,6 +407,8 @@ in {
 
   azure-mgmt-powerbiembedded = callPackage ../development/python-modules/azure-mgmt-powerbiembedded { };
 
+  azure-mgmt-privatedns = callPackage ../development/python-modules/azure-mgmt-privatedns { };
+
   azure-mgmt-rdbms = callPackage ../development/python-modules/azure-mgmt-rdbms { };
 
   azure-mgmt-recoveryservices = callPackage ../development/python-modules/azure-mgmt-recoveryservices { };
@@ -403,6 +427,8 @@ in {
 
   azure-mgmt-search = callPackage ../development/python-modules/azure-mgmt-search { };
 
+  azure-mgmt-security = callPackage ../development/python-modules/azure-mgmt-security { };
+
   azure-mgmt-servicebus = callPackage ../development/python-modules/azure-mgmt-servicebus { };
 
   azure-mgmt-servicefabric = callPackage ../development/python-modules/azure-mgmt-servicefabric { };
@@ -411,6 +437,8 @@ in {
 
   azure-mgmt-sql = callPackage ../development/python-modules/azure-mgmt-sql { };
 
+  azure-mgmt-sqlvirtualmachine = callPackage ../development/python-modules/azure-mgmt-sqlvirtualmachine { };
+
   azure-mgmt-storage = callPackage ../development/python-modules/azure-mgmt-storage { };
 
   azure-mgmt-subscription = callPackage ../development/python-modules/azure-mgmt-subscription { };
@@ -419,6 +447,8 @@ in {
 
   azure-mgmt-web = callPackage ../development/python-modules/azure-mgmt-web { };
 
+  azure-multiapi-storage = callPackage ../development/python-modules/azure-multiapi-storage { };
+
   backports_csv = callPackage ../development/python-modules/backports_csv {};
 
   backports-shutil-which = callPackage ../development/python-modules/backports-shutil-which {};
@@ -770,6 +800,8 @@ in {
 
   mkl-service = callPackage ../development/python-modules/mkl-service { };
 
+  mnist = callPackage ../development/python-modules/mnist { };
+
   monkeyhex = callPackage ../development/python-modules/monkeyhex { };
 
   monty = callPackage ../development/python-modules/monty { };
@@ -954,10 +986,16 @@ in {
 
   pydbus = callPackage ../development/python-modules/pydbus { };
 
-  pydocstyle = callPackage ../development/python-modules/pydocstyle { };
+  pydocstyle =
+    if isPy27 then
+      callPackage ../development/python-modules/pydocstyle/2.nix { }
+    else
+      callPackage ../development/python-modules/pydocstyle { };
 
   pydocumentdb = callPackage ../development/python-modules/pydocumentdb { };
 
+  pydrive = callPackage ../development/python-modules/pydrive { };
+
   pydy = callPackage ../development/python-modules/pydy { };
 
   pyexiv2 = disabledIf isPy3k (toPythonModule (callPackage ../development/python-modules/pyexiv2 {}));
@@ -1263,6 +1301,8 @@ in {
 
   sshpubkeys = callPackage ../development/python-modules/sshpubkeys { };
 
+  sshtunnel = callPackage ../development/python-modules/sshtunnel { };
+
   sslib = callPackage ../development/python-modules/sslib { };
 
   statistics = callPackage ../development/python-modules/statistics { };
@@ -3398,7 +3438,7 @@ in {
   google_api_python_client = let
     google_api_python_client = callPackage ../development/python-modules/google-api-python-client { };
   in if isPy3k then google_api_python_client else
-    # Python 2.7 support was deprecated but is still needed by weboob
+    # Python 2.7 support was deprecated but is still needed by weboob and duplicity
     google_api_python_client.overridePythonAttrs (old: rec {
       version = "1.7.6";
       src = old.src.override {
@@ -3678,7 +3718,10 @@ in {
 
   jupyterhub-ldapauthenticator = callPackage ../development/python-modules/jupyterhub-ldapauthenticator { };
 
-  keyring = callPackage ../development/python-modules/keyring { };
+  keyring = if isPy3k then
+    callPackage ../development/python-modules/keyring { }
+  else
+    callPackage ../development/python-modules/keyring/2.nix { };
 
   keyutils = callPackage ../development/python-modules/keyutils { inherit (pkgs) keyutils; };
 
@@ -4190,7 +4233,10 @@ in {
 
   offtrac = callPackage ../development/python-modules/offtrac { };
 
-  openpyxl = callPackage ../development/python-modules/openpyxl { };
+  openpyxl = if isPy3k then
+    callPackage ../development/python-modules/openpyxl { }
+  else
+    callPackage ../development/python-modules/openpyxl/2.nix { };
 
   opentimestamps = callPackage ../development/python-modules/opentimestamps { };
 
@@ -4514,6 +4560,8 @@ in {
 
   Babel = callPackage ../development/python-modules/Babel { };
 
+  babelgladeextractor = callPackage ../development/python-modules/babelgladeextractor { };
+
   pybfd = callPackage ../development/python-modules/pybfd { };
 
   pybigwig = callPackage ../development/python-modules/pybigwig { };
@@ -5282,6 +5330,8 @@ in {
 
   vsts = callPackage ../development/python-modules/vsts { };
 
+  vsts-cd-manager = callPackage ../development/python-modules/vsts-cd-manager { };
+
   python-vlc = callPackage ../development/python-modules/python-vlc { };
 
   weasyprint = callPackage ../development/python-modules/weasyprint { };
@@ -5500,6 +5550,8 @@ in {
     then callPackage ../development/python-modules/secretstorage { }
     else callPackage ../development/python-modules/secretstorage/2.nix { };
 
+  secure = callPackage ../development/python-modules/secure { };
+
   semantic = callPackage ../development/python-modules/semantic { };
 
   sandboxlib = callPackage ../development/python-modules/sandboxlib { };
@@ -6186,6 +6238,8 @@ in {
 
   jaraco_stream = callPackage ../development/python-modules/jaraco_stream { };
 
+  javaproperties = callPackage ../development/python-modules/javaproperties { };
+
   tempora= callPackage ../development/python-modules/tempora { };
 
   hypchat = callPackage ../development/python-modules/hypchat { };