@@ -2,6 +2,7 @@
22let
33 cfg = config.virtualisation.podman;
44 toml = pkgs.formats.toml { };
5+ json = pkgs.formats.json { };
56
67 inherit (lib) mkOption types;
78
@@ -22,9 +23,23 @@ let
2223 done
2324 '';
2425
26+ net-conflist = pkgs.runCommand "87-podman-bridge.conflist" {
27+ nativeBuildInputs = [ pkgs.jq ];
28+ extraPlugins = builtins.toJSON cfg.defaultNetwork.extraPlugins;
29+ jqScript = ''
30+ . + { "plugins": (.plugins + $extraPlugins) }
31+ '';
32+ } ''
33+ jq <${cfg.package}/etc/cni/net.d/87-podman-bridge.conflist \
34+ --argjson extraPlugins "$extraPlugins" \
35+ "$jqScript" \
36+ >$out
37+ '';
38+
2539in
2640{
2741 imports = [
42+ ./podman-dnsname.nix
2843 ./podman-network-socket.nix
2944 (lib.mkRenamedOptionModule [ "virtualisation" "podman" "libpod" ] [ "virtualisation" "containers" "containersConf" ])
3045 ];
@@ -99,6 +114,13 @@ in
99114 '';
100115 };
101116
117+ defaultNetwork.extraPlugins = lib.mkOption {
118+ type = types.listOf json.type;
119+ default = [];
120+ description = ''
121+ Extra CNI plugin configurations to add to podman's default network.
122+ '';
123+ };
102124
103125 };
104126
@@ -107,7 +129,7 @@ in
107129 environment.systemPackages = [ cfg.package ]
108130 ++ lib.optional cfg.dockerCompat dockerCompat;
109131
110− environment.etc."cni/net.d/87-podman-bridge.conflist".source = "${cfg.package}/etc/cni/net.d/87-podman-bridge.conflist";
132+ environment.etc."cni/net.d/87-podman-bridge.conflist".source = net-conflist;
111133
112134 virtualisation.containers = {
113135 enable = true; # Enable common /etc/containers configuration