nixos/home-assistant-matter-hub: init

This commit is contained in:
Ilan Joselevich
2026-04-26 20:03:55 +03:00
parent b89e748477
commit 3128eb648b
2 changed files with 101 additions and 0 deletions
+1
View File
@@ -728,6 +728,7 @@
./services/home-automation/esphome.nix
./services/home-automation/evcc.nix
./services/home-automation/govee2mqtt.nix
./services/home-automation/home-assistant-matter-hub.nix
./services/home-automation/home-assistant.nix
./services/home-automation/homebridge.nix
./services/home-automation/matter-server.nix
@@ -0,0 +1,100 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.home-assistant-matter-hub;
settingsFormat = pkgs.formats.json { };
configFile = settingsFormat.generate "home-assistant-matter-hub.json" cfg.settings;
in
{
meta.maintainers = with lib.maintainers; [
kranzes
marie
];
options.services.home-assistant-matter-hub = {
enable = lib.mkEnableOption "home-assistant-matter-hub, a Matter bridge for Home Assistant";
package = lib.mkPackageOption pkgs "home-assistant-matter-hub" { };
openFirewall = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to open the Matter commissioning ports (UDP/TCP 5540) in the
firewall.
'';
};
accessTokenFile = lib.mkOption {
type = lib.types.externalPath;
example = "/run/secrets/home-assistant-matter-hub-token";
description = ''
Path to a file containing a Home Assistant long-lived access token.
The file is loaded as a systemd credential and read into
`HAMH_HOME_ASSISTANT_ACCESS_TOKEN` at service start.
'';
};
settings = lib.mkOption {
type = lib.types.submodule {
freeformType = settingsFormat.type;
options = {
homeAssistantUrl = lib.mkOption {
type = lib.types.str;
example = lib.literalExpression "config.services.home-assistant.config.homeassistant.internal_url";
description = "HTTP URL of the Home Assistant instance to bridge.";
};
httpPort = lib.mkOption {
type = lib.types.port;
default = 8482;
description = "Port the web interface listens on.";
};
};
};
default = { };
example = lib.literalExpression ''
{
homeAssistantUrl = config.services.home-assistant.config.homeassistant.internal_url;
}
'';
description = ''
Configuration written to a JSON file and passed to
`home-assistant-matter-hub start --config`. Keys use camelCase, matching
the long-form CLI flags. See
<https://riddix.github.io/home-assistant-matter-hub/getting-started/installation#23-configuration-options>
for the full list of options.
'';
};
};
config = lib.mkIf cfg.enable {
networking.firewall = lib.mkIf cfg.openFirewall {
allowedTCPPorts = [ 5540 ];
allowedUDPPorts = [ 5540 ];
};
systemd.services.home-assistant-matter-hub = {
description = "Home Assistant Matter Hub";
documentation = [ "https://riddix.github.io/home-assistant-matter-hub/" ];
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
script = ''
export HAMH_HOME_ASSISTANT_ACCESS_TOKEN=$(systemd-creds cat HAMH_HOME_ASSISTANT_ACCESS_TOKEN)
exec ${lib.getExe cfg.package} start --config=${configFile} --storage-location="$1"
'';
scriptArgs = "%S/home-assistant-matter-hub";
serviceConfig = {
LoadCredential = [ "HAMH_HOME_ASSISTANT_ACCESS_TOKEN:${cfg.accessTokenFile}" ];
DynamicUser = true;
StateDirectory = "home-assistant-matter-hub";
};
};
};
}