grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / admin / docuum.nix
blob51a21740b276a7e4a1b2d56b5b9430b3d5402a49
1 { config, pkgs, lib, utils, ... }:
3 let
4   cfg = config.services.docuum;
5   inherit (lib) mkIf mkEnableOption mkOption getExe types optionals concatMap;
6 in
8   options.services.docuum = {
9     enable = mkEnableOption "docuum daemon";
11     threshold = mkOption {
12       description = "Threshold for deletion in bytes, like `10 GB`, `10 GiB`, `10GB` or percentage-based thresholds like `50%`";
13       type = types.str;
14       default = "10 GB";
15       example = "50%";
16     };
18     minAge = mkOption {
19       description = "Sets the minimum age of images to be considered for deletion.";
20       type = types.nullOr types.str;
21       default = null;
22       example = "1d";
23     };
25     keep = mkOption {
26       description = "Prevents deletion of images for which repository:tag matches the specified regex.";
27       type = types.listOf types.str;
28       default = [];
29       example = [ "^my-image" ];
30     };
32     deletionChunkSize = mkOption {
33       description = "Removes specified quantity of images at a time.";
34       type = types.int;
35       default = 1;
36       example = 10;
37     };
38   };
40   config = mkIf cfg.enable {
41     assertions = [
42       {
43         assertion = config.virtualisation.docker.enable;
44         message = "docuum requires docker on the host";
45       }
46     ];
48     systemd.services.docuum = {
49       after = [ "docker.socket" ];
50       requires = [ "docker.socket" ];
51       wantedBy = [ "multi-user.target" ];
52       path = [ config.virtualisation.docker.package ];
53       environment.HOME = "/var/lib/docuum";
55       serviceConfig = {
56         DynamicUser = true;
57         StateDirectory = "docuum";
58         SupplementaryGroups = [ "docker" ];
59         ExecStart = utils.escapeSystemdExecArgs ([
60           (getExe pkgs.docuum)
61           "--threshold" cfg.threshold
62           "--deletion-chunk-size" cfg.deletionChunkSize
63         ] ++ (concatMap (keep: [ "--keep" keep ]) cfg.keep)
64           ++ (optionals (cfg.minAge != null) [ "--min-age" cfg.minAge ])
65         );
66       };
67     };
68   };