`configFile` is chosen to match the terminology used in NixOS modules. I think this is quite useful since you can do a lot via the config file since you can not only set the HTML export setting via the org file header, but also through various emacs variables (see <https://orgmode.org/manual/HTML-specific-export-settings.html>). Change-Id: If4d66348e3043f62782106e7fd34f5cf5c7071a4 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12651 Reviewed-by: aspen <root@gws.fyi> Autosubmit: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
		
			
				
	
	
		
			62 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { pkgs, depot, ... }:
 | |
| 
 | |
| with pkgs;
 | |
| with lib;
 | |
| 
 | |
| opts:
 | |
| 
 | |
| let
 | |
|   src = if isAttrs opts then opts.src else opts;
 | |
|   headline = if isAttrs opts then opts.headline else null;
 | |
|   configFile = opts.configFile or ./config.el;
 | |
| 
 | |
|   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
 | |
|     ${pkgs.emacs}/bin/emacs --batch \
 | |
|       --load ${configFile} \
 | |
|       --visit file.org \
 | |
|       --eval "(progn
 | |
|         ${escapeDoubleQuotes navToHeadline}
 | |
|         (org-html-export-to-html))" \
 | |
|       --kill
 | |
|     rm file.org
 | |
|     substitute file.html "$2" \
 | |
|       --replace-quiet '<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
 | |
| ''
 |