{ config, lib, pkgs, ... }: { options.szpont.drivers = { enable = lib.mkEnableOption "enables hardware drivers"; amd.enable = lib.mkEnableOption "AMD specific drivers and microcode"; stability = lib.mkOption { type = lib.types.enum [ "stable" "unstable" ]; default = "stable"; }; }; config = lib.mkMerge [ { services.smartd.enable = true; hardware = { sensor.iio.enable = true; enableRedistributableFirmware = true; graphics = { enable = true; enable32Bit = true; }; }; } (lib.mkIf config.szpont.drivers.amd.enable (lib.mkMerge [ { services.xserver.videoDrivers = [ "amdgpu" ]; hardware = { cpu.amd.updateMicrocode = true; amdgpu = { initrd.enable = true; overdrive.enable = true; }; }; } (lib.mkIf (config.szpont.drivers.stability == "unstable") { services.lact.enable = true; boot.kernelPackages = pkgs.linuxPackages_cachyos-lto-znver4; chaotic.mesa-git = { enable = true; fallbackSpecialisation = false; extraPackages = [ pkgs.mesa_git.opencl ]; }; }) (lib.mkIf (config.szpont.drivers.stability == "stable") { boot.kernelPackages = lib.mkDefault pkgs.linuxPackages_latest; }) ])) ]; }