nixos/systemd-initrd: add boot.initrd.systemd.shell.enable option

This commit is contained in:
nikstur
2025-09-28 20:59:28 +02:00
parent 26cf6ffe54
commit 8002da18ab

View File

@@ -325,6 +325,22 @@ in
''; '';
}; };
shell.enable = lib.mkEnableOption "" // {
default = config.environment.shell.enable;
internal = true;
description = ''
Whether to enable a shell in the initrd.
In contrast to `environment.shell.enable`, this option actually
strictly disables all shells in the initrd because they're not copied
into it anymore. Paths that use a shell (e.g. via the `script` option),
will break if this option is set.
Only set this option if you're sure that you can recover from potential
issues.
'';
};
units = mkOption { units = mkOption {
description = "Definition of systemd units."; description = "Definition of systemd units.";
default = { }; default = { };
@@ -460,13 +476,15 @@ in
++ lib.optional (config.boot.initrd.systemd.root == "gpt-auto") "rw"; ++ lib.optional (config.boot.initrd.systemd.root == "gpt-auto") "rw";
boot.initrd.systemd = { boot.initrd.systemd = {
# bashInteractive is easier to use and also required by debug-shell.service
initrdBin = [ initrdBin = [
pkgs.bashInteractive
pkgs.coreutils pkgs.coreutils
cfg.package cfg.package
] ]
++ lib.optional (config.system.build.kernel.config.isYes "MODULES") cfg.package.kmod; ++ lib.optional (config.system.build.kernel.config.isYes "MODULES") cfg.package.kmod
++ lib.optionals cfg.shell.enable [
# bashInteractive is easier to use and also required by debug-shell.service
pkgs.bashInteractive
];
extraBin = { extraBin = {
less = "${pkgs.less}/bin/less"; less = "${pkgs.less}/bin/less";
mount = "${cfg.package.util-linux}/bin/mount"; mount = "${cfg.package.util-linux}/bin/mount";
@@ -550,11 +568,6 @@ in
"${cfg.package.util-linux}/bin/umount" "${cfg.package.util-linux}/bin/umount"
"${cfg.package.util-linux}/bin/sulogin" "${cfg.package.util-linux}/bin/sulogin"
# required for services generated with writeShellScript and friends
pkgs.runtimeShell
# some tools like xfs still want the sh symlink
"${pkgs.bashNonInteractive}/bin"
# so NSS can look up usernames # so NSS can look up usernames
"${pkgs.glibc}/lib/libnss_files.so.2" "${pkgs.glibc}/lib/libnss_files.so.2"
@@ -566,6 +579,12 @@ in
++ lib.optionals config.system.nixos-init.enable [ ++ lib.optionals config.system.nixos-init.enable [
"${config.system.nixos-init.package}/bin/initrd-init" "${config.system.nixos-init.package}/bin/initrd-init"
] ]
++ lib.optionals cfg.shell.enable [
# required for services generated with writeShellScript and friends
pkgs.runtimeShell
# some tools like xfs still want the sh symlink
"${pkgs.bashNonInteractive}/bin"
]
++ jobScripts ++ jobScripts
++ map (c: builtins.removeAttrs c [ "text" ]) (builtins.attrValues cfg.contents); ++ map (c: builtins.removeAttrs c [ "text" ]) (builtins.attrValues cfg.contents);