CCE

NixOS Hardware Support for Laptops

Bits and Bobbins not worth showing anywhere else.

nix:tangle ~/nix/nixos/laptop.nix
{ config, lib, pkgs, ... }:

{
  powerManagement.enable = true;

  networking.networkmanager = {
    enable = true;
    dns = "systemd-resolved";
  };
  services.resolved = {
    enable = true;
    settings.Resolve.FallbackDNS = [ "100.89.170.115" "100.100.100.100" "8.8.8.8" ];
  };

  hardware.mcelog.enable = true;

  hardware.cpu.intel.updateMicrocode = true;

  # each machine in my morph file sets config.services.xserver.dpi too
  # fonts.optimizeForVeryHighDPI = lib.mkDefault false;
  services.xserver.upscaleDefaultCursor = lib.mkDefault true;

  services.xserver.videoDrivers = [ "modesetting" ];

  hardware.graphics.extraPackages32 = [ pkgs.pkgsi686Linux.intel-vaapi-driver ];

  # these aren't laptop...
  services.udev.packages = with pkgs; [ platformio-core.udev ];

  # use trackpoint with wheel emulation
  hardware.trackpoint = {
    enable = true;
    emulateWheel = true;
  };

  # configure touchpad
  services.libinput.enable = true;
  services.libinput.touchpad = {
    clickMethod = "clickfinger";
    disableWhileTyping = true;
    tapping = false;
  };

  hardware.graphics = {
    enable = true;
    extraPackages = with pkgs; [
      (if (lib.versionOlder (lib.versions.majorMinor lib.version) "23.11") then vaapiIntel else intel-vaapi-driver)
      libvdpau-va-gl
      intel-media-driver
    ];
  };

  environment.variables = {
    VDPAU_DRIVER = lib.mkIf config.hardware.graphics.enable (lib.mkDefault "va_gl");
  };

  virtualisation.docker = {
    enable = true;
    autoPrune.enable = true;
    storageDriver = "zfs";
    daemon.settings = {
      log-driver = "local";
    };
  };

  boot.binfmt.emulatedSystems = [ "aarch64-linux" "armv6l-linux" ];
  hardware.rtl-sdr.enable = true;
  boot.supportedFilesystems = [ "ntfs" ];
}

My NixOS Set Top Box is a laptop right now, so it'll be enabled there too.