nix-config/hosts/nixedo/modules/home-assistant.nix
Oliver Davies 67a40983d0
All checks were successful
/ check (push) Successful in 1m40s
Add Tapo integration to Home Assistant
2025-05-05 20:15:05 +01:00

97 lines
2 KiB
Nix

{ config, lib, ... }:
with lib;
let
cfg = homelab.services.${service};
homelab = config.homelab;
service = "home-assistant";
in
{
options.homelab.services.${service} = {
enable = mkEnableOption "Enable ${service}";
url = mkOption {
default = "home.${homelab.domain}";
type = types.str;
};
homepage.name = mkOption {
default = "Home Assisant";
type = types.str;
};
homepage.description = mkOption {
default = "Open source home automation that puts local control and privacy first.";
type = types.str;
};
homepage.icon = mkOption {
default = "home-assistant";
type = types.str;
};
homepage.category = mkOption {
default = "Services";
type = types.str;
};
};
config = mkIf cfg.enable {
services = {
home-assistant = {
enable = true;
config = {
external_url = "https://home.${homelab.domain}";
name = "Home";
time_zone = "Europe/London";
unit_system = "metric";
http = {
trusted_proxies = [
"127.0.0.1"
"::1"
];
use_x_forwarded_for = true;
};
mobile_app = { };
# sia = { };
};
extraComponents = [
"default_config"
"elgato"
"hive"
"met"
"mobile_app"
# "sia"
"tplink"
"tplink_tapo"
"weather"
"webostv"
"wiz"
];
extraPackages =
python3Packages: with python3Packages; [
setuptools
];
openFirewall = true;
};
nginx.virtualHosts."${cfg.url}" = {
forceSSL = true;
useACMEHost = homelab.domain;
locations."/" = {
proxyPass = "http://localhost:${toString config.services.${service}.config.http.server_port}";
proxyWebsockets = true;
recommendedProxySettings = true;
};
};
};
};
}