diff options
Diffstat (limited to 'pkgs/servers')
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 { }; } |