{ config, lib, pkgs, inputs, ... }: let cfg = config.os.core.drivers; in { 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"; amdgpu.enable = lib.mkEnableOption "amd specific gpu features"; }; kernel = lib.mkOption { type = lib.types.enum [ "stable" "unstable" "zen" "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.amdgpu = { initrd.enable = true; overdrive.enable = true; }; hardware.graphics.extraPackages = with pkgs; [ rocmPackages.clr.icd ]; }) { boot.kernelPackages = let kernels = { "stable" = pkgs.linuxPackages_latest; "zen" = pkgs.linuxPackages_zen; "hardened" = pkgs.linuxPackages_hardened; "unstable" = inputs.kernelv.legacyPackages.x86_64-linux.linuxPackages_6_17; }; in kernels.${cfg.kernel} or kernels."stable"; } ] ); }