nixpkgs/pkgs/servers/home-assistant/custom-components
Janne Heß fcc95ff817 treewide: Fix all Nix ASTs in all markdown files
This allows for correct highlighting and maybe future automatic
formatting. The AST was verified to work with nixfmt only.
2024-03-28 09:28:12 +01:00
..
adaptive_lighting home-assistant-custom-components.adaptive_lighting: init at 1.19.1 2023-12-07 16:25:26 +01:00
auth-header home-assistant-custom-components.auth-header: init at 1.10-unstable-2024-02-26 2024-03-02 13:22:01 -07:00
better_thermostat treewide: remove licenses.agpl3 2024-03-21 18:09:24 +02:00
emporia_vue home-assistant-custom-components.emporia_vue: init at 0.8.3 2024-02-06 19:18:37 -08:00
epex_spot home-assistant0-custom-components.epex_spot: init at v2.3.5 (#296362) 2024-03-16 13:35:24 +01:00
frigate home-assistant-custom-components.frigate: init at 5.1.0 2024-03-20 19:10:31 -07:00
govee-lan home-assistant.custom-components.govee-lan: init at unstable-2023-06-10 2023-12-08 13:13:01 +01:00
gpio home-assistant-custom-components.gpio: 0.0.2 -> 0.0.4 2024-02-12 19:11:22 +01:00
homematicip_local home-assistant-custom-components.homematicip_local: init at 1.58.0 2024-03-23 17:09:29 -07:00
localtuya home-assistant-custom-components.localtuya: init at 5.2.1 2024-01-31 00:25:24 +01:00
miele home-assistant-custom-components.miele: init at 0.1.19 2023-12-06 10:54:50 -08:00
moonraker home-assistant-custom-components.moonraker: init at v1.1.1 (#296366) 2024-03-16 13:37:58 +01:00
omnik_inverter home-assistant custom component omnik_inverter: init at v2.6.4 (#296085) 2024-03-15 15:01:40 +01:00
prometheus_sensor
sensi home-assistant-custom-components.sensi: 1.3.1 -> 1.3.4 2024-03-21 03:53:58 +00:00
waste_collection_schedule home-assistant-custom-components.waste_collection_schedule: init at 1.44.0 2023-12-18 10:46:18 -08:00
default.nix home-assistant-custom-components.homematicip_local: init at 1.58.0 2024-03-23 17:09:29 -07:00
README.md treewide: Fix all Nix ASTs in all markdown files 2024-03-28 09:28:12 +01:00

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 propagatedBuildInputs, 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:

{ lib
, buildHomeAssistantcomponent
, fetchFromGitHub
}:

buildHomeAssistantComponent {
  # owner, domain, version

  src = fetchFromGithub {
    # owner, repo, rev, hash
  };

  propagatedBuildInputs = [
    # 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 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.