57 Commits

Author SHA1 Message Date
Vince
02ec0a888b Merge pull request #200 from hotime/patch-1
fix: the old background reappears for a few seconds
2023-08-01 21:54:20 +08:00
hotime
cd5fee4582 fix: the old background reappears for a few seconds
Add replacing or appending "GRUB_BACKGROUND" surpport for file "/etc/default/grub" to fix "the old background reappears for a few seconds" bug.
2023-08-01 18:55:38 +08:00
vinceliuice
9c673d5a34 Update install.sh 2023-07-24 21:47:50 +08:00
Vince
20c00af363 Merge pull request #198 from anandusateeshNSUT/master
Fixed directory issues for fedora in the install.sh itself
2023-07-22 02:32:45 +08:00
anandusateesh
5a9e5b58a0 Fixed directory issues 2023-07-21 23:07:59 +05:30
vinceliuice
8d2f2e17b8 Update install.sh 2023-07-22 00:31:33 +08:00
vinceliuice
c991e3a3a7 Update install.sh 2023-07-21 23:15:11 +08:00
vinceliuice
bf840ebdb7 Update install.sh 2023-07-21 23:09:52 +08:00
vinceliuice
1358b497d9 Merge branch 'master' of github.com:vinceliuice/grub2-themes 2023-07-21 22:56:08 +08:00
vinceliuice
8383f6b4f8 Update install.sh 2023-07-21 22:51:22 +08:00
Vince
4c7bba04ac Merge pull request #196 from Maik93/master
improve grub.bak existance check
2023-07-11 00:25:51 +08:00
Michael Mugnai
4deac71ab4 improve grub.bak existance check 2023-07-09 22:09:07 +02:00
vinceliuice
8cd0ea9b4a Update install.sh 2023-04-15 23:05:00 +08:00
vinceliuice
c1f9aeaf83 Merge branch 'master' of github.com:vinceliuice/grub2-themes 2023-04-15 22:47:38 +08:00
vinceliuice
d0a481efa1 Update install.sh 2023-04-15 22:46:16 +08:00
vinceliuice
7c0d8eb784 Fixed #191 2023-01-18 12:21:58 +08:00
vinceliuice
8a5ebe97fa Merge branch 'master' of github.com:vinceliuice/grub2-themes 2023-01-05 14:33:13 +08:00
vinceliuice
bde73b88ed Fixed #172 2023-01-05 14:32:40 +08:00
Vince
bfedd16365 Merge pull request #187 from AnotherGroupChat/master
Update Nix install for theme.txt control + fix module reference
2023-01-05 14:14:21 +08:00
dylan madisetti
7e8a1ea758 Allow for more granular control of theme.txt and update depricated way of reffering to modules 2022-11-18 12:35:17 -05:00
Vince
c106dfb9b5 update 2022-11-12 08:42:45 +08:00
Vince
7033bb66e5 Update README.md 2022-10-30 23:49:02 +08:00
Vince
b0dca256c3 Update README.md 2022-10-30 23:48:26 +08:00
Vince
ece050a022 Update README.md 2022-10-30 23:47:50 +08:00
Vince
530859b0b3 Update README.md 2022-10-30 23:41:38 +08:00
Vince
375b7d0f0a Update README.md 2022-10-30 23:39:27 +08:00
Vince
48338ec6a3 Update install.sh 2022-10-30 23:36:05 +08:00
Vince
e77cbfa662 Fixed #181 2022-10-30 23:20:45 +08:00
Vince
967a302d8f update 2022-10-23 19:44:08 +08:00
Vince
7ab56dc587 Merge pull request #180 from hyttmi/master
Remove override of THEME_DIR
2022-10-23 19:37:13 +08:00
Mika Hyttinen
8303aa2825 Remove override of THEME_DIR 2022-10-23 08:46:09 +03:00
Vince
b10a5fd4c8 update 2022-10-15 23:57:32 +08:00
Vince
8627f86ce5 Merge pull request #178 from dotlogix/Feature/UbuntuDDE
Fix alignments of icons and add ubuntuDDE
2022-10-15 23:46:51 +08:00
Alexander Schill
fd78958d50 Fix alignments of icons and add ubuntuDDE 2022-10-15 16:31:52 +02:00
Vince
c6e2967f06 Merge pull request #175 from Rdkang/master
Added theme variant name to the preview image
2022-08-31 02:02:35 +08:00
Rdkang
6b58676c4d Added theme variant name to the preview image 2022-08-30 11:54:20 +01:00
Vince
fa74d1b6af Merge pull request #162 from thomassdk/FixNixOSSupport
Make splashImage option a `nullOr` type
2022-03-28 00:26:11 +08:00
thomassdk
29dd80dd70 Make splashImage option a nullOr type 2022-03-27 15:52:59 +00:00
Vince
20a8f12488 Merge pull request #161 from PatrickJosh/fix-fedora-34-and-later
Update install.sh to fix installation on Fedora 34 and later.
2022-03-26 21:20:58 +08:00
Joshua Noeske
b5b4780418 Update install.sh to fix installation on Fedora 34 and later. 2022-03-26 10:50:37 +01:00
vinceliuice
3f5624833d update 2022-03-19 10:55:49 +08:00
vinceliuice
f4f3354233 Update install.sh 2022-03-19 10:32:20 +08:00
Vince
a4bff7bf91 Merge pull request #158 from AnotherGroupChat/nixos
Add NixOS support
2022-03-19 10:07:53 +08:00
Dylan Madisetti
86caf618c3 Merge branch 'vinceliuice:master' into nixos 2022-03-18 12:53:01 -04:00
madisetti
4f3b99cdf3 Added footer and enable option 2022-02-21 11:59:04 -05:00
Vince
53f899da9c Merge pull request #155 from AnotherGroupChat/master
Added generate hook
2022-02-21 13:06:36 +08:00
madisetti
2fd6eb9b66 Needs to exit 0 2022-02-20 23:00:36 -05:00
madisetti
824064faa9 Move clear to remove busybox dependency 2022-02-20 22:46:11 -05:00
madisetti
70ff68055b Added flake for grub on NixOS 2022-02-20 22:41:50 -05:00
madisetti
e5b869f186 Added generate hook 2022-02-20 22:26:29 -05:00
Vince
9e440c4bbc Update install.sh 2022-01-22 18:29:10 +08:00
Vince
468bee78f5 Merge pull request #151 from The-Plottwist/master
Pull request for 149'th issue
2022-01-16 12:51:38 +08:00
The-Plottwist
9d244c9d07 Fixed issue #149
In the old functionality, the current config file was being replaced with a backup file (if it had presented).
However, we now back-up the config file and replace the active theme line instead.
2022-01-15 22:36:57 +03:00
The-Plottwist
d27e1caf5f Little fixes
Almost always ```read``` command should be used with ```-r``` option.
Added some clarity about globals.
2022-01-15 21:15:50 +03:00
The-Plottwist
2824010b86 Improved Readability
Added section headers and made some rearrangements to improve readability.
Removed discouraged '$?' usage.
Added install_program function.
2022-01-15 21:11:14 +03:00
Vince
f1e03b4949 update 2021-12-07 11:29:49 +08:00
Vince
41de75c50e Update README.md 2021-12-05 14:18:39 +08:00
80 changed files with 6369 additions and 5904 deletions

View File

@@ -4,26 +4,38 @@
Usage: `sudo ./install.sh [OPTIONS...]`
| Options: | Description: |
|:-----------------------|:-------------|
| -b, --boot | Install grub theme into `/boot/grub/themes` |
| -t, --theme | theme variant(s) [tela/vimix/stylish/slaze/whitesur] (default is tela)"
| -i, --icon | icon variant(s) [color/white/whitesur] (default is color)"
| -s, --screen | screen resolution variant(s) [1080p/2k/4k/ultrawide/ultrawide2k] (default is 1080p)"
| -r, --remove [THEME] | Uninstall selected theme |
| -h, --help | Show this help |
```
-t, --theme theme variant(s) [tela|vimix|stylish|whitesur] (default is tela)
-i, --icon icon variant(s) [color|white|whitesur] (default is color)
-s, --screen screen display variant(s) [1080p|2k|4k|ultrawide|ultrawide2k] (default is 1080p)
-r, --remove Remove theme [tela|vimix|stylish|whitesur] (must add theme name option, default is tela)
-b, --boot install theme into '/boot/grub' or '/boot/grub2'
-g, --generate do not install but generate theme into chosen directory (must add your directory)
-h, --help Show this help
```
_If no options are used, a user interface `dialog` will show up instead_
### Examples:
- Install Tela theme on 2k display device:
- `sudo ./install.sh -t tela -s 2k`
```sh
sudo ./install.sh -t tela -s 2k
```
- Install Tela theme into /boot/grub/themes:
- `sudo ./install.sh -b -t tela`
```sh
sudo ./install.sh -b -t tela
```
- Uninstall Tela theme:
- `sudo ./install.sh -r -t tela`
```sh
sudo ./install.sh -r -t tela
```
## Issues / tweaks:
@@ -38,7 +50,11 @@ _If no options are used, a user interface `dialog` will show up instead_
- 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 the resolution
- (1920x1080 -> --1080p, 2560x1080 -> --ultrawide, 2560x1440 -> --2k, 3440x1440 -> --ultrawide2k, 3840x2160 -> --4k)
- 1920x1080 >> 1080p
- 2560x1080 >> ultrawide
- 2560x1440 >> 2k
- 3440x1440 >> ultrawide2k
- 3840x2160 >> 4k
- Place your custom background inside the root of the project, and name it `background.jpg`
- Run the installer like normal, but with -s `[YOUR_RESOLUTION]` and -t `[THEME]` and -i `[ICON]`
- Make sure to replace `[YOUR_RESOLUTION]` with your resolution and `[THEME]` with the theme

Binary file not shown.

Before

Width:  |  Height:  |  Size: 527 B

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 527 B

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 794 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 527 B

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 527 B

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1023 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 763 B

After

Width:  |  Height:  |  Size: 770 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 763 B

After

Width:  |  Height:  |  Size: 770 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 763 B

After

Width:  |  Height:  |  Size: 770 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 763 B

After

Width:  |  Height:  |  Size: 770 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1006 B

After

Width:  |  Height:  |  Size: 1005 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1006 B

After

Width:  |  Height:  |  Size: 1005 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1006 B

After

Width:  |  Height:  |  Size: 1005 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1006 B

After

Width:  |  Height:  |  Size: 1005 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 608 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 641 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 599 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 913 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 916 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 819 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 582 B

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 582 B

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 582 B

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 582 B

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 803 B

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 803 B

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1016 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 803 B

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 803 B

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 987 B

After

Width:  |  Height:  |  Size: 994 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 987 B

After

Width:  |  Height:  |  Size: 994 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 987 B

After

Width:  |  Height:  |  Size: 994 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 987 B

After

Width:  |  Height:  |  Size: 994 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 171 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 114 KiB

After

Width:  |  Height:  |  Size: 133 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 208 KiB

View File

@@ -42,7 +42,11 @@ neon
artix
kernel
zorin
nixos
gpart
ubuntuDDE
archcraft
brunch
recovery
restart
@@ -60,3 +64,4 @@ type
tz
unset
submenu
brunch-settings

164
flake.nix Normal file
View File

@@ -0,0 +1,164 @@
{
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 {
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";
"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 [ -n "${splashImage}" ]; then
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}";
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 = null;
example = "/my/path/background.jpg";
type = types.nullOr types.path;
description = ''
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 {
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 =
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
'';
};
}]);
};
};
}

View File

@@ -1,10 +1,8 @@
#! /usr/bin/env bash
# Grub2 Themes
set -o errexit
# Exit Immediately if a command fails
set -o errexit
[ GLOBAL::CONF ]
{
readonly ROOT_UID=0
readonly Project_Name="GRUB2::THEMES"
readonly MAX_DELAY=20 # max delay for user to enter root password
@@ -12,13 +10,15 @@ tui_root_login=
THEME_DIR="/usr/share/grub/themes"
REO_DIR="$(cd $(dirname $0) && pwd)"
}
THEME_VARIANTS=('tela' 'vimix' 'stylish' 'whitesur')
ICON_VARIANTS=('color' 'white' 'whitesur')
SCREEN_VARIANTS=('1080p' '2k' '4k' 'ultrawide' 'ultrawide2k')
#COLORS
#################################
# :::::: C O L O R S :::::: #
#################################
CDEF=" \033[0m" # default color
CCIN=" \033[0;36m" # info color
CGSC=" \033[0;32m" # success color
@@ -30,6 +30,10 @@ b_CGSC=" \033[1;32m" # bold success color
b_CRER=" \033[1;31m" # bold error color
b_CWAR=" \033[1;33m" # bold warning color
#######################################
# :::::: F U N C T I O N S :::::: #
#######################################
# echo like ... with flag type and display message colors
prompt () {
case ${1} in
@@ -49,18 +53,74 @@ prompt () {
# Check command availability
function has_command() {
command -v $1 > /dev/null
command -v $1 &> /dev/null #with "&>", all output will be redirected.
}
usage() {
printf "%s\n" "Usage: ${0##*/} [OPTIONS...]"
printf "\n%s\n" "OPTIONS:"
printf " %-25s%s\n" "-b, --boot" "install grub theme into /boot/grub/themes"
printf " %-25s%s\n" "-t, --theme" "theme variant(s) [tela|vimix|stylish|whitesur] (default is tela)"
printf " %-25s%s\n" "-i, --icon" "icon variant(s) [color|white|whitesur] (default is color)"
printf " %-25s%s\n" "-s, --screen" "screen display variant(s) [1080p|2k|4k|ultrawide|ultrawide2k] (default is 1080p)"
printf " %-25s%s\n" "-r, --remove" "Remove theme (must add theme name option)"
printf " %-25s%s\n" "-h, --help" "Show this help"
cat << EOF
Usage: $0 [OPTION]...
OPTIONS:
-t, --theme theme variant(s) [tela|vimix|stylish|whitesur] (default is tela)
-i, --icon icon variant(s) [color|white|whitesur] (default is color)
-s, --screen screen display variant(s) [1080p|2k|4k|ultrawide|ultrawide2k] (default is 1080p)
-r, --remove Remove theme [tela|vimix|stylish|whitesur] (must add theme name option, default is tela)
-b, --boot install theme into '/boot/grub' or '/boot/grub2'
-g, --generate do not install but generate theme into chosen directory (must add your directory)
-h, --help Show this help
EOF
}
generate() {
if [[ "${install_boot}" == 'true' ]]; then
if [[ -d "/boot/efi/EFI/fedora" ]]; then
THEME_DIR='/boot/efi/EFI/fedora/themes'
fi
if [[ -d "/boot/grub" ]]; then
THEME_DIR='/boot/grub/themes'
elif [[ -d "/boot/grub2" ]]; then
THEME_DIR='/boot/grub2/themes'
fi
fi
# Make a themes directory if it doesn't exist
prompt -i "\n Checking for the existence of themes directory..."
[[ -d "${THEME_DIR}/${theme}" ]] && rm -rf "${THEME_DIR}/${theme}"
mkdir -p "${THEME_DIR}/${theme}"
# Copy theme
prompt -i "\n Installing ${theme} ${icon} ${screen} theme..."
# Don't preserve ownership because the owner will be root, and that causes the script to crash if it is ran from terminal by sudo
cp -a --no-preserve=ownership "${REO_DIR}/common/"{*.png,*.pf2} "${THEME_DIR}/${theme}"
cp -a --no-preserve=ownership "${REO_DIR}/config/theme-${screen}.txt" "${THEME_DIR}/${theme}/theme.txt"
cp -a --no-preserve=ownership "${REO_DIR}/backgrounds/${screen}/background-${theme}.jpg" "${THEME_DIR}/${theme}/background.jpg"
# Use custom background.jpg as grub background image
if [[ -f "${REO_DIR}/background.jpg" ]]; then
prompt -w "\n Using custom background.jpg as grub background image..."
cp -a --no-preserve=ownership "${REO_DIR}/background.jpg" "${THEME_DIR}/${theme}/background.jpg"
convert -auto-orient "${THEME_DIR}/${theme}/background.jpg" "${THEME_DIR}/${theme}/background.jpg"
fi
if [[ ${screen} == 'ultrawide' ]]; then
cp -a --no-preserve=ownership "${REO_DIR}/assets/assets-${icon}/icons-1080p" "${THEME_DIR}/${theme}/icons"
cp -a --no-preserve=ownership "${REO_DIR}/assets/assets-select/select-1080p/"*.png "${THEME_DIR}/${theme}"
cp -a --no-preserve=ownership "${REO_DIR}/assets/info-1080p.png" "${THEME_DIR}/${theme}/info.png"
elif [[ ${screen} == 'ultrawide2k' ]]; then
cp -a --no-preserve=ownership "${REO_DIR}/assets/assets-${icon}/icons-2k" "${THEME_DIR}/${theme}/icons"
cp -a --no-preserve=ownership "${REO_DIR}/assets/assets-select/select-2k/"*.png "${THEME_DIR}/${theme}"
cp -a --no-preserve=ownership "${REO_DIR}/assets/info-2k.png" "${THEME_DIR}/${theme}/info.png"
else
cp -a --no-preserve=ownership "${REO_DIR}/assets/assets-${icon}/icons-${screen}" "${THEME_DIR}/${theme}/icons"
cp -a --no-preserve=ownership "${REO_DIR}/assets/assets-select/select-${screen}/"*.png "${THEME_DIR}/${theme}"
cp -a --no-preserve=ownership "${REO_DIR}/assets/info-${screen}.png" "${THEME_DIR}/${theme}/info.png"
fi
}
install() {
@@ -72,46 +132,24 @@ install() {
if [[ "$UID" -eq "$ROOT_UID" ]]; then
clear
# Create themes directory if it didn't exist
prompt -s "\n Checking for the existence of themes directory..."
[[ -d "${THEME_DIR}/${theme}" ]] && rm -rf "${THEME_DIR}/${theme}"
mkdir -p "${THEME_DIR}/${theme}"
# Copy theme
prompt -s "\n Installing ${theme} ${icon} ${screen} theme..."
# Don't preserve ownership because the owner will be root, and that causes the script to crash if it is ran from terminal by sudo
cp -a --no-preserve=ownership "${REO_DIR}/common/"{*.png,*.pf2} "${THEME_DIR}/${theme}"
cp -a --no-preserve=ownership "${REO_DIR}/config/theme-${screen}.txt" "${THEME_DIR}/${theme}/theme.txt"
cp -a --no-preserve=ownership "${REO_DIR}/backgrounds/${screen}/background-${theme}.jpg" "${THEME_DIR}/${theme}/background.jpg"
# Use custom background.jpg as grub background image
if [[ -f "${REO_DIR}/background.jpg" ]]; then
prompt -w "\n Using custom background.jpg as grub background image..."
cp -a --no-preserve=ownership "${REO_DIR}/background.jpg" "${THEME_DIR}/${theme}/background.jpg"
convert -auto-orient "${THEME_DIR}/${theme}/background.jpg" "${THEME_DIR}/${theme}/background.jpg"
fi
if [[ ${screen} == 'ultrawide' ]]; then
cp -a --no-preserve=ownership "${REO_DIR}/assets/assets-${icon}/icons-1080p" "${THEME_DIR}/${theme}/icons"
cp -a --no-preserve=ownership "${REO_DIR}/assets/assets-select/select-1080p/"*.png "${THEME_DIR}/${theme}"
cp -a --no-preserve=ownership "${REO_DIR}/assets/info-1080p.png" "${THEME_DIR}/${theme}/info.png"
elif [[ ${screen} == 'ultrawide2k' ]]; then
cp -a --no-preserve=ownership "${REO_DIR}/assets/assets-${icon}/icons-2k" "${THEME_DIR}/${theme}/icons"
cp -a --no-preserve=ownership "${REO_DIR}/assets/assets-select/select-2k/"*.png "${THEME_DIR}/${theme}"
cp -a --no-preserve=ownership "${REO_DIR}/assets/info-2k.png" "${THEME_DIR}/${theme}/info.png"
else
cp -a --no-preserve=ownership "${REO_DIR}/assets/assets-${icon}/icons-${screen}" "${THEME_DIR}/${theme}/icons"
cp -a --no-preserve=ownership "${REO_DIR}/assets/assets-select/select-${screen}/"*.png "${THEME_DIR}/${theme}"
cp -a --no-preserve=ownership "${REO_DIR}/assets/info-${screen}.png" "${THEME_DIR}/${theme}/info.png"
fi
# Generate the theme in "/usr/share/grub/themes"
generate "${theme}" "${icon}" "${screen}"
# Set theme
prompt -s "\n Setting ${theme} as default..."
prompt -i "\n Setting ${theme} as default..."
# Backup grub config
cp -an /etc/default/grub /etc/default/grub.bak
if [[ -f /etc/default/grub.bak ]]; then
prompt -w "\n File '/etc/default/grub.bak' already exists!"
# read choice
# if [[ "$choice" = 'y' ]]; then
# cp -a /etc/default/grub /etc/default/grub.bak
# else
# prompt -s "Skipping to save a backup configuration in '/etc/default/grub.bak'"
# fi
else
cp -an /etc/default/grub /etc/default/grub.bak
fi
# Fedora workaround to fix the missing unicode.pf2 file (tested on fedora 34): https://bugzilla.redhat.com/show_bug.cgi?id=1739762
# This occurs when we add a theme on grub2 with Fedora.
@@ -143,6 +181,14 @@ install() {
echo "GRUB_THEME=\"${THEME_DIR}/${theme}/theme.txt\"" >> /etc/default/grub
fi
if grep "GRUB_BACKGROUND=" /etc/default/grub 2>&1 >/dev/null; then
#Replace GRUB_BACKGROUND
sed -i "s|.*GRUB_BACKGROUND=.*|GRUB_BACKGROUND=\"${THEME_DIR}/${theme}/background.jpg\"|" /etc/default/grub
else
#Append GRUB_BACKGROUND
echo "GRUB_BACKGROUND=\"${THEME_DIR}/${theme}/background.jpg\"" >> /etc/default/grub
fi
# Make sure the right resolution for grub is set
if [[ ${screen} == '1080p' ]]; then
gfxmode="GRUB_GFXMODE=1920x1080,auto"
@@ -175,58 +221,59 @@ install() {
fi
# For Kali linux
if [[ -f "/etc/default/grub.d/kali-themes.cfg" ]]; then
if [[ -f "/etc/default/grub.d/kali-themes.cfg" && ! -f "/etc/default/grub.d/kali-themes.cfg.bak" ]]; then
cp -an /etc/default/grub.d/kali-themes.cfg /etc/default/grub.d/kali-themes.cfg.bak
sed -i "s|.*GRUB_GFXMODE=.*|${gfxmode}|" /etc/default/grub.d/kali-themes.cfg
sed -i "s|.*GRUB_THEME=.*|GRUB_THEME=\"${THEME_DIR}/${theme}/theme.txt\"|" /etc/default/grub.d/kali-themes.cfg
fi
# Update grub config
prompt -s "\n Updating grub config...\n"
prompt -i "\n Updating grub config... \n"
updating_grub
prompt -w "\n * At the next restart of your computer you will see your new Grub theme: '$theme' \n"
prompt -w "\n * At the next restart of your computer you will see your new Grub theme: '$theme' "
else
#Check if password is cached (if cache timestamp not expired yet)
sudo -n true 2> /dev/null && echo
if [[ $? == 0 ]]; then
#No need to ask for password
sudo "$0" -t ${theme} -i ${icon} -s ${screen}
#Check if password is cached (if cache timestamp has not expired yet)
elif sudo -n true 2> /dev/null && echo; then
if [[ "${install_boot}" == 'true' ]]; then
sudo "$0" -t ${theme} -i ${icon} -s ${screen} -b
else
#Ask for password
if [[ -n ${tui_root_login} ]] ; then
if [[ -n "${theme}" && -n "${screen}" ]]; then
sudo "$0" -t ${theme} -i ${icon} -s ${screen}
fi
else
#Ask for password
if [[ -n ${tui_root_login} ]] ; then
if [[ -n "${theme}" && -n "${screen}" ]]; then
if [[ "${install_boot}" == 'true' ]]; then
sudo -S $0 -t ${theme} -i ${icon} -s ${screen} -b <<< ${tui_root_login}
else
sudo -S $0 -t ${theme} -i ${icon} -s ${screen} <<< ${tui_root_login}
fi
else
prompt -e "\n [ Error! ] -> Run me as root! "
read -p " [ Trusted ] Specify the root password : " -t ${MAX_DELAY} -s
sudo -S echo <<< $REPLY 2> /dev/null && echo
if [[ $? == 0 ]]; then
#Correct password, use with sudo's stdin
sudo -S "$0" -t ${theme} -i ${icon} -s ${screen} <<< ${REPLY}
fi
else
prompt -e "\n [ Error! ] -> Run me as root! "
read -r -p " [ Trusted ] Specify the root password : " -t ${MAX_DELAY} -s
if sudo -S echo <<< $REPLY 2> /dev/null && echo; then
#Correct password, use with sudo's stdin
if [[ "${install_boot}" == 'true' ]]; then
sudo -S "$0" -t ${theme} -i ${icon} -s ${screen} -b <<< ${REPLY}
else
#block for 3 seconds before allowing another attempt
sleep 3
prompt -e "\n [ Error! ] -> Incorrect password!\n"
exit 1
sudo -S "$0" -t ${theme} -i ${icon} -s ${screen} <<< ${REPLY}
fi
else
#block for 3 seconds before allowing another attempt
sleep 3
prompt -e "\n [ Error! ] -> Incorrect password!\n"
exit 1
fi
fi
fi
fi
}
run_dialog() {
if [[ -x /usr/bin/dialog ]]; then
if [[ "$UID" -ne "$ROOT_UID" ]]; then
#Check if password is cached (if cache timestamp not expired yet)
sudo -n true 2> /dev/null && echo
if [[ $? == 0 ]]; then
if sudo -n true 2> /dev/null && echo; then
#No need to ask for password
sudo $0
else
@@ -237,9 +284,7 @@ run_dialog() {
--passwordbox "require root permission" 8 50 \
--output-fd 1 )
sudo -S echo <<< $tui_root_login 2> /dev/null && echo
if [[ $? == 0 ]]; then
if sudo -S echo <<< $tui_root_login 2> /dev/null && echo; then
#Correct password, use with sudo's stdin
sudo -S "$0" <<< $tui_root_login
else
@@ -310,12 +355,12 @@ updating_grub() {
elif has_command zypper; then
grub2-mkconfig -o /boot/grub2/grub.cfg
elif has_command dnf; then
if [[ -f /boot/efi/EFI/fedora/grub.cfg ]]; then
prompt -i "Find config file on /boot/efi/EFI/fedora/grub.cfg ...\n"
if [[ -f /boot/efi/EFI/fedora/grub.cfg ]] && (( $(cat /etc/fedora-release | awk '{print $3}') < 34 )); then
prompt -s "Find config file on /boot/efi/EFI/fedora/grub.cfg ...\n"
grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
fi
if [[ -f /boot/grub2/grub.cfg ]]; then
prompt -i "Find config file on /boot/grub2/grub.cfg ...\n"
prompt -s "Find config file on /boot/grub2/grub.cfg ...\n"
grub2-mkconfig -o /boot/grub2/grub.cfg
fi
fi
@@ -324,20 +369,24 @@ updating_grub() {
prompt -s "\n * All done!"
}
function install_program () {
if has_command zypper; then
zypper in "$@"
elif has_command apt-get; then
apt-get install "$@"
elif has_command dnf; then
dnf install -y "$@"
elif has_command yum; then
yum install "$@"
elif has_command pacman; then
pacman -S --noconfirm "$@"
fi
}
install_dialog() {
if [ ! "$(which dialog 2> /dev/null)" ]; then
prompt -w "\n 'dialog' need to be installed for this shell"
if has_command zypper; then
sudo zypper in dialog
elif has_command apt-get; then
sudo apt-get install dialog
elif has_command dnf; then
sudo dnf install -y dialog
elif has_command yum; then
sudo yum install dialog
elif has_command pacman; then
sudo pacman -S --noconfirm dialog
fi
install_program "dialog"
fi
}
@@ -346,49 +395,70 @@ remove() {
# Check for root access and proceed if it is present
if [ "$UID" -eq "$ROOT_UID" ]; then
echo -e "\n Checking for the existence of themes directory..."
prompt -i "Checking for the existence of themes directory..."
if [[ -d "${THEME_DIR}/${theme}" ]]; then
prompt -i "\n Find installed theme: '${THEME_DIR}/${theme}'..."
rm -rf "${THEME_DIR}/${theme}"
prompt -w "\n Removed: '${THEME_DIR}/${theme}'..."
elif [[ -d "/boot/grub/themes/${theme}" ]]; then
prompt -i "\n Find installed theme: '/boot/grub/themes/${theme}'..."
rm -rf "/boot/grub/themes/${theme}"
prompt -w "\n Removed: '/boot/grub/themes/${theme}'..."
elif [[ -d "/boot/grub2/themes/${theme}" ]]; then
prompt -i "\n Find installed theme: '/boot/grub2/themes/${theme}'..."
rm -rf "/boot/grub2/themes/${theme}"
prompt -w "\n Removed: '/boot/grub2/themes/${theme}'..."
else
prompt -e "\n ${theme} grub theme not exist!"
prompt -e "\n Specified ${theme} theme does not exist!"
exit 0
fi
# Backup grub config
if [[ -f "/etc/default/grub.bak" ]]; then
rm -rf /etc/default/grub && mv /etc/default/grub.bak /etc/default/grub
local grub_config_location=""
if [[ -f "/etc/default/grub" ]]; then
grub_config_location="/etc/default/grub"
elif [[ -f "/etc/default/grub.d/kali-themes.cfg" ]]; then
grub_config_location="/etc/default/grub.d/kali-themes.cfg"
else
prompt -e "\n grub.bak not exist!"
exit 0
prompt -e "\n Cannot find grub config file in default locations!"
prompt -w "\n Please inform the developers by opening an issue on github."
prompt -i "\n Exiting..."
exit 1
fi
# For Kali linux
if [[ -f "/etc/default/grub.d/kali-themes.cfg.bak" ]]; then
rm -rf /etc/default/grub.d/kali-themes.cfg && mv /etc/default/grub.d/kali-themes.cfg.bak /etc/default/grub.d/kali-themes.cfg
local current_theme="" # Declaration and assignment should be done seperately ==> https://github.com/koalaman/shellcheck/wiki/SC2155
current_theme="$(grep 'GRUB_THEME=' $grub_config_location | grep -v \#)"
if [[ -n "$current_theme" ]]; then
# Backup with --in-place option to grub.bak within the same directory; then remove the current theme.
sed --in-place='.bak' "s|$current_theme|#GRUB_THEME=|" "$grub_config_location"
if [[ -f "$grub_config_location".back ]]; then
rm -rf "$grub_config_location".back
fi
# Update grub config
prompt -i "\n Resetting grub theme...\n"
updating_grub
else
prompt -e "\n No active theme found."
prompt -i "\n Exiting..."
exit 1
fi
# Update grub config
prompt -s "\n Resetting grub theme...\n"
updating_grub
else
#Check if password is cached (if cache timestamp not expired yet)
sudo -n true 2> /dev/null && echo
if [[ $? == 0 ]]; then
if sudo -n true 2> /dev/null && echo; then
#No need to ask for password
sudo "$0" "${PROG_ARGS[@]}"
sudo "$0" -t ${theme} "${PROG_ARGS[@]}"
else
#Ask for password
prompt -e "\n [ Error! ] -> Run me as root! "
read -p " [ Trusted ] Specify the root password : " -t ${MAX_DELAY} -s
read -r -p " [ Trusted ] Specify the root password : " -t ${MAX_DELAY} -s #when using "read" command, "-r" option must be supplied ==> https://github.com/koalaman/shellcheck/wiki/SC2162
sudo -S echo <<< $REPLY 2> /dev/null && echo
if [[ $? == 0 ]]; then
if sudo -S echo <<< $REPLY 2> /dev/null && echo; then
#Correct password, use with sudo's stdin
sudo -S "$0" "${PROG_ARGS[@]}" <<< $REPLY
sudo -S "$0" -t ${theme} "${PROG_ARGS[@]}" <<< $REPLY
else
#block for 3 seconds before allowing another attempt
sleep 3
@@ -404,19 +474,16 @@ dialog_installer() {
if [[ ! -x /usr/bin/dialog ]]; then
if [[ $UID -ne $ROOT_UID ]]; then
#Check if password is cached (if cache timestamp not expired yet)
sudo -n true 2> /dev/null && echo
if [[ $? == 0 ]]; then
if sudo -n true 2> /dev/null && echo; then
#No need to ask for password
exec sudo $0
else
#Ask for password
prompt -e "\n [ Error! ] -> Run me as root! "
read -p " [ Trusted ] Specify the root password : " -t ${MAX_DELAY} -s
read -r -p " [ Trusted ] Specify the root password : " -t ${MAX_DELAY} -s
sudo -S echo <<< $REPLY 2> /dev/null && echo
if [[ $? == 0 ]]; then
if sudo -S echo <<< $REPLY 2> /dev/null && echo; then
#Correct password, use with sudo's stdin
sudo $0 <<< $REPLY
else
@@ -431,18 +498,59 @@ dialog_installer() {
fi
run_dialog
install "${theme}" "${icon}" "${screen}"
exit 1
}
#######################################################
# :::::: A R G U M E N T H A N D L I N G :::::: #
#######################################################
install=install
while [[ $# -gt 0 ]]; do
PROG_ARGS+=("${1}")
dialog='false'
case "${1}" in
-b|--boot)
THEME_DIR="/boot/grub/themes"
shift 1
;;
-r|--remove)
remove='true'
shift
for theme in "${@}"; do
case "${theme}" in
tela)
themes+=("${THEME_VARIANTS[0]}")
shift
;;
vimix)
themes+=("${THEME_VARIANTS[1]}")
shift
;;
stylish)
themes+=("${THEME_VARIANTS[2]}")
shift
;;
whitesur)
themes+=("${THEME_VARIANTS[3]}")
shift
;;
-*)
break
;;
*)
prompt -e "ERROR: Unrecognized theme variant '$1'."
prompt -i "Try '$0 --help' for more information."
exit 1
;;
esac
done
;;
-g|--generate)
shift 1
THEME_DIR="${1}"
install=generate
shift 1
;;
-b|--boot)
install_boot='true'
shift 1
;;
-t|--theme)
@@ -465,7 +573,7 @@ while [[ $# -gt 0 ]]; do
themes+=("${THEME_VARIANTS[3]}")
shift
;;
-*|--*)
-*)
break
;;
*)
@@ -492,7 +600,7 @@ while [[ $# -gt 0 ]]; do
icons+=("${ICON_VARIANTS[2]}")
shift
;;
-*|--*)
-*)
break
;;
*)
@@ -527,7 +635,7 @@ while [[ $# -gt 0 ]]; do
screens+=("${SCREEN_VARIANTS[4]}")
shift
;;
-*|--*)
-*)
break
;;
*)
@@ -550,13 +658,17 @@ while [[ $# -gt 0 ]]; do
esac
done
#############################
# :::::: M A I N :::::: #
#############################
# Show terminal user interface for better use
if [[ "${dialog:-}" == 'false' ]]; then
if [[ "${remove:-}" != 'true' ]]; then
for theme in "${themes[@]-${THEME_VARIANTS[0]}}"; do
for icon in "${icons[@]-${ICON_VARIANTS[0]}}"; do
for screen in "${screens[@]-${SCREEN_VARIANTS[0]}}"; do
install "${theme}" "${icon}" "${screen}"
$install "${theme}" "${icon}" "${screen}"
done
done
done
@@ -569,4 +681,4 @@ if [[ "${dialog:-}" == 'false' ]]; then
dialog_installer
fi
exit 1
exit 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 922 KiB

After

Width:  |  Height:  |  Size: 937 KiB