diff --git a/flake.lock b/flake.lock index 5a3f325..651e965 100644 --- a/flake.lock +++ b/flake.lock @@ -209,11 +209,11 @@ ] }, "locked": { - "lastModified": 1739841949, - "narHash": "sha256-lSOXdgW/1zi/SSu7xp71v+55D5Egz8ACv0STkj7fhbs=", + "lastModified": 1739353546, + "narHash": "sha256-YTqXhBZvCdZLMBupWlCDvRFaTEhaHa2/Xc/p1sUdSZU=", "owner": "nix-community", "repo": "disko", - "rev": "15dbf8cebd8e2655a883b74547108e089f051bf0", + "rev": "26ade1005191e0602a78b0f141970648445bafd9", "type": "github" }, "original": { @@ -440,11 +440,11 @@ ] }, "locked": { - "lastModified": 1739757849, - "narHash": "sha256-Gs076ot1YuAAsYVcyidLKUMIc4ooOaRGO0PqTY7sBzA=", + "lastModified": 1736373539, + "narHash": "sha256-dinzAqCjenWDxuy+MqUQq0I4zUSfaCvN9rzuCmgMZJY=", "owner": "nix-community", "repo": "home-manager", - "rev": "9d3d080aec2a35e05a15cedd281c2384767c2cfe", + "rev": "bd65bc3cde04c16755955630b344bc9e35272c56", "type": "github" }, "original": { @@ -481,11 +481,11 @@ ] }, "locked": { - "lastModified": 1739676768, - "narHash": "sha256-U1HQ7nzhJyVVXUgjU028UCkbLQLEIkg42+G7iIiBmlU=", + "lastModified": 1739071773, + "narHash": "sha256-/Ak+Quinhmdxa9m3shjm4lwwwqmzG8zzGhhhhgR1k9I=", "owner": "Mic92", "repo": "nix-index-database", - "rev": "ae15068e79e22b76c344f0d7f8aed1bb1c5b0b63", + "rev": "895d81b6228bbd50a6ef22f5a58a504ca99763ea", "type": "github" }, "original": { @@ -551,11 +551,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1739736696, - "narHash": "sha256-zON2GNBkzsIyALlOCFiEBcIjI4w38GYOb+P+R4S8Jsw=", + "lastModified": 1739446958, + "narHash": "sha256-+/bYK3DbPxMIvSL4zArkMX0LQvS7rzBKXnDXLfKyRVc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d74a2335ac9c133d6bbec9fc98d91a77f1604c1f", + "rev": "2ff53fe64443980e139eaa286017f53f88336dd0", "type": "github" }, "original": { @@ -612,11 +612,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1739758141, - "narHash": "sha256-uq6A2L7o1/tR6VfmYhZWoVAwb3gTy7j4Jx30MIrH0rE=", + "lastModified": 1739357830, + "narHash": "sha256-9xim3nJJUFbVbJCz48UP4fGRStVW5nv4VdbimbKxJ3I=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c618e28f70257593de75a7044438efc1c1fc0791", + "rev": "0ff09db9d034a04acd4e8908820ba0b410d7a33a", "type": "github" }, "original": { @@ -922,11 +922,11 @@ "nixpkgs": "nixpkgs_6" }, "locked": { - "lastModified": 1739829690, - "narHash": "sha256-mL1szCeIsjh6Khn3nH2cYtwO5YXG6gBiTw1A30iGeDU=", + "lastModified": 1738953846, + "narHash": "sha256-yrK3Hjcr8F7qS/j2F+r7C7o010eVWWlm4T1PrbKBOxQ=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "3d0579f5cc93436052d94b73925b48973a104204", + "rev": "4f09b473c936d41582dd744e19f34ec27592c5fd", "type": "github" }, "original": { diff --git a/hosts/monolith/amdgpu.nix b/hosts/monolith/amdgpu.nix index 8c42bf0..4c26afa 100644 --- a/hosts/monolith/amdgpu.nix +++ b/hosts/monolith/amdgpu.nix @@ -1,4 +1,4 @@ -{ pkgs, ... }: +{ pkgs, lib, ... }: let undervoltGpu = pkgs.writeShellScript "undervolt-gpu" '' set -xe @@ -17,6 +17,17 @@ in "amdgpu.ppfeaturemask=0xfffd7fff" # enable undervolting ]; + systemd.services.amd-fan-control = { + script = '' + ${lib.getExe pkgs.amd-fan-control} /sys/class/drm/card1/device 60 85 + ''; + serviceConfig = { + Restart = "always"; + RestartSec = 10; + }; + wantedBy = [ "multi-user.target" ]; + }; + hardware.graphics.enable32Bit = true; hardware.graphics.extraPackages = with pkgs; [ diff --git a/scripts/amd-fan-control b/scripts/amd-fan-control new file mode 100755 index 0000000..1f4c3e7 --- /dev/null +++ b/scripts/amd-fan-control @@ -0,0 +1,61 @@ +#!/usr/bin/env bash + +set -e + +DEVICE="$1" # eg: /sys/class/drm/card1/device +HWMON=$(echo "$DEVICE"/hwmon/hwmon*) + +exit() { + echo "Setting controll to auto" >&2 + echo 2 > "$HWMON/pwm1_enable" +} + +trap exit EXIT INT + +bail() { + echo "Error: $@" >&2 + echo "Exiting..." >&2 + exit 1 +} + +if ! [ -d "$HWMON" ]; then + bail "Invalid HWMON" +fi + +TEMP_INPUT="$HWMON/temp2_input" + +if ! [ -f $TEMP_INPUT ]; then + bail "Invalid TEMP_INPUT" +fi + +TEMP_MIN="$2" +TEMP_MAX="$3" + +if [ -z "$TEMP_MIN" ];then + bail "No minimum temperature provided" +fi + +if [ -z "$TEMP_MAX" ];then + bail "No maximum temperature provided" +fi + +PWM_MIN=0 +PWM_MAX=255 + +echo "Running..." >&2 +while true; do + TEMPERATURE_RAW=$(cat "$TEMP_INPUT") + TEMPERATURE="$(( $TEMPERATURE_RAW / 1000 ))" + # Remap from a number between 60_000..90_000 to 0..255 + PWM=$(( ($TEMPERATURE - $TEMP_MIN) * $PWM_MAX / ($TEMP_MAX - $TEMP_MIN) )) + + if [ "$PWM" -gt $PWM_MAX ]; then + PWM=$PWM_MAX + elif [ "$PWM" -lt $PWM_MIN ]; then + PWM=$PWM_MIN + fi + + echo 1 > "$HWMON/pwm1_enable" + echo "$PWM" > "$HWMON/pwm1" + sleep .1s +done diff --git a/scripts/default.nix b/scripts/default.nix index 78ccac8..c2725ee 100644 --- a/scripts/default.nix +++ b/scripts/default.nix @@ -23,6 +23,7 @@ in with final; createScripts { + amd-fan-control = [ bash ]; br = [ ]; bmenu = [ bemenu