nixos: Add support for scalable fonts in Grub menus (#26227)
The default font is unreadably small on some hidpi displays. This makes it possible to specify a TrueType or OpenType font at any point size, and it will automatically be converted to the format the Grub uses.
This commit is contained in:
parent
1fe951816c
commit
700e22f7bf
@ -64,11 +64,21 @@ let
|
|||||||
)) + ":" + (makeSearchPathOutput "bin" "sbin" [
|
)) + ":" + (makeSearchPathOutput "bin" "sbin" [
|
||||||
pkgs.mdadm pkgs.utillinux
|
pkgs.mdadm pkgs.utillinux
|
||||||
]);
|
]);
|
||||||
|
font = if lib.last (lib.splitString "." cfg.font) == "pf2"
|
||||||
|
then cfg.font
|
||||||
|
else "${convertedFont}";
|
||||||
});
|
});
|
||||||
|
|
||||||
bootDeviceCounters = fold (device: attr: attr // { "${device}" = (attr."${device}" or 0) + 1; }) {}
|
bootDeviceCounters = fold (device: attr: attr // { "${device}" = (attr."${device}" or 0) + 1; }) {}
|
||||||
(concatMap (args: args.devices) cfg.mirroredBoots);
|
(concatMap (args: args.devices) cfg.mirroredBoots);
|
||||||
|
|
||||||
|
convertedFont = (pkgs.runCommand "grub-font-converted.pf2" {}
|
||||||
|
(builtins.concatStringsSep " "
|
||||||
|
([ "${realGrub}/bin/grub-mkfont"
|
||||||
|
cfg.font
|
||||||
|
"--output" "$out"
|
||||||
|
] ++ (optional (cfg.fontSize!=null) "--size ${toString cfg.fontSize}")))
|
||||||
|
);
|
||||||
in
|
in
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -276,7 +286,7 @@ in
|
|||||||
extraInitrd = mkOption {
|
extraInitrd = mkOption {
|
||||||
type = types.nullOr types.path;
|
type = types.nullOr types.path;
|
||||||
default = null;
|
default = null;
|
||||||
example = "/boot/extra_initrafms.gz";
|
example = "/boot/extra_initramfs.gz";
|
||||||
description = ''
|
description = ''
|
||||||
The path to a second initramfs to be supplied to the kernel.
|
The path to a second initramfs to be supplied to the kernel.
|
||||||
This ramfs will not be copied to the store, so that it can
|
This ramfs will not be copied to the store, so that it can
|
||||||
@ -305,6 +315,24 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
font = mkOption {
|
||||||
|
type = types.nullOr types.path;
|
||||||
|
default = "${realGrub}/share/grub/unicode.pf2";
|
||||||
|
description = ''
|
||||||
|
Path to a TrueType, OpenType, or pf2 font to be used by Grub.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
fontSize = mkOption {
|
||||||
|
type = types.nullOr types.int;
|
||||||
|
example = literalExample 16;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
Font size for the grub menu. Ignored unless <literal>font</literal>
|
||||||
|
is set to a ttf or otf font.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
gfxmodeEfi = mkOption {
|
gfxmodeEfi = mkOption {
|
||||||
default = "auto";
|
default = "auto";
|
||||||
example = "1024x768";
|
example = "1024x768";
|
||||||
|
@ -67,6 +67,7 @@ my $gfxmodeEfi = get("gfxmodeEfi");
|
|||||||
my $gfxmodeBios = get("gfxmodeBios");
|
my $gfxmodeBios = get("gfxmodeBios");
|
||||||
my $bootloaderId = get("bootloaderId");
|
my $bootloaderId = get("bootloaderId");
|
||||||
my $forceInstall = get("forceInstall");
|
my $forceInstall = get("forceInstall");
|
||||||
|
my $font = get("font");
|
||||||
$ENV{'PATH'} = get("path");
|
$ENV{'PATH'} = get("path");
|
||||||
|
|
||||||
die "unsupported GRUB version\n" if $grubVersion != 1 && $grubVersion != 2;
|
die "unsupported GRUB version\n" if $grubVersion != 1 && $grubVersion != 2;
|
||||||
@ -281,7 +282,7 @@ else {
|
|||||||
insmod vbe
|
insmod vbe
|
||||||
fi
|
fi
|
||||||
insmod font
|
insmod font
|
||||||
if loadfont " . $grubBoot->path . "/grub/fonts/unicode.pf2; then
|
if loadfont " . $grubBoot->path . "/converted-font.pf2; then
|
||||||
insmod gfxterm
|
insmod gfxterm
|
||||||
if [ \"\${grub_platform}\" = \"efi\" ]; then
|
if [ \"\${grub_platform}\" = \"efi\" ]; then
|
||||||
set gfxmode=$gfxmodeEfi
|
set gfxmode=$gfxmodeEfi
|
||||||
@ -294,6 +295,9 @@ else {
|
|||||||
fi
|
fi
|
||||||
";
|
";
|
||||||
|
|
||||||
|
if ($font) {
|
||||||
|
copy $font, "$bootPath/converted-font.pf2" or die "cannot copy $font to $bootPath\n";
|
||||||
|
}
|
||||||
if ($splashImage) {
|
if ($splashImage) {
|
||||||
# FIXME: GRUB 1.97 doesn't resize the background image if it
|
# FIXME: GRUB 1.97 doesn't resize the background image if it
|
||||||
# doesn't match the video resolution.
|
# doesn't match the video resolution.
|
||||||
|
Loading…
Reference in New Issue
Block a user