From eb95abfc230dc239122f1e89e90cd9a998491a2f Mon Sep 17 00:00:00 2001 From: adikro Date: Tue, 3 Feb 2026 22:58:50 +0100 Subject: ... --- os/core/audio.nix | 39 ++++++++++++++++------ os/core/bootloader.nix | 91 ++++++++++++++++++++++++++++++++++++-------------- os/core/drivers.nix | 81 +++++++++++++++++++++++++++----------------- os/core/power.nix | 56 +++++++++++++++++++++++-------- os/srv/kdeconnect.nix | 8 ++--- 5 files changed, 191 insertions(+), 84 deletions(-) (limited to 'os') 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; -- cgit v1.3