org is now bundled, so the expression becomes a bit simpler Change-Id: Ic287ae4500bb5a277694b66e5858a75b454cc9aa Reviewed-on: https://cl.tvl.fyi/c/depot/+/5517 Tested-by: BuildkiteCI Autosubmit: sterni <sternenseemann@systemli.org> Reviewed-by: grfn <grfn@gws.fyi>
		
			
				
	
	
		
			67 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ pkgs, depot, ... }:
 | 
						|
 | 
						|
with pkgs;
 | 
						|
with lib;
 | 
						|
 | 
						|
let
 | 
						|
 | 
						|
  emacs = pkgs.emacs28;
 | 
						|
 | 
						|
in
 | 
						|
 | 
						|
opts:
 | 
						|
 | 
						|
let
 | 
						|
  src = if isAttrs opts then opts.src else opts;
 | 
						|
  headline = if isAttrs opts then opts.headline else null;
 | 
						|
 | 
						|
  bn = builtins.baseNameOf src;
 | 
						|
  filename = elemAt (splitString "." bn) 0;
 | 
						|
 | 
						|
  outName =
 | 
						|
    if isNull headline
 | 
						|
    then
 | 
						|
      let
 | 
						|
        bn = builtins.baseNameOf src;
 | 
						|
        filename = elemAt (splitString "." bn) 0;
 | 
						|
      in
 | 
						|
      if depot.nix.utils.isDirectory src
 | 
						|
      then filename
 | 
						|
      else filename + ".html"
 | 
						|
    else "${filename}-${replaceStrings [" "] ["-"] filename}.html";
 | 
						|
 | 
						|
  escapeDoubleQuotes = replaceStrings [ "\"" ] [ "\\\"" ];
 | 
						|
 | 
						|
  navToHeadline = optionalString (! isNull headline) ''
 | 
						|
    (search-forward "${escapeDoubleQuotes headline}")
 | 
						|
    (org-narrow-to-subtree)
 | 
						|
  '';
 | 
						|
 | 
						|
in
 | 
						|
 | 
						|
runCommand outName { inherit src; } ''
 | 
						|
  buildFile() {
 | 
						|
    cp "$1" file.org
 | 
						|
    ${emacs}/bin/emacs --batch \
 | 
						|
      --load ${./config.el} \
 | 
						|
      --visit file.org \
 | 
						|
      --eval "(progn
 | 
						|
        ${escapeDoubleQuotes navToHeadline}
 | 
						|
        (org-html-export-to-html))" \
 | 
						|
      --kill
 | 
						|
    rm file.org
 | 
						|
    substitute file.html "$2" \
 | 
						|
      --replace '<title>‎</title>' ""
 | 
						|
    rm file.html
 | 
						|
  }
 | 
						|
 | 
						|
  if [ -d $src ]; then
 | 
						|
    for file in $src/*; do
 | 
						|
      result=''${file/$src/$out}
 | 
						|
      mkdir -p $(dirname $result)
 | 
						|
      buildFile $file ''${result/.org/.html}
 | 
						|
    done
 | 
						|
  else
 | 
						|
    buildFile $src $out
 | 
						|
  fi
 | 
						|
''
 |