{ config, lib, pkgs, inputs, ... }: let cfg = config.os.core.drivers; in { imports = [ inputs.nix-gaming-edge.nixosModules.default ]; options.os.core.drivers = { enable = lib.mkEnableOption "enables hardware drivers"; cpu = lib.mkOption { type = lib.types.enum [ "intel" "amd" "none" ]; default = "none"; description = "cpu manufacturer for microcode and platform-specific drivers"; }; graphics = { enable = lib.mkEnableOption "graphics support"; version = lib.mkOption { type = lib.types.enum [ "stable" "git" ]; default = "stable"; description = "Which Mesa version to use. 'git' uses the mesa-git overlay."; }; amdgpu.enable = lib.mkEnableOption "amd specific gpu features"; }; kernel = lib.mkOption { type = lib.types.enum [ "stable" "zen" "zfs" "hardened" ]; default = "stable"; }; }; config = lib.mkIf cfg.enable ( lib.mkMerge [ { hardware.enableAllFirmware = true; services = { smartd.enable = true; fwupd.enable = true; }; environment.systemPackages = [ pkgs.rivalcfg ]; } (lib.mkIf (cfg.cpu == "amd") { hardware.cpu.amd.updateMicrocode = true; programs.coolercontrol.enable = true; }) (lib.mkIf (cfg.cpu == "intel") { hardware.cpu.intel.updateMicrocode = true; services.thermald.enable = true; }) (lib.mkIf cfg.graphics.enable { hardware.graphics = { enable = true; enable32Bit = true; }; hardware.sensor.iio.enable = true; }) (lib.mkIf (cfg.graphics.enable && cfg.graphics.amdgpu.enable) { services = { lact.enable = true; hardware.openrgb.enable = true; }; hardware = { amdgpu = { initrd.enable = true; overdrive.enable = true; }; graphics.extraPackages = with pkgs; [ rocmPackages.clr.icd libva-utils ]; }; }) (lib.mkIf (cfg.graphics.enable && cfg.graphics.version == "git") { nixpkgs.overlays = [ inputs.nix-gaming-edge.overlays.mesa-git ]; drivers.mesa-git = { enable = true; # cacheCleanup.enable = true; # steamOrphanCleanup.enable = true; }; }) { boot.kernelPackages = let kernels = { "stable" = pkgs.linuxPackages_latest; "zen" = pkgs.linuxPackages_zen; "hardened" = pkgs.linuxPackages_hardened; "zfs" = config.boot.zfs.package.latestCompatibleLinuxPackages; }; in kernels.${cfg.kernel} or kernels."stable"; } ] ); }