grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / misc / cfdyndns.nix
bloba34e5d6d3913518e6f366e7323e057cfe5370725
1 { config, pkgs, lib, ... }:
2 let
3   cfg = config.services.cfdyndns;
4 in
6   imports = [
7     (lib.mkRemovedOptionModule
8       [ "services" "cfdyndns" "apikey" ]
9       "Use services.cfdyndns.apikeyFile instead.")
10   ];
12   options = {
13     services.cfdyndns = {
14       enable = lib.mkEnableOption "Cloudflare Dynamic DNS Client";
16       email = lib.mkOption {
17         type = lib.types.str;
18         description = ''
19           The email address to use to authenticate to CloudFlare.
20         '';
21       };
23       apiTokenFile = lib.mkOption {
24         default = null;
25         type = lib.types.nullOr lib.types.str;
26         description = ''
27           The path to a file containing the API Token
28           used to authenticate with CloudFlare.
29         '';
30       };
32       apikeyFile = lib.mkOption {
33         default = null;
34         type = lib.types.nullOr lib.types.str;
35         description = ''
36           The path to a file containing the API Key
37           used to authenticate with CloudFlare.
38         '';
39       };
41       records = lib.mkOption {
42         default = [];
43         example = [ "host.tld" ];
44         type = lib.types.listOf lib.types.str;
45         description = ''
46           The records to update in CloudFlare.
47         '';
48       };
49     };
50   };
52   config = lib.mkIf cfg.enable {
53     systemd.services.cfdyndns = {
54       description = "CloudFlare Dynamic DNS Client";
55       after = [ "network.target" ];
56       wantedBy = [ "multi-user.target" ];
57       startAt = "*:0/5";
58       serviceConfig = {
59         Type = "simple";
60         LoadCredential = lib.optional (cfg.apiTokenFile != null) "CLOUDFLARE_APITOKEN_FILE:${cfg.apiTokenFile}";
61         DynamicUser = true;
62       };
63       environment = {
64         CLOUDFLARE_RECORDS="${lib.concatStringsSep "," cfg.records}";
65       };
66       script = ''
67         ${lib.optionalString (cfg.apikeyFile != null) ''
68           export CLOUDFLARE_APIKEY="$(cat ${lib.escapeShellArg cfg.apikeyFile})"
69           export CLOUDFLARE_EMAIL="${cfg.email}"
70         ''}
71         ${lib.optionalString (cfg.apiTokenFile != null) ''
72           export CLOUDFLARE_APITOKEN=$(${pkgs.systemd}/bin/systemd-creds cat CLOUDFLARE_APITOKEN_FILE)
73         ''}
74         ${pkgs.cfdyndns}/bin/cfdyndns
75       '';
76     };
77   };