222 lines
6.3 KiB
Nix
222 lines
6.3 KiB
Nix
{ 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;
|
|
|
|
# --- 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;
|
|
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 = "us";
|
|
|
|
# ==========================================
|
|
# 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";
|
|
}
|