This CL can be used to compare the style of nixpkgs-fmt against other formatters (nixpkgs, alejandra). Change-Id: I87c6abff6bcb546b02ead15ad0405f81e01b6d9e Reviewed-on: https://cl.tvl.fyi/c/depot/+/4397 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: lukegb <lukegb@tvl.fyi> Reviewed-by: wpcarro <wpcarro@gmail.com> Reviewed-by: Profpatsch <mail@profpatsch.de> Reviewed-by: kanepyork <rikingcoding@gmail.com> Reviewed-by: tazjin <tazjin@tvl.su> Reviewed-by: cynthia <cynthia@tvl.fyi> Reviewed-by: edef <edef@edef.eu> Reviewed-by: eta <tvl@eta.st> Reviewed-by: grfn <grfn@gws.fyi>
		
			
				
	
	
		
			103 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ depot, pkgs, lib, ... }:
 | 
						|
 | 
						|
let
 | 
						|
  inherit (pkgs)
 | 
						|
    gzip
 | 
						|
    mandoc
 | 
						|
    coreutils
 | 
						|
    ;
 | 
						|
 | 
						|
  inherit (depot.nix)
 | 
						|
    runExecline
 | 
						|
    getBins
 | 
						|
    ;
 | 
						|
 | 
						|
  bins = getBins mandoc [ "mandoc" ]
 | 
						|
    // getBins gzip [ "gzip" ]
 | 
						|
    // getBins coreutils [ "mkdir" "ln" "cp" ]
 | 
						|
  ;
 | 
						|
 | 
						|
  defaultGzip = true;
 | 
						|
 | 
						|
  basename = gzip: { name, section, ... }:
 | 
						|
    "${name}.${toString section}${lib.optionalString gzip ".gz"}";
 | 
						|
 | 
						|
  manDir = { section, ... }:
 | 
						|
    "\${out}/share/man/man${toString section}";
 | 
						|
 | 
						|
  target = gzip: args:
 | 
						|
    "${manDir args}/${basename gzip args}";
 | 
						|
 | 
						|
  buildManPage =
 | 
						|
    { requireLint ? false
 | 
						|
    , gzip ? defaultGzip
 | 
						|
    , ...
 | 
						|
    }:
 | 
						|
    { content
 | 
						|
    , ...
 | 
						|
    }@page:
 | 
						|
    let
 | 
						|
      source = builtins.toFile (basename false page) content;
 | 
						|
    in
 | 
						|
    runExecline (basename gzip page) { } ([
 | 
						|
      (if requireLint then "if" else "foreground")
 | 
						|
      [
 | 
						|
        bins.mandoc
 | 
						|
        "-mdoc"
 | 
						|
        "-T"
 | 
						|
        "lint"
 | 
						|
        source
 | 
						|
      ]
 | 
						|
      "importas"
 | 
						|
      "out"
 | 
						|
      "out"
 | 
						|
    ] ++ (if gzip then [
 | 
						|
      "redirfd"
 | 
						|
      "-w"
 | 
						|
      "1"
 | 
						|
      "$out"
 | 
						|
      bins.gzip
 | 
						|
      "-c"
 | 
						|
      source
 | 
						|
    ] else [
 | 
						|
      bins.cp
 | 
						|
      "--reflink=auto"
 | 
						|
      source
 | 
						|
      "$out"
 | 
						|
    ]));
 | 
						|
 | 
						|
  buildManPages =
 | 
						|
    name:
 | 
						|
    { derivationArgs ? { }
 | 
						|
    , gzip ? defaultGzip
 | 
						|
    , ...
 | 
						|
    }@args:
 | 
						|
    pages:
 | 
						|
    runExecline "${name}-man-pages"
 | 
						|
      {
 | 
						|
        inherit derivationArgs;
 | 
						|
      }
 | 
						|
      ([
 | 
						|
        "importas"
 | 
						|
        "out"
 | 
						|
        "out"
 | 
						|
      ] ++ lib.concatMap
 | 
						|
        ({ name, section, content }@page: [
 | 
						|
          "if"
 | 
						|
          [ bins.mkdir "-p" (manDir page) ]
 | 
						|
          "if"
 | 
						|
          [
 | 
						|
            bins.ln
 | 
						|
            "-s"
 | 
						|
            (buildManPage args page)
 | 
						|
            (target gzip page)
 | 
						|
          ]
 | 
						|
        ])
 | 
						|
        pages);
 | 
						|
 | 
						|
in
 | 
						|
{
 | 
						|
  __functor = _: buildManPages;
 | 
						|
 | 
						|
  single = buildManPage;
 | 
						|
}
 |