diff --git a/nixos/modules/system/boot/loader/grub/grub.nix b/nixos/modules/system/boot/loader/grub/grub.nix
index e2cff1c1bd94..67daaa333e5e 100644
--- a/nixos/modules/system/boot/loader/grub/grub.nix
+++ b/nixos/modules/system/boot/loader/grub/grub.nix
@@ -308,10 +308,22 @@ in
type = types.nullOr types.path;
example = literalExample "./my-background.png";
description = ''
- Background image used for GRUB. It must be a 640x480,
+ Background image used for GRUB.
+ Set to null to run GRUB in text mode.
+
+
+ For grub 1:
+ It must be a 640x480,
14-colour image in XPM format, optionally compressed with
- gzip or bzip2. Set to
- null to run GRUB in text mode.
+ gzip or bzip2.
+
+
+
+ For grub 2:
+ File must be one of .png, .tga, .jpg, or .jpeg. JPEG images must
+ not be progressive.
+ The image will be scaled if necessary to fit the screen.
+
'';
};
diff --git a/nixos/modules/system/boot/loader/grub/install-grub.pl b/nixos/modules/system/boot/loader/grub/install-grub.pl
index 8bd203106f55..1aa14729a75c 100644
--- a/nixos/modules/system/boot/loader/grub/install-grub.pl
+++ b/nixos/modules/system/boot/loader/grub/install-grub.pl
@@ -299,12 +299,16 @@ else {
copy $font, "$bootPath/converted-font.pf2" or die "cannot copy $font to $bootPath\n";
}
if ($splashImage) {
- # FIXME: GRUB 1.97 doesn't resize the background image if it
- # doesn't match the video resolution.
- copy $splashImage, "$bootPath/background.png" or die "cannot copy $splashImage to $bootPath\n";
+ # Keeps the image's extension.
+ my ($filename, $dirs, $suffix) = fileparse($splashImage, qr"\..[^.]*$");
+ # The module for jpg is jpeg.
+ if ($suffix eq ".jpg") {
+ $suffix = ".jpeg";
+ }
+ copy $splashImage, "$bootPath/background$suffix" or die "cannot copy $splashImage to $bootPath\n";
$conf .= "
- insmod png
- if background_image " . $grubBoot->path . "/background.png; then
+ insmod " . substr($suffix, 1) . "
+ if background_image " . $grubBoot->path . "/background$suffix; then
set color_normal=white/black
set color_highlight=black/white
else