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.
This commit is contained in:
parent
3e3b5895ca
commit
4cd88807d8
1 changed files with 31 additions and 4 deletions
|
@ -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 <filename>configuration.yaml</filename> 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.
|
||||
</para>
|
||||
<para>
|
||||
Currently one side effect of enabling this is that the <literal>http</literal> component will be enabled.
|
||||
</para>
|
||||
<para>
|
||||
This only takes effect if <literal>config != null</literal> in order to ensure that a manually managed <filename>configuration.yaml</filename> 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
|
||||
|
|
Loading…
Reference in a new issue