From b15e1c428907cbacbc637e33a556d39b5150b5fd Mon Sep 17 00:00:00 2001 From: Nathan Date: Wed, 30 Jul 2025 21:08:05 -0500 Subject: [PATCH] homeassistant --- .../configuration/homebox/default.nix | 2 +- .../containers/homeassistant/default.nix | 36 ++--- .../services/containers/rustdesk/default.nix | 2 +- .../services/containers/wyoming/default.nix | 123 ++++++++++++++++++ system-config/services/wyoming/default.nix | 5 +- 5 files changed, 148 insertions(+), 20 deletions(-) create mode 100644 system-config/services/containers/wyoming/default.nix diff --git a/system-config/configuration/homebox/default.nix b/system-config/configuration/homebox/default.nix index 044e506..326d6e0 100644 --- a/system-config/configuration/homebox/default.nix +++ b/system-config/configuration/homebox/default.nix @@ -258,7 +258,7 @@ pihole.enable = false; #broken nextcloud.enable = true; gitea.enable = true; - homeassistant.enable = false; + homeassistant.enable = true; ntfy.enable = false; netbird.enable = true; rustdesk.enable = false; #broken diff --git a/system-config/services/containers/homeassistant/default.nix b/system-config/services/containers/homeassistant/default.nix index c3390c3..0c09cb8 100644 --- a/system-config/services/containers/homeassistant/default.nix +++ b/system-config/services/containers/homeassistant/default.nix @@ -13,21 +13,27 @@ config = lib.mkIf config.sysconfig.opts.virtualization.homeassistant.enable { - virtualisation.oci-containers = { - backend = "docker"; - containers.homeassistant = { - autoStart = true; - ports = [ "8123:8123" ]; - volumes = [ - config.sysconfig.opts.virtualization.homeassistant.configvol - "/run/dbus:/run/dbus:ro" - ]; - environment.TZ = "America/Chicago"; - image = "ghcr.io/home-assistant/home-assistant:stable"; # Warning: if the tag does not change, the image will not be updated - extraOptions = [ - "--network=host" - #"--device=/dev/ttyACM0:/dev/ttyACM0" # Use this for external devices e.g. zigbee - ]; + containers.home-assistant = { + + autoStart = true; + privateNetwork = true; + hostAddress = "192.168.100.10"; + localAddress = "192.168.100.25"; + + config = { + + services.home-assistant = { + enable = true; + + openFirewall = true; + + extraComponents = [ + "wyoming" + ]; + + }; + + system.stateVersion = "25.05"; }; }; }; diff --git a/system-config/services/containers/rustdesk/default.nix b/system-config/services/containers/rustdesk/default.nix index 17ab70e..4799ad8 100644 --- a/system-config/services/containers/rustdesk/default.nix +++ b/system-config/services/containers/rustdesk/default.nix @@ -16,7 +16,7 @@ autoStart = true; privateNetwork = true; hostAddress = "192.168.100.10"; - localAddress = "192.168.100.21"; + localAddress = "192.168.100.27"; forwardPorts = [ { containerPort = 21115; diff --git a/system-config/services/containers/wyoming/default.nix b/system-config/services/containers/wyoming/default.nix new file mode 100644 index 0000000..59e3fb1 --- /dev/null +++ b/system-config/services/containers/wyoming/default.nix @@ -0,0 +1,123 @@ +{ config, lib, ... }: { + + options.sysconfig.opts.virtualization.wyoming = { + enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + satelliteOnly = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + }; + + config = lib.mkIf config.sysconfig.opts.virtualization.wyoming.enable { + + containers.n8n = { + + autoStart = true; + privateNetwork = true; + hostAddress = "192.168.100.10"; + localAddress = "192.168.100.26"; + + bindMounts = { + "/dev/nvidia0" = { + hostPath = "/dev/nvidia0"; + isReadOnly = false; + }; + "/dev/nvidiactl" = { + hostPath = "/dev/nvidiactl"; + isReadOnly = false; + }; + "/dev/nvidia-uvm" = { + hostPath = "/dev/nvidia-uvm"; + isReadOnly = false; + }; + "/dev/nvidia-modeset" = { + hostPath = "/dev/nvidia-modeset"; + isReadOnly = false; + }; + "/dev/nvidia-uvm-tools" = { + hostPath = "/dev/nvidia-uvm-tools"; + isReadOnly = false; + }; + }; + + allowedDevices = [ + { + node = "/dev/nvidia0"; + modifier = "rw"; + } + { + node = "/dev/nvidiactl"; + modifier = "rw"; + } + { + node = "/dev/nvidia-uvm"; + modifier = "rw"; + } + { + node = "/dev/nvidia-modeset"; + modifier = "rw"; + } + { + node = "/dev/nvidia-uvm-tools"; + modifier = "rw"; + } + ]; + + config = { + + networking.firewall = { + allowedTCPPorts = [ 11431 11432 11433 11435 ]; + }; + + services.wyoming = { + + piper = { + + servers.piper = lib.mkIf (!config.sysconfig.opts.virtualization.wyoming.satelliteOnly) { + enable = true; + voice = "en-us-ryan-medium"; + uri = "tcp://0.0.0.0:11435"; + }; + }; + + openwakeword = lib.mkIf (!config.sysconfig.opts.virtualization.wyoming.satelliteOnly) { + enable = true; + uri = "tcp://0.0.0.0:11432"; + preloadModels = [ + "alexa" + "hey_jarvis" + "ok_nabu" + ]; + threshold = 0.5; + customModelsDirectories = [ + #./wake_words + ]; + }; + + faster-whisper = lib.mkIf (!config.sysconfig.opts.virtualization.wyoming.satelliteOnly) { + servers.whisper = { + enable = true; + device = "auto"; + language = "en"; + model = "medium.en"; + uri = "tcp://0.0.0.0:11433"; + }; + }; + + satellite = { + enable = true; + uri = "tcp://0.0.0.0:11431"; + #user = "nathan"; + vad.enable = false; + }; + }; + + system.stateVersion = "25.05"; + }; + }; + + }; +} diff --git a/system-config/services/wyoming/default.nix b/system-config/services/wyoming/default.nix index a06da06..6fcc323 100644 --- a/system-config/services/wyoming/default.nix +++ b/system-config/services/wyoming/default.nix @@ -12,9 +12,8 @@ }; config = lib.mkIf config.sysconfig.opts.wyoming.enable { - services.wyoming = { - + piper = { servers.piper = lib.mkIf (!config.sysconfig.opts.wyoming.satelliteOnly) { @@ -41,7 +40,7 @@ faster-whisper = lib.mkIf (!config.sysconfig.opts.wyoming.satelliteOnly) { servers.whisper = { enable = true; - #device = "cuda"; + device = "auto"; language = "en"; model = "medium.en"; uri = "tcp://0.0.0.0:11433";