1
0
nixfiles/modules/clerie-gc-dir/default.nix

62 lines
1.3 KiB
Nix

{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.clerie-gc-dir;
gcdirServices = mapAttrs' (name: options:
nameValuePair "clerie-gc-dir-${name}" {
serviceConfig = {
Type = "oneshot";
User = options.user;
#Group = if (options.group) != null then options.group else config.users.user.${options.user}.group;
};
script = ''
find ${options.dir} -depth -mindepth 1 -mtime +20 -delete
'';
}
) cfg.dirs;
gcdirTimers = mapAttrs' (name: options:
nameValuePair "clerie-gc-dir-${name}" {
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "hourly";
RandomizedDelaySec = "1h";
};
}
) cfg.dirs;
dirOptions = { ... }: {
options = {
user = mkOption {
type = types.str;
};
group = mkOption {
type = with types; nullOr str;
default = null;
};
dir = mkOption {
type = types.str;
};
};
};
in {
options = {
services.clerie-gc-dir = {
enable = mkEnableOption "clerie's Directory Garbage Collector";
dirs = mkOption {
type = with types; attrsOf (submodule dirOptions);
default = {};
};
};
};
config = mkIf cfg.enable {
systemd.services = gcdirServices;
systemd.timers = gcdirTimers;
};
}