73 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, lib, pkgs, ... }:
 | 
						|
 | 
						|
with lib;
 | 
						|
 | 
						|
let
 | 
						|
  cfg = config.services.fcgiwrap;
 | 
						|
in {
 | 
						|
 | 
						|
  options = {
 | 
						|
    services.fcgiwrap = {
 | 
						|
      enable = mkOption {
 | 
						|
        type = types.bool;
 | 
						|
        default = false;
 | 
						|
        description = "Whether to enable fcgiwrap, a server for running CGI applications over FastCGI.";
 | 
						|
      };
 | 
						|
 | 
						|
      preforkProcesses = mkOption {
 | 
						|
        type = types.int;
 | 
						|
        default = 1;
 | 
						|
        description = "Number of processes to prefork.";
 | 
						|
      };
 | 
						|
 | 
						|
      socketType = mkOption {
 | 
						|
        type = types.enum [ "unix" "tcp" "tcp6" ];
 | 
						|
        default = "unix";
 | 
						|
        description = "Socket type: 'unix', 'tcp' or 'tcp6'.";
 | 
						|
      };
 | 
						|
 | 
						|
      socketAddress = mkOption {
 | 
						|
        type = types.str;
 | 
						|
        default = "/run/fcgiwrap.sock";
 | 
						|
        example = "1.2.3.4:5678";
 | 
						|
        description = "Socket address. In case of a UNIX socket, this should be its filesystem path.";
 | 
						|
      };
 | 
						|
 | 
						|
      user = mkOption {
 | 
						|
        type = types.nullOr types.str;
 | 
						|
        default = null;
 | 
						|
        description = "User permissions for the socket.";
 | 
						|
      };
 | 
						|
 | 
						|
      group = mkOption {
 | 
						|
        type = types.nullOr types.str;
 | 
						|
        default = null;
 | 
						|
        description = "Group permissions for the socket.";
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  config = mkIf cfg.enable {
 | 
						|
    systemd.services.fcgiwrap = {
 | 
						|
      after = [ "nss-user-lookup.target" ];
 | 
						|
      wantedBy = optional (cfg.socketType != "unix") "multi-user.target";
 | 
						|
 | 
						|
      serviceConfig = {
 | 
						|
        ExecStart = "${pkgs.fcgiwrap}/sbin/fcgiwrap -c ${builtins.toString cfg.preforkProcesses} ${
 | 
						|
          if (cfg.socketType != "unix") then "-s ${cfg.socketType}:${cfg.socketAddress}" else ""
 | 
						|
        }";
 | 
						|
      } // (if cfg.user != null && cfg.group != null then {
 | 
						|
        User = cfg.user;
 | 
						|
        Group = cfg.group;
 | 
						|
      } else { } );
 | 
						|
    };
 | 
						|
 | 
						|
    systemd.sockets = if (cfg.socketType == "unix") then {
 | 
						|
      fcgiwrap = {
 | 
						|
        wantedBy = [ "sockets.target" ];
 | 
						|
        socketConfig.ListenStream = cfg.socketAddress;
 | 
						|
      };
 | 
						|
    } else { };
 | 
						|
  };
 | 
						|
}
 |