From 3b1bbe13e1c1653213a6afe23073005941fc2ace Mon Sep 17 00:00:00 2001 From: Filippo Berto Date: Thu, 26 Dec 2024 11:05:20 +0100 Subject: [PATCH] Sif: home assistant --- instances/odin/configuration.nix | 269 ++++++++++++++++++++++++++++++- 1 file changed, 263 insertions(+), 6 deletions(-) diff --git a/instances/odin/configuration.nix b/instances/odin/configuration.nix index 4a040e2..7fd3c5d 100644 --- a/instances/odin/configuration.nix +++ b/instances/odin/configuration.nix @@ -1,12 +1,13 @@ -{ pkgs, ... }: { +{ pkgs, ... }: +let + hosts = import ../../hosts.nix; +in +{ boot = { kernelParams = [ "acpi_osi=Linux-Dell-Video" ]; initrd.checkJournalingFS = true; # Use same ACPI identifier as Dell Ubuntu loader = { - systemd-boot = { - enable = true; - editor = false; - }; + systemd-boot = { enable = true; editor = false; }; efi.canTouchEfiVariables = true; }; }; @@ -40,6 +41,25 @@ networking = { hostName = "odin"; networkmanager.enable = true; + + firewall = { + enable = true; + allowPing = true; + allowedTCPPorts = [ + # 445 # SAMBA + # 139 # SAMBA + # 5357 # SAMBA-WSDD + 8123 # HOME ASSISTANT + 8384 # SYNCTHING + 8385 # SYNCTHING + ]; + allowedUDPPorts = [ + 137 # SYNCTHING + 138 # SYNCTHING + 3702 # SAMBA-WSDD + ]; + extraCommands = "iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns"; + }; }; programs.steam = { @@ -65,13 +85,250 @@ ssh = "${pkgs.avahi}/etc/avahi/services/ssh.service"; }; }; + blueman.enable = true; + home-assistant = { + enable = true; + openFirewall = true; + config = { + default_config = { }; + + homeassistant = { + name = "Casa"; + latitude = "!secret home-latitude"; + longitude = "!secret home-longitude"; + country = "IT"; + elevation = 17; + unit_system = "metric"; + time_zone = "Europe/Rome"; + external_url = "https://home-assistant.bertof.net"; + allowlist_external_dirs = [ "/tmp" ]; + }; + + http = { + use_x_forwarded_for = true; + trusted_proxies = [ + hosts.zerotier.ipv4."baldur.zto" + hosts.tailscale.ipv4."baldur.tsn" + "::1" + "127.0.0.1" + ]; + }; + + automation = "!include automations.yaml"; + scene = "!include scenes.yaml"; + alert = "!include alert.yaml"; + + alarm_control_panel = { + platform = "manual"; + code = "!secret alarm_code"; + trigger_time = 60; + }; + + assist_pipeline = { }; + # bluetooth = { }; + camera = [ + # { + # platform = "local_file"; + # file_path = "/tmp/doods_camera_camera_cancello.jpg"; + # name = "File DOODS2 Camera cancello"; + # } + # { + # platform = "local_file"; + # file_path = "/tmp/doods_camera_camera_vialetto.jpg"; + # name = "File DOODS2 Camera vialetto"; + # } + # { + # platform = "local_file"; + # file_path = "/tmp/doods_camera_camera_garage.jpg"; + # name = "File DOODS2 Camera garage"; + # } + ]; + cloud = { }; + config = { }; + # device_tracker = [{ + # platform = "bluetooth_tracker"; + # request_rssi = true; + # }]; + # image_processing = [ + # { + # platform = "doods"; + # url = "http://localhost:8080"; + # detector = "default"; + # source = [ + # { + # entity_id = "camera.camera_camera_cancello"; + # name = "DOODS2 Camera cancello"; + # } + # { + # entity_id = "camera.camera_camera_vialetto"; + # name = "DOODS2 Camera vialetto"; + # } + # { + # entity_id = "camera.camera_camera_garage"; + # name = "DOODS2 Camera garage"; + # } + # ]; + # confidence = 60; + # file_out = "/tmp/doods_{{ camera_entity.split('.')[1] }}.jpg"; + # scan_interval = 5; + # labels = [ + # "bicycle" + # "car" + # "cat" + # "dog" + # "person" + # "truck" + # ]; + # } + # ]; + # esphome = { }; + frontend = { }; + google_assistant = { + project_id = "home-assistant-390217"; + report_state = true; + service_account = "!include google-service-account.json"; + exposed_domains = [ + "alarm_control_panel" + "button" + "camera" + "climate" + "cover" + "fan" + "group" + "humidifier" + "input_boolean" + "input_button" + "input_select" + "light" + "lock" + "media_player" + "scene" + "script" + "select" + "switch" + "vacuum" + ]; + }; + history = { }; + logbook = { }; + # logger.default = "debug"; + logger.default = "info"; + # "map" = { }; + mobile_app = { }; + notify = [ + # { platform = "telegram"; name = "t_filippo"; chat_id = "!secret filippo_t_chat_id"; } + # { platform = "telegram"; name = "t_famiglia"; chat_id = "!secret famiglia_t_chat_id"; } + ]; + recorder.purge_keep_days = 30; + script = "!include scripts.yaml"; + shopping_list = { }; + sun = { }; + system_health = { }; + # telegram_bot = [{ + # # platform = "polling"; + # platform = "webhooks"; + # api_key = "!secret telegram_api_key"; + # allowed_chat_ids = [ + # "!secret filippo_t_chat_id" + # "!secret famiglia_t_chat_id" + # ]; + # }]; + tts = [ + { + platform = "google_translate"; + language = "it"; + # tld = "it"; + } + ]; + }; + configDir = "/var/lib/hass"; + configWritable = true; + extraPackages = ps: with ps; [ securetar ]; + extraComponents = [ + "default_config" + + "alert" + "analytics" + "androidtv" + "androidtv_remote" + "bayesian" + "binary_sensor" + "blueprint" + # "bluetooth_le_tracker" + # "bluetooth_tracker" + "button" + "camera" + "cast" + "caldav" + "calendar" + "citybikes" + "configurator" + # "coronavirus" + "cover" + "default_config" + "derivative" + "device_automation" + "device_sun_light_trigger" + "device_tracker" + "dlib_face_detect" + "dlib_face_identify" + "dlna_dmr" + "dlna_dms" + "esphome" + "flux" + "gdacs" + "google" + "google_translate" + "group" + "hassio" + "jellyfin" + "local_file" + "media_player" + "met" + "meteoalarm" + "network" + # "nextcloud" + "nmap_tracker" + "notify" + "open_meteo" + "ping" + "plex" + "proximity" + "radarr" + "radio_browser" + "random" + "scene" + "schedule" + "script" + "sonarr" + "speedtestdotnet" + "spotify" + "tcp" + # "telegram" + # "telegram_bot" + "template" + "threshold" + "transmission" + "tod" # times of the day + "trend" + "tuya" + "upnp" + "wake_on_lan" + "wled" + "workday" + "zha" + "zoneminder" + ]; + }; + logind.lidSwitch = "ignore"; pipewire = { enable = true; pulse.enable = true; jack.enable = true; alsa = { enable = true; support32Bit = true; }; }; - logind.lidSwitch = "ignore"; + smartd.enable = true; + thermald.enable = true; xserver.videoDrivers = [ "nvidia" ]; };