diff --git a/nixos/modules/services/misc/home-assistant.nix b/nixos/modules/services/misc/home-assistant.nix
index 628dd7c39b1..4eabda1d418 100644
--- a/nixos/modules/services/misc/home-assistant.nix
+++ b/nixos/modules/services/misc/home-assistant.nix
@@ -110,6 +110,17 @@ in {
'';
};
+ configWritable = mkOption {
+ default = false;
+ type = types.bool;
+ description = ''
+ Whether to make configuration.yaml writable.
+ This only has an effect if 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 {
default = null;
type = with types; nullOr attrs;
@@ -135,6 +146,17 @@ in {
'';
};
+ lovelaceConfigWritable = mkOption {
+ default = false;
+ type = types.bool;
+ description = ''
+ Whether to make ui-lovelace.yaml writable.
+ This only has an effect if 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 {
default = pkgs.home-assistant;
defaultText = "pkgs.home-assistant";
@@ -180,13 +202,17 @@ in {
systemd.services.home-assistant = {
description = "Home Assistant";
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"
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"
ln -s ${lovelaceConfigFile} "${cfg.configDir}/ui-lovelace.yaml"
- '';
+ '');
serviceConfig = {
ExecStart = "${package}/bin/hass --config '${cfg.configDir}'";
User = "hass";
diff --git a/nixos/tests/home-assistant.nix b/nixos/tests/home-assistant.nix
index 9e97ed4c47e..00a0e82fedc 100644
--- a/nixos/tests/home-assistant.nix
+++ b/nixos/tests/home-assistant.nix
@@ -61,6 +61,7 @@ in {
} ];
} ];
};
+ lovelaceConfigWritable = true;
};
};
};
@@ -70,9 +71,10 @@ in {
$hass->waitForUnit("home-assistant.service");
# 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}/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
$hass->waitForOpenPort(8123);