{ config, lib, pkgs, ... }: let my-cni-plugins = pkgs.buildEnv { name = "my-cni-plugins"; paths = with pkgs; [ cni-plugins # cni-plugin-flannel ]; }; my-cni-configs = pkgs.callPackage ./package/cni_conf/package.nix { }; in { imports = [ ]; options.me = { containerd.enable = lib.mkOption { type = lib.types.bool; default = false; example = true; description = "Whether we want to install containerd."; }; }; config = lib.mkIf config.me.containerd.enable { virtualisation.containerd.enable = true; virtualisation.containerd.settings = { "plugins" = { "io.containerd.grpc.v1.cri" = { "cni" = { "bin_dir" = "/opt/cni/bin"; "conf_dir" = "/etc/cni/net.d"; # "bin_dir" = "${my-cni-plugins}/bin"; # "conf_dir" = "${my-cni-configs}"; }; "containerd" = { "default_runtime_name" = "runc"; "runtimes" = { "runc" = { "options" = { "SystemdCgroup" = true; }; "runtime_type" = "io.containerd.runc.v2"; }; }; "snapshotter" = "overlayfs"; }; }; }; "version" = 2; }; systemd.services.containerd.preStart = '' ${pkgs.toybox}/bin/install -d -m 0755 /opt/cni/bin /etc/cni/net.d ${pkgs.toybox}/bin/install ${my-cni-plugins}/bin/* /opt/cni/bin/ ${pkgs.toybox}/bin/install ${my-cni-configs}/* /etc/cni/net.d/ echo "Copied CNI plugins/config." ''; environment.persistence."/disk" = lib.mkIf (config.me.mountPersistence) { hideMounts = lib.mkForce false; directories = [ "/var/lib/containerd" ]; }; }; }