summaryrefslogtreecommitdiff
path: root/os/core/drivers.nix
diff options
context:
space:
mode:
Diffstat (limited to 'os/core/drivers.nix')
-rw-r--r--os/core/drivers.nix81
1 files changed, 50 insertions, 31 deletions
diff --git a/os/core/drivers.nix b/os/core/drivers.nix
index a6905d5..da9d83a 100644
--- a/os/core/drivers.nix
+++ b/os/core/drivers.nix
@@ -4,14 +4,23 @@
pkgs,
inputs,
...
-}:
-let
+}: let
cfg = config.os.core.drivers;
-in
-{
+in {
options.os.core.drivers = {
enable = lib.mkEnableOption "enables hardware drivers";
- amdgpu.enable = lib.mkEnableOption "AMD specific drivers and microcode";
+
+ 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"
@@ -22,47 +31,57 @@ in
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;
+ 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;
- extraPackages = with pkgs; [
- rocmPackages.clr.icd
- ];
};
- environment.systemPackages = [ pkgs.rivalcfg ];
- }
+ hardware.sensor.iio.enable = true;
+ })
- (lib.mkIf cfg.amdgpu.enable {
+ (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
+ ];
})
-
- (lib.mkIf (cfg.kernel == "unstable") {
- boot.kernelPackages = inputs.kernelv.legacyPackages.x86_64-linux.linuxPackages_6_17;
- })
-
- (lib.mkIf (cfg.kernel == "stable") {
- boot.kernelPackages = pkgs.linuxPackages_latest;
- })
-
- (lib.mkIf (cfg.kernel == "zen") {
- boot.kernelPackages = pkgs.linuxPackages_zen;
- })
-
- (lib.mkIf (cfg.kernel == "hardened") {
- boot.kernelPackages = pkgs.linuxPackages_hardened;
- })
+ {
+ 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";
+ }
]
);
}