{ config, lib, pkgs, ... }: let inherit (lib) mkDefault mkEnableOption mkIf mkMerge; cfg = config.hardware.asus.zephyrus.ga402x; in { imports = [ ../shared.nix ]; options.hardware.asus.zephyrus.ga402x.amdgpu = { recovery.enable = (mkEnableOption "Enable amdgpu.gpu_recovery kernel boot param") // { default = false; }; sg_display.enable = (mkEnableOption "Enable amdgpu.gpu_recovery kernel boot param") // { default = true; }; psr.enable = (mkEnableOption "Enable amdgpu.dcdebugmask=0x10 kernel boot param") // { default = true; }; }; config = mkMerge [ { # AMD RX680 services.xserver.videoDrivers = mkDefault [ "amdgpu" ]; hardware = { amdgpu.loadInInitrd = true; opengl.extraPackages = with pkgs; [ vaapiVdpau libvdpau-va-gl ]; }; } (mkIf cfg.amdgpu.recovery.enable { # Hopefully fixes for where the kernel sometimes hangs when suspending or hibernating # (Though, I'm very suspicious of the Mediatek Wifi...) boot.kernelParams = [ "amdgpu.gpu_recovery=1" ]; }) (mkIf (!cfg.amdgpu.sg_display.enable) { # Can help solve flickering/glitching display issues since Scatter/Gather code was reenabled boot.kernelParams = [ "amdgpu.sg_display=0" ]; }) (mkIf (!cfg.amdgpu.psr.enable) { # Can help solve flickering/glitching display issues since Scatter/Gather code was reenabled boot.kernelParams = [ "amdgpu.dcdebugmask=0x10" ]; }) ]; }