{ lib, config, inputs, ... }: let configDir = "/var/lib/hass"; in { options.host.home-assistant = { enable = lib.mkEnableOption "should home-assistant be enabled on this computer"; subdomain = lib.mkOption { type = lib.types.str; description = "subdomain of base domain that home-assistant will be hosted at"; default = "home-assistant"; }; }; config = lib.mkIf config.host.home-assistant.enable (lib.mkMerge [ { virtualisation.libvirt = { swtpm.enable = true; connections."qemu:///session" = { networks = [ { definition = inputs.nix-virt.lib.network.writeXML (inputs.nix-virt.lib.network.templates.bridge { uuid = "d57e37e2-311f-4e5c-a484-97c2210c2770"; subnet_byte = 71; }); active = true; } ]; domains = [ { definition = inputs.nix-virt.lib.domain.writeXML (inputs.nix-virt.lib.domain.templates.linux { name = "Home Assistant"; uuid = "c5cc0efc-6101-4c1d-be31-acbba203ccde"; memory = { count = 4; unit = "GiB"; }; # storage_vol = { # pool = "MyPool"; # volume = "Penguin.qcow2"; # }; }); } ]; }; }; # systemd.tmpfiles.rules = [ # "f ${config.services.home-assistant.configDir}/automations.yaml 0755 hass hass" # ]; # services.home-assistant = { # enable = true; # configDir = configDir; # extraComponents = [ # "met" # "radio_browser" # "isal" # "zha" # "jellyfin" # "webostv" # "tailscale" # "syncthing" # "sonos" # "analytics_insights" # "unifi" # "openweathermap" # ]; # config = { # http = { # server_port = 8082; # use_x_forwarded_for = true; # trusted_proxies = ["127.0.0.1" "::1"]; # ip_ban_enabled = true; # login_attempts_threshold = 10; # }; # # recorder.db_url = "postgresql://@/${db_user}"; # "automation manual" = []; # "automation ui" = "!include automations.yaml"; # }; # extraPackages = python3Packages: # with python3Packages; [ # hassil # numpy # gtts # ]; # }; # host = { # reverse_proxy.subdomains.${config.host.home-assistant.subdomain} = { # target = "http://localhost:${toString config.services.home-assistant.config.http.server_port}"; # websockets.enable = true; # forwardHeaders.enable = true; # extraConfig = '' # add_header Upgrade $http_upgrade; # add_header Connection \"upgrade\"; # proxy_buffering off; # proxy_read_timeout 90; # ''; # }; # }; } (lib.mkIf config.host.impermanence.enable { # assertions = [ # { # assertion = config.services.home-assistant.configDir == configDir; # message = "home assistant config directory does not match persistence"; # } # ]; # environment.persistence."/persist/system/root" = { # enable = true; # hideMounts = true; # directories = [ # { # directory = configDir; # user = "hass"; # group = "hass"; # } # ]; # }; }) ]); }