From 96b0a02e69b68f72bf2dd87ff7a9a74202626b50 Mon Sep 17 00:00:00 2001 From: Eshan Roy Date: Wed, 20 Nov 2024 01:17:37 +0530 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20perf(=5Fblank):=20add=20op?= =?UTF-8?q?t=20for=20invalid=20selection?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- usr/local/bin/snigdhaos-graphical-target | 41 ++++++++++++++++-------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/usr/local/bin/snigdhaos-graphical-target b/usr/local/bin/snigdhaos-graphical-target index 14476e6..cc312f2 100755 --- a/usr/local/bin/snigdhaos-graphical-target +++ b/usr/local/bin/snigdhaos-graphical-target @@ -8,64 +8,77 @@ echo echo "--->> Start snigdhaos-fixes <<---" echo +# Function to get a kernel parameter value, with a default if the parameter is not found get_kernel_param() { local param=$1 local default=$2 local value + # Extract the kernel parameter value, or use default if not found value=$(cat /proc/cmdline | tr ' ' '\n' | grep "^${param}=" | cut -d '=' -f 2-) echo "${value:-${default}}" } +# Function to get the driver selection from the kernel parameters get_driver() { get_kernel_param driver } +# Function to wait for pacman to become available if locked wait_for_pacman() { local timeout=30 local interval=5 + # Wait for pacman to finish operations if the database lock file exists while [ -e "/var/lib/pacman/db.lck" ]; do - echo "Pacman is not ready yet. Trying in ${interval} seconds." + echo "Pacman is not ready yet. Trying in ${interval} seconds..." sleep ${interval} ((timeout -= interval)) if ((timeout <= 0)); then - echo "Snigdha OS Removing Pacman db.lck!" - rm /var/lib/pacman/db.lck + echo "[WARNING] Pacman is still locked after waiting ${timeout}s. Attempting to remove db.lck..." + rm /var/lib/pacman/db.lck || { echo "[ERROR] Failed to remove db.lck. Exiting."; exit 1; } fi done } +# Get the kernel parameter 'driver' to determine which selection to use selection=$(get_driver) echo echo "Your Selection: ${selection}" echo +# Handle different driver selection cases case ${selection} in free) - echo "Removing nvidia-dkms..." - pacman -Rns --noconfirm nvidia-dkms nvidia-utils nvidia-settings egl-wayland - cp /etc/calamares/settings-advanced-no-nvidia.conf /etc/calamares/settings-advanced.conf + echo "Removing NVIDIA DKMS and related packages..." + wait_for_pacman + pacman -Rns --noconfirm nvidia-dkms nvidia-utils nvidia-settings egl-wayland || { echo "[ERROR] Failed to remove NVIDIA packages."; exit 1; } + cp /etc/calamares/settings-advanced-no-nvidia.conf /etc/calamares/settings-advanced.conf || { echo "[ERROR] Failed to copy Calamares settings."; exit 1; } + echo "NVIDIA packages removed, and settings updated." ;; freenonouveau) - echo "Removing nvidia-dkms, nonouveau..." - pacman -Rns --noconfirm nvidia-dkms nvidia-utils nvidia-settings egl-wayland xf86-video-nouveau - cp /etc/calamares/settings-advanced-no-nvidia.conf /etc/calamares/settings-advanced.conf + echo "Removing NVIDIA DKMS, NVIDIA utilities, and Nouveau..." + wait_for_pacman + pacman -Rns --noconfirm nvidia-dkms nvidia-utils nvidia-settings egl-wayland xf86-video-nouveau || { echo "[ERROR] Failed to remove NVIDIA and Nouveau packages."; exit 1; } + cp /etc/calamares/settings-advanced-no-nvidia.conf /etc/calamares/settings-advanced.conf || { echo "[ERROR] Failed to copy Calamares settings."; exit 1; } + echo "NVIDIA and Nouveau packages removed, and settings updated." ;; nonfree) - echo "Keep nvidia and nonouveau" + echo "Keeping NVIDIA and Nouveau packages." ;; nonfreenonouveau) - echo "Keep nvidia-dkms; removing nonouveau" - pacman -Rns --noconfirm xf86-video-nouveau + echo "Keeping NVIDIA DKMS; removing Nouveau." + wait_for_pacman + pacman -Rns --noconfirm xf86-video-nouveau || { echo "[ERROR] Failed to remove Nouveau package."; exit 1; } + echo "Nouveau package removed." ;; *) - echo "Invalid selection: ${selection}" + echo "[ERROR] Invalid selection: ${selection}. Exiting." exit 1 ;; esac echo echo "--->> End snigdhaos-fixes <<---" -echo \ No newline at end of file +echo