eb995c7b690d1795ce413c86555bb076ecea0b21
Yggdrasil
Personal knowledge base built as a static website with Calepin, a Typst-based static site generator.
Layout
site/— website sources:calepin.toml+.typpagespublic/— generated site (gitignored)tools/— pinnedcalepinandtypstbinaries (gitignored, downloaded on demand)scripts/— helper scripts used by the Justfile and CIlegacy_docs/— the old Docsify documentation, kept unmodified for reference
Quick start
just is the only prerequisite — the toolchain is downloaded and
checksum-verified into tools/ on first use (no global installs, no cargo):
just # list recipes
just tools # download the pinned toolchain into tools/
just build # compile site/ into public/
just preview # build, then serve the site locally
just watch # rebuild on change and serve
just clean # remove public/ and build caches
Adding a page
Create site/<category>/<page>.typ:
#set document(title: [Page title])
#metadata((title: "Page title", translation_key: "category-page")) <website-metadata>
#title()
= Page title
Content…
and reference it in site/calepin.toml:
[[sidebar.section.item]]
target = "<category>/<page>.typ"
Sidebar labels come from the page's #metadata(...) line, not from the config.
Adding a category
- Create
site/<category>/with anindex.typ, using#metadata((title: "Overview", ...))for its sidebar label. - Add a
[[sidebar.section]]named after the category incalepin.toml, listing the index page and its sub-pages.
Deployment
just build produces a fully static site in public/: HTML pages plus
sitemap.xml, robots.txt, and llms.txt. The Gitea Actions workflow in
.gitea/workflows/build.yml builds the site on every push with the same
pinned toolchain and uploads public/ as an artifact for deployment to any
static host.
Languages
HTML
51.7%
Typst
24.1%
JavaScript
14.3%
Shell
7.4%
Just
2.5%