Konstantin Unruh's personal site: notes on physics, Linux and more. Built with Quarto and published to GitHub Pages.
.
├── _quarto.yml # Site config: nav, footer, formats, theme layering
├── _brand.yml # Colours (light + dark) and fonts, applied everywhere
├── styles/site.scss # Custom styling on top of Bootstrap + brand
├── index.qmd # Homepage (custom layout, hero, latest articles)
├── _templates/ # EJS template for the homepage article list
├── assets/ # Starfield script, favicon
├── _includes/ # analytics.html (Umami snippet)
├── docs/
│ ├── physics/ # index.qmd is an auto-generated listing
│ └── linux/
└── .github/workflows/ # Render + deploy on push to `source`
Create docs/<section>/<slug>.qmd and put images in docs/<section>/<slug>-img/:
---
title: "Article title"
date: 2026-09-06
description: "One sentence shown in listings and link previews."
categories: ["Physics"] # section tag shown on the homepage
image: my-article-img/feature.jpg # optional, shown on the section page
format:
html: default
pdf: default # adds an "Other Formats: PDF" link
---Section pages and the homepage pick the article up automatically.
Python code cells run at render time and are cached under _freeze/.
Visitors' browsers talk only to this site (and Umami, see below):
- Fonts: Fira Sans and Fira Code are self-hosted from
assets/fonts/(fontsource builds), declared as@font-faceinstyles/site.scss._brand.ymlmarks themsource: systemso Quarto links no font service. - Math: MathJax 3 and its fonts are vendored under
assets/mathjax/;html-math-method.urlin_quarto.ymlpoints there. scripts/strip-remote.pyruns after each render and removes the CDN polyfill Quarto would otherwise add next to MathJax.
nix develop # or install quarto + uv yourself
uv sync
quarto previewquarto render --to html skips the PDF builds if you have no LaTeX installed.
Note: the quarto package in nixpkgs currently ships a pandoc that is too old
for Quarto 1.10 ("Unknown option syntax-highlighting"). If nix develop
fails that way, use the official tarball from the Quarto releases page instead.
Pushing to source runs .github/workflows/gh-pages.yml, which installs
Quarto with TinyTeX, renders the site, and publishes _site/ to the
gh-pages branch.
The custom domain is not stored in this repository. It lives in the
SITE_DOMAIN Actions variable (repo Settings, Secrets and variables, Actions).
CI patches site-url and writes the CNAME file from it at build time.
Page views are counted with Umami Cloud (open
source, cookie-free, no consent banner needed). The snippet lives in
_includes/analytics.html and only tracks the production domain.
See LICENSE.