64 lines
1.2 KiB
Nix
64 lines
1.2 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
namespace,
|
|
...
|
|
}:
|
|
with lib;
|
|
let
|
|
inherit (lib.${namespace}) mkOpt;
|
|
cfg = config.${namespace}.power.ups;
|
|
in
|
|
{
|
|
options.${namespace}.power.ups = {
|
|
enable = mkEnableOption "Enable UPS support";
|
|
|
|
upsName = mkOpt types.str "nas-ups" "Name of the ups";
|
|
upsUser = mkOpt types.str "nas-admin" "Name of the ups user";
|
|
|
|
upsdPort = mkOpt types.int 3493 "Port for upsd";
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
power.ups = {
|
|
enable = true;
|
|
openFirewall = true;
|
|
mode = "netserver";
|
|
|
|
ups = {
|
|
"${cfg.upsName}" = {
|
|
description = "NAS UPS";
|
|
driver = "usbhid-ups";
|
|
port = "auto";
|
|
};
|
|
};
|
|
|
|
users."${cfg.upsUser}" = {
|
|
passwordFile = config.sops.secrets."jallen-nas/ups_password".path;
|
|
actions = [ "ALL" ];
|
|
instcmds = [ "ALL" ];
|
|
upsmon = "primary";
|
|
};
|
|
|
|
upsmon = {
|
|
enable = true;
|
|
monitor."${cfg.upsName}" = {
|
|
passwordFile = config.sops.secrets."jallen-nas/ups_password".path;
|
|
user = cfg.upsUser;
|
|
};
|
|
};
|
|
|
|
upsd = {
|
|
enable = true;
|
|
listen = [
|
|
{
|
|
address = "0.0.0.0";
|
|
port = 3493;
|
|
}
|
|
];
|
|
};
|
|
};
|
|
|
|
};
|
|
}
|