diff options
| author | Gregor Kleen <gkleen@yggdrasil.li> | 2025-05-10 12:53:58 +0200 |
|---|---|---|
| committer | Gregor Kleen <gkleen@yggdrasil.li> | 2025-05-10 12:53:58 +0200 |
| commit | 81cc664d4250189c9026edfb042e24c6806448ee (patch) | |
| tree | 710579dbd9633a33179a8f373ad6fa1b7808c600 /modules | |
| parent | 83e0c7df55234bc5e7c2c918ceb587786af6d155 (diff) | |
| download | nixos-81cc664d4250189c9026edfb042e24c6806448ee.tar nixos-81cc664d4250189c9026edfb042e24c6806448ee.tar.gz nixos-81cc664d4250189c9026edfb042e24c6806448ee.tar.bz2 nixos-81cc664d4250189c9026edfb042e24c6806448ee.tar.xz nixos-81cc664d4250189c9026edfb042e24c6806448ee.zip | |
abs-podcast-autoplaylist
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/abs-podcast-autoplaylist.nix | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/modules/abs-podcast-autoplaylist.nix b/modules/abs-podcast-autoplaylist.nix new file mode 100644 index 00000000..2532cfc3 --- /dev/null +++ b/modules/abs-podcast-autoplaylist.nix | |||
| @@ -0,0 +1,54 @@ | |||
| 1 | { config, pkgs, lib, utils, ... }: | ||
| 2 | |||
| 3 | let | ||
| 4 | cfg = config.services.abs-podcast-autoplaylist; | ||
| 5 | |||
| 6 | enabledAttrs = lib.filterAttrs (_name: { enable, ... }: enable) cfg; | ||
| 7 | in { | ||
| 8 | options = { | ||
| 9 | services.abs-podcast-autoplaylist = lib.mkOption { | ||
| 10 | default = {}; | ||
| 11 | type = lib.types.attrsOf (lib.types.submodule ({ name, ... }: { | ||
| 12 | options = { | ||
| 13 | enable = lib.mkEnableOption "this instance of abs-podcast-autoplaylist" // { | ||
| 14 | default = true; | ||
| 15 | }; | ||
| 16 | cron = lib.mkOption { | ||
| 17 | type = lib.types.str; | ||
| 18 | default = "*-*-* *:00/30:00"; | ||
| 19 | }; | ||
| 20 | configSecret = lib.mkOption { | ||
| 21 | type = lib.types.str; | ||
| 22 | default = "abs-podcast-autoplaylist-${name}.toml"; | ||
| 23 | }; | ||
| 24 | }; | ||
| 25 | })); | ||
| 26 | }; | ||
| 27 | }; | ||
| 28 | |||
| 29 | config = lib.mkIf (enabledAttrs != {}) { | ||
| 30 | systemd.services = { | ||
| 31 | "abs-podcast-autoplaylist@" = { | ||
| 32 | serviceConfig = { | ||
| 33 | WorkingDirectory = "%d"; | ||
| 34 | DynamicUser = true; | ||
| 35 | ProtectHome = true; | ||
| 36 | PrivateTmp = true; | ||
| 37 | PrivateDevices = true; | ||
| 38 | Type = "oneshot"; | ||
| 39 | ExecStart = "${lib.getExe pkgs.abs-podcast-autoplaylist} %I.toml"; | ||
| 40 | }; | ||
| 41 | }; | ||
| 42 | } // lib.mapAttrs' (name: { configSecret, ... }: lib.nameValuePair "abs-podcast-autoplaylist@${utils.escapeSystemdPath name}" { | ||
| 43 | overrideStrategy = "asDropin"; | ||
| 44 | serviceConfig = { | ||
| 45 | LoadCredential = "${name}.toml:${config.sops.secrets.${configSecret}.path}"; | ||
| 46 | }; | ||
| 47 | }) enabledAttrs; | ||
| 48 | |||
| 49 | systemd.timers = lib.mapAttrs' (name: { cron, ... }: lib.nameValuePair "abs-podcast-autoplaylist@${utils.escapeSystemdPath name}" { | ||
| 50 | wantedBy = [ "timers.target" ]; | ||
| 51 | timerConfig.OnCalendar = cron; | ||
| 52 | }) enabledAttrs; | ||
| 53 | }; | ||
| 54 | } | ||
