d1299ed112
UI-saved automations land in /var/lib/hass/automations.yaml, but HA won't load them unless configuration.yaml has \`automation: !include automations.yaml\`. The Nix-managed config didn't have it, so HA's post-save reload found no automations and timed out. The NixOS HA module's renderYAMLFile post-processes the generated YAML to convert quoted bang-strings into real YAML tags (see the sed step in nixos/modules/services/home-automation/home-assistant.nix), so a plain Nix string is enough — no escape-hatch needed. Pre-create the three include targets via systemd.tmpfiles so HA doesn't fail at startup if the user hasn't saved anything yet. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
77 lines
2.0 KiB
Nix
77 lines
2.0 KiB
Nix
# manages home automations
|
|
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
self,
|
|
...
|
|
}:
|
|
let
|
|
cfg = config.my.profiles.home-assistant;
|
|
hostName = config.networking.hostName;
|
|
in
|
|
{
|
|
imports = [
|
|
# services.openthread-border-router isn't in nixos-25.11; pull from
|
|
# nixpkgs-unstable. Package comes from the existing unstable overlay.
|
|
"${self.inputs.nixpkgs-unstable}/nixos/modules/services/home-automation/openthread-border-router.nix"
|
|
];
|
|
|
|
options.my.profiles.home-assistant = with lib; {
|
|
enable = mkEnableOption "Home Automation";
|
|
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
services.matter-server.enable = true;
|
|
|
|
services.home-assistant = {
|
|
enable = true;
|
|
openFirewall = true;
|
|
extraComponents = [
|
|
"matter"
|
|
"mobile_app"
|
|
"otbr"
|
|
"thread"
|
|
];
|
|
};
|
|
services.home-assistant.config = {
|
|
homeassistant = {
|
|
name = "Home - Rechberg";
|
|
unit_system = "metric";
|
|
};
|
|
mobile_app = {};
|
|
automation = "!include automations.yaml";
|
|
script = "!include scripts.yaml";
|
|
scene = "!include scenes.yaml";
|
|
};
|
|
|
|
# `!include` targets must exist or HA fails at startup. Create them empty
|
|
# so HA's UI editor can write to them; `f` only acts if the file is absent.
|
|
systemd.tmpfiles.rules = [
|
|
"f /var/lib/hass/automations.yaml 0644 hass hass - []"
|
|
"f /var/lib/hass/scripts.yaml 0644 hass hass - {}"
|
|
"f /var/lib/hass/scenes.yaml 0644 hass hass - []"
|
|
];
|
|
|
|
services.openthread-border-router = {
|
|
enable = true;
|
|
package = pkgs.unstable.openthread-border-router;
|
|
openFirewall = true;
|
|
backboneInterfaces = [ "enp3s0" ];
|
|
radio.device = "/dev/serial/by-id/usb-Nabu_Casa_ZBT-2_DCB4D9149C7C-if00";
|
|
radio.baudRate = 460800;
|
|
};
|
|
|
|
my.homepage.services = [
|
|
{
|
|
group = "Services";
|
|
name = "Home Assistant";
|
|
description = "Home automation";
|
|
href = "http://${hostName}:8123";
|
|
icon = "si-homeassistant";
|
|
}
|
|
];
|
|
};
|
|
}
|