vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / system / cachix-agent / default.nix
bloba6fe9f0cfed4d6848972d1c94983f4965824dbc9
1 { config, pkgs, lib, ... }:
3 with lib;
5 let
6   cfg = config.services.cachix-agent;
7 in {
8   meta.maintainers = [ lib.maintainers.domenkozar ];
10   options.services.cachix-agent = {
11     enable = mkEnableOption "Cachix Deploy Agent: https://docs.cachix.org/deploy/";
13     name = mkOption {
14       type = types.str;
15       description = "Agent name, usually same as the hostname";
16       default = config.networking.hostName;
17       defaultText = "config.networking.hostName";
18     };
20     verbose = mkOption {
21       type = types.bool;
22       description = "Enable verbose output";
23       default = false;
24     };
26     profile = mkOption {
27       type = types.nullOr types.str;
28       default = null;
29       description = "Profile name, defaults to 'system' (NixOS).";
30     };
32     host = mkOption {
33       type = types.nullOr types.str;
34       default = null;
35       description = "Cachix uri to use.";
36     };
38     package = mkPackageOption pkgs "cachix" { };
40     credentialsFile = mkOption {
41       type = types.path;
42       default = "/etc/cachix-agent.token";
43       description = ''
44         Required file that needs to contain CACHIX_AGENT_TOKEN=...
45       '';
46     };
47   };
49   config = mkIf cfg.enable {
50     systemd.services.cachix-agent = {
51       description = "Cachix Deploy Agent";
52       wants = [ "network-online.target" ];
53       after = ["network-online.target"];
54       path = [ config.nix.package ];
55       wantedBy = [ "multi-user.target" ];
57       # Cachix requires $USER to be set
58       environment.USER = "root";
60       # don't stop the service if the unit disappears
61       unitConfig.X-StopOnRemoval = false;
63       serviceConfig = {
64         # we don't want to kill children processes as those are deployments
65         KillMode = "process";
66         Restart = "always";
67         RestartSec = 5;
68         EnvironmentFile = cfg.credentialsFile;
69         ExecStart = ''
70           ${cfg.package}/bin/cachix ${lib.optionalString cfg.verbose "--verbose"} ${lib.optionalString (cfg.host != null) "--host ${cfg.host}"} \
71             deploy agent ${cfg.name} ${optionalString (cfg.profile != null) cfg.profile}
72         '';
73       };
74     };
75   };