AquaticOS/modules/servers/containers/hass.nix

104 lines
No EOL
2.7 KiB
Nix

{ 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" ];
};
};
};
};
}