| 
									
										
										
										
											2015-02-18 19:55:07 +01:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  |   inherit (lib) mkIf mkOption singleton types; | 
					
						
							| 
									
										
										
										
											2018-09-16 15:19:29 +02:00
										 |  |  |   inherit (pkgs) coreutils; | 
					
						
							| 
									
										
										
										
											2015-02-18 19:55:07 +01:00
										 |  |  |   cfg = config.services.exim; | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ###### interface | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   options = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     services.exim = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       enable = mkOption { | 
					
						
							|  |  |  |         type = types.bool; | 
					
						
							|  |  |  |         default = false; | 
					
						
							|  |  |  |         description = "Whether to enable the Exim mail transfer agent."; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       config = mkOption { | 
					
						
							| 
									
										
										
										
											2019-08-08 22:48:27 +02:00
										 |  |  |         type = types.lines; | 
					
						
							| 
									
										
										
										
											2015-02-18 19:55:07 +01:00
										 |  |  |         default = ""; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Verbatim Exim configuration.  This should not contain exim_user, | 
					
						
							|  |  |  |           exim_group, exim_path, or spool_directory. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       user = mkOption { | 
					
						
							| 
									
										
										
										
											2019-08-08 22:48:27 +02:00
										 |  |  |         type = types.str; | 
					
						
							| 
									
										
										
										
											2015-02-18 19:55:07 +01:00
										 |  |  |         default = "exim"; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           User to use when no root privileges are required. | 
					
						
							|  |  |  |           In particular, this applies when receiving messages and when doing | 
					
						
							|  |  |  |           remote deliveries.  (Local deliveries run as various non-root users, | 
					
						
							|  |  |  |           typically as the owner of a local mailbox.) Specifying this value | 
					
						
							|  |  |  |           as root is not supported. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       group = mkOption { | 
					
						
							| 
									
										
										
										
											2019-08-08 22:48:27 +02:00
										 |  |  |         type = types.str; | 
					
						
							| 
									
										
										
										
											2015-02-18 19:55:07 +01:00
										 |  |  |         default = "exim"; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Group to use when no root privileges are required. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       spoolDir = mkOption { | 
					
						
							| 
									
										
										
										
											2019-08-08 22:48:27 +02:00
										 |  |  |         type = types.path; | 
					
						
							| 
									
										
										
										
											2015-02-18 19:55:07 +01:00
										 |  |  |         default = "/var/spool/exim"; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Location of the spool directory of exim. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-16 15:19:29 +02:00
										 |  |  |       package = mkOption { | 
					
						
							|  |  |  |         type = types.package; | 
					
						
							|  |  |  |         default = pkgs.exim; | 
					
						
							|  |  |  |         defaultText = "pkgs.exim"; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           The Exim derivation to use. | 
					
						
							|  |  |  |           This can be used to enable features such as LDAP or PAM support. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-18 19:55:07 +01:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ###### implementation | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = mkIf cfg.enable { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     environment = { | 
					
						
							|  |  |  |       etc."exim.conf".text = ''
 | 
					
						
							|  |  |  |         exim_user = ${cfg.user} | 
					
						
							|  |  |  |         exim_group = ${cfg.group} | 
					
						
							| 
									
										
										
										
											2017-01-29 04:11:01 -06:00
										 |  |  |         exim_path = /run/wrappers/bin/exim | 
					
						
							| 
									
										
										
										
											2015-02-18 19:55:07 +01:00
										 |  |  |         spool_directory = ${cfg.spoolDir} | 
					
						
							|  |  |  |         ${cfg.config} | 
					
						
							|  |  |  |       '';
 | 
					
						
							| 
									
										
										
										
											2018-09-16 15:19:29 +02:00
										 |  |  |       systemPackages = [ cfg.package ]; | 
					
						
							| 
									
										
										
										
											2015-02-18 19:55:07 +01:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-30 01:58:35 +02:00
										 |  |  |     users.users = singleton { | 
					
						
							| 
									
										
										
										
											2015-02-18 19:55:07 +01:00
										 |  |  |       name = cfg.user; | 
					
						
							|  |  |  |       description = "Exim mail transfer agent user"; | 
					
						
							|  |  |  |       uid = config.ids.uids.exim; | 
					
						
							|  |  |  |       group = cfg.group; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-30 01:58:35 +02:00
										 |  |  |     users.groups = singleton { | 
					
						
							| 
									
										
										
										
											2015-02-18 19:55:07 +01:00
										 |  |  |       name = cfg.group; | 
					
						
							|  |  |  |       gid = config.ids.gids.exim; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-16 15:19:29 +02:00
										 |  |  |     security.wrappers.exim.source = "${cfg.package}/bin/exim"; | 
					
						
							| 
									
										
										
										
											2015-02-18 19:55:07 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     systemd.services.exim = { | 
					
						
							|  |  |  |       description = "Exim Mail Daemon"; | 
					
						
							|  |  |  |       wantedBy = [ "multi-user.target" ]; | 
					
						
							| 
									
										
										
										
											2018-06-03 21:22:55 +02:00
										 |  |  |       restartTriggers = [ config.environment.etc."exim.conf".source ]; | 
					
						
							| 
									
										
										
										
											2015-02-18 19:55:07 +01:00
										 |  |  |       serviceConfig = { | 
					
						
							| 
									
										
										
										
											2018-09-16 15:19:29 +02:00
										 |  |  |         ExecStart   = "${cfg.package}/bin/exim -bdf -q30m"; | 
					
						
							| 
									
										
										
										
											2015-02-18 19:55:07 +01:00
										 |  |  |         ExecReload  = "${coreutils}/bin/kill -HUP $MAINPID"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |       preStart = ''
 | 
					
						
							|  |  |  |         if ! test -d ${cfg.spoolDir}; then | 
					
						
							|  |  |  |           ${coreutils}/bin/mkdir -p ${cfg.spoolDir} | 
					
						
							|  |  |  |           ${coreutils}/bin/chown ${cfg.user}:${cfg.group} ${cfg.spoolDir} | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |