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
This commit is contained in:
parent
6df0a20265
commit
5051dfdc8c
7 changed files with 364 additions and 3 deletions
157
modules/t490.nix
Normal file
157
modules/t490.nix
Normal file
|
|
@ -0,0 +1,157 @@
|
|||
{ 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"
|
||||
'';
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue