From 863a1b0b3e0430c466e0e96526185b98c25c6bdb Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Wed, 2 Jul 2025 16:21:52 -0700 Subject: [PATCH] Fix nvidia check --- install/nvidia.sh | 82 ++++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 43 deletions(-) diff --git a/install/nvidia.sh b/install/nvidia.sh index 90e81d0..6666562 100644 --- a/install/nvidia.sh +++ b/install/nvidia.sh @@ -9,37 +9,32 @@ # ============================================================================== # --- GPU Detection --- -# Check if nvidia gpu exists, exit silently if not found -gpu_info=$(lspci | grep -i 'nvidia') -if [ -z "$gpu_info" ]; then - exit 0 -fi - -# --- Driver Selection --- -# Turing (16xx, 20xx), Ampere (30xx), Ada (40xx), and newer recommend the open-source kernel modules -if echo "$gpu_info" | grep -q -E "RTX [2-9][0-9]|GTX 16"; then +if [ -n "$(lspci | grep -i 'nvidia')" ]; then + # --- Driver Selection --- + # Turing (16xx, 20xx), Ampere (30xx), Ada (40xx), and newer recommend the open-source kernel modules + if echo "$gpu_info" | grep -q -E "RTX [2-9][0-9]|GTX 16"; then NVIDIA_DRIVER_PACKAGE="nvidia-open-dkms" -else + else NVIDIA_DRIVER_PACKAGE="nvidia-dkms" -fi + fi -# Check which kernel is installed and set appropriate headers package -KERNEL_HEADERS="linux-headers" # Default -if pacman -Q linux-zen &>/dev/null; then + # Check which kernel is installed and set appropriate headers package + KERNEL_HEADERS="linux-headers" # Default + if pacman -Q linux-zen &>/dev/null; then KERNEL_HEADERS="linux-zen-headers" -elif pacman -Q linux-lts &>/dev/null; then + elif pacman -Q linux-lts &>/dev/null; then KERNEL_HEADERS="linux-lts-headers" -elif pacman -Q linux-hardened &>/dev/null; then + elif pacman -Q linux-hardened &>/dev/null; then KERNEL_HEADERS="linux-hardened-headers" -fi + fi -# Enable multilib repository for 32-bit libraries -if ! grep -q "^\[multilib\]" /etc/pacman.conf; then + # Enable multilib repository for 32-bit libraries + if ! grep -q "^\[multilib\]" /etc/pacman.conf; then sudo sed -i '/^#\[multilib\]/,/^#Include/ s/^#//' /etc/pacman.conf -fi + fi -# Install packages -PACKAGES_TO_INSTALL=( + # Install packages + PACKAGES_TO_INSTALL=( "${KERNEL_HEADERS}" "${NVIDIA_DRIVER_PACKAGE}" "nvidia-utils" @@ -48,39 +43,40 @@ PACKAGES_TO_INSTALL=( "libva-nvidia-driver" # For VA-API hardware acceleration "qt5-wayland" "qt6-wayland" -) + ) -yay -Syu --needed --noconfirm "${PACKAGES_TO_INSTALL[@]}" + yay -Syu --needed --noconfirm "${PACKAGES_TO_INSTALL[@]}" -# Configure modprobe for early KMS -echo "options nvidia_drm modeset=1" | sudo tee /etc/modprobe.d/nvidia.conf >/dev/null + # Configure modprobe for early KMS + echo "options nvidia_drm modeset=1" | sudo tee /etc/modprobe.d/nvidia.conf >/dev/null -# Configure mkinitcpio for early loading -MKINITCPIO_CONF="/etc/mkinitcpio.conf" + # Configure mkinitcpio for early loading + MKINITCPIO_CONF="/etc/mkinitcpio.conf" -# Define modules -NVIDIA_MODULES="nvidia nvidia_modeset nvidia_uvm nvidia_drm" + # Define modules + NVIDIA_MODULES="nvidia nvidia_modeset nvidia_uvm nvidia_drm" -# Create backup -sudo cp "$MKINITCPIO_CONF" "${MKINITCPIO_CONF}.backup" + # Create backup + sudo cp "$MKINITCPIO_CONF" "${MKINITCPIO_CONF}.backup" -# Remove any old nvidia modules to prevent duplicates -sudo sed -i -E 's/ nvidia_drm//g; s/ nvidia_uvm//g; s/ nvidia_modeset//g; s/ nvidia//g;' "$MKINITCPIO_CONF" -# Add the new modules at the start of the MODULES array -sudo sed -i -E "s/^(MODULES=\\()/\\1${NVIDIA_MODULES} /" "$MKINITCPIO_CONF" -# Clean up potential double spaces -sudo sed -i -E 's/ +/ /g' "$MKINITCPIO_CONF" + # Remove any old nvidia modules to prevent duplicates + sudo sed -i -E 's/ nvidia_drm//g; s/ nvidia_uvm//g; s/ nvidia_modeset//g; s/ nvidia//g;' "$MKINITCPIO_CONF" + # Add the new modules at the start of the MODULES array + sudo sed -i -E "s/^(MODULES=\\()/\\1${NVIDIA_MODULES} /" "$MKINITCPIO_CONF" + # Clean up potential double spaces + sudo sed -i -E 's/ +/ /g' "$MKINITCPIO_CONF" -sudo mkinitcpio -P + sudo mkinitcpio -P -# Add NVIDIA environment variables to hyprland.conf -HYPRLAND_CONF="$HOME/.config/hypr/hyprland.conf" -if [ -f "$HYPRLAND_CONF" ]; then - cat >> "$HYPRLAND_CONF" << 'EOF' + # Add NVIDIA environment variables to hyprland.conf + HYPRLAND_CONF="$HOME/.config/hypr/hyprland.conf" + if [ -f "$HYPRLAND_CONF" ]; then + cat >>"$HYPRLAND_CONF" <<'EOF' # NVIDIA environment variables env = NVD_BACKEND,direct env = LIBVA_DRIVER_NAME,nvidia env = __GLX_VENDOR_LIBRARY_NAME,nvidia EOF + fi fi