From 7d1c0d753d91d1949ac8cb27fde2f8d751323c66 Mon Sep 17 00:00:00 2001 From: aleksana Date: Thu, 1 Jan 2026 20:55:57 +0800 Subject: [PATCH] nixos/tlp: add pd options --- nixos/modules/services/hardware/tlp.nix | 34 +++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/nixos/modules/services/hardware/tlp.nix b/nixos/modules/services/hardware/tlp.nix index 63126123f532..9cb29c65ea98 100644 --- a/nixos/modules/services/hardware/tlp.nix +++ b/nixos/modules/services/hardware/tlp.nix @@ -26,6 +26,12 @@ in description = "Whether to enable the TLP power management daemon."; }; + pd = { + enable = lib.mkEnableOption "the power-rofiles-daemon like DBus interface for TLP"; + + package = lib.mkPackageOption pkgs "tlp-pd" { }; + }; + settings = lib.mkOption { type = with lib.types; @@ -80,6 +86,23 @@ in Set `services.tlp.settings.SATA_LINKPWR_ON_AC` and `services.tlp.settings.SATA_LINKPWR_ON_BAT` instead. ''; } + { + assertion = cfg.pd.enable -> !config.services.power-profiles-daemon.enable; + message = '' + `services.tlp.pd` and `services.power-profiles-daemon` cannot be enabled together, + because they are using the same dbus interface and have the same functionality. + Generally, `services.tlp.pd` should be preferred as upstream does not recommend + using tlp together with power-profiles-daemon. + Set `services.power-profiles-daemon.enable` to `false` to resolve this error. + ''; + } + { + assertion = cfg.pd.enable -> !(config.services.tuned.enable && config.services.tuned.ppdSupport); + message = '' + `services.tlp.pd` and `services.tuned.ppdSupport` cannot be enabled together, + because they are using the same dbus interface and have the same functionality. + ''; + } ]; environment.etc = { @@ -90,7 +113,10 @@ in "${cfg.package}/lib/NetworkManager/dispatcher.d/99tlp-rdw-nm"; }; - environment.systemPackages = [ cfg.package ]; + environment.systemPackages = [ + cfg.package + ] + ++ lib.optionals cfg.pd.enable [ cfg.pd.package ]; services.tlp.settings = let @@ -112,7 +138,11 @@ in # use native tlp instead because it can also differentiate between AC/BAT services.cpufreq.enable = false; - packages = [ cfg.package ]; + packages = [ + cfg.package + ] + ++ lib.optionals cfg.pd.enable [ cfg.pd.package ]; + # XXX: These must always be disabled/masked according to [1]. # # [1]: https://github.com/linrunner/TLP/blob/a9ada09e0821f275ce5f93dc80a4d81a7ff62ae4/tlp-stat.in#L319