summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/applications/audio/fluidsynth/default.nix4
-rw-r--r--pkgs/applications/networking/instant-messengers/pidgin-plugins/sipe/default.nix26
-rw-r--r--pkgs/build-support/libredirect/libredirect.c7
-rw-r--r--pkgs/data/misc/iana-etc/default.nix4
-rw-r--r--pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/catalog-legacy-uris.patch10
-rw-r--r--pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/default.nix115
-rw-r--r--pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/docbook-xsl-ns-infinite.patch30
-rw-r--r--pkgs/development/compilers/vala/default.nix53
-rw-r--r--pkgs/development/compilers/vala/disable-graphviz-0.44.3.patch (renamed from pkgs/development/compilers/vala/disable-graphviz-0.44.1.patch)56
-rw-r--r--pkgs/development/interpreters/ruby/default.nix31
-rw-r--r--pkgs/development/interpreters/ruby/rubygems-src.nix8
-rw-r--r--pkgs/development/interpreters/ruby/rubygems/0001-add-post-extract-hook.patch34
-rw-r--r--pkgs/development/interpreters/ruby/rubygems/0002-binaries-with-env-shebang.patch28
-rw-r--r--pkgs/development/interpreters/ruby/rubygems/0003-gem-install-default-to-user.patch26
-rw-r--r--pkgs/development/interpreters/ruby/rubygems/default.nix30
-rw-r--r--pkgs/development/libraries/at-spi2-core/default.nix4
-rw-r--r--pkgs/development/libraries/c-blosc/default.nix4
-rw-r--r--pkgs/development/libraries/gnutls/3.5.10.nix10
-rw-r--r--pkgs/development/libraries/gnutls/3.6.nix22
-rw-r--r--pkgs/development/libraries/gnutls/default.nix (renamed from pkgs/development/libraries/gnutls/generic.nix)52
-rw-r--r--pkgs/development/libraries/gnutls/nix-ssl-cert-file.patch19
-rw-r--r--pkgs/development/libraries/gnutls/no-security-framework.patch126
-rw-r--r--pkgs/development/libraries/libcdio/default.nix4
-rw-r--r--pkgs/development/libraries/libdrm/default.nix4
-rw-r--r--pkgs/development/libraries/libdvdread/default.nix4
-rw-r--r--pkgs/development/libraries/libmbim/default.nix4
-rw-r--r--pkgs/development/libraries/libqmi/default.nix4
-rw-r--r--pkgs/development/libraries/libshout/default.nix4
-rw-r--r--pkgs/development/libraries/libuv/default.nix2
-rw-r--r--pkgs/development/libraries/pcre2/default.nix4
-rw-r--r--pkgs/development/libraries/pixman/default.nix4
-rw-r--r--pkgs/development/python-modules/pychromecast/default.nix4
-rw-r--r--pkgs/development/python-modules/python-slugify/default.nix14
-rw-r--r--pkgs/development/python-modules/pytz/default.nix4
-rw-r--r--pkgs/development/python-modules/pytzdata/default.nix4
-rw-r--r--pkgs/development/tools/misc/binutils/default.nix4
-rw-r--r--pkgs/development/tools/misc/help2man/default.nix4
-rw-r--r--pkgs/os-specific/linux/kernel/common-config.nix1
-rw-r--r--pkgs/os-specific/linux/kernel/manual-config.nix4
-rw-r--r--pkgs/os-specific/linux/shadow/default.nix18
-rw-r--r--pkgs/os-specific/linux/shadow/respect-xml-catalog-files-var.patch30
-rw-r--r--pkgs/os-specific/linux/util-linux/default.nix16
-rw-r--r--pkgs/servers/home-assistant/appdaemon.nix8
-rw-r--r--pkgs/servers/home-assistant/component-packages.nix1566
-rw-r--r--pkgs/servers/home-assistant/default.nix44
-rw-r--r--pkgs/servers/home-assistant/frontend.nix4
-rwxr-xr-xpkgs/servers/home-assistant/parse-requirements.py55
-rw-r--r--pkgs/tools/compression/lz4/default.nix16
-rw-r--r--pkgs/tools/misc/getopt/builder.sh4
-rw-r--r--pkgs/tools/misc/getopt/default.nix20
-rw-r--r--pkgs/tools/networking/network-manager/default.nix18
-rw-r--r--pkgs/tools/networking/network-manager/fix-docs-build.patch11
-rw-r--r--pkgs/tools/text/transifex-client/default.nix2
-rw-r--r--pkgs/top-level/all-packages.nix18
54 files changed, 762 insertions, 1840 deletions
diff --git a/pkgs/applications/audio/fluidsynth/default.nix b/pkgs/applications/audio/fluidsynth/default.nix
index 04b1dafe7e8..404c9cc825e 100644
--- a/pkgs/applications/audio/fluidsynth/default.nix
+++ b/pkgs/applications/audio/fluidsynth/default.nix
@@ -11,8 +11,8 @@ let
       sha256 = "0n75jq3xgq46hfmjkaaxz3gic77shs4fzajq40c8gk043i84xbdh";
     };
     "2" = {
-      fluidsynthVersion = "2.0.4";
-      sha256 = "1v2vji02fbrjgypwb4fw2r90hnfwfbfh3d24j8vjwlbqxhxp16s0";
+      fluidsynthVersion = "2.0.5";
+      sha256 = "0rv0apxbj0cgm8f8sqf5xr6kdi4q58ph92ip6cg716ha0ca5lr8y";
     };
   };
 in
diff --git a/pkgs/applications/networking/instant-messengers/pidgin-plugins/sipe/default.nix b/pkgs/applications/networking/instant-messengers/pidgin-plugins/sipe/default.nix
index 2d3a10cec5e..5b3e09440a6 100644
--- a/pkgs/applications/networking/instant-messengers/pidgin-plugins/sipe/default.nix
+++ b/pkgs/applications/networking/instant-messengers/pidgin-plugins/sipe/default.nix
@@ -1,24 +1,24 @@
-{ stdenv, fetchurl, pidgin, intltool, libxml2, nss, nspr }:
+{ stdenv, fetchurl, pidgin, intltool, libxml2, gmime, nss }:
 
-let version = "1.23.3"; in
-
-stdenv.mkDerivation {
-  name = "pidgin-sipe-${version}";
+stdenv.mkDerivation rec {
+  pname = "pidgin-sipe";
+  version = "1.24.0";
 
   src = fetchurl {
-    url = "mirror://sourceforge/sipe/pidgin-sipe-${version}.tar.gz";
-    sha256 = "0aaiblnagncb0lhdwb8qbps6hxxmyfjg7sdi15lrkl98i3fahg4n";
+    url = "mirror://sourceforge/sipe/${pname}-${version}.tar.gz";
+    sha256 = "04cxprz6dbcsc4n2jg72mr1r9630nhrywn0zim9kwvbgps3wdd9c";
   };
 
+  nativeBuildInputs = [ intltool ];
+  buildInputs = [ pidgin gmime libxml2 nss ];
+  enableParallelBuilding = true;
+
+  postInstall = "find $out -ls; ln -s \$out/lib/purple-2 \$out/share/pidgin-sipe";
+
   meta = with stdenv.lib; {
     description = "SIPE plugin for Pidgin IM";
-    homepage = http://sipe.sourceforge.net/;
+    homepage = "http://sipe.sourceforge.net/";
     license = licenses.gpl2;
     platforms = platforms.linux;
   };
-
-  postInstall = "find $out -ls; ln -s \$out/lib/purple-2 \$out/share/pidgin-sipe";
-
-  buildInputs = [ pidgin intltool libxml2 nss nspr ];
-
 }
diff --git a/pkgs/build-support/libredirect/libredirect.c b/pkgs/build-support/libredirect/libredirect.c
index dcf3a2016bc..655399af58f 100644
--- a/pkgs/build-support/libredirect/libredirect.c
+++ b/pkgs/build-support/libredirect/libredirect.c
@@ -166,10 +166,3 @@ int execv(const char *path, char *const argv[])
     char buf[PATH_MAX];
     return execv_real(rewrite(path, buf), argv);
 }
-
-void *dlopen(const char *filename, int flag)
-{
-    void * (*__dlopen_real) (const char *, int) = dlsym(RTLD_NEXT, "dlopen");
-    char buf[PATH_MAX];
-    return __dlopen_real(rewrite(filename, buf), flag);
-}
diff --git a/pkgs/data/misc/iana-etc/default.nix b/pkgs/data/misc/iana-etc/default.nix
index 59773e34cce..163f230e077 100644
--- a/pkgs/data/misc/iana-etc/default.nix
+++ b/pkgs/data/misc/iana-etc/default.nix
@@ -1,11 +1,11 @@
 { stdenv, fetchzip }:
 
 let
-  version = "20181219";
+  version = "20190504";
 in fetchzip {
   name = "iana-etc-${version}";
   url = "https://github.com/Mic92/iana-etc/releases/download/${version}/iana-etc-${version}.tar.gz";
-  sha256 = "0i3f7shvf1g6dp984w8xfix6id3q5c10b292wz2qw3v5n7h6wkm3";
+  sha256 = "1h61qnb3ybyfivyq8qjnisj4arbnhn8hcwad1bp4iqidjk6rjfv3";
 
   postFetch = ''
     tar -xzvf $downloadedFile --strip-components=1
diff --git a/pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/catalog-legacy-uris.patch b/pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/catalog-legacy-uris.patch
new file mode 100644
index 00000000000..72922eee96c
--- /dev/null
+++ b/pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/catalog-legacy-uris.patch
@@ -0,0 +1,10 @@
+--- a/catalog.xml
++++ b/catalog.xml
+@@ -5,4 +5,7 @@
+   <rewriteSystem systemIdStartString="http://cdn.docbook.org/release/xsl@suffix@/current/" rewritePrefix="./"/>
+   <rewriteURI uriStartString="http://cdn.docbook.org/release/xsl@suffix@/@version@/" rewritePrefix="./"/>
+   <rewriteSystem systemIdStartString="http://cdn.docbook.org/release/xsl@suffix@/@version@/" rewritePrefix="./"/>
++  <!-- legacy URIs -->
++  <rewriteURI uriStartString="http://docbook.sourceforge.net/release/xsl@legacySuffix@/current/" rewritePrefix="./"/>
++  <rewriteSystem systemIdStartString="http://docbook.sourceforge.net/release/xsl@legacySuffix@/current/" rewritePrefix="./"/>
+ </catalog>
diff --git a/pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/default.nix b/pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/default.nix
index ef7b1f93d74..5297d5dbd5d 100644
--- a/pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/default.nix
+++ b/pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/default.nix
@@ -1,66 +1,77 @@
-{ lib, stdenv, fetchurl, fetchpatch, findXMLCatalogs, writeScriptBin, ruby, bash }:
+{ lib, stdenv, substituteAll, fetchurl, fetchpatch, findXMLCatalogs, writeScriptBin, ruby, bash }:
 
 let
 
-  common = { pname, sha256, patches ? [] }: let self = stdenv.mkDerivation rec {
-    name = "${pname}-1.79.1";
-
-    src = fetchurl {
-      url = "mirror://sourceforge/docbook/${name}.tar.bz2";
-      inherit sha256;
-    };
-
-    inherit patches;
-
-    propagatedBuildInputs = [ findXMLCatalogs ];
-
-    dontBuild = true;
-
-    installPhase = ''
-      dst=$out/share/xml/${pname}
-      mkdir -p $dst
-      rm -rf RELEASE* README* INSTALL TODO NEWS* BUGS install.sh svn* tools log Makefile tests extensions webhelp
-      mv * $dst/
-
-      # Backwards compatibility. Will remove eventually.
-      mkdir -p $out/xml/xsl
-      ln -s $dst $out/xml/xsl/docbook
-    '';
-
-    passthru.dbtoepub = writeScriptBin "dbtoepub"
-      ''
-        #!${bash}/bin/bash
-        exec -a dbtoepub ${ruby}/bin/ruby ${self}/share/xml/${pname}/epub/bin/dbtoepub "$@"
+  common = { pname, sha256, suffix ? "" }: let
+    legacySuffix = if suffix == "-nons" then "" else "-ns";
+    self = stdenv.mkDerivation rec {
+      inherit pname;
+      version = "1.79.2";
+
+      src = fetchurl {
+        url = "https://github.com/docbook/xslt10-stylesheets/releases/download/release%2F${version}/docbook-xsl${suffix}-${version}.tar.bz2";
+        inherit sha256;
+      };
+
+      patches = [
+        # Prevent a potential stack overflow
+        # https://github.com/docbook/xslt10-stylesheets/pull/37
+        (fetchpatch {
+          url = https://src.fedoraproject.org/rpms/docbook-style-xsl/raw/e3ae7a97ed1d185594dd35954e1a02196afb205a/f/docbook-style-xsl-non-recursive-string-subst.patch;
+          sha256 = "0lrjjg5kpwwmbhkxzz6i5zmimb6lsvrrdhzc2qgjmb3r6jnsmii3";
+          stripLen = "1";
+        })
+
+        # Add legacy sourceforge.net URIs to the catalog
+        (substituteAll {
+          src = ./catalog-legacy-uris.patch;
+          inherit legacySuffix suffix version;
+        })
+      ];
+
+      propagatedBuildInputs = [ findXMLCatalogs ];
+
+      dontBuild = true;
+
+      installPhase = ''
+        dst=$out/share/xml/${pname}
+        mkdir -p $dst
+        rm -rf RELEASE* README* INSTALL TODO NEWS* BUGS install.sh tools Makefile tests extensions webhelp
+        mv * $dst/
+
+        # Backwards compatibility. Will remove eventually.
+        mkdir -p $out/xml/xsl
+        ln -s $dst $out/xml/xsl/docbook
+
+        # More backwards compatibility
+        ln -s $dst $out/share/xml/docbook-xsl${legacySuffix}
       '';
 
-    meta = {
-      homepage = http://wiki.docbook.org/topic/DocBookXslStylesheets;
-      description = "XSL stylesheets for transforming DocBook documents into HTML and various other formats";
-      maintainers = [ lib.maintainers.eelco ];
-      platforms = lib.platforms.all;
+      passthru.dbtoepub = writeScriptBin "dbtoepub"
+        ''
+          #!${bash}/bin/bash
+          exec -a dbtoepub ${ruby}/bin/ruby ${self}/share/xml/${pname}/epub/bin/dbtoepub "$@"
+        '';
+
+      meta = {
+        homepage = http://wiki.docbook.org/topic/DocBookXslStylesheets;
+        description = "XSL stylesheets for transforming DocBook documents into HTML and various other formats";
+        maintainers = [ lib.maintainers.eelco ];
+        platforms = lib.platforms.all;
+      };
     };
-  }; in self;
+  in self;
 
 in {
 
-  docbook_xsl = common {
-    pname = "docbook-xsl";
-    sha256 = "0s59lihif2fr7rznckxr2kfyrvkirv76r1zvidp9b5mj28p4apvj";
-
-    patches = [(fetchpatch {
-      name = "potential-infinite-template-recursion.patch";
-      url = "https://src.fedoraproject.org/cgit/rpms/docbook-style-xsl.git/"
-          + "plain/docbook-style-xsl-non-recursive-string-subst.patch?id=bf9e5d16fd";
-      sha256 = "1pfb468bsj3j879ip0950waih0r1s6rzfbm2p70glbz0g3903p7h";
-      stripLen = "1";
-    })];
-
+  docbook-xsl-nons = common {
+    pname = "docbook-xsl-nons";
+    suffix = "-nons";
+    sha256 = "00i1hdyxim8jymv2dz68ix3wbs5w6isxm8ijb03qk3vs1g59x2zf";
   };
 
-  docbook_xsl_ns = common {
+  docbook-xsl-ns = common {
     pname = "docbook-xsl-ns";
-    sha256 = "170ggf5dgjar65kkn5n33kvjr3pdinpj66nnxfx8b2avw0k91jin";
-
-    patches = [ ./docbook-xsl-ns-infinite.patch ];
+    sha256 = "0wd33z41kdsybyx3ay21w6bdlmgpd9kyn3mr5y520lsf8km28r9i";
   };
 }
diff --git a/pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/docbook-xsl-ns-infinite.patch b/pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/docbook-xsl-ns-infinite.patch
deleted file mode 100644
index 5729f9b43c8..00000000000
--- a/pkgs/data/sgml+xml/stylesheets/xslt/docbook-xsl/docbook-xsl-ns-infinite.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-Description: Remove infinite recursion
-Attribute: docbook5_xsl
-Version: 1.79.1
-URL: https://github.com/NixOS/nixpkgs/issues/39090
-diff -ru a/lib/lib.xsl b/lib/lib.xsl
---- a/lib/lib.xsl	2015-12-26 15:15:37.000000000 -0800
-+++ b/lib/lib.xsl	2018-03-22 11:52:45.311949264 -0700
-@@ -11,8 +11,10 @@
- 
-      ******************************************************************** -->
- <xsl:stylesheet exclude-result-prefixes="d"
--                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:d="http://docbook.org/ns/docbook"
--version="1.0">
-+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-+                xmlns:d="http://docbook.org/ns/docbook"
-+                xmlns:str="http://exslt.org/strings"
-+                version="1.0">
- 
- <xsl:template name="dot.count">
-   <!-- Returns the number of "." characters in a string -->
-@@ -58,6 +61,9 @@
-   <xsl:param name="replacement"/>
- 
-   <xsl:choose>
-+    <xsl:when test="function-available('str:replace')">
-+      <xsl:value-of select="str:replace($string, string($target), string($replacement))"/>
-+    </xsl:when>
-     <xsl:when test="contains($string, $target)">
-       <xsl:variable name="rest">
-         <xsl:call-template name="string.subst">
diff --git a/pkgs/development/compilers/vala/default.nix b/pkgs/development/compilers/vala/default.nix
index dfd40c92ecf..65a3f19102e 100644
--- a/pkgs/development/compilers/vala/default.nix
+++ b/pkgs/development/compilers/vala/default.nix
@@ -4,14 +4,12 @@
 
 let
   generic = lib.makeOverridable ({
-    major, minor, sha256,
+    version, sha256,
     extraNativeBuildInputs ? [],
     extraBuildInputs ? [],
     withGraphviz ? false
   }:
   let
-    atLeast = lib.versionAtLeast "${major}.${minor}";
-
     # Patches from the openembedded-core project to build vala without graphviz
     # support. We need to apply an additional patch to allow building when the
     # header file isn't available at all, but that patch (./gvc-compat.patch)
@@ -43,23 +41,23 @@ let
         # We've reverted the addition of the "--disable-valadoc" option
         # and then applied the following patch.
         #     0.42.4: https://github.com/openembedded/openembedded-core/raw/f2b4f9ec6f44dced7f88df849cca68961419eeb8/meta/recipes-devtools/vala/vala/disable-graphviz.patch
-        "0.44" = ./disable-graphviz-0.44.1.patch;
+        "0.44" = ./disable-graphviz-0.44.3.patch;
 
-      }.${major} or (throw "no graphviz patch for this version of vala");
+      }.${lib.versions.majorMinor version} or (throw "no graphviz patch for this version of vala");
 
-    disableGraphviz = atLeast "0.38" && !withGraphviz;
+    disableGraphviz = lib.versionAtLeast version "0.38" && !withGraphviz;
 
   in stdenv.mkDerivation rec {
-    name = "vala-${version}";
-    version = "${major}.${minor}";
+    pname = "vala";
+    inherit version;
 
     setupHook = substituteAll {
       src = ./setup-hook.sh;
-      apiVersion = major;
+      apiVersion = lib.versions.majorMinor version;
     };
 
     src = fetchurl {
-      url = "mirror://gnome/sources/vala/${major}/${name}.tar.xz";
+      url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
       inherit sha256;
     };
 
@@ -78,19 +76,27 @@ let
 
     nativeBuildInputs = [
       pkgconfig flex bison libxslt
-    ] ++ lib.optional (stdenv.isDarwin && (atLeast "0.38")) expat
+    ] ++ lib.optional (stdenv.isDarwin && (lib.versionAtLeast version "0.38")) expat
       ++ lib.optional disableGraphviz autoreconfHook # if we changed our ./configure script, need to reconfigure
       ++ extraNativeBuildInputs;
 
     buildInputs = [
       glib libiconv libintl
-    ] ++ lib.optional (atLeast "0.38" && withGraphviz) graphviz
+    ] ++ lib.optional (lib.versionAtLeast version "0.38" && withGraphviz) graphviz
       ++ extraBuildInputs;
 
     enableParallelBuilding = true;
 
     doCheck = false; # fails, requires dbus daemon
 
+    # Wait for PR #59372
+    #passthru = {
+    #  updateScript = gnome3.updateScript {
+    #    attrPath = "${pname}_${lib.versions.major version}_${lib.versions.minor version}";
+    #    packageName = pname;
+    #  };
+    #};
+
     meta = with stdenv.lib; {
       description = "Compiler for GObject type system";
       homepage = https://wiki.gnome.org/Projects/Vala;
@@ -102,34 +108,29 @@ let
 
 in rec {
   vala_0_36 = generic {
-    major   = "0.36";
-    minor   = "18";
-    sha256  = "0csb9skgy663y05kl813dsarzjbfcdsmx5fvz13p8gas3hycciq9";
+    version = "0.36.19";
+    sha256 = "05si2f4zjvq0q3wqfh1wxdq20jy1xqxq2skqh8vfh2jyp355lwar";
   };
 
   vala_0_38 = generic {
-    major   = "0.38";
-    minor   = "10";
+    version = "0.38.10";
     sha256  = "1rdwwqs973qv225v8b5izcgwvqn56jxgr4pa3wxxbliar3aww5sw";
     extraNativeBuildInputs = [ autoconf ] ++ lib.optional stdenv.isDarwin libtool;
   };
 
   vala_0_40 = generic {
-    major   = "0.40";
-    minor   = "14";
-    sha256  = "0llid9b9cgjcrcclc0pw2skkssb7br7b2clq9cql3p14dl94gki0";
+    version = "0.40.15";
+    sha256 = "0mfayli159yyw6abjf6sgq41j54mr3nspg25b1kxhypcz0scjm19";
   };
 
   vala_0_42 = generic {
-    major   = "0.42";
-    minor   = "6";
-    sha256  = "14024gvs23q323fmd62hqd8jiypaxbjjvamyd782ixbhxmpz8x1p";
+    version = "0.42.7";
+    sha256 = "029ksbsdpl581wzy570kj4kkw8b4bizgh494c051zsvkwck55p83";
   };
 
   vala_0_44 = generic {
-    major   = "0.44";
-    minor   = "1";
-    sha256 = "1qiglkgymws6a3m8xz1v8b3na165ywx2dbipp3bdg134bi0w3a4n";
+    version = "0.44.3";
+    sha256 = "1sgas7z6y9r2mf4pxry3fx2awdnzn3vlg2sxd3hqpy2a90ib8lw5";
   };
 
   vala = vala_0_44;
diff --git a/pkgs/development/compilers/vala/disable-graphviz-0.44.1.patch b/pkgs/development/compilers/vala/disable-graphviz-0.44.3.patch
index 2752aa1e205..fc971c26492 100644
--- a/pkgs/development/compilers/vala/disable-graphviz-0.44.1.patch
+++ b/pkgs/development/compilers/vala/disable-graphviz-0.44.3.patch
@@ -19,17 +19,17 @@ index f70234759..b3d6c3833 100644
 -	--enable-valadoc \
 -	--enable-unversioned \
 -	$(NULL)
- 
+
  if ENABLE_UNVERSIONED
  aclocaldir = $(datadir)/aclocal
 diff --git a/configure.ac b/configure.ac
-index 16ebd1f81..cf23db4b8 100644
+index 504db13aa..622397747 100644
 --- a/configure.ac
 +++ b/configure.ac
-@@ -156,10 +156,11 @@ PKG_CHECK_MODULES(GMODULE, gmodule-2.0 >= $GLIB_REQUIRED)
- AC_SUBST(GMODULE_CFLAGS)
+@@ -157,10 +157,11 @@ AC_SUBST(GMODULE_CFLAGS)
  AC_SUBST(GMODULE_LIBS)
- 
+
+ AC_ARG_WITH(cgraph, AS_HELP_STRING([--with-cgraph], [Required flag for cross-compilation to define capability of graphviz]), [], with_cgraph=check)
 -AC_ARG_ENABLE(valadoc, AS_HELP_STRING([--disable-valadoc], [Disable valadoc]), enable_valadoc=$enableval, enable_valadoc=yes)
 -if test x$enable_valadoc = xyes; then
 +AC_ARG_ENABLE(graphviz, AS_HELP_STRING([--disable-graphviz], [Disable graphviz usage for valadoc]), enable_graphviz=$enableval, enable_graphviz=yes)
@@ -40,14 +40,14 @@ index 16ebd1f81..cf23db4b8 100644
  	cgraph_tmp_LIBADD="$LIBADD"
  	cgraph_tmp_CFLAGS="$CFLAGS"
  	LIBADD="$LIBADD $LIBGVC_LIBS"
-@@ -186,8 +187,8 @@ if test x$enable_valadoc = xyes; then
+@@ -198,8 +199,8 @@ if test x$enable_valadoc = xyes; then
  	LIBADD="$cgraph_tmp_LIBADD"
  	CFLAGS="$cgraph_tmp_CFLAGS"
  fi
 +AM_CONDITIONAL(ENABLE_GRAPHVIZ, test x$enable_graphviz = xyes)
  AM_CONDITIONAL(HAVE_CGRAPH, test "$have_cgraph" = "yes")
 -AM_CONDITIONAL(ENABLE_VALADOC, test x$enable_valadoc = xyes)
- 
+
  AC_PATH_PROG([XSLTPROC], [xsltproc], :)
  AM_CONDITIONAL(HAVE_XSLTPROC, test "$XSLTPROC" != :)
 diff --git a/doc/Makefile.am b/doc/Makefile.am
@@ -55,14 +55,14 @@ index d2684a0e0..b343c7c10 100644
 --- a/doc/Makefile.am
 +++ b/doc/Makefile.am
 @@ -6,16 +6,11 @@ SUBDIRS = \
- 
+
  dist_man_MANS = \
  	valac.1 \
 +	valadoc.1 \
  	vala-gen-introspect.1 \
  	vapigen.1 \
  	$(NULL)
- 
+
 -if ENABLE_VALADOC
 -dist_man_MANS += \
 -	valadoc.1 \
@@ -74,7 +74,7 @@ index d2684a0e0..b343c7c10 100644
  	valadoc.h2m \
 @@ -24,11 +19,7 @@ EXTRA_DIST = \
  	$(NULL)
- 
+
  if HAVE_HELP2MAN
 -if ENABLE_VALADOC
  manpages: valac.1 valadoc.1 vala-gen-introspect.1 vapigen.1
@@ -83,7 +83,7 @@ index d2684a0e0..b343c7c10 100644
 -endif
  	@rm $^
  	$(MAKE) $(AM_MAKEFLAGS) $^
- 
+
 @@ -37,13 +28,11 @@ valac.1:
  		--include $(srcdir)/valac.h2m \
  		--libtool --no-info \
@@ -108,18 +108,18 @@ index d2684a0e0..b343c7c10 100644
  	cd $(DESTDIR)$(man1dir) && $(LN_S) -f vala-gen-introspect@PACKAGE_SUFFIX@.1 vala-gen-introspect.1
  	cd $(DESTDIR)$(man1dir) && $(LN_S) -f vapigen@PACKAGE_SUFFIX@.1 vapigen.1
  endif
- 
- 
+
+
 -if ENABLE_VALADOC
  COMMON_VALADOCFLAGS = \
  	--force \
  	--verbose \
 @@ -150,7 +136,6 @@ internal-apis/valadoc: $(valadoc_VALASOURCES) internal-apis/codegen
  	@touch $@
- 
+
  internal-api-docs: internal-apis/gee internal-apis/vala internal-apis/ccode internal-apis/codegen internal-apis/valadoc
 -endif
- 
+
  clean-local:
  	rm -rf $(builddir)/internal-apis
 diff --git a/libvaladoc/Makefile.am b/libvaladoc/Makefile.am
@@ -147,7 +147,7 @@ index 7456fb836..107338e91 100644
  	html/htmlmarkupwriter.vala \
  	html/htmlrenderer.vala \
  	$(NULL)
- 
+
 +if ENABLE_GRAPHVIZ
 +libvaladoc_la_VALASOURCES += \
 +	charts/chart.vala \
@@ -177,23 +177,23 @@ index 7456fb836..107338e91 100644
  		$(filter %.vala %.c,$^)
  	touch $@
 @@ -207,6 +214,9 @@ nodist_pkgconfig_DATA = valadoc@PACKAGE_SUFFIX@.pc
- 
+
  valadoc@PACKAGE_SUFFIX@.pc: valadoc.pc
  	cp $< $@
 +if !ENABLE_GRAPHVIZ
 +	sed -i "s/libgvc //g" $@
 +endif
- 
+
  vapidir = $(datadir)/vala/vapi
  dist_vapi_DATA = valadoc@PACKAGE_SUFFIX@.vapi
 @@ -214,6 +224,9 @@ nodist_vapi_DATA = valadoc@PACKAGE_SUFFIX@.deps
- 
+
  valadoc@PACKAGE_SUFFIX@.deps: valadoc.deps
  	cp $< $@
 +if !ENABLE_GRAPHVIZ
 +	sed -i "s/libgvc//g" $@
 +endif
- 
+
  EXTRA_DIST = \
  	$(libvaladoc_la_VALASOURCES) \
 diff --git a/libvaladoc/html/basicdoclet.vala b/libvaladoc/html/basicdoclet.vala
@@ -211,20 +211,20 @@ index 46578c28f..f6ce7097c 100644
 +#endif
  	protected ErrorReporter reporter;
  	protected string package_list_link = "../index.html";
- 
+
 @@ -120,7 +124,9 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
  		this.linker = new LinkHelper ();
- 
+
  		_renderer = new HtmlRenderer (settings, this.linker, this.cssresolver);
 +#if HAVE_GRAPHVIZ
  		this.image_factory = new SimpleChartFactory (settings, linker);
 +#endif
  	}
- 
- 
+
+
 @@ -1025,6 +1031,7 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
  	}
- 
+
  	protected void write_image_block (Api.Node element) {
 +#if HAVE_GRAPHVIZ
  		if (element is Class || element is Interface || element is Struct) {
@@ -236,7 +236,7 @@ index 46578c28f..f6ce7097c 100644
  		}
 +#endif
  	}
- 
+
  	public void write_namespace_content (Namespace node, Api.Node? parent) {
 diff --git a/libvaladoc/html/htmlmarkupwriter.vala b/libvaladoc/html/htmlmarkupwriter.vala
 index 5aa4afdea..e79b0b8f5 100644
@@ -245,7 +245,7 @@ index 5aa4afdea..e79b0b8f5 100644
 @@ -51,12 +51,16 @@ public class Valadoc.Html.MarkupWriter : Valadoc.MarkupWriter {
  		}
  	}
- 
+
 +#if HAVE_GRAPHVIZ
  	public unowned MarkupWriter add_usemap (Charts.Chart chart) {
  		string? buf = (string?) chart.write_buffer ("cmapx");
@@ -256,6 +256,6 @@ index 5aa4afdea..e79b0b8f5 100644
 +#else
 +	public unowned MarkupWriter add_usemap (void* chart) {
 +#endif
- 
+
  		return this;
  	}
diff --git a/pkgs/development/interpreters/ruby/default.nix b/pkgs/development/interpreters/ruby/default.nix
index ed2bf99d197..6f333e13c2b 100644
--- a/pkgs/development/interpreters/ruby/default.nix
+++ b/pkgs/development/interpreters/ruby/default.nix
@@ -11,14 +11,7 @@ let
   opString = lib.optionalString;
   patchSet = import ./rvm-patchsets.nix { inherit fetchFromGitHub; };
   config = import ./config.nix { inherit fetchFromSavannah; };
-  rubygemsSrc = import ./rubygems-src.nix { inherit fetchurl; };
-  rubygemsPatch = fetchpatch {
-    url = "https://github.com/zimbatm/rubygems/compare/v2.6.6...v2.6.6-nix.patch";
-    sha256 = "0297rdb1m6v75q8665ry9id1s74p9305dv32l95ssf198liaihhd";
-  };
-  unpackdir = obj:
-    lib.removeSuffix ".tgz"
-      (lib.removeSuffix ".tar.gz" obj.name);
+  rubygems = import ./rubygems { inherit stdenv lib fetchurl fetchpatch; };
 
   # Contains the ruby version heuristics
   rubyVersion = import ./ruby-version.nix { inherit lib; };
@@ -49,8 +42,10 @@ let
       , buildEnv, bundler, bundix
       , libiconv, libobjc, libunwind, Foundation
       }:
-      let rubySrc =
-        if useRailsExpress then fetchFromGitHub {
+      stdenv.mkDerivation rec {
+        name = "ruby-${version}";
+
+        src = if useRailsExpress then fetchFromGitHub {
           owner  = "ruby";
           repo   = "ruby";
           rev    = tag;
@@ -59,16 +54,6 @@ let
           url = "https://cache.ruby-lang.org/pub/ruby/${ver.majMin}/ruby-${ver}.tar.gz";
           sha256 = sha256.src;
         };
-      in
-      stdenv.mkDerivation rec {
-        name = "ruby-${version}";
-
-        srcs = [ rubySrc rubygemsSrc ];
-        sourceRoot =
-          if useRailsExpress then
-            rubySrc.name
-          else
-            unpackdir rubySrc;
 
         # Have `configure' avoid `/usr/bin/nroff' in non-chroot builds.
         NROFF = if docSupport then "${groff}/bin/nroff" else null;
@@ -100,10 +85,7 @@ let
           })."${ver.majMinTiny}";
 
         postUnpack = ''
-          cp -r ${unpackdir rubygemsSrc} ${sourceRoot}/rubygems
-          pushd ${sourceRoot}/rubygems
-          patch -p1 < ${rubygemsPatch}
-          popd
+          cp -r ${rubygems} $sourceRoot/rubygems
         '';
 
         postPatch = if atLeast25 then ''
@@ -146,6 +128,7 @@ let
         postInstall = ''
           # Update rubygems
           pushd rubygems
+          chmod +w bundler/bundler.gemspec
           ${buildRuby} setup.rb --destdir $GEM_HOME
           popd
 
diff --git a/pkgs/development/interpreters/ruby/rubygems-src.nix b/pkgs/development/interpreters/ruby/rubygems-src.nix
deleted file mode 100644
index 4e5793f1113..00000000000
--- a/pkgs/development/interpreters/ruby/rubygems-src.nix
+++ /dev/null
@@ -1,8 +0,0 @@
-{ fetchurl
-, version ? "2.7.7"
-, sha256 ? "1jsmmd31j8j066b83lin4bbqz19jhrirarzb41f3sjhfdjiwkcjc"
-}:
-fetchurl {
-  url = "https://rubygems.org/rubygems/rubygems-${version}.tgz";
-  sha256 = sha256;
-}
diff --git a/pkgs/development/interpreters/ruby/rubygems/0001-add-post-extract-hook.patch b/pkgs/development/interpreters/ruby/rubygems/0001-add-post-extract-hook.patch
new file mode 100644
index 00000000000..84d1d52409e
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/rubygems/0001-add-post-extract-hook.patch
@@ -0,0 +1,34 @@
+From a6485cfcdf51ff8be452980f93cebfea97f34dec Mon Sep 17 00:00:00 2001
+From: zimbatm <zimbatm@zimbatm.com>
+Date: Wed, 21 Sep 2016 09:32:34 +0100
+Subject: [PATCH 1/3] add post-extract hook
+
+Allows nix to execute scripts just after the gem extraction
+---
+ lib/rubygems/installer.rb | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb
+index d26b1e88..bf18fb7f 100644
+--- a/lib/rubygems/installer.rb
++++ b/lib/rubygems/installer.rb
+@@ -848,7 +848,15 @@ TEXT
+   # Ensures that files can't be installed outside the gem directory.
+ 
+   def extract_files
+-    @package.extract_files gem_dir
++    ret = @package.extract_files gem_dir
++    if ENV['NIX_POST_EXTRACT_FILES_HOOK']
++      puts
++      puts "running NIX_POST_EXTRACT_FILES_HOOK #{ENV['NIX_POST_EXTRACT_FILES_HOOK']} #{gem_dir}"
++      system(ENV['NIX_POST_EXTRACT_FILES_HOOK'], gem_dir.to_s)
++      puts "running NIX_POST_EXTRACT_FILES_HOOK done"
++      puts
++    end
++    ret
+   end
+ 
+   ##
+-- 
+2.21.0
+
diff --git a/pkgs/development/interpreters/ruby/rubygems/0002-binaries-with-env-shebang.patch b/pkgs/development/interpreters/ruby/rubygems/0002-binaries-with-env-shebang.patch
new file mode 100644
index 00000000000..d6eba67e106
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/rubygems/0002-binaries-with-env-shebang.patch
@@ -0,0 +1,28 @@
+From 2e1328bcdddd35e557eabdff83ac07f3591dc693 Mon Sep 17 00:00:00 2001
+From: zimbatm <zimbatm@zimbatm.com>
+Date: Wed, 21 Sep 2016 19:37:05 +0100
+Subject: [PATCH 2/3] binaries with env shebang
+
+By default, don't point to the absolute ruby derivation path. As a user
+installing a gem in the home, it would freeze the selected ruby version
+to the currently-installed ruby derivation.
+---
+ lib/rubygems/dependency_installer.rb | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb
+index 34620860..00ab31d9 100644
+--- a/lib/rubygems/dependency_installer.rb
++++ b/lib/rubygems/dependency_installer.rb
+@@ -18,7 +18,7 @@ class Gem::DependencyInstaller
+   extend Gem::Deprecate
+ 
+   DEFAULT_OPTIONS = { # :nodoc:
+-    :env_shebang         => false,
++    :env_shebang         => true,
+     :document            => %w[ri],
+     :domain              => :both, # HACK dup
+     :force               => false,
+-- 
+2.21.0
+
diff --git a/pkgs/development/interpreters/ruby/rubygems/0003-gem-install-default-to-user.patch b/pkgs/development/interpreters/ruby/rubygems/0003-gem-install-default-to-user.patch
new file mode 100644
index 00000000000..138d432c820
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/rubygems/0003-gem-install-default-to-user.patch
@@ -0,0 +1,26 @@
+From d69249d0ff210316121b44d971ddd2439b1bc393 Mon Sep 17 00:00:00 2001
+From: zimbatm <zimbatm@zimbatm.com>
+Date: Wed, 21 Sep 2016 09:40:39 +0100
+Subject: [PATCH 3/3] gem install default to user
+
+Default to not installing gems to the read-only system derivation.
+---
+ lib/rubygems/path_support.rb | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/rubygems/path_support.rb b/lib/rubygems/path_support.rb
+index ed680d65..749b9ea6 100644
+--- a/lib/rubygems/path_support.rb
++++ b/lib/rubygems/path_support.rb
+@@ -23,7 +23,7 @@ class Gem::PathSupport
+   # hashtable, or defaults to ENV, the system environment.
+   #
+   def initialize(env)
+-    @home = env["GEM_HOME"] || Gem.default_dir
++    @home = env["GEM_HOME"] || Gem.user_dir
+ 
+     if File::ALT_SEPARATOR
+       @home = @home.gsub(File::ALT_SEPARATOR, File::SEPARATOR)
+-- 
+2.21.0
+
diff --git a/pkgs/development/interpreters/ruby/rubygems/default.nix b/pkgs/development/interpreters/ruby/rubygems/default.nix
new file mode 100644
index 00000000000..db28cbe28fa
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/rubygems/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, lib, fetchurl, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  name = "rubygems";
+  version = "3.0.3";
+
+  src = fetchurl {
+    url = "https://rubygems.org/rubygems/rubygems-${version}.tgz";
+    sha256 = "0b6b9ads8522804xv8b8498gqwsv4qawv13f81kyc7g966y7lfmy";
+  };
+
+  patches = [
+    ./0001-add-post-extract-hook.patch
+    ./0002-binaries-with-env-shebang.patch
+    ./0003-gem-install-default-to-user.patch
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    cp -r . $out
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Package management framework for Ruby";
+    homepage = https://rubygems.org/;
+    license = with licenses; [ mit /* or */ ruby ];
+    maintainers = with maintainers; [ qyliss zimbatm ];
+  };
+}
diff --git a/pkgs/development/libraries/at-spi2-core/default.nix b/pkgs/development/libraries/at-spi2-core/default.nix
index 0fc50f2c641..e5d5313eeb1 100644
--- a/pkgs/development/libraries/at-spi2-core/default.nix
+++ b/pkgs/development/libraries/at-spi2-core/default.nix
@@ -19,11 +19,11 @@
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "at-spi2-core";
-  version = "2.32.0";
+  version = "2.32.1";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
-    sha256 = "083j1v7kdjrpjsv1b9dl3d8xqj39jyp4cfn8i9gbbm7q2g93b923";
+    sha256 = "0lqd7gsl471v6538iighkvb21gjglcb9pklvas32rjpsxcvsjaiw";
   };
 
   outputs = [ "out" "dev" ];
diff --git a/pkgs/development/libraries/c-blosc/default.nix b/pkgs/development/libraries/c-blosc/default.nix
index 4c28ca9f2c7..3603667fbf2 100644
--- a/pkgs/development/libraries/c-blosc/default.nix
+++ b/pkgs/development/libraries/c-blosc/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   name = "c-blosc-${version}";
-  version = "1.16.2";
+  version = "1.16.3";
 
   src = fetchFromGitHub {
     owner = "Blosc";
     repo = "c-blosc";
     rev = "v${version}";
-    sha256 = "19wb699rb5bn6h9qhw1m18m2w77lws7r50vxpgrvggnl27mvm3xc";
+    sha256 = "1c58wkf34rp5wh9qp09zdk7zcfn037sk56p4xq1g0vapbnglv603";
   };
 
   buildInputs = [ cmake ];
diff --git a/pkgs/development/libraries/gnutls/3.5.10.nix b/pkgs/development/libraries/gnutls/3.5.10.nix
deleted file mode 100644
index a44e2b04ed7..00000000000
--- a/pkgs/development/libraries/gnutls/3.5.10.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-{ callPackage, fetchurl, libunistring, ... } @ args:
-
-callPackage ./generic.nix (args // rec {
-  version = "3.5.10";
-
-  src = fetchurl {
-    url = "mirror://gnupg/gnutls/v3.5/gnutls-${version}.tar.xz";
-    sha256 = "17apwvdkkazh5w8z8mbanpj2yj8s2002qwy46wz4v3akpa33wi5g";
-  };
-})
diff --git a/pkgs/development/libraries/gnutls/3.6.nix b/pkgs/development/libraries/gnutls/3.6.nix
deleted file mode 100644
index b05624ee0b2..00000000000
--- a/pkgs/development/libraries/gnutls/3.6.nix
+++ /dev/null
@@ -1,22 +0,0 @@
-{ callPackage, fetchurl, ... } @ args:
-
-callPackage ./generic.nix (args // rec {
-  version = "3.6.7";
-
-  src = fetchurl {
-    url = "mirror://gnupg/gnutls/v3.6/gnutls-${version}.tar.xz";
-    sha256 = "1ql8l6l5bxks2pgpwb1602zc0j6ivhpy27hdfc49h8xgbanhjd2v";
-  };
-
-  # Skip some tests:
-  #  - pkgconfig: building against the result won't work before installing (3.5.11)
-  #  - fastopen: no idea; it broke between 3.6.2 and 3.6.3 (3437fdde6 in particular)
-  #  - trust-store: default trust store path (/etc/ssl/...) is missing in sandbox (3.5.11)
-  #  - psk-file: no idea; it broke between 3.6.3 and 3.6.4
-  # Change p11-kit test to use pkg-config to find p11-kit
-  postPatch = ''
-    sed '2iexit 77' -i tests/{pkgconfig,fastopen}.sh
-    sed '/^void doit(void)/,/^{/ s/{/{ exit(77);/' -i tests/{trust-store,psk-file}.c
-    sed 's:/usr/lib64/pkcs11/ /usr/lib/pkcs11/ /usr/lib/x86_64-linux-gnu/pkcs11/:`pkg-config --variable=p11_module_path p11-kit-1`:' -i tests/p11-kit-trust.sh
-  '';
-})
diff --git a/pkgs/development/libraries/gnutls/generic.nix b/pkgs/development/libraries/gnutls/default.nix
index 086c0560cc4..8a92390ca30 100644
--- a/pkgs/development/libraries/gnutls/generic.nix
+++ b/pkgs/development/libraries/gnutls/default.nix
@@ -1,33 +1,52 @@
-{ config, lib, stdenv, zlib, lzo, libtasn1, nettle, pkgconfig, lzip
-, perl, gmp, autogen, libidn, p11-kit, libiconv
+{ config, lib, stdenv, fetchurl, zlib, lzo, libtasn1, nettle, pkgconfig, lzip
+, perl, gmp, autoconf, autogen, automake, libidn, p11-kit, libiconv
+, unbound, dns-root-data, gettext
 , guileBindings ? config.gnutls.guile or false, guile
 , tpmSupport ? false, trousers, which, nettools, libunistring
-, unbound, dns-root-data, gettext
-
-# Version dependent args
-, version, src, patches ? [], postPatch ? "", nativeBuildInputs ? []
-, buildInputs ? []
-, ...}:
+, withSecurity ? false, Security  # darwin Security.framework
+}:
 
 assert guileBindings -> guile != null;
 let
+  version = "3.6.7";
+
   # XXX: Gnulib's `test-select' fails on FreeBSD:
   # http://hydra.nixos.org/build/2962084/nixlog/1/raw .
   doCheck = !stdenv.isFreeBSD && !stdenv.isDarwin && lib.versionAtLeast version "3.4"
       && stdenv.buildPlatform == stdenv.hostPlatform;
+
+  inherit (stdenv.hostPlatform) isDarwin;
 in
+
 stdenv.mkDerivation {
   name = "gnutls-${version}";
+  inherit version;
 
-  inherit src patches;
+  src = fetchurl {
+    url = "mirror://gnupg/gnutls/v3.6/gnutls-${version}.tar.xz";
+    sha256 = "1ql8l6l5bxks2pgpwb1602zc0j6ivhpy27hdfc49h8xgbanhjd2v";
+  };
 
   outputs = [ "bin" "dev" "out" "man" "devdoc" ];
   outputInfo = "devdoc";
 
+  patches = [ ./nix-ssl-cert-file.patch ]
+    # Disable native add_system_trust.
+    ++ lib.optional (isDarwin && !withSecurity) ./no-security-framework.patch;
+
+  # Skip some tests:
+  #  - pkgconfig: building against the result won't work before installing (3.5.11)
+  #  - fastopen: no idea; it broke between 3.6.2 and 3.6.3 (3437fdde6 in particular)
+  #  - trust-store: default trust store path (/etc/ssl/...) is missing in sandbox (3.5.11)
+  #  - psk-file: no idea; it broke between 3.6.3 and 3.6.4
+  # Change p11-kit test to use pkg-config to find p11-kit
   postPatch = lib.optionalString (lib.versionAtLeast version "3.4") ''
-    sed '2iecho "name constraints tests skipped due to datefudge problems"\nexit 0' \
-      -i tests/cert-tests/name-constraints
-  '' + postPatch;
+    sed '2iecho "name constraints tests skipped due to datefudge problems"\nexit 0' -i tests/cert-tests/name-constraints
+  '' + lib.optionalString (lib.versionAtLeast version "3.6") ''
+    sed '2iexit 77' -i tests/{pkgconfig,fastopen}.sh
+    sed '/^void doit(void)/,/^{/ s/{/{ exit(77);/' -i tests/{trust-store,psk-file}.c
+    sed 's:/usr/lib64/pkcs11/ /usr/lib/pkcs11/ /usr/lib/x86_64-linux-gnu/pkcs11/:`pkg-config --variable=p11_module_path p11-kit-1`:' -i tests/p11-kit-trust.sh
+  '';
 
   preConfigure = "patchShebangs .";
   configureFlags =
@@ -42,11 +61,12 @@ stdenv.mkDerivation {
   enableParallelBuilding = true;
 
   buildInputs = [ lzo lzip libtasn1 libidn p11-kit zlib gmp autogen libunistring unbound gettext libiconv ]
+    ++ lib.optional (isDarwin && withSecurity) Security
     ++ lib.optional (tpmSupport && stdenv.isLinux) trousers
-    ++ lib.optional guileBindings guile
-    ++ buildInputs;
+    ++ lib.optional guileBindings guile;
 
-  nativeBuildInputs = [ perl pkgconfig ] ++ nativeBuildInputs
+  nativeBuildInputs = [ perl pkgconfig ]
+    ++ lib.optionals (isDarwin && !withSecurity) [ autoconf automake ]
     ++ lib.optionals doCheck [ which nettools ];
 
   propagatedBuildInputs = [ nettle ];
@@ -54,7 +74,7 @@ stdenv.mkDerivation {
   inherit doCheck;
 
   # Fixup broken libtool and pkgconfig files
-  preFixup = lib.optionalString (!stdenv.isDarwin) ''
+  preFixup = lib.optionalString (!isDarwin) ''
     sed ${lib.optionalString tpmSupport "-e 's,-ltspi,-L${trousers}/lib -ltspi,'"} \
         -e 's,-lz,-L${zlib.out}/lib -lz,' \
         -e 's,-L${gmp.dev}/lib,-L${gmp.out}/lib,' \
diff --git a/pkgs/development/libraries/gnutls/nix-ssl-cert-file.patch b/pkgs/development/libraries/gnutls/nix-ssl-cert-file.patch
new file mode 100644
index 00000000000..90d1e85ee8c
--- /dev/null
+++ b/pkgs/development/libraries/gnutls/nix-ssl-cert-file.patch
@@ -0,0 +1,19 @@
+allow overriding system trust store location via $NIX_SSL_CERT_FILE
+
+diff --git a/lib/system/certs.c b/lib/system/certs.c
+index 611c645..6ef6edb 100644
+--- a/lib/system/certs.c
++++ b/lib/system/certs.c
+@@ -369,6 +369,11 @@ gnutls_x509_trust_list_add_system_trust(gnutls_x509_trust_list_t list,
+ 					unsigned int tl_flags,
+ 					unsigned int tl_vflags)
+ {
+-	return add_system_trust(list, tl_flags|GNUTLS_TL_NO_DUPLICATES, tl_vflags);
++	tl_flags = tl_flags|GNUTLS_TL_NO_DUPLICATES;
++	const char *file = secure_getenv("NIX_SSL_CERT_FILE");
++	return file
++		? gnutls_x509_trust_list_add_trust_file(
++			list, file, NULL/*CRL*/, GNUTLS_X509_FMT_PEM, tl_flags, tl_vflags)
++		: add_system_trust(list, tl_flags, tl_vflags);
+ }
+ 
diff --git a/pkgs/development/libraries/gnutls/no-security-framework.patch b/pkgs/development/libraries/gnutls/no-security-framework.patch
new file mode 100644
index 00000000000..7f5808e5053
--- /dev/null
+++ b/pkgs/development/libraries/gnutls/no-security-framework.patch
@@ -0,0 +1,126 @@
+commit 9bcdde1ab9cdff6a4471f9a926dd488ab70c7247
+Author: Daiderd Jordan <daiderd@gmail.com>
+Date:   Mon Apr 22 16:38:27 2019 +0200
+
+    Revert "gnutls_x509_trust_list_add_system_trust: Add macOS keychain support"
+    
+    This reverts commit c0eb46d3463cd21b3f822ac377ff37f067f66b8d.
+
+diff --git a/configure.ac b/configure.ac
+index 8ad597bfd..8d14f26cd 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -781,7 +781,7 @@ dnl auto detect https://lists.gnu.org/archive/html/help-gnutls/2012-05/msg00004.
+ AC_ARG_WITH([default-trust-store-file],
+   [AS_HELP_STRING([--with-default-trust-store-file=FILE],
+     [use the given file default trust store])], with_default_trust_store_file="$withval",
+-  [if test "$build" = "$host" && test x$with_default_trust_store_pkcs11 = x && test x$with_default_trust_store_dir = x && test x$have_macosx = x;then
++  [if test "$build" = "$host" && test x$with_default_trust_store_pkcs11 = x && test x$with_default_trust_store_dir = x;then
+   for i in \
+     /etc/ssl/ca-bundle.pem \
+     /etc/ssl/certs/ca-certificates.crt \
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index fe9cf63a2..745695f7e 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -203,10 +203,6 @@ if WINDOWS
+ thirdparty_libadd += -lcrypt32
+ endif
+ 
+-if MACOSX
+-libgnutls_la_LDFLAGS += -framework Security -framework CoreFoundation
+-endif
+-
+ libgnutls_la_LIBADD += $(thirdparty_libadd)
+ 
+ # C++ library
+diff --git a/lib/system/certs.c b/lib/system/certs.c
+index 611c645e0..912b0aa5e 100644
+--- a/lib/system/certs.c
++++ b/lib/system/certs.c
+@@ -44,12 +44,6 @@
+ # endif
+ #endif
+ 
+-#ifdef __APPLE__
+-# include <CoreFoundation/CoreFoundation.h>
+-# include <Security/Security.h>
+-# include <Availability.h>
+-#endif
+-
+ /* System specific function wrappers for certificate stores.
+  */
+ 
+@@ -276,72 +270,6 @@ int add_system_trust(gnutls_x509_trust_list_t list, unsigned int tl_flags,
+ 
+ 	return r;
+ }
+-#elif defined(__APPLE__) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070
+-static
+-int osstatus_error(status)
+-{
+-	CFStringRef err_str = SecCopyErrorMessageString(status, NULL);
+-	_gnutls_debug_log("Error loading system root certificates: %s\n",
+-			  CFStringGetCStringPtr(err_str, kCFStringEncodingUTF8));
+-	CFRelease(err_str);
+-	return GNUTLS_E_FILE_ERROR;
+-}
+-
+-static
+-int add_system_trust(gnutls_x509_trust_list_t list, unsigned int tl_flags,
+-		     unsigned int tl_vflags)
+-{
+-	int r=0;
+-
+-	SecTrustSettingsDomain domain[] = { kSecTrustSettingsDomainUser,
+-					    kSecTrustSettingsDomainAdmin,
+-					    kSecTrustSettingsDomainSystem };
+-	for (size_t d=0; d<sizeof(domain)/sizeof(*domain); d++) {
+-		CFArrayRef certs = NULL;
+-		OSStatus status = SecTrustSettingsCopyCertificates(domain[d],
+-								   &certs);
+-		if (status == errSecNoTrustSettings)
+-			continue;
+-		if (status != errSecSuccess)
+-			return osstatus_error(status);
+-
+-		int cert_count = CFArrayGetCount(certs);
+-		for (int i=0; i<cert_count; i++) {
+-			SecCertificateRef cert =
+-				(void*)CFArrayGetValueAtIndex(certs, i);
+-			CFDataRef der;
+-			status = SecItemExport(cert, kSecFormatX509Cert, 0,
+-					       NULL, &der);
+-			if (status != errSecSuccess) {
+-				CFRelease(der);
+-				CFRelease(certs);
+-				return osstatus_error(status);
+-			}
+-
+-			if (gnutls_x509_trust_list_add_trust_mem(list,
+-								 &(gnutls_datum_t) {
+-									.data = (void*)CFDataGetBytePtr(der),
+-									.size = CFDataGetLength(der),
+-								 },
+-								 NULL,
+-			                                         GNUTLS_X509_FMT_DER,
+-								 tl_flags,
+-								 tl_vflags) > 0)
+-				r++;
+-			CFRelease(der);
+-		}
+-		CFRelease(certs);
+-	}
+-
+-#ifdef DEFAULT_BLACKLIST_FILE
+-	ret = gnutls_x509_trust_list_remove_trust_file(list, DEFAULT_BLACKLIST_FILE, GNUTLS_X509_FMT_PEM);
+-	if (ret < 0) {
+-		_gnutls_debug_log("Could not load blacklist file '%s'\n", DEFAULT_BLACKLIST_FILE);
+-	}
+-#endif
+-
+-	return r;
+-}
+ #else
+ 
+ #define add_system_trust(x,y,z) GNUTLS_E_UNIMPLEMENTED_FEATURE
diff --git a/pkgs/development/libraries/libcdio/default.nix b/pkgs/development/libraries/libcdio/default.nix
index 531ca4102af..9c3132a3e63 100644
--- a/pkgs/development/libraries/libcdio/default.nix
+++ b/pkgs/development/libraries/libcdio/default.nix
@@ -1,11 +1,11 @@
 { stdenv, fetchurl, libcddb, pkgconfig, ncurses, help2man, libiconv, Carbon, IOKit }:
 
 stdenv.mkDerivation rec {
-  name = "libcdio-2.0.0";
+  name = "libcdio-2.1.0";
 
   src = fetchurl {
     url = "mirror://gnu/libcdio/${name}.tar.bz2";
-    sha256 = "0jr8ppdm80c533nzmrpz3iffnpc6nhvsria1di9f4jg1l19a03fd";
+    sha256 = "0avi6apv5ydjy6b9c3z9a46rvp5i57qyr09vr7x4nndxkmcfjl45";
   };
 
   postPatch = ''
diff --git a/pkgs/development/libraries/libdrm/default.nix b/pkgs/development/libraries/libdrm/default.nix
index a8daf575416..7415aa754e7 100644
--- a/pkgs/development/libraries/libdrm/default.nix
+++ b/pkgs/development/libraries/libdrm/default.nix
@@ -1,11 +1,11 @@
 { stdenv, fetchurl, pkgconfig, libpthreadstubs, libpciaccess, valgrind-light }:
 
 stdenv.mkDerivation rec {
-  name = "libdrm-2.4.97";
+  name = "libdrm-2.4.98";
 
   src = fetchurl {
     url = "https://dri.freedesktop.org/libdrm/${name}.tar.bz2";
-    sha256 = "08yimlp6jir1rs5ajgdx74xa5qdzcqahpdzdk0rmkmhh7vdcrl3p";
+    sha256 = "150qdzsm2nx6dfacc75rx53anzsc6m31nhxidf5xxax3mk6fvq4b";
   };
 
   outputs = [ "out" "dev" "bin" ];
diff --git a/pkgs/development/libraries/libdvdread/default.nix b/pkgs/development/libraries/libdvdread/default.nix
index 95815f4abcd..5f0f0827503 100644
--- a/pkgs/development/libraries/libdvdread/default.nix
+++ b/pkgs/development/libraries/libdvdread/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   name = "libdvdread-${version}";
-  version = "6.0.0";
+  version = "6.0.1";
 
   src = fetchurl {
     url = "http://get.videolan.org/libdvdread/${version}/${name}.tar.bz2";
-    sha256 = "0dgr23fzcjhb7ck54xkr9zmf4jcq3ph0dz3fbyvla1c6ni9ijfxk";
+    sha256 = "1gfmh8ii3s2fw1c8vn57piwxc0smd3va4h7xgp9s8g48cc04zki8";
   };
 
   buildInputs = [libdvdcss];
diff --git a/pkgs/development/libraries/libmbim/default.nix b/pkgs/development/libraries/libmbim/default.nix
index 021cfbb1bb4..406b88ea8c1 100644
--- a/pkgs/development/libraries/libmbim/default.nix
+++ b/pkgs/development/libraries/libmbim/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "libmbim";
-  version = "1.18.0";
+  version = "1.18.2";
 
   src = fetchurl {
     url = "https://www.freedesktop.org/software/libmbim/${pname}-${version}.tar.xz";
-    sha256 = "10mjjy860aakfd3h1yaj9l1jw816amrpwmyqlx37j21xv0l03x3c";
+    sha256 = "0s4jsfsydp2vykv7lnimalp9i680aas1qcx7zdpjiic64b5g48vp";
   };
 
   outputs = [ "out" "dev" "man" ];
diff --git a/pkgs/development/libraries/libqmi/default.nix b/pkgs/development/libraries/libqmi/default.nix
index 083b5c8bc85..8a239048390 100644
--- a/pkgs/development/libraries/libqmi/default.nix
+++ b/pkgs/development/libraries/libqmi/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "libqmi";
-  version = "1.22.2";
+  version = "1.22.4";
 
   src = fetchurl {
     url = "https://www.freedesktop.org/software/libqmi/${pname}-${version}.tar.xz";
-    sha256 = "09w20dsgr16bgbqw5ds7r6j2s6ihwyalh9zpbjhcn7cvm0afbwgi";
+    sha256 = "1wgrrb9vb3myl8xgck8ik86876ycbg8crylybs3ssi21vrxqwnsc";
   };
 
   outputs = [ "out" "dev" "devdoc" ];
diff --git a/pkgs/development/libraries/libshout/default.nix b/pkgs/development/libraries/libshout/default.nix
index ef023640621..3753a070c63 100644
--- a/pkgs/development/libraries/libshout/default.nix
+++ b/pkgs/development/libraries/libshout/default.nix
@@ -4,11 +4,11 @@
 # need pkgconfig so that libshout installs ${out}/lib/pkgconfig/shout.pc
 
 stdenv.mkDerivation rec {
-  name = "libshout-2.4.1";
+  name = "libshout-2.4.2";
 
   src = fetchurl {
     url = "http://downloads.xiph.org/releases/libshout/${name}.tar.gz";
-    sha256 = "0kgjpf8jkgyclw11nilxi8vyjk4s8878x23qyxnvybbgqbgbib7k";
+    sha256 = "0qgwarqp2p6jy3zadds6dzj8z1jfb2mbwc3lsdlidf527h0a86ym";
   };
 
   outputs = [ "out" "dev" "doc" ];
diff --git a/pkgs/development/libraries/libuv/default.nix b/pkgs/development/libraries/libuv/default.nix
index 4fdfc855642..78abbe7392c 100644
--- a/pkgs/development/libraries/libuv/default.nix
+++ b/pkgs/development/libraries/libuv/default.nix
@@ -17,6 +17,8 @@ stdenv.mkDerivation rec {
       "spawn_setuid_fails" "spawn_setgid_fails" "fs_chown" # user namespaces
       "getaddrinfo_fail" "getaddrinfo_fail_sync"
       "threadpool_multiple_event_loops" # times out on slow machines
+      "get_passwd" # passed on NixOS but failed on other Linuxes
+      "tcp_writealot" # times out sometimes
     ] ++ stdenv.lib.optionals stdenv.isDarwin [
         # Sometimes: timeout (no output), failed uv_listen. Someone
         # should report these failures to libuv team. There tests should
diff --git a/pkgs/development/libraries/pcre2/default.nix b/pkgs/development/libraries/pcre2/default.nix
index 89649f0bf30..f080de82ddc 100644
--- a/pkgs/development/libraries/pcre2/default.nix
+++ b/pkgs/development/libraries/pcre2/default.nix
@@ -2,10 +2,10 @@
 
 stdenv.mkDerivation rec {
   name = "pcre2-${version}";
-  version = "10.32";
+  version = "10.33";
   src = fetchurl {
     url = "https://ftp.pcre.org/pub/pcre/${name}.tar.bz2";
-    sha256 = "0bkwp2czcckvvbdls7b331cad11rxsm020aqhrbz84z8bp68k7pj";
+    sha256 = "1anqi7vpbfzag7imccrc6di1zl5rl63ab7rfpmajpw6d1kzlsl9m";
   };
 
   configureFlags = [
diff --git a/pkgs/development/libraries/pixman/default.nix b/pkgs/development/libraries/pixman/default.nix
index 639d6266b5a..2a033304b66 100644
--- a/pkgs/development/libraries/pixman/default.nix
+++ b/pkgs/development/libraries/pixman/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   name = "pixman-${version}";
-  version = "0.38.0";
+  version = "0.38.4";
 
   src = fetchurl {
     url = "mirror://xorg/individual/lib/${name}.tar.bz2";
-    sha256 = "1a1nnkjv0rqdj26847r0saly0kzckjfp4y3ly30bvpjxi7vy6s5p";
+    sha256 = "0l0m48lnmdlmnaxn2021qi5cj366d9fzfjxkqgcj9bs14pxbgaw4";
   };
 
   nativeBuildInputs = [ pkgconfig ];
diff --git a/pkgs/development/python-modules/pychromecast/default.nix b/pkgs/development/python-modules/pychromecast/default.nix
index 7d0f7da5d96..ff4059d862e 100644
--- a/pkgs/development/python-modules/pychromecast/default.nix
+++ b/pkgs/development/python-modules/pychromecast/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "PyChromecast";
-  version = "3.2.0";
+  version = "3.2.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0jksh7rb4880kni8iw3hb5q9dm5gi40zmx4r2fwydnpfhadhq5af";
+    sha256 = "e1e71e30581e1021b6bdd50a80cfcdcfa86d9082171fdd719c5ca6a77b8a9699";
   };
 
   disabled = !isPy3k;
diff --git a/pkgs/development/python-modules/python-slugify/default.nix b/pkgs/development/python-modules/python-slugify/default.nix
index 39950b97f6c..699d370af75 100644
--- a/pkgs/development/python-modules/python-slugify/default.nix
+++ b/pkgs/development/python-modules/python-slugify/default.nix
@@ -1,17 +1,19 @@
-{ stdenv, fetchPypi, buildPythonPackage, unidecode, regex, isPy3k }:
+{ stdenv, fetchPypi, buildPythonPackage, python, text-unidecode }:
 
 buildPythonPackage rec {
     pname = "python-slugify";
-    version = "2.0.1";
+    version = "3.0.2";
 
     src = fetchPypi {
       inherit pname version;
-      sha256 = "d3e034397236020498e677a35e5c05dcc6ba1624b608b9ef7e5fe3090ccbd5a8";
+      sha256 = "57163ffb345c7e26063435a27add1feae67fa821f1ef4b2f292c25847575d758";
     };
-    doCheck = !isPy3k;
-    # (only) on python3 unittest loader (loadTestsFromModule) fails
 
-    propagatedBuildInputs = [ unidecode regex ];
+    propagatedBuildInputs = [ text-unidecode ];
+
+    checkPhase = ''
+      ${python.interpreter} test.py
+    '';
 
     meta = with stdenv.lib; {
       homepage = https://github.com/un33k/python-slugify;
diff --git a/pkgs/development/python-modules/pytz/default.nix b/pkgs/development/python-modules/pytz/default.nix
index 0de3e989c24..534bb1618bc 100644
--- a/pkgs/development/python-modules/pytz/default.nix
+++ b/pkgs/development/python-modules/pytz/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pytz";
-  version = "2018.9";
+  version = "2019.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d5f05e487007e29e03409f9398d074e158d920d36eb82eaf66fb1136b0c5374c";
+    sha256 = "d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141";
   };
 
   checkPhase = ''
diff --git a/pkgs/development/python-modules/pytzdata/default.nix b/pkgs/development/python-modules/pytzdata/default.nix
index 9fb057800db..6fa4eb6387d 100644
--- a/pkgs/development/python-modules/pytzdata/default.nix
+++ b/pkgs/development/python-modules/pytzdata/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pytzdata";
-  version = "2018.9";
+  version = "2019.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "dddaaf4f1717820a6fdcac94057e03c1a15b3829a44d9eaf19988917977db408";
+    sha256 = "f0469062f799c66480fcc7eae69a8270dc83f0e6522c0e70db882d6bd708d378";
   };
 
   # No tests
diff --git a/pkgs/development/tools/misc/binutils/default.nix b/pkgs/development/tools/misc/binutils/default.nix
index 0c46ce20d0e..0bead8d65f7 100644
--- a/pkgs/development/tools/misc/binutils/default.nix
+++ b/pkgs/development/tools/misc/binutils/default.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, buildPackages
-, fetchurl, zlib, autoreconfHook
+, fetchurl, zlib, autoreconfHook, gettext
 # Enabling all targets increases output size to a multiple.
 , withAllTargets ? false, libbfd, libopcodes
 , enableShared ? true
@@ -78,7 +78,7 @@ stdenv.mkDerivation rec {
   ] ++ lib.optionals stdenv.targetPlatform.isiOS [
     autoreconfHook
   ];
-  buildInputs = [ zlib ];
+  buildInputs = [ zlib gettext ];
 
   inherit noSysDirs;
 
diff --git a/pkgs/development/tools/misc/help2man/default.nix b/pkgs/development/tools/misc/help2man/default.nix
index f544f48e57c..264f2aec44d 100644
--- a/pkgs/development/tools/misc/help2man/default.nix
+++ b/pkgs/development/tools/misc/help2man/default.nix
@@ -1,11 +1,11 @@
 { stdenv, fetchurl, perlPackages, gettext }:
 
 stdenv.mkDerivation rec {
-  name = "help2man-1.47.9";
+  name = "help2man-1.47.10";
 
   src = fetchurl {
     url = "mirror://gnu/help2man/${name}.tar.xz";
-    sha256 = "1li3b6vifhysc2ckx0d7krwrqb8bk0kzn3k18ff1963hjc1qp7nz";
+    sha256 = "1yywli520246aba12vpgj7bhr1r13swad3xm49a0cygqcgywnwgk";
   };
 
   nativeBuildInputs = [ gettext perlPackages.LocaleGettext ];
diff --git a/pkgs/os-specific/linux/kernel/common-config.nix b/pkgs/os-specific/linux/kernel/common-config.nix
index 5711e019f95..2f091b95cfc 100644
--- a/pkgs/os-specific/linux/kernel/common-config.nix
+++ b/pkgs/os-specific/linux/kernel/common-config.nix
@@ -184,6 +184,7 @@ let
       VGA_SWITCHEROO         = yes; # Hybrid graphics support
       DRM_GMA600             = yes;
       DRM_GMA3600            = yes;
+      DRM_VMWGFX_FBCON       = yes;
       # necessary for amdgpu polaris support
       DRM_AMD_POWERPLAY = whenBetween "4.5" "4.9" yes;
       # (experimental) amdgpu support for verde and newer chipsets
diff --git a/pkgs/os-specific/linux/kernel/manual-config.nix b/pkgs/os-specific/linux/kernel/manual-config.nix
index 1512f47ade4..6210523d62a 100644
--- a/pkgs/os-specific/linux/kernel/manual-config.nix
+++ b/pkgs/os-specific/linux/kernel/manual-config.nix
@@ -198,6 +198,10 @@ let
         cp $buildRoot/{.config,Module.symvers} $dev/lib/modules/${modDirVersion}/build
         make modules_prepare $makeFlags "''${makeFlagsArray[@]}" O=$dev/lib/modules/${modDirVersion}/build
 
+        # For reproducibility, removes accidental leftovers from a `cc1` call
+        # from a `try-run` call from the Makefile
+        rm -f $dev/lib/modules/${modDirVersion}/build/.[0-9]*.d
+
         # Keep some extra files on some arches (powerpc, aarch64)
         for f in arch/powerpc/lib/crtsavres.o arch/arm64/kernel/ftrace-mod.o; do
           if [ -f "$buildRoot/$f" ]; then
diff --git a/pkgs/os-specific/linux/shadow/default.nix b/pkgs/os-specific/linux/shadow/default.nix
index 8c778e72b70..6b808f0d6a6 100644
--- a/pkgs/os-specific/linux/shadow/default.nix
+++ b/pkgs/os-specific/linux/shadow/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchpatch, fetchFromGitHub, autoreconfHook, libxslt, libxml2
-, docbook_xml_dtd_412, docbook_xsl, gnome-doc-utils, flex, bison
+, docbook_xml_dtd_45, docbook_xsl, gnome-doc-utils, flex, bison
 , pam ? null, glibcCross ? null
 }:
 
@@ -30,12 +30,21 @@ stdenv.mkDerivation rec {
 
   buildInputs = stdenv.lib.optional (pam != null && stdenv.isLinux) pam;
   nativeBuildInputs = [autoreconfHook libxslt libxml2
-    docbook_xml_dtd_412 docbook_xsl gnome-doc-utils flex bison
+    docbook_xml_dtd_45 docbook_xsl gnome-doc-utils flex bison
     ];
 
   patches =
     [ ./keep-path.patch
+      # Obtain XML resources from XML catalog (patch adapted from gtk-doc)
+      ./respect-xml-catalog-files-var.patch
       dots_in_usernames
+
+      # Check for correct DocBook version during configure
+      # https://github.com/shadow-maint/shadow/pull/162
+      (fetchpatch {
+        url = "https://github.com/shadow-maint/shadow/commit/47797ca6654f79e3de854a6c69db2bdb0516db08.patch";
+        sha256 = "1zn8f6fd26gj5sh60099xqc7mjwgbbkkic5xfigvxa4b90vm8fd7";
+      })
     ];
 
   # The nix daemon often forbids even creating set[ug]id files.
@@ -52,11 +61,6 @@ stdenv.mkDerivation rec {
   preConfigure = ''
     export ac_cv_func_setpgrp_void=yes
     export shadow_cv_logdir=/var/log
-    (
-    head -n -1 "${docbook_xml_dtd_412}/xml/dtd/docbook/catalog.xml"
-    tail -n +3 "${docbook_xsl}/share/xml/docbook-xsl/catalog.xml"
-    ) > xmlcatalog
-    configureFlags="$configureFlags --with-xml-catalog=$PWD/xmlcatalog ";
   '';
 
   configureFlags = [
diff --git a/pkgs/os-specific/linux/shadow/respect-xml-catalog-files-var.patch b/pkgs/os-specific/linux/shadow/respect-xml-catalog-files-var.patch
new file mode 100644
index 00000000000..7d922eae71f
--- /dev/null
+++ b/pkgs/os-specific/linux/shadow/respect-xml-catalog-files-var.patch
@@ -0,0 +1,30 @@
+diff --git a/acinclude.m4 b/acinclude.m4
+index dd01f165..e23160ee 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -46,9 +46,21 @@ AC_DEFUN([JH_CHECK_XML_CATALOG],
+     ifelse([$3],,,[$3
+ ])dnl
+   else
+-    AC_MSG_RESULT([not found])
+-    ifelse([$4],,
+-       [AC_MSG_ERROR([could not find ifelse([$2],,[$1],[$2]) in XML catalog])],
+-       [$4])
++    jh_check_xml_catalog_saved_ifs="$IFS"
++    IFS=' '
++    for f in $XML_CATALOG_FILES; do
++      if [[ -f "$f" ]] && \
++        AC_RUN_LOG([$XMLCATALOG --noout "$f" "$1" >&2]); then
++        jh_found_xmlcatalog=true
++        AC_MSG_RESULT([found])
++        ifelse([$3],,,[$3])
++        break
++      fi
++    done
++    IFS="$jh_check_xml_catalog_saved_ifs"
++    if ! $jh_found_xmlcatalog; then
++      AC_MSG_RESULT([not found])
++      ifelse([$4],,[AC_MSG_ERROR([could not find ifelse([$2],,[$1],[$2]) in XML catalog])],[$4])
++    fi
+   fi
+ ])
diff --git a/pkgs/os-specific/linux/util-linux/default.nix b/pkgs/os-specific/linux/util-linux/default.nix
index 3e94ba5c1ea..0962bd91132 100644
--- a/pkgs/os-specific/linux/util-linux/default.nix
+++ b/pkgs/os-specific/linux/util-linux/default.nix
@@ -5,14 +5,14 @@ let
   version = lib.concatStringsSep "." ([ majorVersion ]
     ++ lib.optional (patchVersion != "") patchVersion);
   majorVersion = "2.33";
-  patchVersion = "1";
+  patchVersion = "2";
 
 in stdenv.mkDerivation rec {
   name = "util-linux-${version}";
 
   src = fetchurl {
     url = "mirror://kernel/linux/utils/util-linux/v${majorVersion}/${name}.tar.xz";
-    sha256 = "08ggvgrb59m5jbq29950xxirsgv4xj3nwsc7vf82nyg1nvrxjjy1";
+    sha256 = "15yf2dh4jd1kg6066hydlgdhhs2j3na13qld8yx30qngqvmfh6v3";
   };
 
   patches = [
@@ -41,15 +41,19 @@ in stdenv.mkDerivation rec {
     "--disable-use-tty-group"
     "--enable-fs-paths-default=/run/wrappers/bin:/run/current-system/sw/bin:/sbin"
     "--disable-makeinstall-setuid" "--disable-makeinstall-chown"
+    "--disable-su" # provided by shadow
     (lib.withFeature (ncurses != null) "ncursesw")
     (lib.withFeature (systemd != null) "systemd")
     (lib.withFeatureAs (systemd != null)
-       "systemdsystemunitdir" "$(bin)/lib/systemd/system/")
+       "systemdsystemunitdir" "${placeholder "bin"}/lib/systemd/system/")
   ] ++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform)
        "scanf_cv_type_modifier=ms"
   ;
 
-  makeFlags = "usrbin_execdir=$(bin)/bin usrsbin_execdir=$(bin)/sbin";
+  makeFlags = [
+    "usrbin_execdir=${placeholder "bin"}/bin"
+    "usrsbin_execdir=${placeholder "bin"}/sbin"
+  ];
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs =
@@ -58,9 +62,7 @@ in stdenv.mkDerivation rec {
 
   doCheck = false; # "For development purpose only. Don't execute on production system!"
 
-  postInstall = ''
-    rm "$bin/bin/su" # su should be supplied by the su package (shadow)
-  '' + lib.optionalString minimal ''
+  postInstall = lib.optionalString minimal ''
     rm -rf $out/share/{locale,doc,bash-completion}
   '';
 
diff --git a/pkgs/servers/home-assistant/appdaemon.nix b/pkgs/servers/home-assistant/appdaemon.nix
index ca8ddbc7af3..82df1f6b988 100644
--- a/pkgs/servers/home-assistant/appdaemon.nix
+++ b/pkgs/servers/home-assistant/appdaemon.nix
@@ -24,10 +24,10 @@ let
       });
 
       jinja2 = super.jinja2.overridePythonAttrs (oldAttrs: rec {
-        version = "2.10";
+        version = "2.10.1";
         src = oldAttrs.src.override {
           inherit version;
-          sha256 = "f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4";
+          sha256 = "065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013";
         };
       });
 
@@ -52,11 +52,11 @@ let
 
 in python.pkgs.buildPythonApplication rec {
   pname = "appdaemon";
-  version = "3.0.4";
+  version = "3.0.5";
 
   src = python.pkgs.fetchPypi {
     inherit pname version;
-    sha256 = "e2393b5e0bb34e94e61f5debc95ad74c1c6929635b74bf8ba15c22b40cbdec69";
+    sha256 = "623897ce08dc2efe24d04380df36e4b7fb35c0e4007e882857d4047f0b60349d";
   };
 
   propagatedBuildInputs = with python.pkgs; [
diff --git a/pkgs/servers/home-assistant/component-packages.nix b/pkgs/servers/home-assistant/component-packages.nix
index 48fa3793d9a..12240320979 100644
--- a/pkgs/servers/home-assistant/component-packages.nix
+++ b/pkgs/servers/home-assistant/component-packages.nix
@@ -2,2144 +2,826 @@
 # Do not edit!
 
 {
-  version = "0.91.4";
+  version = "0.92.2";
   components = {
     "abode" = ps: with ps; [  ];
-    "abode.alarm_control_panel" = ps: with ps; [  ];
-    "abode.binary_sensor" = ps: with ps; [  ];
-    "abode.camera" = ps: with ps; [  ];
-    "abode.cover" = ps: with ps; [  ];
-    "abode.light" = ps: with ps; [  ];
-    "abode.lock" = ps: with ps; [  ];
-    "abode.sensor" = ps: with ps; [  ];
-    "abode.switch" = ps: with ps; [  ];
-    "acer_projector" = ps: with ps; [  ];
-    "acer_projector.switch" = ps: with ps; [ pyserial ];
+    "acer_projector" = ps: with ps; [ pyserial ];
     "actiontec" = ps: with ps; [  ];
-    "actiontec.device_tracker" = ps: with ps; [  ];
     "ads" = ps: with ps; [  ];
-    "ads.binary_sensor" = ps: with ps; [  ];
-    "ads.light" = ps: with ps; [  ];
-    "ads.sensor" = ps: with ps; [  ];
-    "ads.switch" = ps: with ps; [  ];
     "aftership" = ps: with ps; [  ];
-    "aftership.sensor" = ps: with ps; [  ];
     "air_quality" = ps: with ps; [  ];
-    "airvisual" = ps: with ps; [  ];
-    "airvisual.sensor" = ps: with ps; [ pyairvisual ];
+    "airvisual" = ps: with ps; [ pyairvisual ];
     "aladdin_connect" = ps: with ps; [  ];
-    "aladdin_connect.cover" = ps: with ps; [  ];
     "alarm_control_panel" = ps: with ps; [  ];
     "alarmdecoder" = ps: with ps; [  ];
-    "alarmdecoder.alarm_control_panel" = ps: with ps; [  ];
-    "alarmdecoder.binary_sensor" = ps: with ps; [  ];
-    "alarmdecoder.sensor" = ps: with ps; [  ];
     "alarmdotcom" = ps: with ps; [  ];
-    "alarmdotcom.alarm_control_panel" = ps: with ps; [  ];
     "alert" = ps: with ps; [  ];
     "alexa" = ps: with ps; [ aiohttp-cors ];
-    "alexa.auth" = ps: with ps; [  ];
-    "alexa.const" = ps: with ps; [  ];
-    "alexa.flash_briefings" = ps: with ps; [  ];
-    "alexa.intent" = ps: with ps; [  ];
-    "alexa.smart_home" = ps: with ps; [  ];
     "alpha_vantage" = ps: with ps; [  ];
-    "alpha_vantage.sensor" = ps: with ps; [  ];
-    "amazon_polly" = ps: with ps; [  ];
-    "amazon_polly.tts" = ps: with ps; [ boto3 ];
+    "amazon_polly" = ps: with ps; [ boto3 ];
     "ambient_station" = ps: with ps; [  ];
-    "ambient_station.binary_sensor" = ps: with ps; [  ];
-    "ambient_station.config_flow" = ps: with ps; [  ];
-    "ambient_station.const" = ps: with ps; [  ];
-    "ambient_station.sensor" = ps: with ps; [  ];
     "amcrest" = ps: with ps; [ ha-ffmpeg ];
-    "amcrest.camera" = ps: with ps; [ ha-ffmpeg ];
-    "amcrest.sensor" = ps: with ps; [ ha-ffmpeg ];
-    "amcrest.switch" = ps: with ps; [ ha-ffmpeg ];
+    "ampio" = ps: with ps; [  ];
     "android_ip_webcam" = ps: with ps; [  ];
-    "android_ip_webcam.binary_sensor" = ps: with ps; [  ];
-    "android_ip_webcam.sensor" = ps: with ps; [  ];
-    "android_ip_webcam.switch" = ps: with ps; [  ];
     "androidtv" = ps: with ps; [  ];
-    "androidtv.media_player" = ps: with ps; [  ];
     "anel_pwrctrl" = ps: with ps; [  ];
-    "anel_pwrctrl.switch" = ps: with ps; [  ];
     "anthemav" = ps: with ps; [  ];
-    "anthemav.media_player" = ps: with ps; [  ];
     "apcupsd" = ps: with ps; [  ];
-    "apcupsd.binary_sensor" = ps: with ps; [  ];
-    "apcupsd.sensor" = ps: with ps; [  ];
     "api" = ps: with ps; [ aiohttp-cors ];
-    "api_streams" = ps: with ps; [  ];
     "apns" = ps: with ps; [  ];
-    "apns.notify" = ps: with ps; [  ];
     "apple_tv" = ps: with ps; [ pyatv ];
-    "apple_tv.media_player" = ps: with ps; [ pyatv ];
-    "apple_tv.remote" = ps: with ps; [ pyatv ];
     "aqualogic" = ps: with ps; [  ];
-    "aqualogic.sensor" = ps: with ps; [  ];
-    "aqualogic.switch" = ps: with ps; [  ];
     "aquostv" = ps: with ps; [  ];
-    "aquostv.media_player" = ps: with ps; [  ];
     "arduino" = ps: with ps; [  ];
-    "arduino.sensor" = ps: with ps; [  ];
-    "arduino.switch" = ps: with ps; [  ];
     "arest" = ps: with ps; [  ];
-    "arest.binary_sensor" = ps: with ps; [  ];
-    "arest.sensor" = ps: with ps; [  ];
-    "arest.switch" = ps: with ps; [  ];
-    "arlo" = ps: with ps; [  ];
-    "arlo.alarm_control_panel" = ps: with ps; [  ];
-    "arlo.camera" = ps: with ps; [ ha-ffmpeg ];
-    "arlo.sensor" = ps: with ps; [  ];
-    "aruba" = ps: with ps; [  ];
-    "aruba.device_tracker" = ps: with ps; [ pexpect ];
-    "arwn" = ps: with ps; [  ];
-    "arwn.sensor" = ps: with ps; [ paho-mqtt ];
+    "arlo" = ps: with ps; [ ha-ffmpeg ];
+    "aruba" = ps: with ps; [ pexpect ];
+    "arwn" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt ];
     "asterisk_cdr" = ps: with ps; [  ];
-    "asterisk_cdr.mailbox" = ps: with ps; [  ];
     "asterisk_mbox" = ps: with ps; [  ];
-    "asterisk_mbox.mailbox" = ps: with ps; [  ];
     "asuswrt" = ps: with ps; [  ];
-    "asuswrt.device_tracker" = ps: with ps; [  ];
-    "asuswrt.sensor" = ps: with ps; [  ];
     "august" = ps: with ps; [  ];
-    "august.binary_sensor" = ps: with ps; [  ];
-    "august.camera" = ps: with ps; [  ];
-    "august.lock" = ps: with ps; [  ];
     "aurora" = ps: with ps; [  ];
-    "aurora.binary_sensor" = ps: with ps; [  ];
     "auth" = ps: with ps; [ aiohttp-cors ];
-    "auth.indieauth" = ps: with ps; [  ];
-    "auth.login_flow" = ps: with ps; [  ];
-    "auth.mfa_setup_flow" = ps: with ps; [  ];
-    "automatic" = ps: with ps; [  ];
-    "automatic.device_tracker" = ps: with ps; [ aiohttp-cors ];
-    "automation" = ps: with ps; [  ];
-    "automation.event" = ps: with ps; [  ];
-    "automation.geo_location" = ps: with ps; [  ];
-    "automation.homeassistant" = ps: with ps; [  ];
-    "automation.litejet" = ps: with ps; [  ];
-    "automation.mqtt" = ps: with ps; [ paho-mqtt ];
-    "automation.numeric_state" = ps: with ps; [  ];
-    "automation.state" = ps: with ps; [  ];
-    "automation.sun" = ps: with ps; [  ];
-    "automation.template" = ps: with ps; [  ];
-    "automation.time" = ps: with ps; [  ];
-    "automation.time_pattern" = ps: with ps; [  ];
-    "automation.webhook" = ps: with ps; [ aiohttp-cors ];
-    "automation.zone" = ps: with ps; [  ];
+    "automatic" = ps: with ps; [ aiohttp-cors ];
+    "automation" = ps: with ps; [ aiohttp-cors ];
     "avion" = ps: with ps; [  ];
-    "avion.light" = ps: with ps; [  ];
     "awair" = ps: with ps; [  ];
-    "awair.sensor" = ps: with ps; [  ];
     "aws" = ps: with ps; [  ];
-    "aws.config_flow" = ps: with ps; [  ];
-    "aws.const" = ps: with ps; [  ];
-    "aws.notify" = ps: with ps; [  ];
-    "aws_lambda" = ps: with ps; [  ];
-    "aws_lambda.notify" = ps: with ps; [ boto3 ];
-    "aws_sns" = ps: with ps; [  ];
-    "aws_sns.notify" = ps: with ps; [ boto3 ];
-    "aws_sqs" = ps: with ps; [  ];
-    "aws_sqs.notify" = ps: with ps; [ boto3 ];
     "axis" = ps: with ps; [  ];
-    "axis.binary_sensor" = ps: with ps; [  ];
-    "axis.camera" = ps: with ps; [  ];
-    "axis.config_flow" = ps: with ps; [  ];
-    "axis.const" = ps: with ps; [  ];
-    "axis.device" = ps: with ps; [  ];
-    "axis.errors" = ps: with ps; [  ];
     "baidu" = ps: with ps; [  ];
-    "baidu.tts" = ps: with ps; [  ];
     "bayesian" = ps: with ps; [  ];
-    "bayesian.binary_sensor" = ps: with ps; [  ];
     "bbb_gpio" = ps: with ps; [  ];
-    "bbb_gpio.binary_sensor" = ps: with ps; [  ];
-    "bbb_gpio.switch" = ps: with ps; [  ];
     "bbox" = ps: with ps; [  ];
-    "bbox.device_tracker" = ps: with ps; [  ];
-    "bbox.sensor" = ps: with ps; [  ];
     "bh1750" = ps: with ps; [  ];
-    "bh1750.sensor" = ps: with ps; [  ];
     "binary_sensor" = ps: with ps; [  ];
     "bitcoin" = ps: with ps; [  ];
-    "bitcoin.sensor" = ps: with ps; [  ];
     "blackbird" = ps: with ps; [  ];
-    "blackbird.media_player" = ps: with ps; [  ];
     "blink" = ps: with ps; [  ];
-    "blink.alarm_control_panel" = ps: with ps; [  ];
-    "blink.binary_sensor" = ps: with ps; [  ];
-    "blink.camera" = ps: with ps; [  ];
-    "blink.sensor" = ps: with ps; [  ];
-    "blinksticklight" = ps: with ps; [  ];
-    "blinksticklight.light" = ps: with ps; [ BlinkStick ];
+    "blinksticklight" = ps: with ps; [ BlinkStick ];
     "blinkt" = ps: with ps; [  ];
-    "blinkt.light" = ps: with ps; [  ];
     "blockchain" = ps: with ps; [  ];
-    "blockchain.sensor" = ps: with ps; [  ];
     "bloomsky" = ps: with ps; [  ];
-    "bloomsky.binary_sensor" = ps: with ps; [  ];
-    "bloomsky.camera" = ps: with ps; [  ];
-    "bloomsky.sensor" = ps: with ps; [  ];
-    "bluesound" = ps: with ps; [  ];
-    "bluesound.media_player" = ps: with ps; [ xmltodict ];
+    "bluesound" = ps: with ps; [ xmltodict ];
     "bluetooth_le_tracker" = ps: with ps; [  ];
-    "bluetooth_le_tracker.device_tracker" = ps: with ps; [  ];
-    "bluetooth_tracker" = ps: with ps; [  ];
-    "bluetooth_tracker.device_tracker" = ps: with ps; [ bt_proximity ];
+    "bluetooth_tracker" = ps: with ps; [ bt_proximity ];
     "bme280" = ps: with ps; [  ];
-    "bme280.sensor" = ps: with ps; [  ];
     "bme680" = ps: with ps; [  ];
-    "bme680.sensor" = ps: with ps; [  ];
     "bmw_connected_drive" = ps: with ps; [  ];
-    "bmw_connected_drive.binary_sensor" = ps: with ps; [  ];
-    "bmw_connected_drive.device_tracker" = ps: with ps; [  ];
-    "bmw_connected_drive.lock" = ps: with ps; [  ];
-    "bmw_connected_drive.sensor" = ps: with ps; [  ];
     "bom" = ps: with ps; [  ];
-    "bom.sensor" = ps: with ps; [  ];
-    "bom.weather" = ps: with ps; [  ];
     "braviatv" = ps: with ps; [  ];
-    "braviatv.media_player" = ps: with ps; [  ];
-    "broadlink" = ps: with ps; [  ];
-    "broadlink.sensor" = ps: with ps; [ broadlink ];
-    "broadlink.switch" = ps: with ps; [ broadlink ];
+    "broadlink" = ps: with ps; [ broadlink ];
     "brottsplatskartan" = ps: with ps; [  ];
-    "brottsplatskartan.sensor" = ps: with ps; [  ];
     "browser" = ps: with ps; [  ];
     "brunt" = ps: with ps; [  ];
-    "brunt.cover" = ps: with ps; [  ];
     "bt_home_hub_5" = ps: with ps; [  ];
-    "bt_home_hub_5.device_tracker" = ps: with ps; [  ];
     "bt_smarthub" = ps: with ps; [  ];
-    "bt_smarthub.device_tracker" = ps: with ps; [  ];
     "buienradar" = ps: with ps; [  ];
-    "buienradar.sensor" = ps: with ps; [  ];
-    "buienradar.weather" = ps: with ps; [  ];
-    "caldav" = ps: with ps; [  ];
-    "caldav.calendar" = ps: with ps; [  ];
+    "caldav" = ps: with ps; [ caldav ];
     "calendar" = ps: with ps; [ aiohttp-cors ];
     "camera" = ps: with ps; [ aiohttp-cors ];
-    "camera.const" = ps: with ps; [  ];
-    "camera.prefs" = ps: with ps; [  ];
-    "canary" = ps: with ps; [  ];
-    "canary.alarm_control_panel" = ps: with ps; [  ];
-    "canary.camera" = ps: with ps; [ ha-ffmpeg ];
-    "canary.sensor" = ps: with ps; [  ];
+    "canary" = ps: with ps; [ ha-ffmpeg ];
     "cast" = ps: with ps; [ PyChromecast ];
-    "cast.media_player" = ps: with ps; [ PyChromecast ];
     "cert_expiry" = ps: with ps; [  ];
-    "cert_expiry.sensor" = ps: with ps; [  ];
     "channels" = ps: with ps; [  ];
-    "channels.media_player" = ps: with ps; [  ];
-    "cisco_ios" = ps: with ps; [  ];
-    "cisco_ios.device_tracker" = ps: with ps; [ pexpect ];
+    "cisco_ios" = ps: with ps; [ pexpect ];
     "cisco_mobility_express" = ps: with ps; [  ];
-    "cisco_mobility_express.device_tracker" = ps: with ps; [  ];
+    "cisco_webex_teams" = ps: with ps; [  ];
     "ciscospark" = ps: with ps; [  ];
-    "ciscospark.notify" = ps: with ps; [  ];
     "citybikes" = ps: with ps; [  ];
-    "citybikes.sensor" = ps: with ps; [  ];
     "clementine" = ps: with ps; [  ];
-    "clementine.media_player" = ps: with ps; [  ];
     "clickatell" = ps: with ps; [  ];
-    "clickatell.notify" = ps: with ps; [  ];
     "clicksend" = ps: with ps; [  ];
-    "clicksend.notify" = ps: with ps; [  ];
     "clicksend_tts" = ps: with ps; [  ];
-    "clicksend_tts.notify" = ps: with ps; [  ];
     "climate" = ps: with ps; [  ];
-    "climate.const" = ps: with ps; [  ];
-    "climate.reproduce_state" = ps: with ps; [  ];
     "cloud" = ps: with ps; [ aiohttp-cors ];
-    "cloud.binary_sensor" = ps: with ps; [ aiohttp-cors ];
-    "cloud.const" = ps: with ps; [  ];
-    "cloud.http_api" = ps: with ps; [  ];
-    "cloud.prefs" = ps: with ps; [  ];
-    "cloud.utils" = ps: with ps; [  ];
     "cloudflare" = ps: with ps; [  ];
     "cmus" = ps: with ps; [  ];
-    "cmus.media_player" = ps: with ps; [  ];
     "co2signal" = ps: with ps; [  ];
-    "co2signal.sensor" = ps: with ps; [  ];
     "coinbase" = ps: with ps; [  ];
-    "coinbase.sensor" = ps: with ps; [  ];
-    "coinmarketcap" = ps: with ps; [  ];
-    "coinmarketcap.sensor" = ps: with ps; [ coinmarketcap ];
+    "coinmarketcap" = ps: with ps; [ coinmarketcap ];
     "comed_hourly_pricing" = ps: with ps; [  ];
-    "comed_hourly_pricing.sensor" = ps: with ps; [  ];
     "comfoconnect" = ps: with ps; [  ];
-    "comfoconnect.fan" = ps: with ps; [  ];
-    "comfoconnect.sensor" = ps: with ps; [  ];
     "command_line" = ps: with ps; [  ];
-    "command_line.binary_sensor" = ps: with ps; [  ];
-    "command_line.cover" = ps: with ps; [  ];
-    "command_line.notify" = ps: with ps; [  ];
-    "command_line.sensor" = ps: with ps; [  ];
-    "command_line.switch" = ps: with ps; [  ];
     "concord232" = ps: with ps; [  ];
-    "concord232.alarm_control_panel" = ps: with ps; [  ];
-    "concord232.binary_sensor" = ps: with ps; [  ];
     "config" = ps: with ps; [ aiohttp-cors ];
-    "config.area_registry" = ps: with ps; [  ];
-    "config.auth" = ps: with ps; [  ];
-    "config.automation" = ps: with ps; [  ];
-    "config.config_entries" = ps: with ps; [  ];
-    "config.core" = ps: with ps; [  ];
-    "config.customize" = ps: with ps; [  ];
-    "config.device_registry" = ps: with ps; [  ];
-    "config.entity_registry" = ps: with ps; [  ];
-    "config.group" = ps: with ps; [  ];
-    "config.script" = ps: with ps; [  ];
-    "config.zwave" = ps: with ps; [  ];
     "configurator" = ps: with ps; [  ];
     "conversation" = ps: with ps; [ aiohttp-cors ];
-    "conversation.util" = ps: with ps; [  ];
     "coolmaster" = ps: with ps; [  ];
-    "coolmaster.climate" = ps: with ps; [  ];
     "counter" = ps: with ps; [  ];
     "cover" = ps: with ps; [  ];
     "cppm_tracker" = ps: with ps; [  ];
-    "cppm_tracker.device_tracker" = ps: with ps; [  ];
-    "cpuspeed" = ps: with ps; [  ];
-    "cpuspeed.sensor" = ps: with ps; [ py-cpuinfo ];
+    "cpuspeed" = ps: with ps; [ py-cpuinfo ];
     "crimereports" = ps: with ps; [  ];
-    "crimereports.sensor" = ps: with ps; [  ];
-    "cups" = ps: with ps; [  ];
-    "cups.sensor" = ps: with ps; [ pycups ];
+    "cups" = ps: with ps; [ pycups ];
     "currencylayer" = ps: with ps; [  ];
-    "currencylayer.sensor" = ps: with ps; [  ];
     "daikin" = ps: with ps; [  ];
-    "daikin.climate" = ps: with ps; [  ];
-    "daikin.config_flow" = ps: with ps; [  ];
-    "daikin.const" = ps: with ps; [  ];
-    "daikin.sensor" = ps: with ps; [  ];
-    "daikin.switch" = ps: with ps; [  ];
     "danfoss_air" = ps: with ps; [  ];
-    "danfoss_air.binary_sensor" = ps: with ps; [  ];
-    "danfoss_air.sensor" = ps: with ps; [  ];
-    "danfoss_air.switch" = ps: with ps; [  ];
-    "darksky" = ps: with ps; [  ];
-    "darksky.sensor" = ps: with ps; [ python-forecastio ];
-    "darksky.weather" = ps: with ps; [ python-forecastio ];
+    "darksky" = ps: with ps; [ python-forecastio ];
     "datadog" = ps: with ps; [ datadog ];
     "ddwrt" = ps: with ps; [  ];
-    "ddwrt.device_tracker" = ps: with ps; [  ];
     "deconz" = ps: with ps; [  ];
-    "deconz.binary_sensor" = ps: with ps; [  ];
-    "deconz.climate" = ps: with ps; [  ];
-    "deconz.config_flow" = ps: with ps; [  ];
-    "deconz.const" = ps: with ps; [  ];
-    "deconz.cover" = ps: with ps; [  ];
-    "deconz.deconz_device" = ps: with ps; [  ];
-    "deconz.errors" = ps: with ps; [  ];
-    "deconz.gateway" = ps: with ps; [  ];
-    "deconz.light" = ps: with ps; [  ];
-    "deconz.scene" = ps: with ps; [  ];
-    "deconz.sensor" = ps: with ps; [  ];
-    "deconz.switch" = ps: with ps; [  ];
     "decora" = ps: with ps; [  ];
-    "decora.light" = ps: with ps; [  ];
     "decora_wifi" = ps: with ps; [  ];
-    "decora_wifi.light" = ps: with ps; [  ];
     "default_config" = ps: with ps; [ pynacl aiohttp-cors distro sqlalchemy zeroconf ];
-    "deluge" = ps: with ps; [  ];
-    "deluge.sensor" = ps: with ps; [ deluge-client ];
-    "deluge.switch" = ps: with ps; [ deluge-client ];
+    "deluge" = ps: with ps; [ deluge-client ];
     "demo" = ps: with ps; [ aiohttp-cors ];
-    "demo.air_quality" = ps: with ps; [  ];
-    "demo.alarm_control_panel" = ps: with ps; [  ];
-    "demo.binary_sensor" = ps: with ps; [  ];
-    "demo.calendar" = ps: with ps; [  ];
-    "demo.camera" = ps: with ps; [  ];
-    "demo.climate" = ps: with ps; [  ];
-    "demo.cover" = ps: with ps; [  ];
-    "demo.device_tracker" = ps: with ps; [  ];
-    "demo.fan" = ps: with ps; [  ];
-    "demo.geo_location" = ps: with ps; [  ];
-    "demo.image_processing" = ps: with ps; [  ];
-    "demo.light" = ps: with ps; [  ];
-    "demo.lock" = ps: with ps; [  ];
-    "demo.mailbox" = ps: with ps; [  ];
-    "demo.media_player" = ps: with ps; [  ];
-    "demo.notify" = ps: with ps; [  ];
-    "demo.remote" = ps: with ps; [  ];
-    "demo.sensor" = ps: with ps; [  ];
-    "demo.switch" = ps: with ps; [  ];
-    "demo.tts" = ps: with ps; [  ];
-    "demo.vacuum" = ps: with ps; [  ];
-    "demo.water_heater" = ps: with ps; [  ];
-    "demo.weather" = ps: with ps; [  ];
     "denon" = ps: with ps; [  ];
-    "denon.media_player" = ps: with ps; [  ];
     "denonavr" = ps: with ps; [  ];
-    "denonavr.media_player" = ps: with ps; [  ];
     "deutsche_bahn" = ps: with ps; [  ];
-    "deutsche_bahn.sensor" = ps: with ps; [  ];
     "device_sun_light_trigger" = ps: with ps; [  ];
     "device_tracker" = ps: with ps; [  ];
     "dht" = ps: with ps; [  ];
-    "dht.sensor" = ps: with ps; [  ];
     "dialogflow" = ps: with ps; [ aiohttp-cors ];
     "digital_ocean" = ps: with ps; [ digital-ocean ];
-    "digital_ocean.binary_sensor" = ps: with ps; [ digital-ocean ];
-    "digital_ocean.switch" = ps: with ps; [ digital-ocean ];
     "digitalloggers" = ps: with ps; [  ];
-    "digitalloggers.switch" = ps: with ps; [  ];
     "directv" = ps: with ps; [  ];
-    "directv.media_player" = ps: with ps; [  ];
-    "discogs" = ps: with ps; [  ];
-    "discogs.sensor" = ps: with ps; [ discogs_client ];
-    "discord" = ps: with ps; [  ];
-    "discord.notify" = ps: with ps; [ discordpy ];
+    "discogs" = ps: with ps; [ discogs_client ];
+    "discord" = ps: with ps; [ discordpy ];
     "discovery" = ps: with ps; [ netdisco ];
-    "dlib_face_detect" = ps: with ps; [  ];
-    "dlib_face_detect.image_processing" = ps: with ps; [ face_recognition ];
-    "dlib_face_identify" = ps: with ps; [  ];
-    "dlib_face_identify.image_processing" = ps: with ps; [ face_recognition ];
+    "dlib_face_detect" = ps: with ps; [ face_recognition ];
+    "dlib_face_identify" = ps: with ps; [ face_recognition ];
     "dlink" = ps: with ps; [  ];
-    "dlink.switch" = ps: with ps; [  ];
     "dlna_dmr" = ps: with ps; [  ];
-    "dlna_dmr.media_player" = ps: with ps; [  ];
-    "dnsip" = ps: with ps; [  ];
-    "dnsip.sensor" = ps: with ps; [ aiodns ];
+    "dnsip" = ps: with ps; [ aiodns ];
     "dominos" = ps: with ps; [ aiohttp-cors ];
     "doorbird" = ps: with ps; [  ];
-    "doorbird.camera" = ps: with ps; [  ];
-    "doorbird.switch" = ps: with ps; [  ];
     "dovado" = ps: with ps; [  ];
-    "dovado.notify" = ps: with ps; [  ];
-    "dovado.sensor" = ps: with ps; [  ];
     "downloader" = ps: with ps; [  ];
     "dsmr" = ps: with ps; [  ];
-    "dsmr.sensor" = ps: with ps; [  ];
     "dte_energy_bridge" = ps: with ps; [  ];
-    "dte_energy_bridge.sensor" = ps: with ps; [  ];
     "dublin_bus_transport" = ps: with ps; [  ];
-    "dublin_bus_transport.sensor" = ps: with ps; [  ];
     "duckdns" = ps: with ps; [  ];
     "duke_energy" = ps: with ps; [  ];
-    "duke_energy.sensor" = ps: with ps; [  ];
     "dunehd" = ps: with ps; [  ];
-    "dunehd.media_player" = ps: with ps; [  ];
     "dwd_weather_warnings" = ps: with ps; [  ];
-    "dwd_weather_warnings.sensor" = ps: with ps; [  ];
     "dweet" = ps: with ps; [  ];
-    "dweet.sensor" = ps: with ps; [  ];
     "dyson" = ps: with ps; [  ];
-    "dyson.climate" = ps: with ps; [  ];
-    "dyson.fan" = ps: with ps; [  ];
-    "dyson.sensor" = ps: with ps; [  ];
-    "dyson.vacuum" = ps: with ps; [  ];
     "ebox" = ps: with ps; [  ];
-    "ebox.sensor" = ps: with ps; [  ];
     "ebusd" = ps: with ps; [  ];
-    "ebusd.const" = ps: with ps; [  ];
-    "ebusd.sensor" = ps: with ps; [  ];
     "ecoal_boiler" = ps: with ps; [  ];
-    "ecoal_boiler.sensor" = ps: with ps; [  ];
-    "ecoal_boiler.switch" = ps: with ps; [  ];
     "ecobee" = ps: with ps; [  ];
-    "ecobee.binary_sensor" = ps: with ps; [  ];
-    "ecobee.climate" = ps: with ps; [  ];
-    "ecobee.notify" = ps: with ps; [  ];
-    "ecobee.sensor" = ps: with ps; [  ];
-    "ecobee.weather" = ps: with ps; [  ];
     "econet" = ps: with ps; [  ];
-    "econet.water_heater" = ps: with ps; [  ];
     "ecovacs" = ps: with ps; [  ];
-    "ecovacs.vacuum" = ps: with ps; [  ];
-    "eddystone_temperature" = ps: with ps; [  ];
-    "eddystone_temperature.sensor" = ps: with ps; [ construct ];
+    "eddystone_temperature" = ps: with ps; [ construct ];
     "edimax" = ps: with ps; [  ];
-    "edimax.switch" = ps: with ps; [  ];
     "edp_redy" = ps: with ps; [  ];
-    "edp_redy.sensor" = ps: with ps; [  ];
-    "edp_redy.switch" = ps: with ps; [  ];
     "ee_brightbox" = ps: with ps; [  ];
-    "ee_brightbox.device_tracker" = ps: with ps; [  ];
     "efergy" = ps: with ps; [  ];
-    "efergy.sensor" = ps: with ps; [  ];
     "egardia" = ps: with ps; [  ];
-    "egardia.alarm_control_panel" = ps: with ps; [  ];
-    "egardia.binary_sensor" = ps: with ps; [  ];
     "eight_sleep" = ps: with ps; [  ];
-    "eight_sleep.binary_sensor" = ps: with ps; [  ];
-    "eight_sleep.sensor" = ps: with ps; [  ];
     "eliqonline" = ps: with ps; [  ];
-    "eliqonline.sensor" = ps: with ps; [  ];
     "elkm1" = ps: with ps; [  ];
-    "elkm1.alarm_control_panel" = ps: with ps; [  ];
-    "elkm1.climate" = ps: with ps; [  ];
-    "elkm1.light" = ps: with ps; [  ];
-    "elkm1.scene" = ps: with ps; [  ];
-    "elkm1.sensor" = ps: with ps; [  ];
-    "elkm1.switch" = ps: with ps; [  ];
     "emby" = ps: with ps; [  ];
-    "emby.media_player" = ps: with ps; [  ];
     "emoncms" = ps: with ps; [  ];
-    "emoncms.sensor" = ps: with ps; [  ];
     "emoncms_history" = ps: with ps; [  ];
     "emulated_hue" = ps: with ps; [ aiohttp-cors ];
-    "emulated_hue.hue_api" = ps: with ps; [  ];
-    "emulated_hue.upnp" = ps: with ps; [  ];
     "emulated_roku" = ps: with ps; [  ];
-    "emulated_roku.binding" = ps: with ps; [  ];
-    "emulated_roku.config_flow" = ps: with ps; [  ];
-    "emulated_roku.const" = ps: with ps; [  ];
     "enigma2" = ps: with ps; [  ];
-    "enigma2.media_player" = ps: with ps; [  ];
     "enocean" = ps: with ps; [  ];
-    "enocean.binary_sensor" = ps: with ps; [  ];
-    "enocean.light" = ps: with ps; [  ];
-    "enocean.sensor" = ps: with ps; [  ];
-    "enocean.switch" = ps: with ps; [  ];
     "enphase_envoy" = ps: with ps; [  ];
-    "enphase_envoy.sensor" = ps: with ps; [  ];
     "entur_public_transport" = ps: with ps; [  ];
-    "entur_public_transport.sensor" = ps: with ps; [  ];
     "envirophat" = ps: with ps; [  ];
-    "envirophat.sensor" = ps: with ps; [  ];
     "envisalink" = ps: with ps; [  ];
-    "envisalink.alarm_control_panel" = ps: with ps; [  ];
-    "envisalink.binary_sensor" = ps: with ps; [  ];
-    "envisalink.sensor" = ps: with ps; [  ];
     "ephember" = ps: with ps; [  ];
-    "ephember.climate" = ps: with ps; [  ];
     "epson" = ps: with ps; [  ];
-    "epson.media_player" = ps: with ps; [  ];
-    "eq3btsmart" = ps: with ps; [  ];
-    "eq3btsmart.climate" = ps: with ps; [ construct ];
+    "epsonworkforce" = ps: with ps; [  ];
+    "eq3btsmart" = ps: with ps; [ construct ];
     "esphome" = ps: with ps; [ aioesphomeapi ];
-    "esphome.binary_sensor" = ps: with ps; [ aioesphomeapi ];
-    "esphome.camera" = ps: with ps; [ aioesphomeapi ];
-    "esphome.config_flow" = ps: with ps; [  ];
-    "esphome.cover" = ps: with ps; [ aioesphomeapi ];
-    "esphome.fan" = ps: with ps; [ aioesphomeapi ];
-    "esphome.light" = ps: with ps; [ aioesphomeapi ];
-    "esphome.sensor" = ps: with ps; [ aioesphomeapi ];
-    "esphome.switch" = ps: with ps; [ aioesphomeapi ];
     "etherscan" = ps: with ps; [  ];
-    "etherscan.sensor" = ps: with ps; [  ];
     "eufy" = ps: with ps; [  ];
-    "eufy.light" = ps: with ps; [  ];
-    "eufy.switch" = ps: with ps; [  ];
     "everlights" = ps: with ps; [  ];
-    "everlights.light" = ps: with ps; [  ];
     "evohome" = ps: with ps; [  ];
-    "evohome.climate" = ps: with ps; [  ];
     "facebook" = ps: with ps; [  ];
-    "facebook.notify" = ps: with ps; [  ];
     "facebox" = ps: with ps; [  ];
-    "facebox.image_processing" = ps: with ps; [  ];
     "fail2ban" = ps: with ps; [  ];
-    "fail2ban.sensor" = ps: with ps; [  ];
     "familyhub" = ps: with ps; [  ];
-    "familyhub.camera" = ps: with ps; [  ];
     "fan" = ps: with ps; [  ];
     "fastdotcom" = ps: with ps; [  ];
-    "fastdotcom.sensor" = ps: with ps; [  ];
     "fedex" = ps: with ps; [  ];
-    "fedex.sensor" = ps: with ps; [  ];
     "feedreader" = ps: with ps; [  ];
     "ffmpeg" = ps: with ps; [ ha-ffmpeg ];
-    "ffmpeg.camera" = ps: with ps; [ ha-ffmpeg ];
-    "ffmpeg_motion" = ps: with ps; [  ];
-    "ffmpeg_motion.binary_sensor" = ps: with ps; [ ha-ffmpeg ];
-    "ffmpeg_noise" = ps: with ps; [  ];
-    "ffmpeg_noise.binary_sensor" = ps: with ps; [ ha-ffmpeg ];
+    "ffmpeg_motion" = ps: with ps; [ ha-ffmpeg ];
+    "ffmpeg_noise" = ps: with ps; [ ha-ffmpeg ];
     "fibaro" = ps: with ps; [  ];
-    "fibaro.binary_sensor" = ps: with ps; [  ];
-    "fibaro.cover" = ps: with ps; [  ];
-    "fibaro.light" = ps: with ps; [  ];
-    "fibaro.scene" = ps: with ps; [  ];
-    "fibaro.sensor" = ps: with ps; [  ];
-    "fibaro.switch" = ps: with ps; [  ];
     "fido" = ps: with ps; [  ];
-    "fido.sensor" = ps: with ps; [  ];
     "file" = ps: with ps; [  ];
-    "file.notify" = ps: with ps; [  ];
-    "file.sensor" = ps: with ps; [  ];
     "filesize" = ps: with ps; [  ];
-    "filesize.sensor" = ps: with ps; [  ];
     "filter" = ps: with ps; [  ];
-    "filter.sensor" = ps: with ps; [  ];
-    "fints" = ps: with ps; [  ];
-    "fints.sensor" = ps: with ps; [ fints ];
-    "fitbit" = ps: with ps; [  ];
-    "fitbit.sensor" = ps: with ps; [ aiohttp-cors ];
+    "fints" = ps: with ps; [ fints ];
+    "fitbit" = ps: with ps; [ aiohttp-cors ];
     "fixer" = ps: with ps; [  ];
-    "fixer.sensor" = ps: with ps; [  ];
     "flexit" = ps: with ps; [  ];
-    "flexit.climate" = ps: with ps; [  ];
     "flic" = ps: with ps; [  ];
-    "flic.binary_sensor" = ps: with ps; [  ];
     "flock" = ps: with ps; [  ];
-    "flock.notify" = ps: with ps; [  ];
     "flunearyou" = ps: with ps; [  ];
-    "flunearyou.sensor" = ps: with ps; [  ];
     "flux" = ps: with ps; [  ];
-    "flux.switch" = ps: with ps; [  ];
     "flux_led" = ps: with ps; [  ];
-    "flux_led.light" = ps: with ps; [  ];
     "folder" = ps: with ps; [  ];
-    "folder.sensor" = ps: with ps; [  ];
     "folder_watcher" = ps: with ps; [ watchdog ];
     "foobot" = ps: with ps; [  ];
-    "foobot.sensor" = ps: with ps; [  ];
     "foscam" = ps: with ps; [  ];
-    "foscam.camera" = ps: with ps; [  ];
     "foursquare" = ps: with ps; [ aiohttp-cors ];
     "free_mobile" = ps: with ps; [  ];
-    "free_mobile.notify" = ps: with ps; [  ];
     "freebox" = ps: with ps; [  ];
-    "freebox.device_tracker" = ps: with ps; [  ];
-    "freebox.sensor" = ps: with ps; [  ];
-    "freebox.switch" = ps: with ps; [  ];
     "freedns" = ps: with ps; [  ];
-    "fritz" = ps: with ps; [  ];
-    "fritz.device_tracker" = ps: with ps; [ fritzconnection ];
+    "fritz" = ps: with ps; [ fritzconnection ];
     "fritzbox" = ps: with ps; [  ];
-    "fritzbox.binary_sensor" = ps: with ps; [  ];
-    "fritzbox.climate" = ps: with ps; [  ];
-    "fritzbox.sensor" = ps: with ps; [  ];
-    "fritzbox.switch" = ps: with ps; [  ];
-    "fritzbox_callmonitor" = ps: with ps; [  ];
-    "fritzbox_callmonitor.sensor" = ps: with ps; [ fritzconnection ];
-    "fritzbox_netmonitor" = ps: with ps; [  ];
-    "fritzbox_netmonitor.sensor" = ps: with ps; [ fritzconnection ];
+    "fritzbox_callmonitor" = ps: with ps; [ fritzconnection ];
+    "fritzbox_netmonitor" = ps: with ps; [ fritzconnection ];
     "fritzdect" = ps: with ps; [  ];
-    "fritzdect.switch" = ps: with ps; [  ];
     "frontend" = ps: with ps; [ aiohttp-cors ];
-    "frontend.storage" = ps: with ps; [  ];
     "frontier_silicon" = ps: with ps; [  ];
-    "frontier_silicon.media_player" = ps: with ps; [  ];
     "futurenow" = ps: with ps; [  ];
-    "futurenow.light" = ps: with ps; [  ];
     "garadget" = ps: with ps; [  ];
-    "garadget.cover" = ps: with ps; [  ];
     "gc100" = ps: with ps; [  ];
-    "gc100.binary_sensor" = ps: with ps; [  ];
-    "gc100.switch" = ps: with ps; [  ];
     "gearbest" = ps: with ps; [  ];
-    "gearbest.sensor" = ps: with ps; [  ];
     "geizhals" = ps: with ps; [  ];
-    "geizhals.sensor" = ps: with ps; [  ];
     "generic" = ps: with ps; [  ];
-    "generic.camera" = ps: with ps; [  ];
     "generic_thermostat" = ps: with ps; [  ];
-    "generic_thermostat.climate" = ps: with ps; [  ];
+    "geniushub" = ps: with ps; [  ];
     "geo_json_events" = ps: with ps; [  ];
-    "geo_json_events.geo_location" = ps: with ps; [  ];
     "geo_location" = ps: with ps; [  ];
     "geo_rss_events" = ps: with ps; [  ];
-    "geo_rss_events.sensor" = ps: with ps; [  ];
     "geofency" = ps: with ps; [ aiohttp-cors ];
-    "geofency.device_tracker" = ps: with ps; [ aiohttp-cors ];
-    "github" = ps: with ps; [  ];
-    "github.sensor" = ps: with ps; [ PyGithub ];
-    "gitlab_ci" = ps: with ps; [  ];
-    "gitlab_ci.sensor" = ps: with ps; [ python-gitlab ];
+    "github" = ps: with ps; [ PyGithub ];
+    "gitlab_ci" = ps: with ps; [ python-gitlab ];
     "gitter" = ps: with ps; [  ];
-    "gitter.sensor" = ps: with ps; [  ];
     "glances" = ps: with ps; [  ];
-    "glances.sensor" = ps: with ps; [  ];
     "gntp" = ps: with ps; [  ];
-    "gntp.notify" = ps: with ps; [  ];
     "goalfeed" = ps: with ps; [  ];
     "gogogate2" = ps: with ps; [  ];
-    "gogogate2.cover" = ps: with ps; [  ];
     "google" = ps: with ps; [ google_api_python_client httplib2 oauth2client ];
-    "google.calendar" = ps: with ps; [  ];
-    "google.tts" = ps: with ps; [  ];
     "google_assistant" = ps: with ps; [ aiohttp-cors ];
-    "google_assistant.const" = ps: with ps; [  ];
-    "google_assistant.helpers" = ps: with ps; [  ];
-    "google_assistant.http" = ps: with ps; [  ];
-    "google_assistant.smart_home" = ps: with ps; [  ];
-    "google_assistant.trait" = ps: with ps; [  ];
     "google_domains" = ps: with ps; [  ];
     "google_maps" = ps: with ps; [  ];
-    "google_maps.device_tracker" = ps: with ps; [  ];
     "google_pubsub" = ps: with ps; [ google_cloud_pubsub ];
+    "google_translate" = ps: with ps; [  ];
     "google_travel_time" = ps: with ps; [  ];
-    "google_travel_time.sensor" = ps: with ps; [  ];
     "google_wifi" = ps: with ps; [  ];
-    "google_wifi.sensor" = ps: with ps; [  ];
     "googlehome" = ps: with ps; [  ];
-    "googlehome.device_tracker" = ps: with ps; [  ];
-    "googlehome.sensor" = ps: with ps; [  ];
-    "gpmdp" = ps: with ps; [  ];
-    "gpmdp.media_player" = ps: with ps; [ websocket_client ];
+    "gpmdp" = ps: with ps; [ websocket_client ];
     "gpsd" = ps: with ps; [  ];
-    "gpsd.sensor" = ps: with ps; [  ];
     "gpslogger" = ps: with ps; [ aiohttp-cors ];
-    "gpslogger.device_tracker" = ps: with ps; [ aiohttp-cors ];
     "graphite" = ps: with ps; [  ];
     "greeneye_monitor" = ps: with ps; [  ];
-    "greeneye_monitor.sensor" = ps: with ps; [  ];
     "greenwave" = ps: with ps; [  ];
-    "greenwave.light" = ps: with ps; [  ];
     "group" = ps: with ps; [  ];
-    "group.cover" = ps: with ps; [  ];
-    "group.light" = ps: with ps; [  ];
-    "group.notify" = ps: with ps; [  ];
-    "group.reproduce_state" = ps: with ps; [  ];
     "gstreamer" = ps: with ps; [  ];
-    "gstreamer.media_player" = ps: with ps; [  ];
     "gtfs" = ps: with ps; [  ];
-    "gtfs.sensor" = ps: with ps; [  ];
     "gtt" = ps: with ps; [  ];
-    "gtt.sensor" = ps: with ps; [  ];
     "habitica" = ps: with ps; [  ];
-    "habitica.sensor" = ps: with ps; [  ];
     "hangouts" = ps: with ps; [  ];
-    "hangouts.config_flow" = ps: with ps; [  ];
-    "hangouts.const" = ps: with ps; [  ];
-    "hangouts.hangouts_bot" = ps: with ps; [  ];
-    "hangouts.intents" = ps: with ps; [  ];
-    "hangouts.notify" = ps: with ps; [  ];
     "harman_kardon_avr" = ps: with ps; [  ];
-    "harman_kardon_avr.media_player" = ps: with ps; [  ];
     "harmony" = ps: with ps; [  ];
-    "harmony.remote" = ps: with ps; [  ];
     "hassio" = ps: with ps; [ aiohttp-cors ];
-    "hassio.auth" = ps: with ps; [  ];
-    "hassio.const" = ps: with ps; [  ];
-    "hassio.discovery" = ps: with ps; [  ];
-    "hassio.handler" = ps: with ps; [  ];
-    "hassio.http" = ps: with ps; [  ];
-    "hassio.ingress" = ps: with ps; [  ];
     "haveibeenpwned" = ps: with ps; [  ];
-    "haveibeenpwned.sensor" = ps: with ps; [  ];
     "hddtemp" = ps: with ps; [  ];
-    "hddtemp.sensor" = ps: with ps; [  ];
     "hdmi_cec" = ps: with ps; [  ];
-    "hdmi_cec.media_player" = ps: with ps; [  ];
-    "hdmi_cec.switch" = ps: with ps; [  ];
     "heatmiser" = ps: with ps; [  ];
-    "heatmiser.climate" = ps: with ps; [  ];
+    "heos" = ps: with ps; [  ];
     "hikvision" = ps: with ps; [  ];
-    "hikvision.binary_sensor" = ps: with ps; [  ];
     "hikvisioncam" = ps: with ps; [  ];
-    "hikvisioncam.switch" = ps: with ps; [  ];
     "hipchat" = ps: with ps; [  ];
-    "hipchat.notify" = ps: with ps; [  ];
     "history" = ps: with ps; [ aiohttp-cors sqlalchemy ];
     "history_graph" = ps: with ps; [ aiohttp-cors sqlalchemy ];
-    "history_stats" = ps: with ps; [  ];
-    "history_stats.sensor" = ps: with ps; [ aiohttp-cors sqlalchemy ];
+    "history_stats" = ps: with ps; [ aiohttp-cors sqlalchemy ];
     "hitron_coda" = ps: with ps; [  ];
-    "hitron_coda.device_tracker" = ps: with ps; [  ];
     "hive" = ps: with ps; [  ];
-    "hive.binary_sensor" = ps: with ps; [  ];
-    "hive.climate" = ps: with ps; [  ];
-    "hive.light" = ps: with ps; [  ];
-    "hive.sensor" = ps: with ps; [  ];
-    "hive.switch" = ps: with ps; [  ];
     "hlk_sw16" = ps: with ps; [  ];
-    "hlk_sw16.switch" = ps: with ps; [  ];
     "homeassistant" = ps: with ps; [  ];
-    "homeassistant.scene" = ps: with ps; [  ];
     "homekit" = ps: with ps; [  ];
-    "homekit.const" = ps: with ps; [  ];
-    "homekit.util" = ps: with ps; [  ];
     "homekit_controller" = ps: with ps; [  ];
-    "homekit_controller.alarm_control_panel" = ps: with ps; [  ];
-    "homekit_controller.binary_sensor" = ps: with ps; [  ];
-    "homekit_controller.climate" = ps: with ps; [  ];
-    "homekit_controller.config_flow" = ps: with ps; [  ];
-    "homekit_controller.connection" = ps: with ps; [  ];
-    "homekit_controller.const" = ps: with ps; [  ];
-    "homekit_controller.cover" = ps: with ps; [  ];
-    "homekit_controller.light" = ps: with ps; [  ];
-    "homekit_controller.lock" = ps: with ps; [  ];
-    "homekit_controller.sensor" = ps: with ps; [  ];
-    "homekit_controller.switch" = ps: with ps; [  ];
     "homematic" = ps: with ps; [ pyhomematic ];
-    "homematic.binary_sensor" = ps: with ps; [ pyhomematic ];
-    "homematic.climate" = ps: with ps; [ pyhomematic ];
-    "homematic.cover" = ps: with ps; [ pyhomematic ];
-    "homematic.light" = ps: with ps; [ pyhomematic ];
-    "homematic.lock" = ps: with ps; [ pyhomematic ];
-    "homematic.notify" = ps: with ps; [ pyhomematic ];
-    "homematic.sensor" = ps: with ps; [ pyhomematic ];
-    "homematic.switch" = ps: with ps; [ pyhomematic ];
     "homematicip_cloud" = ps: with ps; [  ];
-    "homematicip_cloud.alarm_control_panel" = ps: with ps; [  ];
-    "homematicip_cloud.binary_sensor" = ps: with ps; [  ];
-    "homematicip_cloud.climate" = ps: with ps; [  ];
-    "homematicip_cloud.config_flow" = ps: with ps; [  ];
-    "homematicip_cloud.const" = ps: with ps; [  ];
-    "homematicip_cloud.cover" = ps: with ps; [  ];
-    "homematicip_cloud.device" = ps: with ps; [  ];
-    "homematicip_cloud.errors" = ps: with ps; [  ];
-    "homematicip_cloud.hap" = ps: with ps; [  ];
-    "homematicip_cloud.light" = ps: with ps; [  ];
-    "homematicip_cloud.sensor" = ps: with ps; [  ];
-    "homematicip_cloud.switch" = ps: with ps; [  ];
-    "homematicip_cloud.weather" = ps: with ps; [  ];
     "homeworks" = ps: with ps; [  ];
-    "homeworks.light" = ps: with ps; [  ];
     "honeywell" = ps: with ps; [  ];
-    "honeywell.climate" = ps: with ps; [  ];
     "hook" = ps: with ps; [  ];
-    "hook.switch" = ps: with ps; [  ];
     "horizon" = ps: with ps; [  ];
-    "horizon.media_player" = ps: with ps; [  ];
     "hp_ilo" = ps: with ps; [  ];
-    "hp_ilo.sensor" = ps: with ps; [  ];
-    "html5" = ps: with ps; [  ];
-    "html5.notify" = ps: with ps; [ aiohttp-cors ];
+    "html5" = ps: with ps; [ aiohttp-cors ];
     "http" = ps: with ps; [ aiohttp-cors ];
-    "http.auth" = ps: with ps; [  ];
-    "http.ban" = ps: with ps; [  ];
-    "http.const" = ps: with ps; [  ];
-    "http.cors" = ps: with ps; [  ];
-    "http.data_validator" = ps: with ps; [  ];
-    "http.real_ip" = ps: with ps; [  ];
-    "http.static" = ps: with ps; [  ];
-    "http.view" = ps: with ps; [  ];
     "htu21d" = ps: with ps; [  ];
-    "htu21d.sensor" = ps: with ps; [  ];
     "huawei_lte" = ps: with ps; [  ];
-    "huawei_lte.device_tracker" = ps: with ps; [  ];
-    "huawei_lte.notify" = ps: with ps; [  ];
-    "huawei_lte.sensor" = ps: with ps; [  ];
     "huawei_router" = ps: with ps; [  ];
-    "huawei_router.device_tracker" = ps: with ps; [  ];
     "hue" = ps: with ps; [ aiohue ];
-    "hue.bridge" = ps: with ps; [  ];
-    "hue.config_flow" = ps: with ps; [  ];
-    "hue.const" = ps: with ps; [  ];
-    "hue.errors" = ps: with ps; [  ];
-    "hue.light" = ps: with ps; [ aiohue ];
     "hunterdouglas_powerview" = ps: with ps; [  ];
-    "hunterdouglas_powerview.scene" = ps: with ps; [  ];
     "hydrawise" = ps: with ps; [  ];
-    "hydrawise.binary_sensor" = ps: with ps; [  ];
-    "hydrawise.sensor" = ps: with ps; [  ];
-    "hydrawise.switch" = ps: with ps; [  ];
     "hydroquebec" = ps: with ps; [  ];
-    "hydroquebec.sensor" = ps: with ps; [  ];
     "hyperion" = ps: with ps; [  ];
-    "hyperion.light" = ps: with ps; [  ];
     "ialarm" = ps: with ps; [  ];
-    "ialarm.alarm_control_panel" = ps: with ps; [  ];
     "icloud" = ps: with ps; [  ];
-    "icloud.device_tracker" = ps: with ps; [  ];
     "idteck_prox" = ps: with ps; [  ];
     "ifttt" = ps: with ps; [ aiohttp-cors pyfttt ];
-    "ifttt.alarm_control_panel" = ps: with ps; [ aiohttp-cors pyfttt ];
     "iglo" = ps: with ps; [  ];
-    "iglo.light" = ps: with ps; [  ];
+    "ign_sismologia" = ps: with ps; [  ];
     "ihc" = ps: with ps; [ defusedxml ];
-    "ihc.binary_sensor" = ps: with ps; [ defusedxml ];
-    "ihc.const" = ps: with ps; [  ];
-    "ihc.ihcdevice" = ps: with ps; [  ];
-    "ihc.light" = ps: with ps; [ defusedxml ];
-    "ihc.sensor" = ps: with ps; [ defusedxml ];
-    "ihc.switch" = ps: with ps; [ defusedxml ];
-    "ihc.util" = ps: with ps; [  ];
     "image_processing" = ps: with ps; [ aiohttp-cors ];
     "imap" = ps: with ps; [  ];
-    "imap.sensor" = ps: with ps; [  ];
     "imap_email_content" = ps: with ps; [  ];
-    "imap_email_content.sensor" = ps: with ps; [  ];
     "influxdb" = ps: with ps; [ influxdb ];
-    "influxdb.sensor" = ps: with ps; [ influxdb ];
     "input_boolean" = ps: with ps; [  ];
     "input_datetime" = ps: with ps; [  ];
     "input_number" = ps: with ps; [  ];
     "input_select" = ps: with ps; [  ];
     "input_text" = ps: with ps; [  ];
     "insteon" = ps: with ps; [  ];
-    "insteon.binary_sensor" = ps: with ps; [  ];
-    "insteon.cover" = ps: with ps; [  ];
-    "insteon.fan" = ps: with ps; [  ];
-    "insteon.light" = ps: with ps; [  ];
-    "insteon.sensor" = ps: with ps; [  ];
-    "insteon.switch" = ps: with ps; [  ];
-    "insteon_local" = ps: with ps; [  ];
-    "insteon_plm" = ps: with ps; [  ];
     "integration" = ps: with ps; [  ];
-    "integration.sensor" = ps: with ps; [  ];
     "intent_script" = ps: with ps; [  ];
-    "introduction" = ps: with ps; [  ];
     "ios" = ps: with ps; [ aiohttp-cors zeroconf ];
-    "ios.notify" = ps: with ps; [ aiohttp-cors zeroconf ];
-    "ios.sensor" = ps: with ps; [ aiohttp-cors zeroconf ];
     "iota" = ps: with ps; [  ];
-    "iota.sensor" = ps: with ps; [  ];
     "iperf3" = ps: with ps; [  ];
-    "iperf3.sensor" = ps: with ps; [  ];
     "ipma" = ps: with ps; [  ];
-    "ipma.config_flow" = ps: with ps; [  ];
-    "ipma.const" = ps: with ps; [  ];
-    "ipma.weather" = ps: with ps; [  ];
     "irish_rail_transport" = ps: with ps; [  ];
-    "irish_rail_transport.sensor" = ps: with ps; [  ];
     "islamic_prayer_times" = ps: with ps; [  ];
-    "islamic_prayer_times.sensor" = ps: with ps; [  ];
     "iss" = ps: with ps; [  ];
-    "iss.binary_sensor" = ps: with ps; [  ];
     "isy994" = ps: with ps; [  ];
-    "isy994.binary_sensor" = ps: with ps; [  ];
-    "isy994.cover" = ps: with ps; [  ];
-    "isy994.fan" = ps: with ps; [  ];
-    "isy994.light" = ps: with ps; [  ];
-    "isy994.lock" = ps: with ps; [  ];
-    "isy994.sensor" = ps: with ps; [  ];
-    "isy994.switch" = ps: with ps; [  ];
     "itach" = ps: with ps; [  ];
-    "itach.remote" = ps: with ps; [  ];
     "itunes" = ps: with ps; [  ];
-    "itunes.media_player" = ps: with ps; [  ];
     "jewish_calendar" = ps: with ps; [  ];
-    "jewish_calendar.sensor" = ps: with ps; [  ];
     "joaoapps_join" = ps: with ps; [  ];
-    "joaoapps_join.notify" = ps: with ps; [  ];
     "juicenet" = ps: with ps; [  ];
-    "juicenet.sensor" = ps: with ps; [  ];
     "kankun" = ps: with ps; [  ];
-    "kankun.switch" = ps: with ps; [  ];
     "keenetic_ndms2" = ps: with ps; [  ];
-    "keenetic_ndms2.device_tracker" = ps: with ps; [  ];
     "keyboard" = ps: with ps; [  ];
     "keyboard_remote" = ps: with ps; [ evdev ];
     "kira" = ps: with ps; [  ];
-    "kira.remote" = ps: with ps; [  ];
-    "kira.sensor" = ps: with ps; [  ];
     "kiwi" = ps: with ps; [  ];
-    "kiwi.lock" = ps: with ps; [  ];
     "knx" = ps: with ps; [  ];
-    "knx.binary_sensor" = ps: with ps; [  ];
-    "knx.climate" = ps: with ps; [  ];
-    "knx.cover" = ps: with ps; [  ];
-    "knx.light" = ps: with ps; [  ];
-    "knx.notify" = ps: with ps; [  ];
-    "knx.scene" = ps: with ps; [  ];
-    "knx.sensor" = ps: with ps; [  ];
-    "knx.switch" = ps: with ps; [  ];
-    "kodi" = ps: with ps; [  ];
-    "kodi.media_player" = ps: with ps; [ jsonrpc-async jsonrpc-websocket ];
-    "kodi.notify" = ps: with ps; [ jsonrpc-async ];
+    "kodi" = ps: with ps; [ jsonrpc-async jsonrpc-websocket ];
     "konnected" = ps: with ps; [ aiohttp-cors ];
-    "konnected.binary_sensor" = ps: with ps; [ aiohttp-cors ];
-    "konnected.const" = ps: with ps; [  ];
-    "konnected.handlers" = ps: with ps; [  ];
-    "konnected.sensor" = ps: with ps; [ aiohttp-cors ];
-    "konnected.switch" = ps: with ps; [ aiohttp-cors ];
     "kwb" = ps: with ps; [  ];
-    "kwb.sensor" = ps: with ps; [  ];
     "lacrosse" = ps: with ps; [  ];
-    "lacrosse.sensor" = ps: with ps; [  ];
     "lametric" = ps: with ps; [  ];
-    "lametric.notify" = ps: with ps; [  ];
     "lannouncer" = ps: with ps; [  ];
-    "lannouncer.notify" = ps: with ps; [  ];
-    "lastfm" = ps: with ps; [  ];
-    "lastfm.sensor" = ps: with ps; [ pylast ];
+    "lastfm" = ps: with ps; [ pylast ];
     "launch_library" = ps: with ps; [  ];
-    "launch_library.sensor" = ps: with ps; [  ];
     "lcn" = ps: with ps; [  ];
-    "lcn.const" = ps: with ps; [  ];
-    "lcn.cover" = ps: with ps; [  ];
-    "lcn.light" = ps: with ps; [  ];
-    "lcn.sensor" = ps: with ps; [  ];
-    "lcn.switch" = ps: with ps; [  ];
     "lg_netcast" = ps: with ps; [  ];
-    "lg_netcast.media_player" = ps: with ps; [  ];
     "lg_soundbar" = ps: with ps; [  ];
-    "lg_soundbar.media_player" = ps: with ps; [  ];
-    "lifx" = ps: with ps; [ aiolifx ];
-    "lifx.light" = ps: with ps; [ aiolifx aiolifx-effects ];
+    "lifx" = ps: with ps; [ aiolifx aiolifx-effects ];
     "lifx_cloud" = ps: with ps; [  ];
-    "lifx_cloud.scene" = ps: with ps; [  ];
     "lifx_legacy" = ps: with ps; [  ];
-    "lifx_legacy.light" = ps: with ps; [  ];
     "light" = ps: with ps; [  ];
     "lightwave" = ps: with ps; [  ];
-    "lightwave.light" = ps: with ps; [  ];
-    "lightwave.switch" = ps: with ps; [  ];
-    "limitlessled" = ps: with ps; [  ];
-    "limitlessled.light" = ps: with ps; [ limitlessled ];
-    "linksys_ap" = ps: with ps; [  ];
-    "linksys_ap.device_tracker" = ps: with ps; [ beautifulsoup4 ];
+    "limitlessled" = ps: with ps; [ limitlessled ];
+    "linksys_ap" = ps: with ps; [ beautifulsoup4 ];
     "linksys_smart" = ps: with ps; [  ];
-    "linksys_smart.device_tracker" = ps: with ps; [  ];
     "linky" = ps: with ps; [  ];
-    "linky.sensor" = ps: with ps; [  ];
     "linode" = ps: with ps; [ linode-api ];
-    "linode.binary_sensor" = ps: with ps; [ linode-api ];
-    "linode.switch" = ps: with ps; [ linode-api ];
-    "linux_battery" = ps: with ps; [  ];
-    "linux_battery.sensor" = ps: with ps; [ batinfo ];
+    "linux_battery" = ps: with ps; [ batinfo ];
     "lirc" = ps: with ps; [  ];
     "litejet" = ps: with ps; [  ];
-    "litejet.light" = ps: with ps; [  ];
-    "litejet.scene" = ps: with ps; [  ];
-    "litejet.switch" = ps: with ps; [  ];
     "liveboxplaytv" = ps: with ps; [  ];
-    "liveboxplaytv.media_player" = ps: with ps; [  ];
     "llamalab_automate" = ps: with ps; [  ];
-    "llamalab_automate.notify" = ps: with ps; [  ];
     "local_file" = ps: with ps; [  ];
-    "local_file.camera" = ps: with ps; [  ];
     "locative" = ps: with ps; [ aiohttp-cors ];
-    "locative.device_tracker" = ps: with ps; [ aiohttp-cors ];
     "lock" = ps: with ps; [  ];
     "lockitron" = ps: with ps; [  ];
-    "lockitron.lock" = ps: with ps; [  ];
     "logbook" = ps: with ps; [ aiohttp-cors sqlalchemy ];
     "logentries" = ps: with ps; [  ];
     "logger" = ps: with ps; [  ];
-    "logi_circle" = ps: with ps; [  ];
-    "logi_circle.camera" = ps: with ps; [  ];
-    "logi_circle.sensor" = ps: with ps; [  ];
+    "logi_circle" = ps: with ps; [ ha-ffmpeg ];
     "london_air" = ps: with ps; [  ];
-    "london_air.sensor" = ps: with ps; [  ];
     "london_underground" = ps: with ps; [  ];
-    "london_underground.sensor" = ps: with ps; [  ];
     "loopenergy" = ps: with ps; [  ];
-    "loopenergy.sensor" = ps: with ps; [  ];
     "lovelace" = ps: with ps; [  ];
     "luci" = ps: with ps; [  ];
-    "luci.device_tracker" = ps: with ps; [  ];
     "luftdaten" = ps: with ps; [ luftdaten ];
-    "luftdaten.config_flow" = ps: with ps; [  ];
-    "luftdaten.const" = ps: with ps; [  ];
-    "luftdaten.sensor" = ps: with ps; [ luftdaten ];
     "lupusec" = ps: with ps; [  ];
-    "lupusec.alarm_control_panel" = ps: with ps; [  ];
-    "lupusec.binary_sensor" = ps: with ps; [  ];
-    "lupusec.switch" = ps: with ps; [  ];
     "lutron" = ps: with ps; [  ];
-    "lutron.cover" = ps: with ps; [  ];
-    "lutron.light" = ps: with ps; [  ];
-    "lutron.scene" = ps: with ps; [  ];
-    "lutron.switch" = ps: with ps; [  ];
     "lutron_caseta" = ps: with ps; [  ];
-    "lutron_caseta.cover" = ps: with ps; [  ];
-    "lutron_caseta.light" = ps: with ps; [  ];
-    "lutron_caseta.scene" = ps: with ps; [  ];
-    "lutron_caseta.switch" = ps: with ps; [  ];
     "lw12wifi" = ps: with ps; [  ];
-    "lw12wifi.light" = ps: with ps; [  ];
     "lyft" = ps: with ps; [  ];
-    "lyft.sensor" = ps: with ps; [  ];
     "magicseaweed" = ps: with ps; [  ];
-    "magicseaweed.sensor" = ps: with ps; [  ];
     "mailbox" = ps: with ps; [ aiohttp-cors ];
     "mailgun" = ps: with ps; [ aiohttp-cors ];
-    "mailgun.notify" = ps: with ps; [ aiohttp-cors ];
     "manual" = ps: with ps; [  ];
-    "manual.alarm_control_panel" = ps: with ps; [  ];
-    "manual_mqtt" = ps: with ps; [  ];
-    "manual_mqtt.alarm_control_panel" = ps: with ps; [ paho-mqtt ];
-    "map" = ps: with ps; [  ];
+    "manual_mqtt" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt ];
+    "map" = ps: with ps; [ aiohttp-cors ];
     "marytts" = ps: with ps; [  ];
-    "marytts.tts" = ps: with ps; [  ];
     "mastodon" = ps: with ps; [  ];
-    "mastodon.notify" = ps: with ps; [  ];
     "matrix" = ps: with ps; [ matrix-client ];
-    "matrix.notify" = ps: with ps; [ matrix-client ];
     "maxcube" = ps: with ps; [  ];
-    "maxcube.binary_sensor" = ps: with ps; [  ];
-    "maxcube.climate" = ps: with ps; [  ];
     "media_extractor" = ps: with ps; [ aiohttp-cors youtube-dl-light ];
     "media_player" = ps: with ps; [ aiohttp-cors ];
-    "media_player.const" = ps: with ps; [  ];
-    "media_player.reproduce_state" = ps: with ps; [  ];
     "mediaroom" = ps: with ps; [  ];
-    "mediaroom.media_player" = ps: with ps; [  ];
     "melissa" = ps: with ps; [  ];
-    "melissa.climate" = ps: with ps; [  ];
-    "meraki" = ps: with ps; [  ];
-    "meraki.device_tracker" = ps: with ps; [ aiohttp-cors ];
+    "meraki" = ps: with ps; [ aiohttp-cors ];
     "message_bird" = ps: with ps; [  ];
-    "message_bird.notify" = ps: with ps; [  ];
     "met" = ps: with ps; [  ];
-    "met.weather" = ps: with ps; [  ];
     "meteo_france" = ps: with ps; [  ];
-    "meteo_france.sensor" = ps: with ps; [  ];
-    "meteo_france.weather" = ps: with ps; [  ];
     "metoffice" = ps: with ps; [  ];
-    "metoffice.sensor" = ps: with ps; [  ];
-    "metoffice.weather" = ps: with ps; [  ];
     "mfi" = ps: with ps; [  ];
-    "mfi.sensor" = ps: with ps; [  ];
-    "mfi.switch" = ps: with ps; [  ];
     "mhz19" = ps: with ps; [  ];
-    "mhz19.sensor" = ps: with ps; [  ];
     "microsoft" = ps: with ps; [  ];
-    "microsoft.tts" = ps: with ps; [  ];
     "microsoft_face" = ps: with ps; [ aiohttp-cors ];
-    "microsoft_face_detect" = ps: with ps; [  ];
-    "microsoft_face_detect.image_processing" = ps: with ps; [ aiohttp-cors ];
-    "microsoft_face_identify" = ps: with ps; [  ];
-    "microsoft_face_identify.image_processing" = ps: with ps; [ aiohttp-cors ];
+    "microsoft_face_detect" = ps: with ps; [ aiohttp-cors ];
+    "microsoft_face_identify" = ps: with ps; [ aiohttp-cors ];
     "miflora" = ps: with ps; [  ];
-    "miflora.sensor" = ps: with ps; [  ];
     "mikrotik" = ps: with ps; [  ];
-    "mikrotik.device_tracker" = ps: with ps; [  ];
     "mill" = ps: with ps; [  ];
-    "mill.climate" = ps: with ps; [  ];
     "min_max" = ps: with ps; [  ];
-    "min_max.sensor" = ps: with ps; [  ];
     "mitemp_bt" = ps: with ps; [  ];
-    "mitemp_bt.sensor" = ps: with ps; [  ];
     "mjpeg" = ps: with ps; [  ];
-    "mjpeg.camera" = ps: with ps; [  ];
     "mobile_app" = ps: with ps; [ pynacl aiohttp-cors ];
-    "mobile_app.binary_sensor" = ps: with ps; [ pynacl aiohttp-cors ];
-    "mobile_app.const" = ps: with ps; [  ];
-    "mobile_app.entity" = ps: with ps; [  ];
-    "mobile_app.helpers" = ps: with ps; [  ];
-    "mobile_app.http_api" = ps: with ps; [  ];
-    "mobile_app.notify" = ps: with ps; [ pynacl aiohttp-cors ];
-    "mobile_app.sensor" = ps: with ps; [ pynacl aiohttp-cors ];
-    "mobile_app.webhook" = ps: with ps; [  ];
-    "mobile_app.websocket_api" = ps: with ps; [  ];
     "mochad" = ps: with ps; [  ];
-    "mochad.light" = ps: with ps; [  ];
-    "mochad.switch" = ps: with ps; [  ];
     "modbus" = ps: with ps; [  ];
-    "modbus.binary_sensor" = ps: with ps; [  ];
-    "modbus.climate" = ps: with ps; [  ];
-    "modbus.sensor" = ps: with ps; [  ];
-    "modbus.switch" = ps: with ps; [  ];
     "modem_callerid" = ps: with ps; [  ];
-    "modem_callerid.sensor" = ps: with ps; [  ];
     "mold_indicator" = ps: with ps; [  ];
-    "mold_indicator.sensor" = ps: with ps; [  ];
     "monoprice" = ps: with ps; [  ];
-    "monoprice.media_player" = ps: with ps; [  ];
     "moon" = ps: with ps; [  ];
-    "moon.sensor" = ps: with ps; [  ];
     "mopar" = ps: with ps; [  ];
-    "mopar.lock" = ps: with ps; [  ];
-    "mopar.sensor" = ps: with ps; [  ];
-    "mopar.switch" = ps: with ps; [  ];
     "mpchc" = ps: with ps; [  ];
-    "mpchc.media_player" = ps: with ps; [  ];
-    "mpd" = ps: with ps; [  ];
-    "mpd.media_player" = ps: with ps; [ mpd2 ];
-    "mqtt" = ps: with ps; [ paho-mqtt ];
-    "mqtt.alarm_control_panel" = ps: with ps; [ paho-mqtt ];
-    "mqtt.binary_sensor" = ps: with ps; [ paho-mqtt ];
-    "mqtt.camera" = ps: with ps; [ paho-mqtt ];
-    "mqtt.climate" = ps: with ps; [ paho-mqtt ];
-    "mqtt.config_flow" = ps: with ps; [  ];
-    "mqtt.const" = ps: with ps; [  ];
-    "mqtt.cover" = ps: with ps; [ paho-mqtt ];
-    "mqtt.device_tracker" = ps: with ps; [ paho-mqtt ];
-    "mqtt.discovery" = ps: with ps; [  ];
-    "mqtt.fan" = ps: with ps; [ paho-mqtt ];
-    "mqtt.light" = ps: with ps; [ paho-mqtt ];
-    "mqtt.lock" = ps: with ps; [ paho-mqtt ];
-    "mqtt.sensor" = ps: with ps; [ paho-mqtt ];
-    "mqtt.server" = ps: with ps; [ aiohttp-cors hbmqtt ];
-    "mqtt.subscription" = ps: with ps; [  ];
-    "mqtt.switch" = ps: with ps; [ paho-mqtt ];
-    "mqtt.vacuum" = ps: with ps; [ paho-mqtt ];
-    "mqtt_eventstream" = ps: with ps; [ paho-mqtt ];
-    "mqtt_json" = ps: with ps; [  ];
-    "mqtt_json.device_tracker" = ps: with ps; [ paho-mqtt ];
-    "mqtt_room" = ps: with ps; [  ];
-    "mqtt_room.sensor" = ps: with ps; [ paho-mqtt ];
-    "mqtt_statestream" = ps: with ps; [ paho-mqtt ];
-    "mvglive" = ps: with ps; [  ];
-    "mvglive.sensor" = ps: with ps; [ PyMVGLive ];
+    "mpd" = ps: with ps; [ mpd2 ];
+    "mqtt" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt ];
+    "mqtt_eventstream" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt ];
+    "mqtt_json" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt ];
+    "mqtt_room" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt ];
+    "mqtt_statestream" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt ];
+    "mvglive" = ps: with ps; [ PyMVGLive ];
     "mychevy" = ps: with ps; [  ];
-    "mychevy.binary_sensor" = ps: with ps; [  ];
-    "mychevy.sensor" = ps: with ps; [  ];
     "mycroft" = ps: with ps; [  ];
-    "mycroft.notify" = ps: with ps; [  ];
     "myq" = ps: with ps; [  ];
-    "myq.cover" = ps: with ps; [  ];
     "mysensors" = ps: with ps; [  ];
-    "mysensors.binary_sensor" = ps: with ps; [  ];
-    "mysensors.climate" = ps: with ps; [  ];
-    "mysensors.const" = ps: with ps; [  ];
-    "mysensors.cover" = ps: with ps; [  ];
-    "mysensors.device" = ps: with ps; [  ];
-    "mysensors.device_tracker" = ps: with ps; [  ];
-    "mysensors.gateway" = ps: with ps; [  ];
-    "mysensors.handler" = ps: with ps; [  ];
-    "mysensors.helpers" = ps: with ps; [  ];
-    "mysensors.light" = ps: with ps; [  ];
-    "mysensors.notify" = ps: with ps; [  ];
-    "mysensors.sensor" = ps: with ps; [  ];
-    "mysensors.switch" = ps: with ps; [  ];
-    "mystrom" = ps: with ps; [  ];
-    "mystrom.binary_sensor" = ps: with ps; [ aiohttp-cors ];
-    "mystrom.light" = ps: with ps; [  ];
-    "mystrom.switch" = ps: with ps; [  ];
+    "mystrom" = ps: with ps; [ aiohttp-cors ];
     "mythicbeastsdns" = ps: with ps; [  ];
+    "n26" = ps: with ps; [  ];
     "nad" = ps: with ps; [  ];
-    "nad.media_player" = ps: with ps; [  ];
     "namecheapdns" = ps: with ps; [ defusedxml ];
     "nanoleaf" = ps: with ps; [  ];
-    "nanoleaf.light" = ps: with ps; [  ];
     "neato" = ps: with ps; [ pybotvac ];
-    "neato.camera" = ps: with ps; [ pybotvac ];
-    "neato.switch" = ps: with ps; [ pybotvac ];
-    "neato.vacuum" = ps: with ps; [ pybotvac ];
     "nederlandse_spoorwegen" = ps: with ps; [  ];
-    "nederlandse_spoorwegen.sensor" = ps: with ps; [  ];
     "nello" = ps: with ps; [  ];
-    "nello.lock" = ps: with ps; [  ];
     "ness_alarm" = ps: with ps; [  ];
-    "ness_alarm.alarm_control_panel" = ps: with ps; [  ];
-    "ness_alarm.binary_sensor" = ps: with ps; [  ];
     "nest" = ps: with ps; [  ];
-    "nest.binary_sensor" = ps: with ps; [  ];
-    "nest.camera" = ps: with ps; [  ];
-    "nest.climate" = ps: with ps; [  ];
-    "nest.config_flow" = ps: with ps; [  ];
-    "nest.const" = ps: with ps; [  ];
-    "nest.local_auth" = ps: with ps; [  ];
-    "nest.sensor" = ps: with ps; [  ];
     "netatmo" = ps: with ps; [ aiohttp-cors ];
-    "netatmo.binary_sensor" = ps: with ps; [ aiohttp-cors ];
-    "netatmo.camera" = ps: with ps; [ aiohttp-cors ];
-    "netatmo.climate" = ps: with ps; [ aiohttp-cors ];
-    "netatmo.sensor" = ps: with ps; [ aiohttp-cors ];
-    "netatmo_public" = ps: with ps; [  ];
-    "netatmo_public.sensor" = ps: with ps; [ aiohttp-cors ];
+    "netatmo_public" = ps: with ps; [ aiohttp-cors ];
     "netdata" = ps: with ps; [  ];
-    "netdata.sensor" = ps: with ps; [  ];
     "netgear" = ps: with ps; [  ];
-    "netgear.device_tracker" = ps: with ps; [  ];
     "netgear_lte" = ps: with ps; [  ];
-    "netgear_lte.notify" = ps: with ps; [  ];
-    "netgear_lte.sensor" = ps: with ps; [  ];
-    "netgear_lte.sensor_types" = ps: with ps; [  ];
-    "netio" = ps: with ps; [  ];
-    "netio.switch" = ps: with ps; [ aiohttp-cors ];
+    "netio" = ps: with ps; [ aiohttp-cors ];
     "neurio_energy" = ps: with ps; [  ];
-    "neurio_energy.sensor" = ps: with ps; [  ];
     "nfandroidtv" = ps: with ps; [  ];
-    "nfandroidtv.notify" = ps: with ps; [  ];
     "niko_home_control" = ps: with ps; [  ];
-    "niko_home_control.light" = ps: with ps; [  ];
     "nilu" = ps: with ps; [  ];
-    "nilu.air_quality" = ps: with ps; [  ];
     "nissan_leaf" = ps: with ps; [  ];
-    "nissan_leaf.binary_sensor" = ps: with ps; [  ];
-    "nissan_leaf.device_tracker" = ps: with ps; [  ];
-    "nissan_leaf.sensor" = ps: with ps; [  ];
-    "nissan_leaf.switch" = ps: with ps; [  ];
     "nmap_tracker" = ps: with ps; [  ];
-    "nmap_tracker.device_tracker" = ps: with ps; [  ];
     "nmbs" = ps: with ps; [  ];
-    "nmbs.sensor" = ps: with ps; [  ];
     "no_ip" = ps: with ps; [  ];
     "noaa_tides" = ps: with ps; [  ];
-    "noaa_tides.sensor" = ps: with ps; [  ];
     "norway_air" = ps: with ps; [  ];
-    "norway_air.air_quality" = ps: with ps; [  ];
     "notify" = ps: with ps; [  ];
     "nsw_fuel_station" = ps: with ps; [  ];
-    "nsw_fuel_station.sensor" = ps: with ps; [  ];
     "nsw_rural_fire_service_feed" = ps: with ps; [  ];
-    "nsw_rural_fire_service_feed.geo_location" = ps: with ps; [  ];
     "nuheat" = ps: with ps; [  ];
-    "nuheat.climate" = ps: with ps; [  ];
     "nuimo_controller" = ps: with ps; [  ];
     "nuki" = ps: with ps; [  ];
-    "nuki.lock" = ps: with ps; [  ];
     "nut" = ps: with ps; [  ];
-    "nut.sensor" = ps: with ps; [  ];
     "nx584" = ps: with ps; [  ];
-    "nx584.alarm_control_panel" = ps: with ps; [  ];
-    "nx584.binary_sensor" = ps: with ps; [  ];
     "nzbget" = ps: with ps; [  ];
-    "nzbget.sensor" = ps: with ps; [  ];
+    "oasa_telematics" = ps: with ps; [  ];
     "octoprint" = ps: with ps; [  ];
-    "octoprint.binary_sensor" = ps: with ps; [  ];
-    "octoprint.sensor" = ps: with ps; [  ];
     "oem" = ps: with ps; [  ];
-    "oem.climate" = ps: with ps; [  ];
-    "ohmconnect" = ps: with ps; [  ];
-    "ohmconnect.sensor" = ps: with ps; [ defusedxml ];
+    "ohmconnect" = ps: with ps; [ defusedxml ];
     "onboarding" = ps: with ps; [ aiohttp-cors ];
-    "onboarding.const" = ps: with ps; [  ];
-    "onboarding.views" = ps: with ps; [  ];
     "onewire" = ps: with ps; [  ];
-    "onewire.sensor" = ps: with ps; [  ];
-    "onkyo" = ps: with ps; [  ];
-    "onkyo.media_player" = ps: with ps; [ onkyo-eiscp ];
-    "onvif" = ps: with ps; [  ];
-    "onvif.camera" = ps: with ps; [ ha-ffmpeg ];
+    "onkyo" = ps: with ps; [ onkyo-eiscp ];
+    "onvif" = ps: with ps; [ ha-ffmpeg ];
     "openalpr_cloud" = ps: with ps; [  ];
-    "openalpr_cloud.image_processing" = ps: with ps; [  ];
     "openalpr_local" = ps: with ps; [  ];
-    "openalpr_local.image_processing" = ps: with ps; [  ];
-    "opencv" = ps: with ps; [  ];
-    "opencv.image_processing" = ps: with ps; [ numpy ];
+    "opencv" = ps: with ps; [ numpy ];
     "openevse" = ps: with ps; [  ];
-    "openevse.sensor" = ps: with ps; [  ];
     "openexchangerates" = ps: with ps; [  ];
-    "openexchangerates.sensor" = ps: with ps; [  ];
     "opengarage" = ps: with ps; [  ];
-    "opengarage.cover" = ps: with ps; [  ];
     "openhardwaremonitor" = ps: with ps; [  ];
-    "openhardwaremonitor.sensor" = ps: with ps; [  ];
     "openhome" = ps: with ps; [  ];
-    "openhome.media_player" = ps: with ps; [  ];
     "opensensemap" = ps: with ps; [  ];
-    "opensensemap.air_quality" = ps: with ps; [  ];
     "opensky" = ps: with ps; [  ];
-    "opensky.sensor" = ps: with ps; [  ];
     "opentherm_gw" = ps: with ps; [  ];
-    "opentherm_gw.binary_sensor" = ps: with ps; [  ];
-    "opentherm_gw.climate" = ps: with ps; [  ];
-    "opentherm_gw.sensor" = ps: with ps; [  ];
     "openuv" = ps: with ps; [  ];
-    "openuv.binary_sensor" = ps: with ps; [  ];
-    "openuv.config_flow" = ps: with ps; [  ];
-    "openuv.const" = ps: with ps; [  ];
-    "openuv.sensor" = ps: with ps; [  ];
-    "openweathermap" = ps: with ps; [  ];
-    "openweathermap.sensor" = ps: with ps; [ pyowm ];
-    "openweathermap.weather" = ps: with ps; [ pyowm ];
+    "openweathermap" = ps: with ps; [ pyowm ];
     "opple" = ps: with ps; [  ];
-    "opple.light" = ps: with ps; [  ];
     "orvibo" = ps: with ps; [  ];
-    "orvibo.switch" = ps: with ps; [  ];
     "osramlightify" = ps: with ps; [  ];
-    "osramlightify.light" = ps: with ps; [  ];
-    "otp" = ps: with ps; [  ];
-    "otp.sensor" = ps: with ps; [ pyotp ];
+    "otp" = ps: with ps; [ pyotp ];
     "owlet" = ps: with ps; [  ];
-    "owlet.binary_sensor" = ps: with ps; [  ];
-    "owlet.const" = ps: with ps; [  ];
-    "owlet.sensor" = ps: with ps; [  ];
     "owntracks" = ps: with ps; [ pynacl aiohttp-cors ];
-    "owntracks.config_flow" = ps: with ps; [  ];
-    "owntracks.device_tracker" = ps: with ps; [ pynacl aiohttp-cors ];
     "panasonic_bluray" = ps: with ps; [  ];
-    "panasonic_bluray.media_player" = ps: with ps; [  ];
-    "panasonic_viera" = ps: with ps; [  ];
-    "panasonic_viera.media_player" = ps: with ps; [ wakeonlan ];
-    "pandora" = ps: with ps; [  ];
-    "pandora.media_player" = ps: with ps; [ pexpect ];
+    "panasonic_viera" = ps: with ps; [ wakeonlan ];
+    "pandora" = ps: with ps; [ pexpect ];
     "panel_custom" = ps: with ps; [ aiohttp-cors ];
     "panel_iframe" = ps: with ps; [ aiohttp-cors ];
     "pencom" = ps: with ps; [  ];
-    "pencom.switch" = ps: with ps; [  ];
     "persistent_notification" = ps: with ps; [  ];
     "person" = ps: with ps; [  ];
     "philips_js" = ps: with ps; [  ];
-    "philips_js.media_player" = ps: with ps; [  ];
     "pi_hole" = ps: with ps; [  ];
-    "pi_hole.sensor" = ps: with ps; [  ];
     "picotts" = ps: with ps; [  ];
-    "picotts.tts" = ps: with ps; [  ];
     "piglow" = ps: with ps; [  ];
-    "piglow.light" = ps: with ps; [  ];
     "pilight" = ps: with ps; [  ];
-    "pilight.binary_sensor" = ps: with ps; [  ];
-    "pilight.sensor" = ps: with ps; [  ];
-    "pilight.switch" = ps: with ps; [  ];
     "ping" = ps: with ps; [  ];
-    "ping.binary_sensor" = ps: with ps; [  ];
-    "ping.device_tracker" = ps: with ps; [  ];
     "pioneer" = ps: with ps; [  ];
-    "pioneer.media_player" = ps: with ps; [  ];
     "pjlink" = ps: with ps; [  ];
-    "pjlink.media_player" = ps: with ps; [  ];
     "plant" = ps: with ps; [  ];
     "plex" = ps: with ps; [  ];
-    "plex.media_player" = ps: with ps; [  ];
-    "plex.sensor" = ps: with ps; [  ];
     "plum_lightpad" = ps: with ps; [  ];
-    "plum_lightpad.light" = ps: with ps; [  ];
     "pocketcasts" = ps: with ps; [  ];
-    "pocketcasts.sensor" = ps: with ps; [  ];
     "point" = ps: with ps; [ aiohttp-cors ];
-    "point.alarm_control_panel" = ps: with ps; [  ];
-    "point.binary_sensor" = ps: with ps; [  ];
-    "point.config_flow" = ps: with ps; [  ];
-    "point.const" = ps: with ps; [  ];
-    "point.sensor" = ps: with ps; [  ];
-    "pollen" = ps: with ps; [  ];
-    "pollen.sensor" = ps: with ps; [ numpy ];
+    "pollen" = ps: with ps; [ numpy ];
     "postnl" = ps: with ps; [  ];
-    "postnl.sensor" = ps: with ps; [  ];
     "prezzibenzina" = ps: with ps; [  ];
-    "prezzibenzina.sensor" = ps: with ps; [  ];
     "proliphix" = ps: with ps; [  ];
-    "proliphix.climate" = ps: with ps; [  ];
     "prometheus" = ps: with ps; [ aiohttp-cors prometheus_client ];
     "prowl" = ps: with ps; [  ];
-    "prowl.notify" = ps: with ps; [  ];
     "proximity" = ps: with ps; [  ];
-    "proxy" = ps: with ps; [  ];
-    "proxy.camera" = ps: with ps; [ pillow ];
+    "proxy" = ps: with ps; [ pillow ];
     "ps4" = ps: with ps; [  ];
-    "ps4.config_flow" = ps: with ps; [  ];
-    "ps4.const" = ps: with ps; [  ];
-    "ps4.media_player" = ps: with ps; [  ];
     "pulseaudio_loopback" = ps: with ps; [  ];
-    "pulseaudio_loopback.switch" = ps: with ps; [  ];
-    "push" = ps: with ps; [  ];
-    "push.camera" = ps: with ps; [ aiohttp-cors ];
-    "pushbullet" = ps: with ps; [  ];
-    "pushbullet.notify" = ps: with ps; [ pushbullet ];
-    "pushbullet.sensor" = ps: with ps; [ pushbullet ];
+    "push" = ps: with ps; [ aiohttp-cors ];
+    "pushbullet" = ps: with ps; [ pushbullet ];
     "pushetta" = ps: with ps; [  ];
-    "pushetta.notify" = ps: with ps; [  ];
-    "pushover" = ps: with ps; [  ];
-    "pushover.notify" = ps: with ps; [ python-pushover ];
+    "pushover" = ps: with ps; [ python-pushover ];
     "pushsafer" = ps: with ps; [  ];
-    "pushsafer.notify" = ps: with ps; [  ];
     "pvoutput" = ps: with ps; [  ];
-    "pvoutput.sensor" = ps: with ps; [  ];
     "pyload" = ps: with ps; [  ];
-    "pyload.sensor" = ps: with ps; [  ];
     "python_script" = ps: with ps; [  ];
     "qbittorrent" = ps: with ps; [  ];
-    "qbittorrent.sensor" = ps: with ps; [  ];
     "qnap" = ps: with ps; [  ];
-    "qnap.sensor" = ps: with ps; [  ];
-    "qrcode" = ps: with ps; [  ];
-    "qrcode.image_processing" = ps: with ps; [ pillow ];
+    "qrcode" = ps: with ps; [ pillow ];
     "quantum_gateway" = ps: with ps; [  ];
-    "quantum_gateway.device_tracker" = ps: with ps; [  ];
     "qwikswitch" = ps: with ps; [  ];
-    "qwikswitch.binary_sensor" = ps: with ps; [  ];
-    "qwikswitch.light" = ps: with ps; [  ];
-    "qwikswitch.sensor" = ps: with ps; [  ];
-    "qwikswitch.switch" = ps: with ps; [  ];
     "rachio" = ps: with ps; [  ];
-    "rachio.binary_sensor" = ps: with ps; [  ];
-    "rachio.switch" = ps: with ps; [  ];
     "radarr" = ps: with ps; [  ];
-    "radarr.sensor" = ps: with ps; [  ];
     "radiotherm" = ps: with ps; [  ];
-    "radiotherm.climate" = ps: with ps; [  ];
     "rainbird" = ps: with ps; [  ];
-    "rainbird.sensor" = ps: with ps; [  ];
-    "rainbird.switch" = ps: with ps; [  ];
     "raincloud" = ps: with ps; [  ];
-    "raincloud.binary_sensor" = ps: with ps; [  ];
-    "raincloud.sensor" = ps: with ps; [  ];
-    "raincloud.switch" = ps: with ps; [  ];
     "rainmachine" = ps: with ps; [  ];
-    "rainmachine.binary_sensor" = ps: with ps; [  ];
-    "rainmachine.config_flow" = ps: with ps; [  ];
-    "rainmachine.const" = ps: with ps; [  ];
-    "rainmachine.sensor" = ps: with ps; [  ];
-    "rainmachine.switch" = ps: with ps; [  ];
     "random" = ps: with ps; [  ];
-    "random.binary_sensor" = ps: with ps; [  ];
-    "random.sensor" = ps: with ps; [  ];
     "raspihats" = ps: with ps; [  ];
-    "raspihats.binary_sensor" = ps: with ps; [  ];
-    "raspihats.switch" = ps: with ps; [  ];
     "raspyrfm" = ps: with ps; [  ];
-    "raspyrfm.switch" = ps: with ps; [  ];
     "recollect_waste" = ps: with ps; [  ];
-    "recollect_waste.sensor" = ps: with ps; [  ];
     "recorder" = ps: with ps; [ sqlalchemy ];
-    "recorder.const" = ps: with ps; [  ];
-    "recorder.migration" = ps: with ps; [  ];
-    "recorder.purge" = ps: with ps; [  ];
-    "recorder.util" = ps: with ps; [  ];
     "recswitch" = ps: with ps; [  ];
-    "recswitch.switch" = ps: with ps; [  ];
-    "reddit" = ps: with ps; [  ];
-    "reddit.sensor" = ps: with ps; [ praw ];
+    "reddit" = ps: with ps; [ praw ];
     "rejseplanen" = ps: with ps; [  ];
-    "rejseplanen.sensor" = ps: with ps; [  ];
     "remember_the_milk" = ps: with ps; [ httplib2 ];
     "remote" = ps: with ps; [  ];
     "rest" = ps: with ps; [  ];
-    "rest.binary_sensor" = ps: with ps; [  ];
-    "rest.notify" = ps: with ps; [  ];
-    "rest.sensor" = ps: with ps; [  ];
-    "rest.switch" = ps: with ps; [  ];
     "rest_command" = ps: with ps; [  ];
     "rflink" = ps: with ps; [  ];
-    "rflink.binary_sensor" = ps: with ps; [  ];
-    "rflink.cover" = ps: with ps; [  ];
-    "rflink.light" = ps: with ps; [  ];
-    "rflink.sensor" = ps: with ps; [  ];
-    "rflink.switch" = ps: with ps; [  ];
     "rfxtrx" = ps: with ps; [  ];
-    "rfxtrx.binary_sensor" = ps: with ps; [  ];
-    "rfxtrx.cover" = ps: with ps; [  ];
-    "rfxtrx.light" = ps: with ps; [  ];
-    "rfxtrx.sensor" = ps: with ps; [  ];
-    "rfxtrx.switch" = ps: with ps; [  ];
-    "ring" = ps: with ps; [  ];
-    "ring.binary_sensor" = ps: with ps; [  ];
-    "ring.camera" = ps: with ps; [ ha-ffmpeg ];
-    "ring.sensor" = ps: with ps; [  ];
+    "ring" = ps: with ps; [ ha-ffmpeg ];
     "ripple" = ps: with ps; [  ];
-    "ripple.sensor" = ps: with ps; [  ];
     "ritassist" = ps: with ps; [  ];
-    "ritassist.device_tracker" = ps: with ps; [  ];
     "rmvtransport" = ps: with ps; [  ];
-    "rmvtransport.sensor" = ps: with ps; [  ];
     "rocketchat" = ps: with ps; [  ];
-    "rocketchat.notify" = ps: with ps; [  ];
     "roku" = ps: with ps; [  ];
-    "roku.media_player" = ps: with ps; [  ];
-    "roku.remote" = ps: with ps; [  ];
     "roomba" = ps: with ps; [  ];
-    "roomba.vacuum" = ps: with ps; [  ];
     "route53" = ps: with ps; [ boto3 ];
     "rova" = ps: with ps; [  ];
-    "rova.sensor" = ps: with ps; [  ];
     "rpi_camera" = ps: with ps; [  ];
-    "rpi_camera.camera" = ps: with ps; [  ];
     "rpi_gpio" = ps: with ps; [  ];
-    "rpi_gpio.binary_sensor" = ps: with ps; [  ];
-    "rpi_gpio.cover" = ps: with ps; [  ];
-    "rpi_gpio.switch" = ps: with ps; [  ];
     "rpi_gpio_pwm" = ps: with ps; [  ];
-    "rpi_gpio_pwm.light" = ps: with ps; [  ];
     "rpi_pfio" = ps: with ps; [  ];
-    "rpi_pfio.binary_sensor" = ps: with ps; [  ];
-    "rpi_pfio.switch" = ps: with ps; [  ];
     "rpi_rf" = ps: with ps; [  ];
-    "rpi_rf.switch" = ps: with ps; [  ];
     "rss_feed_template" = ps: with ps; [ aiohttp-cors ];
     "rtorrent" = ps: with ps; [  ];
-    "rtorrent.sensor" = ps: with ps; [  ];
     "russound_rio" = ps: with ps; [  ];
-    "russound_rio.media_player" = ps: with ps; [  ];
     "russound_rnet" = ps: with ps; [  ];
-    "russound_rnet.media_player" = ps: with ps; [  ];
     "ruter" = ps: with ps; [  ];
-    "ruter.sensor" = ps: with ps; [  ];
     "sabnzbd" = ps: with ps; [  ];
-    "sabnzbd.sensor" = ps: with ps; [  ];
-    "samsungtv" = ps: with ps; [  ];
-    "samsungtv.media_player" = ps: with ps; [ wakeonlan ];
+    "samsungtv" = ps: with ps; [ wakeonlan ];
     "satel_integra" = ps: with ps; [  ];
-    "satel_integra.alarm_control_panel" = ps: with ps; [  ];
-    "satel_integra.binary_sensor" = ps: with ps; [  ];
     "scene" = ps: with ps; [  ];
-    "scrape" = ps: with ps; [  ];
-    "scrape.sensor" = ps: with ps; [ beautifulsoup4 ];
+    "scrape" = ps: with ps; [ beautifulsoup4 ];
     "script" = ps: with ps; [  ];
     "scsgate" = ps: with ps; [  ];
-    "scsgate.cover" = ps: with ps; [  ];
-    "scsgate.light" = ps: with ps; [  ];
-    "scsgate.switch" = ps: with ps; [  ];
-    "season" = ps: with ps; [  ];
-    "season.sensor" = ps: with ps; [ ephem ];
+    "season" = ps: with ps; [ ephem ];
     "sendgrid" = ps: with ps; [  ];
-    "sendgrid.notify" = ps: with ps; [  ];
     "sense" = ps: with ps; [  ];
-    "sense.binary_sensor" = ps: with ps; [  ];
-    "sense.sensor" = ps: with ps; [  ];
     "sensehat" = ps: with ps; [  ];
-    "sensehat.light" = ps: with ps; [  ];
-    "sensehat.sensor" = ps: with ps; [  ];
     "sensibo" = ps: with ps; [  ];
-    "sensibo.climate" = ps: with ps; [  ];
     "sensor" = ps: with ps; [  ];
     "serial" = ps: with ps; [  ];
-    "serial.sensor" = ps: with ps; [  ];
     "serial_pm" = ps: with ps; [  ];
-    "serial_pm.sensor" = ps: with ps; [  ];
     "sesame" = ps: with ps; [  ];
-    "sesame.lock" = ps: with ps; [  ];
     "seven_segments" = ps: with ps; [  ];
-    "seven_segments.image_processing" = ps: with ps; [  ];
     "seventeentrack" = ps: with ps; [  ];
-    "seventeentrack.sensor" = ps: with ps; [  ];
     "shell_command" = ps: with ps; [  ];
     "shiftr" = ps: with ps; [ paho-mqtt ];
-    "shodan" = ps: with ps; [  ];
-    "shodan.sensor" = ps: with ps; [ shodan ];
+    "shodan" = ps: with ps; [ shodan ];
     "shopping_list" = ps: with ps; [ aiohttp-cors ];
     "sht31" = ps: with ps; [  ];
-    "sht31.sensor" = ps: with ps; [  ];
     "sigfox" = ps: with ps; [  ];
-    "sigfox.sensor" = ps: with ps; [  ];
     "simplepush" = ps: with ps; [  ];
-    "simplepush.notify" = ps: with ps; [  ];
     "simplisafe" = ps: with ps; [  ];
-    "simplisafe.alarm_control_panel" = ps: with ps; [  ];
-    "simplisafe.config_flow" = ps: with ps; [  ];
-    "simplisafe.const" = ps: with ps; [  ];
     "simulated" = ps: with ps; [  ];
-    "simulated.sensor" = ps: with ps; [  ];
     "sisyphus" = ps: with ps; [  ];
-    "sisyphus.light" = ps: with ps; [  ];
-    "sisyphus.media_player" = ps: with ps; [  ];
     "sky_hub" = ps: with ps; [  ];
-    "sky_hub.device_tracker" = ps: with ps; [  ];
     "skybeacon" = ps: with ps; [  ];
-    "skybeacon.sensor" = ps: with ps; [  ];
     "skybell" = ps: with ps; [  ];
-    "skybell.binary_sensor" = ps: with ps; [  ];
-    "skybell.camera" = ps: with ps; [  ];
-    "skybell.light" = ps: with ps; [  ];
-    "skybell.sensor" = ps: with ps; [  ];
-    "skybell.switch" = ps: with ps; [  ];
     "slack" = ps: with ps; [  ];
-    "slack.notify" = ps: with ps; [  ];
     "sleepiq" = ps: with ps; [  ];
-    "sleepiq.binary_sensor" = ps: with ps; [  ];
-    "sleepiq.sensor" = ps: with ps; [  ];
     "sma" = ps: with ps; [  ];
-    "sma.sensor" = ps: with ps; [  ];
     "smappee" = ps: with ps; [  ];
-    "smappee.sensor" = ps: with ps; [  ];
-    "smappee.switch" = ps: with ps; [  ];
     "smartthings" = ps: with ps; [ aiohttp-cors ];
-    "smartthings.binary_sensor" = ps: with ps; [ aiohttp-cors ];
-    "smartthings.climate" = ps: with ps; [ aiohttp-cors ];
-    "smartthings.config_flow" = ps: with ps; [  ];
-    "smartthings.const" = ps: with ps; [  ];
-    "smartthings.cover" = ps: with ps; [ aiohttp-cors ];
-    "smartthings.fan" = ps: with ps; [ aiohttp-cors ];
-    "smartthings.light" = ps: with ps; [ aiohttp-cors ];
-    "smartthings.lock" = ps: with ps; [ aiohttp-cors ];
-    "smartthings.scene" = ps: with ps; [ aiohttp-cors ];
-    "smartthings.sensor" = ps: with ps; [ aiohttp-cors ];
-    "smartthings.smartapp" = ps: with ps; [  ];
-    "smartthings.switch" = ps: with ps; [ aiohttp-cors ];
     "smhi" = ps: with ps; [  ];
-    "smhi.config_flow" = ps: with ps; [  ];
-    "smhi.const" = ps: with ps; [  ];
-    "smhi.weather" = ps: with ps; [  ];
     "smtp" = ps: with ps; [  ];
-    "smtp.notify" = ps: with ps; [  ];
-    "snapcast" = ps: with ps; [  ];
-    "snapcast.media_player" = ps: with ps; [ snapcast ];
-    "snips" = ps: with ps; [ paho-mqtt ];
-    "snmp" = ps: with ps; [  ];
-    "snmp.device_tracker" = ps: with ps; [ pysnmp ];
-    "snmp.sensor" = ps: with ps; [ pysnmp ];
-    "snmp.switch" = ps: with ps; [ pysnmp ];
+    "snapcast" = ps: with ps; [ snapcast ];
+    "snips" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt ];
+    "snmp" = ps: with ps; [ pysnmp ];
     "sochain" = ps: with ps; [  ];
-    "sochain.sensor" = ps: with ps; [  ];
     "socialblade" = ps: with ps; [  ];
-    "socialblade.sensor" = ps: with ps; [  ];
     "solaredge" = ps: with ps; [  ];
-    "solaredge.sensor" = ps: with ps; [  ];
+    "somfy_mylink" = ps: with ps; [  ];
     "sonarr" = ps: with ps; [  ];
-    "sonarr.sensor" = ps: with ps; [  ];
     "songpal" = ps: with ps; [  ];
-    "songpal.media_player" = ps: with ps; [  ];
     "sonos" = ps: with ps; [  ];
-    "sonos.media_player" = ps: with ps; [  ];
     "sony_projector" = ps: with ps; [  ];
-    "sony_projector.switch" = ps: with ps; [  ];
-    "soundtouch" = ps: with ps; [  ];
-    "soundtouch.media_player" = ps: with ps; [ libsoundtouch ];
+    "soundtouch" = ps: with ps; [ libsoundtouch ];
     "spaceapi" = ps: with ps; [ aiohttp-cors ];
     "spc" = ps: with ps; [  ];
-    "spc.alarm_control_panel" = ps: with ps; [  ];
-    "spc.binary_sensor" = ps: with ps; [  ];
     "speedtestdotnet" = ps: with ps; [ speedtest-cli ];
-    "speedtestdotnet.const" = ps: with ps; [  ];
-    "speedtestdotnet.sensor" = ps: with ps; [ speedtest-cli ];
     "spider" = ps: with ps; [  ];
-    "spider.climate" = ps: with ps; [  ];
-    "spider.switch" = ps: with ps; [  ];
     "splunk" = ps: with ps; [  ];
     "spotcrime" = ps: with ps; [  ];
-    "spotcrime.sensor" = ps: with ps; [  ];
-    "spotify" = ps: with ps; [  ];
-    "spotify.media_player" = ps: with ps; [ aiohttp-cors ];
-    "sql" = ps: with ps; [  ];
-    "sql.sensor" = ps: with ps; [ sqlalchemy ];
+    "spotify" = ps: with ps; [ aiohttp-cors ];
+    "sql" = ps: with ps; [ sqlalchemy ];
     "squeezebox" = ps: with ps; [  ];
-    "squeezebox.media_player" = ps: with ps; [  ];
     "srp_energy" = ps: with ps; [  ];
-    "srp_energy.sensor" = ps: with ps; [  ];
     "starlingbank" = ps: with ps; [  ];
-    "starlingbank.sensor" = ps: with ps; [  ];
-    "startca" = ps: with ps; [  ];
-    "startca.sensor" = ps: with ps; [ xmltodict ];
+    "startca" = ps: with ps; [ xmltodict ];
     "statistics" = ps: with ps; [  ];
-    "statistics.sensor" = ps: with ps; [  ];
     "statsd" = ps: with ps; [ statsd ];
     "steam_online" = ps: with ps; [  ];
-    "steam_online.sensor" = ps: with ps; [  ];
+    "stiebel_eltron" = ps: with ps; [  ];
     "stream" = ps: with ps; [ aiohttp-cors av ];
-    "stream.const" = ps: with ps; [  ];
-    "stream.core" = ps: with ps; [  ];
-    "stream.hls" = ps: with ps; [  ];
-    "stream.recorder" = ps: with ps; [  ];
-    "stream.worker" = ps: with ps; [  ];
     "stride" = ps: with ps; [  ];
-    "stride.notify" = ps: with ps; [  ];
     "sun" = ps: with ps; [  ];
     "supervisord" = ps: with ps; [  ];
-    "supervisord.sensor" = ps: with ps; [  ];
+    "supla" = ps: with ps; [  ];
     "swiss_hydrological_data" = ps: with ps; [  ];
-    "swiss_hydrological_data.sensor" = ps: with ps; [  ];
     "swiss_public_transport" = ps: with ps; [  ];
-    "swiss_public_transport.sensor" = ps: with ps; [  ];
     "swisscom" = ps: with ps; [  ];
-    "swisscom.device_tracker" = ps: with ps; [  ];
     "switch" = ps: with ps; [  ];
-    "switch.light" = ps: with ps; [  ];
     "switchbot" = ps: with ps; [  ];
-    "switchbot.switch" = ps: with ps; [  ];
     "switchmate" = ps: with ps; [  ];
-    "switchmate.switch" = ps: with ps; [  ];
     "syncthru" = ps: with ps; [  ];
-    "syncthru.sensor" = ps: with ps; [  ];
     "synology" = ps: with ps; [  ];
-    "synology.camera" = ps: with ps; [  ];
     "synology_chat" = ps: with ps; [  ];
-    "synology_chat.notify" = ps: with ps; [  ];
     "synology_srm" = ps: with ps; [  ];
-    "synology_srm.device_tracker" = ps: with ps; [  ];
     "synologydsm" = ps: with ps; [  ];
-    "synologydsm.sensor" = ps: with ps; [  ];
     "syslog" = ps: with ps; [  ];
-    "syslog.notify" = ps: with ps; [  ];
     "system_health" = ps: with ps; [ aiohttp-cors ];
     "system_log" = ps: with ps; [ aiohttp-cors ];
-    "systemmonitor" = ps: with ps; [  ];
-    "systemmonitor.sensor" = ps: with ps; [ psutil ];
-    "sytadin" = ps: with ps; [  ];
-    "sytadin.sensor" = ps: with ps; [ beautifulsoup4 ];
+    "systemmonitor" = ps: with ps; [ psutil ];
+    "sytadin" = ps: with ps; [ beautifulsoup4 ];
     "tado" = ps: with ps; [  ];
-    "tado.climate" = ps: with ps; [  ];
-    "tado.device_tracker" = ps: with ps; [  ];
-    "tado.sensor" = ps: with ps; [  ];
     "tahoma" = ps: with ps; [  ];
-    "tahoma.binary_sensor" = ps: with ps; [  ];
-    "tahoma.cover" = ps: with ps; [  ];
-    "tahoma.scene" = ps: with ps; [  ];
-    "tahoma.sensor" = ps: with ps; [  ];
-    "tahoma.switch" = ps: with ps; [  ];
     "tank_utility" = ps: with ps; [  ];
-    "tank_utility.sensor" = ps: with ps; [  ];
     "tapsaff" = ps: with ps; [  ];
-    "tapsaff.binary_sensor" = ps: with ps; [  ];
     "tautulli" = ps: with ps; [  ];
-    "tautulli.sensor" = ps: with ps; [  ];
     "tcp" = ps: with ps; [  ];
-    "tcp.binary_sensor" = ps: with ps; [  ];
-    "tcp.sensor" = ps: with ps; [  ];
-    "ted5000" = ps: with ps; [  ];
-    "ted5000.sensor" = ps: with ps; [ xmltodict ];
+    "ted5000" = ps: with ps; [ xmltodict ];
     "teksavvy" = ps: with ps; [  ];
-    "teksavvy.sensor" = ps: with ps; [  ];
-    "telegram" = ps: with ps; [  ];
-    "telegram.notify" = ps: with ps; [ python-telegram-bot ];
-    "telegram_bot" = ps: with ps; [ python-telegram-bot ];
-    "telegram_bot.broadcast" = ps: with ps; [  ];
-    "telegram_bot.polling" = ps: with ps; [  ];
-    "telegram_bot.webhooks" = ps: with ps; [ aiohttp-cors ];
+    "telegram" = ps: with ps; [ aiohttp-cors python-telegram-bot ];
+    "telegram_bot" = ps: with ps; [ aiohttp-cors python-telegram-bot ];
     "tellduslive" = ps: with ps; [  ];
-    "tellduslive.binary_sensor" = ps: with ps; [  ];
-    "tellduslive.config_flow" = ps: with ps; [  ];
-    "tellduslive.const" = ps: with ps; [  ];
-    "tellduslive.cover" = ps: with ps; [  ];
-    "tellduslive.entry" = ps: with ps; [  ];
-    "tellduslive.light" = ps: with ps; [  ];
-    "tellduslive.sensor" = ps: with ps; [  ];
-    "tellduslive.switch" = ps: with ps; [  ];
     "tellstick" = ps: with ps; [  ];
-    "tellstick.cover" = ps: with ps; [  ];
-    "tellstick.light" = ps: with ps; [  ];
-    "tellstick.sensor" = ps: with ps; [  ];
-    "tellstick.switch" = ps: with ps; [  ];
     "telnet" = ps: with ps; [  ];
-    "telnet.switch" = ps: with ps; [  ];
     "temper" = ps: with ps; [  ];
-    "temper.sensor" = ps: with ps; [  ];
     "template" = ps: with ps; [  ];
-    "template.binary_sensor" = ps: with ps; [  ];
-    "template.cover" = ps: with ps; [  ];
-    "template.fan" = ps: with ps; [  ];
-    "template.light" = ps: with ps; [  ];
-    "template.lock" = ps: with ps; [  ];
-    "template.sensor" = ps: with ps; [  ];
-    "template.switch" = ps: with ps; [  ];
-    "tensorflow" = ps: with ps; [  ];
-    "tensorflow.image_processing" = ps: with ps; [ numpy pillow protobuf ];
+    "tensorflow" = ps: with ps; [ numpy pillow protobuf ];
     "tesla" = ps: with ps; [  ];
-    "tesla.binary_sensor" = ps: with ps; [  ];
-    "tesla.climate" = ps: with ps; [  ];
-    "tesla.device_tracker" = ps: with ps; [  ];
-    "tesla.lock" = ps: with ps; [  ];
-    "tesla.sensor" = ps: with ps; [  ];
-    "tesla.switch" = ps: with ps; [  ];
     "tfiac" = ps: with ps; [  ];
-    "tfiac.climate" = ps: with ps; [  ];
     "thermoworks_smoke" = ps: with ps; [  ];
-    "thermoworks_smoke.sensor" = ps: with ps; [  ];
     "thethingsnetwork" = ps: with ps; [  ];
-    "thethingsnetwork.sensor" = ps: with ps; [  ];
     "thingspeak" = ps: with ps; [  ];
     "thinkingcleaner" = ps: with ps; [  ];
-    "thinkingcleaner.sensor" = ps: with ps; [  ];
-    "thinkingcleaner.switch" = ps: with ps; [  ];
     "thomson" = ps: with ps; [  ];
-    "thomson.device_tracker" = ps: with ps; [  ];
     "threshold" = ps: with ps; [  ];
-    "threshold.binary_sensor" = ps: with ps; [  ];
     "tibber" = ps: with ps; [  ];
-    "tibber.notify" = ps: with ps; [  ];
-    "tibber.sensor" = ps: with ps; [  ];
     "tikteck" = ps: with ps; [  ];
-    "tikteck.light" = ps: with ps; [  ];
     "tile" = ps: with ps; [  ];
-    "tile.device_tracker" = ps: with ps; [  ];
     "time_date" = ps: with ps; [  ];
-    "time_date.sensor" = ps: with ps; [  ];
     "timer" = ps: with ps; [  ];
     "tod" = ps: with ps; [  ];
-    "tod.binary_sensor" = ps: with ps; [  ];
-    "todoist" = ps: with ps; [  ];
-    "todoist.calendar" = ps: with ps; [ todoist ];
+    "todoist" = ps: with ps; [ todoist ];
     "tof" = ps: with ps; [  ];
-    "tof.sensor" = ps: with ps; [  ];
     "tomato" = ps: with ps; [  ];
-    "tomato.device_tracker" = ps: with ps; [  ];
     "toon" = ps: with ps; [  ];
-    "toon.binary_sensor" = ps: with ps; [  ];
-    "toon.climate" = ps: with ps; [  ];
-    "toon.config_flow" = ps: with ps; [  ];
-    "toon.const" = ps: with ps; [  ];
-    "toon.sensor" = ps: with ps; [  ];
-    "torque" = ps: with ps; [  ];
-    "torque.sensor" = ps: with ps; [ aiohttp-cors ];
+    "torque" = ps: with ps; [ aiohttp-cors ];
     "totalconnect" = ps: with ps; [  ];
-    "totalconnect.alarm_control_panel" = ps: with ps; [  ];
     "touchline" = ps: with ps; [  ];
-    "touchline.climate" = ps: with ps; [  ];
     "tplink" = ps: with ps; [  ];
-    "tplink.device_tracker" = ps: with ps; [  ];
-    "tplink.light" = ps: with ps; [  ];
-    "tplink.switch" = ps: with ps; [  ];
     "tplink_lte" = ps: with ps; [  ];
-    "tplink_lte.notify" = ps: with ps; [  ];
     "traccar" = ps: with ps; [  ];
-    "traccar.device_tracker" = ps: with ps; [  ];
     "trackr" = ps: with ps; [  ];
-    "trackr.device_tracker" = ps: with ps; [  ];
     "tradfri" = ps: with ps; [  ];
-    "tradfri.config_flow" = ps: with ps; [  ];
-    "tradfri.const" = ps: with ps; [  ];
-    "tradfri.light" = ps: with ps; [  ];
-    "tradfri.sensor" = ps: with ps; [  ];
-    "tradfri.switch" = ps: with ps; [  ];
     "trafikverket_weatherstation" = ps: with ps; [  ];
-    "trafikverket_weatherstation.sensor" = ps: with ps; [  ];
     "transmission" = ps: with ps; [ transmissionrpc ];
-    "transmission.sensor" = ps: with ps; [ transmissionrpc ];
-    "transmission.switch" = ps: with ps; [ transmissionrpc ];
     "transport_nsw" = ps: with ps; [  ];
-    "transport_nsw.sensor" = ps: with ps; [  ];
     "travisci" = ps: with ps; [  ];
-    "travisci.sensor" = ps: with ps; [  ];
-    "trend" = ps: with ps; [  ];
-    "trend.binary_sensor" = ps: with ps; [ numpy ];
+    "trend" = ps: with ps; [ numpy ];
     "tts" = ps: with ps; [ aiohttp-cors mutagen ];
     "tuya" = ps: with ps; [  ];
-    "tuya.climate" = ps: with ps; [  ];
-    "tuya.cover" = ps: with ps; [  ];
-    "tuya.fan" = ps: with ps; [  ];
-    "tuya.light" = ps: with ps; [  ];
-    "tuya.scene" = ps: with ps; [  ];
-    "tuya.switch" = ps: with ps; [  ];
     "twilio" = ps: with ps; [ aiohttp-cors twilio ];
-    "twilio_call" = ps: with ps; [  ];
-    "twilio_call.notify" = ps: with ps; [ aiohttp-cors twilio ];
-    "twilio_sms" = ps: with ps; [  ];
-    "twilio_sms.notify" = ps: with ps; [ aiohttp-cors twilio ];
+    "twilio_call" = ps: with ps; [ aiohttp-cors twilio ];
+    "twilio_sms" = ps: with ps; [ aiohttp-cors twilio ];
     "twitch" = ps: with ps; [  ];
-    "twitch.sensor" = ps: with ps; [  ];
     "twitter" = ps: with ps; [  ];
-    "twitter.notify" = ps: with ps; [  ];
     "ubee" = ps: with ps; [  ];
-    "ubee.device_tracker" = ps: with ps; [  ];
     "uber" = ps: with ps; [  ];
-    "uber.sensor" = ps: with ps; [  ];
     "ubus" = ps: with ps; [  ];
-    "ubus.device_tracker" = ps: with ps; [  ];
     "ue_smart_radio" = ps: with ps; [  ];
-    "ue_smart_radio.media_player" = ps: with ps; [  ];
     "uk_transport" = ps: with ps; [  ];
-    "uk_transport.sensor" = ps: with ps; [  ];
-    "unifi" = ps: with ps; [ aiounifi ];
-    "unifi.const" = ps: with ps; [  ];
-    "unifi.controller" = ps: with ps; [  ];
-    "unifi.device_tracker" = ps: with ps; [ pyunifi ];
-    "unifi.errors" = ps: with ps; [  ];
-    "unifi.switch" = ps: with ps; [ aiounifi ];
-    "unifi_direct" = ps: with ps; [  ];
-    "unifi_direct.device_tracker" = ps: with ps; [ pexpect ];
+    "unifi" = ps: with ps; [ aiounifi pyunifi ];
+    "unifi_direct" = ps: with ps; [ pexpect ];
     "universal" = ps: with ps; [  ];
-    "universal.media_player" = ps: with ps; [  ];
-    "upc_connect" = ps: with ps; [  ];
-    "upc_connect.device_tracker" = ps: with ps; [ defusedxml ];
+    "upc_connect" = ps: with ps; [ defusedxml ];
     "upcloud" = ps: with ps; [  ];
-    "upcloud.binary_sensor" = ps: with ps; [  ];
-    "upcloud.switch" = ps: with ps; [  ];
     "updater" = ps: with ps; [ distro ];
     "upnp" = ps: with ps; [  ];
-    "upnp.const" = ps: with ps; [  ];
-    "upnp.device" = ps: with ps; [  ];
-    "upnp.sensor" = ps: with ps; [  ];
     "ups" = ps: with ps; [  ];
-    "ups.sensor" = ps: with ps; [  ];
     "uptime" = ps: with ps; [  ];
-    "uptime.sensor" = ps: with ps; [  ];
     "uptimerobot" = ps: with ps; [  ];
-    "uptimerobot.binary_sensor" = ps: with ps; [  ];
     "uscis" = ps: with ps; [  ];
-    "uscis.sensor" = ps: with ps; [  ];
     "usgs_earthquakes_feed" = ps: with ps; [  ];
-    "usgs_earthquakes_feed.geo_location" = ps: with ps; [  ];
     "usps" = ps: with ps; [  ];
-    "usps.camera" = ps: with ps; [  ];
-    "usps.sensor" = ps: with ps; [  ];
     "utility_meter" = ps: with ps; [  ];
-    "utility_meter.const" = ps: with ps; [  ];
-    "utility_meter.sensor" = ps: with ps; [  ];
     "uvc" = ps: with ps; [  ];
-    "uvc.camera" = ps: with ps; [  ];
     "vacuum" = ps: with ps; [  ];
     "vasttrafik" = ps: with ps; [  ];
-    "vasttrafik.sensor" = ps: with ps; [  ];
     "velbus" = ps: with ps; [  ];
-    "velbus.binary_sensor" = ps: with ps; [  ];
-    "velbus.climate" = ps: with ps; [  ];
-    "velbus.cover" = ps: with ps; [  ];
-    "velbus.sensor" = ps: with ps; [  ];
-    "velbus.switch" = ps: with ps; [  ];
     "velux" = ps: with ps; [  ];
-    "velux.cover" = ps: with ps; [  ];
-    "velux.scene" = ps: with ps; [  ];
     "venstar" = ps: with ps; [  ];
-    "venstar.climate" = ps: with ps; [  ];
     "vera" = ps: with ps; [  ];
-    "vera.binary_sensor" = ps: with ps; [  ];
-    "vera.climate" = ps: with ps; [  ];
-    "vera.cover" = ps: with ps; [  ];
-    "vera.light" = ps: with ps; [  ];
-    "vera.lock" = ps: with ps; [  ];
-    "vera.scene" = ps: with ps; [  ];
-    "vera.sensor" = ps: with ps; [  ];
-    "vera.switch" = ps: with ps; [  ];
     "verisure" = ps: with ps; [  ];
-    "verisure.alarm_control_panel" = ps: with ps; [  ];
-    "verisure.binary_sensor" = ps: with ps; [  ];
-    "verisure.camera" = ps: with ps; [  ];
-    "verisure.lock" = ps: with ps; [  ];
-    "verisure.sensor" = ps: with ps; [  ];
-    "verisure.switch" = ps: with ps; [  ];
     "version" = ps: with ps; [  ];
-    "version.sensor" = ps: with ps; [  ];
     "vesync" = ps: with ps; [  ];
-    "vesync.switch" = ps: with ps; [  ];
     "viaggiatreno" = ps: with ps; [  ];
-    "viaggiatreno.sensor" = ps: with ps; [  ];
     "vizio" = ps: with ps; [  ];
-    "vizio.media_player" = ps: with ps; [  ];
     "vlc" = ps: with ps; [  ];
-    "vlc.media_player" = ps: with ps; [  ];
     "voicerss" = ps: with ps; [  ];
-    "voicerss.tts" = ps: with ps; [  ];
     "volkszaehler" = ps: with ps; [  ];
-    "volkszaehler.sensor" = ps: with ps; [  ];
     "volumio" = ps: with ps; [  ];
-    "volumio.media_player" = ps: with ps; [  ];
     "volvooncall" = ps: with ps; [  ];
-    "volvooncall.binary_sensor" = ps: with ps; [  ];
-    "volvooncall.device_tracker" = ps: with ps; [  ];
-    "volvooncall.lock" = ps: with ps; [  ];
-    "volvooncall.sensor" = ps: with ps; [  ];
-    "volvooncall.switch" = ps: with ps; [  ];
     "vultr" = ps: with ps; [ vultr ];
-    "vultr.binary_sensor" = ps: with ps; [ vultr ];
-    "vultr.sensor" = ps: with ps; [ vultr ];
-    "vultr.switch" = ps: with ps; [ vultr ];
     "w800rf32" = ps: with ps; [  ];
-    "w800rf32.binary_sensor" = ps: with ps; [  ];
     "wake_on_lan" = ps: with ps; [ wakeonlan ];
-    "wake_on_lan.switch" = ps: with ps; [ wakeonlan ];
     "waqi" = ps: with ps; [  ];
-    "waqi.sensor" = ps: with ps; [  ];
     "water_heater" = ps: with ps; [  ];
     "waterfurnace" = ps: with ps; [  ];
-    "waterfurnace.sensor" = ps: with ps; [  ];
     "watson_iot" = ps: with ps; [  ];
-    "waze_travel_time" = ps: with ps; [  ];
-    "waze_travel_time.sensor" = ps: with ps; [ WazeRouteCalculator ];
+    "waze_travel_time" = ps: with ps; [ WazeRouteCalculator ];
     "weather" = ps: with ps; [  ];
     "webhook" = ps: with ps; [ aiohttp-cors ];
     "weblink" = ps: with ps; [  ];
-    "webostv" = ps: with ps; [  ];
-    "webostv.media_player" = ps: with ps; [ websockets ];
-    "webostv.notify" = ps: with ps; [  ];
+    "webostv" = ps: with ps; [ websockets ];
     "websocket_api" = ps: with ps; [ aiohttp-cors ];
-    "websocket_api.auth" = ps: with ps; [  ];
-    "websocket_api.commands" = ps: with ps; [  ];
-    "websocket_api.connection" = ps: with ps; [  ];
-    "websocket_api.const" = ps: with ps; [  ];
-    "websocket_api.decorators" = ps: with ps; [  ];
-    "websocket_api.error" = ps: with ps; [  ];
-    "websocket_api.http" = ps: with ps; [  ];
-    "websocket_api.messages" = ps: with ps; [  ];
-    "websocket_api.permissions" = ps: with ps; [  ];
-    "websocket_api.sensor" = ps: with ps; [  ];
     "wemo" = ps: with ps; [  ];
-    "wemo.binary_sensor" = ps: with ps; [  ];
-    "wemo.fan" = ps: with ps; [  ];
-    "wemo.light" = ps: with ps; [  ];
-    "wemo.switch" = ps: with ps; [  ];
     "whois" = ps: with ps; [  ];
-    "whois.sensor" = ps: with ps; [  ];
     "wink" = ps: with ps; [  ];
-    "wink.alarm_control_panel" = ps: with ps; [  ];
-    "wink.binary_sensor" = ps: with ps; [  ];
-    "wink.climate" = ps: with ps; [  ];
-    "wink.cover" = ps: with ps; [  ];
-    "wink.fan" = ps: with ps; [  ];
-    "wink.light" = ps: with ps; [  ];
-    "wink.lock" = ps: with ps; [  ];
-    "wink.scene" = ps: with ps; [  ];
-    "wink.sensor" = ps: with ps; [  ];
-    "wink.switch" = ps: with ps; [  ];
-    "wink.water_heater" = ps: with ps; [  ];
     "wirelesstag" = ps: with ps; [  ];
-    "wirelesstag.binary_sensor" = ps: with ps; [  ];
-    "wirelesstag.sensor" = ps: with ps; [  ];
-    "wirelesstag.switch" = ps: with ps; [  ];
     "workday" = ps: with ps; [  ];
-    "workday.binary_sensor" = ps: with ps; [  ];
     "worldclock" = ps: with ps; [  ];
-    "worldclock.sensor" = ps: with ps; [  ];
     "worldtidesinfo" = ps: with ps; [  ];
-    "worldtidesinfo.sensor" = ps: with ps; [  ];
     "worxlandroid" = ps: with ps; [  ];
-    "worxlandroid.sensor" = ps: with ps; [  ];
     "wsdot" = ps: with ps; [  ];
-    "wsdot.sensor" = ps: with ps; [  ];
     "wunderground" = ps: with ps; [  ];
-    "wunderground.sensor" = ps: with ps; [  ];
     "wunderlist" = ps: with ps; [  ];
     "x10" = ps: with ps; [  ];
-    "x10.light" = ps: with ps; [  ];
     "xbox_live" = ps: with ps; [  ];
-    "xbox_live.sensor" = ps: with ps; [  ];
     "xeoma" = ps: with ps; [  ];
-    "xeoma.camera" = ps: with ps; [  ];
     "xfinity" = ps: with ps; [  ];
-    "xfinity.device_tracker" = ps: with ps; [  ];
-    "xiaomi" = ps: with ps; [  ];
-    "xiaomi.camera" = ps: with ps; [ ha-ffmpeg ];
-    "xiaomi.device_tracker" = ps: with ps; [  ];
+    "xiaomi" = ps: with ps; [ ha-ffmpeg ];
     "xiaomi_aqara" = ps: with ps; [  ];
-    "xiaomi_aqara.binary_sensor" = ps: with ps; [  ];
-    "xiaomi_aqara.cover" = ps: with ps; [  ];
-    "xiaomi_aqara.light" = ps: with ps; [  ];
-    "xiaomi_aqara.lock" = ps: with ps; [  ];
-    "xiaomi_aqara.sensor" = ps: with ps; [  ];
-    "xiaomi_aqara.switch" = ps: with ps; [  ];
-    "xiaomi_miio" = ps: with ps; [  ];
-    "xiaomi_miio.device_tracker" = ps: with ps; [ construct ];
-    "xiaomi_miio.fan" = ps: with ps; [ construct ];
-    "xiaomi_miio.light" = ps: with ps; [ construct ];
-    "xiaomi_miio.remote" = ps: with ps; [ construct ];
-    "xiaomi_miio.sensor" = ps: with ps; [ construct ];
-    "xiaomi_miio.switch" = ps: with ps; [ construct ];
-    "xiaomi_miio.vacuum" = ps: with ps; [ construct ];
+    "xiaomi_miio" = ps: with ps; [ construct ];
     "xiaomi_tv" = ps: with ps; [  ];
-    "xiaomi_tv.media_player" = ps: with ps; [  ];
-    "xmpp" = ps: with ps; [  ];
-    "xmpp.notify" = ps: with ps; [ slixmpp ];
+    "xmpp" = ps: with ps; [ slixmpp ];
     "xs1" = ps: with ps; [  ];
-    "xs1.climate" = ps: with ps; [  ];
-    "xs1.sensor" = ps: with ps; [  ];
-    "xs1.switch" = ps: with ps; [  ];
     "yale_smart_alarm" = ps: with ps; [  ];
-    "yale_smart_alarm.alarm_control_panel" = ps: with ps; [  ];
     "yamaha" = ps: with ps; [  ];
-    "yamaha.media_player" = ps: with ps; [  ];
     "yamaha_musiccast" = ps: with ps; [  ];
-    "yamaha_musiccast.media_player" = ps: with ps; [  ];
     "yandextts" = ps: with ps; [  ];
-    "yandextts.tts" = ps: with ps; [  ];
     "yeelight" = ps: with ps; [  ];
-    "yeelight.binary_sensor" = ps: with ps; [  ];
-    "yeelight.light" = ps: with ps; [  ];
     "yeelightsunflower" = ps: with ps; [  ];
-    "yeelightsunflower.light" = ps: with ps; [  ];
     "yessssms" = ps: with ps; [  ];
-    "yessssms.notify" = ps: with ps; [  ];
-    "yi" = ps: with ps; [  ];
-    "yi.camera" = ps: with ps; [ ha-ffmpeg ];
-    "yr" = ps: with ps; [  ];
-    "yr.sensor" = ps: with ps; [ xmltodict ];
-    "yweather" = ps: with ps; [  ];
-    "yweather.sensor" = ps: with ps; [ yahooweather ];
-    "yweather.weather" = ps: with ps; [ yahooweather ];
+    "yi" = ps: with ps; [ ha-ffmpeg ];
+    "yr" = ps: with ps; [ xmltodict ];
+    "yweather" = ps: with ps; [ yahooweather ];
     "zabbix" = ps: with ps; [  ];
-    "zabbix.sensor" = ps: with ps; [  ];
     "zamg" = ps: with ps; [  ];
-    "zamg.sensor" = ps: with ps; [  ];
-    "zamg.weather" = ps: with ps; [  ];
     "zengge" = ps: with ps; [  ];
-    "zengge.light" = ps: with ps; [  ];
     "zeroconf" = ps: with ps; [ aiohttp-cors zeroconf ];
-    "zestimate" = ps: with ps; [  ];
-    "zestimate.sensor" = ps: with ps; [ xmltodict ];
+    "zestimate" = ps: with ps; [ xmltodict ];
     "zha" = ps: with ps; [  ];
-    "zha.api" = ps: with ps; [  ];
-    "zha.binary_sensor" = ps: with ps; [  ];
-    "zha.config_flow" = ps: with ps; [  ];
-    "zha.const" = ps: with ps; [  ];
-    "zha.core" = ps: with ps; [  ];
-    "zha.device_entity" = ps: with ps; [  ];
-    "zha.entity" = ps: with ps; [  ];
-    "zha.fan" = ps: with ps; [  ];
-    "zha.light" = ps: with ps; [  ];
-    "zha.sensor" = ps: with ps; [  ];
-    "zha.switch" = ps: with ps; [  ];
     "zhong_hong" = ps: with ps; [  ];
-    "zhong_hong.climate" = ps: with ps; [  ];
     "zigbee" = ps: with ps; [  ];
-    "zigbee.binary_sensor" = ps: with ps; [  ];
-    "zigbee.light" = ps: with ps; [  ];
-    "zigbee.sensor" = ps: with ps; [  ];
-    "zigbee.switch" = ps: with ps; [  ];
     "ziggo_mediabox_xl" = ps: with ps; [  ];
-    "ziggo_mediabox_xl.media_player" = ps: with ps; [  ];
     "zone" = ps: with ps; [  ];
-    "zone.config_flow" = ps: with ps; [  ];
-    "zone.const" = ps: with ps; [  ];
-    "zone.zone" = ps: with ps; [  ];
     "zoneminder" = ps: with ps; [ zm-py ];
-    "zoneminder.binary_sensor" = ps: with ps; [ zm-py ];
-    "zoneminder.camera" = ps: with ps; [ zm-py ];
-    "zoneminder.sensor" = ps: with ps; [ zm-py ];
-    "zoneminder.switch" = ps: with ps; [ zm-py ];
     "zwave" = ps: with ps; [ homeassistant-pyozw pydispatcher ];
-    "zwave.binary_sensor" = ps: with ps; [  ];
-    "zwave.climate" = ps: with ps; [  ];
-    "zwave.config_flow" = ps: with ps; [  ];
-    "zwave.const" = ps: with ps; [  ];
-    "zwave.cover" = ps: with ps; [  ];
-    "zwave.discovery_schemas" = ps: with ps; [  ];
-    "zwave.fan" = ps: with ps; [  ];
-    "zwave.light" = ps: with ps; [  ];
-    "zwave.lock" = ps: with ps; [  ];
-    "zwave.node_entity" = ps: with ps; [  ];
-    "zwave.sensor" = ps: with ps; [  ];
-    "zwave.switch" = ps: with ps; [  ];
-    "zwave.util" = ps: with ps; [  ];
-    "zwave.workaround" = ps: with ps; [  ];
   };
 }
diff --git a/pkgs/servers/home-assistant/default.nix b/pkgs/servers/home-assistant/default.nix
index d2eb536a11e..6de571b1e0f 100644
--- a/pkgs/servers/home-assistant/default.nix
+++ b/pkgs/servers/home-assistant/default.nix
@@ -28,28 +28,20 @@ let
       "10cbf6e27dbce8c30807caf056c8eb50917e0eaafe86347671b57254006c3e69")
     (mkOverride "bcrypt" "3.1.6"
       "44636759d222baa62806bbceb20e96f75a015a6381690d1bc2eda91c01ec02ea")
-    (self: super: {
-      pyjwt = super.pyjwt.overridePythonAttrs (oldAttrs: rec {
-        version = "1.6.4";
-        src = oldAttrs.src.override {
-          inherit version;
-          sha256 = "4ee413b357d53fd3fb44704577afac88e72e878716116270d722723d65b42176";
-        };
-        doCheck = false; # https://github.com/jpadilla/pyjwt/issues/382
-      });
-    })
-    (mkOverride "cryptography" "2.5"
-      "00c4d7gvsymlaw0r13zrm32dcnarmpayjyrh65yymlmr6mrbcij9")
-    (mkOverride "cryptography_vectors" "2.5" # required by cryptography==2.5
-      "15qfl3pnw2f11r0z0zhwl56f6pb60ysav8fxmpnz5p80cfwljdik")
-    (mkOverride "python-slugify" "1.2.6"
-      "7723daf30996db26573176bddcdf5fcb98f66dc70df05c9cb29f2c79b8193245")
+    (mkOverride "pyjwt" "1.7.1"
+      "8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96")
+    (mkOverride "cryptography" "2.6.1"
+      "26c821cbeb683facb966045e2064303029d572a87ee69ca5a1bf54bf55f93ca6")
+    (mkOverride "cryptography_vectors" "2.6.1" # required by cryptography==2.6.1
+      "03f38115dccb266dd96538f94067442a877932c2322661bdc5bf2502c76658af")
+    (mkOverride "python-slugify" "3.0.2"
+      "57163ffb345c7e26063435a27add1feae67fa821f1ef4b2f292c25847575d758")
     (mkOverride "pyyaml" "3.13"
       "3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf")
     (mkOverride "requests" "2.21.0"
       "502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e")
-    (mkOverride "ruamel_yaml" "0.15.89"
-      "86d034aa9e2ab3eacc5f75f5cd6a469a2af533b6d9e60ea92edbba540d21b9b7")
+    (mkOverride "ruamel_yaml" "0.15.91"
+      "692f03ed24c8c1d9fa9fd4c045f7ba1c26f1e96edb8bfb4d54854ba26bc02319")
     (mkOverride "voluptuous" "0.11.5"
       "567a56286ef82a9d7ae0628c5842f65f516abcb496e74f3f59f1d7b28df314ef")
     (mkOverride "voluptuous-serialize" "2.1.0"
@@ -67,14 +59,13 @@ let
     # required by home-assistant-frontend
     (self: super: {
       user-agents = super.user-agents.overridePythonAttrs (oldAttrs: rec {
-        version = "1.1.0";
+        version = "2.0.0";
         src = fetchFromGitHub {
           owner = "selwin";
           repo = "python-user-agents";
           rev = "v${version}";
-          sha256 = "14kxd780zhp8718xr1z63xffaj3bvxgr4pldh9sv943m4hvi0gw5";
+          sha256 = "0ix2yajqdnfj433j50dls90mkmqz8m4fiywxg097zwkkc95wm8s4";
         };
-        doCheck = false; # can be dropped for 2.0
       });
     })
 
@@ -118,7 +109,7 @@ let
   extraBuildInputs = extraPackages py.pkgs;
 
   # Don't forget to run parse-requirements.py after updating
-  hassVersion = "0.91.4";
+  hassVersion = "0.92.2";
 
 in with py.pkgs; buildPythonApplication rec {
   pname = "homeassistant";
@@ -133,7 +124,7 @@ in with py.pkgs; buildPythonApplication rec {
     owner = "home-assistant";
     repo = "home-assistant";
     rev = version;
-    sha256 = "195pif8lz0qxjsannpi39gxphfb6dkj9lkpah0vjw0pgx753sflv";
+    sha256 = "10kqfj7gi8w0d9jalb4i2w4ifla8jkllymjav74abc4b30y08vmw";
   };
 
   propagatedBuildInputs = [
@@ -145,16 +136,17 @@ in with py.pkgs; buildPythonApplication rec {
   ] ++ componentBuildInputs ++ extraBuildInputs;
 
   checkInputs = [
-    asynctest pytest pytest-aiohttp requests-mock pydispatcher
+    asynctest pytest pytest-aiohttp requests-mock pydispatcher aiohue
   ];
 
   checkPhase = ''
     # The components' dependencies are not included, so they cannot be tested
-    py.test --ignore tests/components
+    # test_webhook_create_cloudhook imports hass_nabucasa and is thus excluded
+    py.test --ignore tests/components -k "not test_webhook_create_cloudhook"
     # Some basic components should be tested however
     py.test \
       tests/components/{api,config,configurator,demo,discovery,frontend,group,history,history_graph} \
-      tests/components/{homeassistant,http,introduction,logger,script,shell_command,system_log,websocket_api}
+      tests/components/{homeassistant,http,logger,script,shell_command,system_log,websocket_api}
   '';
 
   makeWrapperArgs = lib.optional skipPip "--add-flags --skip-pip";
diff --git a/pkgs/servers/home-assistant/frontend.nix b/pkgs/servers/home-assistant/frontend.nix
index f8349c24f7f..9919270a8d0 100644
--- a/pkgs/servers/home-assistant/frontend.nix
+++ b/pkgs/servers/home-assistant/frontend.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "home-assistant-frontend";
-  version = "20190331.0";
+  version = "20190427.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "2d266a4d3d31af9a50debb99b0e9e9650044698f9157753bec785785057264cf";
+    sha256 = "eb14e7be0ad591ad4623c67db752bc4eb4f4e43ce60bb0f6d1909e9ad9399d91";
   };
 
   propagatedBuildInputs = [ user-agents ];
diff --git a/pkgs/servers/home-assistant/parse-requirements.py b/pkgs/servers/home-assistant/parse-requirements.py
index e61d616d6a7..a2cf2d0386a 100755
--- a/pkgs/servers/home-assistant/parse-requirements.py
+++ b/pkgs/servers/home-assistant/parse-requirements.py
@@ -1,28 +1,30 @@
 #! /usr/bin/env nix-shell
-#! nix-shell -i python3 -p "python3.withPackages (ps: with ps; [ aiohttp astral async-timeout attrs certifi jinja2 pyjwt cryptography pip pytz pyyaml requests ruamel_yaml voluptuous python-slugify ])"
+#! nix-shell -i python3 -p "python3.withPackages (ps: with ps; [ attrs ])
 #
 # This script downloads Home Assistant's source tarball.
-# Inside the homeassistant/components directory, each component has an associated .py file,
-# specifying required packages and other components it depends on:
+# Inside the homeassistant/components directory, each integration has an associated manifest.json,
+# specifying required packages and other integrations it depends on:
 #
-# REQUIREMENTS = [ 'package==1.2.3' ]
-# DEPENDENCIES = [ 'component' ]
+#     {
+#       "requirements": [ "package==1.2.3" ],
+#       "dependencies": [ "component" ]
+#     }
 #
-# By parsing the files, a dictionary mapping component to requirements and dependencies is created.
+# By parsing the files, a dictionary mapping integrations to requirements and dependencies is created.
 # For all of these requirements and the dependencies' requirements,
-# Nixpkgs' python3Packages are searched for appropriate names.
-# Then, a Nix attribute set mapping component name to dependencies is created.
+# nixpkgs' python3Packages are searched for appropriate names.
+# Then, a Nix attribute set mapping integration name to dependencies is created.
 
-from urllib.request import urlopen
-import tempfile
 from io import BytesIO
-import tarfile
-import importlib
-import subprocess
-import os
-import sys
 import json
+import pathlib
+import os
 import re
+import subprocess
+import sys
+import tempfile
+import tarfile
+from urllib.request import urlopen
 
 COMPONENT_PREFIX = 'homeassistant.components'
 PKG_SET = 'python3Packages'
@@ -43,22 +45,17 @@ def get_version():
 def parse_components(version='master'):
     components = {}
     with tempfile.TemporaryDirectory() as tmp:
-        with urlopen('https://github.com/home-assistant/home-assistant/archive/{}.tar.gz'.format(version)) as response:
+        with urlopen(f'https://github.com/home-assistant/home-assistant/archive/{version}.tar.gz') as response:
             tarfile.open(fileobj=BytesIO(response.read())).extractall(tmp)
         # Use part of a script from the Home Assistant codebase
-        sys.path.append(tmp + '/home-assistant-{}'.format(version))
-        from script.gen_requirements_all import explore_module
-        for package in explore_module(COMPONENT_PREFIX, True):
-            # Remove 'homeassistant.components.' prefix
-            component = package[len(COMPONENT_PREFIX + '.'):]
-            try:
-                module = importlib.import_module(package)
-                components[component] = {}
-                components[component]['requirements'] = getattr(module, 'REQUIREMENTS', [])
-                components[component]['dependencies'] = getattr(module, 'DEPENDENCIES', [])
-            # If there is an ImportError, the imported file is not the main file of the component
-            except ImportError:
-                continue
+        sys.path.append(os.path.join(tmp, f'home-assistant-{version}'))
+        from script.hassfest.model import Integration
+        integrations = Integration.load_dir(pathlib.Path(
+            os.path.join(tmp, f'home-assistant-{version}', 'homeassistant/components')
+        ))
+        for domain in sorted(integrations):
+            integration = integrations[domain]
+            components[domain] = integration.manifest
     return components
 
 # Recursively get the requirements of a component and its dependencies
diff --git a/pkgs/tools/compression/lz4/default.nix b/pkgs/tools/compression/lz4/default.nix
index 3ca56e91a9e..3f2497cd8d2 100644
--- a/pkgs/tools/compression/lz4/default.nix
+++ b/pkgs/tools/compression/lz4/default.nix
@@ -1,18 +1,26 @@
-{ stdenv, fetchFromGitHub, valgrind
+{ stdenv, fetchFromGitHub, valgrind, fetchpatch
 , enableStatic ? false, enableShared ? true
 }:
 
 stdenv.mkDerivation rec {
-  name = "lz4-${version}";
+  pname = "lz4";
   version = "1.9.1";
 
   src = fetchFromGitHub {
     sha256 = "1l1caxrik1hqs40vj3bpv1pikw6b74cfazv5c0v6g48zpcbmshl0";
     rev = "v${version}";
-    repo = "lz4";
-    owner = "lz4";
+    repo = pname;
+    owner = pname;
   };
 
+  patches = [
+    # Fix detection of Darwin
+    (fetchpatch {
+      url = "https://github.com/lz4/lz4/commit/024216ef7394b6411eeaa5b52d0cec9953a44249.patch";
+      sha256 = "0j0j2pr6pkplxf083hlwl5q4cfp86q3wd8mc64bcfcr7ysc5pzl3";
+    })
+  ];
+
   outputs = [ "out" "dev" ];
 
   buildInputs = stdenv.lib.optional doCheck valgrind;
diff --git a/pkgs/tools/misc/getopt/builder.sh b/pkgs/tools/misc/getopt/builder.sh
deleted file mode 100644
index a220ad0c66f..00000000000
--- a/pkgs/tools/misc/getopt/builder.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-source $stdenv/setup
-installFlags="prefix=$out"
-makeFlags="CFLAGS=-DWITHOUT_GETTEXT LIBCGETOPT=0"
-genericBuild
diff --git a/pkgs/tools/misc/getopt/default.nix b/pkgs/tools/misc/getopt/default.nix
index 8221bec6cca..62414a60475 100644
--- a/pkgs/tools/misc/getopt/default.nix
+++ b/pkgs/tools/misc/getopt/default.nix
@@ -1,15 +1,19 @@
 {stdenv, fetchurl}:
 
-stdenv.mkDerivation {
-  name = "getopt-1.1.4";
-  builder = ./builder.sh;
+stdenv.mkDerivation rec {
+  pname = "getopt";
+  version = "1.1.6";
   src = fetchurl {
-    url = http://tarballs.nixos.org/getopt-1.1.4.tar.gz;
-    sha256 = "1arvjfzw6p310zbgv629w5hkyslrj44imf3r3s2r4ry2jfcks221";
+    url = "http://frodo.looijaard.name/system/files/software/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1zn5kp8ar853rin0ay2j3p17blxy16agpp8wi8wfg4x98b31vgyh";
   };
-  preBuild = ''
-    export buildFlags=CC="$CC" # for darwin
-  '';
+
+  makeFlags = [
+    "WITHOUT_GETTEXT=1"
+    "LIBCGETOPT=0"
+    "prefix=${placeholder "out"}"
+    "CC:=$(CC)"
+  ];
 
   meta = {
     platforms = stdenv.lib.platforms.unix;
diff --git a/pkgs/tools/networking/network-manager/default.nix b/pkgs/tools/networking/network-manager/default.nix
index 79913d43968..f6077b8c2f8 100644
--- a/pkgs/tools/networking/network-manager/default.nix
+++ b/pkgs/tools/networking/network-manager/default.nix
@@ -61,13 +61,6 @@ in stdenv.mkDerivation rec {
     # Meson does not support using different directories during build and
     # for installation like Autotools did with flags passed to make install.
     ./fix-install-paths.patch
-
-    # Our gobject-introspection patches make the shared library paths absolute
-    # in the GIR files. When building docs, the library is not yet installed,
-    # though, so we need to replace the absolute path with a local one during build.
-    # We are replacing the variables in postPatch since substituteAll does not support
-    # placeholders.
-    ./fix-docs-build.patch
   ];
 
   buildInputs = [
@@ -91,10 +84,15 @@ in stdenv.mkDerivation rec {
   postPatch = ''
     patchShebangs ./tools
     patchShebangs libnm/generate-setting-docs.py
+  '';
 
-    substituteInPlace libnm/meson.build \
-      --subst-var-by DOCS_LD_PRELOAD "${libredirect}/lib/libredirect.so" \
-      --subst-var-by DOCS_NIX_REDIRECTS "${placeholder "out"}/lib/libnm.so.0=$PWD/build/libnm/libnm.so.0"
+  preBuild = ''
+    # Our gobject-introspection patches make the shared library paths absolute
+    # in the GIR files. When building docs, the library is not yet installed,
+    # though, so we need to replace the absolute path with a local one during build.
+    # We are using a symlink that will be overridden during installation.
+    mkdir -p ${placeholder "out"}/lib
+    ln -s $PWD/libnm/libnm.so.0 ${placeholder "out"}/lib/libnm.so.0
   '';
 
   postInstall = ''
diff --git a/pkgs/tools/networking/network-manager/fix-docs-build.patch b/pkgs/tools/networking/network-manager/fix-docs-build.patch
deleted file mode 100644
index 45e18c42fbe..00000000000
--- a/pkgs/tools/networking/network-manager/fix-docs-build.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libnm/meson.build
-+++ b/libnm/meson.build
-@@ -262,6 +262,8 @@
-     'env', '-i',
-     'GI_TYPELIB_PATH=' + gi_typelib_path,
-     'LD_LIBRARY_PATH=' + ld_library_path,
-+    'LD_PRELOAD=' + '@DOCS_LD_PRELOAD@',
-+    'NIX_REDIRECTS=' + '@DOCS_NIX_REDIRECTS@',
-   ]
- 
-   name = 'nm-property-docs.xml'
diff --git a/pkgs/tools/text/transifex-client/default.nix b/pkgs/tools/text/transifex-client/default.nix
index c765a801348..9a11b5fba57 100644
--- a/pkgs/tools/text/transifex-client/default.nix
+++ b/pkgs/tools/text/transifex-client/default.nix
@@ -17,7 +17,7 @@ buildPythonApplication rec {
   prePatch = ''
     substituteInPlace requirements.txt --replace "urllib3<1.24" "urllib3<2.0" \
       --replace "six==1.11.0" "six<2.0.0" \
-      --replace "python-slugify==1.2.6" "python-slugify<3.0.0"
+      --replace "python-slugify==1.2.6" "python-slugify<4.0.0"
   '';
 
   # Requires external resources
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 9a2d5784d0a..a05aa2a2f86 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -10563,13 +10563,9 @@ in
               then callPackage ../development/libraries/gnu-efi { }
             else null;
 
-  gnutls = callPackage
-    (if stdenv.isDarwin
-      # Avoid > 3.5.10 due to frameworks for now; see discussion on:
-      # https://github.com/NixOS/nixpkgs/commit/d6454e6a1
-      then ../development/libraries/gnutls/3.5.10.nix
-      else ../development/libraries/gnutls/3.6.nix)
-    { };
+  gnutls = callPackage ../development/libraries/gnutls/default.nix {
+    inherit (darwin.apple_sdk.frameworks) Security;
+  };
 
   gnutls-kdh = callPackage ../development/libraries/gnutls-kdh/3.5.nix {
     gperf = gperf_3_0;
@@ -16036,8 +16032,12 @@ in
   docbook_xml_ebnf_dtd = callPackage ../data/sgml+xml/schemas/xml-dtd/docbook-ebnf { };
 
   inherit (callPackages ../data/sgml+xml/stylesheets/xslt/docbook-xsl { })
-    docbook_xsl
-    docbook_xsl_ns;
+    docbook-xsl-nons
+    docbook-xsl-ns;
+
+  # TODO: move this to aliases
+  docbook_xsl = docbook-xsl-nons;
+  docbook_xsl_ns = docbook-xsl-ns;
 
   documentation-highlighter = callPackage ../misc/documentation-highlighter { };