diff --git a/modules/services/default.nix b/modules/services/default.nix index a50bf09..40aba48 100644 --- a/modules/services/default.nix +++ b/modules/services/default.nix @@ -2,6 +2,7 @@ imports = [ ./bazarr ./gitea + ./homeassistant ./immich ./jellyfin ./jellyseer diff --git a/modules/services/homeassistant/default.nix b/modules/services/homeassistant/default.nix new file mode 100644 index 0000000..ce600ac --- /dev/null +++ b/modules/services/homeassistant/default.nix @@ -0,0 +1,69 @@ +{ 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; + }; + }; + }; +}