Last active
January 13, 2024 13:22
-
-
Save hurbeana/18e6d782a648cf7335a7d4577dc279ad to your computer and use it in GitHub Desktop.
minegrub
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
RES="2560x1440" | |
GRUB="/etc/default/grub" | |
GRUB_BACKUP="/etc/default/grub.bak" | |
SERVICE_NAME="update-theme" | |
MINEGRUB_DEST="/boot/grub/themes/minegrub" | |
MOUNT_DIR="/mnt/efi_temp" | |
GRUB_CUSTOM_FILE="/etc/grub.d/09_custom_windows" | |
# Backup GRUB configuration | |
sudo cp "$GRUB" "$GRUB_BACKUP" | |
# Setup minegrub | |
cd /tmp | |
rm -rf minegrub-theme | |
if ! git clone https://github.com/Lxtharia/minegrub-theme.git; then | |
echo "Failed to clone minegrub-theme repository." | |
sudo cp "$GRUB_BACKUP" "$GRUB" | |
exit 1 | |
fi | |
sudo mkdir -p /boot/grub/themes/ | |
sudo cp -ru minegrub-theme/minegrub "$MINEGRUB_DEST" | |
sudo cp minegrub-theme/background_options/* "$MINEGRUB_DEST/backgrounds" | |
# Update GRUB settings | |
if ! sudo sed -i -n -e'/^GRUB_THEME=/!p;$aGRUB_THEME=\/boot\/grub\/themes\/minegrub\/theme\.txt' "$GRUB" || | |
! sudo sed -i -n -e'/^GRUB_TIMEOUT_STYLE=/!p;$aGRUB_TIMEOUT_STYLE=menu' "$GRUB" || | |
! sudo sed -i -n -e'/^GRUB_TIMEOUT=/!p;$aGRUB_TIMEOUT=5' "$GRUB" || | |
! sudo sed -i -n -e'/^GRUB_GFXMODE=/!p' -e"\$aGRUB_GFXMODE=$RES,auto" "$GRUB" || | |
! sudo sed -i -n -e'/^GRUB_TERMINAL_OUTPUT=/!p;$aGRUB_TERMINAL_OUTPUT=gfxterm' "$GRUB"; then | |
echo "Failed to update GRUB settings." | |
sudo cp "$GRUB_BACKUP" "$GRUB" | |
exit 1 | |
fi | |
# Setup splash update theme service | |
if ! sudo apt install -y neofetch || | |
! sudo tee /etc/systemd/system/$SERVICE_NAME.service >/dev/null << EOF | |
[Unit] | |
Description=Update Grub Theme | |
[Service] | |
Type=oneshot | |
ExecStart=/usr/bin/python3 /boot/grub/themes/minegrub/update_theme.py | |
WorkingDirectory=/boot/grub/themes/minegrub | |
[Install] | |
WantedBy=multi-user.target | |
EOF | |
then | |
echo "Failed to install neofetch or setup the update-theme service." | |
sudo cp "$GRUB_BACKUP" "$GRUB" | |
exit 1 | |
fi | |
if ! sudo systemctl daemon-reload || | |
! sudo systemctl enable $SERVICE_NAME.service || | |
! sudo systemctl start $SERVICE_NAME.service; then | |
echo "Failed to setup the update-theme service." | |
sudo cp "$GRUB_BACKUP" "$GRUB" | |
exit 1 | |
fi | |
# Setup windows entry | |
EFI_PARTITION=$(sudo blkid -t PARTLABEL="EFI system partition" -o device) | |
if [ -z "$EFI_PARTITION" ]; then | |
echo "EFI partition not found." | |
sudo cp "$GRUB_BACKUP" "$GRUB" | |
exit 1 | |
fi | |
sudo mkdir -p "$MOUNT_DIR" | |
sudo mount "$EFI_PARTITION" "$MOUNT_DIR" | |
BOOTMGR_PATH=$(sudo find "$MOUNT_DIR" -name bootmgfw.efi) | |
if [ -z "$BOOTMGR_PATH" ]; then | |
echo "Windows Boot Manager not found." | |
sudo umount "$MOUNT_DIR" | |
sudo cp "$GRUB_BACKUP" "$GRUB" | |
exit 1 | |
fi | |
sudo umount "$MOUNT_DIR" | |
BOOTMGR_REL_PATH=$(echo "$BOOTMGR_PATH" | sed 's,'"$MOUNT_DIR"',,g') | |
EFI_UUID=$(sudo blkid -o value -s UUID "$EFI_PARTITION") | |
if ! sudo tee "$GRUB_CUSTOM_FILE" >/dev/null <<EOF | |
#!/bin/sh | |
exec tail -n +3 $0 | |
menuentry 'Windows' --class windows --class os $menuentry_id_option 'osprober-efi-$EFI_UUID' { | |
insmod part_gpt | |
insmod fat | |
search --no-floppy --fs-uuid --set=root $EFI_UUID | |
chainloader $BOOTMGR_REL_PATH | |
} | |
EOF | |
then | |
echo "Failed to create custom GRUB entry for Windows." | |
sudo cp "$GRUB_BACKUP" "$GRUB" | |
exit 1 | |
fi | |
# Disable os-prober to prevent auto-adding of OS entries | |
if ! sudo sed -i -n -e'/^GRUB_DISABLE_OS_PROBER=/!p;$aGRUB_DISABLE_OS_PROBER=true' "$GRUB"; then | |
echo "Failed to update GRUB os-prober settings." | |
sudo cp "$GRUB_BACKUP" "$GRUB" | |
exit 1 | |
fi | |
#Move uefi-firmware to the back | |
sudo mv /etc/grub.d/30_uefi-firmware /etc/grub.d/50_uefi-firmware 2>/dev/null | |
# Clean up the kernels | |
installed_kernels=$(dpkg --list | grep -E '^linux-image-[0-9]+.*-generic' | awk '{ print $2 }') | |
current_kernel=$(uname -r) | |
latest_kernel=$(echo "$installed_kernels" | sort -V | tail -n 1) | |
for kernel in $installed_kernels; do | |
if [ "$kernel" != "linux-image-$current_kernel" ] && [ "$kernel" != "linux-image-$latest_kernel" ]; then | |
echo "Removing old kernel: $kernel" | |
sudo apt-get purge -y $kernel | |
fi | |
done | |
#Update GRUB and clean up | |
sudo update-grub | |
sudo apt-get autoremove -y | |
sudo apt-get autoclean | |
echo "Script completed successfully." |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment