Kieran's opinionated (and probably slightly dumb) nix config
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})