| 
									
										
										
										
											2018-07-20 20:56:59 +00:00
										 |  |  | { config, pkgs, lib, ... }: | 
					
						
							| 
									
										
										
										
											2016-04-20 09:32:11 +02:00
										 |  |  | with lib; | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  |   cfg = config.services.zerobin; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   zerobin_config = pkgs.writeText "zerobin-config.py" ''
 | 
					
						
							|  |  |  |   PASTE_FILES_ROOT = "${cfg.dataDir}" | 
					
						
							|  |  |  |   ${cfg.extraConfig} | 
					
						
							|  |  |  |   '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     options = { | 
					
						
							|  |  |  |       services.zerobin = { | 
					
						
							|  |  |  |         enable = mkEnableOption "0bin"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         dataDir = mkOption { | 
					
						
							|  |  |  |           type = types.str; | 
					
						
							|  |  |  |           default = "/var/lib/zerobin"; | 
					
						
							|  |  |  |           description = ''
 | 
					
						
							|  |  |  |           Path to the 0bin data directory | 
					
						
							|  |  |  |           '';
 | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         user = mkOption { | 
					
						
							|  |  |  |           type = types.str; | 
					
						
							|  |  |  |           default = "zerobin"; | 
					
						
							|  |  |  |           description = ''
 | 
					
						
							|  |  |  |           The user 0bin should run as | 
					
						
							|  |  |  |           '';
 | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         group = mkOption { | 
					
						
							|  |  |  |           type = types.str; | 
					
						
							|  |  |  |           default = "zerobin"; | 
					
						
							|  |  |  |           description = ''
 | 
					
						
							|  |  |  |           The group 0bin should run as | 
					
						
							|  |  |  |           '';
 | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         listenPort = mkOption { | 
					
						
							|  |  |  |           type = types.int; | 
					
						
							|  |  |  |           default = 8000; | 
					
						
							|  |  |  |           example = 1357; | 
					
						
							|  |  |  |           description = ''
 | 
					
						
							|  |  |  |           The port zerobin should listen on | 
					
						
							|  |  |  |           '';
 | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         listenAddress = mkOption { | 
					
						
							|  |  |  |           type = types.str; | 
					
						
							|  |  |  |           default = "localhost"; | 
					
						
							|  |  |  |           example = "127.0.0.1"; | 
					
						
							|  |  |  |           description = ''
 | 
					
						
							|  |  |  |           The address zerobin should listen to | 
					
						
							|  |  |  |           '';
 | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         extraConfig = mkOption { | 
					
						
							|  |  |  |           type = types.lines; | 
					
						
							|  |  |  |           default = ""; | 
					
						
							|  |  |  |           example = ''
 | 
					
						
							|  |  |  |           MENU = ( | 
					
						
							|  |  |  |           ('Home', '/'), | 
					
						
							|  |  |  |           ) | 
					
						
							|  |  |  |           COMPRESSED_STATIC_FILE = True | 
					
						
							|  |  |  |           '';
 | 
					
						
							|  |  |  |           description = ''
 | 
					
						
							|  |  |  |           Extra configuration to be appended to the 0bin config file | 
					
						
							|  |  |  |           (see https://0bin.readthedocs.org/en/latest/en/options.html) | 
					
						
							|  |  |  |           '';
 | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     config = mkIf (cfg.enable) { | 
					
						
							|  |  |  |       users.users."${cfg.user}" = | 
					
						
							|  |  |  |       if cfg.user == "zerobin" then { | 
					
						
							|  |  |  |         isSystemUser = true; | 
					
						
							|  |  |  |         group = cfg.group; | 
					
						
							|  |  |  |         home = cfg.dataDir; | 
					
						
							|  |  |  |         createHome = true; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       else {}; | 
					
						
							|  |  |  |       users.groups."${cfg.group}" = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       systemd.services.zerobin = { | 
					
						
							|  |  |  |         enable = true; | 
					
						
							| 
									
										
										
										
											2016-09-10 20:19:35 +02:00
										 |  |  |         after = [ "network.target" ]; | 
					
						
							| 
									
										
										
										
											2016-04-20 09:32:11 +02:00
										 |  |  |         wantedBy = [ "multi-user.target" ]; | 
					
						
							|  |  |  |         serviceConfig.ExecStart = "${pkgs.pythonPackages.zerobin}/bin/zerobin ${cfg.listenAddress} ${toString cfg.listenPort} false ${cfg.user} ${cfg.group} ${zerobin_config}"; | 
					
						
							|  |  |  |         serviceConfig.PrivateTmp="yes"; | 
					
						
							|  |  |  |         serviceConfig.User = cfg.user; | 
					
						
							|  |  |  |         serviceConfig.Group = cfg.group; | 
					
						
							|  |  |  |         preStart = ''
 | 
					
						
							| 
									
										
										
										
											2016-09-08 22:19:43 +02:00
										 |  |  |           mkdir -p ${cfg.dataDir} | 
					
						
							|  |  |  |           chown ${cfg.user} ${cfg.dataDir} | 
					
						
							| 
									
										
										
										
											2016-04-20 09:32:11 +02:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 |