yumeami/modules/nixos/services/apps/servarr/bazarr/default.nix
2026-06-30 15:02:05 -05:00

76 lines
2.1 KiB
Nix

{
config,
lib,
namespace,
...
}: let
inherit (lib) mkForce mkIf mkMerge;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort;
inherit (config.networking) hostName;
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
pgCfg = getAttrByNamespace config "${namespace}.services.storage.postgresql";
isEnabled = hostHasService networkCfg.network-services hostName "bazarr";
port = resolveServicePort networkCfg.network-services "bazarr" 6767;
dbHost = resolveDatabaseHost pgCfg.databases "bazarr";
in {
config = mkIf isEnabled {
services.bazarr = {
enable = true;
listenPort = port;
};
systemd.services.bazarr = let
bazarrUser = config.users.users.bazarr;
dbIp = resolveDatabaseIP networkCfg.devices pgCfg.databases "bazarr";
in
mkMerge [
{
environment = {
POSTGRES_ENABLED = "true";
POSTGRES_HOST = "${dbIp}";
POSTGRES_PORT = "5600";
POSTGRES_DATABASE = "bazarr";
POSTGRES_USERNAME = "bazarr";
};
serviceConfig = {
DynamicUser = mkForce false;
User = bazarrUser.name;
Group = bazarrUser.group;
UMask = mkForce "0002";
EnvironmentFile = config.sops.secrets."environment-file/bazarr".path;
};
}
(mkIf (dbHost == hostName) {
after = ["postgresql.service" "pgbouncer.service"];
requires = ["postgresql.service" "pgbouncer.service"];
serviceConfig.RestartSec = "1s";
})
];
users = {
users.bazarr = {
isSystemUser = true;
group = "bazarr";
extraGroups = ["jellyfin" "qbittorrent"];
};
groups.bazarr = {};
};
sops.secrets."environment-file/bazarr" = {};
${namespace}.services.storage.impermanence.folders = let
bazarrUser = config.users.users.bazarr;
in [
{
directory = "/var/lib/bazarr";
user = bazarrUser.name;
group = bazarrUser.group;
mode = "700";
}
];
};
}