about summary refs log tree commit diff
path: root/pkgs/servers/home-assistant
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/servers/home-assistant')
-rw-r--r--pkgs/servers/home-assistant/appdaemon.nix1
-rw-r--r--pkgs/servers/home-assistant/component-packages.nix926
-rw-r--r--pkgs/servers/home-assistant/custom-components/adaptive_lighting/default.nix4
-rw-r--r--pkgs/servers/home-assistant/custom-components/awtrix/default.nix30
-rw-r--r--pkgs/servers/home-assistant/custom-components/default.nix10
-rw-r--r--pkgs/servers/home-assistant/custom-components/epex_spot/default.nix8
-rw-r--r--pkgs/servers/home-assistant/custom-components/homematicip_local/default.nix4
-rw-r--r--pkgs/servers/home-assistant/custom-components/localtuya/default.nix2
-rw-r--r--pkgs/servers/home-assistant/custom-components/midea_ac_lan/default.nix25
-rw-r--r--pkgs/servers/home-assistant/custom-components/miele/default.nix2
-rw-r--r--pkgs/servers/home-assistant/custom-components/moonraker/default.nix4
-rw-r--r--pkgs/servers/home-assistant/custom-components/ntfy/default.nix30
-rw-r--r--pkgs/servers/home-assistant/custom-components/omnik_inverter/default.nix2
-rw-r--r--pkgs/servers/home-assistant/custom-components/prometheus_sensor/default.nix4
-rw-r--r--pkgs/servers/home-assistant/custom-components/smartir/default.nix24
-rw-r--r--pkgs/servers/home-assistant/custom-components/smartthinq-sensors/default.nix4
-rw-r--r--pkgs/servers/home-assistant/custom-components/spook/default.nix38
-rw-r--r--pkgs/servers/home-assistant/custom-components/spook/remove-sub-integration-symlink-hack.patch109
-rw-r--r--pkgs/servers/home-assistant/custom-components/tuya_local/default.nix34
-rw-r--r--pkgs/servers/home-assistant/custom-components/waste_collection_schedule/default.nix13
-rw-r--r--pkgs/servers/home-assistant/custom-components/xiaomi_gateway3/default.nix20
-rw-r--r--pkgs/servers/home-assistant/custom-components/xiaomi_miot/default.nix24
-rw-r--r--pkgs/servers/home-assistant/custom-components/yassi/default.nix6
-rw-r--r--pkgs/servers/home-assistant/custom-lovelace-modules/android-tv-card/default.nix39
-rw-r--r--pkgs/servers/home-assistant/custom-lovelace-modules/android-tv-card/dont-call-git.patch17
-rw-r--r--pkgs/servers/home-assistant/custom-lovelace-modules/button-card/default.nix52
-rw-r--r--pkgs/servers/home-assistant/custom-lovelace-modules/button-card/package.json78
-rw-r--r--pkgs/servers/home-assistant/custom-lovelace-modules/card-mod/default.nix37
-rw-r--r--pkgs/servers/home-assistant/custom-lovelace-modules/decluttering-card/default.nix36
-rw-r--r--pkgs/servers/home-assistant/custom-lovelace-modules/default.nix12
-rw-r--r--pkgs/servers/home-assistant/custom-lovelace-modules/lg-webos-remote-control/default.nix37
-rw-r--r--pkgs/servers/home-assistant/custom-lovelace-modules/mushroom/default.nix6
-rw-r--r--pkgs/servers/home-assistant/custom-lovelace-modules/valetudo-map-card/default.nix39
-rw-r--r--pkgs/servers/home-assistant/custom-lovelace-modules/valetudo-map-card/remove-git-dependency.patch64
-rw-r--r--pkgs/servers/home-assistant/custom-lovelace-modules/zigbee2mqtt-networkmap/default.nix19
-rwxr-xr-xpkgs/servers/home-assistant/custom-lovelace-modules/zigbee2mqtt-networkmap/update.sh9
-rw-r--r--pkgs/servers/home-assistant/default.nix184
-rw-r--r--pkgs/servers/home-assistant/frontend.nix4
-rw-r--r--pkgs/servers/home-assistant/intents.nix10
-rw-r--r--pkgs/servers/home-assistant/stubs.nix8
-rw-r--r--pkgs/servers/home-assistant/tests.nix25
-rwxr-xr-xpkgs/servers/home-assistant/update-component-packages.py1
42 files changed, 1024 insertions, 977 deletions
diff --git a/pkgs/servers/home-assistant/appdaemon.nix b/pkgs/servers/home-assistant/appdaemon.nix
index 40c55e9f5d788..c2bb51cc14a01 100644
--- a/pkgs/servers/home-assistant/appdaemon.nix
+++ b/pkgs/servers/home-assistant/appdaemon.nix
@@ -18,7 +18,6 @@ python3.pkgs.buildPythonApplication rec {
   pythonRelaxDeps = true;
 
   nativeBuildInputs = with python3.pkgs; [
-    pythonRelaxDepsHook
     setuptools
   ];
 
diff --git a/pkgs/servers/home-assistant/component-packages.nix b/pkgs/servers/home-assistant/component-packages.nix
index 186956baa9ff9..c56be24eaac5e 100644
--- a/pkgs/servers/home-assistant/component-packages.nix
+++ b/pkgs/servers/home-assistant/component-packages.nix
@@ -2,7 +2,7 @@
 # Do not edit!
 
 {
-  version = "2024.4.4";
+  version = "2024.6.4";
   components = {
     "3_day_blinds" = ps: with ps; [
     ];
@@ -51,6 +51,8 @@
     ];
     "air_quality" = ps: with ps; [
     ];
+    "airgradient" = ps: with ps; [
+    ]; # missing inputs: airgradient
     "airly" = ps: with ps; [
       airly
     ];
@@ -65,9 +67,6 @@
     ];
     "airthings_ble" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       airthings-ble
@@ -112,7 +111,10 @@
       aioairzone-cloud
     ];
     "aladdin_connect" = ps: with ps; [
-      aioaladdinconnect
+      fnv-hash-fast
+      genie-partner-sdk
+      psutil-home-assistant
+      sqlalchemy
     ];
     "alarm_control_panel" = ps: with ps; [
     ];
@@ -122,9 +124,6 @@
     "alert" = ps: with ps; [
     ];
     "alexa" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pyturbojpeg
     ];
     "alpha_vantage" = ps: with ps; [
@@ -136,11 +135,8 @@
     "amberelectric" = ps: with ps; [
       amberelectric
     ];
-    "ambiclimate" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
-      ambiclimate
+    "ambient_network" = ps: with ps; [
+      aioambient
     ];
     "ambient_station" = ps: with ps; [
       aioambient
@@ -155,9 +151,6 @@
       asmog
     ];
     "analytics" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -200,16 +193,10 @@
       aioapcaccess
     ];
     "api" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "appalachianpower" = ps: with ps; [
     ];
     "apple_tv" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ifaddr
       psutil-home-assistant
@@ -218,9 +205,6 @@
       zeroconf
     ];
     "application_credentials" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -234,6 +218,8 @@
       aprslib
       geopy
     ];
+    "apsystems" = ps: with ps; [
+    ]; # missing inputs: apsystems-ez1
     "aqualogic" = ps: with ps; [
       aqualogic
     ];
@@ -242,9 +228,6 @@
     ];
     "aranet" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       aranet4
@@ -281,19 +264,15 @@
     "aruba" = ps: with ps; [
       pexpect
     ];
+    "arve" = ps: with ps; [
+    ]; # missing inputs: asyncarve
     "arwn" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       paho-mqtt
     ];
     "aseko_pool_live" = ps: with ps; [
       aioaseko
     ];
     "assist_pipeline" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       ha-ffmpeg
       hassil
       home-assistant-intents
@@ -337,14 +316,8 @@
       pyaussiebb
     ];
     "auth" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "automation" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "avea" = ps: with ps; [
       avea
@@ -359,12 +332,11 @@
       aiobotocore
     ];
     "axis" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       axis
       paho-mqtt
     ];
+    "azure_data_explorer" = ps: with ps; [
+    ]; # missing inputs: azure-kusto-data azure-kusto-ingest
     "azure_devops" = ps: with ps; [
       aioazuredevops
     ];
@@ -375,9 +347,6 @@
       azure-servicebus
     ];
     "backup" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       securetar
@@ -434,9 +403,6 @@
     ];
     "bluemaestro" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -468,9 +434,6 @@
       xmltodict
     ];
     "bluetooth" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       bleak
       bleak-retry-connector
       bluetooth-adapters
@@ -486,9 +449,6 @@
     ];
     "bluetooth_adapters" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -515,9 +475,6 @@
     ];
     "bluetooth_le_tracker" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -554,9 +511,6 @@
       bond-async
     ];
     "bosch_shc" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       boschshcpy
       fnv-hash-fast
       ifaddr
@@ -579,6 +533,7 @@
     ];
     "brother" = ps: with ps; [
       brother
+      pysnmp-lextudio
     ];
     "brottsplatskartan" = ps: with ps; [
       brottsplatskartan
@@ -600,9 +555,6 @@
     ];
     "bthome" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -641,14 +593,8 @@
       caldav
     ];
     "calendar" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "camera" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pyturbojpeg
     ];
     "canary" = ps: with ps; [
@@ -656,9 +602,6 @@
       py-canary
     ];
     "cast" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ha-ffmpeg
       hass-nabucasa
@@ -706,9 +649,6 @@
     "climate" = ps: with ps; [
     ];
     "cloud" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ha-ffmpeg
       hass-nabucasa
@@ -756,9 +696,6 @@
     "coned" = ps: with ps; [
     ];
     "config" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "configurator" = ps: with ps; [
     ];
@@ -766,9 +703,6 @@
       pycontrol4
     ];
     "conversation" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       hassil
       home-assistant-intents
     ];
@@ -789,9 +723,6 @@
     "cribl" = ps: with ps; [
     ];
     "crownstone" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       crownstone-cloud
       crownstone-sse
       crownstone-uart
@@ -837,9 +768,6 @@
     "default_config" = ps: with ps; [
       aiodhcpwatcher
       aiodiscover
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       async-upnp-client
       bleak
       bleak-retry-connector
@@ -880,11 +808,12 @@
       deluge-client
     ];
     "demo" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
+      fnv-hash-fast
       hassil
       home-assistant-intents
+      pillow
+      psutil-home-assistant
+      sqlalchemy
     ];
     "denon" = ps: with ps; [
     ];
@@ -894,9 +823,6 @@
     "derivative" = ps: with ps; [
     ];
     "devialet" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       devialet
       fnv-hash-fast
       ifaddr
@@ -907,17 +833,14 @@
     "device_automation" = ps: with ps; [
     ];
     "device_sun_light_trigger" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
+      fnv-hash-fast
       pillow
+      psutil-home-assistant
+      sqlalchemy
     ];
     "device_tracker" = ps: with ps; [
     ];
     "devolo_home_control" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       devolo-home-control-api
       fnv-hash-fast
       ifaddr
@@ -937,14 +860,8 @@
       cached-ipaddress
     ];
     "diagnostics" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "dialogflow" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "diaz" = ps: with ps; [
     ];
@@ -974,9 +891,6 @@
     "dlink" = ps: with ps; [
     ]; # missing inputs: pyW215
     "dlna_dmr" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       async-upnp-client
       fnv-hash-fast
       getmac
@@ -985,9 +899,6 @@
       sqlalchemy
     ];
     "dlna_dms" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       async-upnp-client
       fnv-hash-fast
       ifaddr
@@ -998,27 +909,18 @@
       aiodns
     ];
     "dominos" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ]; # missing inputs: pizzapi
     "doods" = ps: with ps; [
       pillow
       pydoods
     ];
     "doorbird" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       doorbirdpy
     ];
     "dooya" = ps: with ps; [
     ];
     "dormakaba_dkey" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -1052,9 +954,6 @@
       dremel3dpy
     ];
     "drop_connect" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       dropmqttapi
       paho-mqtt
     ];
@@ -1062,9 +961,6 @@
       dsmr-parser
     ];
     "dsmr_reader" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       paho-mqtt
     ];
     "dte_energy_bridge" = ps: with ps; [
@@ -1087,9 +983,6 @@
     "dweet" = ps: with ps; [
     ]; # missing inputs: dweepy
     "dynalite" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       dynalite-devices
       dynalite-panel
       fnv-hash-fast
@@ -1127,9 +1020,6 @@
     ]; # missing inputs: py-sucks
     "ecowitt" = ps: with ps; [
       aioecowitt
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "eddystone_temperature" = ps: with ps; [
     ]; # missing inputs: beacontools
@@ -1150,9 +1040,6 @@
     "electrasmart" = ps: with ps; [
     ]; # missing inputs: pyElectra
     "electric_kiwi" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -1164,9 +1051,6 @@
       eliqonline
     ];
     "elkm1" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       elkm1-lib
       fnv-hash-fast
       ifaddr
@@ -1180,9 +1064,6 @@
       pypca
     ];
     "elvia" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -1198,9 +1079,6 @@
       aioemonitor
     ];
     "emulated_hue" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ifaddr
       psutil-home-assistant
@@ -1210,21 +1088,17 @@
       sense-energy
     ];
     "emulated_roku" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       emulated-roku
       fnv-hash-fast
       ifaddr
       psutil-home-assistant
       sqlalchemy
     ];
+    "energenie_power_sockets" = ps: with ps; [
+    ]; # missing inputs: pyegps
     "energie_vanons" = ps: with ps; [
     ];
     "energy" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -1255,14 +1129,40 @@
     "ephember" = ps: with ps; [
       pyephember
     ];
+    "epic_games_store" = ps: with ps; [
+    ]; # missing inputs: epicstore-api
     "epion" = ps: with ps; [
       epion
     ];
     "epson" = ps: with ps; [
       epson-projector
     ];
-    "epsonworkforce" = ps: with ps; [
-    ]; # missing inputs: epsonprinter
+    "eq3btsmart" = ps: with ps; [
+      aioesphomeapi
+      aioruuvigateway
+      aioshelly
+      bleak
+      bleak-esphome
+      bleak-retry-connector
+      bluetooth-adapters
+      bluetooth-auto-recovery
+      bluetooth-data-tools
+      dbus-fast
+      esphome-dashboard-api
+      fnv-hash-fast
+      ha-ffmpeg
+      habluetooth
+      hassil
+      home-assistant-intents
+      ifaddr
+      mutagen
+      psutil-home-assistant
+      pyserial
+      pyudev
+      sqlalchemy
+      webrtc-noise-gain
+      zeroconf
+    ]; # missing inputs: eq3btsmart
     "escea" = ps: with ps; [
       pescea
     ];
@@ -1270,9 +1170,6 @@
     ];
     "esphome" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       bleak
       bleak-esphome
       bleak-retry-connector
@@ -1302,9 +1199,6 @@
     ];
     "eufylife_ble" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -1383,16 +1277,10 @@
       file-read-backwards
     ];
     "file_upload" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "filesize" = ps: with ps; [
     ];
     "filter" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -1409,9 +1297,6 @@
       pymata-express
     ];
     "fitbit" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fitbit
       fnv-hash-fast
       psutil-home-assistant
@@ -1425,9 +1310,6 @@
     ];
     "fjaraskupan" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -1483,9 +1365,6 @@
     "flux" = ps: with ps; [
     ];
     "flux_led" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       flux-led
       fnv-hash-fast
       ifaddr
@@ -1504,9 +1383,6 @@
       forecast-solar
     ];
     "forked_daapd" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       spotipy
@@ -1519,9 +1395,6 @@
       libpyfoscam
     ];
     "foursquare" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "free_mobile" = ps: with ps; [
     ]; # missing inputs: freesms
@@ -1535,9 +1408,6 @@
       pyfreedompro
     ];
     "fritz" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       fritzconnection
       ifaddr
@@ -1557,9 +1427,6 @@
       pyfronius
     ];
     "frontend" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       home-assistant-frontend
       pillow
@@ -1572,9 +1439,6 @@
     "fujitsu_anywair" = ps: with ps; [
     ];
     "fully_kiosk" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       paho-mqtt
       python-fullykiosk
     ];
@@ -1591,9 +1455,6 @@
     ];
     "gardena_bluetooth" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -1627,18 +1488,12 @@
       aio-georss-gdacs
     ];
     "generic" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       ha-av
       pillow
     ];
     "generic_hygrostat" = ps: with ps; [
     ];
     "generic_thermostat" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -1655,18 +1510,12 @@
       georss-generic-client
     ];
     "geocaching" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       geocachingapi
       psutil-home-assistant
       sqlalchemy
     ];
     "geofency" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "geonetnz_quakes" = ps: with ps; [
       aio-geojson-geonetnz-quakes
@@ -1698,9 +1547,6 @@
       goodwe
     ];
     "google" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       gcal-sync
       ical
@@ -1709,9 +1555,6 @@
       sqlalchemy
     ];
     "google_assistant" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       python-matter-server
@@ -1719,9 +1562,6 @@
       sqlalchemy
     ];
     "google_assistant_sdk" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       gassist-text
       psutil-home-assistant
@@ -1733,17 +1573,15 @@
     "google_domains" = ps: with ps; [
     ];
     "google_generative_ai_conversation" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       google-generativeai
+      ha-ffmpeg
       hassil
       home-assistant-intents
+      mutagen
+      voluptuous-openapi
+      webrtc-noise-gain
     ];
     "google_mail" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       google-api-python-client
       psutil-home-assistant
@@ -1756,18 +1594,12 @@
       google-cloud-pubsub
     ];
     "google_sheets" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       gspread
       psutil-home-assistant
       sqlalchemy
     ];
     "google_tasks" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       google-api-python-client
       psutil-home-assistant
@@ -1783,9 +1615,6 @@
     ];
     "govee_ble" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -1812,9 +1641,6 @@
       zeroconf
     ];
     "govee_light_local" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       govee-local-api
       ifaddr
@@ -1825,16 +1651,10 @@
       gps3
     ];
     "gpslogger" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "graphite" = ps: with ps; [
     ];
     "gree" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       greeclimate
       ifaddr
@@ -1847,6 +1667,10 @@
     "greenwave" = ps: with ps; [
     ]; # missing inputs: greenwavereality
     "group" = ps: with ps; [
+      fnv-hash-fast
+      pillow
+      psutil-home-assistant
+      sqlalchemy
     ];
     "growatt_server" = ps: with ps; [
       growattserver
@@ -1863,9 +1687,6 @@
       habitipy
     ];
     "hardkernel" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       psutil-home-assistant
     ];
     "hardware" = ps: with ps; [
@@ -1878,9 +1699,6 @@
       aioharmony
     ];
     "hassio" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "havana_shade" = ps: with ps; [
     ];
@@ -1915,17 +1733,11 @@
       pyaehw4a1
     ];
     "history" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
     ];
     "history_stats" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -1945,9 +1757,6 @@
       holidays
     ];
     "home_connect" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       homeconnect
       psutil-home-assistant
@@ -1960,15 +1769,11 @@
     "homeassistant_alerts" = ps: with ps; [
     ];
     "homeassistant_green" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       bellows
       fnv-hash-fast
       pillow
       psutil-home-assistant
       pyserial
-      pyserial-asyncio
       pyserial-asyncio-fast
       pyudev
       sqlalchemy
@@ -1981,15 +1786,11 @@
       zigpy-znp
     ];
     "homeassistant_hardware" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       bellows
       fnv-hash-fast
       pillow
       psutil-home-assistant
       pyserial
-      pyserial-asyncio
       pyserial-asyncio-fast
       pyudev
       sqlalchemy
@@ -2002,15 +1803,11 @@
       zigpy-znp
     ];
     "homeassistant_sky_connect" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       bellows
       fnv-hash-fast
       pillow
       psutil-home-assistant
       pyserial
-      pyserial-asyncio
       pyserial-asyncio-fast
       pyudev
       sqlalchemy
@@ -2023,15 +1820,11 @@
       zigpy-znp
     ];
     "homeassistant_yellow" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       bellows
       fnv-hash-fast
       pillow
       psutil-home-assistant
       pyserial
-      pyserial-asyncio
       pyserial-asyncio-fast
       pyudev
       sqlalchemy
@@ -2044,9 +1837,6 @@
       zigpy-znp
     ];
     "homekit" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       base36
       fnv-hash-fast
       ha-ffmpeg
@@ -2061,9 +1851,6 @@
     "homekit_controller" = ps: with ps; [
       aioesphomeapi
       aiohomekit
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -2111,15 +1898,9 @@
       python-hpilo
     ];
     "html5" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pywebpush
     ];
     "http" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "huawei_lte" = ps: with ps; [
       huawei-lte-api
@@ -2141,9 +1922,6 @@
     ];
     "husqvarna_automower" = ps: with ps; [
       aioautomower
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -2172,9 +1950,6 @@
     ];
     "ibeacon" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -2205,9 +1980,6 @@
     ];
     "idasen_desk" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -2235,9 +2007,6 @@
     "idteck_prox" = ps: with ps; [
     ]; # missing inputs: rfk101py
     "ifttt" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pyfttt
     ];
     "iglo" = ps: with ps; [
@@ -2249,33 +2018,20 @@
       defusedxml
     ]; # missing inputs: ihcsdk
     "image" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "image_processing" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pyturbojpeg
     ];
     "image_upload" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pillow
     ];
     "imap" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioimaplib
     ];
+    "imgw_pib" = ps: with ps; [
+    ]; # missing inputs: imgw_pib
     "improv_ble" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -2311,9 +2067,6 @@
     ];
     "inkbird" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -2354,9 +2107,6 @@
     "inspired_shades" = ps: with ps; [
     ];
     "insteon" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       home-assistant-frontend
       insteon-frontend-home-assistant
@@ -2373,9 +2123,6 @@
       intellifire4py
     ];
     "intent" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "intent_script" = ps: with ps; [
     ];
@@ -2383,9 +2130,6 @@
       pyintesishome
     ];
     "ios" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ifaddr
       psutil-home-assistant
@@ -2408,9 +2152,11 @@
     ];
     "irish_rail_transport" = ps: with ps; [
     ]; # missing inputs: pyirishrail
-    "islamic_prayer_times" = ps: with ps; [
-      prayer-times-calculator
+    "isal" = ps: with ps; [
+      isal
     ];
+    "islamic_prayer_times" = ps: with ps; [
+    ]; # missing inputs: prayer-times-calculator-offline
     "ismartwindow" = ps: with ps; [
     ];
     "iss" = ps: with ps; [
@@ -2460,9 +2206,6 @@
     ];
     "kegtron" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -2498,9 +2241,6 @@
     ];
     "keymitt_ble" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -2530,9 +2270,6 @@
       pykira
     ];
     "kitchen_sink" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -2544,9 +2281,6 @@
       pykmtronic
     ];
     "knx" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       home-assistant-frontend
       knx-frontend
@@ -2557,15 +2291,9 @@
       xknxproject
     ];
     "kodi" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pykodi
     ];
     "konnected" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       konnected
     ];
     "kostal_plenticore" = ps: with ps; [
@@ -2590,9 +2318,6 @@
     ]; # missing inputs: lacrosse-view
     "lamarzocco" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -2619,18 +2344,12 @@
       zeroconf
     ];
     "lametric" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       demetriek
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
     ];
     "landisgyr_heat_meter" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       pyserial
@@ -2656,9 +2375,6 @@
     ];
     "ld2410_ble" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -2686,9 +2402,6 @@
     ];
     "leaone" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -2715,9 +2428,6 @@
     ]; # missing inputs: leaone-ble
     "led_ble" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -2746,7 +2456,11 @@
     "legrand" = ps: with ps; [
     ];
     "lg_netcast" = ps: with ps; [
+      fnv-hash-fast
+      ifaddr
+      psutil-home-assistant
       pylgnetcast
+      sqlalchemy
     ];
     "lg_soundbar" = ps: with ps; [
       temescal
@@ -2757,9 +2471,6 @@
     "life360" = ps: with ps; [
     ];
     "lifx" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aiolifx
       aiolifx-effects
       aiolifx-themes
@@ -2807,9 +2518,6 @@
     "local_file" = ps: with ps; [
     ];
     "local_ip" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ifaddr
       psutil-home-assistant
@@ -2819,16 +2527,10 @@
       ical
     ];
     "locative" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "lock" = ps: with ps; [
     ];
     "logbook" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       home-assistant-frontend
       pillow
@@ -2840,9 +2542,6 @@
     "logger" = ps: with ps; [
     ];
     "logi_circle" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       ha-ffmpeg
       logi-circle
     ];
@@ -2854,9 +2553,6 @@
       aiolookin
     ];
     "loqed" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ha-ffmpeg
       hass-nabucasa
@@ -2871,9 +2567,6 @@
       webrtc-noise-gain
     ];
     "lovelace" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pillow
     ];
     "luci" = ps: with ps; [
@@ -2896,9 +2589,6 @@
     "lw12wifi" = ps: with ps; [
     ]; # missing inputs: lw12
     "lyric" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aiolyric
       fnv-hash-fast
       psutil-home-assistant
@@ -2907,28 +2597,16 @@
     "madeco" = ps: with ps; [
     ];
     "mailbox" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "mailgun" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pymailgunner
     ];
     "manual" = ps: with ps; [
     ];
     "manual_mqtt" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       paho-mqtt
     ];
     "map" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       home-assistant-frontend
       pillow
@@ -2949,9 +2627,6 @@
       pillow
     ];
     "matter" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       python-matter-server
@@ -2967,9 +2642,6 @@
     ];
     "medcom_ble" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -2995,20 +2667,11 @@
       zeroconf
     ]; # missing inputs: medcom-ble
     "media_extractor" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       yt-dlp
     ];
     "media_player" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "media_source" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "mediaroom" = ps: with ps; [
       pymediaroom
@@ -3020,9 +2683,6 @@
     ]; # missing inputs: py-melissa-climate
     "melnor" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -3048,9 +2708,6 @@
       zeroconf
     ]; # missing inputs: melnor-bluetooth
     "meraki" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "message_bird" = ps: with ps; [
       messagebird
@@ -3076,9 +2733,6 @@
     "mfi" = ps: with ps; [
     ]; # missing inputs: mficlient
     "microbees" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -3086,21 +2740,12 @@
     "microsoft" = ps: with ps; [
     ]; # missing inputs: pycsspeechtts
     "microsoft_face" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pyturbojpeg
     ];
     "microsoft_face_detect" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pyturbojpeg
     ];
     "microsoft_face_identify" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pyturbojpeg
     ];
     "mijndomein_energie" = ps: with ps; [
@@ -3124,9 +2769,6 @@
     ];
     "moat" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -3153,9 +2795,6 @@
       zeroconf
     ];
     "mobile_app" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ha-ffmpeg
       hass-nabucasa
@@ -3176,9 +2815,6 @@
       pymodbus
     ];
     "modem_callerid" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       phone-modem
       psutil-home-assistant
@@ -3197,13 +2833,16 @@
     ];
     "monoprice" = ps: with ps; [
     ]; # missing inputs: pymonoprice
+    "monzo" = ps: with ps; [
+      fnv-hash-fast
+      monzopy
+      psutil-home-assistant
+      sqlalchemy
+    ];
     "moon" = ps: with ps; [
     ];
     "mopeka" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -3230,9 +2869,6 @@
       zeroconf
     ];
     "motion_blinds" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ifaddr
       motionblinds
@@ -3241,9 +2877,6 @@
     ];
     "motionblinds_ble" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -3260,6 +2893,7 @@
       hassil
       home-assistant-intents
       ifaddr
+      motionblindsble
       mutagen
       psutil-home-assistant
       pyserial
@@ -3267,11 +2901,8 @@
       sqlalchemy
       webrtc-noise-gain
       zeroconf
-    ]; # missing inputs: motionblindsble
+    ];
     "motioneye" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       motioneye-client
     ];
     "motionmount" = ps: with ps; [
@@ -3281,33 +2912,18 @@
       mpd2
     ];
     "mqtt" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       paho-mqtt
     ];
     "mqtt_eventstream" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       paho-mqtt
     ];
     "mqtt_json" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       paho-mqtt
     ];
     "mqtt_room" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       paho-mqtt
     ];
     "mqtt_statestream" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       paho-mqtt
     ];
     "msteams" = ps: with ps; [
@@ -3323,9 +2939,6 @@
       pymvglive
     ];
     "my" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       home-assistant-frontend
       pillow
@@ -3335,25 +2948,16 @@
     "myq" = ps: with ps; [
     ];
     "mysensors" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       paho-mqtt
       pymysensors
     ];
     "mystrom" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       python-mystrom
     ];
     "mythicbeastsdns" = ps: with ps; [
       mbddns
     ];
     "myuplink" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       myuplink
       psutil-home-assistant
@@ -3372,9 +2976,6 @@
       aionanoleaf
     ];
     "neato" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       pybotvac
@@ -3387,9 +2988,6 @@
       nessclient
     ];
     "nest" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       google-nest-sdm
       ha-ffmpeg
@@ -3397,9 +2995,6 @@
       sqlalchemy
     ];
     "netatmo" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ha-ffmpeg
       hass-nabucasa
@@ -3423,14 +3018,8 @@
       eternalegypt
     ];
     "netio" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ]; # missing inputs: pynetio
     "network" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ifaddr
       psutil-home-assistant
@@ -3474,9 +3063,6 @@
       pycarwings2
     ];
     "nmap_tracker" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aiooui
       fnv-hash-fast
       getmac
@@ -3514,9 +3100,6 @@
       nuheat
     ];
     "nuki" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pynuki
     ];
     "numato" = ps: with ps; [
@@ -3530,7 +3113,8 @@
     ];
     "nws" = ps: with ps; [
       pynws
-    ];
+    ]
+    ++ pynws.optional-dependencies.retry;
     "nx584" = ps: with ps; [
       pynx584
     ];
@@ -3552,12 +3136,13 @@
       defusedxml
     ];
     "ollama" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
+      ha-ffmpeg
       hassil
       home-assistant-intents
-    ]; # missing inputs: ollama-hass
+      mutagen
+      ollama
+      webrtc-noise-gain
+    ];
     "ombi" = ps: with ps; [
       pyombi
     ];
@@ -3565,18 +3150,12 @@
       omnilogic
     ];
     "onboarding" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pillow
     ];
     "oncue" = ps: with ps; [
       aiooncue
     ];
     "ondilo_ico" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       ondilo
     ];
     "onewire" = ps: with ps; [
@@ -3594,12 +3173,13 @@
       open-meteo
     ];
     "openai_conversation" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
+      ha-ffmpeg
       hassil
       home-assistant-intents
+      mutagen
       openai
+      voluptuous-openapi
+      webrtc-noise-gain
     ];
     "openalpr_cloud" = ps: with ps; [
     ];
@@ -3633,15 +3213,12 @@
       pyopenuv
     ];
     "openweathermap" = ps: with ps; [
-      pyowm
+      pyopenweathermap
     ];
     "opnsense" = ps: with ps; [
       pyopnsense
     ];
     "opower" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       opower
       psutil-home-assistant
@@ -3651,9 +3228,6 @@
     ]; # missing inputs: pyoppleio-legacy
     "oralb" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -3691,9 +3265,6 @@
     "osramlightify" = ps: with ps; [
     ]; # missing inputs: lightify
     "otbr" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       bellows
       fnv-hash-fast
       ifaddr
@@ -3701,7 +3272,6 @@
       psutil-home-assistant
       pyroute2
       pyserial
-      pyserial-asyncio
       pyserial-asyncio-fast
       python-otbr-api
       pyudev
@@ -3727,9 +3297,6 @@
       ovoenergy
     ];
     "owntracks" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ha-ffmpeg
       hass-nabucasa
@@ -3757,9 +3324,6 @@
       pexpect
     ];
     "panel_custom" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       home-assistant-frontend
       pillow
@@ -3767,9 +3331,6 @@
       sqlalchemy
     ];
     "panel_iframe" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       home-assistant-frontend
       pillow
@@ -3796,9 +3357,6 @@
     "persistent_notification" = ps: with ps; [
     ];
     "person" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pillow
     ];
     "pge" = ps: with ps; [
@@ -3826,9 +3384,6 @@
     "pjlink" = ps: with ps; [
     ]; # missing inputs: pypjlink2
     "plaato" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ha-ffmpeg
       hass-nabucasa
@@ -3843,17 +3398,11 @@
       webrtc-noise-gain
     ];
     "plant" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
     ];
     "plex" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       plexapi
       plexauth
       plexwebsocket
@@ -3867,9 +3416,6 @@
       pycketcasts
     ];
     "point" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pypoint
     ];
     "poolsense" = ps: with ps; [
@@ -3882,9 +3428,6 @@
     ];
     "private_ble_device" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -3919,9 +3462,6 @@
     "proliphix" = ps: with ps; [
     ]; # missing inputs: proliphix
     "prometheus" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       prometheus-client
     ];
     "prosegur" = ps: with ps; [
@@ -3956,9 +3496,6 @@
       aiopurpleair
     ];
     "push" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "pushbullet" = ps: with ps; [
       pushbullet-py
@@ -3983,9 +3520,6 @@
     ]; # missing inputs: python-qbittorrent
     "qingping" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -4036,9 +3570,6 @@
       pyqwikswitch
     ];
     "rabbitair" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ifaddr
       psutil-home-assistant
@@ -4047,9 +3578,6 @@
       zeroconf
     ];
     "rachio" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ha-ffmpeg
       hass-nabucasa
@@ -4083,9 +3611,6 @@
       eagle100
     ];
     "rainforest_raven" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioraven
       fnv-hash-fast
       psutil-home-assistant
@@ -4100,9 +3625,6 @@
     ];
     "rapt_ble" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -4129,9 +3651,6 @@
       zeroconf
     ];
     "raspberry_pi" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       psutil-home-assistant
     ];
     "raspyrfm" = ps: with ps; [
@@ -4145,17 +3664,11 @@
       aiorecollect
     ];
     "recorder" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
     ];
     "recovery_mode" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ha-ffmpeg
       hass-nabucasa
@@ -4195,15 +3708,9 @@
       renson-endura-delta
     ];
     "reolink" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       reolink-aio
     ];
     "repairs" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "repetier" = ps: with ps; [
     ]; # missing inputs: pyrepetierng
@@ -4222,9 +3729,6 @@
       pyrfxtrx
     ];
     "rhasspy" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "ridwell" = ps: with ps; [
       aioridwell
@@ -4275,16 +3779,10 @@
       rpi-bad-power
     ];
     "rss_feed_template" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "rtorrent" = ps: with ps; [
     ];
     "rtsp_to_webrtc" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pyturbojpeg
       rtsp-to-webrtc
     ];
@@ -4296,9 +3794,6 @@
     "russound_rnet" = ps: with ps; [
     ]; # missing inputs: russound
     "ruuvi_gateway" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       bleak
       bleak-retry-connector
@@ -4315,9 +3810,6 @@
     ];
     "ruuvitag_ble" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -4344,7 +3836,8 @@
       zeroconf
     ];
     "rympro" = ps: with ps; [
-    ]; # missing inputs: pyrympro
+      pyrympro
+    ];
     "sabnzbd" = ps: with ps; [
       pysabnzbd
     ];
@@ -4354,9 +3847,6 @@
     "samsam" = ps: with ps; [
     ];
     "samsungtv" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       async-upnp-client
       fnv-hash-fast
       getmac
@@ -4370,6 +3860,9 @@
     ++ samsungctl.optional-dependencies.websocket
     ++ samsungtvws.optional-dependencies.async
     ++ samsungtvws.optional-dependencies.encrypted;
+    "sanix" = ps: with ps; [
+      sanix
+    ];
     "satel_integra" = ps: with ps; [
     ]; # missing inputs: satel-integra
     "scene" = ps: with ps; [
@@ -4399,10 +3892,8 @@
     "scsgate" = ps: with ps; [
     ]; # missing inputs: scsgate
     "search" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
+      pillow
       psutil-home-assistant
       sqlalchemy
     ];
@@ -4422,9 +3913,6 @@
     ];
     "sensirion_ble" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -4451,9 +3939,6 @@
       zeroconf
     ];
     "sensor" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -4462,9 +3947,6 @@
     ];
     "sensorpro" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -4492,9 +3974,6 @@
     ];
     "sensorpush" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -4524,16 +4003,13 @@
       sentry-sdk
     ];
     "senz" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aiosenz
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
     ];
     "serial" = ps: with ps; [
-      pyserial-asyncio
+      pyserial-asyncio-fast
     ];
     "serial_pm" = ps: with ps; [
       pmsensor
@@ -4555,9 +4031,6 @@
     "shell_command" = ps: with ps; [
     ];
     "shelly" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioshelly
       bleak
       bleak-retry-connector
@@ -4577,9 +4050,6 @@
       shodan
     ];
     "shopping_list" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "sia" = ps: with ps; [
       pysiaalarm
@@ -4632,18 +4102,12 @@
     "slide" = ps: with ps; [
     ]; # missing inputs: goslide-api
     "slimproto" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioslimproto
     ];
     "sma" = ps: with ps; [
       pysma
     ];
     "smappee" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pysmappee
     ];
     "smart_blinds" = ps: with ps; [
@@ -4656,9 +4120,6 @@
     "smarther" = ps: with ps; [
     ];
     "smartthings" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ha-ffmpeg
       hass-nabucasa
@@ -4690,9 +4151,6 @@
       snapcast
     ];
     "snips" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       paho-mqtt
     ];
     "snmp" = ps: with ps; [
@@ -4700,9 +4158,6 @@
     ];
     "snooz" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -4729,9 +4184,8 @@
       zeroconf
     ];
     "solaredge" = ps: with ps; [
-      solaredge
       stringcase
-    ];
+    ]; # missing inputs: aiosolaredge
     "solaredge_local" = ps: with ps; [
     ]; # missing inputs: solaredge-local
     "solarlog" = ps: with ps; [
@@ -4755,9 +4209,6 @@
       python-songpal
     ];
     "sonos" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       async-upnp-client
       fnv-hash-fast
       ifaddr
@@ -4778,9 +4229,6 @@
       libsoundtouch
     ];
     "spaceapi" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "spc" = ps: with ps; [
       pyspcwebgw
@@ -4794,9 +4242,6 @@
     "splunk" = ps: with ps; [
     ]; # missing inputs: hass-splunk
     "spotify" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       spotipy
@@ -4813,9 +4258,6 @@
       srpenergy
     ];
     "ssdp" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       async-upnp-client
       fnv-hash-fast
       ifaddr
@@ -4833,9 +4275,6 @@
       xmltodict
     ];
     "statistics" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -4847,9 +4286,6 @@
       steamodd
     ];
     "steamist" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aiosteamist
       discovery30303
       fnv-hash-fast
@@ -4866,9 +4302,6 @@
     "stookwijzer" = ps: with ps; [
     ]; # missing inputs: stookwijzer
     "stream" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       ha-av
       numpy
       pyturbojpeg
@@ -4877,9 +4310,6 @@
       streamlabswater
     ];
     "stt" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "subaru" = ps: with ps; [
       subarulink
@@ -4918,9 +4348,6 @@
     ];
     "switchbot" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -4966,9 +4393,6 @@
     "synology_chat" = ps: with ps; [
     ];
     "synology_dsm" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       py-synologydsm-api
     ];
     "synology_srm" = ps: with ps; [
@@ -4976,9 +4400,6 @@
     "syslog" = ps: with ps; [
     ];
     "system_bridge" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ifaddr
       psutil-home-assistant
@@ -4988,9 +4409,6 @@
       zeroconf
     ];
     "system_health" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "system_log" = ps: with ps; [
     ];
@@ -5020,9 +4438,6 @@
     "tapsaff" = ps: with ps; [
     ]; # missing inputs: tapsaff
     "tasmota" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       hatasmota
       paho-mqtt
     ];
@@ -5038,21 +4453,12 @@
       xmltodict
     ];
     "tedee" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pytedee-async
     ];
     "telegram" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       python-telegram-bot
     ]; # missing inputs: python-telegram-bot.optional-dependencies.socks
     "telegram_bot" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       python-telegram-bot
     ]; # missing inputs: python-telegram-bot.optional-dependencies.socks
     "tellduslive" = ps: with ps; [
@@ -5066,6 +4472,10 @@
       temperusb
     ];
     "template" = ps: with ps; [
+      fnv-hash-fast
+      pillow
+      psutil-home-assistant
+      sqlalchemy
     ];
     "tensorflow" = ps: with ps; [
       numpy
@@ -5087,9 +4497,6 @@
     ]; # missing inputs: pytfiac
     "thermobeacon" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -5119,9 +4526,6 @@
     ];
     "thermopro" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -5151,6 +4555,7 @@
       stringcase
     ]; # missing inputs: thermoworks-smoke
     "thethingsnetwork" = ps: with ps; [
+      ttn-client
     ];
     "thingspeak" = ps: with ps; [
     ]; # missing inputs: thingspeak
@@ -5159,9 +4564,6 @@
     "thomson" = ps: with ps; [
     ];
     "thread" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ifaddr
       psutil-home-assistant
@@ -5173,9 +4575,6 @@
     "threshold" = ps: with ps; [
     ];
     "tibber" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       pytibber
@@ -5188,9 +4587,6 @@
     ];
     "tilt_ble" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -5228,9 +4624,6 @@
     "tod" = ps: with ps; [
     ];
     "todo" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "todoist" = ps: with ps; [
       todoist-api-python
@@ -5244,9 +4637,6 @@
       pytomorrowio
     ];
     "toon" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ha-ffmpeg
       hass-nabucasa
@@ -5261,9 +4651,6 @@
       webrtc-noise-gain
     ];
     "torque" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "totalconnect" = ps: with ps; [
       total-connect-client
@@ -5271,9 +4658,6 @@
     "touchline" = ps: with ps; [
     ]; # missing inputs: pytouchline
     "tplink" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ifaddr
       psutil-home-assistant
@@ -5289,9 +4673,6 @@
     "tplink_tapo" = ps: with ps; [
     ];
     "traccar" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       pytraccar
       stringcase
     ];
@@ -5331,9 +4712,6 @@
       numpy
     ];
     "tts" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       ha-ffmpeg
       mutagen
     ];
@@ -5345,30 +4723,18 @@
       twentemilieu
     ];
     "twilio" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       twilio
     ];
     "twilio_call" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       twilio
     ];
     "twilio_sms" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       twilio
     ];
     "twinkly" = ps: with ps; [
       ttls
     ];
     "twitch" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -5400,10 +4766,7 @@
       unifiled
     ];
     "unifiprotect" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
-      pyunifiprotect
+      uiprotect
       unifi-discovery
     ];
     "universal" = ps: with ps; [
@@ -5420,9 +4783,6 @@
     "update" = ps: with ps; [
     ];
     "upnp" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       async-upnp-client
       fnv-hash-fast
       getmac
@@ -5438,9 +4798,6 @@
       pyuptimerobot
     ];
     "usb" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       pyserial
@@ -5470,9 +4827,6 @@
       vtjp
     ];
     "velbus" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       pyserial
@@ -5529,9 +4883,6 @@
     "voicerss" = ps: with ps; [
     ];
     "voip" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       ha-ffmpeg
       hassil
       home-assistant-intents
@@ -5585,14 +4936,12 @@
       pyweatherflowudp
     ];
     "weatherflow_cloud" = ps: with ps; [
-    ]; # missing inputs: weatherflow4py
+      weatherflow4py
+    ];
     "weatherkit" = ps: with ps; [
       apple-weatherkit
     ];
     "webhook" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
     ];
     "webmin" = ps: with ps; [
     ]; # missing inputs: webmin-xmlrpc
@@ -5600,9 +4949,6 @@
       aiowebostv
     ];
     "websocket_api" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -5627,9 +4973,6 @@
     "wirelesstag" = ps: with ps; [
     ]; # missing inputs: wirelesstagpy
     "withings" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aiowithings
       fnv-hash-fast
       ha-ffmpeg
@@ -5644,9 +4987,6 @@
       webrtc-noise-gain
     ];
     "wiz" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ifaddr
       psutil-home-assistant
@@ -5673,9 +5013,6 @@
     "wsdot" = ps: with ps; [
     ];
     "wyoming" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       ha-ffmpeg
       hassil
       home-assistant-intents
@@ -5686,9 +5023,6 @@
     "x10" = ps: with ps; [
     ];
     "xbox" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -5705,9 +5039,6 @@
     ];
     "xiaomi_ble" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -5754,9 +5085,6 @@
     ];
     "yalexs_ble" = ps: with ps; [
       aioesphomeapi
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aioruuvigateway
       aioshelly
       bleak
@@ -5786,9 +5114,6 @@
       rxv
     ];
     "yamaha_musiccast" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       aiomusiccast
       async-upnp-client
       fnv-hash-fast
@@ -5805,9 +5130,6 @@
       pyyardian
     ];
     "yeelight" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       async-upnp-client
       fnv-hash-fast
       ifaddr
@@ -5822,9 +5144,6 @@
       ha-ffmpeg
     ];
     "yolink" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -5834,9 +5153,6 @@
       youless-api
     ];
     "youtube" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       sqlalchemy
@@ -5852,9 +5168,6 @@
       bluepy
     ]; # missing inputs: zengge
     "zeroconf" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ifaddr
       psutil-home-assistant
@@ -5870,15 +5183,11 @@
     "zeversolar" = ps: with ps; [
     ]; # missing inputs: zeversolar
     "zha" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       bellows
       fnv-hash-fast
       pillow
       psutil-home-assistant
       pyserial
-      pyserial-asyncio
       pyserial-asyncio-fast
       pyudev
       sqlalchemy
@@ -5904,9 +5213,6 @@
       zm-py
     ];
     "zwave_js" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       psutil-home-assistant
       pyserial
@@ -5915,9 +5221,6 @@
       zwave-js-server-python
     ];
     "zwave_me" = ps: with ps; [
-      aiohttp-cors
-      aiohttp-fast-url-dispatcher
-      aiohttp-zlib-ng
       fnv-hash-fast
       ifaddr
       psutil-home-assistant
@@ -5956,7 +5259,7 @@
     "alert"
     "alexa"
     "amberelectric"
-    "ambiclimate"
+    "ambient_network"
     "ambient_station"
     "analytics"
     "analytics_insights"
@@ -6101,6 +5404,7 @@
     "emulated_roku"
     "energy"
     "energyzero"
+    "enigma2"
     "enocean"
     "enphase_envoy"
     "environment_canada"
@@ -6263,7 +5567,7 @@
     "ipma"
     "ipp"
     "iqvia"
-    "islamic_prayer_times"
+    "isal"
     "isy994"
     "izone"
     "jellyfin"
@@ -6293,6 +5597,7 @@
     "lcn"
     "ld2410_ble"
     "led_ble"
+    "lg_netcast"
     "lg_soundbar"
     "lidarr"
     "life360"
@@ -6355,9 +5660,11 @@
     "modem_callerid"
     "modern_forms"
     "mold_indicator"
+    "monzo"
     "moon"
     "mopeka"
     "motion_blinds"
+    "motionblinds_ble"
     "motioneye"
     "motionmount"
     "mqtt"
@@ -6406,6 +5713,7 @@
     "nx584"
     "obihai"
     "octoprint"
+    "ollama"
     "omnilogic"
     "onboarding"
     "oncue"
@@ -6513,8 +5821,10 @@
     "ruckus_unleashed"
     "ruuvi_gateway"
     "ruuvitag_ble"
+    "rympro"
     "sabnzbd"
     "samsungtv"
+    "sanix"
     "scene"
     "schedule"
     "schlage"
@@ -6556,12 +5866,12 @@
     "smartthings"
     "smarttub"
     "smhi"
+    "sms"
     "smtp"
     "snapcast"
     "snips"
     "snmp"
     "snooz"
-    "solaredge"
     "solarlog"
     "solax"
     "soma"
@@ -6626,6 +5936,7 @@
     "text"
     "thermobeacon"
     "thermopro"
+    "thethingsnetwork"
     "thread"
     "threshold"
     "tibber"
@@ -6707,6 +6018,7 @@
     "waze_travel_time"
     "weather"
     "weatherflow"
+    "weatherflow_cloud"
     "weatherkit"
     "webhook"
     "webostv"
diff --git a/pkgs/servers/home-assistant/custom-components/adaptive_lighting/default.nix b/pkgs/servers/home-assistant/custom-components/adaptive_lighting/default.nix
index 1d2ae2228a5b2..9c35395d3e98e 100644
--- a/pkgs/servers/home-assistant/custom-components/adaptive_lighting/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/adaptive_lighting/default.nix
@@ -7,13 +7,13 @@
 buildHomeAssistantComponent rec {
   owner = "basnijholt";
   domain = "adaptive_lighting";
-  version = "1.19.1";
+  version = "1.22.0";
 
   src = fetchFromGitHub {
     owner = "basnijholt";
     repo = "adaptive-lighting";
     rev = "refs/tags/${version}";
-    hash = "sha256-AZsloE1vNQ9o2pg878J6I5qYXyI4fqYEvr18SrTocWo=";
+    hash = "sha256-k5pCgPM5xjVfWjOcr0UDFzYl/8z7yUwgYdBmC3+2F5k=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/servers/home-assistant/custom-components/awtrix/default.nix b/pkgs/servers/home-assistant/custom-components/awtrix/default.nix
new file mode 100644
index 0000000000000..738dbbea5dbca
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-components/awtrix/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, fetchFromGitHub
+, buildHomeAssistantComponent
+, requests
+}:
+
+buildHomeAssistantComponent rec {
+  owner = "10der";
+  domain = "awtrix";
+  version = "unstable-2024-05-26";
+
+  src = fetchFromGitHub {
+    inherit owner;
+    repo = "homeassistant-custom_components-awtrix";
+    rev = "329d8eec28478574b9f34778f96b5768f30be2ab";
+    hash = "sha256-ucSaQWMS6ZwXHnw5Ct/STxpl1JjBRua3edrLvBAsdyw=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+  ];
+
+  meta = with lib; {
+    description = "Home-assistant integration for awtrix";
+    homepage = "https://github.com/10der/homeassistant-custom_components-awtrix";
+    maintainers = with maintainers; [ pinpox ];
+    license = licenses.mit;
+  };
+}
+
diff --git a/pkgs/servers/home-assistant/custom-components/default.nix b/pkgs/servers/home-assistant/custom-components/default.nix
index acfcf038f20ef..3a1184016f3ef 100644
--- a/pkgs/servers/home-assistant/custom-components/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/default.nix
@@ -6,6 +6,8 @@
 
   auth-header = callPackage ./auth-header {};
 
+  awtrix = callPackage ./awtrix {};
+
   better_thermostat = callPackage ./better_thermostat {};
 
   emporia_vue = callPackage ./emporia_vue {};
@@ -26,12 +28,16 @@
 
   localtuya = callPackage ./localtuya {};
 
+  midea_ac_lan = callPackage ./midea_ac_lan {};
+
   midea-air-appliances-lan = callPackage ./midea-air-appliances-lan {};
 
   miele = callPackage ./miele {};
 
   moonraker = callPackage ./moonraker {};
 
+  ntfy = callPackage ./ntfy {};
+
   omnik_inverter = callPackage ./omnik_inverter {};
 
   prometheus_sensor = callPackage ./prometheus_sensor {};
@@ -42,6 +48,10 @@
 
   smartthinq-sensors = callPackage ./smartthinq-sensors {};
 
+  spook = callPackage ./spook {};
+
+  tuya_local = callPackage ./tuya_local {};
+
   waste_collection_schedule = callPackage ./waste_collection_schedule {};
 
   xiaomi_gateway3 = callPackage ./xiaomi_gateway3 {};
diff --git a/pkgs/servers/home-assistant/custom-components/epex_spot/default.nix b/pkgs/servers/home-assistant/custom-components/epex_spot/default.nix
index e655a0d788d9d..85bef161595e0 100644
--- a/pkgs/servers/home-assistant/custom-components/epex_spot/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/epex_spot/default.nix
@@ -7,23 +7,19 @@
 buildHomeAssistantComponent rec {
   owner = "mampfes";
   domain = "epex_spot";
-  version = "2.3.5";
+  version = "2.3.7";
 
   src = fetchFromGitHub {
     owner = "mampfes";
     repo = "ha_epex_spot";
     rev = "refs/tags/${version}";
-    hash = "sha256-WmPsFfQm8ChEr41XVgKi2BGwta5aKH9GDz4iIfTAPK4=";
+    hash = "sha256-8cxEOCzlQbS3HbQMBo7/rZb/GfpJvOWayLttEaEENYs=";
   };
 
   propagatedBuildInputs = [
     beautifulsoup4
   ];
 
-  postPatch = ''
-    substituteInPlace custom_components/epex_spot/manifest.json --replace-fail 'bs4' 'beautifulsoup4'
-  '';
-
   #skip phases without activity
   dontConfigure = true;
   doCheck = false;
diff --git a/pkgs/servers/home-assistant/custom-components/homematicip_local/default.nix b/pkgs/servers/home-assistant/custom-components/homematicip_local/default.nix
index f6dcd994719b4..a317c83fddbaf 100644
--- a/pkgs/servers/home-assistant/custom-components/homematicip_local/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/homematicip_local/default.nix
@@ -7,13 +7,13 @@
 buildHomeAssistantComponent rec {
   owner = "danielperna84";
   domain = "homematicip_local";
-  version = "1.60.1";
+  version = "1.63.0";
 
   src = fetchFromGitHub {
     owner = "danielperna84";
     repo = "custom_homematic";
     rev = "refs/tags/${version}";
-    hash = "sha256-EJj9zmDdJ+T7yrANmRJuLRCSwvGLy2CkIBsO9H3LIs4=";
+    hash = "sha256-DK+zkNidHF/41qMQLxmYjgcybbC8fomfSmViL+pN/1Y=";
   };
 
   dependencies = [
diff --git a/pkgs/servers/home-assistant/custom-components/localtuya/default.nix b/pkgs/servers/home-assistant/custom-components/localtuya/default.nix
index 3e3c17a33cdfa..eb76a791b33a7 100644
--- a/pkgs/servers/home-assistant/custom-components/localtuya/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/localtuya/default.nix
@@ -17,7 +17,7 @@ buildHomeAssistantComponent rec {
 
   meta = with lib; {
     changelog = "https://github.com/rospogrigio/localtuya/releases/tag/${version}";
-    description = "A Home Assistant custom Integration for local handling of Tuya-based devices";
+    description = "Home Assistant custom Integration for local handling of Tuya-based devices";
     homepage = "https://github.com/rospogrigio/localtuya";
     maintainers = with maintainers; [ rhoriguchi ];
     license = licenses.gpl3Only;
diff --git a/pkgs/servers/home-assistant/custom-components/midea_ac_lan/default.nix b/pkgs/servers/home-assistant/custom-components/midea_ac_lan/default.nix
new file mode 100644
index 0000000000000..7123389e8bc19
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-components/midea_ac_lan/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildHomeAssistantComponent
+, fetchFromGitHub
+}:
+
+buildHomeAssistantComponent rec {
+  owner = "georgezhao2010";
+  domain = "midea_ac_lan";
+  version = "0.3.22";
+
+  src = fetchFromGitHub {
+    inherit owner;
+    repo = domain;
+    rev = "v${version}";
+    hash = "sha256-xTnbA4GztHOE61QObEJbzUSdbuSrhbcJ280DUDdM+n4=";
+  };
+
+  meta = with lib; {
+    description = "Auto-configure and then control your Midea M-Smart devices (Air conditioner, Fan, Water heater, Washer, etc) via local area network";
+    homepage = "https://github.com/georgezhao2010/midea_ac_lan/";
+    changelog = "https://github.com/georgezhao2010/midea_ac_lan/releases/tag/v${version}";
+    maintainers = with maintainers; [ k900 ];
+    license = licenses.mit;
+  };
+}
diff --git a/pkgs/servers/home-assistant/custom-components/miele/default.nix b/pkgs/servers/home-assistant/custom-components/miele/default.nix
index 3ebdc6283c035..408530620548d 100644
--- a/pkgs/servers/home-assistant/custom-components/miele/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/miele/default.nix
@@ -27,7 +27,7 @@ buildHomeAssistantComponent rec {
 
   meta = with lib; {
     changelog = "https://github.com/astrandb/miele/releases/tag/v${version}";
-    description = "A modern integration for Miele devices in Home Assistant";
+    description = "Modern integration for Miele devices in Home Assistant";
     homepage = "https://github.com/astrandb/miele";
     maintainers = with maintainers; [jamiemagee];
     license = licenses.mit;
diff --git a/pkgs/servers/home-assistant/custom-components/moonraker/default.nix b/pkgs/servers/home-assistant/custom-components/moonraker/default.nix
index efe0654d01cbe..a134f8ff4f140 100644
--- a/pkgs/servers/home-assistant/custom-components/moonraker/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/moonraker/default.nix
@@ -7,13 +7,13 @@
 buildHomeAssistantComponent rec {
   owner = "marcolivierarsenault";
   domain = "moonraker";
-  version = "1.2.0";
+  version = "1.2.1";
 
   src = fetchFromGitHub {
     owner = "marcolivierarsenault";
     repo = "moonraker-home-assistant";
     rev = "refs/tags/${version}";
-    hash = "sha256-oFHV9+5byWCOUxUhOvGHNilCZaoOp2xxb33nF8+CYjE=";
+    hash = "sha256-utxCHXVpP4FQT2poVuS4cMZGgn7yO89lUw5KhIHRXKQ=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/servers/home-assistant/custom-components/ntfy/default.nix b/pkgs/servers/home-assistant/custom-components/ntfy/default.nix
new file mode 100644
index 0000000000000..43920dbaef9e8
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-components/ntfy/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, fetchFromGitHub
+, buildHomeAssistantComponent
+, requests
+}:
+
+buildHomeAssistantComponent rec {
+  owner = "hbrennhaeuser";
+  domain = "ntfy";
+  version = "1.1.0-pre.2";
+
+  src = fetchFromGitHub {
+    inherit owner;
+    repo = "homeassistant_integration_ntfy";
+    rev = "v${version}";
+    hash = "sha256-OGCAJsAsnUjwaLR8lCBdU+ghVOGFF0mT73t5JtcngUA=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+  ];
+
+  meta = with lib; {
+    description = "Send notifications with ntfy.sh and selfhosted ntfy-servers";
+    homepage = "https://github.com/hbrennhaeuser/homeassistant_integration_ntfy";
+    maintainers = with maintainers; [ koral ];
+    license = licenses.gpl3;
+  };
+}
+
diff --git a/pkgs/servers/home-assistant/custom-components/omnik_inverter/default.nix b/pkgs/servers/home-assistant/custom-components/omnik_inverter/default.nix
index a0a33f644bac9..38dd56feb0000 100644
--- a/pkgs/servers/home-assistant/custom-components/omnik_inverter/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/omnik_inverter/default.nix
@@ -24,7 +24,7 @@ buildHomeAssistantComponent rec {
 
   meta = with lib; {
     changelog = "https://github.com/robbinjanssen/home-assistant-omnik-inverter/releases/tag/v${version}";
-    description = "The Omnik Inverter integration will scrape data from an Omnik inverter connected to your local network";
+    description = "Omnik Inverter integration will scrape data from an Omnik inverter connected to your local network";
     homepage = "https://github.com/robbinjanssen/home-assistant-omnik-inverter";
     maintainers = with maintainers; [ _9R ];
     license = licenses.mit;
diff --git a/pkgs/servers/home-assistant/custom-components/prometheus_sensor/default.nix b/pkgs/servers/home-assistant/custom-components/prometheus_sensor/default.nix
index 2368d85552b25..769e01bff5b2d 100644
--- a/pkgs/servers/home-assistant/custom-components/prometheus_sensor/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/prometheus_sensor/default.nix
@@ -6,13 +6,13 @@
 buildHomeAssistantComponent rec {
   owner = "mweinelt";
   domain = "prometheus_sensor";
-  version = "1.0.0";
+  version = "1.1.0";
 
   src = fetchFromGitHub {
     owner = "mweinelt";
     repo = "ha-prometheus-sensor";
     rev = "refs/tags/${version}";
-    hash = "sha256-10COLFXvmpm8ONLyx5c0yiQdtuP0SC2NKq/ZYHro9II=";
+    hash = "sha256-xfLAfTBgJjrRU1EFcbRvzUSq4m+dd6izaxP9DMisz/0=";
   };
 
   dontBuild = true;
diff --git a/pkgs/servers/home-assistant/custom-components/smartir/default.nix b/pkgs/servers/home-assistant/custom-components/smartir/default.nix
index 5dc9eb2473d72..876579639b647 100644
--- a/pkgs/servers/home-assistant/custom-components/smartir/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/smartir/default.nix
@@ -1,8 +1,11 @@
-{ lib
-, buildHomeAssistantComponent
-, fetchFromGitHub
-, aiofiles
-, broadlink
+{
+  lib,
+  buildHomeAssistantComponent,
+  fetchFromGitHub,
+  fetchpatch,
+  aiofiles,
+  broadlink,
+  nix-update-script,
 }:
 
 buildHomeAssistantComponent rec {
@@ -17,6 +20,15 @@ buildHomeAssistantComponent rec {
     hash = "sha256-E6TM761cuaeQzlbjA+oZ+wt5HTJAfkF2J3i4P1Wbuic=";
   };
 
+  patches = [
+    # Replace distutils.version.StrictVersion with packaging.version.Version
+    # https://github.com/smartHomeHub/SmartIR/pull/1250
+    (fetchpatch {
+      url = "https://github.com/smartHomeHub/SmartIR/commit/1ed8ef23a8f7b9dcae75721eeab8d5f79013b851.patch";
+      hash = "sha256-IhdnTDtUa7mS+Vw/+BqfqWIKK4hbshbVgJNjfKjgAvI=";
+    })
+  ];
+
   propagatedBuildInputs = [
     aiofiles
     broadlink
@@ -28,6 +40,8 @@ buildHomeAssistantComponent rec {
     cp -r codes $out/custom_components/smartir/
   '';
 
+  passthru.updateScript = nix-update-script { };
+
   meta = with lib; {
     changelog = "https://github.com/smartHomeHub/SmartIR/releases/tag/v${version}";
     description = "Integration for Home Assistant to control climate, TV and fan devices via IR/RF controllers (Broadlink, Xiaomi, MQTT, LOOKin, ESPHome)";
diff --git a/pkgs/servers/home-assistant/custom-components/smartthinq-sensors/default.nix b/pkgs/servers/home-assistant/custom-components/smartthinq-sensors/default.nix
index 3ebb482939dcb..4e118bb3e24e9 100644
--- a/pkgs/servers/home-assistant/custom-components/smartthinq-sensors/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/smartthinq-sensors/default.nix
@@ -9,13 +9,13 @@
 buildHomeAssistantComponent rec {
   owner = "ollo69";
   domain = "smartthinq_sensors";
-  version = "0.39.0";
+  version = "0.39.2";
 
   src = fetchFromGitHub {
     inherit owner;
     repo = "ha-smartthinq-sensors";
     rev = "v${version}";
-    hash = "sha256-mt5/XHDAUeoMUA1jWdCNXTUgZBQkqabL5Y4MxwxcweY=";
+    hash = "sha256-tLq4sqeKmjEDDaowA8ouH/mI7jQfq49kkt/a8+40rhQ=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/servers/home-assistant/custom-components/spook/default.nix b/pkgs/servers/home-assistant/custom-components/spook/default.nix
new file mode 100644
index 0000000000000..280f7b9491b2a
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-components/spook/default.nix
@@ -0,0 +1,38 @@
+{
+  lib,
+  buildHomeAssistantComponent,
+  fetchFromGitHub,
+  pillow,
+  fnv-hash-fast,
+  psutil-home-assistant,
+  sqlalchemy,
+}:
+buildHomeAssistantComponent rec {
+  owner = "frenck";
+  domain = "spook";
+  version = "3.0.1";
+
+  src = fetchFromGitHub {
+    inherit owner;
+    repo = domain;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-ChHsevryWuim8BEFqXVkCOW9fGMrt5vol+B2SreMUws=";
+  };
+
+  patches = [./remove-sub-integration-symlink-hack.patch];
+
+  dependencies = [
+    pillow
+    fnv-hash-fast
+    psutil-home-assistant
+    sqlalchemy
+  ];
+
+  meta = {
+    changelog = "https://github.com/frenck/spook/releases/tag/v${version}";
+    description = "Toolbox for Home Assistant";
+    homepage = "https://spook.boo/";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [kkoniuszy];
+  };
+}
diff --git a/pkgs/servers/home-assistant/custom-components/spook/remove-sub-integration-symlink-hack.patch b/pkgs/servers/home-assistant/custom-components/spook/remove-sub-integration-symlink-hack.patch
new file mode 100644
index 0000000000000..4756e4a2c389a
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-components/spook/remove-sub-integration-symlink-hack.patch
@@ -0,0 +1,109 @@
+diff --git a/custom_components/spook/__init__.py b/custom_components/spook/__init__.py
+index 213fb2c..c7dc299 100644
+--- a/custom_components/spook/__init__.py
++++ b/custom_components/spook/__init__.py
+@@ -23,8 +23,6 @@ from .templating import SpookTemplateFunctionManager
+ from .util import (
+     async_ensure_template_environments_exists,
+     async_forward_setup_entry,
+-    link_sub_integrations,
+-    unlink_sub_integrations,
+ )
+
+ if TYPE_CHECKING:
+@@ -34,48 +32,6 @@ if TYPE_CHECKING:
+
+ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
+     """Set up from a config entry."""
+-    # Symlink all sub integrations from Spook to the parent integrations folder
+-    # if one is missing, we have to restart Home Assistant.
+-    # This is a workaround for the fact that Home Assistant doesn't support
+-    # sub integrations.
+-    if await hass.async_add_executor_job(link_sub_integrations, hass):
+-        LOGGER.debug("Newly symlinked sub integrations, restarting Home Assistant")
+-
+-        @callback
+-        def _restart(_: Event | None = None) -> None:
+-            """Restart Home Assistant."""
+-            hass.data["homeassistant_stop"] = asyncio.create_task(
+-                hass.async_stop(RESTART_EXIT_CODE),
+-            )
+-
+-        # User asked to restart Home Assistant in the config flow.
+-        if hass.data.get(DOMAIN) == "Boo!":
+-            _restart()
+-            return False
+-
+-        # Should be OK to restart. Better to do it before anything else started.
+-        if hass.state == CoreState.starting:
+-            _restart()
+-            return False
+-
+-        # If all other fails, but we are not running yet... wait for it.
+-        if hass.state == CoreState.not_running:
+-            # Listen to both... just in case.
+-            hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, _restart)
+-            hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STARTED, _restart)
+-            return False
+-
+-        LOGGER.info(
+-            "Home Assistant needs to be restarted in for Spook to complete setting up",
+-        )
+-        ir.async_create_issue(
+-            hass=hass,
+-            domain=DOMAIN,
+-            issue_id="restart_required",
+-            is_fixable=True,
+-            severity=ir.IssueSeverity.WARNING,
+-            translation_key="restart_required",
+-        )
+
+     # Ensure template environments exists
+     async_ensure_template_environments_exists(hass)
+@@ -120,4 +76,3 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
+
+ async def async_remove_entry(hass: HomeAssistant, _: ConfigEntry) -> None:
+     """Remove a config entry."""
+-    await hass.async_add_executor_job(unlink_sub_integrations, hass)
+diff --git a/custom_components/spook/util.py b/custom_components/spook/util.py
+index 32e9bd2..845d463 100644
+--- a/custom_components/spook/util.py
++++ b/custom_components/spook/util.py
+@@ -104,37 +104,6 @@ async def async_forward_platform_entry_setups_to_ectoplasm(
+     )
+
+
+-def link_sub_integrations(hass: HomeAssistant) -> bool:
+-    """Link Spook sub integrations."""
+-    LOGGER.debug("Linking up Spook sub integrations")
+-
+-    changes = False
+-    for manifest in Path(__file__).parent.rglob("integrations/*/manifest.json"):
+-        LOGGER.debug("Linking Spook sub integration: %s", manifest.parent.name)
+-        dest = Path(hass.config.config_dir) / "custom_components" / manifest.parent.name
+-        if not dest.exists():
+-            src = (
+-                Path(hass.config.config_dir)
+-                / "custom_components"
+-                / DOMAIN
+-                / "integrations"
+-                / manifest.parent.name
+-            )
+-            dest.symlink_to(src)
+-            changes = True
+-    return changes
+-
+-
+-def unlink_sub_integrations(hass: HomeAssistant) -> None:
+-    """Unlink Spook sub integrations."""
+-    LOGGER.debug("Unlinking Spook sub integrations")
+-    for manifest in Path(__file__).parent.rglob("integrations/*/manifest.json"):
+-        LOGGER.debug("Unlinking Spook sub integration: %s", manifest.parent.name)
+-        dest = Path(hass.config.config_dir) / "custom_components" / manifest.parent.name
+-        if dest.exists():
+-            dest.unlink()
+-
+-
+ @callback
+ def async_ensure_template_environments_exists(hass: HomeAssistant) -> None:
+     """Ensure default template environments exist.
diff --git a/pkgs/servers/home-assistant/custom-components/tuya_local/default.nix b/pkgs/servers/home-assistant/custom-components/tuya_local/default.nix
new file mode 100644
index 0000000000000..7d72209c57b0a
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-components/tuya_local/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildHomeAssistantComponent
+, fetchFromGitHub
+
+# dependencies
+, tinytuya
+, tuya-device-sharing-sdk
+}:
+
+buildHomeAssistantComponent rec {
+  owner = "make-all";
+  domain = "tuya_local";
+  version = "2024.6.0";
+
+  src = fetchFromGitHub {
+    inherit owner;
+    repo = "tuya-local";
+    rev = "refs/tags/${version}";
+    hash = "sha256-OLR/KFoXKqL7r7S97VpyoVHdbLfOyWU50aK6c0QhqyE=";
+  };
+
+  dependencies = [
+    tinytuya
+    tuya-device-sharing-sdk
+  ];
+
+  meta = with lib; {
+    description = "Local support for Tuya devices in Home Assistant";
+    homepage = "https://github.com/make-all/tuya-local";
+    changelog = "https://github.com/make-all/tuya-local/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pathob ];
+  };
+}
diff --git a/pkgs/servers/home-assistant/custom-components/waste_collection_schedule/default.nix b/pkgs/servers/home-assistant/custom-components/waste_collection_schedule/default.nix
index 513d593ce51d3..cdbd2c2067bfb 100644
--- a/pkgs/servers/home-assistant/custom-components/waste_collection_schedule/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/waste_collection_schedule/default.nix
@@ -1,7 +1,6 @@
 { lib
 , buildHomeAssistantComponent
 , fetchFromGitHub
-, fetchpatch
 , beautifulsoup4
 , icalendar
 , icalevents
@@ -12,23 +11,15 @@
 buildHomeAssistantComponent rec {
   owner = "mampfes";
   domain = "waste_collection_schedule";
-  version = "1.44.0";
+  version = "1.48.0";
 
   src = fetchFromGitHub {
     inherit owner;
     repo = "hacs_${domain}";
     rev = "refs/tags/${version}";
-    hash = "sha256-G1x7HtgdtK+IaPAfxT+7xsDJi5FnXN4Pg3q7T5Xr8lA=";
+    hash = "sha256-4JtPhErAqHO06c8tEmwmWsot1Kz1wz2QuiUGdrgU8II=";
   };
 
-  patches = [
-    # Corrects a dependency on beautifulsoup4
-    (fetchpatch {
-      url = "https://github.com/mampfes/hacs_waste_collection_schedule/pull/1515.patch";
-      hash = "sha256-dvmicKTjolEcCrKRtZfpN0M/9RQCEQkFk+M6E+qCqfQ=";
-    })
-  ];
-
   propagatedBuildInputs = [
     beautifulsoup4
     icalendar
diff --git a/pkgs/servers/home-assistant/custom-components/xiaomi_gateway3/default.nix b/pkgs/servers/home-assistant/custom-components/xiaomi_gateway3/default.nix
index fd453e0d321c0..40899c8926ea9 100644
--- a/pkgs/servers/home-assistant/custom-components/xiaomi_gateway3/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/xiaomi_gateway3/default.nix
@@ -1,27 +1,29 @@
-{ lib
-, buildHomeAssistantComponent
-, fetchFromGitHub
-, zigpy
+{
+  lib,
+  buildHomeAssistantComponent,
+  fetchFromGitHub,
+  zigpy,
+  nix-update-script,
 }:
 
 buildHomeAssistantComponent rec {
   owner = "AlexxIT";
   domain = "xiaomi_gateway3";
-  version = "4.0.3";
+  version = "4.0.5";
 
   src = fetchFromGitHub {
     owner = "AlexxIT";
     repo = "XiaomiGateway3";
     rev = "v${version}";
-    hash = "sha256-YGaVQaz3A0yM8AIC02CvMKWMJ3tW3OADYgKY8ViIt5U=";
+    hash = "sha256-C8aY23e6iWANbhCRQYNHx+3fomVO+7qdxj+qfv+K3JM=";
   };
 
-  propagatedBuildInputs = [
-    zigpy
-  ];
+  propagatedBuildInputs = [ zigpy ];
 
   dontBuild = true;
 
+  passthru.updateScript = nix-update-script { };
+
   meta = with lib; {
     changelog = "https://github.com/AlexxIT/XiaomiGateway3/releases/tag/v{version}";
     description = "Home Assistant custom component for control Xiaomi Multimode Gateway (aka Gateway 3), Xiaomi Multimode Gateway 2, Aqara Hub E1 on default firmwares over LAN";
diff --git a/pkgs/servers/home-assistant/custom-components/xiaomi_miot/default.nix b/pkgs/servers/home-assistant/custom-components/xiaomi_miot/default.nix
index 0c64655d76df5..83f03c7a9cb32 100644
--- a/pkgs/servers/home-assistant/custom-components/xiaomi_miot/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/xiaomi_miot/default.nix
@@ -1,22 +1,24 @@
-{ lib
-, buildHomeAssistantComponent
-, fetchFromGitHub
-, hap-python
-, micloud
-, pyqrcode
-, python-miio
+{
+  lib,
+  buildHomeAssistantComponent,
+  fetchFromGitHub,
+  hap-python,
+  micloud,
+  pyqrcode,
+  python-miio,
+  nix-update-script,
 }:
 
 buildHomeAssistantComponent rec {
   owner = "al-one";
   domain = "xiaomi_miot";
-  version = "0.7.17";
+  version = "0.7.18";
 
   src = fetchFromGitHub {
     owner = "al-one";
     repo = "hass-xiaomi-miot";
     rev = "v${version}";
-    hash = "sha256-IpL4e2mKCdtNu8NtI+xpx4FPW/uj1M5Rk6DswXmSJBk=";
+    hash = "sha256-/Zn2jEjwkCHiz48nVjKEPcCpPVajLaZ81DCTNpx1vbk=";
   };
 
   propagatedBuildInputs = [
@@ -28,9 +30,11 @@ buildHomeAssistantComponent rec {
 
   dontBuild = true;
 
+  passthru.updateScript = nix-update-script { };
+
   meta = with lib; {
     changelog = "https://github.com/al-one/hass-xiaomi-miot/releases/tag/${version}";
-    description = "Automatic integrate all Xiaomi devices to HomeAssistant via miot-spec, support Wi-Fi, BLE, ZigBee devices.";
+    description = "Automatic integrate all Xiaomi devices to HomeAssistant via miot-spec, support Wi-Fi, BLE, ZigBee devices";
     homepage = "https://github.com/al-one/hass-xiaomi-miot";
     maintainers = with maintainers; [ azuwis ];
     license = licenses.asl20;
diff --git a/pkgs/servers/home-assistant/custom-components/yassi/default.nix b/pkgs/servers/home-assistant/custom-components/yassi/default.nix
index 266d926b086b7..39d8cd5145b52 100644
--- a/pkgs/servers/home-assistant/custom-components/yassi/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/yassi/default.nix
@@ -7,19 +7,19 @@
 buildHomeAssistantComponent rec {
   owner = "samuelspagl";
   domain = "samsung_soundbar";
-  version = "0.4.0b2";
+  version = "0.4.0";
 
   src = fetchFromGitHub {
     inherit owner;
     repo = "ha_samsung_soundbar";
     rev = version;
-    hash = "sha256-htAUCQe8mpk+GFwxXkPVnWS0m3mZd2hUt+f4qES+W4U=";
+    hash = "sha256-pkwkXI05zDMEXPoE90YJBxoPYlzmSHH/BLExq0J1JrQ=";
   };
 
   propagatedBuildInputs = [ pysmartthings ];
 
   meta = with lib; {
-    description = "A HomeAssistant integration for Samsung Soundbars";
+    description = "HomeAssistant integration for Samsung Soundbars";
     homepage = "https://ha-samsung-soundbar.vercel.app/";
     changelog = "https://github.com/samuelspagl/ha_samsung_soundbar/releases/tag/${version}";
     maintainers = with maintainers; [ k900 ];
diff --git a/pkgs/servers/home-assistant/custom-lovelace-modules/android-tv-card/default.nix b/pkgs/servers/home-assistant/custom-lovelace-modules/android-tv-card/default.nix
new file mode 100644
index 0000000000000..9398e57486f99
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-lovelace-modules/android-tv-card/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "android-tv-card";
+  version = "3.8.1";
+
+  src = fetchFromGitHub {
+    owner = "Nerwyn";
+    repo = "android-tv-card";
+    rev = version;
+    hash = "sha256-ARFJJ119zJzjW0d59JFARMcjVAJ2IFDkShIN43d1adI=";
+  };
+
+  patches = [ ./dont-call-git.patch ];
+
+  npmDepsHash = "sha256-t/kZTcXs3IpbrEfnmYQlJqhM8F3mO4prbQNnKtFqsDM=";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    cp dist/android-tv-card.min.js $out
+
+    runHook postInstall
+  '';
+
+  passthru.entrypoint = "android-tv-card.min.js";
+
+  meta = with lib; {
+    description = "Universal Customizable TV Remote Card, with HA actions, super configurable touchpad, slider, haptics, and keyboard";
+    homepage = "https://github.com/Nerwyn/android-tv-card";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ k900 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/servers/home-assistant/custom-lovelace-modules/android-tv-card/dont-call-git.patch b/pkgs/servers/home-assistant/custom-lovelace-modules/android-tv-card/dont-call-git.patch
new file mode 100644
index 0000000000000..ad409a30dc261
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-lovelace-modules/android-tv-card/dont-call-git.patch
@@ -0,0 +1,17 @@
+diff --git a/webpack.config.js b/webpack.config.js
+index 469ffe1..3233c4b 100644
+--- a/webpack.config.js
++++ b/webpack.config.js
+@@ -1,11 +1,7 @@
+ const path = require('path');
+ const { execSync } = require('child_process');
+ 
+-let env =
+-	execSync('git branch --show-current').toString().trim() == 'main'
+-		? 'production'
+-		: 'development';
+-env = 'production';
++let env = 'production';
+ 
+ module.exports = {
+ 	mode: env,
diff --git a/pkgs/servers/home-assistant/custom-lovelace-modules/button-card/default.nix b/pkgs/servers/home-assistant/custom-lovelace-modules/button-card/default.nix
new file mode 100644
index 0000000000000..d6ec293f31de2
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-lovelace-modules/button-card/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, mkYarnPackage
+, fetchYarnDeps
+, fetchFromGitHub
+}:
+
+mkYarnPackage rec {
+  pname = "button-card";
+  version = "4.1.2";
+
+  src = fetchFromGitHub {
+    owner = "custom-cards";
+    repo = "button-card";
+    rev = "v${version}";
+    hash = "sha256-Ntg1sNgAehcL2fT0rP0YHzV5q6rB5p1TyFXtbZyB3Vo=";
+  };
+
+  packageJSON = ./package.json;
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = src + "/yarn.lock";
+    hash = "sha256-OFnsRR9zA9D22xBdh4XfLueGVA2ERXmGEp54x0OFDFY=";
+  };
+
+  buildPhase = ''
+    runHook preBuild
+
+    yarn build
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    cp ./deps/button-card/dist/button-card.js $out
+
+    runHook postInstall
+  '';
+
+  doDist = false;
+
+  meta = with lib; {
+    description = "Lovelace button-card for home assistant";
+    homepage = "https://github.com/custom-cards/button-card";
+    changelog = "https://github.com/custom-cards/button-card/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ k900 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/servers/home-assistant/custom-lovelace-modules/button-card/package.json b/pkgs/servers/home-assistant/custom-lovelace-modules/button-card/package.json
new file mode 100644
index 0000000000000..55bf125124708
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-lovelace-modules/button-card/package.json
@@ -0,0 +1,78 @@
+{
+  "name": "button-card",
+  "version": "4.1.2",
+  "description": "Button card for lovelace",
+  "main": "dist/button-card.js",
+  "scripts": {
+    "build": "npm run lint && npm run rollup",
+    "rollup": "rollup -c",
+    "babel": "babel dist/button-card.js --out-file dist/button-card.js",
+    "lint": "eslint src/*.ts",
+    "watch": "rollup -c --watch",
+    "postversion": "npm run build",
+    "audit-fix": "npx yarn-audit-fix"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/custom-cards/button-card.git"
+  },
+  "keywords": [
+    "lovelace"
+  ],
+  "author": "kuuji",
+  "contributors": [
+    "Ian Richardson (https://github.com/iantrich)",
+    "Jérôme Wiedemann (https://github.com/RomRider)"
+  ],
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/custom-cards/button-card/issues"
+  },
+  "homepage": "https://github.com/custom-cards/button-card#readme",
+  "devDependencies": {
+    "@babel/core": "^7.12.3",
+    "@babel/plugin-proposal-class-properties": "^7.12.1",
+    "@babel/plugin-proposal-decorators": "^7.12.1",
+    "@rollup/plugin-babel": "^5.2.1",
+    "@rollup/plugin-commonjs": "^16.0.0",
+    "@rollup/plugin-json": "^4.0.2",
+    "@rollup/plugin-node-resolve": "^10.0.0",
+    "@semantic-release/changelog": "^5.0.1",
+    "@semantic-release/commit-analyzer": "^8.0.1",
+    "@semantic-release/exec": "^5.0.0",
+    "@semantic-release/git": "^9.0.0",
+    "@semantic-release/npm": "^7.0.10",
+    "@semantic-release/release-notes-generator": "^9.0.1",
+    "@typescript-eslint/eslint-plugin": "^6.1.0",
+    "@typescript-eslint/parser": "^6.1.0",
+    "conventional-changelog-conventionalcommits": "^4.5.0",
+    "eslint": "7.12.1",
+    "eslint-config-airbnb-base": "^14.1.0",
+    "eslint-config-prettier": "^6.15.0",
+    "eslint-plugin-import": "^2.22.1",
+    "eslint-plugin-prettier": "^3.1.2",
+    "npm": "^6.14.3",
+    "prettier": "^2.1.2",
+    "prettier-eslint": "^11.0.0",
+    "rollup": "^2.33.1",
+    "rollup-plugin-cleanup": "^3.2.1",
+    "rollup-plugin-serve": "^1.1.0",
+    "rollup-plugin-terser": "^7.0.2",
+    "rollup-plugin-typescript2": "^0.29.0",
+    "semantic-release": "^17.3.8",
+    "ts-lit-plugin": "^1.1.10",
+    "typescript": "^4.0.5",
+    "typescript-styled-plugin": "^0.15.0",
+    "yarn-audit-fix": "^9.3.10"
+  },
+  "dependencies": {
+    "@ctrl/tinycolor": "^3.1.6",
+    "@material/mwc-ripple": "^0.19.1",
+    "fast-copy": "^2.1.0",
+    "home-assistant-js-websocket": "^8.2.0",
+    "lit": "^2.7.6",
+    "lit-element": "^3.3.2",
+    "lit-html": "^2.7.5",
+    "memoize-one": "^6.0.0"
+  }
+}
diff --git a/pkgs/servers/home-assistant/custom-lovelace-modules/card-mod/default.nix b/pkgs/servers/home-assistant/custom-lovelace-modules/card-mod/default.nix
new file mode 100644
index 0000000000000..bdca8771d00f0
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-lovelace-modules/card-mod/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "lovelace-card-mod";
+  version = "3.4.3";
+
+  src = fetchFromGitHub {
+    owner = "thomasloven";
+    repo = "lovelace-card-mod";
+    rev = "v${version}";
+    hash = "sha256-LFKOTu0SBeHpf8Hjvsgc/xOUux9d4lBCshdD9u7eO5o=";
+  };
+
+  npmDepsHash = "sha256-JJexFmVbDHi2JCiCpcDupzVf0xfwy+vqWILq/dLVcBo=";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    cp card-mod.js $out
+
+    runHook postInstall
+  '';
+
+  passthru.entrypoint = "card-mod.js";
+
+  meta = with lib; {
+    description = "Add CSS styles to (almost) any lovelace card";
+    homepage = "https://github.com/thomasloven/lovelace-card-mod";
+    license = licenses.mit;
+    maintainers = with maintainers; [ k900 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/servers/home-assistant/custom-lovelace-modules/decluttering-card/default.nix b/pkgs/servers/home-assistant/custom-lovelace-modules/decluttering-card/default.nix
new file mode 100644
index 0000000000000..44a83e71e5505
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-lovelace-modules/decluttering-card/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "decluttering-card";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "custom-cards";
+    repo = "decluttering-card";
+    rev = "v${version}";
+    hash = "sha256-8pf7G6RbLdpIdXYz801+wwAc3NcNs8l0x4fSGqlAmG0=";
+  };
+
+  npmDepsHash = "sha256-9tmEfKo8n2LR+r40hEqOfn7w6/P29XQ+KZSHL97wUuY=";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    cp dist/decluttering-card.js $out
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Declutter your lovelace configuration with the help of this card";
+    homepage = "https://github.com/custom-cards/decluttering-card";
+    changelog = "https://github.com/custom-cards/decluttering-card/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ k900 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/servers/home-assistant/custom-lovelace-modules/default.nix b/pkgs/servers/home-assistant/custom-lovelace-modules/default.nix
index f7dbc32c8e935..d2b16943a59ab 100644
--- a/pkgs/servers/home-assistant/custom-lovelace-modules/default.nix
+++ b/pkgs/servers/home-assistant/custom-lovelace-modules/default.nix
@@ -2,6 +2,16 @@
 }:
 
 {
+  android-tv-card = callPackage ./android-tv-card { };
+
+  button-card = callPackage ./button-card { };
+
+  card-mod = callPackage ./card-mod { };
+
+  decluttering-card = callPackage ./decluttering-card { };
+
+  lg-webos-remote-control = callPackage ./lg-webos-remote-control { };
+
   light-entity-card = callPackage ./light-entity-card { };
 
   mini-graph-card = callPackage ./mini-graph-card {};
@@ -12,5 +22,7 @@
 
   mushroom = callPackage ./mushroom { };
 
+  valetudo-map-card = callPackage ./valetudo-map-card { };
+
   zigbee2mqtt-networkmap = callPackage ./zigbee2mqtt-networkmap { };
 }
diff --git a/pkgs/servers/home-assistant/custom-lovelace-modules/lg-webos-remote-control/default.nix b/pkgs/servers/home-assistant/custom-lovelace-modules/lg-webos-remote-control/default.nix
new file mode 100644
index 0000000000000..9911fbfdce1ad
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-lovelace-modules/lg-webos-remote-control/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "lg-webos-remote-control";
+  version = "2.0.3";
+
+  src = fetchFromGitHub {
+    owner = "madmicio";
+    repo = "LG-WebOS-Remote-Control";
+    rev = version;
+    hash = "sha256-ICOAi8q8dWrBFCv18JYSWc6MIwqxfDXOcc6kCKLGehs=";
+  };
+
+  npmDepsHash = "sha256-kN+i0ic1JWs6kqnAliiO4yVMDXwfZaQsRGKeV9A0MxE=";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    cp dist/lg-remote-control.js $out
+
+    runHook postInstall
+  '';
+
+  passthru.entrypoint = "lg-remote-control.js";
+
+  meta = with lib; {
+    description = "Remote Control for LG TV WebOS";
+    homepage = "https://github.com/madmicio/LG-WebOS-Remote-Control";
+    license = licenses.mit;
+    maintainers = with maintainers; [ k900 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/servers/home-assistant/custom-lovelace-modules/mushroom/default.nix b/pkgs/servers/home-assistant/custom-lovelace-modules/mushroom/default.nix
index 4b529d6e4016f..6ac81c919b2ff 100644
--- a/pkgs/servers/home-assistant/custom-lovelace-modules/mushroom/default.nix
+++ b/pkgs/servers/home-assistant/custom-lovelace-modules/mushroom/default.nix
@@ -5,16 +5,16 @@
 
 buildNpmPackage rec {
   pname = "mushroom";
-  version = "3.5.4";
+  version = "3.6.2";
 
   src = fetchFromGitHub {
     owner = "piitaya";
     repo = "lovelace-mushroom";
     rev = "v${version}";
-    hash = "sha256-ppEXgVrB7C5ZrNmYyXdrnQMbTNU5rTGherNlimMqImM=";
+    hash = "sha256-sH0Qgiv4VeWwWV3RFnp2M4RH79S+PR8Z2nhPtQp0EnY=";
   };
 
-  npmDepsHash = "sha256-4B295Wc4tj+Rhse4521sCGNv/WMrNImxZwtTFkFp14c=";
+  npmDepsHash = "sha256-L7r417eCfelQM6ZxxJvkZdGBhPmcM2mSHvLa8RN0D8k=";
 
   installPhase = ''
     runHook preInstall
diff --git a/pkgs/servers/home-assistant/custom-lovelace-modules/valetudo-map-card/default.nix b/pkgs/servers/home-assistant/custom-lovelace-modules/valetudo-map-card/default.nix
new file mode 100644
index 0000000000000..3203c59e7cd9f
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-lovelace-modules/valetudo-map-card/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "lovelace-valetudo-map-card";
+  version = "2023.04.0";
+
+  src = fetchFromGitHub {
+    owner = "Hypfer";
+    repo = "lovelace-valetudo-map-card";
+    rev = "v${version}";
+    hash = "sha256-owOIbA1tRlnbWJ/p/wAUpeDnz/Wzu+GmUammJ6VFxHc=";
+  };
+
+  patches = [ ./remove-git-dependency.patch ];
+
+  npmDepsHash = "sha256-xHHbOt9HW+zJAhHEDy2V5eYyLv4e3OrUbnzqeJasSng=";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    cp dist/valetudo-map-card.js $out
+
+    runHook postInstall
+  '';
+
+  passthru.entrypoint = "valetudo-map-card.js";
+
+  meta = with lib; {
+    description = "Display the map from a valetudo-enabled robot in a home assistant dashboard card";
+    homepage = "https://github.com/Hypfer/lovelace-valetudo-map-card";
+    license = licenses.mit;
+    maintainers = with maintainers; [ k900 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/servers/home-assistant/custom-lovelace-modules/valetudo-map-card/remove-git-dependency.patch b/pkgs/servers/home-assistant/custom-lovelace-modules/valetudo-map-card/remove-git-dependency.patch
new file mode 100644
index 0000000000000..bedf4af3ac29a
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-lovelace-modules/valetudo-map-card/remove-git-dependency.patch
@@ -0,0 +1,64 @@
+diff --git a/package-lock.json b/package-lock.json
+index cce05ba..36020f8 100644
+--- a/package-lock.json
++++ b/package-lock.json
+@@ -1,12 +1,12 @@
+ {
+   "name": "lovelace-valetudo-map-card",
+-  "version": "2022.08.0",
++  "version": "2023.04.0",
+   "lockfileVersion": 2,
+   "requires": true,
+   "packages": {
+     "": {
+       "name": "lovelace-valetudo-map-card",
+-      "version": "2022.08.0",
++      "version": "2023.04.0",
+       "license": "MIT",
+       "dependencies": {
+         "custom-card-helpers": "1.9.0"
+@@ -21,7 +21,6 @@
+         "eslint-plugin-jsdoc": "39.3.0",
+         "eslint-plugin-regexp": "1.7.0",
+         "eslint-plugin-sort-keys-fix": "1.1.2",
+-        "eslint-plugin-sort-requires": "git+https://npm@github.com/Hypfer/eslint-plugin-sort-requires.git#2.1.1",
+         "pako": "2.0.4",
+         "rollup": "2.58.0",
+         "rollup-plugin-babel": "4.4.0",
+@@ -1596,12 +1595,6 @@
+         "node": ">=6.0.0"
+       }
+     },
+-    "node_modules/eslint-plugin-sort-requires": {
+-      "version": "2.1.0",
+-      "resolved": "git+https://npm@github.com/Hypfer/eslint-plugin-sort-requires.git#3e216dd9e9589b87671a3e7bf4084a0bd96e920e",
+-      "dev": true,
+-      "license": "MIT"
+-    },
+     "node_modules/eslint-scope": {
+       "version": "7.1.1",
+       "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+@@ -4358,11 +4351,6 @@
+         }
+       }
+     },
+-    "eslint-plugin-sort-requires": {
+-      "version": "git+https://npm@github.com/Hypfer/eslint-plugin-sort-requires.git#3e216dd9e9589b87671a3e7bf4084a0bd96e920e",
+-      "dev": true,
+-      "from": "eslint-plugin-sort-requires@git+https://npm@github.com/Hypfer/eslint-plugin-sort-requires.git#2.1.1"
+-    },
+     "eslint-scope": {
+       "version": "7.1.1",
+       "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+diff --git a/package.json b/package.json
+index 85a9d35..d8c6865 100644
+--- a/package.json
++++ b/package.json
+@@ -23,7 +23,6 @@
+     "eslint-plugin-jsdoc": "39.3.0",
+     "eslint-plugin-regexp": "1.7.0",
+     "eslint-plugin-sort-keys-fix": "1.1.2",
+-    "eslint-plugin-sort-requires": "git+https://npm@github.com/Hypfer/eslint-plugin-sort-requires.git#2.1.1",
+     "@typescript-eslint/eslint-plugin": "5.25.0",
+     "@typescript-eslint/experimental-utils": "5.25.0",
+     "@typescript-eslint/parser": "5.25.0",
diff --git a/pkgs/servers/home-assistant/custom-lovelace-modules/zigbee2mqtt-networkmap/default.nix b/pkgs/servers/home-assistant/custom-lovelace-modules/zigbee2mqtt-networkmap/default.nix
index f8e75ede01568..8de17253e0004 100644
--- a/pkgs/servers/home-assistant/custom-lovelace-modules/zigbee2mqtt-networkmap/default.nix
+++ b/pkgs/servers/home-assistant/custom-lovelace-modules/zigbee2mqtt-networkmap/default.nix
@@ -1,25 +1,26 @@
-{ lib
-, fetchFromGitHub
-, fetchYarnDeps
-, mkYarnPackage
+{
+  lib,
+  fetchFromGitHub,
+  fetchYarnDeps,
+  mkYarnPackage,
 }:
 
 mkYarnPackage rec {
   pname = "zigbee2mqtt-networkmap";
-  version = "unstable-2023-12-16";
+  version = "0.9.0";
 
   src = fetchFromGitHub {
     owner = "azuwis";
     repo = "zigbee2mqtt-networkmap";
-    rev = "7851357d78ebc0d1cc3cb5c661267a1e8b4c09e3";
-    hash = "sha256-x7RVy0stWT6+8f0/0VORVBgGpBbsbyJBC38xIxXhzos=";
+    rev = "v${version}";
+    hash = "sha256-K4DyrurC4AzzJCcB4CS9UlQbUQSWpR7PevA2JFFMRZM=";
   };
 
   packageJSON = ./package.json;
 
   offlineCache = fetchYarnDeps {
     yarnLock = "${src}/yarn.lock";
-    hash = "sha256-s+vnyUeJKkkA5G0AmsfIG0Zh4bYdDc2B5MSNvdwhjgs=";
+    hash = "sha256-h/5TWaIg8AfY6I/JBRmUF6yCCbxCMs9nRECWEaaK2to=";
   };
 
   configurePhase = ''
@@ -49,8 +50,10 @@ mkYarnPackage rec {
   doDist = false;
 
   passthru.entrypoint = "zigbee2mqtt-networkmap.js";
+  passthru.updateScript = ./update.sh;
 
   meta = with lib; {
+    changelog = "https://github.com/azuwis/zigbee2mqtt-networkmap/releases/tag/v${version}";
     description = "Home Assistant Custom Card to show Zigbee2mqtt network map";
     homepage = "https://github.com/azuwis/zigbee2mqtt-networkmap";
     maintainers = with maintainers; [ azuwis ];
diff --git a/pkgs/servers/home-assistant/custom-lovelace-modules/zigbee2mqtt-networkmap/update.sh b/pkgs/servers/home-assistant/custom-lovelace-modules/zigbee2mqtt-networkmap/update.sh
new file mode 100755
index 0000000000000..b2675bc5c3d95
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-lovelace-modules/zigbee2mqtt-networkmap/update.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p nix-update
+
+set -xe
+
+dirname="$(dirname "$0")"
+
+# nix-update picks the wrong file `pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix`
+nix-update --override-filename "$dirname/default.nix" home-assistant-custom-lovelace-modules.zigbee2mqtt-networkmap
diff --git a/pkgs/servers/home-assistant/default.nix b/pkgs/servers/home-assistant/default.nix
index 52bf366e74fff..8f14d9203a621 100644
--- a/pkgs/servers/home-assistant/default.nix
+++ b/pkgs/servers/home-assistant/default.nix
@@ -30,24 +30,6 @@ let
     # Override the version of some packages pinned in Home Assistant's setup.py and requirements_all.txt
 
     (self: super: {
-      aioaladdinconnect = super.aioaladdinconnect.overridePythonAttrs (oldAttrs: rec {
-        version = "0.1.58";
-        src = fetchPypi {
-          pname = "AIOAladdinConnect";
-          inherit version;
-          hash = "sha256-ymynaOKvnqqHIEuQc+5CagsaH5cHnQit8ileoUO6G+I=";
-        };
-      });
-
-      aioautomower = super.aioautomower.overridePythonAttrs (oldAttrs: rec {
-        version = "2024.3.4";
-        src = fetchFromGitHub {
-          inherit (oldAttrs.src) owner repo;
-          rev = "refs/tags/${version}";
-          hash = "sha256-dk8HfIiQOKq7Ky+vYa3wKmTS78gTw6J0yyQT2Folpp0=";
-        };
-      });
-
       aioelectricitymaps = super.aioelectricitymaps.overridePythonAttrs (oldAttrs: rec {
         version = "0.4.0";
         src = fetchFromGitHub {
@@ -61,19 +43,14 @@ let
         ];
       });
 
-      aiogithubapi = super.aiogithubapi.overridePythonAttrs (oldAttrs: rec {
-        version = "22.10.1";
+      aiolyric = super.aiolyric.overridePythonAttrs (oldAttrs: rec {
+        version = "1.1.1";
         src = fetchFromGitHub {
-          owner = "ludeeus";
-          repo = "aiogithubapi";
+          owner = "timmo001";
+          repo = "aiolyric";
           rev = "refs/tags/${version}";
-          hash = "sha256-ceBuqaMqqL6qwN52765MG4sLt+08hx2G9rUVNC7x6ik=";
+          hash = "sha256-FZhLjVrLzLv6CZz/ROlvbtBK9XnpO8pG48aSIoBxhCo=";
         };
-        propagatedBuildInputs = with self; [
-          aiohttp
-          async-timeout
-          backoff
-        ];
       });
 
       aiopurpleair = super.aiopurpleair.overridePythonAttrs (oldAttrs: rec {
@@ -116,13 +93,15 @@ let
         '';
       });
 
-      anova-wifi = super.anova-wifi.overridePythonAttrs (old: rec {
-        version = "0.10.3";
+      aiowithings = super.aiowithings.overridePythonAttrs (oldAttrs: rec {
+        version = "2.1.0";
         src = fetchFromGitHub {
-          owner = "Lash-L";
-          repo = "anova_wifi";
-          rev = "refs/tags/v${version}";
-          hash = "sha256-tCmvp29KSCkc+g0w0odcB7vGjtDx6evac7XsHEF0syM=";
+          inherit (oldAttrs.src)
+            owner
+            repo
+          ;
+          rev = "refs/tags/${version}";
+          hash = "sha256-+pIIVCR+QsW9M3pH9Ss3dMvkeKM1OdhQ1y+s/T6pHtk=";
         };
       });
 
@@ -271,6 +250,16 @@ let
         patches = [];
       });
 
+      pymelcloud = super.pymelcloud.overridePythonAttrs (oldAttrs: {
+        version = "2.5.9";
+        src = fetchFromGitHub {
+          owner = "vilppuvuorinen";
+          repo = "pymelcloud";
+          rev = "33a827b6cd0b34f276790faa49bfd0994bb7c2e4"; # 2.5.x branch
+          sha256 = "sha256-Q3FIo9YJwtWPHfukEBjBANUQ1N1vr/DMnl1dgiN7vYg=";
+        };
+      });
+
       notifications-android-tv = super.notifications-android-tv.overridePythonAttrs (oldAttrs: rec {
         version = "0.1.5";
         format = "setuptools";
@@ -293,16 +282,16 @@ let
         doCheck = false; # no tests
       });
 
-      # Pinned due to API changes in 1.3.0
-      ovoenergy = super.ovoenergy.overridePythonAttrs (oldAttrs: rec {
-        version = "1.2.0";
+      # Can probably be removed with 2024.6.0
+      plugwise = super.plugwise.overridePythonAttrs rec {
+        version = "0.37.3";
         src = fetchFromGitHub {
-          owner = "timmo001";
-          repo = "ovoenergy";
+          owner = "plugwise";
+          repo = "python-plugwise";
           rev = "refs/tags/v${version}";
-          hash = "sha256-OSK74uvpHuEtWgbLVFrz1NO7lvtHbt690smGQ+GlsOI=";
+          hash = "sha256-aQz0p+DNi1XVoFwdFjc3RjpHqA2kGf4pU1QS6m271gU=";
         };
-      });
+      };
 
       # Pinned due to API changes in 0.1.0
       poolsense = super.poolsense.overridePythonAttrs (oldAttrs: rec {
@@ -314,16 +303,6 @@ let
         };
       });
 
-      py-synologydsm-api = super.py-synologydsm-api.overridePythonAttrs (oldAttrs: rec {
-        version = "2.1.4";
-        src = fetchFromGitHub {
-          owner = "mib1185";
-          repo = "py-synologydsm-api";
-          rev = "refs/tags/v${version}";
-          hash = "sha256-37JzdhMny6YDTBO9NRzfrZJAVAOPnpcr95fOKxisbTg=";
-        };
-      });
-
       pyasn1 = super.pyasn1.overridePythonAttrs (oldAttrs: rec {
         version = "0.4.8";
         src = fetchPypi {
@@ -366,20 +345,6 @@ let
         };
       });
 
-      python-roborock = super.python-roborock.overridePythonAttrs (oldAttrs: rec {
-        version = "0.40.0";
-        src = fetchFromGitHub {
-          owner = "humbertogontijo";
-          repo = "python-roborock";
-          rev = "refs/tags/v${version}";
-          hash = "sha256-H4xwgulNLs3R1Q5GhvQffpAZ1CWXZUJAja8BskW+YJk=";
-        };
-        postPatch = ''
-          substituteInPlace pyproject.toml \
-            --replace-fail "poetry-core==" "poetry-core>="
-        '';
-      });
-
       pytibber = super.pytibber.overridePythonAttrs (oldAttrs: rec {
         version = "0.28.2";
         src = fetchFromGitHub {
@@ -436,16 +401,58 @@ let
         };
       });
 
-      tesla-powerwall = super.tesla-powerwall.overridePythonAttrs (oldAttrs: rec {
-        version = "0.5.1";
+      # newer sigstore version transitivevly require pydantic>=2
+      sigstore = super.sigstore.overridePythonAttrs (oldAttrs: rec {
+        version = "1.1.2";
         src = fetchFromGitHub {
-          owner = "jrester";
-          repo = "tesla_powerwall";
+          owner = "sigstore";
+          repo = "sigstore-python";
           rev = "refs/tags/v${version}";
-          hash = "sha256-if/FCfxAB48WGXZOMvCtdSOW2FWO43OrlcHZbXIPmGE=";
+          hash = "sha256-QqY5GOBS75OkbSaF5Ua5jnJAhsYfVRuWLUoWDxX8Ino=";
         };
+        dependencies = with self; [
+          appdirs
+          cryptography
+          id
+          pydantic
+          pyjwt
+          pyopenssl
+          requests
+          securesystemslib
+          sigstore-protobuf-specs
+          tuf
+        ];
+        doCheck = false; # pytest too new
       });
 
+      sigstore-protobuf-specs = super.sigstore-protobuf-specs.overridePythonAttrs {
+        version = "0.1.0";
+        src = fetchPypi {
+          pname = "sigstore-protobuf-specs";
+          version = "0.1.0";
+          hash = "sha256-YistIxYToo7T5mYKzYeBhnW06DSG9JoPDBmKxUdfy4E=";
+        };
+        nativeBuildInputs = with self; [
+          flit-core
+        ];
+        pythonRelaxDeps = [
+          "betterproto"
+        ];
+      };
+
+      tuf = super.tuf.overridePythonAttrs rec {
+        version = "2.1.0";
+        src = fetchFromGitHub {
+          owner = "theupdateframework";
+          repo = "python-tuf";
+          rev = "refs/tags/v${version}";
+          hash = "sha256-MdPctAZuKn/YAwpMJ5gWU7PXJD3iK7bYprLXV52wNQQ=";
+        };
+        disabledTests = [
+          "test_sign_failures"
+        ];
+      };
+
       versioningit = super.versioningit.overridePythonAttrs {
         doCheck = false;
       };
@@ -525,12 +532,12 @@ let
   extraBuildInputs = extraPackages python.pkgs;
 
   # Don't forget to run update-component-packages.py after updating
-  hassVersion = "2024.4.4";
+  hassVersion = "2024.6.4";
 
 in python.pkgs.buildPythonApplication rec {
   pname = "homeassistant";
   version = assert (componentPackages.version == hassVersion); hassVersion;
-  format = "pyproject";
+  pyproject = true;
 
   # check REQUIRED_PYTHON_VER in homeassistant/const.py
   disabled = python.pythonOlder "3.11";
@@ -543,17 +550,16 @@ in python.pkgs.buildPythonApplication rec {
     owner = "home-assistant";
     repo = "core";
     rev = "refs/tags/${version}";
-    hash = "sha256-bZcrFtaO0S22M6Wt2otK8rCg+NhpXr+/yRFxi02QJJI=";
+    hash = "sha256-WIAFTVNHzrKTRONmOc/lq5PvC34PDKF7UfIokLCVzNY=";
   };
 
   # Secondary source is pypi sdist for translations
   sdist = fetchPypi {
     inherit pname version;
-    hash = "sha256-NyIBFpDstX1MEoLS9p7GXl/+V6xB2hklNf2LmNLUMQk=";
+    hash = "sha256-Ymv3AlArAD2rSXQwMhEVeynwhAo8ZMrtV1zUK4U8xqQ=";
   };
 
-  nativeBuildInputs = with python.pkgs; [
-    pythonRelaxDepsHook
+  build-system = with python.pkgs; [
     setuptools
   ];
 
@@ -563,11 +569,14 @@ in python.pkgs.buildPythonApplication rec {
     "bcrypt"
     "ciso8601"
     "cryptography"
+    "jinja2"
     "hass-nabucasa"
     "httpx"
     "orjson"
     "pillow"
     "pyopenssl"
+    "requests"
+    "sqlalchemy"
     "typing-extensions"
     "urllib3"
   ];
@@ -592,16 +601,20 @@ in python.pkgs.buildPythonApplication rec {
   postPatch = ''
     substituteInPlace tests/test_config.py --replace-fail '"/usr"' '"/build/media"'
 
+    substituteInPlace pyproject.toml --replace-fail "wheel~=0.43.0" wheel
+
     sed -i 's/setuptools[~=]/setuptools>/' pyproject.toml
     sed -i 's/wheel[~=]/wheel>/' pyproject.toml
   '';
 
-  propagatedBuildInputs = with python.pkgs; [
+  dependencies = with python.pkgs; [
     # Only packages required in pyproject.toml
+    aiodns
     aiohttp
     aiohttp-cors
     aiohttp-fast-url-dispatcher
-    aiohttp-zlib-ng
+    aiohttp-fast-zlib
+    aiozoneinfo
     astral
     async-interrupt
     atomicwrites-homeassistant
@@ -613,8 +626,8 @@ in python.pkgs.buildPythonApplication rec {
     cryptography
     fnv-hash-fast
     hass-nabucasa
-    httpx
     home-assistant-bluetooth
+    httpx
     ifaddr
     jinja2
     lru-dict
@@ -623,8 +636,8 @@ in python.pkgs.buildPythonApplication rec {
     pillow
     pip
     psutil-home-assistant
-    pyopenssl
     pyjwt
+    pyopenssl
     python-slugify
     pyyaml
     requests
@@ -666,11 +679,14 @@ in python.pkgs.buildPythonApplication rec {
     tomli
     # Sneakily imported in tests/conftest.py
     paho-mqtt
+    # Used in tests/non_packaged_scripts/test_alexa_locales.py
+    beautifulsoup4
   ] ++ lib.concatMap (component: getPackages component python.pkgs) [
     # some components are needed even if tests in tests/components are disabled
     "default_config"
     "debugpy"
     "hue"
+    "qwikswitch"
     "sentry"
   ];
 
@@ -684,10 +700,10 @@ in python.pkgs.buildPythonApplication rec {
     "--showlocals"
     # AssertionError: assert 1 == 0
     "--deselect tests/test_config.py::test_merge"
-    # AssertionError: assert 'WARNING' not in '2023-11-10 ...nt abc[L]>\n'"
-    "--deselect=tests/helpers/test_script.py::test_multiple_runs_repeat_choose"
-    # SystemError: PyThreadState_SetAsyncExc failed
-    "--deselect=tests/helpers/test_template.py::test_template_timeout"
+    # AssertionError: assert 6 == 5
+    "--deselect=tests/helpers/test_translation.py::test_caching"
+    # assert "Detected that integration 'hue' attempted to create an asyncio task from a thread at homeassistant/components/hue/light.py, line 23
+    "--deselect=tests/util/test_async.py::test_create_eager_task_from_thread_in_integration"
     # tests are located in tests/
     "tests"
   ];
diff --git a/pkgs/servers/home-assistant/frontend.nix b/pkgs/servers/home-assistant/frontend.nix
index afa2c53ca3f7f..f3e6062d5b266 100644
--- a/pkgs/servers/home-assistant/frontend.nix
+++ b/pkgs/servers/home-assistant/frontend.nix
@@ -4,7 +4,7 @@ buildPythonPackage rec {
   # the frontend version corresponding to a specific home-assistant version can be found here
   # https://github.com/home-assistant/home-assistant/blob/master/homeassistant/components/frontend/manifest.json
   pname = "home-assistant-frontend";
-  version = "20240404.2";
+  version = "20240610.1";
   format = "wheel";
 
   src = fetchPypi {
@@ -12,7 +12,7 @@ buildPythonPackage rec {
     pname = "home_assistant_frontend";
     dist = "py3";
     python = "py3";
-    hash = "sha256-xCpQHzfXXt9aOWWVGYtt9NYws//ZPjI/owXBQafb31k=";
+    hash = "sha256-6XSDKPL+rbtP/jGYbvzc5cakEZC94sDetmPuM7TQQ64=";
   };
 
   # there is nothing to strip in this package
diff --git a/pkgs/servers/home-assistant/intents.nix b/pkgs/servers/home-assistant/intents.nix
index 744adc8b49739..88944efe35930 100644
--- a/pkgs/servers/home-assistant/intents.nix
+++ b/pkgs/servers/home-assistant/intents.nix
@@ -21,7 +21,7 @@
 
 buildPythonPackage rec {
   pname = "home-assistant-intents";
-  version = "2024.4.3";
+  version = "2024.6.21";
   pyproject = true;
 
   disabled = pythonOlder "3.9";
@@ -30,16 +30,10 @@ buildPythonPackage rec {
     owner = "home-assistant";
     repo = "intents-package";
     rev = "refs/tags/${version}";
-    hash = "sha256-hcstD1qkngZAl/jKLez+4qDs/ZIandkVkY2jrvZqph8=";
+    hash = "sha256-tgbZqcxv/uFoNCGq7TySffhqQXzupZodQfQHBqkSHrE=";
     fetchSubmodules = true;
   };
 
-  postPatch = ''
-    substituteInPlace pyproject.toml \
-      --replace-fail "setuptools~=62.3" "setuptools" \
-      --replace-fail "wheel~=0.37.1" "wheel"
-  '';
-
   build-system = [
     setuptools
 
diff --git a/pkgs/servers/home-assistant/stubs.nix b/pkgs/servers/home-assistant/stubs.nix
index d31cf8104dbed..4d14ee508bcba 100644
--- a/pkgs/servers/home-assistant/stubs.nix
+++ b/pkgs/servers/home-assistant/stubs.nix
@@ -8,8 +8,8 @@
 
 buildPythonPackage rec {
   pname = "homeassistant-stubs";
-  version = "2024.4.4";
-  format = "pyproject";
+  version = "2024.6.3";
+  pyproject = true;
 
   disabled = python.version != home-assistant.python.version;
 
@@ -17,10 +17,10 @@ buildPythonPackage rec {
     owner = "KapJI";
     repo = "homeassistant-stubs";
     rev = "refs/tags/${version}";
-    hash = "sha256-BPmHorcyO6a7Ag7FQogkZYh2x3GoMRKiFh+9aSkjE7M=";
+    hash = "sha256-YMoNoR9LT38nkqoo0seaP88XUOcVmSQN1dBKiW+13SM=";
   };
 
-  nativeBuildInputs = [
+  build-system = [
     poetry-core
     home-assistant
   ];
diff --git a/pkgs/servers/home-assistant/tests.nix b/pkgs/servers/home-assistant/tests.nix
index 989bfccb7236d..ae42f5fd7ce66 100644
--- a/pkgs/servers/home-assistant/tests.nix
+++ b/pkgs/servers/home-assistant/tests.nix
@@ -8,6 +8,7 @@ let
     airzone_cloud = [
       aioairzone
     ];
+    androidtv = home-assistant.getPackages "asuswrt" home-assistant.python.pkgs;
     bluetooth = [
       pyswitchbot
     ];
@@ -49,9 +50,21 @@ let
   };
 
   extraDisabledTests = {
-    private_ble_device = [
-      # AssertionError: assert '90' == '90.0'
-      "test_estimated_broadcast_interval"
+    advantage_air = [
+      # AssertionError: assert 2 == 1 (Expected two calls, got one)
+      "test_binary_sensor_async_setup_entry"
+    ];
+    hassio = [
+      # fails to load the hardware component
+      "test_device_registry_calls"
+    ];
+    husqvarna_automower = [
+      # snapshot mismatch
+      "test_device_diagnostics"
+    ];
+    recorder = [
+      # call not happening, likely due to timezone issues
+      "test_auto_purge"
     ];
     shell_command = [
       # tries to retrieve file from github
@@ -61,6 +74,10 @@ let
       # missing operating_status attribute in entity
       "test_sensor_entities"
     ];
+    websocket_api = [
+      # racy
+      "test_render_template_with_timeout"
+    ];
   };
 
   extraPytestFlagsArray = {
@@ -75,6 +92,7 @@ let
     jellyfin = [
       # AssertionError: assert 'audio/x-flac' == 'audio/flac'
       "--deselect tests/components/jellyfin/test_media_source.py::test_resolve"
+      "--deselect tests/components/jellyfin/test_media_source.py::test_audio_codec_resolve"
       # AssertionError: assert [+ received] == [- snapshot]
       "--deselect tests/components/jellyfin/test_media_source.py::test_music_library"
     ];
@@ -91,6 +109,7 @@ let
 in lib.listToAttrs (map (component: lib.nameValuePair component (
   home-assistant.overridePythonAttrs (old: {
     pname = "homeassistant-test-${component}";
+    pyproject = null;
     format = "other";
 
     dontBuild = true;
diff --git a/pkgs/servers/home-assistant/update-component-packages.py b/pkgs/servers/home-assistant/update-component-packages.py
index 10288f5e6d64f..e25b60336140d 100755
--- a/pkgs/servers/home-assistant/update-component-packages.py
+++ b/pkgs/servers/home-assistant/update-component-packages.py
@@ -41,6 +41,7 @@ PKG_SET = "home-assistant.python.pkgs"
 PKG_PREFERENCES = {
     "fiblary3": "fiblary3-fork",  # https://github.com/home-assistant/core/issues/66466
     "HAP-python": "hap-python",
+    "ollama-hass": "ollama",
     "SQLAlchemy": "sqlalchemy",
     "tensorflow": "tensorflow",
     "yt-dlp": "yt-dlp",