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}
 | 
						|
        '';
 | 
						|
      };
 | 
						|
    };
 | 
						|
  }
 | 
						|
 |