grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / computing / foldingathome / client.nix
blob71fc58669d33bd46fd184cc694cdcc4ef9af6051
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.foldingathome;
5   args =
6     ["--team" "${toString cfg.team}"]
7     ++ lib.optionals (cfg.user != null) ["--user" cfg.user]
8     ++ cfg.extraArgs
9     ;
12   imports = [
13     (lib.mkRenamedOptionModule [ "services" "foldingAtHome" ] [ "services" "foldingathome" ])
14     (lib.mkRenamedOptionModule [ "services" "foldingathome" "nickname" ] [ "services" "foldingathome" "user" ])
15     (lib.mkRemovedOptionModule [ "services" "foldingathome" "config" ] ''
16       Use <literal>services.foldingathome.extraArgs instead<literal>
17     '')
18   ];
19   options.services.foldingathome = {
20     enable = lib.mkEnableOption "Folding@home client";
22     package = lib.mkPackageOption pkgs "fahclient" { };
24     user = lib.mkOption {
25       type = lib.types.nullOr lib.types.str;
26       default = null;
27       description = ''
28         The user associated with the reported computation results. This will
29         be used in the ranking statistics.
30       '';
31     };
33     team = lib.mkOption {
34       type = lib.types.int;
35       default = 236565;
36       description = ''
37         The team ID associated with the reported computation results. This
38         will be used in the ranking statistics.
40         By default, use the NixOS folding@home team ID is being used.
41       '';
42     };
44     daemonNiceLevel = lib.mkOption {
45       type = lib.types.ints.between (-20) 19;
46       default = 0;
47       description = ''
48         Daemon process priority for FAHClient.
49         0 is the default Unix process priority, 19 is the lowest.
50       '';
51     };
53     extraArgs = lib.mkOption {
54       type = lib.types.listOf lib.types.str;
55       default = [];
56       description = ''
57         Extra startup options for the FAHClient. Run
58         `fah-client --help` to find all the available options.
59       '';
60     };
61   };
63   config = lib.mkIf cfg.enable {
64     systemd.services.foldingathome = {
65       description = "Folding@home client";
66       after = [ "network.target" ];
67       wantedBy = [ "multi-user.target" ];
68       script = ''
69         exec ${lib.getExe cfg.package} ${lib.escapeShellArgs args}
70       '';
71       serviceConfig = {
72         DynamicUser = true;
73         StateDirectory = "foldingathome";
74         Nice = cfg.daemonNiceLevel;
75         WorkingDirectory = "%S/foldingathome";
76       };
77     };
78   };
80   meta = {
81     maintainers = with lib.maintainers; [ zimbatm ];
82   };