{ config, lib, pkgs, ... }: let inherit (lib) mkIf; cfg = config.pepe.services.homeassistant; in { options.pepe.services.homeassistant = with lib; { enable = mkEnableOption "Enable Home Assistant"; package = mkPackageOption pkgs "home-assistant" { }; domain = mkOption { type = types.str; default = null; }; extraComponents = mkOption { type = types.listOf types.str; default = []; description = "Additional components to enable in Home Assistant"; }; extraPackages = mkOption { type = types.functionTo (types.listOf types.package); default = _: []; description = "Additional Python packages for Home Assistant"; }; config = mkOption { type = types.attrs; default = {}; description = "Home Assistant configuration"; }; }; config = mkIf cfg.enable { services.home-assistant = { enable = true; package = cfg.package; extraComponents = cfg.extraComponents; extraPackages = cfg.extraPackages; config = cfg.config; }; services.mosquitto = { enable = true; listeners = [ { address = "127.0.0.1"; acl = [ "pattern readwrite #" ]; omitPasswordAuth = true; settings.allow_anonymous = true; } ]; }; services.go2rtc = { enable = true; settings.api.listen = "127.0.0.1:1984"; }; pepe.core.vhost.hosts.${cfg.domain} = { locations."/" = { port = config.services.home-assistant.config.http.server_port or 8123; allowLAN = true; allowVPN = true; allowWAN = true; proxyWebsockets = true; }; }; }; }