Merge pull request #158 from AnotherGroupChat/nixos

Add NixOS support
This commit is contained in:
Vince 2022-03-19 10:07:53 +08:00 committed by GitHub
commit a4bff7bf91
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 122 additions and 3 deletions

119
flake.nix Normal file
View file

@ -0,0 +1,119 @@
{
description = "Flake to manage grub2 themes from vinceliuice";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/master";
};
outputs = { self, nixpkgs }:
let
system = "x86_64-linux";
pkgs = import nixpkgs {
inherit system;
};
in
with nixpkgs.lib;
rec {
nixosModule = { config, ... }:
let
cfg = config.boot.loader.grub2-theme;
resolutions = {
"1080p" = "1920x1080";
"ultrawide" = "2560x1080";
"2k" = "2560x1440";
"4k" = "3840x2160";
"ultrawide2k" = "3440x1440";
};
grub2-theme = pkgs.stdenv.mkDerivation {
name = "grub2-theme";
src = "${self}";
installPhase = ''
mkdir -p $out/grub/themes;
bash ./install.sh \
--generate $out/grub/themes \
--screen ${cfg.screen} \
--theme ${cfg.theme} \
--icon ${cfg.icon};
if [ -f ${cfg.splashImage} ]; then
cp ${cfg.splashImage} $out/grub/themes/${cfg.theme}/background.jpg;
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;
'';
};
resolution = resolutions."${cfg.screen}";
in
rec {
options = {
boot.loader.grub2-theme = {
enable = mkOption {
default = true;
example = true;
type = types.bool;
description = ''
Enable grub2 theming
'';
};
theme = mkOption {
default = "tela";
example = "tela";
type = types.enum [ "tela" "vimix" "stylish" "whitesur" ];
description = ''
The theme to use for grub2.
'';
};
icon = mkOption {
default = "white";
example = "white";
type = types.enum [ "color" "white" "whitesur" ];
description = ''
The icon to use for grub2.
'';
};
screen = mkOption {
default = "1080p";
example = "1080p";
type = types.enum [ "1080p" "2k" "4k" "ultrawide" "ultrawide2k" ];
description = ''
The screen resolution to use for grub2.
'';
};
splashImage = mkOption {
default = "";
example = "/my/path/background.jpg";
type = types.path;
description = ''
The path of the image to use for background (must be jpg).
'';
};
footer = mkOption {
default = true;
example = true;
type = types.bool;
description = ''
Whether to include the image footer.
'';
};
};
};
config = mkIf cfg.enable (mkMerge [{
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
'';
};
}]);
};
};
}

View file

@ -69,8 +69,6 @@ usage() {
} }
generate() { generate() {
clear
# Make a themes directory if it doesn't exist # Make a themes directory if it doesn't exist
prompt -s "\n Checking for the existence of themes directory..." prompt -s "\n Checking for the existence of themes directory..."
@ -115,6 +113,8 @@ install() {
# Check for root access and proceed if it is present # Check for root access and proceed if it is present
if [[ "$UID" -eq "$ROOT_UID" ]]; then if [[ "$UID" -eq "$ROOT_UID" ]]; then
clear
# Generate the theme in "/usr/share/grub/themes" # Generate the theme in "/usr/share/grub/themes"
generate "${theme}" "${icon}" "${screen}" generate "${theme}" "${icon}" "${screen}"
@ -599,4 +599,4 @@ if [[ "${dialog:-}" == 'false' ]]; then
dialog_installer dialog_installer
fi fi
exit 1 exit 0