|
10 | 10 | from typing import TYPE_CHECKING, NotRequired, TypedDict |
11 | 11 |
|
12 | 12 | from archinstall.default_profiles.profile import GreeterType, Profile |
13 | | -from archinstall.lib.hardware import GfxDriver |
| 13 | +from archinstall.lib.hardware import GfxDriver, GfxPackage |
14 | 14 | from archinstall.lib.models.profile import ProfileConfiguration |
15 | 15 | from archinstall.lib.networking import fetch_data_from_url |
16 | 16 | from archinstall.lib.output import debug, error, info |
@@ -222,13 +222,22 @@ def install_greeter(self, install_session: Installer, greeter: GreeterType) -> N |
222 | 222 | def install_gfx_driver(self, install_session: Installer, driver: GfxDriver) -> None: |
223 | 223 | debug(f'Installing GFX driver: {driver.value}') |
224 | 224 |
|
225 | | - if driver in [GfxDriver.NvidiaOpenKernel]: |
226 | | - headers = [f'{kernel}-headers' for kernel in install_session.kernels] |
227 | | - # Fixes https://github.com/archlinux/archinstall/issues/585 |
228 | | - install_session.add_additional_packages(headers) |
229 | | - |
230 | 225 | driver_pkgs = driver.gfx_packages() |
231 | 226 | pkg_names = [p.value for p in driver_pkgs] |
| 227 | + |
| 228 | + # For Nvidia open kernel modules, use nvidia-open instead of nvidia-open-dkms |
| 229 | + # when all selected kernels are mainline (no dkms needed). This avoids |
| 230 | + # installing dkms + kernel headers and speeds up installation. |
| 231 | + if driver == GfxDriver.NvidiaOpenKernel: |
| 232 | + needs_dkms = any('-' in k for k in install_session.kernels) |
| 233 | + |
| 234 | + if needs_dkms: |
| 235 | + headers = [f'{kernel}-headers' for kernel in install_session.kernels] |
| 236 | + install_session.add_additional_packages(headers) |
| 237 | + else: |
| 238 | + pkg_names = [GfxPackage.NvidiaOpen.value if p == GfxPackage.NvidiaOpenDkms.value else p for p in pkg_names] |
| 239 | + pkg_names = [p for p in pkg_names if p != GfxPackage.Dkms.value] |
| 240 | + |
232 | 241 | install_session.add_additional_packages(pkg_names) |
233 | 242 |
|
234 | 243 | def install_profile_config(self, install_session: Installer, profile_config: ProfileConfiguration) -> None: |
|
0 commit comments