From 7e8a1ea75881090ebf2576d9db9ab243c4d6f783 Mon Sep 17 00:00:00 2001 From: dylan madisetti Date: Fri, 18 Nov 2022 12:35:17 -0500 Subject: [PATCH] Allow for more granular control of theme.txt and update depricated way of reffering to modules --- flake.nix | 72 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 58 insertions(+), 14 deletions(-) diff --git a/flake.nix b/flake.nix index 2c3258e..df45cb4 100644 --- a/flake.nix +++ b/flake.nix @@ -14,10 +14,12 @@ in with nixpkgs.lib; rec { - nixosModule = { config, ... }: + nixosModules.default = { config, ... }: let cfg = config.boot.loader.grub2-theme; splashImage = if cfg.splashImage == null then "" else cfg.splashImage; + hasBootMenuConfig = cfg.bootMenuConfig != null; + hasTerminalConfig = cfg.terminalConfig != null; resolutions = { "1080p" = "1920x1080"; "ultrawide" = "2560x1080"; @@ -37,11 +39,30 @@ --icon ${cfg.icon}; if [ -n "${splashImage}" ]; then - cp ${splashImage} $out/grub/themes/${cfg.theme}/background.jpg; + filename=$(basename -- "${splashImage}") + extension="''${filename##*.}" + rm $out/grub/themes/${cfg.theme}/background.jpg; + cp ${splashImage} $out/grub/themes/${cfg.theme}/background.$extension; + cp ${splashImage} $out/grub/themes/${cfg.theme}/background; + sed -i "s/background.jpg/background.$extension/g" $out/grub/themes/${cfg.theme}/theme.txt; fi; if [ ${pkgs.lib.trivial.boolToString cfg.footer} == "false" ]; then sed -i ':again;$!N;$!b again; s/\+ image {[^}]*}//g' $out/grub/themes/${cfg.theme}/theme.txt; fi; + if [ ${pkgs.lib.trivial.boolToString hasBootMenuConfig} == "true" ]; then + sed -i ':again;$!N;$!b again; s/\+ boot_menu {[^}]*}//g' $out/grub/themes/${cfg.theme}/theme.txt; + cat << EOF >> $out/grub/themes/${cfg.theme}/theme.txt + + boot_menu { + ${if cfg.bootMenuConfig == null then "" else cfg.bootMenuConfig} + } + EOF + fi; + if [ ${pkgs.lib.trivial.boolToString hasTerminalConfig} == "true" ]; then + sed -i 's/^terminal-.*$//g' $out/grub/themes/${cfg.theme}/theme.txt + cat << EOF >> $out/grub/themes/${cfg.theme}/theme.txt + ${if cfg.terminalConfig == null then "" else cfg.terminalConfig} + EOF + fi; ''; }; resolution = resolutions."${cfg.screen}"; @@ -86,7 +107,25 @@ example = "/my/path/background.jpg"; type = types.nullOr types.path; description = '' - The path of the image to use for background (must be jpg). + The path of the image to use for background (must be jpg or png). + ''; + }; + bootMenuConfig = mkOption { + default = null; + example = "left = 30%"; + type = types.nullOr types.string; + description = '' + Grub theme definition for boot_menu. + Refer to config/theme-*.txt for reference. + ''; + }; + terminalConfig = mkOption { + default = null; + example = "terminal-font: \"Terminus Regular 18\""; + type = types.nullOr types.string; + description = '' + Replaces grub theme definition for terminial-*. + Refer to config/theme-*.txt for reference. ''; }; footer = mkOption { @@ -103,17 +142,22 @@ environment.systemPackages = [ grub2-theme ]; - boot.loader.grub = { - theme = "${grub2-theme}/grub/themes/${cfg.theme}"; - splashImage = "${grub2-theme}/grub/themes/${cfg.theme}/background.jpg"; - gfxmodeEfi = "${resolution},auto"; - gfxmodeBios = "${resolution},auto"; - extraConfig = '' - insmod gfxterm - insmod png - set icondir=($root)/theme/icons - ''; - }; + boot.loader.grub = + let + ext = if cfg.splashImage == null then "jpg" else last (splitString "." cfg.splashImage); + in + { + theme = "${grub2-theme}/grub/themes/${cfg.theme}"; + splashImage = + "${grub2-theme}/grub/themes/${cfg.theme}/background.${ext}"; + gfxmodeEfi = "${resolution},auto"; + gfxmodeBios = "${resolution},auto"; + extraConfig = '' + insmod gfxterm + insmod png + set icondir=($root)/theme/icons + ''; + }; }]); }; };