diff --git a/nixos/modules/services/misc/home-assistant.nix b/nixos/modules/services/misc/home-assistant.nix index ac37c11106e..07b14bb6764 100644 --- a/nixos/modules/services/misc/home-assistant.nix +++ b/nixos/modules/services/misc/home-assistant.nix @@ -5,7 +5,9 @@ with lib; let cfg = config.services.home-assistant; - configFile = pkgs.writeText "configuration.yaml" (builtins.toJSON cfg.config); + configFile = pkgs.writeText "configuration.json" (builtins.toJSON (if cfg.applyDefaultConfig + then (lib.recursiveUpdate defaultConfig (if (isNull cfg.config) then {} else cfg.config)) + else cfg.config)); availableComponents = pkgs.home-assistant.availableComponents; @@ -38,6 +40,12 @@ let then (cfg.package.override { inherit extraComponents; }) else cfg.package; + # If you are changing this, please update the description in applyDefaultConfig + defaultConfig = { + homeassistant.time_zone = config.time.timeZone; + http.server_port = (toString cfg.port); + }; + in { meta.maintainers = with maintainers; [ dotlambda ]; @@ -50,6 +58,26 @@ in { description = "The config directory, where your configuration.yaml is located."; }; + port = mkOption { + default = 8123; + type = types.int; + description = "The port on which to listen."; + }; + + applyDefaultConfig = mkOption { + default = true; + type = types.bool; + description = '' + Setting this option enables a few configuration options for HA based on NixOS configuration (such as time zone) to avoid having to manually specify configuration we already have. + + + Currently one side effect of enabling this is that the http component will be enabled. + + + This only takes effect if config != null in order to ensure that a manually managed configuration.yaml is not overwritten. + ''; + }; + config = mkOption { default = null; type = with types; nullOr attrs; @@ -110,15 +138,14 @@ in { ln -s ${configFile} ${cfg.configDir}/configuration.yaml ''; serviceConfig = { - ExecStart = '' - ${package}/bin/hass --config "${cfg.configDir}" - ''; + ExecStart = "${package}/bin/hass --config '${cfg.configDir}'"; User = "hass"; Group = "hass"; Restart = "on-failure"; ProtectSystem = "strict"; ReadWritePaths = "${cfg.configDir}"; PrivateTmp = true; + RemoveIPC = true; }; path = [ "/run/wrappers" # needed for ping