···430431- `services.avahi.ipv6` now defaults to true.
43200433- For matrix homeserver Synapse we are now following the upstream recommendation to enable jemalloc as the memory allocator by default.
434435- `services.kmonad` now creates a determinate symlink (in `/dev/input/by-id/`) to each of KMonad virtual devices.
···430431- `services.avahi.ipv6` now defaults to true.
432433+- The Home Assistant module has new options {option}`services.home-assistant.blueprints.automation`, `services.home-assistant.blueprints.script`, and {option}`services.home-assistant.blueprints.template` that allow for the declarative installation of [blueprints](https://www.home-assistant.io/docs/blueprint/) into the appropriate configuration directories.
434+435- For matrix homeserver Synapse we are now following the upstream recommendation to enable jemalloc as the memory allocator by default.
436437- `services.kmonad` now creates a determinate symlink (in `/dev/input/by-id/`) to each of KMonad virtual devices.
···129 ];
130 };
131 lovelaceConfigWritable = true;
0000000000132 };
133134 # Cause a configuration change inside `configuration.yml` and verify that the process is being reloaded.
···148 configuration.services.home-assistant = {
149 customComponents = lib.mkForce [ ];
150 customLovelaceModules = lib.mkForce [ ];
00151 };
152 };
153 };
···226 with subtest("Check extra components are considered in systemd unit hardening"):
227 hass.succeed("systemctl show -p DeviceAllow home-assistant.service | grep -q char-ttyUSB")
2280000229 with subtest("Check service restart from SIGHUP"):
230 pid = hass.succeed("systemctl show --property=MainPID home-assistant.service")
231 cursor = get_journal_cursor()
···247 for domain in ["prometheus"]:
248 assert f"Setup of domain {domain} took" in journal, f"{domain} setup missing"
249250- with subtest("Check custom components and custom lovelace modules get removed"):
251 cursor = get_journal_cursor()
252 hass.succeed("${system}/specialisation/removeCustomThings/bin/switch-to-configuration test")
253 hass.fail("grep -q 'mini-graph-card-bundle.js' '${configDir}/ui-lovelace.yaml'")
254 for integration in ("prometheus_sensor", "spook", "spook_inverse"):
255 hass.fail(f"test -f ${configDir}/custom_components/{integration}/manifest.json")
00256 wait_for_homeassistant(cursor)
257258 with subtest("Check that no errors were logged"):
···129 ];
130 };
131 lovelaceConfigWritable = true;
132+133+ blueprints.automation = [
134+ (pkgs.fetchurl {
135+ url = "https://github.com/home-assistant/core/raw/2025.1.4/homeassistant/components/automation/blueprints/motion_light.yaml";
136+ hash = "sha256-4HrDX65ycBMfEY2nZ7A25/d3ZnIHdpHZ+80Cblp+P5w=";
137+ })
138+ ];
139+ blueprints.template = [
140+ "${pkgs.home-assistant.src}/homeassistant/components/template/blueprints/inverted_binary_sensor.yaml"
141+ ];
142 };
143144 # Cause a configuration change inside `configuration.yml` and verify that the process is being reloaded.
···158 configuration.services.home-assistant = {
159 customComponents = lib.mkForce [ ];
160 customLovelaceModules = lib.mkForce [ ];
161+ blueprints.automation = lib.mkForce [ ];
162+ blueprints.template = lib.mkForce [ ];
163 };
164 };
165 };
···238 with subtest("Check extra components are considered in systemd unit hardening"):
239 hass.succeed("systemctl show -p DeviceAllow home-assistant.service | grep -q char-ttyUSB")
240241+ with subtest("Check that blueprints are installed"):
242+ hass.succeed("test -L '${configDir}/blueprints/automation/motion_light.yaml'")
243+ hass.succeed("test -L '${configDir}/blueprints/template/inverted_binary_sensor.yaml'")
244+245 with subtest("Check service restart from SIGHUP"):
246 pid = hass.succeed("systemctl show --property=MainPID home-assistant.service")
247 cursor = get_journal_cursor()
···263 for domain in ["prometheus"]:
264 assert f"Setup of domain {domain} took" in journal, f"{domain} setup missing"
265266+ with subtest("Check custom components, custom lovelace modules, and blueprints get removed"):
267 cursor = get_journal_cursor()
268 hass.succeed("${system}/specialisation/removeCustomThings/bin/switch-to-configuration test")
269 hass.fail("grep -q 'mini-graph-card-bundle.js' '${configDir}/ui-lovelace.yaml'")
270 for integration in ("prometheus_sensor", "spook", "spook_inverse"):
271 hass.fail(f"test -f ${configDir}/custom_components/{integration}/manifest.json")
272+ hass.fail("test -e '${configDir}/blueprints/automation/motion_light.yaml'")
273+ hass.fail("test -e '${configDir}/blueprints/template/inverted_binary_sensor.yaml'")
274 wait_for_homeassistant(cursor)
275276 with subtest("Check that no errors were logged"):
···2728 dontDropIconThemeCache = true;
2930+ # Upstream ships a bunch of those, and is very dead
31+ dontCheckForBrokenSymlinks = true;
32+33 installPhase = ''
34 runHook preInstall
35
···39 };
4041 patches = [
42- # Update prisma to match the version in nixpkgs exactly (currently 6.0.1). To create this patch, change the
43 # versions in `package.json`, then run `nix run nixpkgs#yarn-berry -- install --mode update-lockfile`
44 # to update `yarn.lock`.
45 ./prisma6.patch
···70 yarn install --immutable --mode skip-build
71 '';
7273- outputHash = "sha256-kWE6YVhyH5Lk/SO0h624Zq9/6ztoUE3FNzHB0dyl5aI=";
74 outputHashMode = "recursive";
75 };
76
···39 };
4041 patches = [
42+ # Update prisma to match the version in nixpkgs exactly (currently 6.3.0). To create this patch, change the
43 # versions in `package.json`, then run `nix run nixpkgs#yarn-berry -- install --mode update-lockfile`
44 # to update `yarn.lock`.
45 ./prisma6.patch
···70 yarn install --immutable --mode skip-build
71 '';
7273+ outputHash = "sha256-c7U/PMlulbjzWx0w4jstgfjeDYPkmfcXIRCDEQxhirA=";
74 outputHashMode = "recursive";
75 };
76
···19 nasm,
20 pkg-config,
21 which,
02223 # Tests
24 nixosTests,
···259 propagatedBuildInputs = old.propagatedBuildInputs or [ ] ++ [
260 self.flaky
261 ];
000262 });
263264 # This is the most recent version of `trustme` that's still compatible with `cryptography` 40.
···19 nasm,
20 pkg-config,
21 which,
22+ openssl,
2324 # Tests
25 nixosTests,
···260 propagatedBuildInputs = old.propagatedBuildInputs or [ ] ++ [
261 self.flaky
262 ];
263+ # hack: avoid building docs due to incompatibility with current sphinx
264+ nativeBuildInputs = [ openssl ]; # old.nativeBuildInputs but without sphinx*
265+ outputs = lib.filter (o: o != "doc") old.outputs;
266 });
267268 # This is the most recent version of `trustme` that's still compatible with `cryptography` 40.