mirror of
https://github.com/ChrisTitusTech/linutil.git
synced 2024-11-21 12:59:41 +00:00
feat: Add arch nvidia installation script (#797)
* Add arch nvidia script * Update model fetching * chore: formatting, git as dep --------- Co-authored-by: Chris Titus <contact@christitus.com>
This commit is contained in:
parent
9d1dc35f43
commit
98e2f83f43
120
core/tabs/system-setup/arch/nvidia-drivers.sh
Executable file
120
core/tabs/system-setup/arch/nvidia-drivers.sh
Executable file
|
@ -0,0 +1,120 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
. ../../common-script.sh
|
||||||
|
|
||||||
|
LIBVA_DIR="$HOME/.local/share/linutil/libva"
|
||||||
|
MPV_CONF="$HOME/.config/mpv/mpv.conf"
|
||||||
|
|
||||||
|
installDeps() {
|
||||||
|
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm base-devel dkms ninja meson git
|
||||||
|
|
||||||
|
installed_kernels=$("$PACKAGER" -Q | grep -E '^linux(| |-rt|-rt-lts|-hardened|-zen|-lts)[^-headers]' | cut -d ' ' -f 1)
|
||||||
|
|
||||||
|
for kernel in $installed_kernels; do
|
||||||
|
header="${kernel}-headers"
|
||||||
|
printf "%b\n" "${CYAN}Installing headers for $kernel...${RC}"
|
||||||
|
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm "$header"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
checkNvidiaHardware() {
|
||||||
|
# Refer https://nouveau.freedesktop.org/CodeNames.html for model code names
|
||||||
|
model=$(lspci -k | grep -A 2 -E "(VGA|3D)" | grep NVIDIA | sed 's/.*Corporation //;s/ .*//' | cut -c 1-2)
|
||||||
|
case "$model" in
|
||||||
|
GM | GP | GV) return 1 ;;
|
||||||
|
TU | GA | AD) return 0 ;;
|
||||||
|
*) printf "%b\n" "${RED}Unsupported hardware." && exit 1 ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
checkIntelHardware() {
|
||||||
|
model=$(grep "model name" /proc/cpuinfo | head -n 1 | cut -d ':' -f 2 | cut -c 2-3)
|
||||||
|
[ "$model" -ge 11 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
promptUser() {
|
||||||
|
printf "%b" "Do you want to $1 ? [y/N]:"
|
||||||
|
read -r confirm
|
||||||
|
[ "$confirm" = "y" ] || [ "$confirm" = "Y" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
setKernelParam() {
|
||||||
|
PARAMETER="$1"
|
||||||
|
|
||||||
|
if grep -q "$PARAMETER" /etc/default/grub; then
|
||||||
|
printf "%b\n" "${YELLOW}NVIDIA modesetting is already enabled in GRUB.${RC}"
|
||||||
|
else
|
||||||
|
"$ESCALATION_TOOL" sed -i "/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\"$/ $PARAMETER\"/" /etc/default/grub
|
||||||
|
printf "%b\n" "${CYAN}Added $PARAMETER to /etc/default/grub.${RC}"
|
||||||
|
"$ESCALATION_TOOL" grub-mkconfig -o /boot/grub/grub.cfg
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
setupHardwareAcceleration() {
|
||||||
|
if ! command_exists grub-mkconfig; then
|
||||||
|
printf "%b\n" "${RED}Currently hardware acceleration is only available with GRUB.${RC}"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm libva-nvidia-driver
|
||||||
|
|
||||||
|
mkdir -p "$HOME/.local/share/linutil"
|
||||||
|
if [ -d "$LIBVA_DIR" ]; then
|
||||||
|
rm -rf "$LIBVA_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "%b\n" "${YELLOW}Cloning libva from https://github.com/intel/libva in ${LIBVA_DIR}${RC}"
|
||||||
|
git clone --branch=v2.22-branch --depth=1 https://github.com/intel/libva "$LIBVA_DIR"
|
||||||
|
|
||||||
|
mkdir -p "$LIBVA_DIR/build"
|
||||||
|
cd "$LIBVA_DIR/build" && arch-meson .. -Dwith_legacy=nvctrl && ninja
|
||||||
|
"$ESCALATION_TOOL" ninja install
|
||||||
|
|
||||||
|
"$ESCALATION_TOOL" sed -i '/^MOZ_DISABLE_RDD_SANDBOX/d' "/etc/environment"
|
||||||
|
"$ESCALATION_TOOL" sed -i '/^LIBVA_DRIVER_NAME/d' "/etc/environment"
|
||||||
|
|
||||||
|
printf "LIBVA_DRIVER_NAME=nvidia\nMOZ_DISABLE_RDD_SANDBOX=1" | "$ESCALATION_TOOL" tee -a /etc/environment >/dev/null
|
||||||
|
|
||||||
|
printf "%b\n" "${GREEN}Hardware Acceleration setup completed successfully.${RC}"
|
||||||
|
|
||||||
|
if promptUser "enable Hardware Acceleration in MPV player"; then
|
||||||
|
mkdir -p "$HOME/.config/mpv"
|
||||||
|
if [ -f "$MPV_CONF" ]; then
|
||||||
|
sed -i '/^hwdec/d' "$MPV_CONF"
|
||||||
|
fi
|
||||||
|
printf "hwdec=auto" | tee -a "$MPV_CONF" >/dev/null
|
||||||
|
printf "%b\n" "${GREEN}MPV Hardware Acceleration enabled successfully.${RC}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
installDriver() {
|
||||||
|
# Refer https://wiki.archlinux.org/title/NVIDIA for open-dkms or dkms driver selection
|
||||||
|
if checkNvidiaHardware && promptUser "install nvidia's open source drivers"; then
|
||||||
|
printf "%b\n" "${YELLOW}Installing nvidia open source driver...${RC}"
|
||||||
|
installDeps
|
||||||
|
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm nvidia-open-dkms nvidia-utils
|
||||||
|
else
|
||||||
|
printf "%b\n" "${YELLOW}Installing nvidia proprietary driver...${RC}"
|
||||||
|
installDeps
|
||||||
|
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm nvidia-dkms nvidia-utils
|
||||||
|
fi
|
||||||
|
|
||||||
|
if checkIntelHardware; then
|
||||||
|
setKernelParam "ibt=off"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Refer https://wiki.archlinux.org/title/NVIDIA/Tips_and_tricks#Preserve_video_memory_after_suspend
|
||||||
|
setKernelParam "nvidia.NVreg_PreserveVideoMemoryAllocations=1"
|
||||||
|
"$ESCALATION_TOOL" systemctl enable nvidia-suspend.service nvidia-hibernate.service nvidia-resume.service
|
||||||
|
|
||||||
|
printf "%b\n" "${GREEN}Driver installed successfully.${RC}"
|
||||||
|
if promptUser "setup Hardware Acceleration"; then
|
||||||
|
setupHardwareAcceleration
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "%b\n" "${GREEN}Please reboot your system for the changes to take effect.${RC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
checkEnv
|
||||||
|
checkEscalationTool
|
||||||
|
installDriver
|
|
@ -26,6 +26,12 @@ matches = true
|
||||||
data = { file = "/sys/devices/virtual/dmi/id/board_vendor" }
|
data = { file = "/sys/devices/virtual/dmi/id/board_vendor" }
|
||||||
values = [ "Valve" ]
|
values = [ "Valve" ]
|
||||||
|
|
||||||
|
[[data.entries]]
|
||||||
|
name = "Nvidia Drivers && Hardware Acceleration"
|
||||||
|
description = "This script installs and configures nvidia drivers with Hardware Acceleration."
|
||||||
|
script = "arch/nvidia-drivers.sh"
|
||||||
|
task_list = "I FM SS"
|
||||||
|
|
||||||
[[data.entries]]
|
[[data.entries]]
|
||||||
name = "Paru AUR Helper"
|
name = "Paru AUR Helper"
|
||||||
description = "Paru is your standard pacman wrapping AUR helper with lots of features and minimal interaction. To know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers"
|
description = "Paru is your standard pacman wrapping AUR helper with lots of features and minimal interaction. To know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers"
|
||||||
|
|
|
@ -87,6 +87,7 @@ https://github.com/ChrisTitusTech/dwm-titus
|
||||||
|
|
||||||
- **Arch Server Setup**: This command installs a minimal arch server setup under 5 minutes.
|
- **Arch Server Setup**: This command installs a minimal arch server setup under 5 minutes.
|
||||||
- **Linux Neptune for SteamDeck**: Valve's fork of Linux Kernel for the SteamDeck
|
- **Linux Neptune for SteamDeck**: Valve's fork of Linux Kernel for the SteamDeck
|
||||||
|
- **Nvidia Drivers && Hardware Acceleration**: This script installs and configures nvidia drivers with Hardware Acceleration.
|
||||||
- **Paru AUR Helper**: Paru is your standard pacman wrapping AUR helper with lots of features and minimal interaction. To know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers
|
- **Paru AUR Helper**: Paru is your standard pacman wrapping AUR helper with lots of features and minimal interaction. To know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers
|
||||||
- **Yay AUR Helper**: Yet Another Yogurt - An AUR Helper Written in Go. To know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers
|
- **Yay AUR Helper**: Yet Another Yogurt - An AUR Helper Written in Go. To know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user