System locking up completely in hyprland

Hi, I’m new to NixOS, I’ll link all relevant files here. I bought a Framework 13 laptop with the Ryzen 9 AI series CPU. After idling for a bit my system will completely lock up, the DE is still responsive, I can still open terminals and librewolf instances but when opening kitty the shell won’t start, librewolf is unresponsive, btop won’t start, etc. Tried updating my firmware with fwupd, that didn’t fix the issue. I’m considering switching back to Arch; could this be a hardware compatibility problem since this CPU is so new?

# 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;
  
  hardware.enableRedistributableFirmware = true;

  services.udev.packages = with pkgs; [ brillo ];

    # Fingerprint authentication
    services.fprintd = {
      enable = true;
      tod.enable = true;
      tod.driver = pkgs.libfprint-2-tod1-goodix;
    };

    # Enable fingerprint for sudo and login
    security.pam.services = {
      sudo.fprintAuth = true;
      login.fprintAuth = true;
      su.fprintAuth = true;
    };
  
  boot.kernelParams = [
      "amdgpu.runpm=0"
      "amdgpu.dpm=1"
    ];

   hardware.opengl = {
      enable = true;
      # driSupport = true;
      # driSupport32bit = true;
    };
    
  nix.settings.experimental-features = [ "nix-command" "flakes" ];

  # services.ucodenixrenable = true;
  services.fwupd.enable = true;
  
  environment.variables.NIXPKGS_QT6_QML_IMPORT_PATH = "${pkgs.kdePackages.qt5compat}/lib/qt-6/qml";

  # Use latest kernel.
  boot.kernelPackages = pkgs.linuxPackages_latest;

  networking.hostName = "nixos"; # 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 = "America/New_York";

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

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

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

  # Define a user account. Don't forget to set a password with ‘passwd’.
  users.users.dani = {
    isNormalUser = true;
    description = "dani";
    extraGroups = [ "networkmanager" "wheel" "video"];
    packages = with pkgs; [];
  };

  # Allow unfree packages
  nixpkgs.config.allowUnfree = true;
  
  programs.hyprland = {
    enable = true;
    withUWSM = true;
    xwayland.enable = true;
  };  
  
  services.tailscale.enable = true;
  
  systemd.tmpfiles.rules = [
    # Set permissions for AMD GPU backlight brightness control
    "z /sys/class/backlight/amdgpu_bl*/brightness 0664 root video -"
  ];

  services.udev.extraRules = ''
    SUBSYSTEM=="backlight", GROUP="video", MODE="0664"
  '';

  programs.steam = {
    enable = true;
    #package = pkgs.steam-millennium;
  };

  # List packages installed in system profile. To search, run:
  # $ nix search wget
  environment.systemPackages = with pkgs; [
  # Hardware/system tools
    framework-tool      
    fwupd              
    polkit             
    usbutils
    pciutils
    stow
  ];

  # 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 = [ 22 ];
  networking.firewall.allowedUDPPorts = [ 22 ];
  # 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.11"; # Did you read the comment?

}
# flake.nix

  {
    description = "NixOS configuration";

    inputs = {
      nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
      ucodenix.url = "github:e-tho/ucodenix";
      home-manager.url = "github:nix-community/home-manager";
      home-manager.inputs.nixpkgs.follows = "nixpkgs";

      # Add Millennium flake (temporarily disabled)
      #millennium.url = "github:SteamClientHomebrew/Millennium";   

    };

    outputs = { self, nixpkgs, ucodenix, home-manager, ... }@inputs: {
        nixosConfigurations."nixos" = nixpkgs.lib.nixosSystem {
          system = "x86_64-linux";
          modules = [
            ./configuration.nix
            inputs.ucodenix.nixosModules.default
            home-manager.nixosModules.home-manager
            {
              home-manager.useGlobalPkgs = true;
              home-manager.useUserPackages = true;
              home-manager.users.dani = import ./home.nix;
              home-manager.extraSpecialArgs = { inherit inputs; };
            }
            # Import Millennium overlay
            #{
            #  nixpkgs.overlays = [ inputs.millennium.overlays.default ];
            #}
          ];
        };
      };
    }
# home.nix
 { config, pkgs, inputs, ... }: {
    home.username = "dani";
    home.homeDirectory = "/home/dani";
    home.stateVersion = "25.11";

    home.packages = with pkgs; [
      # Terminal & Shell
      kitty zsh oh-my-zsh fzf fastfetch pfetch btop zoxide

      # Browsers
      firefox librewolf

      # Editors & Tools
      neovim git wget nnn libreoffice

      # Hyprland 
      waybar rofi hyprcursor hyprsunset hyprpaper waypaper 
      bibata-cursors

      # Media
      steam moonlight-qt vesktop prismlauncher mpv gimp krita godot
      swayimg

      # Utilities
      wl-clipboard cliphist speedtest protonvpn-gui
      kdePackages.dolphin brillo pywal mako quickshell claude-code
      kdePackages.ark

      # Libraries 
      nodejs yarn python315 
 
    ];

  }
# fastfetch
          ▗▄▄▄       ▗▄▄▄▄    ▄▄▄▖             dani@nixos
          ▜███▙       ▜███▙  ▟███▛             ----------
           ▜███▙       ▜███▙▟███▛              OS: NixOS 26.05 (Yarara) x86_4
            ▜███▙       ▜██████▛               Host: Laptop 13 (AMD Ryzen AI)
     ▟█████████████████▙ ▜████▛     ▟▙         Kernel: Linux 6.18.2
    ▟███████████████████▙ ▜███▙    ▟██▙        Uptime: 12 mins
           ▄▄▄▄▖           ▜███▙  ▟███▛        Packages: 1397 (nix-system), )
          ▟███▛             ▜██▛ ▟███▛         Shell: bash 5.3.3
         ▟███▛               ▜▛ ▟███▛          Display (NE135A1M-NY1): 2880x]
▟███████████▛                  ▟██████████▙    WM: Hyprland 0.52.2 (Wayland)
▜██████████▛                  ▟███████████▛    Cursor: Bibata Classic (24px)
      ▟███▛ ▟▙               ▟███▛             Terminal: nnn
     ▟███▛ ▟██▙             ▟███▛              CPU: AMD Ryzen AI 9 HX 370 (2z
    ▟███▛  ▜███▙           ▝▀▀▀▀               GPU: AMD Radeon 890M Graphics]
    ▜██▛    ▜███▙ ▜██████████████████▛         Memory: 3.18 GiB / 30.64 GiB )
     ▜▛     ▟████▙ ▜████████████████▛          Swap: 0 B / 33.70 GiB (0%)
           ▟██████▙       ▜███▙                Disk (/): 92.87 GiB / 1.76 Ti4
          ▟███▛▜███▙       ▜███▙               Local IP (wlp192s0): 192.168.2
         ▟███▛  ▜███▙       ▜███▙              Battery (FRANGWA): 100% (83 d]
         ▝▀▀▀    ▀▀▀▀▘       ▀▀▀▘              Locale: en_US.UTF-8

                                                                       
                                                                       
1 Like

It’s probably an amdgpu linux-firmware bug that you’ve hit. There’s a PR making its way through the system: https://github.com/NixOS/nixpkgs/pull/472914 (along with associated backport PRs).

If you update your flake / channel it should be resolved.

2 Likes

do i switch to unstable ?

The backport has merged, too, so no need, you should just need to update your channel/flake inputs and use nixos-rebuild boot: [Backport release-25.11] linux-firmware: 20251125 -> unstable-2025-12-18 by nixpkgs-ci[bot] · Pull Request #472939 · NixOS/nixpkgs · GitHub

1 Like

I switched to unstable, updated, and I’m still freezing up occasionally, it usually happens after idling for a while.

The amdgpu linux-firmware fix was backported to 25.11 stable, however I’m still experiencing the same frequent system freezes on my Framework Desktop (AMD Ryzen AI Max 300 Series). The only workaround for me is still to roll back. I’m wondering if Ryzen AI is not covered by the fix in nixpkgs, as @meoowdypardner is the only fellow victim I have found whose system remains broken. Are there any diagnostics commands we can run to provide more info, for example to determine which firmware files are being loaded by our systems?

2 Likes

I did install arch on this Framework 13 and haven’t noticed any lockups. I did really like Nix so if there’s a fix I’m definitely willing to switch back.

I reinstalled NixOS, froze again, switched to unstable and froze again. What version did you roll back to to stop the freezes ?

I remarked that I still have freezes with my dual GPU setup (when the second GPU activates)

tried downgrading linux firmware to an older version, still froze.

# Downgrade Linux Firmware to fix freezing bug

hardware.firmware = [

(pkgs.linux-firmware.overrideAttrs (old: {

version = “20251111”;

src = pkgs.fetchurl {

url = “https://www.kernel.org/pub/linux/kernel/firmware/linux-firmware-20251111.tar.gz”;

sha256 = “0rp2ah8drcnl7fh9vbawa8p8c9lhvn1d8zkl48ckj20vba0maz2g”;

};

}))

];


hard to predict when it’s going to happen, seems almost entirely random. sometimes i’ll leave it on for a few hours and it’s fine, sometimes after about 20 minutes after boot it freezes.

I don’t have the reference handy any more, but I read in an issue somewhere that the problems started in 20251111 and were made worse in 20251125. I’m using 20251125-unstable-2025-12-18 (the 25.11 default) without any issue, but since that doesn’t seem to be working for you, it might be worthwhile trying 20251021.

1 Like

I’ve been using my laptop daily for the past few days on the newest 26.05.20260108.3497aa5 update and haven’t noticed any freezes. It may be fixed ..?

20260110 is now in 25.11 so all should be swell. I’m still having freezes, but have determined the cause to likely be a separate kernel issue with hardware accelerated video decoding, so I’ll remain on 25.05 for now and not hijack your topic further.

dmesg

amdgpu 0000:c3:00.0: amdgpu: SMU: I’m not done with your previous command: SMN_C2PMSG_66:0x00000032 SMN_C2PMSG_82:0x00000000
amdgpu 0000:c3:00.0: amdgpu: Failed to power gate VPE!
[drm:vpe_set_powergating_state [amdgpu]] *ERROR* Dpm disable vpe failed, ret = -62.
amdgpu 0000:c3:00.0: amdgpu: SMU: I’m not done with your previous command: SMN_C2PMSG_66:0x00000032 SMN_C2PMSG_82:0x00000000
amdgpu 0000:c3:00.0: amdgpu: Failed to power gate VCN instance 1!
[drm:vcn_v4_0_5_stop [amdgpu]] *ERROR* Dpm disable uvd failed, ret = -62.
amdgpu 0000:c3:00.0: amdgpu: Dumping IP State
amdgpu 0000:c3:00.0: amdgpu: SMU: I’m not done with your previous command: SMN_C2PMSG_66:0x00000032 SMN_C2PMSG_82:0x00000000
amdgpu 0000:c3:00.0: amdgpu: Failed to disable gfxoff!
amdgpu 0000:c3:00.0: amdgpu: SMU: I’m not done with your previous command: SMN_C2PMSG_66:0x00000032 SMN_C2PMSG_82:0x00000000
amdgpu 0000:c3:00.0: amdgpu: Failed to disable gfxoff!
amdgpu 0000:c3:00.0: amdgpu: SMU: I’m not done with your previous command: SMN_C2PMSG_66:0x00000032 SMN_C2PMSG_82:0x00000000
amdgpu 0000:c3:00.0: amdgpu: Failed to disable gfxoff!
amdgpu 0000:c3:00.0: amdgpu: SMU: I’m not done with your previous command: SMN_C2PMSG_66:0x00000032 SMN_C2PMSG_82:0x00000000
amdgpu 0000:c3:00.0: amdgpu: Failed to disable gfxoff!
amdgpu 0000:c3:00.0: amdgpu: Dumping IP State Completed
amdgpu 0000:c3:00.0: amdgpu: [drm] AMDGPU device coredump file has been created
amdgpu 0000:c3:00.0: amdgpu: [drm] Check your /sys/class/drm/card1/device/devcoredump/data
amdgpu 0000:c3:00.0: amdgpu: ring vcn_unified_0 timeout, signaled seq=384, emitted seq=385
amdgpu 0000:c3:00.0: amdgpu: Process chrome pid 2651 thread chrome:cs0 pid 2709
amdgpu 0000:c3:00.0: amdgpu: Starting vcn_unified_0 ring reset
amdgpu 0000:c3:00.0: amdgpu: Register(0) [regUVD_POWER_STATUS] failed to reach value 0x00000001 != 0x00000002n
amdgpu 0000:c3:00.0: amdgpu: Register(0) [regUVD_RB_RPTR] failed to reach value 0x00000200 != 0x000001c0n
amdgpu 0000:c3:00.0: amdgpu: Register(0) [regUVD_POWER_STATUS] failed to reach value 0x00000001 != 0x00000002n
amdgpu 0000:c3:00.0: amdgpu: MES failed to respond to msg=MISC (WAIT_REG_MEM)
amdgpu 0000:c3:00.0: amdgpu: failed to reg_write_reg_wait
amdgpu 0000:c3:00.0: amdgpu: MES failed to respond to msg=MISC (WAIT_REG_MEM)
amdgpu 0000:c3:00.0: amdgpu: failed to reg_write_reg_wait
amdgpu 0000:c3:00.0: amdgpu: SMU: I’m not done with your previous command: SMN_C2PMSG_66:0x00000032 SMN_C2PMSG_82:0x00000000
amdgpu 0000:c3:00.0: amdgpu: Failed to power gate VCN instance 0!
[drm:vcn_v4_0_5_stop [amdgpu]] *ERROR* Dpm disable uvd failed, ret = -62.
amdgpu 0000:c3:00.0: amdgpu: Ring vcn_unified_0 reset succeeded
amdgpu 0000:c3:00.0: [drm] device wedged, but recovered through reset
amdgpu 0000:c3:00.0: amdgpu: Dumping IP State
amdgpu 0000:c3:00.0: amdgpu: SMU: I’m not done with your previous command: SMN_C2PMSG_66:0x00000032 SMN_C2PMSG_82:0x00000000
amdgpu 0000:c3:00.0: amdgpu: Failed to disable gfxoff!
amdgpu 0000:c3:00.0: amdgpu: SMU: I’m not done with your previous command: SMN_C2PMSG_66:0x00000032 SMN_C2PMSG_82:0x00000000
amdgpu 0000:c3:00.0: amdgpu: Failed to disable gfxoff!
amdgpu 0000:c3:00.0: amdgpu: SMU: I’m not done with your previous command: SMN_C2PMSG_66:0x00000032 SMN_C2PMSG_82:0x00000000
amdgpu 0000:c3:00.0: amdgpu: Failed to power gate VCN instance 0!
[drm:vcn_v4_0_5_stop [amdgpu]] *ERROR* Dpm disable uvd failed, ret = -62.
amdgpu 0000:c3:00.0: amdgpu: SMU: I’m not done with your previous command: SMN_C2PMSG_66:0x00000032 SMN_C2PMSG_82:0x00000000
amdgpu 0000:c3:00.0: amdgpu: Failed to disable gfxoff!
amdgpu 0000:c3:00.0: amdgpu: SMU: I’m not done with your previous command: SMN_C2PMSG_66:0x00000032 SMN_C2PMSG_82:0x00000000
amdgpu 0000:c3:00.0: amdgpu: Failed to disable gfxoff!
amdgpu 0000:c3:00.0: amdgpu: Dumping IP State Completed
amdgpu 0000:c3:00.0: amdgpu: [drm] AMDGPU device coredump file has been created
amdgpu 0000:c3:00.0: amdgpu: [drm] Check your /sys/class/drm/card1/device/devcoredump/data
amdgpu 0000:c3:00.0: amdgpu: ring vpe timeout, signaled seq=2183, emitted seq=2186
amdgpu 0000:c3:00.0: amdgpu: GPU reset begin!. Source: 1
amdgpu 0000:c3:00.0: amdgpu: SMU: I’m not done with your previous command: SMN_C2PMSG_66:0x00000032 SMN_C2PMSG_82:0x00000000
amdgpu 0000:c3:00.0: amdgpu: Failed to disable gfxoff!
amdgpu 0000:c3:00.0: amdgpu: SMU: I’m not done with your previous command: SMN_C2PMSG_66:0x00000032 SMN_C2PMSG_82:0x00000000
amdgpu 0000:c3:00.0: amdgpu: Failed to power gate VPE!
[drm:vpe_set_powergating_state [amdgpu]] *ERROR* Dpm disable vpe failed, ret = -62.