76 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, pkgs, lib, ... }:
 | 
						|
 | 
						|
let
 | 
						|
  inherit (pkgs) mercurial;
 | 
						|
  inherit (lib) mkOption;
 | 
						|
 | 
						|
  urlPrefix = config.urlPrefix;
 | 
						|
 | 
						|
  cgi = pkgs.stdenv.mkDerivation {
 | 
						|
    name = "mercurial-cgi";
 | 
						|
    buildCommand = ''
 | 
						|
      mkdir -p $out
 | 
						|
      cp -v ${mercurial}/share/cgi-bin/hgweb.cgi $out
 | 
						|
      sed -i "s|/path/to/repo/or/config|$out/hgweb.config|" $out/hgweb.cgi
 | 
						|
      echo "
 | 
						|
      [collections]
 | 
						|
      ${config.dataDir} = ${config.dataDir}
 | 
						|
      [web]
 | 
						|
      style = gitweb
 | 
						|
      allow_push = *
 | 
						|
      " > $out/hgweb.config
 | 
						|
    '';
 | 
						|
  };
 | 
						|
 | 
						|
in {
 | 
						|
 | 
						|
  extraConfig = ''
 | 
						|
    RewriteEngine on
 | 
						|
    RewriteRule /(.*) ${cgi}/hgweb.cgi/$1
 | 
						|
 | 
						|
    <Location "${urlPrefix}">
 | 
						|
        AuthType Basic
 | 
						|
        AuthName "Mercurial repositories"
 | 
						|
        AuthUserFile ${config.dataDir}/hgusers
 | 
						|
        <LimitExcept GET>
 | 
						|
            Require valid-user
 | 
						|
        </LimitExcept>
 | 
						|
    </Location>
 | 
						|
    <Directory "${cgi}">
 | 
						|
        Order allow,deny
 | 
						|
        Allow from all
 | 
						|
        AllowOverride All
 | 
						|
        Options ExecCGI
 | 
						|
        AddHandler cgi-script .cgi
 | 
						|
        PassEnv PYTHONPATH
 | 
						|
    </Directory>
 | 
						|
  '';
 | 
						|
 | 
						|
  robotsEntries = ''
 | 
						|
    User-agent: *
 | 
						|
    Disallow: ${urlPrefix}
 | 
						|
  '';
 | 
						|
 | 
						|
  extraServerPath = [ pkgs.python ];
 | 
						|
 | 
						|
  globalEnvVars = [ { name = "PYTHONPATH"; value = "${mercurial}/lib/${pkgs.python.libPrefix}/site-packages"; } ];
 | 
						|
 | 
						|
  options = {
 | 
						|
    urlPrefix = mkOption {
 | 
						|
      default = "/hg";
 | 
						|
      description = "
 | 
						|
        The URL prefix under which the Mercurial service appears.
 | 
						|
        Use the empty string to have it appear in the server root.
 | 
						|
      ";
 | 
						|
    };
 | 
						|
 | 
						|
    dataDir = mkOption {
 | 
						|
      example = "/data/mercurial";
 | 
						|
      description = "
 | 
						|
        Path to the directory that holds the repositories.
 | 
						|
      ";
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
}
 |