{ config , lib , pkgs , system , inputs , ... }: { # This automatically sets the ryzen apu TDP to 45 W on AC and 10W on battery # addionally it enables and configures some general power management stuff like powertop environment.systemPackages = with pkgs; [ ryzenadj (writers.writeDashBin "set_tdp" '' set -efux watt=$1 value=$(( $watt * 1000 )) ${ryzenadj}/bin/ryzenadj --stapm-limit="$value" --fast-limit="$value" --slow-limit="$value" --tctl-temp=85 '') ]; systemd = { services = { desktop-power-maximum-tdp = { description = "Change TDP to maximum TDP when on AC power"; wantedBy = [ "ac.target" ]; unitConfig = { RefuseManualStart = true; }; path = with pkgs; [ coreutils ryzenadj ]; serviceConfig.Type = "oneshot"; preStart = "sleep 2"; script = '' ryzenadj --stapm-limit=45000 --fast-limit=45000 --slow-limit=45000 --tctl-temp=85 ''; }; portable-power-saving-tdp = { description = "Change TDP to power saving TDP when on battery power"; wantedBy = [ "battery.target" ]; unitConfig = { RefuseManualStart = true; }; path = with pkgs; [ coreutils ryzenadj ]; serviceConfig.Type = "oneshot"; preStart = "sleep 2"; script = '' ryzenadj --stapm-limit=10000 --fast-limit=10000 --slow-limit=10000 --tctl-temp=85 ''; }; # Do not manage HID devices to prevent annoying keyboard/mouse sleeps powertop.postStart = '' HIDDEVICES=$(ls /sys/bus/usb/drivers/usbhid | grep -oE '^[0-9]+-[0-9\.]+' | sort -u) for i in $HIDDEVICES; do echo -n "Enabling " | cat - /sys/bus/usb/devices/$i/product echo 'on' > /sys/bus/usb/devices/$i/power/control done ''; }; targets = { ac = { conflicts = [ "battery.target" ]; description = "On AC power"; unitConfig = { DefaultDependencies = "false"; }; }; battery = { conflicts = [ "ac.target" ]; description = "On battery power"; unitConfig = { DefaultDependencies = "false"; }; }; }; }; services = { power-profiles-daemon.enable = true; udev.extraRules = '' SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_NAME}=="AC0", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="${pkgs.systemd}/bin/systemctl --no-block start ac.target" SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_NAME}=="AC0", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="${pkgs.systemd}/bin/systemctl --no-block start battery.target" ''; }; # energy saving stuff powerManagement.powertop.enable = true; }