summaryrefslogtreecommitdiff
path: root/docs/typ/style.typ
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-10-01 12:41:34 -0300
committerGabriel Schneider <[email protected]>2026-10-01 12:41:34 -0300
commit3c1668e02395d41bb83a4df3d85bf47a7bbdbef4 (patch)
tree93c25d9365a0800703f5f9ec2d81fe6acec59b3a /docs/typ/style.typ
parent9a7830c62d25d83754bd58d0e705501f71656c69 (diff)
downloadpardes-3c1668e02395d41bb83a4df3d85bf47a7bbdbef4.tar.gz
pardes-3c1668e02395d41bb83a4df3d85bf47a7bbdbef4.zip
The landing leads with live text and plays terminal casts first; the Themes page gets a gallery; install starts at the clone
The landing's own words sit in one `landing` record in site.typ: a lead on the core idea (any text is live: right-click looks, middle-click runs), where it runs, and a status line whose version is read from build.zig.zon. Recordings come in two shelves: "In a terminal", asciicast players from docs/site/casts/casts.toml (the first autoplays; all loop and fit the width; data inline, so they play from file://), then "In its own window", the GUI clips. asciinema-player 3.17.0 is vendored in docs/site/player with its Apache-2.0 licence, from `npm pack`. The Themes page shows #theme-gallery() from media/themes/themes.toml, a thumbnail per theme opening the full picture; on paper it is nothing. Both shelves and the gallery show placeholders until their files exist. `project` in style.typ lists the mirrors (sourcehut, git.0x4200.cafe); install.typ clones from the first and names them all, and the footer links each. The README clones before it builds. The scripting interface is a virtual filesystem served over 9P, never just a filesystem, in the tagline, captions and README. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'docs/typ/style.typ')
-rw-r--r--docs/typ/style.typ39
1 files changed, 34 insertions, 5 deletions
diff --git a/docs/typ/style.typ b/docs/typ/style.typ
index ed713537..065cc210 100644
--- a/docs/typ/style.typ
+++ b/docs/typ/style.typ
@@ -59,8 +59,8 @@
(id: "building", title: "Building, for contributors", file: "building.typ"),
)
-/// The one-line pitch: the A4 sheet's header and the site's landing page.
-#let tagline = "acme's tags and three buttons, helix's keys, terminals as panes, the editor as a 9P filesystem"
+/// The one-line pitch: the A4 sheet's header and the book's title page.
+#let tagline = "acme's tags and three buttons, helix's keys, terminals as panes, the editor as a virtual filesystem over 9P"
/// The tutor, shown as it is in the editor (`Tutor`), from the repo root.
#let tutor-path = "/src/tutor.txt"
@@ -254,9 +254,16 @@
}
}
-/// Where pardes lives and under what licence, for the site's footer (and
-/// any output that wants them). none until decided.
-#let project = (source: "https://git.0x4200.cafe/pardes", license: "ISC")
+/// Where pardes lives and under what licence: install.typ, the site's
+/// landing and its footer all read it. Every mirror holds the same tree;
+/// the first is the one the install line clones. A new mirror is one line.
+#let project = (
+ mirrors: (
+ (name: "sourcehut", web: "https://git.sr.ht/~gbrls/pardes", clone: "https://git.sr.ht/~gbrls/pardes"),
+ (name: "git.0x4200.cafe", web: "https://git.0x4200.cafe/pardes", clone: "https://git.0x4200.cafe/pardes.git"),
+ ),
+ license: "ISC",
+)
/// A glossary: like #pairs, under its own heading. On paper the heading
/// and the table; in HTML a <details> that starts closed, its summary the
@@ -270,3 +277,25 @@
[#heading(title) #lbl]
pairs(..cells)
}
+
+/// Every theme as a picture, on the site's Themes page; nothing on paper,
+/// where forty-odd screenshots would only add weight. Reads
+/// docs/site/media/themes/themes.toml: `ready` (absent means true) and a
+/// [[theme]] per theme, in NextColor's order, with `name`, `file` (under
+/// media/themes/) and `kind` ("light" or "dark").
+#let theme-gallery() = context if html-out() {
+ let g = toml("../site/media/themes/themes.toml")
+ let ready = g.at("ready", default: true)
+ heading[Every theme]
+ html.elem("div", attrs: (class: "gallery"), for t in g.theme {
+ let src = "media/themes/" + t.file
+ html.elem("figure", attrs: (class: "shot " + t.kind), {
+ if ready {
+ html.elem("a", attrs: (href: src), html.elem("img", attrs: (src: src, alt: t.name + " (" + t.kind + ")", loading: "lazy")))
+ } else {
+ html.elem("div", attrs: (class: "pending"), "screenshot to come")
+ }
+ html.elem("figcaption", raw(t.name))
+ })
+ })
+}