summaryrefslogtreecommitdiff
path: root/os
diff options
context:
space:
mode:
Diffstat (limited to 'os')
-rw-r--r--os/core/audio.nix39
-rw-r--r--os/core/bootloader.nix91
-rw-r--r--os/core/drivers.nix81
-rw-r--r--os/core/power.nix56
-rw-r--r--os/srv/kdeconnect.nix8
5 files changed, 191 insertions, 84 deletions
diff --git a/os/core/audio.nix b/os/core/audio.nix
index 0290b6c..2454a89 100644
--- a/os/core/audio.nix
+++ b/os/core/audio.nix
@@ -1,8 +1,11 @@
-{ config, lib, pkgs, ... }:
-let
- cfg = config.os.core.audio;
-in
{
+ config,
+ lib,
+ pkgs,
+ ...
+}: let
+ cfg = config.os.core.audio;
+in {
options.os.core.audio = {
enable = lib.mkEnableOption "audio support";
disable-devices.enable = lib.mkEnableOption "disables some random devices cluttering up";
@@ -31,13 +34,29 @@ in
];
})
(lib.mkIf cfg.disable-devices.enable {
- services.pipewire.wireplumber.extraConfig."99-disable-useless-devices"."monitor.alsa.rules" = [{
- matches = [
- { "device.name" = "~alsa_card.pci-0000_03_00.1*"; }
- { "device.description" = "~USB Audio*"; }
+ services.pipewire.wireplumber.extraConfig = {
+ "10-keep-hyperx-alive"."monitor.alsa.rules" = [
+ {
+ matches = [
+ {"device.description" = "~HyperX*";}
+ ];
+ actions.update-props = {
+ "device.disabled" = false;
+ "session.suspend-on-idle" = false;
+ };
+ }
];
- actions.update-props = { "device.disabled" = true; };
- }];
+
+ "99-disable-useless-devices"."monitor.alsa.rules" = [
+ {
+ matches = [
+ {"device.name" = "~alsa_card.pci-0000_03_00.1*";}
+ {"device.description" = "~USB Audio*";}
+ ];
+ actions.update-props = {"device.disabled" = true;};
+ }
+ ];
+ };
})
];
}
diff --git a/os/core/bootloader.nix b/os/core/bootloader.nix
index 8ba9406..f0aacc0 100644
--- a/os/core/bootloader.nix
+++ b/os/core/bootloader.nix
@@ -1,43 +1,84 @@
-{ config, lib, ... }:
-let
- cfg = config.os.core.bootloader;
-in
{
- options.os.core.bootloader = lib.mkOption {
- type = lib.types.enum [ "systemd-boot" "grub" "none" ];
- default = "systemd-boot";
- description = "which bootloader to use";
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.os.core.bootloader;
+in {
+ options.os.core.bootloader = {
+ type = lib.mkOption {
+ type = lib.types.enum ["systemd-boot" "grub" "none"];
+ default = "systemd-boot";
+ description = "which bootloader to use";
+ };
+ useOSProber = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = "scan for other operating systems";
+ };
+ enableEncryption = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = "Enables LUKS encryption";
+ };
+ grubDevice = lib.mkOption {
+ type = lib.types.str;
+ default = "nodev";
+ };
+ luksDevice = lib.mkOption {
+ type = lib.types.nullOr lib.types.str;
+ default = null;
+ description = "The underlying partition for LUKS";
+ };
};
+
config = lib.mkMerge [
{
- boot.loader.efi.canTouchEfiVariables = true;
- boot.supportedFilesystems = [ "ntfs" ];
- boot.kernelParams = [ "quiet" "splash" ];
- systemd.settings.Manager = {
- DefaultTimeoutStopSec = "5s";
+ boot = {
+ supportedFilesystems = ["ntfs" "btrfs"];
+ kernelParams = ["quiet" "splash"];
+ initrd.luks.devices = lib.mkIf (cfg.enableEncryption && cfg.luksDevice != null) {
+ "crypted" = {
+ device = cfg.luksDevice;
+ preLVM = true;
+ allowDiscards = true;
+ };
+ };
};
+ systemd.settings.Manager.DefaultTimeoutStopSec = "5s";
}
- (lib.mkIf (cfg == "systemd-boot") {
- boot.consoleLogLevel = 0;
- boot.loader = {
- systemd-boot.enable = true;
- systemd-boot.editor = false;
- timeout = 0;
+ (lib.mkIf (cfg.type == "systemd-boot") {
+ boot = {
+ consoleLogLevel = 0;
+ loader = {
+ efi.canTouchEfiVariables = true;
+ timeout = 0;
+ systemd-boot = {
+ enable = true;
+ editor = false;
+ };
+ };
};
})
- (lib.mkIf (cfg == "grub") {
+ (lib.mkIf (cfg.type == "grub") {
boot.loader = {
timeout = 3;
- efi.efiSysMountPoint = "/boot";
+ efi.canTouchEfiVariables = cfg.grubDevice == "nodev";
grub = {
enable = true;
- device = "nodev";
- efiSupport = true;
- useOSProber = true;
+ device = cfg.grubDevice;
+ useOSProber = cfg.useOSProber;
+ enableCryptodisk = cfg.enableEncryption;
+
+ default =
+ if cfg.useOSProber
+ then 2
+ else 0;
- default = 2;
+ efiSupport = lib.mkDefault (cfg.grubDevice == "nodev");
+ copyKernels = lib.mkIf cfg.enableEncryption true;
};
};
})
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";
+ }
]
);
}
diff --git a/os/core/power.nix b/os/core/power.nix
index 3a8bed2..3929033 100644
--- a/os/core/power.nix
+++ b/os/core/power.nix
@@ -1,18 +1,46 @@
-{ config, lib, ... }:
-let
- cfg = config.os.core.power;
-in
{
- options.os.core.power.enable = lib.mkEnableOption "enables AMD-optimized power management";
- config = lib.mkIf cfg.enable {
- services.power-profiles-daemon.enable = true;
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.os.core.power;
+in {
+ options.os.core.power = {
+ enable = lib.mkEnableOption "enables power management";
+ mode = lib.mkOption {
+ type = lib.types.enum ["amd" "intel" "none"];
+ default = "none";
+ };
+ };
- boot.kernelParams = [
- "amd_pstate=active"
- "nvme_core.default_ps_max_latency_us=0"
- ];
+ config = lib.mkIf cfg.enable (lib.mkMerge [
+ {
+ powerManagement.powertop.enable = true;
+ boot.kernelParams = ["nvme_core.default_ps_max_latency_us=0"];
+ }
- powerManagement.powertop.enable = true;
- services.thermald.enable = true;
- };
+ (lib.mkIf (cfg.mode == "amd") {
+ services.power-profiles-daemon.enable = true;
+ boot.kernelParams = ["amd_pstate=active"];
+ })
+
+ (lib.mkIf (cfg.mode == "intel") {
+ services = {
+ power-profiles-daemon.enable = false;
+
+ thermald.enable = true;
+ tlp = {
+ enable = true;
+ settings = {
+ START_CHARGE_THRESH_BAT0 = 75;
+ STOP_CHARGE_THRESH_BAT0 = 80;
+ START_CHARGE_THRESH_BAT1 = 75;
+ STOP_CHARGE_THRESH_BAT1 = 80;
+ CPU_SCALING_GOVERNOR_ON_AC = "performance";
+ CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
+ };
+ };
+ };
+ })
+ ]);
}
diff --git a/os/srv/kdeconnect.nix b/os/srv/kdeconnect.nix
index 6bf125c..049a1c6 100644
--- a/os/srv/kdeconnect.nix
+++ b/os/srv/kdeconnect.nix
@@ -2,14 +2,14 @@
config,
lib,
username,
+ pkgs,
...
-}:
-let
+}: let
cfg = config.os.srv.kdeconnect;
-in
-{
+in {
options.os.srv.kdeconnect.enable = lib.mkEnableOption "enables kde connect";
config = lib.mkIf cfg.enable {
+ environment.systemPackages = [pkgs.kdePackages.dolphin];
programs.kdeconnect.enable = true;
home-manager.users.${username}.services.kdeconnect = {
enable = true;