Kieran's opinionated (and probably slightly dumb) nix config
at main 63 lines 1.6 kB view raw
1{ 2 stdenvNoCC, 3 lib, 4 mdbook, 5 nixdoc, 6 fetchurl, 7 simple-http-server, 8 writeShellApplication, 9 jq, 10 # Injected from flake.nix 11 servicesManifest, 12 self, 13}: 14 15stdenvNoCC.mkDerivation (finalAttrs: { 16 name = "dunkirk-docs"; 17 src = self + /docs; 18 19 nativeBuildInputs = [ mdbook nixdoc jq ]; 20 21 buildPhase = '' 22 # Set up catppuccin theme 23 mkdir -p theme 24 cp ${finalAttrs.passthru.catppuccin-mdbook} theme/catppuccin.css 25 26 # Generate lib docs via nixdoc 27 mkdir -p src/lib 28 nixdoc -c services -d "Service utility functions" \ 29 -p "" \ 30 -f ${self + /lib/services.nix} > src/lib/services.md 31 32 # Build the lib index for SUMMARY.md injection 33 echo '- [services](lib/services.md)' > src/lib/index.md 34 35 # Inject libdoc entries into SUMMARY.md 36 substituteInPlace src/SUMMARY.md \ 37 --replace-fail "libdoc" "$(cat src/lib/index.md)" 38 39 # Build the book 40 mdbook build 41 ''; 42 43 installPhase = '' 44 cp -r ./dist $out 45 46 # Place services.json alongside the book 47 echo '${builtins.toJSON servicesManifest}' | jq . > $out/services.json 48 ''; 49 50 passthru.catppuccin-mdbook = fetchurl { 51 url = "https://github.com/catppuccin/mdBook/releases/download/v4.0.0/catppuccin.css"; 52 hash = "sha256-4IvmqQrfOSKcx6PAhGD5G7I44UN2596HECCFzzr/p/8="; 53 }; 54 55 passthru.serve = writeShellApplication { 56 name = "docs-serve"; 57 runtimeInputs = [ simple-http-server ]; 58 text = '' 59 echo "Serving docs at http://localhost:8000" 60 simple-http-server -i -p 8000 -- ${finalAttrs.finalPackage} 61 ''; 62 }; 63})