push sheeet
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s

This commit is contained in:
Dark Steveneq
2025-10-09 14:15:47 +02:00
commit 646b892680
49168 changed files with 5897842 additions and 0 deletions

View File

@@ -0,0 +1,90 @@
# Packaging guidelines
## buildHomeAssistantComponent
Custom components should be packaged using the
`buildHomeAssistantComponent` function, that is provided at top-level.
It builds upon `buildPythonPackage` but uses a custom install and check
phase.
Python runtime dependencies can be directly consumed as unqualified
function arguments. Pass them into `dependencies`, for them to
be available to Home Assistant.
Out-of-tree components need to use Python packages from
`home-assistant.python.pkgs` as to not introduce conflicting package
versions into the Python environment.
**Example Boilerplate:**
```nix
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
}:
buildHomeAssistantComponent {
# owner, domain, version
src = fetchFromGithub {
# owner, repo, rev, hash
};
dependencies = [
# python requirements, as specified in manifest.json
];
meta = with lib; {
# changelog, description, homepage, license, maintainers
};
}
```
## Package attribute
The attribute name must reflect the domain as seen in the
`manifest.json`, which in turn will match the python module name below
in the `custom_components/` directory.
**Example:**
The project [mweinelt/ha-prometheus-sensor](https://github.com/mweinelt/ha-prometheus-sensor/blob/1.0.0/custom_components/prometheus_sensor/manifest.json#L2)
would receive the attribute name `"prometheus_sensor"`, because both
domain in the `manifest.json` as well as the module name are
`prometheus_sensor`.
## Package name
The `pname` attribute is a composition of both `owner` and `domain`.
Don't set `pname`, set `owner` and `domain` instead.
Exposing the `domain` attribute separately allows checking for
conflicting components at eval time.
## Manifest check
The `buildHomeAssistantComponent` builder uses a hook to check whether
the dependencies specified in the `manifest.json` are present and
inside the specified version range. It also makes sure derivation
and manifest agree about the domain name.
There shouldn't be a need to disable this hook, but you can set
`dontCheckManifest` to `true` in the derivation to achieve that.
### Too narrow version constraints
Every once in a while a dependency constraint is more narrow than it
needs to be. Instead of applying brittle substitutions the version constraint
can be ignored on a per requirement basis.
```nix
{
dependencies = [ pyemvue ];
# don't check the version constraint of pyemvue
ignoreVersionRequirement = [ "pyemvue" ];
}
```

View File

@@ -0,0 +1,31 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
ulid-transform,
}:
buildHomeAssistantComponent rec {
owner = "basnijholt";
domain = "adaptive_lighting";
version = "1.26.0";
src = fetchFromGitHub {
owner = "basnijholt";
repo = "adaptive-lighting";
tag = "v${version}";
hash = "sha256-I8pay2cWj604PQxOBLkaWjcj56dtbaAiBCv6LQQM6XI=";
};
dependencies = [
ulid-transform
];
meta = with lib; {
changelog = "https://github.com/basnijholt/adaptive-lighting/releases/tag/${version}";
description = "Home Assistant Adaptive Lighting Plugin - Sun Synchronized Lighting";
homepage = "https://github.com/basnijholt/adaptive-lighting";
maintainers = with maintainers; [ mindstorms6 ];
license = licenses.asl20;
};
}

View File

@@ -0,0 +1,30 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
}:
buildHomeAssistantComponent rec {
owner = "nielsfaber";
domain = "alarmo";
version = "1.10.11";
src = fetchFromGitHub {
owner = "nielsfaber";
repo = "alarmo";
tag = "v${version}";
hash = "sha256-OASgIudnxPtWiBLpkiOioCRhIqlr2B5E2/XGlhs16sQ=";
};
postPatch = ''
find ./custom_components/alarmo/frontend -mindepth 1 -maxdepth 1 ! -name "dist" -exec rm -rf {} \;
'';
meta = with lib; {
changelog = "https://github.com/nielsfaber/alarmo/releases/tag/v${version}";
description = "Alarm System for Home Assistant";
homepage = "https://github.com/nielsfaber/alarmo";
maintainers = with maintainers; [ mindstorms6 ];
license = licenses.asl20;
};
}

View File

@@ -0,0 +1,34 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
amshan,
}:
buildHomeAssistantComponent rec {
owner = "toreamun";
domain = "amshan";
version = "2024.12.0";
src = fetchFromGitHub {
owner = "toreamun";
repo = "amshan-homeassistant";
tag = version;
hash = "sha256-L7TGdUjDvIRP9dHIkng9GYwilmRzhGbUK6ivx8PVtQ4=";
};
dependencies = [
amshan
];
meta = {
description = "Home Assistant integration for electricity meters (AMS/HAN/P1)";
longDescription = ''
The integration supports both streaming (serial port / TCP/IP) and MQTT
(Tibber Pulse, energyintelligence.se etc.).
'';
homepage = "https://github.com/toreamun/amshan-homeassistant";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ bjornfor ];
};
}

View File

@@ -0,0 +1,26 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
}:
buildHomeAssistantComponent rec {
owner = "BeryJu";
domain = "auth_header";
version = "1.12";
src = fetchFromGitHub {
inherit owner;
repo = "hass-auth-header";
tag = "v${version}";
hash = "sha256-BPG/G6IM95g9ip2OsPmcAebi2ZvKHUpFzV4oquOFLPM=";
};
meta = with lib; {
changelog = "https://github.com/BeryJu/hass-auth-header/releases/tag/v${version}";
description = "Home Assistant custom component which allows you to delegate authentication to a reverse proxy";
homepage = "https://github.com/BeryJu/hass-auth-header";
maintainers = with maintainers; [ mjm ];
license = licenses.gpl3;
};
}

View File

@@ -0,0 +1,37 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
aiofiles,
bcrypt,
jinja2,
python-jose,
}:
buildHomeAssistantComponent rec {
owner = "christaangoossens";
domain = "auth_oidc";
version = "0.6.3-alpha";
src = fetchFromGitHub {
owner = "christiaangoossens";
repo = "hass-oidc-auth";
tag = "v${version}";
hash = "sha256-+R2IIs9MixR8epVpk4QycN8PjOfRITlZ+oUbdPEk2eA=";
};
dependencies = [
aiofiles
bcrypt
jinja2
python-jose
];
meta = {
changelog = "https://github.com/christiaangoossens/hass-oidc-auth/releases/tag/v${version}";
description = "OpenID Connect authentication provider for Home Assistant";
homepage = "https://github.com/christiaangoossens/hass-oidc-auth";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ hexa ];
};
}

View File

@@ -0,0 +1,30 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
}:
buildHomeAssistantComponent rec {
owner = "Limych";
domain = "average";
version = "2.4.0";
src = fetchFromGitHub {
inherit owner;
repo = "ha-average";
tag = version;
hash = "sha256-LISGpgfoVxdOeJ9LHzxf7zt49pbIJrLiPkNg/Mf1lxM=";
};
postPatch = ''
sed -i "/pip>=/d" custom_components/average/manifest.json
'';
meta = with lib; {
changelog = "https://github.com/Limych/ha-average/releases/tag/${version}";
description = "Average Sensor for Home Assistant";
homepage = "https://github.com/Limych/ha-average";
maintainers = with maintainers; [ matthiasbeyer ];
license = licenses.cc-by-nc-40;
};
}

View File

@@ -0,0 +1,31 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
requests,
}:
buildHomeAssistantComponent rec {
owner = "10der";
domain = "awtrix";
version = "0.3.21";
src = fetchFromGitHub {
inherit owner;
repo = "homeassistant-custom_components-awtrix";
# https://github.com/10der/homeassistant-custom_components-awtrix/issues/9
rev = "8180cef7b1837e85115ef7ece553e39b0f94ff4d";
hash = "sha256-D/RXi7nX+xqFs5Dvu1pwomQWCJ8PJhc1H3wsAgBhRMQ=";
};
dependencies = [
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;
};
}

View File

@@ -0,0 +1,29 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
benqprojector,
}:
buildHomeAssistantComponent rec {
owner = "rrooggiieerr";
domain = "benqprojector";
version = "0.1.3";
src = fetchFromGitHub {
inherit owner;
repo = "homeassistant-benqprojector";
tag = version;
hash = "sha256-iAFmXL10QqudECsS9u9w7KBETzu9aWCg1EBbFR1ff+o=";
};
dependencies = [ benqprojector ];
meta = rec {
description = "Home Assistant integration for BenQ projectors";
homepage = "https://github.com/rrooggiieerr/homeassistant-benqprojector";
changelog = "${homepage}/releases/tag/${version}";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ sephalon ];
};
}

View File

@@ -0,0 +1,31 @@
{
buildHomeAssistantComponent,
fetchFromGitHub,
lib,
gitUpdater,
}:
buildHomeAssistantComponent rec {
owner = "KartoffelToby";
domain = "better_thermostat";
version = "1.7.0";
src = fetchFromGitHub {
owner = "KartoffelToby";
repo = "better_thermostat";
tag = version;
hash = "sha256-rE14iKAXo3hecK3bQ9MLcOtnZviwjOpYKGlIc4+uCfw=";
};
passthru.updateScript = gitUpdater {
ignoredVersions = "(Alpha|Beta|alpha|beta).*";
};
meta = {
changelog = "https://github.com/KartoffelToby/better_thermostat/releases/tag/${version}";
description = "Smart TRV control integrates room-temp sensors, window/door sensors, weather forecasts, and ambient probes for efficient heating and calibration, enhancing energy savings and comfort";
homepage = "https://better-thermostat.org/";
maintainers = with lib.maintainers; [ mguentner ];
license = lib.licenses.agpl3Only;
};
}

View File

@@ -0,0 +1,35 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
cachetools,
}:
buildHomeAssistantComponent rec {
owner = "dckiller51";
domain = "bodymiscale";
version = "2024.6.0";
src = fetchFromGitHub {
inherit owner;
repo = domain;
rev = version;
hash = "sha256-6bYKqU9yucISjTrmCUx1bNn9kqvT9jW1OBrqAa4ayEQ=";
};
dependencies = [
cachetools
];
ignoreVersionRequirement = [
"cachetools"
];
meta = {
description = "Home Assistant custom component providing body metrics for Xiaomi Mi Scale 1 and 2";
homepage = "https://github.com/dckiller51/bodymiscale";
license = with lib.licenses; [ asl20 ];
maintainers = with lib.maintainers; [ justinas ];
};
}

View File

@@ -0,0 +1,30 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
icalendar,
}:
buildHomeAssistantComponent rec {
owner = "JosephAbbey";
domain = "calendar_export";
version = "0.1.0";
src = fetchFromGitHub {
owner = "JosephAbbey";
repo = "ha_calendar_export";
tag = "v${version}";
hash = "sha256-ULnkjnBc0oR1CwA+Mz1RnVamEXOKpgd60xryZMkCQwg=";
};
dependencies = [ icalendar ];
ignoreVersionRequirement = [ "icalendar" ];
meta = {
description = "Export calendar events in the iCalendar format";
homepage = "https://github.com/JosephAbbey/ha_calendar_export";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ hexa ];
};
}

View File

@@ -0,0 +1,25 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
}:
buildHomeAssistantComponent rec {
owner = "bjrnptrsn";
domain = "climate_group";
version = "1.0.8";
src = fetchFromGitHub {
inherit owner;
repo = "climate_group";
tag = version;
hash = "sha256-HwMHhrmQ+fbdLHQAM+ka/1oNCIBFaLTqOlPMzCEEeQ0=";
};
meta = {
changelog = "https://github.com/bjrnptrsn/climate_group/blob/${src.rev}/README.md#changelog";
description = "Group multiple climate devices to a single entity";
homepage = "https://github.com/bjrnptrsn/climate_group";
maintainers = builtins.attrValues { inherit (lib.maintainers) jamiemagee; };
license = lib.licenses.mit;
};
}

View File

@@ -0,0 +1,26 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
}:
buildHomeAssistantComponent rec {
owner = "jwillemsen";
domain = "daikin_onecta";
version = "4.2.8";
src = fetchFromGitHub {
owner = "jwillemsen";
repo = "daikin_onecta";
tag = "v${version}";
hash = "sha256-ozOJQDoE/t2FhnsVCnP+WCrFr/l19+onr488JN2fSE0=";
};
meta = {
changelog = "https://github.com/jwillemsen/daikin_onecta/tag/v${version}";
description = "Home Assistant Integration for devices supported by the Daikin Onecta App";
homepage = "https://github.com/jwillemsen/daikin_onecta";
maintainers = with lib.maintainers; [ dandellion ];
license = lib.licenses.gpl3Only;
};
}

View File

@@ -0,0 +1,35 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
dirigera,
}:
buildHomeAssistantComponent rec {
owner = "sanjoyg";
domain = "dirigera_platform";
version = "2.6.8";
src = fetchFromGitHub {
owner = "sanjoyg";
repo = "dirigera_platform";
rev = version;
hash = "sha256-FNcGl6INQlVP+P3qmExWLI1ALh9ZacjJAbNKRtgM3ms=";
};
postPatch = ''
substituteInPlace custom_components/dirigera_platform/manifest.json \
--replace-fail "0.0.1" "${version}"
'';
dependencies = [ dirigera ];
ignoreVersionRequirement = [ "dirigera" ];
meta = with lib; {
description = "Home-assistant integration for IKEA Dirigera hub";
homepage = "https://github.com/sanjoyg/dirigera_platform";
maintainers = with maintainers; [ rhoriguchi ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,40 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
nix-update-script,
websockets,
# Test dependencies
pytestCheckHook,
pytest-homeassistant-custom-component,
}:
buildHomeAssistantComponent rec {
owner = "JeffSteinbok";
domain = "dreo";
version = "1.3.3";
src = fetchFromGitHub {
inherit owner;
repo = "hass-dreo";
tag = "v${version}";
hash = "sha256-eAgqjAXNAY8kr7+49q+tikW3bDBJ0N0Rh5WJwzLYr8I=";
};
dependencies = [ websockets ];
nativeCheckInputs = [
pytest-homeassistant-custom-component
pytestCheckHook
];
passthru.updateScript = nix-update-script { };
meta = {
changelog = "https://github.com/JeffSteinbok/hass-dreo/releases/tag/${src.tag}";
description = "Dreo Smart Device Integration for Home Assistant";
homepage = "https://github.com/JeffSteinbok/hass-dreo";
maintainers = with lib.maintainers; [ CodedNil ];
license = lib.licenses.mit;
};
}

View File

@@ -0,0 +1,34 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
defusedxml,
}:
buildHomeAssistantComponent rec {
owner = "hg1337";
domain = "dwd";
version = "2025.5.0";
src = fetchFromGitHub {
owner = "hg1337";
repo = "homeassistant-dwd";
rev = version;
hash = "sha256-CuoHVgk4jWDEe3OkzFCok8YqVkWLJF6Rl7i/SDeSU50=";
};
dependencies = [ defusedxml ];
# defusedxml version mismatch
dontCheckManifest = true;
meta = with lib; {
description = "Custom component for Home Assistant that integrates weather data (measurements and forecasts) of Deutscher Wetterdienst";
homepage = "https://github.com/hg1337/homeassistant-dwd";
license = licenses.asl20;
maintainers = with maintainers; [
hexa
emilylange
];
};
}

View File

@@ -0,0 +1,26 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
}:
buildHomeAssistantComponent rec {
owner = "carleeno";
domain = "elevenlabs_tts";
version = "2.4.0";
src = fetchFromGitHub {
owner = "carleeno";
repo = "elevenlabs_tts";
tag = version;
hash = "sha256-/hszK5J1iGB46WfmCCK9/F0JOR405gplMwVC4niAqig=";
};
meta = with lib; {
changelog = "https://github.com/carleeno/elevenlabs_tts/releases/tag/${version}";
description = "Home Assistant Eleven Labs TTS Integration";
homepage = "https://github.com/carleeno/elevenlabs_tts";
maintainers = with maintainers; [ mindstorms6 ];
license = licenses.asl20;
};
}

View File

@@ -0,0 +1,35 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
pyemvue,
}:
buildHomeAssistantComponent rec {
owner = "magico13";
domain = "emporia_vue";
version = "0.11.2";
src = fetchFromGitHub {
owner = "magico13";
repo = "ha-emporia-vue";
rev = "v${version}";
hash = "sha256-p8rBO+Z64n87NE7BXNSsTT5IA7ba5RzCZjqX05LqD0A=";
};
dependencies = [
pyemvue
];
ignoreVersionRequirement = [
"pyemvue"
];
meta = with lib; {
description = "Reads data from the Emporia Vue energy monitor into Home Assistant";
homepage = "https://github.com/magico13/ha-emporia-vue";
changelog = "https://github.com/magico13/ha-emporia-vue/releases/tag/v${version}";
maintainers = with maintainers; [ presto8 ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,35 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
beautifulsoup4,
}:
buildHomeAssistantComponent rec {
owner = "mampfes";
domain = "epex_spot";
version = "3.0.0";
src = fetchFromGitHub {
owner = "mampfes";
repo = "ha_epex_spot";
tag = version;
hash = "sha256-UaPgf0861TaSgawjJCyNjs8hRE5L5vWnyoXENrzCfb4=";
};
dependencies = [
beautifulsoup4
];
#skip phases without activity
dontConfigure = true;
doCheck = false;
meta = with lib; {
changelog = "https://github.com/mampfes/ha_epex_spot/releases/tag/${version}";
description = "This component adds electricity prices from stock exchange EPEX Spot to Home Assistant";
homepage = "https://github.com/mampfes/ha_epex_spot";
maintainers = with maintainers; [ _9R ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,35 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
unstableGitUpdater,
requests,
pydantic,
}:
buildHomeAssistantComponent {
owner = "NewsGuyTor";
domain = "fellow";
version = "0-unstable-2025-10-06";
src = fetchFromGitHub {
owner = "NewsGuyTor";
repo = "FellowAiden-HomeAssistant";
rev = "c0b724e2ac3174b99fcb7d05a9c63a3ac6ce03b4";
hash = "sha256-gK9lVFehqRWq7HQd+VPJB/iaIvLdHu51XxyfM14aY0s=";
};
passthru.updateScript = unstableGitUpdater { };
dependencies = [
requests
pydantic
];
meta = {
description = "Home Assistant integration for Fellow Aiden coffee brewer";
homepage = "https://github.com/NewsGuyTor/FellowAiden-HomeAssistant";
license = lib.licenses.gpl3Only;
maintainers = [ lib.maintainers.jamiemagee ];
};
}

View File

@@ -0,0 +1,63 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
# dependencies
hass-web-proxy-lib,
# tests
homeassistant,
pytest-aiohttp,
pytest-cov-stub,
pytest-homeassistant-custom-component,
pytest-timeout,
pytestCheckHook,
}:
buildHomeAssistantComponent rec {
owner = "blakeblackshear";
domain = "frigate";
version = "5.9.4";
src = fetchFromGitHub {
owner = "blakeblackshear";
repo = "frigate-hass-integration";
tag = "v${version}";
hash = "sha256-LzrIvHJMB6mFAEfKoMIs0wL+xbEjoBIx48pSEcCHmg4=";
};
dependencies = [ hass-web-proxy-lib ];
nativeCheckInputs = [
homeassistant
pytest-aiohttp
pytest-cov-stub
pytest-homeassistant-custom-component
pytest-timeout
pytestCheckHook
]
++ (homeassistant.getPackages "mqtt" homeassistant.python.pkgs)
++ (homeassistant.getPackages "stream" homeassistant.python.pkgs);
disabledTests = [
# https://github.com/blakeblackshear/frigate-hass-integration/issues/922
"test_frigate_camera_setup"
"test_frigate_camera_setup_birdseye"
"test_frigate_camera_setup_webrtc"
"test_frigate_camera_setup_birdseye_webrtc"
];
disabledTestPaths = [
# https://github.com/blakeblackshear/frigate-hass-integration/issues/907
"tests/test_media_source.py"
];
meta = with lib; {
description = "Provides Home Assistant integration to interface with a separately running Frigate service";
homepage = "https://github.com/blakeblackshear/frigate-hass-integration";
changelog = "https://github.com/blakeblackshear/frigate-hass-integration/releases/tag/v${version}";
maintainers = with maintainers; [ presto8 ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,31 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
frigidaire,
}:
buildHomeAssistantComponent rec {
owner = "bm1549";
domain = "frigidaire";
version = "0.1.2";
src = fetchFromGitHub {
inherit owner;
repo = "home-assistant-frigidaire";
tag = version;
hash = "sha256-7SyOsB16P0O0RHEUXy79cqil+QFO2PilyWWlpv428g0=";
};
dependencies = [ frigidaire ];
# NOTE: The manifest.json specifies an exact version requirement for the
# frigidaire dependency
ignoreVersionRequirement = [ "frigidaire" ];
meta = {
description = "Custom component for the Frigidaire integration";
homepage = "https://github.com/bm1549/home-assistant-frigidaire";
maintainers = with lib.maintainers; [ nullcube ];
license = lib.licenses.mit;
};
}

View File

@@ -0,0 +1,35 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
garminconnect,
tzlocal,
}:
buildHomeAssistantComponent rec {
owner = "cyberjunky";
domain = "garmin_connect";
version = "0.2.30";
src = fetchFromGitHub {
owner = "cyberjunky";
repo = "home-assistant-garmin_connect";
tag = version;
hash = "sha256-Gxz0mKVgs2o7IlhGJkz4JlKRb448IRFqK87Kn+Gebkk=";
};
dependencies = [
garminconnect
tzlocal
];
meta = with lib; {
description = "Garmin Connect integration allows you to expose data from Garmin Connect to Home Assistant";
homepage = "https://github.com/cyberjunky/home-assistant-garmin_connect";
maintainers = with maintainers; [
matthiasbeyer
dmadisetti
];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,50 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
fetchpatch2,
govee-led-wez,
pytest-cov-stub,
pytest-homeassistant-custom-component,
pytestCheckHook,
}:
buildHomeAssistantComponent {
owner = "wez";
domain = "govee_lan";
version = "unstable-2023-06-10";
src = fetchFromGitHub {
owner = "wez";
repo = "govee-lan-hass";
rev = "18d8455510d158496f7e5d4f0286f58bd61042bb";
hash = "sha256-ZhrxEPBEi+Z+2ZOAQ1amhO0tqvhM6tyFQgoRIVNDtXY=";
};
patches = [
(fetchpatch2 {
url = "https://github.com/wez/govee-lan-hass/commit/b4cecac5ae00d95c49fcfe3bbfc405cbfc5dd84c.patch";
hash = "sha256-+MPO4kxxE1nZ/+sIY7v8WukHMrVowgMMBVfRDw2uv8o=";
})
];
dependencies = [
govee-led-wez
];
# AttributeError: 'async_generator' object has no attribute 'config'
doCheck = false;
nativeCheckInputs = [
pytest-cov-stub
pytest-homeassistant-custom-component
pytestCheckHook
];
meta = with lib; {
description = "Control Govee lights via the LAN API from Home Assistant";
homepage = "https://github.com/wez/govee-lan-hass";
maintainers = with maintainers; [ SuperSandro2000 ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,29 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitea,
libgpiod,
}:
buildHomeAssistantComponent rec {
owner = "raboof";
domain = "gpio";
version = "0.0.4";
src = fetchFromGitea {
domain = "codeberg.org";
owner = "raboof";
repo = "ha-gpio";
rev = "v${version}";
hash = "sha256-JyyJPI0lbZLJj+016WgS1KXU5rnxUmRMafel4/wKsYk=";
};
dependencies = [ libgpiod ];
meta = with lib; {
description = "Home Assistant GPIO custom integration";
homepage = "https://codeberg.org/raboof/ha-gpio";
maintainers = with maintainers; [ raboof ];
license = licenses.asl20;
};
}

View File

@@ -0,0 +1,31 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
pyopensprinkler,
}:
buildHomeAssistantComponent rec {
owner = "vinteo";
domain = "opensprinkler";
version = "1.5.1";
src = fetchFromGitHub {
owner = "vinteo";
repo = "hass-opensprinkler";
tag = "v${version}";
hash = "sha256-cq9BCN/lvEZ5xPt4cLOFwNP36S+u0hQr4o2gGFz0IGo=";
};
dependencies = [
pyopensprinkler
];
meta = {
changelog = "https://github.com/vinteo/hass-opensprinkler/releases/tag/${src.tag}";
description = "OpenSprinkler Integration for Home Assistant";
homepage = "https://github.com/vinteo/hass-opensprinkler";
maintainers = with lib.maintainers; [ jfly ];
license = lib.licenses.mit;
};
}

View File

@@ -0,0 +1,57 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
fetchpatch,
hass-web-proxy-lib,
urlmatch,
pytestCheckHook,
pytest-aiohttp,
pytest-cov-stub,
pytest-freezer,
pytest-homeassistant-custom-component,
pytest-timeout,
}:
buildHomeAssistantComponent rec {
owner = "dermotduffy";
domain = "hass_web_proxy";
version = "0.0.3";
src = fetchFromGitHub {
owner = "dermotduffy";
repo = "hass-web-proxy-integration";
tag = "v${version}";
hash = "sha256-qtiea0L0Zw0CtrUpuPjS/DuBzlV61v6K4SARzHGGgUY=";
};
patches = [
(fetchpatch {
# https://github.com/dermotduffy/hass-web-proxy-integration/pull/106
url = "https://github.com/dermotduffy/hass-web-proxy-integration/commit/77964d49fd6e9d7aefe0cd9c19226a80477dc909.patch";
hash = "sha256-PZBRHVoHXMiELHitmj+YmgVSQiOqEmyP4o3MBc1Yjsg=";
})
];
dependencies = [
hass-web-proxy-lib
urlmatch
];
nativeCheckInputs = [
pytestCheckHook
pytest-aiohttp
pytest-cov-stub
pytest-freezer
pytest-homeassistant-custom-component
pytest-timeout
];
meta = {
changelog = "https://github.com/dermotduffy/hass-web-proxy-integration/releases/tag/${src.tag}";
description = "Home Assistant Web Proxy";
homepage = "https://github.com/dermotduffy/hass-web-proxy-integration";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ hexa ];
};
}

View File

@@ -0,0 +1,38 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
jsonpath-ng,
paho-mqtt,
protobuf,
nix-update-script,
}:
buildHomeAssistantComponent rec {
owner = "tolwi";
domain = "ecoflow_cloud";
version = "1.3.0";
src = fetchFromGitHub {
owner = "tolwi";
repo = "hassio-ecoflow-cloud";
tag = "v${version}";
hash = "sha256-CVm5+zLWN/ayhHRNFUr4PLwedwf4GJXvLOFgrh2qxAc=";
};
dependencies = [
jsonpath-ng
paho-mqtt
protobuf
];
passthru.updateScript = nix-update-script { };
meta = {
changelog = "https://github.com/tolwi/hassio-ecoflow-cloud/releases/tag/v${version}";
description = "Home Assistant component for EcoFlow Cloud";
homepage = "https://github.com/tolwi/hassio-ecoflow-cloud";
maintainers = with lib.maintainers; [ ananthb ];
# license = lib.licenses.asl20;
};
}

View File

@@ -0,0 +1,28 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
nix-update-script,
}:
buildHomeAssistantComponent rec {
owner = "megakid";
domain = "hildebrand_glow_ihd";
version = "1.8.0";
src = fetchFromGitHub {
inherit owner;
repo = "ha_hildebrand_glow_ihd_mqtt";
tag = "v${version}";
hash = "sha256-13NmNHaCYDZkWK5uqKeTZlB84UuThNLOAYaPS4QfTKY=";
};
passthru.updateScript = nix-update-script { };
meta = {
changelog = "https://github.com/megakid/ha_hildebrand_glow_ihd_mqtt/releases/tag/${src.tag}";
description = "Home Assistant integration for local MQTT Hildebrand Glow IHD";
homepage = "https://github.com/megakid/ha_hildebrand_glow_ihd_mqtt";
maintainers = with lib.maintainers; [ CodedNil ];
};
}

View File

@@ -0,0 +1,28 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
home-connect-async,
}:
buildHomeAssistantComponent rec {
owner = "ekutner";
domain = "home_connect_alt";
version = "1.3.0-b1";
src = fetchFromGitHub {
owner = "ekutner";
repo = "home-connect-hass";
tag = version;
hash = "sha256-jWrVHwMdzjG0gHWl1NS6WAzdmlmS20BUmh6HzplsGgw=";
};
dependencies = [ home-connect-async ];
meta = with lib; {
description = "Alternative (and improved) Home Connect integration for Home Assistant";
homepage = "https://github.com/ekutner/home-connect-hass";
maintainers = with maintainers; [ kranzes ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,39 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
aiohomematic,
home-assistant,
}:
buildHomeAssistantComponent rec {
owner = "SukramJ";
domain = "homematicip_local";
version = "1.88.1";
src = fetchFromGitHub {
owner = "SukramJ";
repo = "custom_homematic";
tag = version;
hash = "sha256-SAjASZgcpEx/8kiBb8JGifYXnIx2cMbt6c2JNk/n/QU=";
};
postPatch = ''
min_ha_version="$(sed -nr 's/^HMIP_LOCAL_MIN_HA_VERSION.*= "([0-9.]+)"$/\1/p' custom_components/homematicip_local/const.py)"
test \
"$(printf '%s\n' "$min_ha_version" "${home-assistant.version}" | sort -V | head -n1)" = "$min_ha_version" \
|| (echo "error: only Home Assistant >= $min_ha_version is supported" && exit 1)
'';
dependencies = [
aiohomematic
];
meta = {
changelog = "https://github.com/SukramJ/custom_homematic/blob/${src.tag}/changelog.md";
description = "Custom Home Assistant Component for HomeMatic";
homepage = "https://github.com/SukramJ/custom_homematic";
maintainers = with lib.maintainers; [ dotlambda ];
license = lib.licenses.mit;
};
}

View File

@@ -0,0 +1,29 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
pyindego,
}:
buildHomeAssistantComponent rec {
owner = "sander1988";
domain = "indego";
version = "5.7.8";
src = fetchFromGitHub {
owner = "sander1988";
repo = "Indego";
tag = version;
hash = "sha256-7PQUsSPS+o5Vt4Do4/TXyGXAqyHJg96w8n7UMpZ0uFo=";
};
dependencies = [ pyindego ];
meta = with lib; {
description = "Bosch Indego lawn mower component";
changelog = "https://github.com/sander1988/Indego/releases/tag/${version}";
homepage = "https://github.com/sander1988/Indego";
license = licenses.asl20;
maintainers = with maintainers; [ hexa ];
};
}

View File

@@ -0,0 +1,43 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
bluetooth-sensor-state-data,
bleak-retry-connector,
bleak,
nix-update-script,
}:
let
version = "0.0.15.1";
in
buildHomeAssistantComponent {
owner = "8none1";
domain = "lednetwf_ble";
inherit version;
src = fetchFromGitHub {
owner = "8none1";
repo = "lednetwf_ble";
tag = "v${version}";
hash = "sha256-LSVvwJZFtBC+iwxfZ3R8msPvrvimPw2Tjzqw6Dx7ZsM=";
};
dependencies = [
bluetooth-sensor-state-data
bleak-retry-connector
bleak
];
# Currently there are no tests run, so we skip
doCheck = false;
passthru.updateScript = nix-update-script { };
meta = {
description = "Home Assistant custom integration for LEDnetWF devices";
homepage = "https://github.com/8none1/lednetwf_ble";
changelog = "https://github.com/8none1/lednetwf_ble/releases/tag/v${version}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ blenderfreaky ];
};
}

View File

@@ -0,0 +1,26 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
}:
buildHomeAssistantComponent rec {
owner = "lichtteil";
domain = "local_luftdaten";
version = "2.3.1";
src = fetchFromGitHub {
owner = "lichtteil";
repo = "local_luftdaten";
rev = version;
hash = "sha256-68clZgS7Qo62srcZWD3Un9BnNSwQUBr4Z5oBMTC9m8o=";
};
meta = with lib; {
changelog = "https://github.com/lichtteil/local_luftdaten/releases/tag/${version}";
description = "Custom component for Home Assistant that integrates your (own) local Luftdaten sensor (air quality/particle sensor) without using the cloud";
homepage = "https://github.com/lichtteil/local_luftdaten";
license = licenses.mit;
maintainers = with maintainers; [ hexa ];
};
}

View File

@@ -0,0 +1,26 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
}:
buildHomeAssistantComponent rec {
owner = "xZetsubou";
domain = "localtuya";
version = "2025.10.0";
src = fetchFromGitHub {
owner = "xZetsubou";
repo = "hass-localtuya";
tag = version;
hash = "sha256-PjxDPZK/T4meafMFX3WFoA5ur0NPJsbPOxaOuL0+NWg=";
};
meta = with lib; {
changelog = "https://github.com/xZetsubou/hass-localtuya/releases/tag/${version}";
description = "Home Assistant custom Integration for local handling of Tuya-based devices, fork from local-tuya";
homepage = "https://github.com/xZetsubou/hass-localtuya";
maintainers = with maintainers; [ rhoriguchi ];
license = licenses.gpl3Only;
};
}

View File

@@ -0,0 +1,26 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
ruff,
}:
buildHomeAssistantComponent {
owner = "tjhorner";
domain = "luxer";
version = "0-unstable-2023-03-27";
src = fetchFromGitHub {
owner = "tjhorner";
repo = "home-assistant-luxer-one";
rev = "f6a810034ab76e6a8635de755c4a1750e86b1674";
hash = "sha256-WmsL0NLe2ICqNGbEQ4vg1EzcZgIGi++G9aDyKjnmJMs=";
};
meta = {
description = "Home Assistant integration for Luxer One";
homepage = "https://github.com/tjhorner/home-assistant-luxer-one";
license = lib.licenses.mit;
maintainers = [ lib.maintainers.haylin ];
};
}

View File

@@ -0,0 +1,29 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
midea-beautiful-air,
}:
buildHomeAssistantComponent rec {
owner = "nbogojevic";
domain = "midea_dehumidifier_lan";
version = "0.9.6";
src = fetchFromGitHub {
inherit owner;
repo = "homeassistant-midea-air-appliances-lan";
rev = "v${version}";
hash = "sha256-61LAecJRHQi9/Wf4L25HwAMOV5Yzsr8irAnh5xuWJ7c=";
};
dependencies = [ midea-beautiful-air ];
meta = with lib; {
description = "Home Assistant custom component adding support for controlling Midea air conditioners and dehumidifiers on local network";
homepage = "https://github.com/nbogojevic/homeassistant-midea-air-appliances-lan";
changelog = "https://github.com/nbogojevic/homeassistant-midea-air-appliances-lan/releases/tag/v${version}";
maintainers = with maintainers; [ k900 ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,39 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
msmart-ng,
pytestCheckHook,
pytest-homeassistant-custom-component,
}:
buildHomeAssistantComponent rec {
owner = "mill1000";
domain = "midea_ac";
version = "2025.9.1";
src = fetchFromGitHub {
owner = "mill1000";
repo = "midea-ac-py";
tag = version;
hash = "sha256-fmVX+b7x4+172+mcJ8+LFhljQEQrhLFXwXn6eI1f36Y=";
};
dependencies = [ msmart-ng ];
nativeCheckInputs = [
pytest-homeassistant-custom-component
pytestCheckHook
];
meta = with lib; {
changelog = "https://github.com/mill1000/midea-ac-py/releases/tag/${src.tag}";
description = "Home Assistant custom integration to control Midea (and associated brands) air conditioners via LAN";
homepage = "https://github.com/mill1000/midea-ac-py";
license = licenses.mit;
maintainers = with maintainers; [
hexa
emilylange
];
};
}

View File

@@ -0,0 +1,29 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
midea-local,
}:
buildHomeAssistantComponent rec {
owner = "wuwentao";
domain = "midea_ac_lan";
version = "0.6.9";
src = fetchFromGitHub {
inherit owner;
repo = domain;
tag = "v${version}";
hash = "sha256-pPPJFs4earRbh6ovR57k9xgZtrYN0L26eupOoFuBVz8=";
};
dependencies = [ midea-local ];
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/wuwentao/midea_ac_lan/";
changelog = "https://github.com/wuwentao/midea_ac_lan/releases/tag/v${version}";
maintainers = with maintainers; [ k900 ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,36 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
miraie-ac,
aiomqtt,
nix-update-script,
}:
buildHomeAssistantComponent rec {
owner = "rkzofficial";
domain = "miraie";
version = "1.1.6";
src = fetchFromGitHub {
owner = "rkzofficial";
repo = "ha-miraie-ac";
tag = "v${version}";
hash = "sha256-5VpLfTKOLdx8P693jaW4o79CH2NKkgkgl7ai+I6JRQs=";
};
dependencies = [
miraie-ac
aiomqtt
];
passthru.updateScript = nix-update-script { };
meta = {
changelog = "https://github.com/rkzofficial/ha-miraie-ac/releases/tag/v${version}";
description = "Home Assistant component for Miraie ACs";
homepage = "https://github.com/rkzofficial/ha-miraie-ac";
maintainers = with lib.maintainers; [ ananthb ];
license = lib.licenses.asl20;
};
}

View File

@@ -0,0 +1,40 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
pymitsubishi,
pytest-cov-stub,
pytestCheckHook,
pytest-homeassistant-custom-component,
}:
buildHomeAssistantComponent rec {
owner = "pymitsubishi";
domain = "mitsubishi";
version = "0.2.0";
src = fetchFromGitHub {
owner = "pymitsubishi";
repo = "homeassistant-mitsubishi";
tag = "v${version}";
hash = "sha256-V8fT/w7a/uUN4yKJ+jB6UUQDP6dif80MvlqV9n4KENc=";
};
dependencies = [
pymitsubishi
];
nativeCheckInputs = [
pytest-cov-stub
pytestCheckHook
pytest-homeassistant-custom-component
];
meta = with lib; {
description = "Home Assistant Mitsubishi Air Conditioner Integration";
changelog = "https://github.com/pymitsubishi/homeassistant-mitsubishi/releases/tag/v${version}";
homepage = "https://github.com/pymitsubishi/homeassistant-mitsubishi";
maintainers = with maintainers; [ uvnikita ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,45 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
pytestCheckHook,
pytest-cov-stub,
pytest-homeassistant-custom-component,
# dependency
moonraker-api,
}:
buildHomeAssistantComponent rec {
owner = "marcolivierarsenault";
domain = "moonraker";
version = "1.10.0";
src = fetchFromGitHub {
owner = "marcolivierarsenault";
repo = "moonraker-home-assistant";
tag = version;
hash = "sha256-U4vjWFUZlxRPIrK9YXuYzPCMAjdQGoPXewmDessWh+c=";
};
dependencies = [
moonraker-api
];
nativeCheckInputs = [
pytest-homeassistant-custom-component
pytest-cov-stub
pytestCheckHook
];
#skip phases with nothing to do
dontConfigure = true;
meta = with lib; {
changelog = "https://github.com/marcolivierarsenault/moonraker-home-assistant/releases/tag/${version}";
description = "Custom integration for Moonraker and Klipper in Home Assistant";
homepage = "https://github.com/marcolivierarsenault/moonraker-home-assistant";
maintainers = with maintainers; [ _9R ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,28 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
}:
buildHomeAssistantComponent rec {
owner = "iMicknl";
domain = "nest_protect";
version = "0.4.2b0";
src = fetchFromGitHub {
inherit owner;
repo = "ha-nest-protect";
tag = "v${version}";
hash = "sha256-CQVAvx7iRCRHw8YXDmsWaF6fhddx3OfSLjq218+ob6I=";
};
# AttributeError: 'async_generator' object has no attribute 'data'
doCheck = false;
meta = with lib; {
changelog = "https://github.com/iMicknl/ha-nest-protect/releases/tag/v${version}";
description = "Nest Protect integration for Home Assistant";
homepage = "https://github.com/iMicknl/ha-nest-protect";
maintainers = with maintainers; [ jamiemagee ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,33 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
requests,
}:
buildHomeAssistantComponent rec {
owner = "hbrennhaeuser";
domain = "ntfy";
version = "1.2.0";
src = fetchFromGitHub {
inherit owner;
repo = "homeassistant_integration_ntfy";
rev = "v${version}";
hash = "sha256-cy4aHrUdFlMGQt9we0pA8TEGffQEGptZoaSKxwXD4kM=";
};
dependencies = [
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
baksa
];
license = licenses.gpl3;
};
}

View File

@@ -0,0 +1,59 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
pytestCheckHook,
pytest-homeassistant-custom-component,
pydantic,
mock,
nix-update-script,
}:
buildHomeAssistantComponent rec {
owner = "BottlecapDave";
domain = "octopus_energy";
version = "16.3.1";
src = fetchFromGitHub {
inherit owner;
repo = "HomeAssistant-OctopusEnergy";
tag = "v${version}";
hash = "sha256-rn8wCGUYisLgr61Cd2qaQGfSiAtjKMo2wG/AotEXknE=";
};
dependencies = [ pydantic ];
nativeCheckInputs = [
pytestCheckHook
pytest-homeassistant-custom-component
mock
];
disabledTestPaths = [
# Integration tests require a valid Octopus Energy API Key
# https://github.com/BottlecapDave/HomeAssistant-OctopusEnergy/blob/develop/CONTRIBUTING.md#integration-tests
"tests/integration"
"tests/local_integration"
# These unit tests change Home Assistant's default time zone to Europe/London
# without restoring it, which fails pytest-homeassistant-custom-component's
# teardown
"tests/unit/utils/test_get_off_peak_cost.py::test_when_rates_available_and_bst_then_off_peak_cost_returned"
"tests/unit/utils/test_dict_to_typed_dict.py::test_when_utc_datetime_is_present_during_bst_then_converted_to_correct_datetime"
];
passthru.updateScript = nix-update-script {
extraArgs = [
# Ignore pre-release versions ("beta")
"--version-regex=^v([0-9]+\\.[0-9]+\\.[0-9])$"
];
};
meta = {
changelog = "https://github.com/BottlecapDave/HomeAssistant-OctopusEnergy/releases/tag/v${version}";
description = "Unofficial Home Assistant integration for interacting with Octopus Energy";
homepage = "https://github.com/BottlecapDave/HomeAssistant-OctopusEnergy";
maintainers = [ lib.maintainers.matteopacini ];
license = lib.licenses.mit;
};
}

View File

@@ -0,0 +1,33 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
omnikinverter,
}:
buildHomeAssistantComponent rec {
owner = "robbinjanssen";
domain = "omnik_inverter";
version = "2.6.4";
src = fetchFromGitHub {
owner = "robbinjanssen";
repo = "home-assistant-omnik-inverter";
tag = "v${version}";
hash = "sha256-O1NxT7u27xLydPqEqH72laU0tlYVrMPo0TwWIVNJ+0Q=";
};
dependencies = [
omnikinverter
];
doCheck = false; # no tests
meta = with lib; {
changelog = "https://github.com/robbinjanssen/home-assistant-omnik-inverter/releases/tag/v${version}";
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;
};
}

View File

@@ -0,0 +1,46 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
aiofiles,
shapely,
paho-mqtt,
pytestCheckHook,
pytest-homeassistant-custom-component,
pytest-freezer,
}:
buildHomeAssistantComponent rec {
owner = "amitfin";
domain = "oref_alert";
version = "3.2.4";
src = fetchFromGitHub {
owner = "amitfin";
repo = "oref_alert";
tag = "v${version}";
hash = "sha256-+kZOwepyfehETfRDeA4w0eTaGSvkXNzG5rL2wdAKOy8=";
};
dependencies = [
aiofiles
shapely
paho-mqtt
];
ignoreVersionRequirement = [ "shapely" ];
nativeCheckInputs = [
pytestCheckHook
pytest-homeassistant-custom-component
pytest-freezer
];
meta = {
changelog = "https://github.com/amitfin/oref_alert/releases/tag/v${version}";
description = "Israeli Oref Alerts";
homepage = "https://github.com/amitfin/oref_alert";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ kranzes ];
};
}

View File

@@ -0,0 +1,37 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
aioairctrl,
getmac,
}:
buildHomeAssistantComponent rec {
owner = "kongo09";
domain = "philips_airpurifier_coap";
version = "0.34.3";
src = fetchFromGitHub {
inherit owner;
repo = "philips-airpurifier-coap";
rev = "v${version}";
hash = "sha256-jZmFvozkmmCCeKmdOV/FKXj0V8iGP3tnAqED/PBZrrY=";
};
dependencies = [
aioairctrl
getmac
];
ignoreVersionRequirement = [
"getmac"
];
meta = {
description = "Philips AirPurifier custom component for Home Assistant";
homepage = "https://github.com/kongo09/philips-airpurifier-coap";
license = lib.licenses.unfree; # See https://github.com/kongo09/philips-airpurifier-coap/issues/209
maintainers = with lib.maintainers; [ justinas ];
};
}

View File

@@ -0,0 +1,25 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
}:
buildHomeAssistantComponent rec {
owner = "samoswall";
domain = "polaris";
version = "1.0.10";
src = fetchFromGitHub {
owner = "samoswall";
repo = "polaris-mqtt";
tag = "v${version}";
hash = "sha256-GxNGZISV/YjMLH2hpoyuyKGvRDiZ3ejI2eJ7o00dqK8=";
};
meta = {
description = "Polaris IQ Home devices integration to Home Assistant";
homepage = "https://github.com/samoswall/polaris-mqtt";
license = lib.licenses.gpl3Only;
maintainers = [ lib.maintainers.k900 ];
};
}

View File

@@ -0,0 +1,26 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
}:
buildHomeAssistantComponent rec {
owner = "mweinelt";
domain = "prometheus_sensor";
version = "1.1.3";
src = fetchFromGitHub {
owner = "mweinelt";
repo = "ha-prometheus-sensor";
tag = version;
hash = "sha256-d13KJXgRPWrR2ilpEgZbVS/a6/y7DBRdEiGLpBaBsPc=";
};
meta = with lib; {
changelog = "https://github.com/mweinelt/ha-prometheus-sensor/blob/${version}/CHANGELOG.md";
description = "Import prometheus query results into Home Assistant";
homepage = "https://github.com/mweinelt/ha-prometheus-sensor";
maintainers = with maintainers; [ hexa ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,33 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
rctclient,
}:
buildHomeAssistantComponent rec {
owner = "weltenwort";
domain = "rct_power";
version = "v0.14.1";
src = fetchFromGitHub {
owner = "weltenwort";
repo = "home-assistant-rct-power-integration";
tag = version;
hash = "sha256-wM66MyRhBsMfUr+KlqV4jSuXcnKfW0fkbDAyuU2crsc=";
};
dependencies = [
rctclient
];
doCheck = false; # no tests
meta = with lib; {
changelog = "https://github.com/weltenwort/home-assistant-rct-power-integration/releases/tag/${src.tag}";
description = "Custom integration for RCT Power Inverters";
homepage = "https://github.com/weltenwort/home-assistant-rct-power-integration";
maintainers = with maintainers; [ _9R ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,25 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
}:
buildHomeAssistantComponent rec {
owner = "Lash-L";
domain = "roborock_custom_map";
version = "0.1.1";
src = fetchFromGitHub {
owner = "Lash-L";
repo = "RoborockCustomMap";
tag = version;
hash = "sha256-ZKaUTUTN0tTW8bks0TYixfmbEa7A7ERdJ+xZ365HEbU=";
};
meta = {
description = "This allows you to use the core Roborock integration with the Xiaomi Map Card";
homepage = "https://github.com/Lash-L/RoborockCustomMap";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ kranzes ];
};
}

View File

@@ -0,0 +1,37 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
aiofiles,
casttube,
websocket-client,
wakeonlan,
}:
buildHomeAssistantComponent rec {
owner = "ollo69";
domain = "samsungtv_smart";
version = "0.14.5";
src = fetchFromGitHub {
owner = "ollo69";
repo = "ha-samsungtv-smart";
tag = "v${version}";
hash = "sha256-J3+HD/jMJDIBSiVJnHvjOJ3yswck+DV3XpPqIoR5/sU=";
};
dependencies = [
aiofiles
casttube
websocket-client
wakeonlan
];
meta = with lib; {
changelog = "https://github.com/ollo69/ha-samsungtv-smart/releases/tag/v${version}";
description = "Home Assistant Samsung TV Integration";
homepage = "https://github.com/ollo69/ha-samsungtv-smart";
maintainers = with maintainers; [ mindstorms6 ];
license = licenses.asl20;
};
}

View File

@@ -0,0 +1,30 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
websockets,
}:
buildHomeAssistantComponent rec {
owner = "iprak";
domain = "sensi";
version = "1.4.2";
src = fetchFromGitHub {
inherit owner;
repo = domain;
tag = "v${version}";
hash = "sha256-IMtM9tD1F4vbvICNovuzXZ9+4TBlNCaID+0P17cRieY=";
};
dependencies = [
websockets
];
meta = with lib; {
changelog = "https://github.com/iprak/sensi/releases/tag/v${version}";
description = "HomeAssistant integration for Sensi thermostat";
homepage = "https://github.com/iprak/sensi";
maintainers = with maintainers; [ ivan ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,65 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
pyhaversion,
nix-update-script,
# Test dependencies
pytestCheckHook,
pytest-homeassistant-custom-component,
aiohttp-cors,
paho-mqtt,
}:
let
version = "2.3.2";
in
buildHomeAssistantComponent {
owner = "IATkachenko";
domain = "sleep_as_android";
inherit version;
src = fetchFromGitHub {
owner = "IATkachenko";
repo = "HA-SleepAsAndroid";
tag = "v${version}";
hash = "sha256-aJKjHZcRdmiXJdtWRY4fv5oxCHTDIVpvZEwhIE9ISv8=";
};
dependencies = [
pyhaversion
];
nativeCheckInputs = [
pytestCheckHook
pytest-homeassistant-custom-component
aiohttp-cors
paho-mqtt
];
pytestFlags = [
# Fixes `AttributeError: 'async_generator' object has no attribute 'data'`
# See https://github.com/MatthewFlamm/pytest-homeassistant-custom-component/issues/158
"--asyncio-mode=auto"
];
disabledTests = [
# Broken on upstream, see https://github.com/IATkachenko/HA-SleepAsAndroid/issues/85
# AttributeError: module 'homeassistant.data_entry_flow' has no attribute 'RESULT_TYPE_FORM'
"test_successful_config_flow"
"test_options_flow"
# Likely fails due to --asyncio-mode=auto
# TypeError: object MagicMock can't be used in 'await' expression
"test_async_setup_entry"
];
passthru.updateScript = nix-update-script { };
meta = {
description = "Sleep As Android integration for Home Assistant";
homepage = "https://github.com/IATkachenko/HA-SleepAsAndroid";
changelog = "https://github.com/IATkachenko/HA-SleepAsAndroid/releases/tag/v${version}";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ blenderfreaky ];
};
}

View File

@@ -0,0 +1,40 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
aiofiles,
distutils,
nix-update-script,
}:
buildHomeAssistantComponent rec {
owner = "smartHomeHub";
domain = "smartir";
version = "1.18.1";
src = fetchFromGitHub {
owner = "smartHomeHub";
repo = "SmartIR";
tag = version;
hash = "sha256-gi5xlBOY6ek5roQKNqL7I0jrmJNPrxHHwEqOB/n2Itk=";
};
dependencies = [
aiofiles
distutils
];
postInstall = ''
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)";
homepage = "https://github.com/smartHomeHub/SmartIR";
maintainers = with maintainers; [ azuwis ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,35 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
charset-normalizer,
pycountry,
xmltodict,
}:
buildHomeAssistantComponent rec {
owner = "ollo69";
domain = "smartthinq_sensors";
version = "0.41.2";
src = fetchFromGitHub {
inherit owner;
repo = "ha-smartthinq-sensors";
rev = "v${version}";
hash = "sha256-HNhW72aoYu0Vosq8o0lyxDse8jcs3kVWEzDw/5VQn9g=";
};
dependencies = [
charset-normalizer
pycountry
xmltodict
];
meta = with lib; {
description = "Home Assistant custom integration for SmartThinQ LG devices configurable with Lovelace User Interface";
homepage = "https://github.com/ollo69/ha-smartthinq-sensors";
changelog = "https://github.com/ollo69/ha-smartthinq-sensors/releases/tag/v${version}";
maintainers = with maintainers; [ k900 ];
license = licenses.asl20;
};
}

View File

@@ -0,0 +1,33 @@
{
buildHomeAssistantComponent,
fetchFromGitHub,
lib,
pysolarmanv5,
pyyaml,
}:
buildHomeAssistantComponent rec {
owner = "StephanJoubert";
domain = "solarman";
version = "1.5.1";
src = fetchFromGitHub {
owner = "StephanJoubert";
repo = "home_assistant_solarman";
tag = version;
hash = "sha256-+znRq7LGIxbxMEypIRqbIMgV8H4OyiOakmExx1aHEl8=";
};
dependencies = [
pysolarmanv5
pyyaml
];
meta = {
description = "Home Assistant component for Solarman collectors used with a variety of inverters";
changelog = "https://github.com/StephanJoubert/home_assistant_solarman/releases/tag/${version}";
homepage = "https://github.com/StephanJoubert/home_assistant_solarman";
maintainers = with lib.maintainers; [ Scrumplex ];
license = lib.licenses.asl20;
};
}

View File

@@ -0,0 +1,29 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
pymodbus,
}:
buildHomeAssistantComponent rec {
owner = "wills106";
domain = "solax_modbus";
version = "2025.10.1";
src = fetchFromGitHub {
owner = "wills106";
repo = "homeassistant-solax-modbus";
tag = version;
hash = "sha256-cmSaVg/v/rledIY980BJyGaLN3CQtCGMextN2WzOmXk=";
};
dependencies = [ pymodbus ];
meta = {
changelog = "https://github.com/wills106/homeassistant-solax-modbus/releases/tag/${version}";
description = "SolaX Power Modbus custom_component for Home Assistant (Supports some Ginlong Solis, Growatt, Sofar Solar, TIGO TSI & Qcells Q.Volt Hyb)";
homepage = "https://github.com/wills106/homeassistant-solax-modbus";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ Luflosi ];
};
}

View File

@@ -0,0 +1,34 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
aiofiles,
nix-update-script,
}:
buildHomeAssistantComponent rec {
owner = "hultenvp";
domain = "solis";
version = "4.0.1";
src = fetchFromGitHub {
owner = "hultenvp";
repo = "solis-sensor";
rev = "v${version}";
hash = "sha256-53bRd+Zz46Mxiycpa8h4DXc9wUFmkczNtpteTkci4Q0=";
};
dependencies = [ aiofiles ];
dontCheckManifest = true; # aiofiles version constraint mismatch
passthru.updateScript = nix-update-script { };
meta = with lib; {
description = "Home Assistant integration for the SolisCloud PV Monitoring portal via SolisCloud API";
changelog = "https://github.com/hultenvp/solis-sensor/releases/tag/v${version}";
homepage = "https://github.com/hultenvp/solis-sensor";
license = licenses.asl20;
maintainers = [ ];
};
}

View File

@@ -0,0 +1,29 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
somweb,
}:
buildHomeAssistantComponent rec {
owner = "taarskog";
domain = "somweb";
version = "1.1.0";
src = fetchFromGitHub {
inherit owner;
repo = "home-assistant-component-somweb";
tag = "v${version}";
hash = "sha256-anOcpaGeblFVaP2EFVuxx1EuXnNgxy/QoYqvYJMv1Fo=";
};
dependencies = [ somweb ];
meta = with lib; {
changelog = "https://github.com/taarskog/home-assistant-component-somweb/releases/tag/v${version}";
description = "Custom component for Home Assistant to manage garage doors and gates by Sommer through SOMweb";
homepage = "https://github.com/taarskog/home-assistant-component-somweb";
maintainers = with maintainers; [ uvnikita ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,43 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
pillow,
fnv-hash-fast,
psutil-home-assistant,
sqlalchemy,
}:
buildHomeAssistantComponent rec {
owner = "frenck";
domain = "spook";
version = "4.0.1";
src = fetchFromGitHub {
inherit owner;
repo = domain;
tag = "v${version}";
hash = "sha256-0IihrhATgraGmuMRnrbGTUrtlXAR+CooENSIKSWIknY=";
};
patches = [ ./remove-sub-integration-symlink-hack.patch ];
postPatch = ''
substituteInPlace custom_components/spook/manifest.json \
--replace-fail '"version": "0.0.0"' '"version": "${version}"'
'';
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 ];
};
}

View File

@@ -0,0 +1,109 @@
diff --git a/custom_components/spook/__init__.py b/custom_components/spook/__init__.py
index 1abc79d..68d48d1 100644
--- a/custom_components/spook/__init__.py
+++ b/custom_components/spook/__init__.py
@@ -22,8 +22,6 @@ from .services import SpookServiceManager
from .util import (
async_forward_setup_entry,
async_setup_all_entity_ids_cache_invalidation,
- link_sub_integrations,
- unlink_sub_integrations,
)
if TYPE_CHECKING:
@@ -35,48 +33,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",
- )
# Forward async_setup_entry to ectoplasms
await async_forward_setup_entry(hass, entry)
@@ -131,4 +87,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 6aea27c..1437913 100644
--- a/custom_components/spook/util.py
+++ b/custom_components/spook/util.py
@@ -284,37 +284,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_get_all_area_ids(hass: HomeAssistant) -> set[str]:
"""Return all area IDs, known to Home Assistant."""

View File

@@ -0,0 +1,26 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
}:
buildHomeAssistantComponent rec {
owner = "pnbruckner";
domain = "sun2";
version = "3.4.1";
src = fetchFromGitHub {
inherit owner;
repo = "ha-sun2";
tag = version;
hash = "sha256-VzlwmAzebxykE9rIhAiAFkEOvbh2UkgNMGQaysDA9D4=";
};
meta = rec {
description = "Home Assistant Sun2 sensor";
homepage = "https://github.com/pnbruckner/ha-sun2";
changelog = "${homepage}/releases/tag/${version}";
maintainers = with lib.maintainers; [ sephalon ];
license = lib.licenses.unlicense;
};
}

View File

@@ -0,0 +1,26 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
}:
buildHomeAssistantComponent rec {
owner = "tesharp";
domain = "systemair";
version = "0.2.0";
src = fetchFromGitHub {
inherit owner;
repo = "systemair";
tag = "v${version}";
hash = "sha256-lzFnKPkBOt2fkVGWCj1M/skSr8V39GgDHS+0HD4ACAw=";
};
meta = with lib; {
changelog = "https://github.com/tesharp/systemair/releases/tag/v${version}";
description = "Home Assistant component for Systemair SAVE Connect 2";
homepage = "https://github.com/tesharp/systemair";
maintainers = with maintainers; [ uvnikita ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,35 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
# dependencies
tinytuya,
tuya-device-sharing-sdk,
}:
buildHomeAssistantComponent rec {
owner = "make-all";
domain = "tuya_local";
version = "2025.7.1";
src = fetchFromGitHub {
inherit owner;
repo = "tuya-local";
tag = version;
hash = "sha256-RIvtz6f3Jj4INvL0JdL+EsFUoLoG9vQNn5iPq2nF26I=";
};
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 ];
};
}

View File

@@ -0,0 +1,29 @@
{
buildHomeAssistantComponent,
fetchFromGitHub,
lib,
gitUpdater,
}:
buildHomeAssistantComponent rec {
owner = "jmcollin78";
domain = "versatile_thermostat";
version = "7.3.5";
src = fetchFromGitHub {
inherit owner;
repo = domain;
rev = "refs/tags/${version}";
hash = "sha256-oX1C7N1i1ssmLgYv0uL2MQm3SCNMNKvBm6xLhfN3qKk=";
};
passthru.updateScript = gitUpdater { ignoredVersions = "(Alpha|Beta|alpha|beta).*"; };
meta = {
changelog = "https://github.com/jmcollin78/versatile_thermostat/releases/tag/${version}";
description = "Full-featured thermostat";
homepage = "https://github.com/jmcollin78/versatile_thermostat";
maintainers = with lib.maintainers; [ pwoelfel ];
license = lib.licenses.mit;
};
}

View File

@@ -0,0 +1,36 @@
{
ascii-magic,
buildHomeAssistantComponent,
fetchFromGitHub,
lib,
weconnect,
}:
buildHomeAssistantComponent rec {
owner = "mitch-dc";
domain = "volkswagen_we-connect_id";
version = "0.2.6";
src = fetchFromGitHub {
inherit owner;
repo = "volkswagen_we_connect_id";
tag = "v${version}";
hash = "sha256-f5guxLE93QtTPV1zw1313bzF521pVr0vsUa3hzcRmJo=";
};
dependencies = [
ascii-magic
weconnect
];
# upstream has no tests
doCheck = false;
meta = {
changelog = "https://github.com/mitch-dc/volkswagen_we_connect_id/releases/tag/v${version}";
description = "Statistics from the Volkswagen ID API";
homepage = "https://github.com/mitch-dc/volkswagen_we_connect_id";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ dotlambda ];
};
}

View File

@@ -0,0 +1,38 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
volkswagencarnet,
pytest-homeassistant-custom-component,
pytestCheckHook,
}:
buildHomeAssistantComponent rec {
owner = "robinostlund";
domain = "volkswagencarnet";
version = "5.0.3";
src = fetchFromGitHub {
owner = "robinostlund";
repo = "homeassistant-volkswagencarnet";
tag = "v${version}";
hash = "sha256-3wykS2TYjr9hoQSPc1F3m5aDiLW1tzvQfjfjnr4N2Y0=";
};
dependencies = [ volkswagencarnet ];
nativeCheckInputs = [
pytest-homeassistant-custom-component
pytestCheckHook
];
# https://github.com/robinostlund/homeassistant-volkswagencarnet/issues/651
doCheck = false;
meta = {
description = "Volkswagen Connect component for Home Assistant";
homepage = "https://github.com/robinostlund/homeassistant-volkswagencarnet";
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [ dotlambda ];
};
}

View File

@@ -0,0 +1,29 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
}:
buildHomeAssistantComponent rec {
owner = "thomasddn";
domain = "volvo_cars";
version = "1.5.7";
src = fetchFromGitHub {
owner = "thomasddn";
repo = "ha-volvo-cars";
tag = "v${version}";
hash = "sha256-2wRqEa7jVumbRNCGrFa0gYEzgGwUrMnW2A8JhPTTMCc=";
};
meta = {
changelog = "https://github.com/thomasddn/ha-volvo-cars/releases/tag/${src.tag}";
homepage = "https://github.com/thomasddn/ha-volvo-cars";
description = "Volvo Cars Home Assistant integration";
maintainers = with lib.maintainers; [
matteopacini
seberm
];
license = lib.licenses.gpl3Only;
};
}

View File

@@ -0,0 +1,41 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
beautifulsoup4,
icalendar,
icalevents,
lxml,
pycryptodome,
pypdf,
}:
buildHomeAssistantComponent rec {
owner = "mampfes";
domain = "waste_collection_schedule";
version = "2.10.0";
src = fetchFromGitHub {
inherit owner;
repo = "hacs_waste_collection_schedule";
tag = version;
hash = "sha256-qFeo2VE0sgBq4dwOUm26Vkgi+rv/0PsOyQhlVEJ45aE=";
};
dependencies = [
beautifulsoup4
icalendar
icalevents
lxml
pycryptodome
pypdf
];
meta = with lib; {
changelog = "https://github.com/mampfes/hacs_waste_collection_schedule/releases/tag/${version}";
description = "Home Assistant integration framework for (garbage collection) schedules";
homepage = "https://github.com/mampfes/hacs_waste_collection_schedule";
maintainers = with maintainers; [ jamiemagee ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,32 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
zigpy,
nix-update-script,
}:
buildHomeAssistantComponent rec {
owner = "AlexxIT";
domain = "xiaomi_gateway3";
version = "4.1.3";
src = fetchFromGitHub {
owner = "AlexxIT";
repo = "XiaomiGateway3";
rev = "v${version}";
hash = "sha256-CcJoXD60z91Gahv5pVrWaIpUNhetW0BN1Nd4DAVRPJs=";
};
dependencies = [ zigpy ];
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";
homepage = "https://github.com/AlexxIT/XiaomiGateway3";
maintainers = with maintainers; [ azuwis ];
license = licenses.mit;
};
}

View File

@@ -0,0 +1,59 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
construct,
paho-mqtt,
numpy,
cryptography,
psutil-home-assistant,
nix-update-script,
}:
buildHomeAssistantComponent rec {
owner = "XiaoMi";
domain = "xiaomi_home";
version = "0.4.2";
src = fetchFromGitHub {
owner = "XiaoMi";
repo = "ha_xiaomi_home";
rev = "v${version}";
hash = "sha256-X8AP2pFGhkh4f72+pORXBB8yOqgIqJ+SLrQx5gwKxEg=";
};
dependencies = [
construct
paho-mqtt
numpy
cryptography
psutil-home-assistant
];
passthru.updateScript = nix-update-script { extraArgs = [ "--version-regex=^v([0-9.]+)$" ]; };
meta = {
changelog = "https://github.com/XiaoMi/ha_xiaomi_home/releases/tag/v${version}";
description = "Xiaomi Home Integration for Home Assistant";
longDescription = ''
Xiaomi Home Integration for Home Assistant depends on additional components, example how to setup in NixOS `configuration.nix`:
```
{ config, lib, pkgs, ... }:
{
services.home-assistant = {
customComponents = [ pkgs.home-assistant-custom-components.xiaomi_home ];
extraComponents = [ "ffmpeg" "zeroconf" ];
};
# OAuth2 Redirect URL is hardcoded as http://homeassistant.local:8123
# Make sure you can access HA via this URL with mDNS
services.avahi.hostName = "homeassistant";
networking.firewall.allowedTCPPorts = [ 8123 ];
}
```
'';
homepage = "https://github.com/XiaoMi/ha_xiaomi_home";
maintainers = with lib.maintainers; [ MakiseKurisu ];
license = lib.licenses.unfree;
};
}

View File

@@ -0,0 +1,51 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
construct,
micloud,
python-miio,
nix-update-script,
}:
buildHomeAssistantComponent rec {
owner = "al-one";
domain = "xiaomi_miot";
version = "1.1.0";
src = fetchFromGitHub {
owner = "al-one";
repo = "hass-xiaomi-miot";
rev = "v${version}";
hash = "sha256-nTxi8bKelHbhs1ivmr+LGHLMrnlRUQYfy+ARHdeVM0Q=";
};
dependencies = [
construct
micloud
python-miio
];
passthru.updateScript = nix-update-script { extraArgs = [ "--version-regex=^v([0-9.]+)$" ]; };
meta = {
changelog = "https://github.com/al-one/hass-xiaomi-miot/releases/tag/v${version}";
description = "Automatic integrate all Xiaomi devices to HomeAssistant via miot-spec, support Wi-Fi, BLE, ZigBee devices";
longDescription = ''
Xiaomi Miot For HomeAssistant depends on `ffmpeg` and `homekit`, example how to setup in NixOS `configuration.nix`:
```
{ config, lib, pkgs, ... }:
{
services.home-assistant = {
customComponents = [ pkgs.home-assistant-custom-components.xiaomi_miot ];
extraComponents = [ "ffmpeg" "homekit" ];
};
}
```
'';
homepage = "https://github.com/al-one/hass-xiaomi-miot";
maintainers = with lib.maintainers; [ azuwis ];
license = lib.licenses.asl20;
};
}

View File

@@ -0,0 +1,48 @@
{
lib,
buildHomeAssistantComponent,
fetchFromGitHub,
zeroconf,
pytestCheckHook,
home-assistant,
}:
buildHomeAssistantComponent rec {
owner = "AlexxIT";
domain = "yandex_station";
version = "3.20.1";
src = fetchFromGitHub {
owner = "AlexxIT";
repo = "YandexStation";
tag = "v${version}";
hash = "sha256-AP0GAJrGZq2z0HlsARfhVZiv7yaeOKg05GjV95ljVdU=";
};
dependencies = [
zeroconf
];
disabledTests = [
# 'µg/m³' vs 'μg/m³'
"test_sensor_qingping"
];
disabledTestPaths = [
# this test seems to be broken
"tests/test_local.py::test_track"
];
nativeCheckInputs = [
home-assistant
pytestCheckHook
]
++ (home-assistant.getPackages "stream" home-assistant.python.pkgs);
meta = {
changelog = "https://github.com/AlexxIT/YandexStation/releases/tag/${src.tag}";
description = "Controlling Yandex.Station and other smart home devices with Alice from Home Assistant";
homepage = "https://github.com/AlexxIT/YandexStation";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ ferrine ];
};
}

View File

@@ -0,0 +1,31 @@
{
lib,
fetchFromGitHub,
buildHomeAssistantComponent,
yoto-api,
}:
buildHomeAssistantComponent rec {
owner = "cdnninja";
domain = "yoto";
version = "1.24.5";
src = fetchFromGitHub {
owner = "cdnninja";
repo = "yoto_ha";
tag = "v${version}";
hash = "sha256-z9BrZAjjtt9EC84CzDe3AzmJHQtCBLgEoWrCJpOPBK0=";
};
dependencies = [
yoto-api
];
meta = with lib; {
changelog = "https://github.com/cdnninja/yoto_ha/releases/tag/${src.tag}";
description = "Home Assistant Integration for Yoto";
homepage = "https://github.com/cdnninja/yoto_ha";
maintainers = with maintainers; [ seberm ];
license = licenses.mit;
};
}