RTX 5060 bad performance? (new to nixOS)

Hi I just built my new PC and thought to try out a new distro (love it so far).

But… my graphics card seems to not perform as good as expected… Games I’ve tried run pretty badly…

I installed NixOS using the graphical ISO and added(?) support for the card… i think…?

This is my /etc/nixos/configuration.nix

# Edit this configuration file to define what should be installed on
# your system.  Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).

{ config, pkgs, ... }:

{
  imports =
    [ # Include the results of the hardware scan.
      ./hardware-configuration.nix
    ];

  # Bootloader.
  boot.loader.systemd-boot.enable = true;
  boot.loader.efi.canTouchEfiVariables = true;

  networking.hostName = "gaming-rig"; # Define your hostname.
  # networking.wireless.enable = true;  # Enables wireless support via wpa_supplicant.

  # Configure network proxy if necessary
  # networking.proxy.default = "http://user:password@proxy:port/";
  # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";

  # Enable networking
  networking.networkmanager.enable = true;

  # Set your time zone.
  time.timeZone = "Europe/Bucharest";

  # Select internationalisation properties.
  i18n.defaultLocale = "en_US.UTF-8";

  i18n.extraLocaleSettings = {
    LC_ADDRESS = "ro_RO.UTF-8";
    LC_IDENTIFICATION = "ro_RO.UTF-8";
    LC_MEASUREMENT = "ro_RO.UTF-8";
    LC_MONETARY = "ro_RO.UTF-8";
    LC_NAME = "ro_RO.UTF-8";
    LC_NUMERIC = "ro_RO.UTF-8";
    LC_PAPER = "ro_RO.UTF-8";
    LC_TELEPHONE = "ro_RO.UTF-8";
    LC_TIME = "ro_RO.UTF-8";
  };

  # Enable the X11 windowing system.
  # You can disable this if you're only using the Wayland session.
  services.xserver.enable = true;

  # Enable the KDE Plasma Desktop Environment.
  services.displayManager.sddm.enable = true;
  services.desktopManager.plasma6.enable = true;

  # Configure keymap in X11
  services.xserver.xkb = {
    layout = "us";
    variant = "";
  };

  # Enable CUPS to print documents.
  services.printing.enable = true;

  services.hardware.openrgb.enable = true;

  # Enable sound with pipewire.
  services.pulseaudio.enable = false;
  security.rtkit.enable = true;
  services.pipewire = {
    enable = true;
    alsa.enable = true;
    alsa.support32Bit = true;
    pulse.enable = true;
    # If you want to use JACK applications, uncomment this
    #jack.enable = true;

    # use the example session manager (no others are packaged yet so this is enabled by default,
    # no need to redefine it in your config for now)
    #media-session.enable = true;
  };

  # Enable touchpad support (enabled default in most desktopManager).
  # services.xserver.libinput.enable = true;

  # Define a user account. Don't forget to set a password with ‘passwd’.
  users.users.ana = {
    isNormalUser = true;
    description = "ana";
    extraGroups = [ "networkmanager" "wheel" ];
    packages = with pkgs; [
      nvtopPackages.panthor
      kdePackages.kate
      pkg-config
      rustup
      gcc
      go
      nodejs
    #  thunderbird
    ];
  };

  # Install firefox.
  programs.firefox.enable = true;

  # Allow unfree packages
  nixpkgs.config.allowUnfree = true;

  # List packages installed in system profile. To search, run:
  # $ nix search wget
  environment.systemPackages = with pkgs; [
    openssl
    discord
        vim
        wget
        helix
        htop
    git
    neofetch
    mangohud
    protonup
  #  vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
  #  wget
  ];

  programs.steam.enable = true;
  programs.steam.gamescopeSession.enable = true;
  programs.gamemode.enable = true;

  # Some programs need SUID wrappers, can be configured further or are
  # started in user sessions.
  # programs.mtr.enable = true;
  # programs.gnupg.agent = {
  #   enable = true;
  #   enableSSHSupport = true;
  # };

  # List services that you want to enable:

  # Enable the OpenSSH daemon.
  # services.openssh.enable = true;

  # Open ports in the firewall.
  # networking.firewall.allowedTCPPorts = [ ... ];
  # networking.firewall.allowedUDPPorts = [ ... ];
  # Or disable the firewall altogether.
  # networking.firewall.enable = false;

  # This value determines the NixOS release from which the default
  # settings for stateful data, like file locations and database versions
  # on your system were taken. It‘s perfectly fine and recommended to leave
  # this value at the release version of the first install of this system.
  # Before changing this value read the documentation for this option
  # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
  system.stateVersion = "25.05"; # Did you read the comment?
  # Enable OpenGL
  hardware.graphics = {
    enable = true;
  };

  # Load nvidia driver for Xorg and Wayland
  services.xserver.videoDrivers = ["nvidia"];

  hardware.nvidia = {

    # Modesetting is required.
    modesetting.enable = true;

    # Nvidia power management. Experimental, and can cause sleep/suspend to fail.
    # Enable this if you have graphical corruption issues or application crashes after waking
    # up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead 
    # of just the bare essentials.
    powerManagement.enable = false;

    # Fine-grained power management. Turns off GPU when not in use.
    # Experimental and only works on modern Nvidia GPUs (Turing or newer).
    powerManagement.finegrained = false;

    # Use the NVidia open source kernel module (not to be confused with the
    # independent third-party "nouveau" open source driver).
    # Support is limited to the Turing and later architectures. Full list of 
    # supported GPUs is at: 
    # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus 
    # Only available from driver 515.43.04+
    open = true;

    # Enable the Nvidia settings menu,
        # accessible via `nvidia-settings`.
    nvidiaSettings = true;

    # Optionally, you may need to select the appropriate driver version for your specific GPU.
    package = config.boot.kernelPackages.nvidiaPackages.stable;
  };

}

My nvidia-smi shows this:

Fri Aug 15 20:10:30 2025       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.153.02             Driver Version: 570.153.02     CUDA Version: 12.8     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA Graphics Device         Off |   00000000:01:00.0  On |                  N/A |
|  0%   48C    P0             27W /  145W |     890MiB /   8151MiB |      1%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
                                                                                         
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A            1455      G   ...z-kwallet-6.14.1/bin/ksecretd          2MiB |
|    0   N/A  N/A            1458      G   ...r2r-xorg-server-21.1.18/bin/X        270MiB |
|    0   N/A  N/A            1536      G   ...workspace-6.3.6/bin/ksmserver          2MiB |
|    0   N/A  N/A            1538      G   ...h12w7d1-kded-6.14.0/bin/kded6          2MiB |
|    0   N/A  N/A            1539      G   ...ah203-kwin-6.3.6/bin/kwin_x11         44MiB |
|    0   N/A  N/A            1563      G   ...rkspace-6.3.6/bin/plasmashell         45MiB |
|    0   N/A  N/A            1628      G   ...-kwallet-6.14.1/bin/kwalletd6          2MiB |
|    0   N/A  N/A            1643      G   ...sma-desktop-6.3.6/bin/kaccess          2MiB |
|    0   N/A  N/A            1644      G   ...it-kde-authentication-agent-1          2MiB |
|    0   N/A  N/A            1762      G   ...rent-system/sw/bin/kalendarac          2MiB |
|    0   N/A  N/A            1786      G   ...current-system/sw/bin/konsole          2MiB |
|    0   N/A  N/A            1787      G   ...ibexec/xdg-desktop-portal-kde          2MiB |
|    0   N/A  N/A            1933      G   .../opt/Discord/.Discord-wrapped         67MiB |
|    0   N/A  N/A            5632      G   ...share/Steam/ubuntu12_32/steam          2MiB |
|    0   N/A  N/A            5884      G   ./steamwebhelper                          3MiB |
|    0   N/A  N/A            5912    C+G   ...am/ubuntu12_64/steamwebhelper          5MiB |
|    0   N/A  N/A           12552      G   ...-141.0.3/bin/.firefox-wrapped        162MiB |
+-----------------------------------------------------------------------------------------+

Which I think means it’s running… but nvtop shows:

No GPU to monitor.

Other info:

$ lspci | grep ' VGA '
01:00.0 VGA compatible controller: NVIDIA Corporation Device 2d05 (rev a1)

$ nvidia-smi --list-gpus
GPU 0: NVIDIA Graphics Device (UUID: ...)

Thanks for the help in advance!

1 Like

So i think it is because of the driver… but NixOS doesn’t seem to support any of the drivers I would need.

Check this one forum post on the mint forums:
https://forums.linuxmint.com/viewtopic.php?t=448173

It seems that just installing the newest drivers should work… but the newest one on Nix (the beta drivers) are 575.51 and I think I’d need at least 575.57 as per the post linked…

Any way of getting that driver?

Try this:

  hardware = {
    graphics.enable = true;
    graphics.enable32Bit = true;
    graphics.extraPackages = with pkgs; [
      nvidia-vaapi-driver
      #intel-media-driver # Recommended only with Intel iGPU
    ];

    cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
    intel-gpu-tools.enable = true;

    nvidia = {
      open = true; # Compatible with RTX 2080 Super and newer
      nvidiaSettings = true; # GUI tool for NVIDIA settings but useless on Wayland
      modesetting.enable = true; # Mandatory for Wayland
      powerManagement.enable = true;
      powerManagement.finegrained = false;
      # https://github.com/NixOS/nixpkgs/blob/staging-25.05/pkgs/os-specific/linux/nvidia-x11/default.nix
      #package = config.boot.kernelPackages.nvidiaPackages.production; # "570.153.02"
      # https://github.com/NixOS/nixpkgs/blob/master/pkgs/os-specific/linux/nvidia-x11/default.nix
      package = config.boot.kernelPackages.nvidiaPackages.mkDriver {
        version = "580.76.05";
        sha256_64bit = "sha256-IZvmNrYJMbAhsujB4O/4hzY8cx+KlAyqh7zAVNBdl/0=";
        sha256_aarch64 = "sha256-NL2DswzVWQQMVM092NmfImqKbTk9VRgLL8xf4QEvGAQ=";
        openSha256 = "sha256-xEPJ9nskN1kISnSbfBigVaO6Mw03wyHebqQOQmUg/eQ=";
        settingsSha256 = "sha256-ll7HD7dVPHKUyp5+zvLeNqAb6hCpxfwuSyi+SAXapoQ=";
        persistencedSha256 = "sha256-bs3bUi8LgBu05uTzpn2ugcNYgR5rzWEPaTlgm0TIpHY=";
      };
    };
  };
2 Likes

Thank you so much!

So i just copy pasted this in:

      package = config.boot.kernelPackages.nvidiaPackages.mkDriver {
        version = "580.76.05";
        sha256_64bit = "sha256-IZvmNrYJMbAhsujB4O/4hzY8cx+KlAyqh7zAVNBdl/0=";
        sha256_aarch64 = "sha256-NL2DswzVWQQMVM092NmfImqKbTk9VRgLL8xf4QEvGAQ=";
        openSha256 = "sha256-xEPJ9nskN1kISnSbfBigVaO6Mw03wyHebqQOQmUg/eQ=";
        settingsSha256 = "sha256-ll7HD7dVPHKUyp5+zvLeNqAb6hCpxfwuSyi+SAXapoQ=";
        persistencedSha256 = "sha256-bs3bUi8LgBu05uTzpn2ugcNYgR5rzWEPaTlgm0TIpHY=";
      };

and IT WORKED!

Thanks a lot!

2 Likes

FYI:

The bump for the driver should land in nixos-unstable soon.

PR: linuxPackages.nvidiaPackages.production: 570.181 -> 580.76.05 by Kiskae · Pull Request #433366 · NixOS/nixpkgs · GitHub
tracker-link: Nixpkgs PR #433366 ("linuxPackages.nvidiaPackages.production: 570.181 -> 580.76.05") progress
and the corresponding hydra eval should be Making sure you're not a bot! (be aware that it does not include nvidia packages in the build as those are unfree).

Once the tracker showns the pr as in nixos-unstable you should be able to use

hardware.nvidia. = config.boot.kernelPackages.nvidiaPackages.stable;

again.

1 Like

I would recommend not updating to 580 if you are on Wayland for now. It ships new protocols (fifo-v1) that are in a semi broken state, thus leading to freezes in Vulkan applications like Zed or any Gnome application running with the Vulkan renderer.

Please don’t copy that config if you’re coming into this without knowing what it does. As usual, lots of cargo culting going on… A bunch of it is silly and some of it could lead to problems. Here are all the issues with it:

These are all different packages doing vaguely related things.

To understand this, you need to know that VAAPI and VDPAU are two different protocols for hardware acceleration for video en-/decoding. VAAPI is the modern one, and should be preferred, installing both makes little sense.

Each package in turn:

  • libva-utils
    • Utility package with debug utilities for VAAPI. It should go into environment.systemPackages, not graphics.extraPackages, putting it here makes zero sense.
  • libvdpau
    • Library implementation for VDPAU. It’s .so files, and should be included in packages’ buildInputs, not a NixOS configuration. Putting it here makes zero sense.
  • libvdpau-va-gl
    • This one almost makes sense! It’s an opengl-based implementation of VDPAU, and actually needs to be in the graphics driver lookup path, so it’s in the right place. However, the nvidia driver implements it natively, all you’re doing is replacing nvidia’s native, efficient hardware implementation with one implemented in opengl. This should be removed.
  • nvidia-vaapi-driver
    • This is the only package that actually makes sense to put here; nvidia don’t support VAAPI.
    • However, this is a third-party implementation with many limitations, and generally iGPUs are better at video decoding. You should be using the intel-media-driver instead, since you have an intel iGPU (for AMD iGPUs, you don’t need any packages for this option, their driver supports this natively).
    • If you want to do high-performance video encoding, don’t use VAAPI, ask your encoder to use NVENC directly. Still set up intel-media-driver so you don’t do software decoding for youtube.
  • vdpauinfo
    • Like libva-utils, this should be in environment.systemPackages, not here.

So, to summarize, depending on your CPU you should either not set that option at all or use this:

hardware.graphics.extraPackages = [ 
  # 2018 and newer
  pkgs.intel-media-driver
  # older CPUs
  # pkgs.intel-vaapi-driver
];

But even that is fairly simplified, go read the arch wiki or something instead of cargo culting: Hardware video acceleration - ArchWiki

You can do this, but most people should not. The nvidia settings GUI is actually useful.

This became popular after the settings application didn’t build on NixOS for 3 weeks because of a library bump two years ago. As a workaround, people disabled it, and it has been cargo culted ever since. Please stop.

This is the actual answer to the question. The 5060 requires a newer driver than what is currently in nixpkgs stable.

This will likely no longer be true within weeks, at which point you should delete this from your config so you get updates alongside your OS.

I would also recommend setting the hashes you don’t use to lib.fakeHash, since those are only built if you actually use them. In fact, there’s a good chance the ones listed there are wrong for some architectures/the settings/persistenced, at which point you’ll get very weird errors at runtime if you use slightly different things than the original poster, because nix will happily build wrong versions of stuff as long as the hash matches.

10 Likes

Thanks but as I said above I only copied the last part. Which, by reading the code, seemed to be installing a specific driver (580) which looked fine.

Yep, but this forum is indexed by search engines, so plenty of less attentive readers will be lead astray.

3 Likes

How can one find the correct values for these hashes?

Replace them with lib.fakeHash and wait for nix to tell you the correct values.