Hi, After recently updating my system, I’m running into severe issues with both video playback and gaming:
Video playback:
In mpv, videos play at ~4–5 FPS with no audio.
In Firefox, videos don’t play at all (black screen, no sound).
Same behavior across other apps.
Games via Lutris:
Most games freeze after the splash screen or crash immediately.
This started immediately after my last nixos-rebuild switch --flake ... --upgrade.
System info
CPU: Intel Core i5-10300H (Comet Lake, 10th Gen, 4C/8T)
iGPU: Intel UHD Graphics (integrated, Comet Lake GT2)
GPU: NVIDIA GeForce GTX 1650 Mobile / Max-Q
Driver: nvidia-x11 580.95.05 (updated from 580.65.06)
Kernel: Linux 6.16.9 (updated from 6.16.4)
DE/WM: Hyprland 0.51.0 (updated from 0.50.0)
Nixpkgs channel: unstable
Mesa: 25.2.1 (was 25.2.3)
I have a disgusting feeling that this might be related to igpu but i may be wrong. Please let me know about any further information i may need to provide. Moreover, has anyone else on nixpkgs-unstable run into this with NVIDIA/iGPU hybrid setups after the last upgrade?
I’m using hybrid graphics (Intel + GTX 1650) with PRIME offloading and runtime power management enabled. Let me know for further debug-information from my side.
PS: Yeah, I’m aware that --upgrade doesn’t affect flakes — I usually update them with nix flake update before rebuilding. And I’ll switch over to nixos-unstable, i didn’t know about this one earlier.
You should not be setting any drivers except nvidia with prime, this likely causes you to use the iGPU.
Those rules are added by the nvidia module by default.
The 1650 is based on the Turing architecture, so supported by the open driver module. nvidia themselves recommend using the open driver. GSP is required for this. You should set both of those to true.
This is pretty pointless, nvidia haven’t released a beta driver in like a year now.
These settings interfere with the finegrained powermanagement setting from the nvidia module, you should not be setting them manually.
In general I recommend against using kernelParams directly, many NixOS modules set kernelParams for you. Always confirm the modules aren’t setting these things for you already.
Overall I recommend deleting all current configuration and just setting:
{ pkgs, ... }:
{
# I'm assuming you copied this from `hardware-configuration.nix` and stopped
# using that file
boot = {
initrd.availableKernelModules = [
"xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"
];
kernelModules = [ "kvm-intel" ];
# I would also recommend against this, to be honest, but the current nvidia
# driver does build fine against latest. You probably don't need this for
# anything though and it just adds entropy.
kernelPackages = pkgs.linuxPackages_latest;
kernelParams = [
"zswap.enabled=1"
"zswap.max_pool_percent=40"
"zswap.accept_threshold_percent=90"
"zswap.shrinker_enabled=1"
# I am very suspicious of the other kernelParams, so will leave them out
# for now. I'd recommend documenting *why* you set certain kernel params.
];
};
services.xserver.videoDrivers = [ "nvidia" ];
environment.sessionVariables.LIBVA_DRIVER_NAME = "iHD";
hardware = {
graphics = {
enable = true;
enable32Bit = true;
extraPackages = [
pkgs.intel-media-driver
];
extraPackages32 = [
# I doubt anything actually uses this in practice
pkgs.pkgsi686Linux.intel-media-driver
];
};
nvidia = {
powerManagement.finegrained = true;
# This doesn't do anything on wayland anyway, this only works on X11
prime = {
offload = {
enable = true;
enableOffloadCommand = true;
};
intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:2:0:0";
};
};
};
}
Most other settings you’re using right now are just tautologically set defaults, and what isn’t a default is probably wrong or harmful. At the very least, simplifying gives us a better base to debug from.
Assuming this doesn’t magically fix your issues, I’d suggest disabling prime for now (so that we can assert that the nvidia driver by itself works fine). To do that, just delete the entire nvidia block - the driver will still be enabled thanks to the services.xserver.videoDrivers setting; the nvidia block is literally just there to enable prime-related settings. I don’t think the other settings can cause issues in a vacuum.
Also, try to avoid using the hyprland flake. If you must use hyprland at all, there is a perfectly serviceable built-in NixOS module - yes, it does not build the latest master, but it’s much better integrated (i.e., you run into fewer problems like this one) and you don’t end up using multiple different versions of the same libraries.
Thanks for the detailed breakdown and suggestions, really appreciate the time you took to go through my config.
I went ahead and applied all the recommended changes (removed conflicting packages, cleaned up kernel params, switched to only nvidia for videoDrivers, enabled the open driver, and simplified the setup as you outlined).
Unfortunately, there’s still no improvement in the current situation — the behavior remains unchanged.
Try running journalctl -f --user right before starting a game and share the logs. This works better if you use uwsm. With any luck that should give us some logs to work with.
Launching lutris from the terminal might give some info too, if nothing ends up in the journal, but I’ve never used lutris so YMMV
Launching lutris from terminal gave the following output:
harrythe13th@nixos:~/ > lutris
2025-10-09 17:45:37,852: Command 'wine' not found on your system
2025-10-09 17:45:38,214: The Battle.net source is unavailable because Google protobuf could not be loaded: Descriptors cannot be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other possible workarounds are:
1. Downgrade the protobuf package to 3.20.x or lower.
2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).
More information: https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates
2025-10-09 17:45:38,460: Starting Lutris 0.5.19
ERROR: [Loader Message] Code 0 : vkCreateInstance: Found no drivers!
Cannot create Vulkan instance.
This problem is often caused by a faulty installation of the Vulkan driver or attempting to use a GPU that does not support Vulkan.
ERROR at /build/source/vulkaninfo/./vulkaninfo.h:573:vkCreateInstance failed with ERROR_INCOMPATIBLE_DRIVER
2025-10-09 17:45:38,469: ['vulkaninfo', '--summary'] command failed: Command '['vulkaninfo', '--summary']' returned non-zero exit status 1.
2025-10-09 17:45:38,490: "card1" is Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] (8086:9a49 17aa:3a5b i915) Driver 25.2.4
ERROR: [Loader Message] Code 0 : vkCreateInstance: Found no drivers!
Cannot create Vulkan instance.
This problem is often caused by a faulty installation of the Vulkan driver or attempting to use a GPU that does not support Vulkan.
ERROR at /build/source/vulkaninfo/./vulkaninfo.h:573:vkCreateInstance failed with ERROR_INCOMPATIBLE_DRIVER
2025-10-09 17:45:38,498: ['vulkaninfo', '--summary'] command failed: Command '['vulkaninfo', '--summary']' returned non-zero exit status 1.
2025-10-09 17:45:38,507: "card0" is NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (10de:1f9d 17aa:3a5b nvidia) Driver 580.95.05
Fontconfig warning: using without calling FcInit()
2025-10-09 17:45:45,996: Shutting down Lutris
Running vulkaninfo --summary gave the following output:
Tried disabling it but it had no effect, Lutris still provided the same errors.
Also, a question. What do these errors means in the previously provided logs?
[nix-shell:~]$ vulkaninfo --summary
WARNING: [Loader Message] Code 0 : terminator_CreateInstance: Received return code -3 from call to vkCreateInstance in ICD /nix/store/jd6ifcmqwcrzln0hi5myhb6xwlifdf1b-mesa-25.2.4/lib/libvulkan_dzn.so. Skipping this driver.
and from lutris
ERROR: [Loader Message] Code 0 : vkCreateInstance: Found no drivers!
Cannot create Vulkan instance.
This problem is often caused by a faulty installation of the Vulkan driver or attempting to use a GPU that does not support Vulkan.
ERROR at /build/source/vulkaninfo/./vulkaninfo.h:573:vkCreateInstance failed with ERROR_INCOMPATIBLE_DRIVER
2025-10-09 17:45:38,469: ['vulkaninfo', '--summary'] command failed: Command '['vulkaninfo', '--summary']' returned non-zero exit status 1.
2025-10-09 17:45:38,490: "card1" is Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] (8086:9a49 17aa:3a5b i915) Driver 25.2.4
ERROR: [Loader Message] Code 0 : vkCreateInstance: Found no drivers!
Cannot create Vulkan instance.
This problem is often caused by a faulty installation of the Vulkan driver or attempting to use a GPU that does not support Vulkan.
ERROR at /build/source/vulkaninfo/./vulkaninfo.h:573:vkCreateInstance failed with ERROR_INCOMPATIBLE_DRIVER
No, the first message is a warning, it’s finding the libmesa driver but fails to set it up because you’re using nvidia, then continues as normal and lists all the viable GPUs and drivers.
In other words, it’s a red herring, which is why I ignored it.
The second message is more interesting, though it isn’t the “source” of the problem. It fails to create a vulkan instance because the driver underpinning it lacks vulkan support.
What I did overlook is that it selects the iGPU. I guess your iGPU doesn’t support vulkan. If you’re using a wlroots compositor, you should try overriding the card order.
My iGPU does support Vulkan. It’s an Intel Iris Xe (TGL GT2), which provides full Vulkan support according to the info here.
That said, you’re right about the compositor picking the wrong GPU. In my case, I’d prefer Hyprland to run on the iGPU rather than the dGPU, cause i want to use nvidia-prime going forward.
Fair enough, that leads us back to my initial suspicion. vulkaninfo runs fine outside the lutris context, but fails in the lutris context. The libraries picked up in either instance must be different, and the result is:
It seems to pick up your iGPU, and reports that its driver does not support vulkan, though. Personally I’d try setting up nvidia as my primary GPU just to see if that’s the issue - you can always switch to some different setup once you know whether the GPU selection is related.
That still involves working with WLR_DRM_DEVICES for wlroots compositors, the nvidia module’s prime options only work on X11. I don’t do Hyprland, though, feel free to ask for support with prime setups upstream.
I followed your udev rule and set WLR_DRM_DEVICES="/dev/dri/dgpu1" in my config, but it had no changes and hyprland continued using the iGPU. Since i’m using uwsm, i then set the following export AQ_DRM_DEVICES="/dev/dri/card0:/dev/dri/card1" in the ~/.config/uwsm/env-hyprland but that also had no effect. Output of nvidia-smi showed that the dGPU was idle in every variation of the config. I also tried setting LIBVA_DRIVER_NAME and __GLX_VENDOR_LIBRARY_NAME to nvidia, but to no avail.
[ 3.901585] [drm] Initialized nvidia-drm 0.0.0 for 0000:02:00.0 on minor 0
[ 3.901600] nvidia 0000:02:00.0: [drm] No compatible format found
[ 3.901602] nvidia 0000:02:00.0: [drm] Cannot find any crtc or sizes
This explains why Hyprland is unable to use the dGPU and always fallbacks to the iGPU instead even with all the environment variables set. I also think it confirms that issue relates to the iGPU, cause the display rendering is being done by it?
I’m not sure about it, but this or the variations of this error pops up regularly: [ffmpeg/video] h264: Device does not support the VK_KHR_video_decode_queue extension!. From what you pointed out previously this states that my iGPU does not support vulkan but i’m sure it does cause these errors started appearing after the update.