{ config, lib, pkgs, inputs, ... }: let cfg = config.os.core.drivers; in { options.os.core.drivers = { enable = lib.mkEnableOption "enables hardware drivers"; amdgpu.enable = lib.mkEnableOption "AMD specific drivers and microcode"; stability = lib.mkOption { type = lib.types.enum [ "stable" "unstable" ]; default = "stable"; }; }; config = lib.mkIf cfg.enable ( lib.mkMerge [ { programs.coolercontrol.enable = true; services.lact.enable = true; services.smartd.enable = true; hardware.sensor.iio.enable = true; hardware.enableAllFirmware = true; hardware.cpu.amd.updateMicrocode = true; hardware.graphics = { enable = true; enable32Bit = true; extraPackages = with pkgs; [ rocmPackages.clr.icd ]; }; environment.systemPackages = [ pkgs.rivalcfg ]; } (lib.mkIf cfg.amdgpu.enable { hardware.amdgpu = { initrd.enable = true; overdrive.enable = true; }; }) (lib.mkIf (cfg.amdgpu.enable && cfg.stability == "unstable") { boot.kernelPackages = inputs.kernelv.legacyPackages.x86_64-linux.linuxPackages_6_17; }) (lib.mkIf (cfg.amdgpu.enable && cfg.stability == "stable") { boot.kernelPackages = pkgs.linuxPackages_latest; }) ] ); }