home

My NixOS systems configurations.
Log | Files | Refs | LICENSE

buildkit.nix (2689B)


      1 { config, lib, pkgs, ... }:
      2 let
      3   cfg = config.virtualisation.buildkitd;
      4   inherit (lib) mkOption mkIf;
      5   inherit (lib.types) attrsOf str nullOr path bool package listOf;
      6 
      7   configFile =
      8     if cfg.configFile == null then
      9       settingsFormat.generate "buildkitd.toml" cfg.settings
     10     else
     11       cfg.configFile;
     12 
     13   settingsFormat = pkgs.formats.toml { };
     14 in
     15 {
     16   options.virtualisation.buildkitd = {
     17     enable = mkOption {
     18       type = bool;
     19       default = false;
     20       description = ''This option enables buildkitd'';
     21     };
     22 
     23     package = mkOption {
     24       default = pkgs.buildkit;
     25       type = package;
     26       example = pkgs.buildkit;
     27       description = ''
     28         Buildkitd package to be used in the module
     29       '';
     30     };
     31 
     32     packages = mkOption {
     33       type = listOf package;
     34       default = [ pkgs.runc pkgs.git ];
     35       description = "List of packages to be added to buildkitd service path";
     36     };
     37 
     38     configFile = lib.mkOption {
     39       default = null;
     40       description = ''
     41         Path to containerd config file.
     42         Setting this option will override any configuration applied by the settings option.
     43       '';
     44       type = nullOr path;
     45     };
     46 
     47     args = lib.mkOption {
     48       default = { };
     49       description = "extra args to append to the containerd cmdline";
     50       type = attrsOf str;
     51     };
     52 
     53     settings = lib.mkOption {
     54       type = settingsFormat.type;
     55       default = {
     56         grpc.address = [ "unix:///run/buildkit/buildkitd.sock" ];
     57       };
     58       description = ''
     59         Verbatim lines to add to containerd.toml
     60       '';
     61     };
     62   };
     63 
     64   config = mkIf cfg.enable {
     65     users.groups.buildkit.gid = 350;
     66     environment.systemPackages = [ cfg.package ];
     67     systemd.packages = [ cfg.package ];
     68 
     69     virtualisation.buildkitd = {
     70       args = {
     71         group = "buildkit";
     72         config = toString configFile;
     73       };
     74       settings = {
     75         debug = false;
     76       };
     77     };
     78 
     79     systemd.services.buildkitd = {
     80       after = [ "network.target" "containerd.service" ];
     81       wantedBy = [ "multi-user.target" ];
     82       serviceConfig = {
     83         ExecStart = ''${cfg.package}/bin/buildkitd ${lib.concatStringsSep " " (lib.cli.toGNUCommandLine {} cfg.args)}'';
     84         Delegate = "yes";
     85         KillMode = "process";
     86         Type = "notify";
     87         Restart = "always";
     88         RestartSec = "10";
     89 
     90         # "limits" defined below are adopted from upstream: https://github.com/containerd/containerd/blob/master/containerd.service
     91         LimitNPROC = "infinity";
     92         LimitCORE = "infinity";
     93         LimitNOFILE = "infinity";
     94         TasksMax = "infinity";
     95         OOMScoreAdjust = "-999";
     96       };
     97       path = [ cfg.package ] ++ cfg.packages;
     98     };
     99 
    100   };
    101 
    102 
    103 }