modules/porkbun-ddns: init
This commit is contained in:
parent
273d1906e1
commit
5b9c6c5a28
74
modules/services/networking/porkbun-ddns.nix
Normal file
74
modules/services/networking/porkbun-ddns.nix
Normal file
@ -0,0 +1,74 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
inherit (lib) mkOption types;
|
||||
|
||||
cfg = config.services.porkbun-ddns;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
services.porkbun-ddns = {
|
||||
enable = lib.mkEnableOption "Porkbun dynamic DNS client";
|
||||
|
||||
package = mkOption {
|
||||
# TODO: How do I use mkPackageOption when the package isn't in the
|
||||
# package set?
|
||||
type = types.package;
|
||||
default = (import ../../..).porkbun-ddns;
|
||||
defaultText = "pkgs.porkbun-ddns";
|
||||
description = lib.mdDoc "The porkbun-ddns package to use.";
|
||||
};
|
||||
|
||||
interval = mkOption {
|
||||
type = types.str;
|
||||
default = "10m";
|
||||
default = lib.mdDoc ''
|
||||
Interval to update dynamic DNS records. The default is to update every
|
||||
10 minutes. The format is described in {manpage}`systemd.time(7)`.
|
||||
'';
|
||||
};
|
||||
|
||||
domains = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [ ];
|
||||
description = lib.mdDoc "Domains to update.";
|
||||
};
|
||||
|
||||
apiKeyFile = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
description = lib.mdDoc ''
|
||||
File containing the API key to use when running the client.
|
||||
'';
|
||||
};
|
||||
|
||||
secretApiKeyFile = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
description = lib.mdDoc ''
|
||||
File containing the secret API key to use when running the
|
||||
client.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
systemd.services.porkbun-ddns = {
|
||||
description = "Porkbun dynamic DNS client";
|
||||
script = ''
|
||||
${cfg.package}/bin/porkbun-ddns \
|
||||
-K ${cfg.apiKeyFile} \
|
||||
-S ${cfg.secretApiKeyFile} \
|
||||
${lib.concatStringsSep " " cfg.domains}
|
||||
'';
|
||||
};
|
||||
|
||||
systemd.timers.porkbun-ddns = {
|
||||
description = "Porkbun dynamic DNS client";
|
||||
wants = [ "network-online.target" ];
|
||||
wantedBy = [ "timers.target" ];
|
||||
timerConfig = {
|
||||
OnBootSec = cfg.interval;
|
||||
OnUnitActiveSec = cfg.interval;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue
Block a user