nixos/home-assistant: add configWritable option
This commit is contained in:
parent
f908f6c982
commit
f85453f060
@ -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";
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user