{ config, lib, pkgs, ... }: with lib; let cfg = config.hardware.gpd.ppt; in { imports = [ ../../common/pc/laptop ../../common/pc/ssd ../../common/hidpi.nix ]; # Linux default PPT is 24-22-22, BIOS default PPT is 35-32-28. It can be controlled by ryzenadj. # NOTICE: Whenever you can limit PPT to 15W by pressing Fn + Shift to enter quiet mode. options.hardware.gpd.ppt = { enable = mkEnableOption (mdDoc "Enable PPT control for device by ryzenadj.") // { # Default increase PPT to the BIOS default when power adapter plugin to increase performance. default = true; }; adapter = { fast-limit = mkOption { description = "Fast PTT Limit(milliwatt) when power adapter plugin."; default = 35000; type = types.ints.unsigned; }; slow-limit = mkOption { description = "Slow PTT Limit(milliwatt) when power adapter plugin."; default = 32000; type = types.ints.unsigned; }; stapm-limit = mkOption { description = "Stapm PTT Limit(milliwatt) when power adapter plugin."; default = 28000; type = types.ints.unsigned; }; }; battery = { fast-limit = mkOption { description = "Fast PTT Limit(milliwatt) when using battery."; default = 24000; type = types.ints.unsigned; }; slow-limit = mkOption { description = "Slow PTT Limit(milliwatt) when using battery."; default = 22000; type = types.ints.unsigned; }; stapm-limit = mkOption { description = "Stapm PTT Limit(milliwatt) when using battery."; default = 22000; type = types.ints.unsigned; }; }; }; config = mkIf cfg.enable { environment.systemPackages = [ pkgs.ryzenadj ]; services.udev.extraRules = '' SUBSYSTEM=="power_supply", KERNEL=="ADP1", ATTR{online}=="1", RUN+="${pkgs.ryzenadj}/bin/ryzenadj --stapm-limit ${toString cfg.adapter.stapm-limit} --fast-limit ${toString cfg.adapter.fast-limit} --slow-limit ${toString cfg.adapter.slow-limit}" SUBSYSTEM=="power_supply", KERNEL=="ADP1", ATTR{online}=="0", RUN+="${pkgs.ryzenadj}/bin/ryzenadj --stapm-limit ${toString cfg.battery.stapm-limit} --fast-limit ${toString cfg.battery.fast-limit} --slow-limit ${toString cfg.battery.slow-limit}" ''; }; }