summaryrefslogtreecommitdiff
path: root/modules/nixos/services/determinate.nix
blob: 6aa599ecff094b3d8eed730f8cb6c0b81f5d4037 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
{
  config,
  lib,
  inputs',
  ...
}:

let
  cfg = config.services.determinate;

  package = inputs'.determinate.packages.default;
in

{
  config = lib.mkIf cfg.enable (
    lib.mkMerge [
      (lib.mkIf cfg.determinate-nixd.enable {
        environment = {
          # `determinate-nixd` overrides /etc/nix/nix.conf with it's own
          etc."nix/nix.custom.conf" = { inherit (config.environment.etc."nix/nix.conf") source; };

          systemPackages = [
            package
          ];
        };

        systemd = {
          services.nix-daemon.serviceConfig = {
            ExecStart = [
              ""
              "@${lib.getExe' package "determinate-nixd"} determinate-nixd --nix-bin ${config.nix.package}/bin daemon"
            ];
            KillMode = lib.mkDefault "process";
            LimitNOFILE = lib.mkDefault 1048576;
            LimitSTACK = lib.mkDefault "64M";
            TasksMax = lib.mkDefault 1048576;
          };

          sockets = {
            determinate-nixd = {
              description = "Determinate Nixd Daemon Socket";
              wantedBy = [ "sockets.target" ];
              before = [ "multi-user.target" ];

              unitConfig = {
                RequiresMountsFor = [
                  "/nix/store"
                  "/nix/var/determinate"
                ];
              };

              socketConfig = {
                Service = "nix-daemon.service";
                FileDescriptorName = "determinate-nixd.socket";
                ListenStream = "/nix/var/determinate/determinate-nixd.socket";
                DirectoryMode = "0755";
              };
            };

            nix-daemon.socketConfig = {
              FileDescriptorName = "nix-daemon.socket";
            };
          };
        };
      })
    ]
  );
}