nixos/home-assistant: add configWritable option

This commit is contained in:
Robert Schütz 2019-02-03 12:45:52 +01:00
parent f908f6c982
commit f85453f060
2 changed files with 33 additions and 5 deletions

View File

@ -110,6 +110,17 @@ in {
''; '';
}; };
configWritable = mkOption {
default = false;
type = types.bool;
description = ''
Whether to make <filename>configuration.yaml</filename> writable.
This only has an effect if <option>config</option> is set.
This will allow you to edit it from Home Assistant's web interface.
However, bear in mind that it will be overwritten at every start of the service.
'';
};
lovelaceConfig = mkOption { lovelaceConfig = mkOption {
default = null; default = null;
type = with types; nullOr attrs; type = with types; nullOr attrs;
@ -135,6 +146,17 @@ in {
''; '';
}; };
lovelaceConfigWritable = mkOption {
default = false;
type = types.bool;
description = ''
Whether to make <filename>ui-lovelace.yaml</filename> writable.
This only has an effect if <option>lovelaceConfig</option> is set.
This will allow you to edit it from Home Assistant's web interface.
However, bear in mind that it will be overwritten at every start of the service.
'';
};
package = mkOption { package = mkOption {
default = pkgs.home-assistant; default = pkgs.home-assistant;
defaultText = "pkgs.home-assistant"; defaultText = "pkgs.home-assistant";
@ -180,13 +202,17 @@ in {
systemd.services.home-assistant = { systemd.services.home-assistant = {
description = "Home Assistant"; description = "Home Assistant";
after = [ "network.target" ]; after = [ "network.target" ];
preStart = optionalString (cfg.config != null) '' preStart = optionalString (cfg.config != null) (if cfg.configWritable then ''
cp --no-preserve=mode ${configFile} "${cfg.configDir}/configuration.yaml"
'' else ''
rm -f "${cfg.configDir}/configuration.yaml" rm -f "${cfg.configDir}/configuration.yaml"
ln -s ${configFile} "${cfg.configDir}/configuration.yaml" ln -s ${configFile} "${cfg.configDir}/configuration.yaml"
'' + optionalString (cfg.lovelaceConfig != null) '' '') + optionalString (cfg.lovelaceConfig != null) (if cfg.lovelaceConfigWritable then ''
cp --no-preserve=mode ${lovelaceConfigFile} "${cfg.configDir}/ui-lovelace.yaml"
'' else ''
rm -f "${cfg.configDir}/ui-lovelace.yaml" rm -f "${cfg.configDir}/ui-lovelace.yaml"
ln -s ${lovelaceConfigFile} "${cfg.configDir}/ui-lovelace.yaml" ln -s ${lovelaceConfigFile} "${cfg.configDir}/ui-lovelace.yaml"
''; '');
serviceConfig = { serviceConfig = {
ExecStart = "${package}/bin/hass --config '${cfg.configDir}'"; ExecStart = "${package}/bin/hass --config '${cfg.configDir}'";
User = "hass"; User = "hass";

View File

@ -61,6 +61,7 @@ in {
} ]; } ];
} ]; } ];
}; };
lovelaceConfigWritable = true;
}; };
}; };
}; };
@ -70,9 +71,10 @@ in {
$hass->waitForUnit("home-assistant.service"); $hass->waitForUnit("home-assistant.service");
# The config is specified using a Nix attribute set, # The config is specified using a Nix attribute set,
# but then converted from JSON to YAML # converted from JSON to YAML, and linked to the config dir
$hass->succeed("test -L ${configDir}/configuration.yaml"); $hass->succeed("test -L ${configDir}/configuration.yaml");
$hass->succeed("test -L ${configDir}/ui-lovelace.yaml"); # The lovelace config is copied because lovelaceConfigWritable = true
$hass->succeed("test -f ${configDir}/ui-lovelace.yaml");
# Check that Home Assistant's web interface and API can be reached # Check that Home Assistant's web interface and API can be reached
$hass->waitForOpenPort(8123); $hass->waitForOpenPort(8123);