about summary refs log tree commit diff
path: root/pkgs/servers
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/servers')
-rw-r--r--pkgs/servers/documize-community/default.nix4
-rw-r--r--pkgs/servers/foundationdb/cmake.nix129
-rw-r--r--pkgs/servers/foundationdb/default.nix230
-rw-r--r--pkgs/servers/foundationdb/patches/clang-libcxx.patch52
-rw-r--r--pkgs/servers/foundationdb/patches/fix-scm-version.patch (renamed from pkgs/servers/foundationdb/fix-scm-version.patch)0
-rw-r--r--pkgs/servers/foundationdb/patches/ldflags-5.1.patch (renamed from pkgs/servers/foundationdb/ldflags-5.1.patch)0
-rw-r--r--pkgs/servers/foundationdb/patches/ldflags-5.2.patch (renamed from pkgs/servers/foundationdb/ldflags-5.2.patch)0
-rw-r--r--pkgs/servers/foundationdb/patches/ldflags-6.0.patch (renamed from pkgs/servers/foundationdb/ldflags-6.0.patch)0
-rw-r--r--pkgs/servers/foundationdb/patches/suppress-clang-warnings.patch34
-rw-r--r--pkgs/servers/foundationdb/test-list.txt80
-rw-r--r--pkgs/servers/foundationdb/vsmake.nix154
-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/servers/http/nginx/modules.nix109
-rw-r--r--pkgs/servers/http/winstone/default.nix26
-rw-r--r--pkgs/servers/jellyfin/default.nix4
-rw-r--r--pkgs/servers/monitoring/plugins/default.nix15
-rw-r--r--pkgs/servers/mxisd/0001-gradle.patch14
-rw-r--r--pkgs/servers/mxisd/default.nix14
-rw-r--r--pkgs/servers/search/elasticsearch/5.x.nix5
-rw-r--r--pkgs/servers/search/elasticsearch/6.x.nix4
-rw-r--r--pkgs/servers/search/elasticsearch/7.x.nix4
-rw-r--r--pkgs/servers/sql/postgresql/ext/pg_partman.nix33
-rw-r--r--pkgs/servers/sql/postgresql/ext/pipelinedb.nix39
-rw-r--r--pkgs/servers/sql/postgresql/packages.nix4
28 files changed, 885 insertions, 1746 deletions
diff --git a/pkgs/servers/documize-community/default.nix b/pkgs/servers/documize-community/default.nix
index 2df905463117..06db6dec50dc 100644
--- a/pkgs/servers/documize-community/default.nix
+++ b/pkgs/servers/documize-community/default.nix
@@ -2,13 +2,13 @@
 
 buildGoPackage rec {
   pname = "documize-community";
-  version = "2.4.1";
+  version = "2.5.0";
 
   src = fetchFromGitHub {
     owner = "documize";
     repo = "community";
     rev = "v${version}";
-    sha256 = "1spj8awyv37gmrm49py3wz7590r7rz63qizgifdzjbvacadavm0c";
+    sha256 = "14v66jwxg6akllbz8lsqplxalr73jff5453nigcnb4vzwwkz2wq3";
   };
 
   goPackagePath = "github.com/documize/community";
diff --git a/pkgs/servers/foundationdb/cmake.nix b/pkgs/servers/foundationdb/cmake.nix
new file mode 100644
index 000000000000..ae693a49027f
--- /dev/null
+++ b/pkgs/servers/foundationdb/cmake.nix
@@ -0,0 +1,129 @@
+# This builder is for FoundationDB CMake build system.
+
+{ lib, fetchurl, fetchpatch, fetchFromGitHub
+, cmake, ninja, boost, python3, openjdk, mono, libressl
+
+, gccStdenv, llvmPackages
+, useClang ? true
+, ...
+}:
+
+let
+  stdenv = if useClang then llvmPackages.libcxxStdenv else gccStdenv;
+
+  tests = with builtins;
+    builtins.replaceStrings [ "\n" ] [ " " ] (lib.fileContents ./test-list.txt);
+
+  makeFdb =
+    { version
+    , branch
+    , sha256
+    , rev ? "refs/tags/${version}"
+    , officialRelease ? true
+    , patches ? []
+    }: stdenv.mkDerivation rec {
+        name = "foundationdb-${version}";
+        inherit version;
+
+        src = fetchFromGitHub {
+          owner = "apple";
+          repo  = "foundationdb";
+          inherit rev sha256;
+        };
+
+        buildInputs = [ libressl boost ];
+        nativeBuildInputs = [ cmake ninja python3 openjdk mono ]
+          ++ lib.optional useClang [ llvmPackages.lld ];
+
+        separateDebugInfo = true;
+        enableParallelBuilding = true;
+        dontFixCmake = true;
+
+        cmakeFlags =
+          [ "-DCMAKE_BUILD_TYPE=Release"
+            "-DLIBRESSL_USE_STATIC_LIBS=FALSE"
+
+            # CMake can't find these easily for some reason?
+            "-DLIBRESSL_INCLUDE_DIR=${libressl.dev}"
+            "-DLIBRESSL_CRYPTO_LIBRARY=${libressl.out}/lib/libcrypto.so"
+            "-DLIBRESSL_SSL_LIBRARY=${libressl.out}/lib/libssl.so"
+            "-DLIBRESSL_TLS_LIBRARY=${libressl.out}/lib/libtls.so"
+
+            # LTO brings up overall build time, but results in much smaller
+            # binaries for all users and the cache.
+            #
+            # TODO FIXME: bugs :(
+            (lib.optionalString (!useClang) "-DUSE_LTO=ON")
+
+            # Gold helps alleviate the link time, especially when LTO is
+            # enabled. But even then, it still takes a majority of the time.
+            # Same with LLD when Clang is available.
+            (lib.optionalString useClang    "-DUSE_LD=LLD")
+            (lib.optionalString (!useClang) "-DUSE_LD=GOLD")
+          ]
+          ++ lib.optional officialRelease [ "FDB_RELEASE=1" ];
+
+        inherit patches;
+        postPatch = ''
+          for x in bindings/c/CMakeLists.txt fdbserver/CMakeLists.txt fdbmonitor/CMakeLists.txt fdbbackup/CMakeLists.txt fdbcli/CMakeLists.txt; do 
+            substituteInPlace $x --replace 'fdb_install' 'install'
+          done
+        '';
+
+        # the install phase for cmake is pretty wonky right now since it's not designed to
+        # coherently install packages as most linux distros expect -- it's designed to build
+        # packaged artifacts that are shipped in RPMs, etc. we need to add some extra code to
+        # cmake upstream to fix this, and if we do, i think most of this can go away.
+        postInstall = ''
+          mv $out/sbin/fdbserver $out/bin/fdbserver
+          rm -rf \
+            $out/lib/systemd $out/Library $out/usr $out/sbin \
+            $out/var $out/log $out/etc
+
+          mv $out/fdbmonitor/fdbmonitor $out/bin/fdbmonitor && rm -rf $out/fdbmonitor
+
+          rm -rf $out/lib/foundationdb/
+          mkdir $out/libexec && ln -sfv $out/bin/fdbbackup $out/libexec/backup_agent
+
+          mkdir $out/include/foundationdb && \
+            mv $out/include/*.h $out/include/*.options $out/include/foundationdb
+
+          # move results into multi outputs
+          mkdir -p $dev $lib
+          mv $out/include $dev/include
+          mv $out/lib $lib/lib
+
+          # python bindings
+          # NB: use the original setup.py.in, so we can substitute VERSION correctly
+          cp ../LICENSE ./bindings/python
+          substitute ../bindings/python/setup.py.in ./bindings/python/setup.py \
+            --replace 'VERSION' "${version}"
+          rm -f ./bindings/python/setup.py.* ./bindings/python/CMakeLists.txt
+          rm -f ./bindings/python/fdb/*.pth # remove useless files
+          rm -f ./bindings/python/*.rst ./bindings/python/*.mk
+
+          cp -R ./bindings/python/                          tmp-pythonsrc/
+          tar -zcf $pythonsrc --transform s/tmp-pythonsrc/python-foundationdb/ ./tmp-pythonsrc/
+
+          # java bindings
+          mkdir -p $lib/share/java
+          mv lib/fdb-java-*.jar $lib/share/java/fdb-java.jar
+
+          # include the tests
+          mkdir -p $out/share/test
+          (cd ../tests && for x in ${tests}; do
+            cp --parents $x $out/share/test
+          done)
+        '';
+
+        outputs = [ "out" "dev" "lib" "pythonsrc" ];
+
+        meta = with stdenv.lib; {
+          description = "Open source, distributed, transactional key-value store";
+          homepage    = https://www.foundationdb.org;
+          license     = licenses.asl20;
+          platforms   = [ "x86_64-linux" ];
+          maintainers = with maintainers; [ thoughtpolice ];
+       };
+    };
+in makeFdb
diff --git a/pkgs/servers/foundationdb/default.nix b/pkgs/servers/foundationdb/default.nix
index 86c1b9065a99..790959f0a0d6 100644
--- a/pkgs/servers/foundationdb/default.nix
+++ b/pkgs/servers/foundationdb/default.nix
@@ -1,194 +1,84 @@
-{ stdenv49
+{ stdenv, stdenv49, gcc9Stdenv, llvmPackages_8
 , lib, fetchurl, fetchpatch, fetchFromGitHub
 
-, which, findutils, m4, gawk
-, python, openjdk, mono, libressl
-}:
+, cmake, ninja, which, findutils, m4, gawk
+, python, python3, openjdk, mono, libressl, boost
+}@args:
 
 let
-  # hysterical raisins dictate a version of boost this old. however,
-  # we luckily do not need to build anything, we just need the header
-  # files.
-  boost152 = stdenv49.mkDerivation rec {
-    name = "boost-headers-1.52.0";
-
-    src = fetchurl {
-      url = "mirror://sourceforge/boost/boost_1_52_0.tar.bz2";
-      sha256 = "14mc7gsnnahdjaxbbslzk79rc0d12h1i681cd3srdwr3fzynlar2";
-    };
-
-    configurePhase = ":";
-    buildPhase = ":";
-    installPhase = "mkdir -p $out/include && cp -R boost $out/include/";
+  vsmakeBuild = import ./vsmake.nix args;
+  cmakeBuild = import ./cmake.nix (args // {
+    gccStdenv    = gcc9Stdenv;
+    llvmPackages = llvmPackages_8;
+  });
+
+  python3-six-patch = fetchpatch {
+    name   = "update-python-six.patch";
+    url    = "https://github.com/apple/foundationdb/commit/4bd9efc4fc74917bc04b07a84eb065070ea7edb2.patch";
+    sha256 = "030679lmc86f1wzqqyvxnwjyfrhh54pdql20ab3iifqpp9i5mi85";
   };
 
-  makeFdb =
-    { version
-    , branch
-    , sha256
-
-    # the revision can be inferred from the fdb tagging policy
-    , rev    ? "refs/tags/${version}"
-
-    # in theory newer versions of fdb support newer compilers, but they
-    # don't :( maybe one day
-    , stdenv ? stdenv49
-
-    # in theory newer versions of fdb support newer boost versions, but they
-    # don't :( maybe one day
-    , boost ? boost152
-
-    # if an release is unofficial/a prerelease, then make sure this is set
-    , officialRelease ? true
-    }: stdenv.mkDerivation rec {
-        name = "foundationdb-${version}";
-        inherit version;
-
-        src = fetchFromGitHub {
-          owner = "apple";
-          repo  = "foundationdb";
-          inherit rev sha256;
-        };
-
-        nativeBuildInputs = [ python openjdk gawk which m4 findutils mono ];
-        buildInputs = [ libressl boost ];
-
-        patches =
-          [ # For 5.2+, we need a slightly adjusted patch to fix all the ldflags
-            (if lib.versionAtLeast version "5.2"
-             then (if lib.versionAtLeast version "6.0"
-                   then ./ldflags-6.0.patch
-                   else ./ldflags-5.2.patch)
-             else ./ldflags-5.1.patch)
-          ]
-          # for 6.0+, we do NOT need to apply this version fix, since we can specify
-          # it ourselves. see configurePhase
-          ++ (lib.optional (!lib.versionAtLeast version "6.0") ./fix-scm-version.patch)
-          # Versions less than 6.0 have a busted Python 3 build due to an outdated
-          # use of 'print'. Also apply an update to the six module with many bugfixes,
-          # which is in 6.0+ as well
-          ++ (lib.optional (!lib.versionAtLeast version "6.0") (fetchpatch {
-            name   = "update-python-six.patch";
-            url    = "https://github.com/apple/foundationdb/commit/4bd9efc4fc74917bc04b07a84eb065070ea7edb2.patch";
-            sha256 = "030679lmc86f1wzqqyvxnwjyfrhh54pdql20ab3iifqpp9i5mi85";
-          }))
-          ++ (lib.optional (!lib.versionAtLeast version "6.0") (fetchpatch {
-            name   = "import-for-python-print.patch";
-            url    = "https://github.com/apple/foundationdb/commit/ded17c6cd667f39699cf663c0e87fe01e996c153.patch";
-            sha256 = "11y434w68cpk7shs2r22hyrpcrqi8vx02cw7v5x79qxvnmdxv2an";
-          }))
-          ;
-
-        postPatch = ''
-          # note: this does not do anything for 6.0+
-          substituteInPlace ./build/scver.mk \
-            --subst-var-by NIXOS_FDB_VERSION_ID "${rev}" \
-            --subst-var-by NIXOS_FDB_SCBRANCH   "${branch}"
-
-          substituteInPlace ./Makefile \
-            --replace 'shell which ccache' 'shell true' \
-            --replace -Werror ""
-
-          substituteInPlace ./Makefile \
-            --replace libstdc++_pic libstdc++
-
-          substituteInPlace ./build/link-validate.sh \
-            --replace 'exit 1' '#exit 1'
-
-          patchShebangs .
-        '' + lib.optionalString (lib.versionAtLeast version "6.0") ''
-          substituteInPlace ./Makefile \
-            --replace 'TLS_LIBS +=' '#TLS_LIBS +=' \
-            --replace 'LDFLAGS :=' 'LDFLAGS := -ltls -lssl -lcrypto'
-        '';
-
-        separateDebugInfo = true;
-        enableParallelBuilding = true;
-
-        makeFlags = [ "all" "fdb_java" "fdb_python" ]
-          # Don't compile FDBLibTLS if we don't need it in 6.0 or later;
-          # it gets statically linked in
-          ++ lib.optional (!lib.versionAtLeast version "6.0") [ "fdb_c" ]
-          # Needed environment overrides
-          ++ [ "KVRELEASE=1"
-               "NOSTRIP=1"
-             ] ++ lib.optional officialRelease [ "RELEASE=true" ];
-
-        # on 6.0 and later, we can specify all this information manually
-        configurePhase = lib.optionalString (lib.versionAtLeast version "6.0") ''
-          export SOURCE_CONTROL=GIT
-          export SCBRANCH="${branch}"
-          export VERSION_ID="${rev}"
-        '';
-
-        installPhase = ''
-          mkdir -vp $out/{bin,libexec/plugins} $lib/{lib,share/java} $dev/include/foundationdb
-
-        '' + lib.optionalString (!lib.versionAtLeast version "6.0") ''
-          # we only copy the TLS library on < 6.0, since it's compiled-in otherwise
-          cp -v ./lib/libFDBLibTLS.so $out/libexec/plugins/FDBLibTLS.so
-        '' + ''
-
-          # C API
-          cp -v ./lib/libfdb_c.so                           $lib/lib
-          cp -v ./bindings/c/foundationdb/fdb_c.h           $dev/include/foundationdb
-          cp -v ./bindings/c/foundationdb/fdb_c_options.g.h $dev/include/foundationdb
-          cp -v ./fdbclient/vexillographer/fdb.options      $dev/include/foundationdb
-
-          # java
-          cp -v ./bindings/java/foundationdb-client.jar     $lib/share/java/fdb-java.jar
-
-          # python
-          cp LICENSE ./bindings/python
-          substitute ./bindings/python/setup.py.in ./bindings/python/setup.py \
-            --replace 'VERSION' "${version}"
-          rm -f ./bindings/python/setup.py.in
-          rm -f ./bindings/python/fdb/*.pth # remove useless files
-          rm -f ./bindings/python/*.rst ./bindings/python/*.mk
-
-          cp -R ./bindings/python/                          tmp-pythonsrc/
-          tar -zcf $pythonsrc --transform s/tmp-pythonsrc/python-foundationdb/ ./tmp-pythonsrc/
-
-          # binaries
-          for x in fdbbackup fdbcli fdbserver fdbmonitor; do
-            cp -v "./bin/$x" $out/bin;
-          done
-
-          ln -sfv $out/bin/fdbbackup $out/bin/dr_agent
-          ln -sfv $out/bin/fdbbackup $out/bin/fdbrestore
-          ln -sfv $out/bin/fdbbackup $out/bin/fdbdr
-
-          ln -sfv $out/bin/fdbbackup $out/libexec/backup_agent
-        '';
-
-        outputs = [ "out" "lib" "dev" "pythonsrc" ];
-
-        meta = with stdenv.lib; {
-          description = "Open source, distributed, transactional key-value store";
-          homepage    = https://www.foundationdb.org;
-          license     = licenses.asl20;
-          platforms   = [ "x86_64-linux" ];
-          maintainers = with maintainers; [ thoughtpolice ];
-       };
-    };
+  python3-print-patch = fetchpatch {
+    name   = "import-for-python-print.patch";
+    url    = "https://github.com/apple/foundationdb/commit/ded17c6cd667f39699cf663c0e87fe01e996c153.patch";
+    sha256 = "11y434w68cpk7shs2r22hyrpcrqi8vx02cw7v5x79qxvnmdxv2an";
+  };
 
 in with builtins; {
 
-  foundationdb51 = makeFdb rec {
+  # Older versions use the bespoke 'vsmake' build system
+  # ------------------------------------------------------
+
+  foundationdb51 = vsmakeBuild rec {
     version = "5.1.7";
     branch  = "release-5.1";
     sha256  = "1rc472ih24f9s5g3xmnlp3v62w206ny0pvvw02bzpix2sdrpbp06";
+
+    patches = [
+      ./patches/ldflags-5.1.patch
+      ./patches/fix-scm-version.patch
+      python3-six-patch
+      python3-print-patch
+    ];
   };
 
-  foundationdb52 = makeFdb rec {
+  foundationdb52 = vsmakeBuild rec {
     version = "5.2.8";
     branch  = "release-5.2";
     sha256  = "1kbmmhk2m9486r4kyjlc7bb3wd50204i0p6dxcmvl6pbp1bs0wlb";
+
+    patches = [
+      ./patches/ldflags-5.2.patch
+      ./patches/fix-scm-version.patch
+      python3-six-patch
+      python3-print-patch
+    ];
   };
 
-  foundationdb60 = makeFdb rec {
+  foundationdb60 = vsmakeBuild rec {
     version = "6.0.18";
     branch  = "release-6.0";
     sha256  = "0q1mscailad0z7zf1nypv4g7gx3damfp45nf8nzyq47nsw5gz69p";
+
+    patches = [
+      ./patches/ldflags-6.0.patch
+    ];
   };
+
+  # 6.1 and later versions should always use CMake
+  # ------------------------------------------------------
+
+  foundationdb61 = cmakeBuild rec {
+    version = "6.1.6pre4898_${substring 0 7 rev}";
+    branch  = "release-6.1";
+    rev     = "26fbbbf798971b2b9ecb882a8af766fa36734f53";
+    sha256  = "1q1a1j8h0qlh67khcds0dg416myvjbp6gfm6s4sk8d60zfzny7wb";
+    officialRelease = false;
+
+    patches = [
+      ./patches/clang-libcxx.patch
+      ./patches/suppress-clang-warnings.patch
+    ];
+  };
+
 }
diff --git a/pkgs/servers/foundationdb/patches/clang-libcxx.patch b/pkgs/servers/foundationdb/patches/clang-libcxx.patch
new file mode 100644
index 000000000000..ebbacdf871ea
--- /dev/null
+++ b/pkgs/servers/foundationdb/patches/clang-libcxx.patch
@@ -0,0 +1,52 @@
+commit 7ed4745a092a203f92fc37ab5894e92117db0c94
+Author: Austin Seipp <aseipp@pobox.com>
+Date:   Sat May 4 15:23:35 2019 -0500
+
+    flow: fix a build failure with Clang/libcxx on Linux
+    
+    11bd7d7da introduced a hack on Linux to work around a missing symbol in
+    libstdc++'s _pic library on Ubuntu. Unfortunately, this causes the build
+    to fail when using Clang, as it doesn't believe this symbol is part of
+    its headers in c++11 mode.
+    
+    Unfortunately there's no good way to distinguish libcxx from libstdc++
+    with the preprocessor, so we merely gate it by only checking for clang,
+    iff we are on Linux.
+    
+    With this change, Clang 8.x can build FoundationDB on Linux using libcxx
+    as the standard C++ library.
+    
+    Signed-off-by: Austin Seipp <aseipp@pobox.com>
+
+diff --git a/flow/Platform.cpp b/flow/Platform.cpp
+index 3d3f1ac0..9f21dfd4 100644
+--- a/flow/Platform.cpp
++++ b/flow/Platform.cpp
+@@ -2841,13 +2841,26 @@ void setupSlowTaskProfiler() {
+ #endif
+ }
+ 
+-#ifdef __linux__
++#if defined(__linux__) && !defined(__clang__)
+ // There's no good place to put this, so it's here.
+ // Ubuntu's packaging of libstdc++_pic offers different symbols than libstdc++.  Go figure.
+ // Notably, it's missing a definition of std::istream::ignore(long), which causes compilation errors
+ // in the bindings.  Thus, we provide weak versions of their definitions, so that if the
+ // linked-against libstdc++ is missing their definitions, we'll be able to use the provided
+ // ignore(long, int) version.
++//
++// Note that this hack is DISABLED when we use Clang. It is only needed when we statically link
++// to the _pic libraries, but only official FDB Linux binaries are built this way using GCC. If we
++// don't use the _pic libraries, then this hack is entirely unneeded -- likely the case when using
++// Clang on Linux.
++//
++// Doing this allows us to use LLVM's libc++ with Clang on Linux -- otherwise, providing
++// a weak symbol definition for an internal (non-public) class member fails (due to that member
++// being non-existant on libc++.) See upstream GitHub issue #1533 for more information.
++//
++// TODO FIXME: Obliterate this when the official build environment is upgraded beyond Ubuntu 14.04.
++// (This problem should be fixed in later LTS releases.)
++
+ #include <istream>
+ namespace std {
+ typedef basic_istream<char, std::char_traits<char>> char_basic_istream;
diff --git a/pkgs/servers/foundationdb/fix-scm-version.patch b/pkgs/servers/foundationdb/patches/fix-scm-version.patch
index 0e0df7ade82b..0e0df7ade82b 100644
--- a/pkgs/servers/foundationdb/fix-scm-version.patch
+++ b/pkgs/servers/foundationdb/patches/fix-scm-version.patch
diff --git a/pkgs/servers/foundationdb/ldflags-5.1.patch b/pkgs/servers/foundationdb/patches/ldflags-5.1.patch
index 4d523a7ecdd3..4d523a7ecdd3 100644
--- a/pkgs/servers/foundationdb/ldflags-5.1.patch
+++ b/pkgs/servers/foundationdb/patches/ldflags-5.1.patch
diff --git a/pkgs/servers/foundationdb/ldflags-5.2.patch b/pkgs/servers/foundationdb/patches/ldflags-5.2.patch
index ee5911e495f8..ee5911e495f8 100644
--- a/pkgs/servers/foundationdb/ldflags-5.2.patch
+++ b/pkgs/servers/foundationdb/patches/ldflags-5.2.patch
diff --git a/pkgs/servers/foundationdb/ldflags-6.0.patch b/pkgs/servers/foundationdb/patches/ldflags-6.0.patch
index 1fa17a9615aa..1fa17a9615aa 100644
--- a/pkgs/servers/foundationdb/ldflags-6.0.patch
+++ b/pkgs/servers/foundationdb/patches/ldflags-6.0.patch
diff --git a/pkgs/servers/foundationdb/patches/suppress-clang-warnings.patch b/pkgs/servers/foundationdb/patches/suppress-clang-warnings.patch
new file mode 100644
index 000000000000..9d1ae992efc9
--- /dev/null
+++ b/pkgs/servers/foundationdb/patches/suppress-clang-warnings.patch
@@ -0,0 +1,34 @@
+commit 8076537a52bb026941f13f5542395aac69ef0825
+Author: Austin Seipp <aseipp@pobox.com>
+Date:   Sat May 4 17:34:51 2019 -0500
+
+    cmake: add workarounds for NixOS-specific deficiencies [NixOS]
+    
+    The NixOS debug builder hook adds '-Wa,--compress-debug-sections' to the
+    link flags (it actually adds it to the compiler flags, but the compiler
+    is used for linking, so...). This makes the compiler angry when -Werror
+    is passed, because it's unused at link-time (-Wa applies to the
+    assembler). Suppress this warning with -Wno-unused-command-line-argument
+    
+    NB: we *could* use -Wno-error=unused-command-line-argument, but that
+    still results in warnings anyway, just not fatal ones. We'd like to
+    remove them all for the sake of the build output.
+    
+    Signed-off-by: Austin Seipp <aseipp@pobox.com>
+
+diff --git a/cmake/ConfigureCompiler.cmake b/cmake/ConfigureCompiler.cmake
+index 03af9c10..7d059375 100644
+--- a/cmake/ConfigureCompiler.cmake
++++ b/cmake/ConfigureCompiler.cmake
+@@ -119,6 +119,11 @@ else()
+   else()
+     add_compile_options(-Werror)
+   endif()
++  if (CLANG)
++    # aseipp: NixOS hack
++    add_compile_options(-Wno-unused-command-line-argument)
++    add_link_options(-Wno-unused-command-line-argument)
++  endif()
+   add_compile_options($<$<BOOL:${GCC}>:-Wno-pragmas>)
+   add_compile_options(-Wno-error=format
+     -Wunused-variable
diff --git a/pkgs/servers/foundationdb/test-list.txt b/pkgs/servers/foundationdb/test-list.txt
new file mode 100644
index 000000000000..3e9ce1428ada
--- /dev/null
+++ b/pkgs/servers/foundationdb/test-list.txt
@@ -0,0 +1,80 @@
+fast/AtomicBackupCorrectness.txt
+fast/AtomicBackupToDBCorrectness.txt
+fast/AtomicOps.txt
+fast/AtomicOpsApiCorrectness.txt
+fast/BackupCorrectness.txt
+fast/BackupCorrectnessClean.txt
+fast/BackupToDBCorrectness.txt
+fast/BackupToDBCorrectnessClean.txt
+fast/CloggedSideband.txt
+fast/ConstrainedRandomSelector.txt
+fast/CycleAndLock.txt
+fast/CycleTest.txt
+fast/FuzzApiCorrectness.txt
+fast/FuzzApiCorrectnessClean.txt
+fast/IncrementTest.txt
+fast/InventoryTestAlmostReadOnly.txt
+fast/InventoryTestSomeWrites.txt
+fast/KillRegionCycle.txt
+fast/LongStackWriteDuringRead.txt
+fast/LowLatency.txt
+fast/MemoryLifetime.txt
+fast/MoveKeysCycle.txt
+fast/RandomSelector.txt
+fast/RandomUnitTests.txt
+fast/SelectorCorrectness.txt
+fast/Sideband.txt
+fast/SidebandWithStatus.txt
+fast/SwizzledRollbackSideband.txt
+fast/SystemRebootTestCycle.txt
+fast/TaskBucketCorrectness.txt
+fast/TimeKeeperCorrectness.txt
+fast/Unreadable.txt
+fast/VersionStamp.txt
+fast/Watches.txt
+fast/WriteDuringRead.txt
+fast/WriteDuringReadClean.txt
+rare/CheckRelocation.txt
+rare/ClogUnclog.txt
+rare/CloggedCycleWithKills.txt
+rare/ConflictRangeCheck.txt
+rare/ConflictRangeRYOWCheck.txt
+rare/CycleRollbackClogged.txt
+rare/CycleWithKills.txt
+rare/FuzzTest.txt
+rare/InventoryTestHeavyWrites.txt
+rare/LargeApiCorrectness.txt
+rare/LargeApiCorrectnessStatus.txt
+rare/RYWDisable.txt
+rare/RandomReadWriteTest.txt
+rare/SwizzledLargeApiCorrectness.txt
+slow/ApiCorrectness.txt
+slow/ApiCorrectnessAtomicRestore.txt
+slow/ApiCorrectnessSwitchover.txt
+slow/ClogWithRollbacks.txt
+slow/CloggedCycleTest.txt
+slow/CloggedStorefront.txt
+slow/CommitBug.txt
+slow/ConfigureTest.txt
+slow/CycleRollbackPlain.txt
+slow/DDBalanceAndRemove.txt
+slow/DDBalanceAndRemoveStatus.txt
+slow/FastTriggeredWatches.txt
+slow/LowLatencyWithFailures.txt
+slow/MoveKeysClean.txt
+slow/MoveKeysSideband.txt
+slow/RyowCorrectness.txt
+slow/Serializability.txt
+slow/SharedBackupCorrectness.txt
+slow/SharedBackupToDBCorrectness.txt
+slow/StorefrontTest.txt
+slow/SwizzledApiCorrectness.txt
+slow/SwizzledCycleTest.txt
+slow/SwizzledDdBalance.txt
+slow/SwizzledRollbackTimeLapse.txt
+slow/SwizzledRollbackTimeLapseIncrement.txt
+slow/VersionStampBackupToDB.txt
+slow/VersionStampSwitchover.txt
+slow/WriteDuringReadAtomicRestore.txt
+slow/WriteDuringReadSwitchover.txt
+slow/ddbalance.txt
diff --git a/pkgs/servers/foundationdb/vsmake.nix b/pkgs/servers/foundationdb/vsmake.nix
new file mode 100644
index 000000000000..9871afb0de68
--- /dev/null
+++ b/pkgs/servers/foundationdb/vsmake.nix
@@ -0,0 +1,154 @@
+# This builder is for FoundationDB's original, somewhat strange visual studio +
+# make build system. In FoundationDB 6.1 and later, there's a new CMake system
+# (which will eventually become the default version.)
+{ stdenv49, lib, fetchurl, fetchFromGitHub
+
+, which, findutils, m4, gawk
+, python, openjdk, mono, libressl
+, ...
+}:
+
+let
+  # hysterical raisins dictate a version of boost this old. however,
+  # we luckily do not need to build anything, we just need the header
+  # files.
+  boost152 = stdenv49.mkDerivation rec {
+    name = "boost-headers-1.52.0";
+
+    src = fetchurl {
+      url = "mirror://sourceforge/boost/boost_1_52_0.tar.bz2";
+      sha256 = "14mc7gsnnahdjaxbbslzk79rc0d12h1i681cd3srdwr3fzynlar2";
+    };
+
+    configurePhase = ":";
+    buildPhase = ":";
+    installPhase = "mkdir -p $out/include && cp -R boost $out/include/";
+  };
+
+  makeFdb =
+    { version
+    , branch
+    , sha256
+
+    # the revision can be inferred from the fdb tagging policy
+    , rev    ? "refs/tags/${version}"
+
+    # in theory newer versions of fdb support newer compilers, but they
+    # don't :( maybe one day
+    , stdenv ? stdenv49
+
+    # in theory newer versions of fdb support newer boost versions, but they
+    # don't :( maybe one day
+    , boost ? boost152
+
+    # if an release is unofficial/a prerelease, then make sure this is set
+    , officialRelease ? true
+
+    , patches ? []
+    }: stdenv.mkDerivation rec {
+        name = "foundationdb-${version}";
+        inherit version;
+
+        src = fetchFromGitHub {
+          owner = "apple";
+          repo  = "foundationdb";
+          inherit rev sha256;
+        };
+
+        nativeBuildInputs = [ python openjdk gawk which m4 findutils mono ];
+        buildInputs = [ libressl boost ];
+
+        inherit patches;
+        postPatch = ''
+          # note: this does not do anything for 6.0+
+          substituteInPlace ./build/scver.mk \
+            --subst-var-by NIXOS_FDB_VERSION_ID "${rev}" \
+            --subst-var-by NIXOS_FDB_SCBRANCH   "${branch}"
+
+          substituteInPlace ./Makefile \
+            --replace 'shell which ccache' 'shell true' \
+            --replace -Werror ""
+
+          substituteInPlace ./Makefile \
+            --replace libstdc++_pic libstdc++
+
+          substituteInPlace ./build/link-validate.sh \
+            --replace 'exit 1' '#exit 1'
+
+          patchShebangs .
+        '' + lib.optionalString (lib.versionAtLeast version "6.0") ''
+          substituteInPlace ./Makefile \
+            --replace 'TLS_LIBS +=' '#TLS_LIBS +=' \
+            --replace 'LDFLAGS :=' 'LDFLAGS := -ltls -lssl -lcrypto'
+        '';
+
+        separateDebugInfo = true;
+        enableParallelBuilding = true;
+
+        makeFlags = [ "all" "fdb_java" "fdb_python" ]
+          # Don't compile FDBLibTLS if we don't need it in 6.0 or later;
+          # it gets statically linked in
+          ++ lib.optional (!lib.versionAtLeast version "6.0") [ "fdb_c" ]
+          # Needed environment overrides
+          ++ [ "KVRELEASE=1"
+               "NOSTRIP=1"
+             ] ++ lib.optional officialRelease [ "RELEASE=true" ];
+
+        # on 6.0 and later, we can specify all this information manually
+        configurePhase = lib.optionalString (lib.versionAtLeast version "6.0") ''
+          export SOURCE_CONTROL=GIT
+          export SCBRANCH="${branch}"
+          export VERSION_ID="${rev}"
+        '';
+
+        installPhase = ''
+          mkdir -vp $out/{bin,libexec/plugins} $lib/{lib,share/java} $dev/include/foundationdb
+
+        '' + lib.optionalString (!lib.versionAtLeast version "6.0") ''
+          # we only copy the TLS library on < 6.0, since it's compiled-in otherwise
+          cp -v ./lib/libFDBLibTLS.so $out/libexec/plugins/FDBLibTLS.so
+        '' + ''
+
+          # C API
+          cp -v ./lib/libfdb_c.so                           $lib/lib
+          cp -v ./bindings/c/foundationdb/fdb_c.h           $dev/include/foundationdb
+          cp -v ./bindings/c/foundationdb/fdb_c_options.g.h $dev/include/foundationdb
+          cp -v ./fdbclient/vexillographer/fdb.options      $dev/include/foundationdb
+
+          # java
+          cp -v ./bindings/java/foundationdb-client.jar     $lib/share/java/fdb-java.jar
+
+          # python
+          cp LICENSE ./bindings/python
+          substitute ./bindings/python/setup.py.in ./bindings/python/setup.py \
+            --replace 'VERSION' "${version}"
+          rm -f ./bindings/python/setup.py.in
+          rm -f ./bindings/python/fdb/*.pth # remove useless files
+          rm -f ./bindings/python/*.rst ./bindings/python/*.mk
+
+          cp -R ./bindings/python/                          tmp-pythonsrc/
+          tar -zcf $pythonsrc --transform s/tmp-pythonsrc/python-foundationdb/ ./tmp-pythonsrc/
+
+          # binaries
+          for x in fdbbackup fdbcli fdbserver fdbmonitor; do
+            cp -v "./bin/$x" $out/bin;
+          done
+
+          ln -sfv $out/bin/fdbbackup $out/bin/dr_agent
+          ln -sfv $out/bin/fdbbackup $out/bin/fdbrestore
+          ln -sfv $out/bin/fdbbackup $out/bin/fdbdr
+
+          ln -sfv $out/bin/fdbbackup $out/libexec/backup_agent
+        '';
+
+        outputs = [ "out" "lib" "dev" "pythonsrc" ];
+
+        meta = with stdenv.lib; {
+          description = "Open source, distributed, transactional key-value store";
+          homepage    = https://www.foundationdb.org;
+          license     = licenses.asl20;
+          platforms   = [ "x86_64-linux" ];
+          maintainers = with maintainers; [ thoughtpolice ];
+       };
+    };
+in makeFdb
diff --git a/pkgs/servers/home-assistant/appdaemon.nix b/pkgs/servers/home-assistant/appdaemon.nix
index ca8ddbc7af33..82df1f6b988f 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 48fa3793d9a2..12240320979c 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 d2eb536a11e5..6de571b1e0f1 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 f8349c24f7fb..9919270a8d02 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 e61d616d6a71..a2cf2d0386a2 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/servers/http/nginx/modules.nix b/pkgs/servers/http/nginx/modules.nix
index 6a0114a6ba55..5e21e8734bf1 100644
--- a/pkgs/servers/http/nginx/modules.nix
+++ b/pkgs/servers/http/nginx/modules.nix
@@ -6,8 +6,8 @@ let
     src = fetchFromGitHub {
       owner = "chobits";
       repo = "ngx_http_proxy_connect_module";
-      rev = "8201639082cba702211585b03d4cc7bc51c65167";
-      sha256 = "0z71x3xnlczrr2kq43w3drxj9g14fkk4jz66x921v0yb8r9mnn5a";
+      rev = "002f8f9ef15562dc3691b977134518ad216d7a90";
+      sha256 = "163wg0xb7w5mwh6wrfarzcgaf6c7gb5qydgpi2wk35k551f7286s";
     };
 
     patches = [
@@ -32,12 +32,21 @@ in
     inputs = [ pkgs.brotli ];
   };
 
+  coolkit = {
+    src = fetchFromGitHub {
+      owner  = "FRiCKLE";
+      repo   = "ngx_coolkit";
+      rev    = "0.2";
+      sha256 = "1idj0cqmfsdqawjcqpr1fsq670fdki51ksqk2lslfpcs3yrfjpqh";
+    };
+  };
+
   dav = {
     src = fetchFromGitHub {
       owner = "arut";
       repo = "nginx-dav-ext-module";
-      rev = "v0.1.0";
-      sha256 = "1ifahd69vz715g3zim618jbmxb7kcmzykc696grskxm0svpy294k";
+      rev = "v3.0.0";
+      sha256 = "000dm5zk0m1hm1iq60aff5r6y8xmqd7djrwhgnz9ig01xyhnjv9w";
     };
     inputs = [ pkgs.expat ];
   };
@@ -87,6 +96,10 @@ in
     };
   };
 
+  http_proxy_connect_module_v16 = http_proxy_connect_module_generic "proxy_connect_rewrite_101504" // {
+    supports = with lib.versions; version: major version == "1" && minor version == "16";
+  };
+
   ipscrub = {
     src = fetchFromGitHub {
       owner = "masonicboom";
@@ -97,12 +110,30 @@ in
     inputs = [ pkgs.libbsd ];
   };
 
+  limit-speed = {
+    src = fetchFromGitHub {
+      owner = "yaoweibin";
+      repo = "nginx_limit_speed_module";
+      rev = "f77ad4a56fbb134878e75827b40cf801990ed936";
+      sha256 = "0kkrd08zpcwx938i2is07vq6pgjkvn97xzjab0g4zaz8bivgmjp8";
+    };
+  };
+
+  live ={
+    src = fetchFromGitHub {
+      owner = "arut";
+      repo = "nginx-live-module";
+      rev = "5e4a1e3a718e65e5206c24eba00d42b0d1c4b7dd";
+      sha256 = "1kpnhl4b50zim84z22ahqxyxfq4jv8ab85kzsy2n5ciqbyg491lz";
+    };
+  };
+
   lua = {
     src = fetchFromGitHub {
       owner = "openresty";
       repo = "lua-nginx-module";
-      rev = "v0.10.13";
-      sha256 = "19mpc76lfhyyvkfs2n08b4rc9cf2v7rm8fskkf60hsdcf6qna822";
+      rev = "v0.10.15";
+      sha256 = "1j216isp0546hycklbr5wi8mlga5hq170hk7f2sm16sfavlkh5gz";
     };
     inputs = [ pkgs.luajit ];
     preConfigure = ''
@@ -148,6 +179,24 @@ in
     };
   };
 
+  mpeg-ts ={
+    src = fetchFromGitHub {
+      owner = "arut";
+      repo = "nginx-ts-module";
+      rev = "v0.1.1";
+      sha256 = "12dxcyy6wna1fccl3a9lnsbymd6p4apnwz6c24w74v97qvpfdxqd";
+    };
+  };
+
+  naxsi ={
+    src = fetchFromGitHub {
+      owner = "nbs-system";
+      repo = "naxsi";
+      rev = "0.56";
+      sha256 = "12kn6wbl8xqc19fi05ffprqps4pplg4a6i1cf01xc0d6brx1fg8v";
+    } + "/naxsi_src";
+  };
+
   ngx_aws_auth = {
     src = fetchFromGitHub {
       owner = "anomalizer";
@@ -254,6 +303,24 @@ in
     };
   };
 
+  slowfs-cache = {
+    src = fetchFromGitHub {
+      owner  = "FRiCKLE";
+      repo   = "ngx_slowfs_cache";
+      rev    = "1.10";
+      sha256 = "1gyza02pcws3zqm1phv3ag50db5gnapxyjwy8skjmvawz7p5bmxr";
+    };
+  };
+
+  sorted-querystring = {
+    src = fetchFromGitHub {
+      owner = "wandenberg";
+      repo = "nginx-sorted-querystring-module";
+      rev = "0.3";
+      sha256 = "0p6b0hcws39n27fx4xp9k4hb3pcv7b6kah4qqaj0pzjy3nbp4gj7";
+    };
+  };
+
   statsd = {
     src = fetchFromGitHub {
       owner = "apcera";
@@ -285,8 +352,8 @@ in
     src = fetchFromGitHub {
       owner = "yaoweibin";
       repo = "ngx_http_substitutions_filter_module";
-      rev = "v0.6.4";
-      sha256 = "0q86cv0mfffh43id5xanywyhpd7b0jijrmk8y311c13l9ajrd2rx";
+      rev = "bc58cb11844bc42735bbaef7085ea86ace46d05b";
+      sha256 = "1q5hr3sqys4f365gzjci549rn9ylhgj4xb29ril04zr5vkhzlnar";
     };
   };
 
@@ -303,8 +370,8 @@ in
     src = fetchFromGitHub {
       owner = "yaoweibin";
       repo = "nginx_upstream_check_module";
-      rev = "9aecf15ec379fe98f62355c57b60c0bc83296f04";
-      sha256 = "1cjisxw1wykll683nw09k0i1nvzslp4dr59x58cvarpk43paim2y";
+      rev = "007f76f7adbcbd6abd9352502af1a4ae463def85";
+      sha256 = "1qcg7c9rcl70wr1qf188shnn9s2f7cxnlw05s6scbvlgnf6ik6in";
     };
   };
 
@@ -312,8 +379,8 @@ in
     src = fetchFromGitHub {
       owner = "tarantool";
       repo = "nginx_upstream_module";
-      rev = "v2.7";
-      sha256 = "05dwj0caj910p7kan2qjvm6x2x601igryhny2xzr47hhsk5q1cnx";
+      rev = "v2.7.1";
+      sha256 = "0ya4330in7zjzqw57djv4icpk0n1j98nvf0f8v296yi9rjy054br";
     };
     inputs = [ pkgs.msgpuck.dev pkgs.yajl ];
   };
@@ -327,6 +394,16 @@ in
     };
   };
 
+  video-thumbextractor = {
+    src = fetchFromGitHub {
+      owner = "wandenberg";
+      repo = "nginx-video-thumbextractor-module";
+      rev = "0.9.0";
+      sha256 = "1b0v471mzbcys73pzr7gpvzzhff0cva0l5ff32cv7z1v9c0ypji7";
+    };
+    inputs = [ pkgs.ffmpeg ];
+  };
+
   vts = {
     src = fetchFromGitHub {
       owner = "vozlt";
@@ -335,12 +412,4 @@ in
       sha256 = "1jq2s9k7hah3b317hfn9y3g1q4g4x58k209psrfsqs718a9sw8c7";
     };
   };
-
-  http_proxy_connect_module_v15 = http_proxy_connect_module_generic "proxy_connect_rewrite_1015" // {
-    supports = with lib.versions; version: major version == "1" && minor version == "15";
-  };
-
-  http_proxy_connect_module_v14 = http_proxy_connect_module_generic "proxy_connect_rewrite_1014" // {
-    supports = with lib.versions; version: major version == "1" && minor version == "14";
-  };
 }
diff --git a/pkgs/servers/http/winstone/default.nix b/pkgs/servers/http/winstone/default.nix
deleted file mode 100644
index 6a92c0a228af..000000000000
--- a/pkgs/servers/http/winstone/default.nix
+++ /dev/null
@@ -1,26 +0,0 @@
-{ stdenv, fetchurl }:
-
-stdenv.mkDerivation rec {
-  name = "winstone-${version}";
-  version = "0.9.10";
-
-  src = fetchurl {
-    url = "mirror://sourceforge/winstone/${name}.jar";
-    sha256 = "17xvq3yk95335c6ag1bmbmxlvh7gqq35ifi64r2l6rnvrf6pqyan";
-  };
-
-  phases = [ "installPhase" ];
-
-  installPhase = ''
-    mkdir -p $out/lib
-    cp $src $out/lib/winstone.jar
-  '';
-
-  meta = {
-    homepage = http://winstone.sourceforge.net/;
-    description = "A simple Java Servlet container";
-    license = stdenv.lib.licenses.cddl;
-    platforms = stdenv.lib.platforms.all;
-    maintainers = [ stdenv.lib.maintainers.rickynils ];
-  };
-}
diff --git a/pkgs/servers/jellyfin/default.nix b/pkgs/servers/jellyfin/default.nix
index d41c94eee562..9be9a1ec06c2 100644
--- a/pkgs/servers/jellyfin/default.nix
+++ b/pkgs/servers/jellyfin/default.nix
@@ -2,12 +2,12 @@
 
 stdenv.mkDerivation rec {
   pname = "jellyfin";
-  version = "10.3.2";
+  version = "10.3.3";
 
   # Impossible to build anything offline with dotnet
   src = fetchurl {
     url = "https://github.com/jellyfin/jellyfin/releases/download/v${version}/jellyfin_${version}_portable.tar.gz";
-    sha256 = "0cwmaq61xhdb34f53m2vhnw8v4zrj266vjzfdm106gyychpr46vz";
+    sha256 = "197bmr9y13rxms1bwm4infrv0dzbv9qqw67lb1alskmpp0vjg3s7";
   };
 
   buildInputs = [
diff --git a/pkgs/servers/monitoring/plugins/default.nix b/pkgs/servers/monitoring/plugins/default.nix
index 3e6eaa4766e8..cb12fe819a95 100644
--- a/pkgs/servers/monitoring/plugins/default.nix
+++ b/pkgs/servers/monitoring/plugins/default.nix
@@ -1,5 +1,6 @@
-{ stdenv, fetchFromGitHub, autoreconfHook
+{ stdenv, fetchFromGitHub, fetchpatch, autoreconfHook
 , coreutils, gnugrep, gnused, lm_sensors, net_snmp, openssh, openssl, perl
+, dnsutils, libdbi, mysql, zlib, openldap, procps
 , runtimeShell }:
 
 with stdenv.lib;
@@ -8,7 +9,7 @@ let
   majorVersion = "2.2";
   minorVersion = ".0";
 
-  binPath = makeBinPath [ coreutils gnugrep gnused lm_sensors net_snmp ];
+  binPath = makeBinPath [ coreutils gnugrep gnused lm_sensors net_snmp procps ];
 
 in stdenv.mkDerivation rec {
   name = "monitoring-plugins-${majorVersion}${minorVersion}";
@@ -20,6 +21,14 @@ in stdenv.mkDerivation rec {
     sha256 = "1pw7i6d2cnb5nxi2lbkwps2qzz04j9zd86fzpv9ka896b4aqrwv1";
   };
 
+  patches = [
+    # https://github.com/monitoring-plugins/monitoring-plugins/issues/1508
+    (fetchpatch {
+      url = "https://github.com/monitoring-plugins/monitoring-plugins/commit/ac0437ff896ba9ce2549b2d2ec3de146a886f08a.patch";
+      sha256 = "0jf6fqkyzag66rid92m7asnr2dp8rr8kn4zjvhqg0mqvf8imppky";
+    })
+  ];
+
   # !!! Awful hack. Grrr... this of course only works on NixOS.
   # Anyway the check that configure performs to figure out the ping
   # syntax is totally impure, because it runs an actual ping to
@@ -39,7 +48,7 @@ in stdenv.mkDerivation rec {
   '';
 
   # !!! make openssh a runtime dependency only
-  buildInputs = [ net_snmp openssh openssl perl ];
+  buildInputs = [ dnsutils libdbi mysql net_snmp openldap openssh openssl perl procps zlib ];
 
   nativeBuildInputs = [ autoreconfHook ];
 
diff --git a/pkgs/servers/mxisd/0001-gradle.patch b/pkgs/servers/mxisd/0001-gradle.patch
index 55ff6ead22d4..8a9f5a81180b 100644
--- a/pkgs/servers/mxisd/0001-gradle.patch
+++ b/pkgs/servers/mxisd/0001-gradle.patch
@@ -1,19 +1,19 @@
---- a/build.gradle	2018-11-16 15:15:29.021469758 +0100
-+++ b/build.gradle	2018-11-16 15:16:50.982289782 +0100
-@@ -64,7 +64,7 @@
+--- a/build.gradle	2019-05-16 21:09:08.373112953 +0200
++++ b/build.gradle	2019-05-16 21:09:37.093114427 +0200
+@@ -72,7 +72,7 @@
  
  buildscript {
      repositories {
--        mavenCentral()
-+    REPLACE
+-        jcenter()
++REPLACE
      }
  
      dependencies {
-@@ -73,9 +73,7 @@
+@@ -81,9 +81,7 @@
  }
  
  repositories {
--    mavenCentral()
+-    jcenter()
 -    maven { url "https://kamax.io/maven/releases/" }
 -    maven { url "https://kamax.io/maven/snapshots/" }
 +REPLACE
diff --git a/pkgs/servers/mxisd/default.nix b/pkgs/servers/mxisd/default.nix
index 0d3bc4f3e08b..9d26ecb6ab16 100644
--- a/pkgs/servers/mxisd/default.nix
+++ b/pkgs/servers/mxisd/default.nix
@@ -1,22 +1,22 @@
-{ stdenv, fetchFromGitHub, jdk, jre, git, gradle_2_5, perl, makeWrapper, writeText }:
+{ stdenv, fetchFromGitHub, jdk, jre, git, gradle_4_10, perl, makeWrapper, writeText }:
 
 let
   name = "mxisd-${version}";
-  version = "1.2.0";
-  rev = "8c4ddd2e6526c1d2b284ba88cce3c2b926d99c62";
+  version = "1.4.3";
+  rev = "cd890d114a46e4a3792c57cc7a35b95b2c466a16";
 
   src = fetchFromGitHub {
     inherit rev;
     owner = "kamax-matrix";
     repo = "mxisd";
-    sha256 = "083plqg0rxsqwzyskin78wkmylhb7cqz37lpsa1zy56sxpdw1a3l";
+    sha256 = "05plcf6bq19fmx528fgnib4bw9gz36irwlnfsykys1bpmi60wj69";
   };
 
 
   deps = stdenv.mkDerivation {
     name = "${name}-deps";
     inherit src;
-    nativeBuildInputs = [ gradle_2_5 perl git ];
+    nativeBuildInputs = [ gradle_4_10 perl git ];
 
     buildPhase = ''
       export MXISD_BUILD_VERSION=${rev}
@@ -35,13 +35,13 @@ let
 
     outputHashAlgo = "sha256";
     outputHashMode = "recursive";
-    outputHash = "0shshn05nzv23shry1xpcgvqg59gx929n0qngpfjhbq0kp7px68m";
+    outputHash = "0z9f3w7lfdvbk26kyckpbgas7mi98rjghck9w0kvx3r7k48p5vnv";
   };
 
 in
 stdenv.mkDerivation {
   inherit name src version;
-  nativeBuildInputs = [ gradle_2_5 perl makeWrapper ];
+  nativeBuildInputs = [ gradle_4_10 perl makeWrapper ];
   buildInputs = [ jre ];
 
   patches = [ ./0001-gradle.patch ];
diff --git a/pkgs/servers/search/elasticsearch/5.x.nix b/pkgs/servers/search/elasticsearch/5.x.nix
index 0d67988e8208..6142d751dab1 100644
--- a/pkgs/servers/search/elasticsearch/5.x.nix
+++ b/pkgs/servers/search/elasticsearch/5.x.nix
@@ -1,4 +1,5 @@
-{ stdenv, fetchurl, elk5Version, makeWrapper, jre_headless, utillinux }:
+{ stdenv, fetchurl, elk5Version, makeWrapper, jre_headless
+, utillinux, gnugrep, coreutils }:
 
 with stdenv.lib;
 
@@ -23,7 +24,7 @@ stdenv.mkDerivation rec {
 
     wrapProgram $out/bin/elasticsearch \
       --prefix ES_CLASSPATH : "$out/lib/*" \
-      --prefix PATH : "${utillinux}/bin" \
+      --prefix PATH : "${makeBinPath [ utillinux gnugrep coreutils ]}" \
       --set JAVA_HOME "${jre_headless}" \
       --set ES_JVM_OPTIONS "$out/config/jvm.options"
 
diff --git a/pkgs/servers/search/elasticsearch/6.x.nix b/pkgs/servers/search/elasticsearch/6.x.nix
index 73bee6c47f3c..fffc84b2d281 100644
--- a/pkgs/servers/search/elasticsearch/6.x.nix
+++ b/pkgs/servers/search/elasticsearch/6.x.nix
@@ -4,7 +4,7 @@
 , fetchurl
 , makeWrapper
 , jre_headless
-, utillinux
+, utillinux, gnugrep, coreutils
 , autoPatchelfHook
 , zlib
 }:
@@ -45,7 +45,7 @@ stdenv.mkDerivation (rec {
     chmod -x $out/bin/*.*
 
     wrapProgram $out/bin/elasticsearch \
-      --prefix PATH : "${utillinux}/bin/" \
+      --prefix PATH : "${makeBinPath [ utillinux gnugrep coreutils ]}" \
       --set JAVA_HOME "${jre_headless}"
 
     wrapProgram $out/bin/elasticsearch-plugin --set JAVA_HOME "${jre_headless}"
diff --git a/pkgs/servers/search/elasticsearch/7.x.nix b/pkgs/servers/search/elasticsearch/7.x.nix
index a55a43baa0be..ddb1d2299cbb 100644
--- a/pkgs/servers/search/elasticsearch/7.x.nix
+++ b/pkgs/servers/search/elasticsearch/7.x.nix
@@ -4,7 +4,7 @@
 , fetchurl
 , makeWrapper
 , jre_headless
-, utillinux
+, utillinux, gnugrep, coreutils
 , autoPatchelfHook
 , zlib
 }:
@@ -56,7 +56,7 @@ stdenv.mkDerivation (rec {
     chmod +x $out/bin/*
 
     wrapProgram $out/bin/elasticsearch \
-      --prefix PATH : "${utillinux}/bin/" \
+      --prefix PATH : "${makeBinPath [ utillinux coreutils gnugrep ]}" \
       --set JAVA_HOME "${jre_headless}"
 
     wrapProgram $out/bin/elasticsearch-plugin --set JAVA_HOME "${jre_headless}"
diff --git a/pkgs/servers/sql/postgresql/ext/pg_partman.nix b/pkgs/servers/sql/postgresql/ext/pg_partman.nix
new file mode 100644
index 000000000000..b8ca074f6627
--- /dev/null
+++ b/pkgs/servers/sql/postgresql/ext/pg_partman.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pg_partman";
+  version = "4.1.0";
+
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "pgpartman";
+    repo   = pname;
+    rev    = "refs/tags/v${version}";
+    sha256 = "0bzv92x492jcwzhal9x4vc3vszixscdpxc6yq5rrqld26dhmsp06";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin    # For buildEnv to setup proper symlinks. See #22653
+    mkdir -p $out/{lib,share/extension}
+
+    cp src/*.so      $out/lib
+    cp updates/*     $out/share/extension
+    cp -r sql/*      $out/share/extension
+    cp *.control     $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Partition management extension for PostgreSQL";
+    homepage    = https://github.com/pgpartman/pg_partman;
+    maintainers = with maintainers; [ ggpeti ];
+    platforms   = postgresql.meta.platforms;
+    license     = licenses.postgresql;
+  };
+}
diff --git a/pkgs/servers/sql/postgresql/ext/pipelinedb.nix b/pkgs/servers/sql/postgresql/ext/pipelinedb.nix
new file mode 100644
index 000000000000..de3cde8120d6
--- /dev/null
+++ b/pkgs/servers/sql/postgresql/ext/pipelinedb.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, postgresql, zeromq, openssl }:
+
+if stdenv.lib.versionOlder postgresql.version "10"
+then throw "PipelineDB not supported for PostgreSQL ${postgresql.version}"
+else
+stdenv.mkDerivation rec {
+  pname = "pipelinedb";
+  version = "1.0.0-13";
+
+  src = fetchFromGitHub {
+    owner = "pipelinedb";
+    repo = pname;
+    rev = version;
+    sha256 = "1mnqpvx6g1r2n4kjrrx01vbdx7kvndfsbmm7zbzizjnjlyixz75f";
+  };
+
+  buildInputs = [ postgresql openssl zeromq ];
+
+  makeFlags = [ "USE_PGXS=1" ];
+
+  preConfigure = ''
+    substituteInPlace Makefile \
+      --replace "/usr/lib/libzmq.a" "${zeromq}/lib/libzmq.a"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -D -t $out/lib/ pipelinedb.so
+    install -D -t $out/share/extension {pipelinedb-*.sql,pipelinedb.control}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "High-performance time-series aggregation for PostgreSQL";
+    homepage = https://www.pipelinedb.com/;
+    license = licenses.asl20;
+    platforms = postgresql.meta.platforms;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/pkgs/servers/sql/postgresql/packages.nix b/pkgs/servers/sql/postgresql/packages.nix
index 70579ee292a2..60faa2db2407 100644
--- a/pkgs/servers/sql/postgresql/packages.nix
+++ b/pkgs/servers/sql/postgresql/packages.nix
@@ -31,6 +31,8 @@ self: super: {
 
     pgtap = super.callPackage ./ext/pgtap.nix { };
 
+    pipelinedb = super.callPackage ./ext/pipelinedb.nix { };
+
     timescaledb = super.callPackage ./ext/timescaledb.nix { };
 
     tsearch_extras = super.callPackage ./ext/tsearch_extras.nix { };
@@ -38,4 +40,6 @@ self: super: {
     tds_fdw = super.callPackage ./ext/tds_fdw.nix { };
 
     pgrouting = super.callPackage ./ext/pgrouting.nix { };
+
+    pg_partman = super.callPackage ./ext/pg_partman.nix { };
 }