{ 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" ''; }