blob: 70382374482c01f9978ce8ef36df1e9d40e87d65 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#!/bin/bash
set -e
echo ">>> [gpu] Running INSIDE target system"
GPU_INFO="$(lspci -nn | grep -E 'VGA|3D|Display' || true)"
echo ">>> [gpu] Detected devices:"
echo "$GPU_INFO"
pacman -Syy --noconfirm || true
install_pkgs() {
pacman -S --needed --noconfirm "$@" || true
}
install_pkgs mesa libglvnd vulkan-icd-loader
if echo "$GPU_INFO" | grep -qi "Intel"; then
echo ">>> [gpu] Installing Intel stack..."
install_pkgs mesa vulkan-intel intel-media-driver
fi
if echo "$GPU_INFO" | grep -qi "AMD\|ATI"; then
echo ">>> [gpu] Installing AMD stack..."
install_pkgs mesa lib32-mesa vulkan-radeon lib32-vulkan-radeon vulkan-icd-loader lib32-vulkan-icd-loader vulkan-tools mesa-utils
fi
if echo "$GPU_INFO" | grep -qi "NVIDIA"; then
echo ">>> [gpu] NVIDIA detected -> driver kivalasztasa..."
NV_IDS=$( { lspci -n -d 10de::0300; lspci -n -d 10de::0302; lspci -n -d 10de::0380; } | awk '{print $3}' | cut -d: -f2 | sort -u || true )
driver_family() {
local id="$1" dec
[[ "$id" =~ ^[0-9a-fA-F]{4}$ ]] || { echo unsupported; return; }
dec=$((16#$id))
if [ "$dec" -ge $((0x1E00)) ]; then echo open; return; fi
if [ "$dec" -ge $((0x1340)) ] && [ "$dec" -le $((0x13FF)) ]; then echo 580xx; return; fi
if [ "$dec" -ge $((0x1400)) ] && [ "$dec" -le $((0x1DFF)) ]; then echo 580xx; return; fi
if [ "$dec" -ge $((0x0FC0)) ] && [ "$dec" -le $((0x103F)) ]; then echo 470xx; return; fi
if [ "$dec" -ge $((0x1180)) ] && [ "$dec" -le $((0x11FF)) ]; then echo 470xx; return; fi
if [ "$dec" -ge $((0x1280)) ] && [ "$dec" -le $((0x12BF)) ]; then echo 470xx; return; fi
echo unsupported
}
BESTFAM=unsupported
BESTRANK=0
for id in $NV_IDS; do
fam=$(driver_family "$id")
echo ">>> [gpu] NVIDIA ${id} -> ${fam}"
rank=0
case "$fam" in
open) rank=4 ;;
580xx) rank=3 ;;
470xx) rank=2 ;;
esac
if [ "$rank" -gt "$BESTRANK" ]; then BESTRANK=$rank; BESTFAM=$fam; fi
done
case "$BESTFAM" in
open)
echo ">>> [gpu] Turing+ -> nvidia-open-dkms"
install_pkgs dkms linux-cachyos-headers nvidia-open-dkms nvidia-utils nvidia-settings lib32-nvidia-utils
;;
580xx)
echo ">>> [gpu] Pascal/Maxwell/Volta -> nvidia-580xx-dkms (legacy)"
install_pkgs dkms linux-cachyos-headers nvidia-580xx-dkms nvidia-580xx-utils nvidia-580xx-settings lib32-nvidia-580xx-utils
;;
470xx)
echo ">>> [gpu] Kepler -> nvidia-470xx-dkms (legacy, unsupported)"
install_pkgs dkms linux-cachyos-headers nvidia-470xx-dkms nvidia-470xx-utils nvidia-470xx-settings lib32-nvidia-470xx-utils
;;
*)
echo ">>> [gpu] Nem tamogatott NVIDIA (Fermi vagy regebbi) -> nouveau marad"
;;
esac
if echo "$GPU_INFO" | grep -qi "Intel\|AMD\|ATI"; then
echo ">>> [gpu] Hybrid laptop detected -> installing nvidia-prime"
install_pkgs nvidia-prime
fi
NV_MODULE_OK=0
if [ "$BESTFAM" != unsupported ] && modinfo -k "$(ls /usr/lib/modules | head -1)" nvidia >/dev/null 2>&1; then
NV_MODULE_OK=1
fi
if [ "$NV_MODULE_OK" -eq 1 ]; then
echo ">>> [gpu] NVIDIA modul elerheto -> beallitasok..."
mkdir -p /etc/modules-load.d
cat > /etc/modules-load.d/nvidia.conf <<'EOF'
nvidia
nvidia_modeset
nvidia_uvm
nvidia_drm
EOF
mkdir -p /etc/modprobe.d
cat > /etc/modprobe.d/nvidia-drm.conf <<'EOF'
options nvidia_drm modeset=1
EOF
cat > /etc/modprobe.d/99-nvidia-blacklist.conf <<'EOF'
blacklist nouveau
options nouveau modeset=0
EOF
mkdir -p /etc/mkinitcpio.conf.d
cat > /etc/mkinitcpio.conf.d/raveos-nvidia.conf <<'EOF'
MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
EOF
else
echo ">>> [gpu] NVIDIA modul NEM erheto el -> nouveau marad (nincs blacklist)"
fi
if pacman -Q plasma-desktop >/dev/null 2>&1; then
echo ">>> [gpu] NVIDIA + Plasma -> installing X11 session (plasma-x11-session)"
install_pkgs plasma-x11-session
mkdir -p /etc/sddm.conf.d
cat > /etc/sddm.conf.d/10-raveos-nvidia-x11.conf <<'EOF'
[Users]
DefaultSession=plasmax11.desktop
EOF
fi
echo ">>> [gpu] Rebuilding initramfs..."
mkinitcpio -P || true
fi
echo ">>> [gpu] Done."
|