From 5d8d3ab1481f111d82a780464481c9feb7e7cf8b Mon Sep 17 00:00:00 2001 From: Gautier DI FOLCO Date: Mon, 12 Aug 2024 23:02:36 +0200 Subject: [PATCH] feat: add flag to disable containers tooling (#1367) --- src/modules/containers.nix | 50 +++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/src/modules/containers.nix b/src/modules/containers.nix index 7ad91e027..75fdbc9ff 100644 --- a/src/modules/containers.nix +++ b/src/modules/containers.nix @@ -95,11 +95,11 @@ let mkDerivation = cfg: nix2container.nix2container.buildImage { name = cfg.name; tag = cfg.version; - initializeNixDatabase = true; + initializeNixDatabase = cfg.isDev; nixUid = lib.toInt uid; nixGid = lib.toInt gid; - copyToRoot = [ + copyToRoot = lib.lists.optionals cfg.isDev [ (pkgs.buildEnv { name = "devenv-container-root"; paths = [ @@ -116,14 +116,16 @@ let maxLayers = cfg.maxLayers; - layers = [ - (nix2container.nix2container.buildLayer { - perms = map mkPerm (mkMultiHome (homeRoots cfg)); - copyToRoot = mkMultiHome (homeRoots cfg); - }) - ]; + layers = + if cfg.isDev + then [ + (nix2container.nix2container.buildLayer { + perms = map mkPerm (mkMultiHome (homeRoots cfg)); + copyToRoot = mkMultiHome (homeRoots cfg); + }) + ] else homeRoots cfg; - perms = [ + perms = lib.lists.optionals cfg.isDev [ { path = mkTmp; regex = "/tmp"; @@ -135,17 +137,19 @@ let } ]; - config = { - Entrypoint = cfg.entrypoint; - User = "${user}"; - WorkingDir = "${homeDir}"; - Env = lib.mapAttrsToList - (name: value: - "${name}=${toString value}" - ) - config.env ++ [ "HOME=${homeDir}" "USER=${user}" ]; - Cmd = [ cfg.startupCommand ]; - }; + config = lib.attrsets.mergeAttrsList [ + { + Entrypoint = cfg.entrypoint; + Cmd = [ cfg.startupCommand ]; + Env = lib.mapAttrsToList (name: value: "${name}=${toString value}") + config.env ++ lib.lists.optionals cfg.isDev [ "HOME=${homeDir}" "USER=${user}" ]; + } + (if cfg.isDev then { + User = "${user}"; + WorkingDir = "${homeDir}"; + } else + { }) + ]; }; # @@ -239,6 +243,12 @@ let description = "Set to true when the environment is building this container."; }; + isDev = lib.mkOption { + type = types.bool; + default = true; + description = "Is a development containers (add tools)."; + }; + derivation = lib.mkOption { type = types.package; internal = true;