blob: 0596232a1f5f1f14b369d9873e09ad52e4e5c74b (
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
|
#!/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"
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
fi
echo ">>> [gpu] Done."
|