Compare commits

..

3 commits

Author SHA1 Message Date
2188954b79 installed open wake word 2025-07-13 17:39:25 -05:00
2e8eba7709 installed wyoming 2025-07-13 17:22:46 -05:00
0e8a148517 started to break up home-assistant config 2025-07-13 16:10:30 -05:00
4 changed files with 103 additions and 2 deletions

View file

@ -280,6 +280,12 @@
subdomain = "home"; subdomain = "home";
openFirewall = true; openFirewall = true;
database = "postgres"; database = "postgres";
extensions = {
sonos.enable = true;
jellyfin.enable = true;
wyoming.enable = true;
};
}; };
qbittorrent = { qbittorrent = {

View file

@ -9,6 +9,7 @@
./forgejo.nix ./forgejo.nix
./searx.nix ./searx.nix
./home-assistant.nix ./home-assistant.nix
./wyoming.nix
./immich.nix ./immich.nix
./qbittorent.nix ./qbittorent.nix
]; ];

View file

@ -21,6 +21,23 @@ in {
description = "what database do we want to use"; description = "what database do we want to use";
default = "builtin"; default = "builtin";
}; };
extensions = {
sonos = {
enable = lib.mkEnableOption "enable the sonos plugin";
port = lib.mkOption {
type = lib.types.int;
default = 1400;
description = "what port to use for sonos discovery";
};
};
jellyfin = {
enable = lib.mkEnableOption "enable the jellyfin plugin";
};
wyoming = {
enable = lib.mkEnableOption "enable wyoming";
};
};
}; };
config = lib.mkIf config.services.home-assistant.enable (lib.mkMerge [ config = lib.mkIf config.services.home-assistant.enable (lib.mkMerge [
@ -50,11 +67,9 @@ in {
"radio_browser" "radio_browser"
"isal" "isal"
"zha" "zha"
"jellyfin"
"webostv" "webostv"
"tailscale" "tailscale"
"syncthing" "syncthing"
"sonos"
"analytics_insights" "analytics_insights"
"unifi" "unifi"
"openweathermap" "openweathermap"
@ -80,10 +95,26 @@ in {
]; ];
}; };
# TODO: configure /var/lib/hass/secrets.yaml via sops
systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [
"f ${config.services.home-assistant.configDir}/automations.yaml 0755 hass hass" "f ${config.services.home-assistant.configDir}/automations.yaml 0755 hass hass"
]; ];
} }
(lib.mkIf (config.services.home-assistant.extensions.sonos.enable) {
services.home-assistant.extraComponents = ["sonos"];
networking.firewall.allowedTCPPorts = [
config.services.home-assistant.extensions.sonos.port
];
})
(lib.mkIf (config.services.home-assistant.extensions.jellyfin.enable) {
services.home-assistant.extraComponents = ["jellyfin"];
# TODO: configure port, address, and login information here
})
(lib.mkIf (config.services.home-assistant.extensions.wyoming.enable) {
services.home-assistant.extraComponents = ["wyoming"];
services.wyoming.enable = true;
})
(lib.mkIf (config.services.home-assistant.database == "postgres") { (lib.mkIf (config.services.home-assistant.database == "postgres") {
host = { host = {
postgres = { postgres = {

View file

@ -0,0 +1,63 @@
{
lib,
config,
...
}: {
options.services.wyoming.enable = lib.mkEnableOption "should wyoming be enabled on this device";
config = lib.mkIf config.services.wyoming.enable (lib.mkMerge [
{
services.wyoming = {
# Text to speech
piper = {
servers = {
"en" = {
enable = true;
# see https://github.com/rhasspy/rhasspy3/blob/master/programs/tts/piper/script/download.py
voice = "en-us-amy-low";
uri = "tcp://0.0.0.0:10200";
speaker = 0;
};
};
};
# Speech to text
faster-whisper = {
servers = {
"en" = {
enable = true;
# see https://github.com/rhasspy/rhasspy3/blob/master/programs/asr/faster-whisper/script/download.py
model = "tiny-int8";
language = "en";
uri = "tcp://0.0.0.0:10300";
device = "cpu";
};
};
};
openwakeword = {
enable = true;
uri = "tcp://0.0.0.0:10400";
preloadModels = [
"ok_nabu"
];
# TODO: custom models
};
};
# needs access to /proc/cpuinfo
systemd.services."wyoming-faster-whisper-en".serviceConfig.ProcSubset = lib.mkForce "all";
}
(lib.mkIf config.host.impermanence.enable {
environment.persistence."/persist/system/root" = {
enable = true;
hideMounts = true;
directories = [
{
directory = "/var/lib/private/wyoming";
mode = "0700";
}
];
};
})
]);
}