 9536169074
			
		
	
	
		9536169074
		
			
		
	
	
	
	
		
			
			They contain no useful information and increase the length of the autogenerated options documentation. See discussion in #18816.
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, lib, pkgs, ... }:
 | |
| 
 | |
| with lib;
 | |
| 
 | |
| let 
 | |
|   cfg = config.services.rsnapshot;
 | |
|   cfgfile = pkgs.writeText "rsnapshot.conf" ''
 | |
|     config_version	1.2
 | |
|     cmd_cp	${pkgs.coreutils}/bin/cp
 | |
|     cmd_rm	${pkgs.coreutils}/bin/rm
 | |
|     cmd_rsync	${pkgs.rsync}/bin/rsync
 | |
|     cmd_ssh	${pkgs.openssh}/bin/ssh
 | |
|     cmd_logger	${pkgs.inetutils}/bin/logger
 | |
|     cmd_du	${pkgs.coreutils}/bin/du
 | |
|     cmd_rsnapshot_diff	${pkgs.rsnapshot}/bin/rsnapshot-diff
 | |
|     lockfile	/run/rsnapshot.pid
 | |
|     link_dest	1
 | |
| 
 | |
|     ${cfg.extraConfig}
 | |
|   '';
 | |
| in
 | |
| {
 | |
|   options = {
 | |
|     services.rsnapshot = {
 | |
|       enable = mkEnableOption "rsnapshot backups";
 | |
|       enableManualRsnapshot = mkOption {
 | |
|         description = "Whether to enable manual usage of the rsnapshot command with this module.";
 | |
|         default = true;
 | |
|         type = types.bool;
 | |
|       };
 | |
| 
 | |
|       extraConfig = mkOption {
 | |
|         default = "";
 | |
|         example = ''
 | |
|           retains	hourly	24
 | |
|           retain	daily	365
 | |
|           backup	/home/	localhost/
 | |
|         '';
 | |
|         type = types.lines;
 | |
|         description = ''
 | |
|           rsnapshot configuration option in addition to the defaults from
 | |
|           rsnapshot and this module.
 | |
| 
 | |
|           Note that tabs are required to separate option arguments, and
 | |
|           directory names require trailing slashes.
 | |
| 
 | |
|           The "extra" in the option name might be a little misleading right
 | |
|           now, as it is required to get a functional configuration.
 | |
|         '';
 | |
|       };
 | |
| 
 | |
|       cronIntervals = mkOption {
 | |
|         default = {};
 | |
|         example = { hourly = "0 * * * *"; daily = "50 21 * * *"; };
 | |
|         type = types.attrsOf types.string;
 | |
|         description = ''
 | |
|           Periodicity at which intervals should be run by cron.
 | |
|           Note that the intervals also have to exist in configuration
 | |
|           as retain options.
 | |
|         '';
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   config = mkIf cfg.enable (mkMerge [
 | |
|     {
 | |
|       services.cron.systemCronJobs =
 | |
|         mapAttrsToList (interval: time: "${time} root ${pkgs.rsnapshot}/bin/rsnapshot -c ${cfgfile} ${interval}") cfg.cronIntervals;
 | |
|     }
 | |
|     (mkIf cfg.enableManualRsnapshot {
 | |
|       environment.systemPackages = [ pkgs.rsnapshot ];
 | |
|       environment.etc."rsnapshot.conf".source = cfgfile;
 | |
|     })
 | |
|   ]);
 | |
| }
 |