nixos/home-assistant: migrate lovelace config to dashboards format

Home Assistant 2026.8 drops the top-level `lovelace: mode: yaml`.
Replace it with `lovelace.dashboards` and `lovelace.resource_mode`
per https://www.home-assistant.io/dashboards/dashboards/

Also adds a deprecation warning for explicit `lovelace.mode` usage
and a 26.05 release notes entry.
This commit is contained in:
Jamie Magee
2026-05-07 09:03:43 -07:00
parent bbd7b686c0
commit 8bd5215cad
2 changed files with 68 additions and 15 deletions
@@ -162,6 +162,8 @@
- `systemd.coredump.extraConfig` has been removed in favor of the structured [](#opt-systemd.coredump.settings.Coredump) option. Use `systemd.coredump.settings.Coredump` to set any `coredump.conf(5)` option directly. For example, replace `systemd.coredump.extraConfig = "Storage=journal";` with `systemd.coredump.settings.Coredump.Storage = "journal";`.
- `services.home-assistant.config.lovelace.mode` has been renamed to `lovelace.dashboards` and `lovelace.resource_mode` to match the [configuration format](https://www.home-assistant.io/dashboards/dashboards/) required by Home Assistant 2026.8. Users who explicitly set `lovelace.mode` should remove it; the module generates the correct entries automatically.
- `opentrack`, `slushload`, `synthesia`, `vtfedit`, `winbox`, `wineasio`, and `yabridge` use wineWow64Packages instead of wineWowPackages as wine versions >= 11.0 have deprecated wineWowPackages. As such, the prefixes for these packages are NOT backwards compatible and need to be regenerated with potential for data loss.
- []{#sec-release-26.05-incompatibilities-profiles-hardened-removed} `profiles/hardened` has been removed, because:
@@ -30,6 +30,7 @@ let
mapAttrsToList
mergeAttrsList
mkEnableOption
mkDefault
mkIf
mkMerge
mkOption
@@ -319,7 +320,8 @@ in
Available cards can be found below `pkgs.home-assistant-custom-lovelace-modules`.
::: {.note}
Automatic loading only works with lovelace in `yaml` mode.
When non-empty, `lovelace.resource_mode` is automatically set to `"yaml"`
so that resources are loaded from the YAML configuration.
:::
'';
};
@@ -428,21 +430,57 @@ in
lovelace = {
# https://www.home-assistant.io/lovelace/dashboards/
mode = mkOption {
type = types.enum [
"yaml"
"storage"
];
dashboards.nixos-lovelace = mkOption {
type = types.nullOr format.type;
default =
if (cfg.lovelaceConfig != null || cfg.lovelaceConfigFile != null) then "yaml" else "storage";
if cfg.lovelaceConfig != null || cfg.lovelaceConfigFile != null then
{
mode = "yaml";
filename = "ui-lovelace.yaml";
title = "Overview";
icon = "mdi:view-dashboard";
show_in_sidebar = true;
}
else
null;
defaultText = literalExpression ''
if (cfg.lovelaceConfig != null || cfg.lovelaceConfigFile != null)
then "yaml"
else "storage";
if cfg.lovelaceConfig != null || cfg.lovelaceConfigFile != null then {
mode = "yaml";
filename = "ui-lovelace.yaml";
title = "Overview";
icon = "mdi:view-dashboard";
show_in_sidebar = true;
} else null
'';
example = "yaml";
description = ''
In what mode should the main Lovelace panel be, `yaml` or `storage` (UI managed).
Default NixOS-managed Lovelace dashboard. Automatically populated
when {option}`lovelaceConfig` or {option}`lovelaceConfigFile` is set.
Additional dashboards can be defined under
`config.lovelace.dashboards.<name>`.
See <https://www.home-assistant.io/lovelace/dashboards/> for details.
'';
};
resource_mode = mkOption {
type = types.nullOr (
types.enum [
"yaml"
"storage"
]
);
default = if cfg.customLovelaceModules != [ ] then "yaml" else null;
defaultText = literalExpression ''
if cfg.customLovelaceModules != [ ] then "yaml" else null
'';
description = ''
Set to `"yaml"` to load Lovelace resources from YAML configuration,
or `"storage"` to manage them through the UI. See
<https://www.home-assistant.io/dashboards/dashboards/#resource_mode>.
Automatically set to `"yaml"` when {option}`customLovelaceModules`
is non-empty.
'';
};
};
@@ -510,7 +548,7 @@ in
'';
description = ''
Your {file}`ui-lovelace.yaml` as a Nix attribute set.
Setting this option will automatically set `lovelace.mode` to `yaml`.
Setting this option will automatically configure a Lovelace dashboard in YAML mode.
Beware that setting this option will delete your previous {file}`ui-lovelace.yaml`
'';
@@ -521,8 +559,8 @@ in
type = types.nullOr types.path;
example = "/path/to/ui-lovelace.yaml";
description = ''
Your {file}`ui-lovelace.yaml` managed as configuraton file.
Setting this option will automatically set `lovelace.mode` to `yaml`.
Your {file}`ui-lovelace.yaml` managed as configuration file.
Setting this option will automatically configure a Lovelace dashboard in YAML mode.
'';
};
@@ -619,6 +657,19 @@ in
};
config = mkIf cfg.enable {
warnings = optionals (cfg.config ? lovelace.mode) [
''
services.home-assistant.config.lovelace.mode is deprecated.
Home Assistant 2026.8 renames the legacy top-level `lovelace.mode`
setting in favour of per-dashboard configuration.
Use `services.home-assistant.config.lovelace.dashboards` and
`services.home-assistant.config.lovelace.resource_mode` instead.
See https://www.home-assistant.io/dashboards/dashboards/ for details.
''
];
assertions = [
{
assertion = cfg.openFirewall -> cfg.config != null;