95 lines
1.9 KiB
Nix
95 lines
1.9 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"
|
|
"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;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|