| 
									
										
										
										
											2015-04-30 21:15:19 -04:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | with lib; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  |   cfg = config.services.mbpfan; | 
					
						
							| 
									
										
										
										
											2015-05-01 17:11:00 -04:00
										 |  |  |   verbose = if cfg.verbose then "v" else ""; | 
					
						
							| 
									
										
										
										
											2015-04-30 21:15:19 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | in { | 
					
						
							|  |  |  |   options.services.mbpfan = { | 
					
						
							| 
									
										
										
										
											2017-12-23 01:33:28 +00:00
										 |  |  |     enable = mkEnableOption "mbpfan, fan controller daemon for Apple Macs and MacBooks"; | 
					
						
							| 
									
										
										
										
											2015-04-30 21:15:19 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     package = mkOption { | 
					
						
							| 
									
										
										
										
											2016-01-17 19:34:55 +01:00
										 |  |  |       type = types.package; | 
					
						
							| 
									
										
										
										
											2015-04-30 21:15:19 -04:00
										 |  |  |       default = pkgs.mbpfan; | 
					
						
							| 
									
										
										
										
											2016-01-17 19:34:55 +01:00
										 |  |  |       defaultText = "pkgs.mbpfan"; | 
					
						
							| 
									
										
										
										
											2015-04-30 21:15:19 -04:00
										 |  |  |       description = ''
 | 
					
						
							|  |  |  |         The package used for the mbpfan daemon. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     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. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2015-05-01 17:11:00 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     verbose = mkOption { | 
					
						
							|  |  |  |       type = types.bool; | 
					
						
							|  |  |  |       default = false; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         If true, sets the log level to verbose. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2015-04-30 21:15:19 -04:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   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 ]; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     systemd.services.mbpfan = { | 
					
						
							|  |  |  |       description = "A fan manager daemon for MacBook Pro"; | 
					
						
							|  |  |  |       wantedBy = [ "sysinit.target" ]; | 
					
						
							|  |  |  |       after = [ "syslog.target" "sysinit.target" ]; | 
					
						
							|  |  |  |       restartTriggers = [ config.environment.etc."mbpfan.conf".source ]; | 
					
						
							|  |  |  |       serviceConfig = { | 
					
						
							|  |  |  |         Type = "simple"; | 
					
						
							| 
									
										
										
										
											2015-05-01 17:11:00 -04:00
										 |  |  |         ExecStart = "${cfg.package}/bin/mbpfan -f${verbose}"; | 
					
						
							| 
									
										
										
										
											2015-04-30 21:15:19 -04:00
										 |  |  |         ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; | 
					
						
							| 
									
										
										
										
											2018-12-19 22:37:45 +01:00
										 |  |  |         PIDFile = "/run/mbpfan.pid"; | 
					
						
							| 
									
										
										
										
											2015-04-30 21:15:19 -04:00
										 |  |  |         Restart = "always"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | } |