Skip to content

Commit

Permalink
nixos/mbpfan: refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
bb2020 committed Jan 2, 2025
1 parent d5dfb15 commit ce17b42
Showing 1 changed file with 33 additions and 72 deletions.
105 changes: 33 additions & 72 deletions nixos/modules/services/misc/mbpfan.nix
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
pkgs,
...
}:

let
cfg = config.services.mbpfan;
verbose = lib.optionalString cfg.verbose "v";
Expand All @@ -12,89 +13,49 @@ let

in
{
options.services.mbpfan = {
enable = lib.mkEnableOption "mbpfan, fan controller daemon for Apple Macs and MacBooks";
package = lib.mkPackageOption pkgs "mbpfan" { };

verbose = lib.mkOption {
type = lib.types.bool;
default = false;
description = "If true, sets the log level to verbose.";
};
options.services.mbpfan.enable = lib.mkEnableOption "mbpfan, fan controller daemon for Apple Macs and MacBooks";
options.services.mbpfan.verbose = lib.mkEnableOption "verbose log level";
options.services.mbpfan.silent = lib.mkEnableOption "less aggressive default fan speeds";
options.services.mbpfan.package = lib.mkPackageOption pkgs "mbpfan" { };

aggressive = lib.mkOption {
type = lib.types.bool;
default = true;
description = "If true, favors higher default fan speeds.";
};

settings = lib.mkOption {
default = { };
description = "INI configuration for Mbpfan.";
type = lib.types.submodule {
freeformType = format.type;
options.services.mbpfan.settings = lib.mkOption {
default = { };
description = "";
type = lib.types.submodule {
freeformType = format.type;

options.general.low_temp = lib.mkOption {
type = lib.types.int;
default = (if cfg.aggressive then 55 else 63);
defaultText = lib.literalExpression "55";
description = "If temperature is below this, fans will run at minimum speed.";
};
options.general.high_temp = lib.mkOption {
type = lib.types.int;
default = (if cfg.aggressive then 58 else 66);
defaultText = lib.literalExpression "58";
description = "If temperature is above this, fan speed will gradually increase.";
};
options.general.max_temp = lib.mkOption {
type = lib.types.int;
default = (if cfg.aggressive then 78 else 86);
defaultText = lib.literalExpression "78";
description = "If temperature is above this, fans will run at maximum speed.";
};
options.general.polling_interval = lib.mkOption {
type = lib.types.int;
default = 1;
description = "The polling interval.";
};
options.general.low_temp = lib.mkOption {
type = lib.types.int;
default = (if cfg.silent then 63 else 55);
defaultText = lib.literalExpression "55";
description = "If temperature is below this, fans will run at minimum speed.";
};
options.general.high_temp = lib.mkOption {
type = lib.types.int;
default = (if cfg.silent then 66 else 58);
defaultText = lib.literalExpression "58";
description = "If temperature is above this, fan speed will gradually increase.";
};
options.general.max_temp = lib.mkOption {
type = lib.types.int;
default = (if cfg.silent then 86 else 78);
defaultText = lib.literalExpression "78";
description = "If temperature is above this, fans will run at maximum speed.";
};
options.general.polling_interval = lib.mkOption {
type = lib.types.int;
default = 1;
description = "The polling interval.";
};
};
};

imports = [
(lib.mkRenamedOptionModule
[ "services" "mbpfan" "pollingInterval" ]
[ "services" "mbpfan" "settings" "general" "polling_interval" ]
)
(lib.mkRenamedOptionModule
[ "services" "mbpfan" "maxTemp" ]
[ "services" "mbpfan" "settings" "general" "max_temp" ]
)
(lib.mkRenamedOptionModule
[ "services" "mbpfan" "lowTemp" ]
[ "services" "mbpfan" "settings" "general" "low_temp" ]
)
(lib.mkRenamedOptionModule
[ "services" "mbpfan" "highTemp" ]
[ "services" "mbpfan" "settings" "general" "high_temp" ]
)
(lib.mkRenamedOptionModule
[ "services" "mbpfan" "minFanSpeed" ]
[ "services" "mbpfan" "settings" "general" "min_fan1_speed" ]
)
(lib.mkRenamedOptionModule
[ "services" "mbpfan" "maxFanSpeed" ]
[ "services" "mbpfan" "settings" "general" "max_fan1_speed" ]
)
];

config = lib.mkIf cfg.enable {
environment.etc."mbpfan.conf".source = cfgfile;
boot.kernelModules = [
"coretemp"
"applesmc"
];
environment.systemPackages = [ cfg.package ];
environment.etc."mbpfan.conf".source = cfgfile;

systemd.services.mbpfan = {
description = "A fan manager daemon for MacBook Pro";
Expand Down

0 comments on commit ce17b42

Please sign in to comment.