99 lines
2.1 KiB
Nix
99 lines
2.1 KiB
Nix
{ __findFile, pkgs, ... }:
|
|
let
|
|
wm2fc = pkgs.callPackage <package/wm2fc> { };
|
|
in
|
|
{
|
|
# hardware.cpu.amd.ryzen-smu.enable = true;
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
# SRC: https://github.com/FlyGoat/RyzenAdj
|
|
# ./ryzenadj --stapm-limit=45000 --fast-limit=45000 --slow-limit=45000 --tctl-temp=90
|
|
# ryzenAdj --info
|
|
# radg [TEMP]
|
|
ryzenadj
|
|
|
|
# SRC: https://github.com/nbfc-linux/nbfc-linux
|
|
nbfc-linux
|
|
|
|
wm2fc
|
|
];
|
|
|
|
systemd.services.radj = {
|
|
enable = true;
|
|
description = "Ryzen Adj temperature limiter.";
|
|
serviceConfig.Type = "simple";
|
|
wantedBy = [ "multi-user.target" ];
|
|
path = with pkgs; [
|
|
coreutils
|
|
ryzenadj
|
|
];
|
|
script = ''
|
|
ryzenadj --tctl-temp=55
|
|
while true; do
|
|
sleep 60
|
|
ryzenadj --tctl-temp=55 &> /dev/null
|
|
done
|
|
'';
|
|
};
|
|
|
|
systemd.services.fan = {
|
|
enable = true;
|
|
description = "The fan control";
|
|
wantedBy = [ "multi-user.target" ];
|
|
serviceConfig = {
|
|
ExecStop = "${wm2fc}/bin/wm2fc a";
|
|
Type = "simple";
|
|
};
|
|
path = with pkgs; [
|
|
coreutils
|
|
wm2fc
|
|
];
|
|
script = ''
|
|
old=0
|
|
smooth=0
|
|
while true; do
|
|
temp=$(cat /sys/devices/pci0000\:00/0000\:00\:18.3/hwmon/*/temp1_input)
|
|
value=0
|
|
|
|
if [ $temp -gt 80000 ]
|
|
then value=184
|
|
elif [ $temp -gt 70000 ]
|
|
then value=128
|
|
elif [ $temp -gt 60000 ]
|
|
then value=92
|
|
# elif [ $temp -gt 50000 ]
|
|
# then value=69
|
|
elif [ $temp -gt 45000 ]
|
|
then value=46
|
|
elif [ $temp -gt 40000 ]
|
|
then value=23
|
|
else value=0
|
|
fi
|
|
|
|
if [[ $old != $value ]]; then
|
|
# 30 = 60s smooth.
|
|
if [[ $value -lt $old ]] && [[ $smooth -lt 30 ]]; then
|
|
smooth=$((smooth+1))
|
|
else
|
|
old=$value
|
|
smooth=0
|
|
wm2fc $value
|
|
fi
|
|
else
|
|
smooth=0
|
|
fi
|
|
|
|
sleep 2
|
|
done
|
|
'';
|
|
};
|
|
|
|
# security.wrappers.wm2fc = {
|
|
# source = "${wm2fc}/bin/wm2fc";
|
|
# owner = "root";
|
|
# group = "root";
|
|
# setuid = true;
|
|
# permissions = "u+rx,g+x,o+x";
|
|
# };
|
|
}
|