2022-10-23 16:35:39 +02:00
# Foreword
2022-08-13 01:47:48 +02:00
There is no _official_ support for Nvidia. Unfortunately, their drivers are so
messy, and their products so random, that it's impossible for us to help if
these instructions don't work fully.
2022-08-12 20:46:36 +02:00
Every card seems to be random, and might work perfectly, or not work at all.
Nevertheless, it's recommended to at least try this tutorial.
## How to get Hyprland to possibly work on Nvidia
2022-08-13 19:06:18 +02:00
Install the `nvidia-dkms` driver and add it to your initramfs & kernel
parameters. Follow the information available here:
2022-08-13 01:47:48 +02:00
[https://wiki.archlinux.org/title/NVIDIA#DRM_kernel_mode_setting ](https://wiki.archlinux.org/title/NVIDIA#DRM_kernel_mode_setting )
2022-08-12 20:46:36 +02:00
2022-08-27 23:56:52 +02:00
in `/etc/mkinitcpio.conf` add `nvidia nvidia_modeset nvidia_uvm nvidia_drm` to your `MODULES`
2022-10-23 16:35:39 +02:00
run `# mkinitcpio --config /etc/mkinitcpio.conf --generate /boot/initramfs-custom.img`
2022-08-27 23:56:52 +02:00
2022-08-28 00:16:34 +02:00
add a new line to `/etc/modprobe.d/nvidia.conf` (make it if it does not exist) and add the line `options nvidia-drm modeset=1`
2022-08-27 23:56:52 +02:00
2022-08-13 19:06:18 +02:00
{{< hint > }}If your GPU is listed as supported by the `nvidia-open-dkms` driver,
2023-02-07 13:25:30 +01:00
use that one instead. Note that on a laptop, it could cause problems with the suspended state when closing the lid, so you might be better off with `nvidia-dkms` .
{{< / hint > }}
{{< hint > }}To get multi monitor to work properly on a hybrid graphics device (a laptop with both an Intel and an Nvidia GPU), you will need to remove the `optimus-manager` package if installed (disabling the service does not work). You also need to change your BIOS settings from hybrid graphics to discrete graphics.
2023-02-05 20:59:14 +01:00
{{< / hint > }}
2023-03-05 14:43:30 +01:00
Export these variables in your config:
2022-08-12 20:46:36 +02:00
```sh
2023-03-05 14:43:30 +01:00
env = LIBVA_DRIVER_NAME,nvidia
env = XDG_SESSION_TYPE,wayland
env = GBM_BACKEND,nvidia-drm
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
env = WLR_NO_HARDWARE_CURSORS,1
2022-08-12 20:46:36 +02:00
```
2023-02-26 12:06:16 +01:00
2023-03-05 14:43:30 +01:00
{{< hint > }}If you encounter crashes in Firefox, remove the line `env = GBM_BACKEND,nvidia-drm` .
2023-02-07 00:33:43 +01:00
{{< / hint > }}
2022-08-12 20:46:36 +02:00
2023-03-05 14:43:30 +01:00
{{< hint > }}If you face problems with Discord windows not displaying or screen sharing not working in Zoom, remove or comment the line `env = __GLX_VENDOR_LIBRARY_NAME,nvidia` .
2023-02-26 12:06:16 +01:00
{{< / hint > }}
2022-08-13 01:47:48 +02:00
Install `qt5-wayland` , `qt5ct` and `libva` . Additionally
`nvidia-vaapi-driver-git` (AUR) to fix crashes in some Electron-based
applications, such as Unity Hub.
2022-08-12 20:46:36 +02:00
Reboot your computer
2023-03-05 14:43:30 +01:00
Launch Hyprland.
2022-08-12 20:46:36 +02:00
It _should_ work now.
2022-10-23 16:35:39 +02:00
## Fixing random flickering, method 1
2022-10-05 17:05:37 +02:00
If you take a look at the wlroots patches in the [nix flake ](https://github.com/hyprwm/Hyprland/blob/main/nix/wlroots.nix )
you will find a one-line patch:
2022-10-23 16:35:39 +02:00
2022-10-05 17:05:37 +02:00
```sh
substituteInPlace render/gles2/renderer.c --replace "glFlush();" "glFinish();"
```
What this means, for non-nix users, is you have to (before building) go to
2022-10-22 21:21:34 +02:00
`subprojects/wlroots/render/gles2/renderer.c` and replace all occurrences of `glFlush()`
2022-10-05 17:05:37 +02:00
with `glFinish()` , and then compile Hyprland as usual.
2022-10-23 16:35:39 +02:00
## Fixing random flickering, method 2 (nuclear)
2022-08-12 20:46:36 +02:00
2022-08-13 01:47:48 +02:00
Do note though that this forces performance mode to be active, resulting in
increased power-consumption (from 22W idle on a RTX 3070TI, to 74W).
This may not even be needed for some users, only apply these 'fixes' if you
in-fact do notice flickering artifacts from being idle for ~5 seconds.
2022-08-12 20:46:36 +02:00
Make a new file at `/etc/modprobe.d/nvidia.conf` and paste this in:
2022-08-13 01:47:48 +02:00
2022-08-13 19:06:18 +02:00
```sh
2022-08-12 20:46:36 +02:00
options nvidia NVreg_RegistryDwords="PowerMizerEnable=0x1; PerfLevelSrc=0x2222; PowerMizerLevel=0x3; PowerMizerDefault=0x3; PowerMizerDefaultAC=0x3"
```
2022-08-13 01:47:48 +02:00
Reboot your computer and it should be working.