grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / mail / rspamd-trainer.nix
blob11c4363cc1d583a190eb720cef8eb63541b10cbf
1 { config, lib, pkgs, ... }:
2 let
4   cfg = config.services.rspamd-trainer;
5   format = pkgs.formats.toml { };
7 in {
8   options.services.rspamd-trainer = {
10     enable = lib.mkEnableOption "Spam/ham trainer for rspamd";
12     settings = lib.mkOption {
13       default = { };
14       description = ''
15         IMAP authentication configuration for rspamd-trainer. For supplying
16         the IMAP password, use the `secrets` option.
17       '';
18       type = lib.types.submodule {
19         freeformType = format.type;
20       };
21       example = lib.literalExpression ''
22         {
23           HOST = "localhost";
24           USERNAME = "spam@example.com";
25           INBOXPREFIX = "INBOX/";
26         }
27       '';
28     };
30     secrets = lib.mkOption {
31       type = with lib.types; listOf path;
32       description = ''
33         A list of files containing the various secrets. Should be in the
34         format expected by systemd's `EnvironmentFile` directory. For the
35         IMAP account password use `PASSWORD = mypassword`.
36       '';
37       default = [ ];
38     };
40   };
42   config = lib.mkIf cfg.enable {
44     systemd = {
45       services.rspamd-trainer = {
46         description = "Spam/ham trainer for rspamd";
47         serviceConfig = {
48           ExecStart = "${pkgs.rspamd-trainer}/bin/rspamd-trainer";
49           WorkingDirectory = "/var/lib/rspamd-trainer";
50           StateDirectory = [ "rspamd-trainer/log" ];
51           Type = "oneshot";
52           DynamicUser = true;
53           EnvironmentFile = [
54             ( format.generate "rspamd-trainer-env" cfg.settings )
55             cfg.secrets
56           ];
57         };
58       };
59       timers."rspamd-trainer" = {
60         wantedBy = [ "timers.target" ];
61         timerConfig = {
62           OnBootSec = "10m";
63           OnUnitActiveSec = "10m";
64           Unit = "rspamd-trainer.service";
65         };
66       };
67     };
69   };
71   meta.maintainers = with lib.maintainers; [ onny ];