diff --git a/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
index 59740dff3ff1..34e31b6e505e 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
@@ -551,6 +551,14 @@
renamed to linux-firmware.
+
+
+ The services.mbpfan module was converted to
+ a
+ RFC
+ 0042 configuration.
+
+
A new module was added for the
diff --git a/nixos/doc/manual/release-notes/rl-2205.section.md b/nixos/doc/manual/release-notes/rl-2205.section.md
index 85cd8082007b..068984d0e151 100644
--- a/nixos/doc/manual/release-notes/rl-2205.section.md
+++ b/nixos/doc/manual/release-notes/rl-2205.section.md
@@ -192,6 +192,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- The `firmwareLinuxNonfree` package has been renamed to `linux-firmware`.
+- The `services.mbpfan` module was converted to a [RFC 0042](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md) configuration.
+
- A new module was added for the [Starship](https://starship.rs/) shell prompt,
providing the options `programs.starship.enable` and `programs.starship.settings`.
diff --git a/nixos/modules/services/misc/mbpfan.nix b/nixos/modules/services/misc/mbpfan.nix
index d80b6fafc2cf..d2b0f0da2ad9 100644
--- a/nixos/modules/services/misc/mbpfan.nix
+++ b/nixos/modules/services/misc/mbpfan.nix
@@ -5,6 +5,8 @@ with lib;
let
cfg = config.services.mbpfan;
verbose = if cfg.verbose then "v" else "";
+ settingsFormat = pkgs.formats.ini {};
+ settingsFile = settingsFormat.generate "config.conf" cfg.settings;
in {
options.services.mbpfan = {
@@ -19,54 +21,6 @@ in {
'';
};
- minFanSpeed = mkOption {
- type = types.int;
- default = 2000;
- description = ''
- The minimum fan speed.
- '';
- };
-
- maxFanSpeed = mkOption {
- type = types.int;
- default = 6200;
- description = ''
- The maximum fan speed.
- '';
- };
-
- lowTemp = mkOption {
- type = types.int;
- default = 63;
- description = ''
- The low temperature.
- '';
- };
-
- highTemp = mkOption {
- type = types.int;
- default = 66;
- description = ''
- The high temperature.
- '';
- };
-
- maxTemp = mkOption {
- type = types.int;
- default = 86;
- description = ''
- The maximum temperature.
- '';
- };
-
- pollingInterval = mkOption {
- type = types.int;
- default = 7;
- description = ''
- The polling interval.
- '';
- };
-
verbose = mkOption {
type = types.bool;
default = false;
@@ -74,23 +28,61 @@ in {
If true, sets the log level to verbose.
'';
};
+
+ settings = mkOption {
+ default = {};
+ description = "The INI configuration for Mbpfan.";
+ type = types.submodule {
+ freeformType = settingsFormat.type;
+
+ options.general.min_fan1_speed = mkOption {
+ type = types.int;
+ default = 2000;
+ description = "The minimum fan speed.";
+ };
+ options.general.max_fan1_speed = mkOption {
+ type = types.int;
+ default = 6199;
+ description = "The maximum fan speed.";
+ };
+ options.general.low_temp = mkOption {
+ type = types.int;
+ default = 55;
+ description = "The low temperature.";
+ };
+ options.general.high_temp = mkOption {
+ type = types.int;
+ default = 58;
+ description = "The high temperature.";
+ };
+ options.general.max_temp = mkOption {
+ type = types.int;
+ default = 86;
+ description = "The maximum temperature.";
+ };
+ options.general.polling_interval = mkOption {
+ type = types.int;
+ default = 1;
+ description = "The polling interval.";
+ };
+ };
+ };
};
+ imports = [
+ (mkRenamedOptionModule [ "services" "mbpfan" "pollingInterval" ] [ "services" "mbpfan" "settings" "general" "polling_interval" ])
+ (mkRenamedOptionModule [ "services" "mbpfan" "maxTemp" ] [ "services" "mbpfan" "settings" "general" "max_temp" ])
+ (mkRenamedOptionModule [ "services" "mbpfan" "lowTemp" ] [ "services" "mbpfan" "settings" "general" "low_temp" ])
+ (mkRenamedOptionModule [ "services" "mbpfan" "highTemp" ] [ "services" "mbpfan" "settings" "general" "high_temp" ])
+ (mkRenamedOptionModule [ "services" "mbpfan" "minFanSpeed" ] [ "services" "mbpfan" "settings" "general" "min_fan1_speed" ])
+ (mkRenamedOptionModule [ "services" "mbpfan" "maxFanSpeed" ] [ "services" "mbpfan" "settings" "general" "max_fan1_speed" ])
+ ];
+
config = mkIf cfg.enable {
boot.kernelModules = [ "coretemp" "applesmc" ];
- environment = {
- etc."mbpfan.conf".text = ''
- [general]
- min_fan_speed = ${toString cfg.minFanSpeed}
- max_fan_speed = ${toString cfg.maxFanSpeed}
- low_temp = ${toString cfg.lowTemp}
- high_temp = ${toString cfg.highTemp}
- max_temp = ${toString cfg.maxTemp}
- polling_interval = ${toString cfg.pollingInterval}
- '';
- systemPackages = [ cfg.package ];
- };
+ environment.etc."mbpfan.conf".source = settingsFile;
+ environment.systemPackages = [ cfg.package ];
systemd.services.mbpfan = {
description = "A fan manager daemon for MacBook Pro";