Yggdrasil

Personal knowledge base built as a static website with Calepin, a Typst-based static site generator.

Layout

  • site/ — website sources: calepin.toml + .typ pages
  • public/ — generated site (gitignored)
  • tools/ — pinned calepin and typst binaries (gitignored, downloaded on demand)
  • scripts/ — helper scripts used by the Justfile and CI
  • legacy_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

  1. Create site/<category>/ with an index.typ, using #metadata((title: "Overview", ...)) for its sidebar label.
  2. Add a [[sidebar.section]] named after the category in calepin.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.

S
Description
No description provided
Readme
82 MiB
0 Stars 1 Watchers 0 Forks
Languages
HTML 51.7%
Typst 24.1%
JavaScript 14.3%
Shell 7.4%
Just 2.5%