From 4cd88807d8434efdc3fb666767098e2b3ee0b812 Mon Sep 17 00:00:00 2001 From: Peter Hoeg Date: Sat, 21 Apr 2018 22:32:09 +0800 Subject: [PATCH] home-assistant: make port configurable so we can use it elsewhere Additionally, some settings based on NixOS configuation is set via defaultConfig which is then merged with the user provided configration. For now that just means http port and time zone but others can easily be added. --- .../modules/services/misc/home-assistant.nix | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/nixos/modules/services/misc/home-assistant.nix b/nixos/modules/services/misc/home-assistant.nix index ac37c11106ef..07b14bb67643 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