clan-homepage/flake-parts/website.nix
DavHau db4b0a2e7d
All checks were successful
check / test (pull_request) Successful in 18s
generate options docs for clanCore and clanModules
2024-03-31 12:42:23 +07:00

76 lines
2.4 KiB
Nix

{
self,
inputs,
...
}: {
perSystem = {
lib,
pkgs,
self',
inputs',
...
}: let
build = baseUrl: pkgs.runCommand "website" {
buildInputs = [ pkgs.zola ];
} ''
mkdir -p $out
cp -r ${self}/* .
chmod -R u+w .
substituteInPlace config.toml --replace \
'base_url = "https://clan.lol"' \
'base_url = "${baseUrl}"' \
# generates a zola compatible .md from a clan-core/docs/**/*.md
generatePage() {
local sourceFile="$1"
local targetFile="$2"
# generate title by reading first non-empty line of $file and stripping all '#' symbols
title=$(sed -n '/./{p;q}' "$sourceFile" | sed 's/#*//g')
echo "generating page from clan-core: $title"
# generate header with title, template, weight to make zola happy
echo -e "+++\ntitle = \"$title\"\ntemplate = \"docs/page.html\"\nweight = 0\n+++" > "$targetFile"
# append everything from the file but remove header line starting with '#' and all preceding non-empty lines
tail -n +2 "$sourceFile" >> "$targetFile"
}
# inject pages from clan-core
for dir in ${inputs.clan-core}/docs/*; do
subdir=$(basename $dir)
targetDir="content/docs/$subdir"
mkdir -p "$targetDir"
for file in ${inputs.clan-core}/docs/$subdir/*.md; do
target="content/docs/$subdir/$(basename $file)"
# only generate page if file doesn't start with _
if [[ $(basename $file) == _* ]]; then
cat "$file" > "$target"
continue
fi
generatePage "$file" "$target"
done
done
# inject nixos options docs for clanCore
cp -r ${inputs'.clan-core.packages.docs-zola-pages-core} content/docs/core-options
# inject nixos options docs for clanModules
cp -r ${inputs'.clan-core.packages.docs-zola-pages-modules} content/docs/modules-options
zola build
cp -r public/* public/.* $out
'';
in {
packages.default = self'.packages.website;
packages.website = build "https://clan.lol";
packages.website-localhost = build "http://localhost:1111";
packages.serve = pkgs.writeShellScriptBin "serve-local" ''
echo "serving: ${self'.packages.website-localhost}"
${pkgs.python3}/bin/python -m http.server 1111 \
-d ${self'.packages.website-localhost}
'';
};
}