{ config, lib, pkgs, ... }: with lib; let cfg = config.local.home-assistant; in { options.local.home-assistant = { enable = mkEnableOption "home-assistant"; }; config = mkIf cfg.enable { # https://nathan.gs/2024/06/22/fail2ban-to-secure-ha-on-nixos/ environment.etc."fail2ban/filter.d/home-assistant.local".text = '' [Definition] failregex = ^.* \[homeassistant\.components\.http\.ban\] Login attempt or request with invalid authentication from .*$ ignoreregex = journalmatch = _SYSTEMD_UNIT=home-assistant.service + _COMM=home-assistant datepattern = {^LN-BEG} ''; local.boot.impermanence.directories = [ { directory = "/var/lib/hass"; user = "hass"; group = "hass"; mode = "u=rwx,g=,o="; } ]; services = { fail2ban.jails.home-assistant = { }; home-assistant = { enable = true; extraComponents = [ "met" "google_translate" "radio_browser" "tuya" "wake_on_lan" "webostv" "xiaomi_miio" ]; config = { # Includes dependencies for a basic setup # https://www.home-assistant.io/integrations/default_config/ default_config = { }; switch = [ # Televisor 192.168.42.205 # TODO: No sirve por 192.168.34 vs 192.168.42 { platform = "wake_on_lan"; mac = "74:40:be:58:5f:da"; } ]; }; customComponents = with pkgs.home-assistant-custom-components; [ dreame_vacuum smartthinq_sensors xiaomi_miot ]; customLovelaceModules = with pkgs.home-assistant-custom-lovelace-modules; [ xiaomi-vacuum-map-card ]; }; }; }; }