{ config, pkgs, lib, ... }:
let
  extraPackages = with pkgs; [
    mesa.drivers
    intel-media-driver
    # not added due to collision
    # https://github.com/NixOS/nixos-hardware/issues/1170
    #(if (lib.versionOlder (lib.versions.majorMinor lib.version) "23.11")
    #  then vaapiIntel
    #  else intel-vaapi-driver)
    vaapiVdpau
    libvdpau-va-gl
    intel-ocl
    intel-compute-runtime # OpenCL filter support (hardware tonemapping and subtitle burn-in)
    (pkgs.nvtopPackages.intel or pkgs.nvtop-intel)
  ];
in
lib.mkMerge [

{
  # enable opengl (headless)

  # https://github.com/NixOS/nixpkgs/blob/nixos-22.11/pkgs/development/libraries/ffmpeg/generic.nix
  # https://github.com/NixOS/nixpkgs/blob/nixos-22.11/pkgs/development/libraries/jellyfin-ffmpeg/default.nix
  # https://nixos.wiki/wiki/Accelerated_Video_Playback

  nixpkgs.config.openglSupport = true; # why is this not set by hardware.opengl.enable ?
  nixpkgs.config.vaapiSupport  = true;
  nixpkgs.config.libaomSupport = true;
  nixpkgs.config.vdpauSupport  = true; # intel
  nixpkgs.config.libmfxSupport = true; # intel

  nixpkgs.config.packageOverrides = pkgs: {
    vaapiIntel         = pkgs.vaapiIntel.override         { enableHybridCodec = true; };
    intel-vaapi-driver = pkgs.intel-vaapi-driver.override { enableHybridCodec = true; };
  };

}
(lib.optionalAttrs (lib.versionOlder (lib.versions.majorMinor lib.version) "24.11") {
  hardware.opengl.driSupport = true;
  hardware.opengl.enable = true;
  hardware.opengl.extraPackages = extraPackages;
})
(lib.optionalAttrs (lib.versionAtLeast (lib.versions.majorMinor lib.version) "24.11") {
  hardware.graphics.enable = true;
  hardware.graphics.extraPackages = extraPackages;
})

]