# ThinkPad T400 (NixOS). Shared laptop options live in ../../modules/laptop.nix;
# only host-specific settings are here. Install notes (boot variants, GPU,
# partitions): see ./README.md.
{ config, ... }:

{
  imports = [
    ./hardware-configuration.nix
    # Boot: import exactly ONE, matching the firmware currently flashed.
    # Stock Lenovo BIOS and coreboot+SeaBIOS both use boot-bios.nix.
    ./boot-bios.nix
    # ./boot-coreboot-grub.nix # coreboot with the GRUB payload (config-only GRUB)
    # ./boot-coreboot-uefi.nix # coreboot with the Tianocore/edk2 UEFI payload
    #                          #   (systemd-boot; carries its own ESP mount)
  ];

  networking.hostName = "T400-NixOS";

  console.font = "Lat2-Terminus16";

  # Low-RAM host (4 GiB max): a compressed RAM swap reduces disk paging.
  zramSwap.enable = true;

  # sshd (daemon, port 22, key-only policy) comes from ../../modules/ssh.nix;
  # the firewall itself is enabled in laptop.nix with a default-deny policy.

  # Intel Core 2 (Penryn) microcode. Redistributable firmware (enabled in
  # workstation.nix) supplies the iwlwifi blobs (Intel WiFi Link 5100/5300) and
  # the radeon firmware needed by the discrete GPU below.
  hardware.cpu.intel.updateMicrocode = true;

  # Battery longevity: cap charging to 75-80%. tlp itself comes from the
  # nixos-hardware lenovo-thinkpad profile; tp_smapi supplies the threshold
  # sysfs on this 2008-era ThinkPad (kernel-native natacpi is too new for it).
  boot.kernelModules = [ "tp_smapi" ];
  boot.extraModulePackages = [ config.boot.kernelPackages.tp_smapi ];
  services.tlp.settings = {
    START_CHARGE_THRESH_BAT0 = 75;
    STOP_CHARGE_THRESH_BAT0 = 80;
  };

  # This T400 has the optional discrete GPU fitted: an ATI Mobility Radeon HD
  # 3470 (RV620), driven by the open `radeon` KMS driver. Load it in the initrd
  # for early modesetting (clean Sway/Wayland start); firmware comes from
  # enableRedistributableFirmware above.
  #
  # The T400 has switchable graphics (this discrete GPU + the Intel GMA
  # 4500MHD). Select "Discrete" in the firmware's graphics setting so only the
  # ATI is live; if you instead run "Integrated", the Intel i915 driver takes
  # over with no extra config and `radeon` simply stays idle.
  boot.initrd.kernelModules = [ "radeon" ];

  # See `man configuration.nix` / the stateVersion docs before changing.
  system.stateVersion = "26.05";
}
