{ config, lib, pkgs, modulesPath, ... }: { networking.hostName = "framework"; fileSystems."/" = { device = "/dev/disk/by-partlabel/primary"; fsType = "ext4"; }; fileSystems."/boot" = { device = "/dev/disk/by-partlabel/ESP"; fsType = "vfat"; }; # CPU Settings hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" ]; boot.initrd.kernelModules = [ "amdgpu" ]; boot.kernelModules = [ "kvm-amd" ]; # Include kvm-amd for virtualization support boot.extraModulePackages = []; boot.kernelParams = [ "amdgpu.dc=1" "usbcore.autosuspend=-1" "nvme_core.default_ps_max_latency_us=0" "pcie_aspm=off" "pcie_port_pm=off" ]; networking.useDHCP = lib.mkDefault true; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; # Modified TLP for power management with less aggressive settings # services.tlp = { # enable = true; # settings = { # CPU_BOOST_ON_BAT = 0; # CPU_SCALING_GOVERNOR_ON_BATTERY = "powersave"; # CPU_SCALING_GOVERNOR_ON_AC = "performance"; # CPU_ENERGY_PERF_POLICY_ON_AC = "balance_performance"; # START_CHARGE_THRESH_BAT0 = 90; # STOP_CHARGE_THRESH_BAT0 = 97; # RUNTIME_PM_ON_BAT = "on"; # Less aggressive power management # HANDLE_LID_SWITCH = 1; # Suspend on lid close # HANDLE_LID_SWITCH_DOCKED = 0; # Do nothing when docked # Disable USB autosuspend # USB_AUTOSUSPEND = 0; # }; # }; # Powersac # Swap swapDevices = [ { device = "/swapfile"; size = 102400; # optional: set up file with correct permissions at activation priority = 0; } ]; systemd.tmpfiles.rules = [ "f /swapfile 0600 root root - -" ]; # Disable power-profiles-daemon to resolve conflict # services.power-profiles-daemon.enable = false; # GPU settings # services.xserver.videoDrivers = [ "amdgpu" ]; # environment.variables = { # DRI_PRIME = "1"; # Ensure iGPU is default # }; # Brightness control hardware.acpilight.enable = lib.mkDefault true; # SSD optimization services.fstrim.enable = lib.mkDefault true; # Logind lid-switch configuration # services.logind = { # lidSwitch = "suspend"; # lidSwitchDocked = "ignore"; # Prevent suspend when connected to a dock # lidSwitchExternalPower = "ignore"; # powerKey = "poweroff"; # Optional: configure behavior for the power key # suspendKey = "suspend"; # Optional: configure behavior for the suspend key # }; # Suspend-then-hibernate configuration # systemd.services.suspendThenHibernate = { # description = "Suspend and then hibernate"; # after = [ "suspend.target" ]; # serviceConfig = { # ExecStart = "/bin/sh -c 'sleep 3600 && systemctl hibernate'"; # Hibernate after 60 minutes # Type = "oneshot"; # }; # wantedBy = [ "suspend.target" ]; # }; # Modified udev rules for runtime PM - disable problematic USB autosuspend # services.udev.extraRules = '' # ACTION=="add", SUBSYSTEM=="pci", ATTR{power/control}="auto" # # ACTION=="add", SUBSYSTEM=="usb", ATTR{power/autosuspend}="10" # ''; # ACPI lid event handler # environment.etc."acpi/events/lid".source = pkgs.writeText "lid-event-handler" '' # event=button/lid.* # action=/etc/acpi/actions/lid.sh # ''; # environment.etc."acpi/actions/lid.sh".source = pkgs.writeText "lid-sh-handler" '' # #!/bin/bash # systemctl suspend # ''; environment.systemPackages = with pkgs; [ via radeontop amdvlk ]; }