boot.loader.grub: add theme option
Co-authored-by: Eelco Dolstra <edolstra@gmail.com> Co-authored-by: Samuel Dionne-Riel <samuel@dionne-riel.com>
This commit is contained in:
parent
af652dd3d3
commit
a7a0d79ef3
|
@ -56,6 +56,7 @@ let
|
||||||
bootloaderId = if args.efiBootloaderId == null then "NixOS${efiSysMountPoint'}" else args.efiBootloaderId;
|
bootloaderId = if args.efiBootloaderId == null then "NixOS${efiSysMountPoint'}" else args.efiBootloaderId;
|
||||||
timeout = if config.boot.loader.timeout == null then -1 else config.boot.loader.timeout;
|
timeout = if config.boot.loader.timeout == null then -1 else config.boot.loader.timeout;
|
||||||
users = if cfg.users == {} || cfg.version != 1 then cfg.users else throw "GRUB version 1 does not support user accounts.";
|
users = if cfg.users == {} || cfg.version != 1 then cfg.users else throw "GRUB version 1 does not support user accounts.";
|
||||||
|
theme = f cfg.theme;
|
||||||
inherit efiSysMountPoint;
|
inherit efiSysMountPoint;
|
||||||
inherit (args) devices;
|
inherit (args) devices;
|
||||||
inherit (efi) canTouchEfiVariables;
|
inherit (efi) canTouchEfiVariables;
|
||||||
|
@ -426,6 +427,19 @@ in
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
theme = mkOption {
|
||||||
|
type = types.nullOr types.path;
|
||||||
|
example = literalExample "pkgs.nixos-grub2-theme";
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
Grub theme to be used.
|
||||||
|
|
||||||
|
<note><para>
|
||||||
|
This options has no effect for GRUB 1.
|
||||||
|
</para></note>
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
splashMode = mkOption {
|
splashMode = mkOption {
|
||||||
type = types.enum [ "normal" "stretch" ];
|
type = types.enum [ "normal" "stretch" ];
|
||||||
default = "stretch";
|
default = "stretch";
|
||||||
|
@ -697,7 +711,7 @@ in
|
||||||
in pkgs.writeScript "install-grub.sh" (''
|
in pkgs.writeScript "install-grub.sh" (''
|
||||||
#!${pkgs.runtimeShell}
|
#!${pkgs.runtimeShell}
|
||||||
set -e
|
set -e
|
||||||
export PERL5LIB=${with pkgs.perlPackages; makePerlPath [ FileSlurp XMLLibXML XMLSAX XMLSAXBase ListCompare JSON ]}
|
export PERL5LIB=${with pkgs.perlPackages; makePerlPath [ FileSlurp FileCopyRecursive XMLLibXML XMLSAX XMLSAXBase ListCompare JSON ]}
|
||||||
${optionalString cfg.enableCryptodisk "export GRUB_ENABLE_CRYPTODISK=y"}
|
${optionalString cfg.enableCryptodisk "export GRUB_ENABLE_CRYPTODISK=y"}
|
||||||
'' + flip concatMapStrings cfg.mirroredBoots (args: ''
|
'' + flip concatMapStrings cfg.mirroredBoots (args: ''
|
||||||
${pkgs.perl}/bin/perl ${install-grub-pl} ${grubConfig args} $@
|
${pkgs.perl}/bin/perl ${install-grub-pl} ${grubConfig args} $@
|
||||||
|
|
|
@ -6,9 +6,11 @@ use File::Basename;
|
||||||
use File::Path;
|
use File::Path;
|
||||||
use File::stat;
|
use File::stat;
|
||||||
use File::Copy;
|
use File::Copy;
|
||||||
|
use File::Copy::Recursive qw(rcopy pathrm);
|
||||||
use File::Slurp;
|
use File::Slurp;
|
||||||
use File::Temp;
|
use File::Temp;
|
||||||
use JSON;
|
use JSON;
|
||||||
|
use File::Find;
|
||||||
require List::Compare;
|
require List::Compare;
|
||||||
use POSIX;
|
use POSIX;
|
||||||
use Cwd;
|
use Cwd;
|
||||||
|
@ -82,6 +84,7 @@ my $gfxpayloadBios = get("gfxpayloadBios");
|
||||||
my $bootloaderId = get("bootloaderId");
|
my $bootloaderId = get("bootloaderId");
|
||||||
my $forceInstall = get("forceInstall");
|
my $forceInstall = get("forceInstall");
|
||||||
my $font = get("font");
|
my $font = get("font");
|
||||||
|
my $theme = get("theme");
|
||||||
$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;
|
||||||
|
@ -370,6 +373,28 @@ else {
|
||||||
fi
|
fi
|
||||||
";
|
";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rmtree("$bootPath/theme") or die "cannot clean up theme folder in $bootPath\n" if -e "$bootPath/theme";
|
||||||
|
|
||||||
|
if ($theme) {
|
||||||
|
# Copy theme
|
||||||
|
rcopy($theme, "$bootPath/theme") or die "cannot copy $theme to $bootPath\n";
|
||||||
|
$conf .= "
|
||||||
|
# Sets theme.
|
||||||
|
set theme=" . ($grubBoot->path eq "/" ? "" : $grubBoot->path) . "/theme/theme.txt
|
||||||
|
export theme
|
||||||
|
# Load theme fonts, if any
|
||||||
|
";
|
||||||
|
|
||||||
|
find( { wanted => sub {
|
||||||
|
if ($_ =~ /\.pf2$/i) {
|
||||||
|
$font = File::Spec->abs2rel($File::Find::name, $theme);
|
||||||
|
$conf .= "
|
||||||
|
loadfont " . ($grubBoot->path eq "/" ? "" : $grubBoot->path) . "/theme/$font
|
||||||
|
";
|
||||||
|
}
|
||||||
|
}, no_chdir => 1 }, $theme );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$conf .= "$extraConfig\n";
|
$conf .= "$extraConfig\n";
|
||||||
|
|
Loading…
Reference in a new issue