103 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			103 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| 
								 | 
							
								{ config, pkgs, lib, nodes, ... }:
							 | 
						||
| 
								 | 
							
								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;
							 | 
						||
| 
								 | 
							
								        after = [ "network-interfaces.target" ];
							 | 
						||
| 
								 | 
							
								        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 = ''
							 | 
						||
| 
								 | 
							
								        mkdir -p ${cfg.dataDir}
							 | 
						||
| 
								 | 
							
								        chown ${cfg.user} ${cfg.dataDir}
							 | 
						||
| 
								 | 
							
								        '';
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 |