diff --git a/hosts/cnix/modules.nix b/hosts/cnix/modules.nix index 4dca678e..d44f930f 100644 --- a/hosts/cnix/modules.nix +++ b/hosts/cnix/modules.nix @@ -51,6 +51,11 @@ graphics = { amd = { enable = true; + extraPackages = false; + chaotic = { + enable = true; + extraPackages = true; + }; }; nvidia = { enable = false; @@ -182,12 +187,6 @@ anyrun = { enable = false; }; - chaotic = { - enable = true; - amd = { - enable = true; - }; - }; corectrl = { enable = true; }; diff --git a/hosts/cnixpad/modules.nix b/hosts/cnixpad/modules.nix index c232fec0..aa80c60c 100644 --- a/hosts/cnixpad/modules.nix +++ b/hosts/cnixpad/modules.nix @@ -34,6 +34,11 @@ graphics = { amd = { enable = true; + extraPackages = true; + chaotic = { + enable = false; + extraPackages = false; + }; }; nvidia = { enable = false; @@ -160,12 +165,6 @@ brightnessctl = { enable = true; }; - chaotic = { - enable = false; - amd = { - enable = false; - }; - }; corectrl = { enable = false; }; diff --git a/hosts/toothpc/modules.nix b/hosts/toothpc/modules.nix index 5f23b7b4..eb8916cd 100644 --- a/hosts/toothpc/modules.nix +++ b/hosts/toothpc/modules.nix @@ -182,12 +182,6 @@ corectrl = { enable = false; }; - chaotic = { - enable = false; - amd = { - enable = false; - }; - }; microfetch = { enable = true; }; diff --git a/modules/default.nix b/modules/default.nix index 5e6a931e..f47d8342 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -107,7 +107,6 @@ ./nixos/utils/android ./nixos/utils/anyrun ./nixos/utils/brightnessctl - ./nixos/utils/chaotic ./nixos/utils/corectrl ./nixos/utils/microfetch ./nixos/utils/misc diff --git a/modules/nixos/boot/kernel/default.nix b/modules/nixos/boot/kernel/default.nix index e49a4186..1a88f1e2 100644 --- a/modules/nixos/boot/kernel/default.nix +++ b/modules/nixos/boot/kernel/default.nix @@ -4,7 +4,7 @@ config, ... }: let - inherit (lib) mkOption; + inherit (lib) mkOption mkIf; cfg = config.nixos.boot.kernel; in { options = { @@ -70,5 +70,9 @@ in { ) ++ cfg.extraBlacklistedModules; }; + + chaotic = mkIf (cfg.variant == "cachyos") { + scx.enable = true; + }; }; } diff --git a/modules/nixos/hardware/graphics/amd/default.nix b/modules/nixos/hardware/graphics/amd/default.nix index 1606a41a..617c9003 100644 --- a/modules/nixos/hardware/graphics/amd/default.nix +++ b/modules/nixos/hardware/graphics/amd/default.nix @@ -1,32 +1,103 @@ { - # pkgs, + pkgs, config, lib, ... }: let - inherit (lib) mkIf mkEnableOption; + inherit (lib) mkIf mkEnableOption mkOption mkMerge optional; cfg = config.nixos.hardware.graphics.amd; in { options = { - nixos.hardware.graphics.amd.enable = mkEnableOption "Enables AMD graphics"; - }; - config = mkIf cfg.enable { - hardware = { - graphics = { - enable = true; - enable32Bit = true; - # extraPackages = with pkgs; [ - # libva - # vaapiVdpau - # libvdpau-va-gl - # amdvlk - # vulkan-tools - # ]; - # extraPackages32 = with pkgs.pkgsi686Linux; [ - # vaapiVdpau - # libvdpau-va-gl - # ]; + nixos.hardware.graphics.amd = { + enable = mkEnableOption "Enables AMD graphics"; + + extraPackages = mkOption { + type = lib.types.bool; + default = false; + description = "Whether to install AMD-specific extra packages."; + }; + + chaotic = { + enable = mkEnableOption "Enables chaotic mesa version"; + extraPackages = mkOption { + type = lib.types.bool; + default = false; + description = "Whether to install AMD-specific chaotic extra packages."; + }; }; }; }; + + config = mkIf cfg.enable (mkMerge [ + { + assertions = [ + { + assertion = !(cfg.extraPackages && cfg.chaotic.extraPackages); + message = '' + Only one type of extraPackages can be set to true at the same time. + ''; + } + ]; + + hardware.graphics = { + enable = true; + enable32Bit = true; + + extraPackages = optional cfg.extraPackages (with pkgs; [ + libva + vaapiVdpau + libvdpau-va-gl + amdvlk + vulkan-tools + ]); + + extraPackages32 = optional cfg.extraPackages (with pkgs.pkgsi686Linux; [ + vaapiVdpau + libvdpau-va-gl + ]); + }; + } + (mkIf cfg.chaotic.enable (mkMerge [ + { + chaotic.scx.enable = true; + } + (mkIf cfg.chaotic.extraPackages { + chaotic = { + scx.scheduler = "scx_lavd"; + mesa-git = { + enable = true; + extraPackages = with pkgs; [ + libva + libvdpau-va-gl + vaapiVdpau + libdrm_git + latencyflex-vulkan + mesa_git + mesa_git.opencl + vulkanPackages_latest.gfxreconstruct + vulkanPackages_latest.spirv-cross + vulkanPackages_latest.spirv-headers + vulkanPackages_latest.spirv-tools + vulkanPackages_latest.vulkan-extension-layer + vulkanPackages_latest.vulkan-headers + vulkanPackages_latest.vulkan-loader + vulkanPackages_latest.vulkan-tools + vulkanPackages_latest.vulkan-tools-lunarg + vulkanPackages_latest.vulkan-utility-libraries + vulkanPackages_latest.vulkan-validation-layers + vulkanPackages_latest.vulkan-volk + ]; + extraPackages32 = with pkgs.pkgsi686Linux; [ + pkgs.mesa32_git + pkgs.mesa32_git.opencl + libdrm32_git + libva + libvdpau-va-gl + vaapiVdpau + ]; + }; + }; + }) + ])) + ]); }