{ inputs, ... }: { flake.modules.nixos.hass = { lib, config, pkgs, ... }: { imports = with inputs.self.modules.nixos; [ podman ]; age.secrets.hass.file = ../../../secrets/hass.age; virtualisation.oci-containers.containers = { "zwavejs2mqtt" = { image = "zwavejs/zwavejs2mqtt:latest"; volumes = [ "/DockerData/configs/zwave-js:/usr/src/app/store" ]; environment = { "ZWAVEJS_EXTERNAL_CONFIG"="/usr/src/app/store/.config-db"; "TZ"="America/New_York"; }; devices = [ "/dev/serial/by-id/usb-Zooz_800_Z-Wave_Stick_533D004242-if00:/dev/zwave" ]; environmentFiles = [ "${config.age.secrets.hass.path}" ]; log-driver = "journald"; extraOptions = [ "--pod=hass" ]; }; "hass" = { image = "ghcr.io/home-assistant/home-assistant:stable"; privileged = true; volumes = [ "/DockerData/configs/home-assistant:/config" "/etc/localtime:/etc/localtime:ro" "/run/dbus:/run/dbus:ro" ]; environment = { "TZ"="America/New_York"; }; dependsOn = [ "zwavejs2mqtt" ]; log-driver = "journald"; extraOptions = [ "--pod=hass" ]; }; }; systemd = { services = { "podman-zwavejs2mqtt" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; }; partOf = [ "podman-compose-hass-root.target" ]; wantedBy = [ "podman-compose-hass-root.target" ]; after = [ "podman-pod-hass.service" ]; wants = [ "podman-pod-hass.service" ]; }; "podman-hass" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; }; partOf = [ "podman-compose-hass-root.target" ]; wantedBy = [ "podman-compose-hass-root.target" ]; after = [ "podman-pod-hass.service" ]; wants = [ "podman-pod-hass.service" ]; }; "podman-pod-hass" = { path = [ pkgs.podman ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; ExecStop = "podman pod rm -f hass"; }; #Hass pod with port 8123=hass, 8091=zwave script = '' podman pod inspect hass || podman pod create --name hass -p 8123:8123 -p 8091:8091 ''; partOf = [ "podman-compose-hass-root.target" ]; wantedBy = [ "podman-compose-hass-root.target" ]; }; }; targets = { "podman-compose-hass-root" = { wantedBy = [ "multi-user.target" ]; }; }; }; }; }