130 lines
3.6 KiB
Bash
Executable File
130 lines
3.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#=============================================================================
|
|
# NVIDIA Configuration Script
|
|
# Configures NVIDIA drivers for Hyprland
|
|
#=============================================================================
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "${SCRIPT_DIR}/lib.sh"
|
|
|
|
init_installer
|
|
|
|
print_header "NVIDIA Driver Configuration"
|
|
|
|
# Detect NVIDIA GPU
|
|
if ! lspci | grep -qi nvidia; then
|
|
echo -e "${WARN} No NVIDIA GPU detected. Skipping..."
|
|
exit 0
|
|
fi
|
|
|
|
echo -e "${INFO} NVIDIA GPU detected. Installing drivers..."
|
|
|
|
# Determine driver package based on GPU
|
|
gpu_info=$(lspci | grep -i nvidia | head -1)
|
|
echo -e "${NOTE} GPU: $gpu_info"
|
|
|
|
# Package list
|
|
nvidia_pkgs=(
|
|
linux-headers
|
|
nvidia-dkms
|
|
nvidia-utils
|
|
lib32-nvidia-utils
|
|
nvidia-settings
|
|
libva-nvidia-driver
|
|
egl-wayland
|
|
)
|
|
|
|
# Install packages
|
|
echo -e "\n${NOTE} Installing NVIDIA packages..."
|
|
for pkg in "${nvidia_pkgs[@]}"; do
|
|
install_pkg "$pkg" || true
|
|
done
|
|
|
|
# Create modprobe configuration
|
|
echo -e "\n${NOTE} Configuring kernel modules..."
|
|
|
|
sudo mkdir -p /etc/modprobe.d
|
|
|
|
# Main NVIDIA configuration
|
|
cat << 'EOF' | sudo tee /etc/modprobe.d/nvidia.conf > /dev/null
|
|
# Enable DRM kernel mode setting
|
|
options nvidia_drm modeset=1 fbdev=1
|
|
|
|
# Preserve video memory for suspend/hibernate
|
|
options nvidia NVreg_PreserveVideoMemoryAllocations=1
|
|
|
|
# Disable GSP firmware (may help with some issues)
|
|
# options nvidia NVreg_EnableGpuFirmware=0
|
|
EOF
|
|
|
|
# Blacklist nouveau
|
|
cat << 'EOF' | sudo tee /etc/modprobe.d/blacklist-nouveau.conf > /dev/null
|
|
# Blacklist nouveau (open source NVIDIA driver)
|
|
blacklist nouveau
|
|
options nouveau modeset=0
|
|
EOF
|
|
|
|
echo -e "${OK} Kernel module configuration created"
|
|
|
|
# Configure mkinitcpio
|
|
echo -e "\n${NOTE} Updating mkinitcpio configuration..."
|
|
|
|
if [[ -f /etc/mkinitcpio.conf ]]; then
|
|
# Backup original
|
|
sudo cp /etc/mkinitcpio.conf /etc/mkinitcpio.conf.backup
|
|
|
|
# Add nvidia modules if not present
|
|
if ! grep -q "nvidia nvidia_modeset nvidia_uvm nvidia_drm" /etc/mkinitcpio.conf; then
|
|
sudo sed -i 's/MODULES=(\(.*\))/MODULES=(\1 nvidia nvidia_modeset nvidia_uvm nvidia_drm)/' /etc/mkinitcpio.conf
|
|
# Clean up double spaces
|
|
sudo sed -i 's/MODULES=( /MODULES=(/' /etc/mkinitcpio.conf
|
|
fi
|
|
fi
|
|
|
|
# Regenerate initramfs
|
|
echo -e "${NOTE} Regenerating initramfs..."
|
|
sudo mkinitcpio -P
|
|
|
|
# Enable NVIDIA services for suspend/hibernate
|
|
echo -e "\n${NOTE} Enabling NVIDIA power management services..."
|
|
sudo systemctl enable nvidia-suspend.service 2>/dev/null || true
|
|
sudo systemctl enable nvidia-hibernate.service 2>/dev/null || true
|
|
sudo systemctl enable nvidia-resume.service 2>/dev/null || true
|
|
|
|
# Create environment variables file for Hyprland
|
|
echo -e "\n${NOTE} Creating Hyprland environment configuration..."
|
|
|
|
mkdir -p "$HOME/.config/hypr"
|
|
cat << 'EOF' > "$HOME/.config/hypr/nvidia.conf"
|
|
# NVIDIA Environment Variables for Hyprland
|
|
# Source this in your hyprland.conf: source = ~/.config/hypr/nvidia.conf
|
|
|
|
env = LIBVA_DRIVER_NAME,nvidia
|
|
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
|
|
env = GBM_BACKEND,nvidia-drm
|
|
|
|
# Cursor fix
|
|
env = WLR_NO_HARDWARE_CURSORS,1
|
|
|
|
# Force GBM as buffer backend
|
|
env = __GL_GSYNC_ALLOWED,1
|
|
env = __GL_VRR_ALLOWED,1
|
|
|
|
# Use Wayland where possible
|
|
env = QT_QPA_PLATFORM,wayland;xcb
|
|
env = GDK_BACKEND,wayland,x11
|
|
env = SDL_VIDEODRIVER,wayland
|
|
env = CLUTTER_BACKEND,wayland
|
|
env = XDG_SESSION_TYPE,wayland
|
|
env = XDG_CURRENT_DESKTOP,Hyprland
|
|
|
|
# Firefox Wayland
|
|
env = MOZ_ENABLE_WAYLAND,1
|
|
EOF
|
|
|
|
echo -e "${OK} NVIDIA configuration complete!"
|
|
echo -e "${NOTE} Environment file created: ~/.config/hypr/nvidia.conf"
|
|
echo -e "${WARN} Please reboot your system for changes to take effect."
|