Open-source project
vinceliuice/Elegant-grub2-themes avatar
vinceliuice/Elegant-grub2-themes

Elegant grub2 themes give your boot menu a background and a picture

Elegant grub2 themes for all linux systems

735 stars37 forksShellGPL-3.0

At a glance

What is it?
Elegant grub2 themes is a set of GRUB 2 boot themes with four background variants, four window styles, a left or right picture side and dark or light colouring, installed by a single script with sensible defaults. It also ships a NixOS module and a set of documents on how GRUB 2 themes are put together, which is the more useful part for anyone writing their own.
Who is it for?
Adopt Elegant grub2 themes if you want a GRUB 2 boot menu that does not look like a text console, since the script installs a complete themed setup in one command and the background and picture variants cover most tastes. Skip it if you boot with systemd-boot, UKI or another bootloader, because this only themes GRUB 2, and if you want a theme that is regenerated automatically as your kernel changes, since the theme is copied into the bootloader directory once.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 122 days ago.
What is it written in?
Mainly Shell, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Four axes of variation, and the defaults are sensible

The whole configuration surface is one command with a handful of options, and the option list is the design.

code
  -t, --theme     Background theme variant(s) [forest|mojave|mountain|wave] (default is forest)
  -p, --type      Theme style variant(s)      [window|float|sharp|blur] (default is window)
  -i, --side      Picture display side        [left|right] (default is left)
  -c, --color     Background color variant(s) [dark|light] (default is dark)
  -s, --screen    Screen display variant(s)   [1080p|2k|4k] (default is 1080p)
  -l, --logo      Show a logo on picture      [default|system] (default: a mountain logo)
  -r, --remove    Remove/Uninstall theme      (must add theme options, default is Elegant-forest-window-left-dark)
  -b, --boot      Install theme into '/boot/grub' or '/boot/grub2'
  -h, --help      Show this help

Four axes are about appearance. The background variant chooses one of four images, forest, mojave, mountain or wave. The type chooses how the menu is drawn, window, float, sharp or blur. The side puts the picture on the left or the right. The colour is dark or light. The screen picks the resolution variant, 1080p, 2k or 4k, and the logo option controls whether a logo is drawn on the picture, either the default mountain logo or the system one.

The defaults are forest, window, left, dark and 1080p, which is a coherent combination rather than an arbitrary set of first choices, and the uninstall default mirrors the install default so that a bare `./install.sh -r` reverses the default install.

Two flags are operational rather than cosmetic. `-r` removes the theme, and it notes that theme options must be added so it knows what to remove. And `-b` chooses whether the theme goes into '/boot/grub' or '/boot/grub2', which is the difference between the two directory layouts used by different distributions.

If no options are used, a user interface `dialog` will show up instead, so an interactive run is the default and the flags are the shortcut.

Three examples, and the uninstall one is the important one

The examples are the fastest way to understand the flag grammar, and they cover install, install in a specific location and uninstall.

Installing the mountain theme on a 2k display device:

sh
sudo ./install.sh -t mountain -s 2k

Installing the wave theme into /boot/grub/themes:

sh
sudo ./install.sh -b -t wave

And uninstalling the mountain theme:

sh
sudo ./install.sh -r -t mountain

The uninstall example is the one to read carefully, because it shows the constraint the option list only hints at. To remove a theme you have to name it, which means repeating the theme options you installed with. The help text makes that explicit: the remove option must add theme options, with a default of Elegant-forest-window-left-dark.

That default is informative about how the project thinks about identity. A theme is not one thing but a combination, and the name encodes it as the four values plus the configuration, Elegant-forest-window-left-dark. So the removal needs enough information to reconstruct which combination was installed, which is why it takes the same options.

The `-b` example also shows the split between theme and location. Without it, the installer picks the bootloader directory itself, and with it you name the location, which is what you want if your distribution keeps GRUB somewhere unusual or if you want the theme under a specific subdirectory.

NixOS users get a module, and the flake example shows it

NixOS is treated as a first-class case, with a module rather than a script to run.

The documentation notes that to use this theme with NixOS you will have to enable flakes, and that you should inform yourself first because flakes are still an unstable feature. Then you add grub2 to your `flake.nix` file as a new input:

nix
# flake.nix
{
  description = "NixOS configuration";
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    # Add elegant grub2 themes to your inputs ...
    elegant-grub2-themes = {
      url = "github:vinceliuice/elegant-grub2-themes";
    };
  };
  outputs = inputs@{ nixpkgs,  elegant-grub2-themes, ... }: {
    nixosConfigurations = {
      my_host = nixpkgs.lib.nixosSystem {
        system = "x86_64-linux";
        specialArgs = { inherit inputs; };
        # ... and then to your modules
        modules = [
          ./configuration.nix
          elegant-grub2-themes.nixosModules.default
        ];
      };
    };
  };
}

And then the configuration:

nix
# configuration.nix
{ inputs, config, pkgs, lib, ... }:
{
  boot.loader.grub = { ... };
  boot.loader.elegant-grub2-theme = {
    enable = true;
    theme = "mojave";
    type = "blur";
    side = "right";
    color = "dark";
    screen = "1080p";
    logo = "system";
  };
}

The option names in the module are the same as the command line flags, one for one, which is the right choice. It means the documentation you read for the shell installer is the documentation you read for the NixOS module, and the values in the example are directly comparable to the defaults in the option list.

Fixing the resolution and swapping in your own background

Two customisation paths are documented, and the first is a fix for the most common problem.

For correcting display resolution, the instructions start on the grub screen, where you press `c` to enter the command line, then enter `vbeinfo` or `videoinfo` to check available resolutions. Then you open `/etc/default/grub` and edit `GRUB_GFXMODE=[height]x[width]x32` to match your resolution, and finally run `grub-mkconfig -o /boot/grub/grub.cfg` to update your grub config.

That last step is the one that catches people out. The theme is a set of files in the bootloader directory, but GRUB itself reads its own configuration, so a theme that is sized for 1080p on a 1440p screen will look stretched, and the fix is in the GRUB settings rather than in the theme.

Setting a custom background is the second path. You make sure you have `imagemagick` installed, or at least something that provides `convert`, find the resolution of your display and make sure your background matches it, with the mapping given as 1920x1080 for 1080p, 2560x1440 for 2k and 3840x2160 for 4k. Then you place your custom background inside the root of the project and name it `background.jpg`, and run the installer as normal with `-s [YOUR_RESOLUTION]`, `-t [THEME]` and `-i [ICON]`.

So a custom background is not a separate mechanism, it is the same installer with a different image in the project root. The imagemagick requirement is for generating the derived assets the theme needs at the right size.

The documents section is the real contribution

Most theme collections are a set of finished images. What makes this one more useful to other people is the last section, which links a GRUB 2 theme reference and a GRUB 2 theme tutorial, both hosted on the wiki.rosalab.ru site.

A theme reference is the specification side: what a GRUB 2 theme is made of, which files exist and what each one does. The tutorial is the how-to side. Between them, someone who wants to build their own theme, rather than install this one, has a working description of the format.

That is a bigger contribution than the themes themselves, and it is consistent with the rest of the repository, which is a build system rather than a folder of pictures. The top-level entries show the structure: an assets/ directory for icons, backgrounds/ for the background images, common/ and config/ for shared configuration, core.sh and install.sh and generate.sh as the shell scripts that do the work, a make-release.sh for packaging, a flake.nix for the NixOS side, a releases/ directory, and four preview images.

The contributing section shows the same orientation. If you made changes to icons, or added a new one, you delete the existing icon if there is one, run `cd assets; ./render-all.sh`, and then create a pull request. So the icons are generated from source rather than committed as finished artwork, and the render script is the piece a contributor touches.

The primary language is listed as Shell, the licence is GPL-3.0, the last push was on 2026-06-23, and the release tags are dated rather than versioned: 2025-03-25, 2024-11-03 and 2024-10-23.

Editorial conclusion

Adopt Elegant grub2 themes if you want a GRUB 2 boot menu that does not look like a text console, since the script installs a complete themed setup in one command and the background and picture variants cover most tastes. Skip it if you boot with systemd-boot, UKI or another bootloader, because this only themes GRUB 2, and if you want a theme that is regenerated automatically as your kernel changes, since the theme is copied into the bootloader directory once. Verify first whether your distribution uses GRUB 2 or GRUB, that the theme directory you target is the one your bootloader reads, and that your display resolution matches the background you pick, since a mismatched resolution is the most common visual problem.

Frequently asked questions

How do I install an Elegant grub2 theme?

Run the installer with the options you want, for example `sudo ./install.sh -t mountain -s 2k`. If you use no options, a `dialog` user interface appears instead. The available options cover the background theme, the window style, the picture side, the colour, the screen resolution, the logo, removal, and whether to install into /boot/grub or /boot/grub2.

How do I uninstall an Elegant grub2 theme?

Use the -r option and repeat the theme options you installed with, for example `sudo ./install.sh -r -t mountain`. The remove option must be given theme options, and the default it falls back to is Elegant-forest-window-left-dark.

How do I use these themes on NixOS?

Enable flakes, add the repository to your flake.nix inputs as `elegant-grub2-themes`, include `elegant-grub2-themes.nixosModules.default` in your modules list, and set `boot.loader.elegant-grub2-theme` with the same option names as the command line flags, such as theme, type, side, color, screen and logo.

Official sources

  1. Issues
  2. License: GPL-3.0
  3. README
  4. Releases
  5. vinceliuice/Elegant-grub2-themes on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/vinceliuice-elegant-grub2-themes.svg)](https://hysenlabs.com/projects/vinceliuice-elegant-grub2-themes)

Was this useful?