grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / misc / taskchampion-sync-server.nix
blob04037dee576b16adf70483e13a99b3fab8b2bbe0
2   config,
3   pkgs,
4   lib,
5   ...
6 }:
7 let
8   inherit (lib) types;
9   cfg = config.services.taskchampion-sync-server;
12   options.services.taskchampion-sync-server = {
13     enable = lib.mkEnableOption "TaskChampion Sync Server for Taskwarrior 3";
14     package = lib.mkPackageOption pkgs "taskchampion-sync-server" { };
15     user = lib.mkOption {
16       description = "Unix User to run the server under";
17       type = types.str;
18       default = "taskchampion";
19     };
20     group = lib.mkOption {
21       description = "Unix Group to run the server under";
22       type = types.str;
23       default = "taskchampion";
24     };
25     port = lib.mkOption {
26       description = "Port on which to serve";
27       type = types.port;
28       default = 10222;
29     };
30     openFirewall = lib.mkEnableOption "Open firewall port for taskchampion-sync-server";
31     dataDir = lib.mkOption {
32       description = "Directory in which to store data";
33       type = types.path;
34       default = "/var/lib/taskchampion-sync-server";
35     };
36     snapshot = {
37       versions = lib.mkOption {
38         description = "Target number of versions between snapshots";
39         type = types.ints.positive;
40         default = 100;
41       };
42       days = lib.mkOption {
43         description = "Target number of days between snapshots";
44         type = types.ints.positive;
45         default = 14;
46       };
47     };
48   };
50   config = lib.mkIf cfg.enable {
51     users.users.${cfg.user} = {
52       isSystemUser = true;
53       inherit (cfg) group;
54     };
55     users.groups.${cfg.group} = { };
56     networking.firewall.allowedTCPPorts = lib.mkIf (cfg.openFirewall) [ cfg.port ];
57     systemd.tmpfiles.settings = {
58       "10-taskchampion-sync-server" = {
59         "${cfg.dataDir}" = {
60           d = {
61             inherit (cfg) group user;
62             mode = "0750";
63           };
64         };
65       };
66     };
68     systemd.services.taskchampion-sync-server = {
69       wantedBy = [ "multi-user.target" ];
70       after = [ "network.target" ];
71       serviceConfig = {
72         User = cfg.user;
73         Group = cfg.group;
74         DynamicUser = false;
75         ExecStart = ''
76           ${lib.getExe cfg.package} \
77             --port ${builtins.toString cfg.port} \
78             --data-dir ${cfg.dataDir} \
79             --snapshot-versions ${builtins.toString cfg.snapshot.versions} \
80             --snapshot-days ${builtins.toString cfg.snapshot.days}
81         '';
82       };
83     };
84   };