From e8406f937ef583f6d80916912a2b04b55f9b627b Mon Sep 17 00:00:00 2001 From: Samuel Dionne-Riel Date: Tue, 28 Aug 2018 23:53:10 -0400 Subject: [PATCH] nixos/grub: Adds background color and mode options The background color option is self-explanatory. The mode is either `normal` or `stretch`, they are as defined by GRUB, where normal will put the image in the top-left corner of the menu, and stretch is the default, where it stretches the image without consideration for the aspect ratio. * https://www.gnu.org/software/grub/manual/grub/grub.html#background_005fimage --- .../modules/system/boot/loader/grub/grub.nix | 27 +++++++++++++++++++ .../system/boot/loader/grub/install-grub.pl | 9 ++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/nixos/modules/system/boot/loader/grub/grub.nix b/nixos/modules/system/boot/loader/grub/grub.nix index 42da6585722..a9c5e8e30d3 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 d1ff6e6bf52..ea6e56892cb 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