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