{ pkgs, config, lib, ... }: with lib; { options.components.media.tts-server.enable = mkOption { type = lib.types.bool; #default = config.components.media.enable; default = false; }; options.components.media.tts-client.enable = mkOption { type = lib.types.bool; default = config.components.media.enable; }; config = mkMerge [ (mkIf (config.components.media.tts-client.enable) { environment.systemPackages = [ pkgs.espeak-ng pkgs.tts (pkgs.writers.writeDashBin "tts-en" '' ${pkgs.tts}/bin/tts --model_name "tts_models/en/ljspeech/vits" "$@" '') (pkgs.writers.writeDashBin "tts-de" '' ${pkgs.tts}/bin/tts --model_name "tts_models/de/thorsten/vits" "$@" '') ]; }) (mkIf (config.components.media.tts-server.enable) { # find models with ${pkgs.tts}/bin/tts --list_models services.tts = { servers = { english = { enable = true; port = 5300; #model = "tts_models/en/ljspeech/tacotron2-DDC"; model = "tts_models/en/ljspeech/vits"; }; german = { enable = true; port = 5301; #model = "tts_models/de/thorsten/tacotron2-DDC"; model = "tts_models/de/thorsten/vits"; }; }; }; # fixes some issues systemd.services.tts-german.serviceConfig.RestrictAddressFamilies = [ "AF_UNIX" ]; systemd.services.tts-english.serviceConfig.RestrictAddressFamilies = [ "AF_UNIX" ]; services.nginx = { recommendedProxySettings = true; enable = true; virtualHosts."tts.${config.networking.hostName}.private" = { locations."/".proxyPass = "http://localhost:${toString config.services.tts.servers.english.port}"; }; virtualHosts."en.tts.${config.networking.hostName}.private" = { locations."/".proxyPass = "http://localhost:${toString config.services.tts.servers.english.port}"; }; virtualHosts."de.tts.${config.networking.hostName}.private" = { locations."/".proxyPass = "http://localhost:${toString config.services.tts.servers.german.port}"; }; }; }) ]; }