laptop-config/modules/t490.nix
Scott Scoble 5051dfdc8c Add T490 hardware configuration and docs
- modules/t490.nix: TLP power management, CPU throttling (throttled), S3 sleep,
  remote Nix builders (cluster), fwupd, fprintd, fprintd, Syncthing, Tailscale,
  Intel VA-API, TrackPoint sensitivity, PipeWire defaults
- flake.nix: add nixos-hardware input, import T490 module + nixos-hardware
- docs/T490-HARDWARE.md: WiFi variants, graphics, audio, fingerprint, sleep guide
- docs/T490-BATTERY.md: TLP config, threshold strategy, real-world battery numbers
- docs/T490-OFFLOADING.md: local vs cluster split, remote builder setup
- MIGRATION.md: add T490 post-install steps (fwupd, fprint, remote build key)
- README.md: reflect new module and docs structure
2026-05-14 17:40:04 -07:00

157 lines
4.5 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ config, pkgs, lib, ... }:
{
# === T490-specific hardware configuration ===
# Requires nixos-hardware flake input: nixos-hardware.nixosModules.lenovo-thinkpad-t490
# The nixos-hardware module provides:
# - services.throttled (CPU throttling fix)
# - PulseAudio profile set (5 simultaneous sinks)
# - common/cpu/intel (VA-API drivers, microcode)
# === Kernel parameters ===
boot.kernelParams = [
"mem_sleep_default=deep" # prefer S3 deep sleep over s2idle
"pcie_aspm=force" # PCIe Active State Power Management
"i915.enable_fbc=1" # frame buffer compression (power saving)
"i915.enable_psr=1" # panel self-refresh (power saving)
"i915.enable_rc6=7" # maximum GPU render power saving
];
boot.kernelModules = [ "thinkpad_acpi" ];
boot.blacklistedKernelModules = [
"iTCO_wdt"
"iTCO_vendor_support"
];
# === Display DPI ===
services.xserver.dpi = 157; # 14" 1920×1080 IPS = 157 DPI
# === Firmware updates ===
services.fwupd.enable = true;
# === Fingerprint reader (Synaptics 06cb:00bd) ===
# Requires firmware update via fwupd first
services.fprintd.enable = true;
# === TLP — ThinkPad power management ===
# nixos-hardware thinkpad module provides base config; tune here
services.tlp = {
enable = true;
settings = {
CPU_SCALING_GOVERNOR_ON_AC = "performance";
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_ENERGY_PERF_POLICY_ON_AC = "balance_performance";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
CPU_MAX_PERF_ON_AC = 100;
CPU_MAX_PERF_ON_BAT = 40; # cap at ~1.7 GHz on battery
CPU_BOOST_ON_AC = 1;
CPU_BOOST_ON_BAT = 0; # disable turbo on battery
START_CHARGE_THRESH_BAT0 = 40; # battery health: start charging below 40%
STOP_CHARGE_THRESH_BAT0 = 80; # battery health: stop at 80%
WIFI_PWR_ON_AC = "off";
WIFI_PWR_ON_BAT = "on";
RUNTIME_PM_ON_AC = "on";
RUNTIME_PM_ON_BAT = "auto";
USB_AUTOSUSPEND = 1;
INTEL_GPU_MIN_FREQ_ON_AC = 300;
INTEL_GPU_MAX_FREQ_ON_AC = 1100;
INTEL_GPU_MIN_FREQ_ON_BAT = 300;
INTEL_GPU_MAX_FREQ_ON_BAT = 600;
};
};
# === powertop ===
powerManagement.powertop.enable = true;
# Skip thermald — conflicts with throttled (enabled by nixos-hardware)
services.thermald.enable = false;
# === zram swap (faster + saves NVMe writes) ===
zramSwap = {
enable = true;
memoryPercent = 50;
};
# === Intel GPU — hardware video acceleration ===
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [
intel-media-driver # modern VA-API (iHD)
intel-vaapi-driver # legacy VA-API (i965)
libvdpau-va-gl # VDPAU → VA-API bridge
];
};
environment.sessionVariables = {
LIBVA_DRIVER_NAME = "iHD";
MOZ_ENABLE_WAYLAND = "1";
};
# === Suspend/resume: reload WiFi after wake ===
powerManagement.powerUpCommands = ''
${pkgs.kmod}/bin/modprobe -r iwlmvm iwlwifi || true
${pkgs.kmod}/bin/modprobe iwlwifi || true
'';
# === Remote Nix builders (k3s cluster) ===
nix.distributedBuilds = true;
nix.buildMachines = [
{
hostName = "n97-mini";
system = "x86_64-linux";
maxJobs = 4;
supportedFeatures = [
"nixos-test"
"benchmark"
"big-parallel"
"kvm"
];
sshUser = "root";
sshKey = "/root/.ssh/remote-build";
}
{
hostName = "n97";
system = "x86_64-linux";
maxJobs = 4;
supportedFeatures = [
"nixos-test"
"benchmark"
"big-parallel"
"kvm"
];
sshUser = "root";
sshKey = "/root/.ssh/remote-build";
}
];
# === Syncthing (Obsidian vault sync) ===
services.syncthing = {
enable = true;
user = "sscoble";
dataDir = "/home/sscoble/.syncthing";
configDir = "/home/sscoble/.syncthing/config";
};
# === Tailscale (consistent cluster access from any network) ===
services.tailscale.enable = true;
# === NVMe tools ===
environment.systemPackages = with pkgs; [ nvme-cli ];
# === Touchpad & TrackPoint ===
services.xserver.libinput = {
enable = true;
touchpad = {
tapping = true;
naturalScrolling = true;
accelSpeed = "0.3";
disableWhileTyping = true;
};
};
# TrackPoint sensitivity
services.udev.extraRules = ''
ACTION=="add", SUBSYSTEM=="input", ATTR{name}=="*TrackPoint*", \
ATTR{device/sensitivity}="200", ATTR{device/speed}="150"
'';
}