diff options
Diffstat (limited to 'modules/drivers.nix')
| -rw-r--r-- | modules/drivers.nix | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/modules/drivers.nix b/modules/drivers.nix new file mode 100644 index 0000000..6e74e98 --- /dev/null +++ b/modules/drivers.nix @@ -0,0 +1,99 @@ +{ + config, + lib, + pkgs, + ... +}: +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" + "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 + ]; + }; + }) + { + 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"; + } + ] + ); +} |
