| 
									
										
										
										
											2018-08-27 21:31:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-25 18:08:24 -04:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | with lib; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   cfg = config.services.incron; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   options = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     services.incron = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       enable = mkOption { | 
					
						
							|  |  |  |         type = types.bool; | 
					
						
							|  |  |  |         default = false; | 
					
						
							| 
									
										
										
										
											2018-08-27 21:31:55 +00:00
										 |  |  |         description = ''
 | 
					
						
							|  |  |  |           Whether to enable the incron daemon. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-31 02:52:49 +00:00
										 |  |  |           Note that commands run under incrontab only support common Nix profiles for the <envar>PATH</envar> provided variable. | 
					
						
							| 
									
										
										
										
											2018-08-27 21:31:55 +00:00
										 |  |  |         '';
 | 
					
						
							| 
									
										
										
										
											2018-08-25 18:08:24 -04:00
										 |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       allow = mkOption { | 
					
						
							|  |  |  |         type = types.nullOr (types.listOf types.str); | 
					
						
							|  |  |  |         default = null; | 
					
						
							| 
									
										
										
										
											2018-08-27 21:15:03 +00:00
										 |  |  |         description = ''
 | 
					
						
							|  |  |  |           Users allowed to use incrontab. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           If empty then no user will be allowed to have their own incrontab. | 
					
						
							| 
									
										
										
										
											2018-08-31 02:52:49 +00:00
										 |  |  |           If <literal>null</literal> then will defer to <option>deny</option>. | 
					
						
							| 
									
										
										
										
											2018-08-27 21:15:03 +00:00
										 |  |  |           If both <option>allow</option> and <option>deny</option> are null | 
					
						
							|  |  |  |           then all users will be allowed to have their own incrontab. | 
					
						
							|  |  |  |         '';
 | 
					
						
							| 
									
										
										
										
											2018-08-25 18:08:24 -04:00
										 |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       deny = mkOption { | 
					
						
							|  |  |  |         type = types.nullOr (types.listOf types.str); | 
					
						
							|  |  |  |         default = null; | 
					
						
							|  |  |  |         description = "Users forbidden from using incrontab."; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       systab = mkOption { | 
					
						
							|  |  |  |         type = types.lines; | 
					
						
							|  |  |  |         default = ""; | 
					
						
							|  |  |  |         description = "The system incrontab contents."; | 
					
						
							|  |  |  |         example = ''
 | 
					
						
							| 
									
										
										
										
											2018-08-31 02:52:49 +00:00
										 |  |  |           /var/mail IN_CLOSE_WRITE abc $@/$# | 
					
						
							|  |  |  |           /tmp IN_ALL_EVENTS efg $@/$# $& | 
					
						
							| 
									
										
										
										
											2018-08-25 18:08:24 -04:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-29 00:43:28 +00:00
										 |  |  |       extraPackages = mkOption { | 
					
						
							|  |  |  |         type = types.listOf types.package; | 
					
						
							|  |  |  |         default = []; | 
					
						
							| 
									
										
										
										
											2018-08-31 02:52:49 +00:00
										 |  |  |         example = literalExample "[ pkgs.rsync ]"; | 
					
						
							| 
									
										
										
										
											2018-08-29 00:43:28 +00:00
										 |  |  |         description = "Extra packages available to the system incrontab."; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-25 18:08:24 -04:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = mkIf cfg.enable { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-31 02:52:49 +00:00
										 |  |  |     warnings = optional (cfg.allow != null && cfg.deny != null) | 
					
						
							|  |  |  |       ''If `services.incron.allow` is set then `services.incron.deny` will be ignored.''; | 
					
						
							| 
									
										
										
										
											2018-08-28 23:50:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-25 18:08:24 -04:00
										 |  |  |     environment.systemPackages = [ pkgs.incron ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     security.wrappers.incrontab.source = "${pkgs.incron}/bin/incrontab"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-27 15:23:19 +00:00
										 |  |  |     # incron won't read symlinks | 
					
						
							|  |  |  |     environment.etc."incron.d/system" = { | 
					
						
							|  |  |  |       mode = "0444"; | 
					
						
							| 
									
										
										
										
											2018-08-31 02:52:49 +00:00
										 |  |  |       text = cfg.systab; | 
					
						
							| 
									
										
										
										
											2018-08-27 15:23:19 +00:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2018-08-25 18:08:24 -04:00
										 |  |  |     environment.etc."incron.allow" = mkIf (cfg.allow != null) { | 
					
						
							| 
									
										
										
										
											2018-08-31 02:52:49 +00:00
										 |  |  |       text = concatStringsSep "\n" cfg.allow; | 
					
						
							| 
									
										
										
										
											2018-08-25 18:08:24 -04:00
										 |  |  |     }; | 
					
						
							|  |  |  |     environment.etc."incron.deny" = mkIf (cfg.deny != null) { | 
					
						
							| 
									
										
										
										
											2018-08-31 02:52:49 +00:00
										 |  |  |       text = concatStringsSep "\n" cfg.deny; | 
					
						
							| 
									
										
										
										
											2018-08-25 18:08:24 -04:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     systemd.services.incron = { | 
					
						
							| 
									
										
										
										
											2018-08-31 02:52:49 +00:00
										 |  |  |       description = "File System Events Scheduler"; | 
					
						
							| 
									
										
										
										
											2018-08-25 18:08:24 -04:00
										 |  |  |       wantedBy = [ "multi-user.target" ]; | 
					
						
							| 
									
										
										
										
											2018-08-29 00:43:28 +00:00
										 |  |  |       path = cfg.extraPackages; | 
					
						
							| 
									
										
										
										
											2018-08-25 18:08:24 -04:00
										 |  |  |       serviceConfig.PIDFile = "/run/incrond.pid"; | 
					
						
							| 
									
										
										
										
											2018-08-31 02:52:49 +00:00
										 |  |  |       serviceConfig.ExecStartPre = "${pkgs.coreutils}/bin/mkdir -m 710 -p /var/spool/incron"; | 
					
						
							| 
									
										
										
										
											2018-08-31 03:03:04 +00:00
										 |  |  |       serviceConfig.ExecStart = "${pkgs.incron}/bin/incrond --foreground"; | 
					
						
							| 
									
										
										
										
											2018-08-25 18:08:24 -04:00
										 |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |