Vulkan problems with Hyprland flake, Steam, and Gamescope

Hi all, I recently updated my NixOS configuration to use the Hyprland flake as recommended by the Hyprland wiki. It’s a rather straightforward process which involves pulling in the packages from the flake, and swapping out some graphics packages with the ones used to build Hyprland:

  programs.hyprland = {
    enable = true;
    package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
    portalPackage =
      inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
  };

# The following is an approximation of the syntax used
let
    hypr-packages = inputs.hyprland.inputs.nixpkgs.legacyPackages.${pkgs.stdenv.hostPlatform.system};
in
hardware.graphics = {
    package = hypr-packages.mesa;

    enable32Bit = true;
    package32 = hypr-packages.pkgsi686Linux.mesa;
  };

It worked, for the most part. I have access to Hyprland 0.51 at the time of writing this post, and outside of Steam and Gamescope, no other apps seem to have issues (including some people seem to have issues with, such as Obsidian). However, Gamescope and Steam are incredibly broken since I made this change; I’ll go into more depth in #Issues.

Relevant Info

System Specs
Lenovo Thinkpad E14 Gen 6 (Intel) (using relevant nixos-hardware flake output with:
CPU: Intel(R) Core™ Ultra 7 155U (14) @ 4.80 GHz
GPU: Intel Graphics @ 1.95 GHz [Integrated]
RAM: 32GB DDR5 @5400MT/s

NixOS Version
Flake-based system using latest 25.05 nixpkgs input for system builds, with an unstable overlay for some packages. The full configuration can be found here, although note that it is not fully up-to-date as a result of not committing my troubleshooting changes. The most notable one is that I’ve since enabled the programs.gamescope module, whereas before it was simply in my systemPackages. EDIT: I’ve since pushed all config changes.

Issues

The issues are multitudinous, mostly stemming from Vulkan errors (as far as I can tell):

Steam has had a multitude of problems. For reference, when using the version of Hyprland/Mesa from 25.05, Steam had no notable issues. When updating, however, it’s had a variety of problems, specifically the primary window either never appearing, or if it does, content not being rendered properly (it’s effectively a blank window where some popup elements, like the one that appears when hovering over the “Store” button, seemingly render just fine). The biggest problem is the lack of consistency; I got false positives when trying some configurations where the primary window would render fine, then break again after restarting the client.
Secondary windows, like Settings (accessible from the tray icon context menu), render just fine, which I used to my advantage later on. A consistent error in the launch logs have complained about Vulkan failing to determine GPU topology:

Running query: 1 - GpuTopology CVulkanTopology: failed create vulkan instance: -9
CVulkanTopology: failed to create vulkan instanceFailed to query vulkan gpu topology
Failed to query vulkan gpu topology

Gamescope is the other victim of this problem. While most native apps will render within it just fine, any attempt to play a game through it have (until now, see current status at end) consistently crashed, with Vulkan errors similar to Steam’s. Occasionally, X11 errors will appear instead, with no notable difference in configuration or launch parameters. I have a few games using Gamescope in their launch parameters, and since I had access to the Steam tray with the most recently-launched games, I would launch them through that and note the logs.
Before upgrading to the Hyprland flake, I had locked Gamescope at version 3.16.4, as there were regressions in some of the newer versions which caused problems. The new suite of errors seem entirely unrelated to it, and the unstable version seems to work occasionally.

Troubleshooting Steps

vulkaninfo

At the recommendation of several posts (including the NixOS wiki’s “Graphics - Vulkan” page, I used vulkaninfo from vulkan-tools in a Nix shell as a cursory test; it initially failed outright, giving me Code 0 : vkCreateInstance: Found no drivers!, until I used the version from unstable, which seemingly worked correctly.
Based on some research (specifically this post), I assumed that this was caused by a glibc version mismatch, but after testing the 3 nixpkgs inputs–my system (stable), my unstable overlay, and the one from the Hyprland flake, the glibc version was the same across all of them, which I find somewhat confusing. (It’s entirely possible I did this incorrectly; I ran nix eval github:NixOS/nixpkgs/<hash>#glibc.version for each relevant nixpkgs input listed in my flake.lock).

Misc. Version Switching

After the success of using the unstable vulkaninfo, I tried swapping out the Steam and Gamescope versions with the ones from unstable–for Steam, all that really changed was the wrapper implementation between stable and unstable, and for gamescope, it bumped the version from v3.16.4 (a version I had locked it to in an attempt to resolve a bug with 3.16.15) to 3.16.17. For Steam, this version bump initially caused it to render without problems, but it broke once more later. In some instances, it seemingly had no issues with the GPU topology, but still could not render the primary window.

I also tried installing the Steam client beta, which initially caused the primary window to both show up in the client list as well as render properly. This behavior did not persist through a restart, however, and I was back to the rendering problems. I’ve since switched back to the stable client, with no changes in behavior.


Currently status is as follows:
It seems to be tentatively working, with unstable Steam and Gamescope, to an extent: Steam itself will not render as per usual (the GPU topology errors are gone as well, for some reason), but the games I’ve tested will launch in Gamescope and actually run; they inevitably begin to lag horrendously and will consistently lose audio after a few minutes, though, sometimes taking down the audio for the whole system while it happens (until I restart Pipewire). This is also true when launching them from Steam Big Picture in its own dedicated Gamescope session (which, notably, does not launch while Hyprland is running; I couldn’t quite figure out why based on the logs). The confusing part is that nothing has really changed since about 18 hours ago, where Gamescope and Steam both had the GPU topology errors. I also wouldn’t expect any lag of this kind (outside of niceness issues which seem unsolvable for now, at least according to some GitHub issues related to the wrapper), but I’ll consider that a tertiary issue and not part of the current scope.

I’m still actively troubleshooting the problem(s), and will be filling out more info here as I discover it since I’ve likely missed a few important details. Any suggestions are much appreciated, and I’m happy to provide more details if requested. Ultimately it’s a confusing mix of problems, some of which seem to appear and disappear at random, even outside the context of configuration changes. I’m mostly curious if anyone uses a similar configuration–stable NixOS with the Hyprland flake, primarily running games with Steam and Gamescope–and if they’ve had similar issues, or if it’s something to do with my specific setup.

(Apologies in advance for any grammatical errors, this has been a rather piecemeal post as I’ve had to re-gather some of the materials)

1 Like

No real expertise here, but personally i override the hyprland nixpkgs with my actual nixpkgs, and everything seems to work fine. This of course means recompiling hyprland on updates of either.

This would go into your flake.nix

inputs.hyprland = {
  url = "github:hyprwm/Hyprland/v0.50.1";
  inputs.nixpkgs.follows = "nixpkgs";
};

For your specific repo you could add line this after your hyprland.url = "github:hyprwm/Hyprland";.

hyprland.inputs.nixpkgs.follows = "nixpkgs";

As of 12/14/25, all the above problems are fixed; out of sheer laziness I never attempted fixes beyond this initial post, but things are working as expected now across all programs. I haven’t spent the time to figure out precisely why; if I get around to it, I’ll update this comment for posterity.