[solved] Graphics drivers for Intel Arc GPUs

Introduction: I use Intel Arc GPU (specifically a750) paired with i5 13400F, how can I enable hardware accelaration and install other necessary drivers in it? I am a bit confused as I am a newbie to Linux and NixOS.

What I have learned and implemented (only those which are comments) after reading a few wiki pages, inside /etc/configuration.nix

{
...
  services.xserver = {
    enable = true;
    xkb.layout = "us";
    #videoDrivers = [ "intel" ];
  };
  #hardware.graphics = {
  #  enable = true;
  #  extraPackages = with pkgs; [
  #    vpl-gpu-rt
  #    libvdpau-va-gl
  #    intel-media-driver
  #    intel-vaapi-driver
  #    intel-compute-runtime
  #  ];
  #  extraPackages32 = with pkgs.pkgsi686Linux; [ intel-vaapi-driver ];
  #};
  #environment.sessionVariables = { LIBVA_DRIVER_NAME = "iHD"; NIXOS_OZONE_WL = "1"; };
...
}

But, when I do sudo nixos-rebuild switch I encounter no errors but when I reboot it only shows the tty. And, after loggin in through tty I cannot even start sddm sudo systemctl start sddm. It says sddm.service not found. So, after that I just commented every change I made and it fixed.

so for the configuration of the Gpu you just need to put following in the configuration:

  hardware.opengl = {
    enable = true;
    extraPackages = with pkgs; [
      ... # your Open GL, Vulkan and VAAPI drivers
      vpl-gpu-rt          # for newer GPUs on NixOS >24.05 or unstable
      # onevpl-intel-gpu  # for newer GPUs on NixOS <= 24.05
      # intel-media-sdk   # for older GPUs
    ];
  };

For the sddm problem i don’t really understand if it works now.
but could you post your config?

the problem was with
services.xserver.videoDrivers = [ "intel" ];
after commenting out this line and intel-vaapi-driver everything worked fine!
thanks for your response!
this is my configuration

{ config, pkgs, ... }:

{
  imports =
    [
      ./hardware-configuration.nix
    ];

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

  # hostname
  networking.hostName = "dhaka";

  # networking
  networking.networkmanager.enable = true;

  # time zone
  time.timeZone = "Asia/Dhaka";

  # locale
  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";
  };

  # x11 windowing system/ xorg session
  services.xserver = {
    enable = true;
    xkb.layout = "us";
  };

  # hardware graphics extra packages
  hardware.graphics = {
    enable = true;
    extraPackages = with pkgs; [
      vpl-gpu-rt
      libvdpau-va-gl
      intel-media-driver
      intel-compute-runtime
    ];
    extraPackages32 = with pkgs.pkgsi686Linux; [ intel-vaapi-driver ];
  };

  # environment variables
  environment.sessionVariables = { LIBVA_DRIVER_NAME = "iHD"; NIXOS_OZONE_WL = "1"; };

  # display manager
  services.displayManager.sddm.enable = true;

  # desktop environment
  services.desktopManager.plasma6.enable = true;

  # sound with pipewire
  hardware.pulseaudio.enable = false;
  security.rtkit.enable = true;
  services.pipewire = {
    enable = true;
    alsa.enable = true;
    alsa.support32Bit = true;
    pulse.enable = true;
  };

  # user account
  users.users.me = {
    isNormalUser = true;
    description = "home";
    extraGroups = [ "networkmanager" "wheel" ];
  };

  # default shell configuration
  users.defaultUserShell = pkgs.zsh;
  programs = {
    zsh = {
      enable = true;
      autosuggestions.enable = true;
      zsh-autoenv.enable = true;
      syntaxHighlighting.enable = true;
      ohMyZsh = {
        enable = true;
        theme = "robbyrussell";
        plugins = [
          "git"
          "history"
        ];
      };
    };
  };

  # users group
  users.groups.libvirtd.members = [ "me" ];

  # unfree packages
  nixpkgs.config.allowUnfree = true;

  # install programs via options
  programs.kdeconnect.enable = true;
  programs.virt-manager.enable = true;

  # fonts
  fonts.packages = with pkgs; [
    roboto
    unifont
    fira-code
    hack-font
    noto-fonts
    font-awesome
    dejavu_fonts
    liberation_ttf
    lohit-fonts.bengali
    noto-fonts-cjk-sans
    noto-fonts-cjk-serif
    noto-fonts-color-emoji
  ];

  # open banla keyboard on wayland with fcitx 5
  i18n.inputMethod = {
    type = "fcitx5";
    enable = true;
    fcitx5.waylandFrontend = true;
    fcitx5.addons = with pkgs; [
      fcitx5-openbangla-keyboard
    ];
  };

  # environment system packages
  environment.systemPackages = with pkgs; [
    vim
    git
    qemu
    wget
    kitty
    unzip
    clinfo
    haruna
    yt-dlp
    firefox
    vscodium
    keepassxc
    obs-studio
    teamviewer
    nixpkgs-fmt
    qbittorrent
    ffmpeg-full
    protonvpn-gui
    joplin-desktop
    github-desktop
    kdePackages.kate
    nixfmt-rfc-style
    kdePackages.kdenlive
    (ungoogled-chromium.override {
      enableWideVine = true;
      commandLineArgs = [
        "--enable-features=AcceleratedVideoEncoder,VaapiOnNvidiaGPUs,VaapiIgnoreDriverChecks,Vulkan,DefaultANGLEVulkan,VulkanFromANGLE"
        "--enable-features=VaapiIgnoreDriverChecks,VaapiVideoDecoder,PlatformHEVCDecoderSupport"
        "--enable-features=UseMultiPlaneFormatForHardwareVideo"
        "--ignore-gpu-blocklist"
        "--enable-zero-copy"
      ];
    })
  ];

  # nix flakes
  # nix.settings.experimental-features = [ "nix-command" "flakes" ];

  # list services that you want to enable:

  # teamviewer
  services.teamviewer.enable = true;

  # virtualization
  virtualisation = {
    libvirtd.enable = true;
    spiceUSBRedirection.enable = true;
  };

  # flatpak and xdg portal
  services.flatpak.enable = true;
  xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
  xdg.portal.config.common.default = "gtk";

  # system state version
  system.stateVersion = "24.11";

}
1 Like

Actually, by default mesa is set up in NixOS. So, you can use your system out of the box. As per the wiki, if you want to add something to hardware.graphics.extraPackages it will be only vpl-gpu-rt and if you want to put more efforts in it. Check out the wiki accelerated video playback. But, it is not something necessary or maybe it is already done or pre configured. I’m not really sure, because without configuring anything, it still works fine.

hardware.graphics = {
    enable = true;
    extraPackages = with pkgs; [
      vpl-gpu-rt
    ];