{ config, pkgs, lib, ... }: { imports = [ ./hardware-configuration.nix # Generated by the installer ./system-utils.nix # CLI Tools ./user-apps.nix # GUI Apps ]; # ========================================== # 1. BOOT & KERNEL STRATEGY # ========================================== boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; # --- KERNEL PARAMETERS (LLM/AI) --- # Force AMD GTT to 32GB. # Combined with 16GB BIOS VRAM, this gives ~48GB total addressable to iGPU. boot.kernelParams = [ "amdgpu.gttsize=32768" ]; # Load AMDGPU drivers early to prevent blank boot screens on Strix Point boot.initrd.kernelModules = [ "amdgpu" ]; # --- DEFAULT MODE (Balanced/Daily Use) --- # boot.kernelPackages = pkgs.linuxPackages_latest; # Use default stable kernel for better Nvidia support # --- SPECIALISATIONS (Selectable at Boot) --- specialisation = { # Option 1: Gaming Mode (Zen Kernel + Max Performance) gaming-zen.configuration = { system.nixos.tags = [ "Gaming-Zen" ]; boot.kernelPackages = lib.mkForce pkgs.linuxPackages_zen; hardware.nvidia.powerManagement.finegrained = lib.mkForce false; }; # Option 2: Eco/Battery Mode (TLP + No Turbo) battery-saver.configuration = { system.nixos.tags = [ "Eco-Battery" ]; services.power-profiles-daemon.enable = lib.mkForce false; services.tlp = { enable = lib.mkForce true; settings = { CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; CPU_ENERGY_PERF_POLICY_ON_BAT = "power"; CPU_BOOST_ON_BAT = 0; PLATFORM_PROFILE_ON_BAT = "low-power"; }; }; }; # Option 3: Expansion Shell (Physically Removed GPU) no-dgpu.configuration = { system.nixos.tags = [ "No-dGPU" ]; # 1. Force Video Driver to standard modesetting (ignores Nvidia) services.xserver.videoDrivers = lib.mkForce [ "modesetting" ]; # 2. Blacklist Nvidia Kernel Modules to prevent loading attempts boot.blacklistedKernelModules = [ "nvidia" "nvidia_modeset" "nvidia_uvm" "nvidia_drm" ]; # 3. Disable Nvidia Hardware Options hardware.nvidia = { modesetting.enable = lib.mkForce false; powerManagement.enable = lib.mkForce false; open = lib.mkForce false; nvidiaSettings = lib.mkForce false; prime.offload.enable = lib.mkForce false; }; }; }; # ========================================== # 2. NETWORKING & LOCALES # ========================================== networking.hostName = "electra"; networking.networkmanager.enable = true; time.timeZone = "Europe/London"; i18n.defaultLocale = "en_US.UTF-8"; # ========================================== # 3. USER ACCOUNT (nimmo) # ========================================== users.users.nimmo = { isNormalUser = true; description = "Nimmo"; # "docker" group allows running containers without sudo extraGroups = [ "networkmanager" "wheel" "docker" ]; }; # ========================================== # 4. HARDWARE & SERVICES # ========================================== # Framework 16 Fingerprint Reader services.fprintd.enable = true; # Connect Fingerprint to Auth Systems security.pam.services.sudo.fprintAuth = true; security.pam.services.kde.fprintAuth = true; # Lock Screen security.pam.services.sddm.fprintAuth = false; # Disable for login (KWallet) # Firmware & Updates services.fwupd.enable = true; hardware.enableAllFirmware = true; hardware.cpu.amd.updateMicrocode = true; # Power Management (Standard: KDE Integration) services.power-profiles-daemon.enable = true; # SSD & Filesystem Maintenance services.fstrim.enable = true; zramSwap.enable = true; services.btrfs.autoScrub = { enable = true; interval = "weekly"; fileSystems = [ "/" ]; }; # Automatic Garbage Collection nix.gc = { automatic = true; dates = "weekly"; options = "--delete-older-than 7d"; }; # Bluetooth hardware.bluetooth.enable = true; hardware.bluetooth.powerOnBoot = true; # Audio (Pipewire) security.rtkit.enable = true; services.pipewire = { enable = true; alsa.enable = true; alsa.support32Bit = true; pulse.enable = true; }; # Docker Support virtualisation.docker.enable = true; # Steam (Ports & 32-bit dependencies) programs.steam = { enable = true; remotePlay.openFirewall = true; dedicatedServer.openFirewall = true; }; # ========================================== # 5. DESKTOP (Plasma 6) # ========================================== services.xserver.enable = true; services.displayManager.sddm.enable = true; services.displayManager.sddm.wayland.enable = true; services.desktopManager.plasma6.enable = true; services.xserver.xkb.layout = "gb"; # ========================================== # 6. GRAPHICS (RTX 5070 + Strix Point) # ========================================== hardware.graphics = { enable = true; enable32Bit = true; }; services.xserver.videoDrivers = [ "nvidia" ]; hardware.nvidia = { modesetting.enable = true; # Power Management (Default: Finegrained/Battery Friendly) # This puts the GPU to sleep when not in use. # Note: Overridden to 'false' in Gaming Mode specialisation above. powerManagement.enable = true; powerManagement.finegrained = true; open = true; nvidiaSettings = true; package = config.boot.kernelPackages.nvidiaPackages.beta; prime = { offload = { enable = true; enableOffloadCmd = true; }; amdgpuBusId = "PCI:194:0:0"; # c2:00.0 -> 194 nvidiaBusId = "PCI:193:0:0"; # c1:00.0 -> 193 }; }; # ========================================== # 7. NIX CORE SETTINGS # ========================================== nixpkgs.config.allowUnfree = true; nix.settings.experimental-features = [ "nix-command" "flakes" ]; system.stateVersion = "24.11"; # ========================================== # 8. POLISHING (Fonts & Compatibility) # ========================================== fonts.packages = with pkgs; [ noto-fonts noto-fonts-cjk-sans noto-fonts-emoji nerd-fonts.jetbrains-mono ]; programs.nix-ld.enable = true; programs.nix-ld.libraries = with pkgs; [ stdenv.cc.cc.lib zlib fuse3 icu nss openssl curl expat ]; environment.variables.EDITOR = "nano"; }