diff --git a/nixos/modules/system/boot/loader/grub/grub.nix b/nixos/modules/system/boot/loader/grub/grub.nix
index 42da65857221..a9c5e8e30d32 100644
--- a/nixos/modules/system/boot/loader/grub/grub.nix
+++ b/nixos/modules/system/boot/loader/grub/grub.nix
@@ -38,6 +38,8 @@ let
in
pkgs.writeText "grub-config.xml" (builtins.toXML
{ splashImage = f cfg.splashImage;
+ splashMode = f cfg.splashMode;
+ backgroundColor = f cfg.backgroundColor;
grub = f grub;
grubTarget = f (grub.grubTarget or "");
shell = "${pkgs.runtimeShell}";
@@ -328,6 +330,31 @@ in
'';
};
+ backgroundColor = mkOption {
+ type = types.nullOr types.string;
+ example = "#7EBAE4";
+ default = null;
+ description = ''
+ Background color to be used for GRUB to fill the areas the image isn't filling.
+
+
+ This options has no effect for GRUB 1.
+
+ '';
+ };
+
+ splashMode = mkOption {
+ type = types.enum [ "normal" "stretch" ];
+ default = "stretch";
+ description = ''
+ Whether to stretch the image or show the image in the top-left corner unstretched.
+
+
+ This options has no effect for GRUB 1.
+
+ '';
+ };
+
font = mkOption {
type = types.nullOr types.path;
default = "${realGrub}/share/grub/unicode.pf2";
diff --git a/nixos/modules/system/boot/loader/grub/install-grub.pl b/nixos/modules/system/boot/loader/grub/install-grub.pl
index d1ff6e6bf525..ea6e56892cb3 100644
--- a/nixos/modules/system/boot/loader/grub/install-grub.pl
+++ b/nixos/modules/system/boot/loader/grub/install-grub.pl
@@ -51,6 +51,8 @@ my $extraEntries = get("extraEntries");
my $extraEntriesBeforeNixOS = get("extraEntriesBeforeNixOS") eq "true";
my $extraInitrd = get("extraInitrd");
my $splashImage = get("splashImage");
+my $splashMode = get("splashMode");
+my $backgroundColor = get("backgroundColor");
my $configurationLimit = int(get("configurationLimit"));
my $copyKernels = get("copyKernels") eq "true";
my $timeout = int(get("timeout"));
@@ -307,10 +309,15 @@ else {
if ($suffix eq ".jpg") {
$suffix = ".jpeg";
}
+ if ($backgroundColor) {
+ $conf .= "
+ background_color '$backgroundColor'
+ ";
+ }
copy $splashImage, "$bootPath/background$suffix" or die "cannot copy $splashImage to $bootPath\n";
$conf .= "
insmod " . substr($suffix, 1) . "
- if background_image " . $grubBoot->path . "/background$suffix; then
+ if background_image --mode '$splashMode' " . $grubBoot->path . "/background$suffix; then
set color_normal=white/black
set color_highlight=black/white
else