75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { 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 = pkgs.callPackage ../../../pkgs/by-name/po/porkbun-ddns/package.nix { };
 | |
|         defaultText = "pkgs.porkbun-ddns";
 | |
|         description = lib.mdDoc "The porkbun-ddns package to use.";
 | |
|       };
 | |
| 
 | |
|       interval = mkOption {
 | |
|         type = types.str;
 | |
|         default = "10m";
 | |
|         description = 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;
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| }
 |