diff --git a/flake.lock b/flake.lock index 20373f6..2664548 100644 --- a/flake.lock +++ b/flake.lock @@ -69,11 +69,11 @@ ] }, "locked": { - "lastModified": 1701680013, - "narHash": "sha256-H8uAiSr//UhEdTTRDJwP6LCTq7d1sXF1IKpe8GDW3PA=", + "lastModified": 1701334333, + "narHash": "sha256-rsJ11xznoc2JSmM57bstxyas8xq8ZaEqNhQuQWyoQ/A=", "owner": "nix-community", "repo": "emacs-overlay", - "rev": "1ff5471880b6e48f63ec5fa668486ab1268c2b22", + "rev": "913e44a13636fd111139ee683a6741ccb4c28672", "type": "github" }, "original": { diff --git a/os-mods/amdgpu/default.nix b/os-mods/amdgpu/default.nix index 2c18e36..9380cea 100644 --- a/os-mods/amdgpu/default.nix +++ b/os-mods/amdgpu/default.nix @@ -22,6 +22,7 @@ driSupport = true; driSupport32Bit = true; extraPackages = with pkgs; [ + amdvlk rocm-opencl-icd rocm-opencl-runtime ]; diff --git a/os-mods/ryzenapu/default.nix b/os-mods/ryzenapu/default.nix new file mode 100644 index 0000000..ec2a258 --- /dev/null +++ b/os-mods/ryzenapu/default.nix @@ -0,0 +1,90 @@ +{ 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.unstable-os; [ + 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.unstable-os; [ + 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.unstable-os; [ + 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; +} diff --git a/systems/nixos-pulse/default.nix b/systems/nixos-pulse/default.nix index c6e431b..f293d75 100644 --- a/systems/nixos-pulse/default.nix +++ b/systems/nixos-pulse/default.nix @@ -13,6 +13,7 @@ ../../os-mods/common ../../os-mods/desktop ../../os-mods/network + ../../os-mods/ryzenapu ../../os-mods/virt ../../users ./disko.nix @@ -27,6 +28,7 @@ "gccarch-x86-64-v3" "gccarch-znver2" ]; + boot = { kernelPackages = pkgs.pkgsx86_64_v3.linuxPackages_cachyos; kernelPatches = [ ]; @@ -121,20 +123,6 @@ systemd = { services = { - tailord = { - enable = true; - description = "Tuxedo Tailor hardware control service"; - after = [ "systemd-logind.service" ]; - wantedBy = [ "multi-user.target" ]; - - serviceConfig = { - Type = "dbus"; - BusName = "com.tux.Tailor"; - ExecStart = "${pkgs.unstable-os.tuxedo-rs}/bin/tailord"; - Environment = "RUST_BACKTRACE=1"; - Restart = "on-failure"; - }; - }; # This manually configures the automatically created network-adresses service to be more flexible # regarding booting without the the device being available on boot # It prevents slow timeouts & errors on boot while preserving Plug & Play ability @@ -142,29 +130,18 @@ ConditionPathExists = "/sys/class/net/enp5s0f4u1u1c2"; BindsTo = lib.mkForce null; }; - - 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 - ''; }; }; - services.power-profiles-daemon.enable = true; services.udev.extraRules = '' ACTION=="add", KERNEL=="enp5s0f4u1u1c2", TAG+="systemd", ENV{SYSTEMD_WANTS}="network-addresses-enp5s0f4u1u1c2.service" ACTION=="remove", KERNEL=="enp5s0f4u1u1c2", RUN+="${pkgs.systemd}/bin/systemctl stop network-addresses-enp5s0f4u1u1c2.service" SUBSYSTEM=="pci", ATTR{power/control}="auto" ''; - # energy saving stuff - powerManagement.powertop.enable = true; - - environment.systemPackages = with pkgs.unstable-os; [ android-tools android-udev-rules tuxedo-rs tailor-gui ryzenadj ]; - - services.dbus.packages = [ pkgs.unstable-os.tuxedo-rs ]; + environment.systemPackages = with pkgs.unstable-os; [ + android-tools + android-udev-rules + ]; hardware = { enableRedistributableFirmware = true; @@ -172,6 +149,11 @@ tuxedo-keyboard.enable = true; cpu.amd.updateMicrocode = true; + sensor.iio.enable = true; + tuxedo-rs = { + enable = true; + tailor-gui.enable = true; + }; }; zramSwap.enable = true;