Files
PulumiConfig/PulumiWebServer/Nix/whisper/whisper.nix
Patrick Stevens 24d3d8c00a Whisper (#26)
2024-01-29 00:12:27 +00:00

66 lines
1.9 KiB
Nix

{
config,
pkgs,
lib,
whisper-packages,
...
}: {
options = {
services.whisper-config = {
domain = lib.mkOption {
type = lib.types.str;
example = "example.com";
description = lib.mdDoc "Top-level domain to configure";
};
subdomain = lib.mkOption {
type = lib.types.str;
example = "whisper";
description = lib.mdDoc "Subdomain in which to put the Whisper server";
};
port = lib.mkOption {
type = lib.types.port;
description = lib.mdDoc "Whisper localhost port to be forwarded";
default = 1739;
};
};
};
config = {
users.users."whisper".extraGroups = [config.users.groups.keys.name];
users.users."whisper".group = "whisper";
users.groups.whisper = {};
users.users."whisper".isSystemUser = true;
systemd.services.whisper-server = {
description = "whisper-server";
wantedBy = ["multi-user.target"];
serviceConfig = let
python = pkgs.python3.withPackages (p: with p; [flask waitress]);
in {
Restart = "always";
Type = "exec";
User = "whisper";
Group = "whisper";
ExecStart = "${python}/bin/python ${./whisper.py}";
};
environment = {
WHISPER_NORMALIZE = "${whisper-packages.normalize}/bin/normalize.sh";
WHISPER_CLIENT = "${whisper-packages.default}/bin/whisper-cpp";
WHISPER_PORT = toString config.services.whisper-config.port;
INDEX_PAGE_PATH = ./transcribe.html;
YT_DLP = "${pkgs.yt-dlp}/bin/yt-dlp";
};
};
services.nginx.proxyTimeout = "300s";
services.nginx.clientMaxBodySize = "50M";
services.nginx.virtualHosts."${config.services.whisper-config.subdomain}.${config.services.whisper-config.domain}" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:${toString config.services.whisper-config.port}/";
};
};
};
}