service/home-assistant: init

This commit is contained in:
Felix Buehler 2023-04-16 16:56:36 +02:00
parent 9991dfaf47
commit d2646d1a5d
2 changed files with 124 additions and 0 deletions

View file

@ -0,0 +1,123 @@
# home automation
{ config, lib, pkgs, ... }:
let
cfg = config.my.services.home-assistant;
domain = config.networking.domain;
in
{
options.my.services.home-assistant = with lib; {
enable = mkEnableOption "home-assistant server";
package = lib.mkPackageOption pkgs "home-assistant" { };
port = lib.mkOption {
type = lib.types.port;
default = 8123;
description = lib.mdDoc ''
Web interface port.
'';
};
extraComponents = mkOption {
type = types.listOf (types.enum cfg.package.availableComponents);
example = literalExpression ''
[
"analytics"
"default_config"
"esphome"
"my"
"wled"
]
'';
default = [ ];
description = mdDoc ''
List
of [ components ]
(https://www.home-assistant.io/integrations/)
that
have
their
dependencies
included in the package.
The component name can be found in the URL, for example `https://www.home-assistant.io/integrations/ffmpeg/` would map to `ffmpeg`.
'';
};
latitude = mkOption {
type = types.nullOr (types.either types.float types.str);
default = null;
example = 52.3;
description = mdDoc ''
your location latitude. Impacts sunrise data.
'';
};
longitude = mkOption {
type = types.nullOr (types.either types.float types.str);
default = null;
example = 4.9;
description = mdDoc ''
your location longitude. Impacts sunrise data.
'';
};
elevation = mkOption {
type = types.nullOr (types.either types.float types.str);
default = null;
description = mdDoc ''
your location elevation. Impacts sunrise data.
'';
};
timezone = mkOption {
type = types.str;
default = "GMT";
description = mdDoc ''
your timezone.
'';
};
};
config = lib.mkIf cfg.enable {
services.home-assistant = {
enable = true;
package = cfg.package;
config = {
homeassistant = {
name = "Home";
latitude = cfg.latitude;
longitude = cfg.longitude;
elevation = cfg.elevation;
unit_system = "metric";
time_zone = cfg.timezone;
};
http.server_port = cfg.port;
};
extraComponents = [
"backup"
"deutsche_bahn"
"prometheus"
] ++ cfg.extraComponents;
};
my.services.nginx.virtualHosts = [
{
subdomain = "monitoring";
inherit (cfg) port;
}
];
webapps.apps.home-assistant = {
dashboard = {
name = "Home-Automation";
category = "Infra";
icon = "house-signal";
link = "https://automation.${domain}";
};
};
};
}