| 
									
										
										
										
											2018-04-07 21:23:04 +02:00
										 |  |  | { config, pkgs, lib, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | with lib; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  |   cfg = config.services.duplicati; | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   options = { | 
					
						
							|  |  |  |     services.duplicati = { | 
					
						
							|  |  |  |       enable = mkEnableOption "Duplicati"; | 
					
						
							| 
									
										
										
										
											2018-05-24 23:35:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |       port = mkOption { | 
					
						
							|  |  |  |         default = 8200; | 
					
						
							|  |  |  |         type = types.int; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Port serving the web interface | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       interface = mkOption { | 
					
						
							| 
									
										
										
										
											2019-06-22 20:25:43 +02:00
										 |  |  |         default = "127.0.0.1"; | 
					
						
							| 
									
										
										
										
											2018-05-24 23:35:53 +02:00
										 |  |  |         type = types.str; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Listening interface for the web UI | 
					
						
							|  |  |  |           Set it to "any" to listen on all available interfaces | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2019-06-25 14:28:03 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |       user = mkOption { | 
					
						
							|  |  |  |         default = "duplicati"; | 
					
						
							|  |  |  |         type = types.str; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Duplicati runs as it's own user. It will only be able to backup world-readable files. | 
					
						
							|  |  |  |           Run as root with special care. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2018-04-07 21:23:04 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = mkIf cfg.enable { | 
					
						
							|  |  |  |     environment.systemPackages = [ pkgs.duplicati ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     systemd.services.duplicati = { | 
					
						
							|  |  |  |       description = "Duplicati backup"; | 
					
						
							|  |  |  |       after = [ "network.target" ]; | 
					
						
							|  |  |  |       wantedBy = [ "multi-user.target" ]; | 
					
						
							|  |  |  |       serviceConfig = { | 
					
						
							| 
									
										
										
										
											2019-06-25 14:28:03 +02:00
										 |  |  |         User = cfg.user; | 
					
						
							| 
									
										
										
										
											2018-04-07 21:23:04 +02:00
										 |  |  |         Group = "duplicati"; | 
					
						
							| 
									
										
										
										
											2019-06-27 14:15:21 +02:00
										 |  |  |         StateDirectory = "duplicati"; | 
					
						
							| 
									
										
										
										
											2018-05-24 23:35:53 +02:00
										 |  |  |         ExecStart = "${pkgs.duplicati}/bin/duplicati-server --webservice-interface=${cfg.interface} --webservice-port=${toString cfg.port} --server-datafolder=/var/lib/duplicati"; | 
					
						
							| 
									
										
										
										
											2018-04-07 21:23:04 +02:00
										 |  |  |         Restart = "on-failure"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-25 14:28:03 +02:00
										 |  |  |     users.users.duplicati = lib.optionalAttrs (cfg.user == "duplicati") { | 
					
						
							| 
									
										
										
										
											2018-04-07 21:23:04 +02:00
										 |  |  |       uid = config.ids.uids.duplicati; | 
					
						
							|  |  |  |       home = "/var/lib/duplicati"; | 
					
						
							|  |  |  |       createHome = true; | 
					
						
							|  |  |  |       group = "duplicati"; | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2018-06-30 01:58:35 +02:00
										 |  |  |     users.groups.duplicati.gid = config.ids.gids.duplicati; | 
					
						
							| 
									
										
										
										
											2018-04-07 21:23:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 |