|
@ -35,7 +35,7 @@ export default defineConfig({
|
||||||
shikiConfig: { theme: "css-variables" },
|
shikiConfig: { theme: "css-variables" },
|
||||||
remarkPlugins: [
|
remarkPlugins: [
|
||||||
() => remarkAgda({ outDir, base, publicDir }),
|
() => remarkAgda({ outDir, base, publicDir }),
|
||||||
remarkMath,
|
[remarkMath, {}],
|
||||||
[remarkAdmonitions, mkdocsConfig],
|
[remarkAdmonitions, mkdocsConfig],
|
||||||
remarkReadingTime,
|
remarkReadingTime,
|
||||||
remarkTypst,
|
remarkTypst,
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
include: src/content/posts src
|
include: src/posts src
|
||||||
depend: standard-library cubical
|
depend: standard-library cubical
|
||||||
|
|
32
package.json
|
@ -12,18 +12,18 @@
|
||||||
"format": "prettier -w ."
|
"format": "prettier -w ."
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/markdoc": "^0.11.1",
|
"@astrojs/markdoc": "^0.12.4",
|
||||||
"@astrojs/markdown-remark": "^5.1.1",
|
"@astrojs/markdown-remark": "^6.0.1",
|
||||||
"@astrojs/mdx": "^1.1.5",
|
"@astrojs/mdx": "^4.0.3",
|
||||||
"@astrojs/rss": "^3.0.0",
|
"@astrojs/rss": "^4.0.10",
|
||||||
"@astrojs/sitemap": "^3.1.6",
|
"@astrojs/sitemap": "^3.2.1",
|
||||||
"@justfork/rehype-autolink-headings": "^5.1.1",
|
"@justfork/rehype-autolink-headings": "^5.1.1",
|
||||||
"astro": "^3.6.5",
|
"astro": "^5.1.1",
|
||||||
"astro-imagetools": "^0.9.0",
|
"astro-imagetools": "^0.9.0",
|
||||||
"astro-remark-description": "^1.1.2",
|
"astro-remark-description": "^1.1.2",
|
||||||
"classnames": "^2.5.1",
|
"classnames": "^2.5.1",
|
||||||
"fork-awesome": "^1.2.0",
|
"fork-awesome": "^1.2.0",
|
||||||
"katex": "^0.16.10",
|
"katex": "^0.16.18",
|
||||||
"lodash-es": "^4.17.21",
|
"lodash-es": "^4.17.21",
|
||||||
"mdast-util-to-string": "^4.0.0",
|
"mdast-util-to-string": "^4.0.0",
|
||||||
"nanoid": "^4.0.2",
|
"nanoid": "^4.0.2",
|
||||||
|
@ -32,24 +32,24 @@
|
||||||
"rehype-katex": "^6.0.3",
|
"rehype-katex": "^6.0.3",
|
||||||
"remark-emoji": "^4.0.1",
|
"remark-emoji": "^4.0.1",
|
||||||
"remark-github-beta-blockquote-admonitions": "^2.2.1",
|
"remark-github-beta-blockquote-admonitions": "^2.2.1",
|
||||||
"remark-math": "^5.1.1",
|
"remark-math": "^6.0.0",
|
||||||
"remark-parse": "^10.0.2",
|
"remark-parse": "^10.0.2",
|
||||||
"sanitize-html": "^2.13.1",
|
"sanitize-html": "^2.14.0",
|
||||||
"sharp": "^0.33.4"
|
"sharp": "^0.33.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "^1.8.2",
|
"@biomejs/biome": "^1.9.4",
|
||||||
"@types/lodash-es": "^4.17.12",
|
"@types/lodash-es": "^4.17.12",
|
||||||
"@types/sanitize-html": "^2.13.0",
|
"@types/sanitize-html": "^2.13.0",
|
||||||
"date-fns": "^2.30.0",
|
"date-fns": "^2.30.0",
|
||||||
"hast-util-from-html": "^2.0.1",
|
"hast-util-from-html": "^2.0.3",
|
||||||
"hast-util-to-html": "^9.0.1",
|
"hast-util-to-html": "^9.0.4",
|
||||||
"mdast": "^3.0.0",
|
"mdast": "^3.0.0",
|
||||||
"mdast-util-from-markdown": "^2.0.1",
|
"mdast-util-from-markdown": "^2.0.2",
|
||||||
"prettier": "^3.3.2",
|
"prettier": "^3.4.2",
|
||||||
"prettier-plugin-astro": "^0.12.3",
|
"prettier-plugin-astro": "^0.12.3",
|
||||||
"rehype-slug": "^6.0.0",
|
"rehype-slug": "^6.0.0",
|
||||||
"sass": "^1.77.6",
|
"sass": "^1.83.0",
|
||||||
"shiki": "^0.14.7",
|
"shiki": "^0.14.7",
|
||||||
"unified": "^11.0.5",
|
"unified": "^11.0.5",
|
||||||
"unist-util-visit": "^5.0.0"
|
"unist-util-visit": "^5.0.0"
|
||||||
|
|
5166
pnpm-lock.yaml
|
@ -59,7 +59,7 @@ const sortedPosts = sortBy(allPosts, (post) => -post.data.date);
|
||||||
<tr class="row">
|
<tr class="row">
|
||||||
<td>
|
<td>
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<a href={`${basePath}/${post.slug}/`} class="brand-colorlink">
|
<a href={`${basePath}/${post.id}/`} class="brand-colorlink">
|
||||||
{post.data.title}
|
{post.data.title}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import { defineCollection, z } from "astro:content";
|
import { defineCollection, z } from "astro:content";
|
||||||
|
import { glob, file } from "astro/loaders";
|
||||||
|
|
||||||
const posts = defineCollection({
|
const posts = defineCollection({
|
||||||
type: "content",
|
loader: glob({ pattern: ["**/*.md", "**/*.mdx"], base: "./src/posts" }),
|
||||||
|
|
||||||
// Type-check frontmatter using a schema
|
// Type-check frontmatter using a schema
|
||||||
schema: ({ image }) =>
|
schema: ({ image }) =>
|
|
@ -1,7 +0,0 @@
|
||||||
+++
|
|
||||||
title = "Blog"
|
|
||||||
weight = 1
|
|
||||||
|
|
||||||
[cascade]
|
|
||||||
type = "posts"
|
|
||||||
+++
|
|
2
src/env.d.ts
vendored
|
@ -1,2 +0,0 @@
|
||||||
/// <reference path="../.astro/types.d.ts" />
|
|
||||||
/// <reference types="astro/client" />
|
|
|
@ -7,11 +7,12 @@ import Timestamp from "../../components/Timestamp.astro";
|
||||||
import { getImage } from "astro:assets";
|
import { getImage } from "astro:assets";
|
||||||
import TocWrapper from "../../components/TocWrapper.astro";
|
import TocWrapper from "../../components/TocWrapper.astro";
|
||||||
import TagList from "../../components/TagList.astro";
|
import TagList from "../../components/TagList.astro";
|
||||||
|
import { render } from "astro:content";
|
||||||
|
|
||||||
export async function getStaticPaths() {
|
export async function getStaticPaths() {
|
||||||
const posts = await getCollection("posts");
|
const posts = await getCollection("posts");
|
||||||
return posts.map((post) => ({
|
return posts.map((post) => ({
|
||||||
params: { slug: post.slug },
|
params: { id: post.id },
|
||||||
props: post,
|
props: post,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
@ -19,7 +20,7 @@ export async function getStaticPaths() {
|
||||||
type Props = CollectionEntry<"posts">;
|
type Props = CollectionEntry<"posts">;
|
||||||
|
|
||||||
const post = Astro.props;
|
const post = Astro.props;
|
||||||
const { Content, remarkPluginFrontmatter, headings } = await post.render();
|
const { Content, remarkPluginFrontmatter, headings } = await render(post);
|
||||||
const { title, toc, heroImage: heroImagePath, heroAlt } = post.data;
|
const { title, toc, heroImage: heroImagePath, heroAlt } = post.data;
|
||||||
|
|
||||||
let heroImage = undefined;
|
let heroImage = undefined;
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
@ -73,7 +73,7 @@ all of the objects except the two flag halves.
|
||||||
|
|
||||||
[blender]: https://www.blender.org
|
[blender]: https://www.blender.org
|
||||||
|
|
||||||
![Hiding blender objects](../../../assets/ctf/blender-objects.png)
|
![Hiding blender objects](./blender-objects.png)
|
||||||
|
|
||||||
This reveals two QR codes that can be combined into the flag.
|
This reveals two QR codes that can be combined into the flag.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: "Dependent Types from First Principles"
|
title: "Dependent Types from First Principles"
|
||||||
slug: "dependent-types"
|
id: "dependent-types"
|
||||||
date: 2022-10-27
|
date: 2022-10-27
|
||||||
tags: ["type-theory"]
|
tags: ["type-theory"]
|
||||||
toc: true
|
toc: true
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: "Formally proving true ≢ false in Homotopy Type Theory with Agda"
|
title: "Formally proving true ≢ false in Homotopy Type Theory with Agda"
|
||||||
slug: "proving-true-from-false"
|
id: "proving-true-from-false"
|
||||||
date: 2023-04-21
|
date: 2023-04-21
|
||||||
tags: ["type-theory", "agda"]
|
tags: ["type-theory", "agda"]
|
||||||
math: true
|
math: true
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: "Equivalences"
|
title: "Equivalences"
|
||||||
slug: "equivalences"
|
id: "equivalences"
|
||||||
date: 2023-05-06
|
date: 2023-05-06
|
||||||
tags:
|
tags:
|
||||||
- type-theory
|
- type-theory
|
Before Width: | Height: | Size: 984 KiB After Width: | Height: | Size: 984 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 190 KiB After Width: | Height: | Size: 190 KiB |
Before Width: | Height: | Size: 630 KiB After Width: | Height: | Size: 630 KiB |
Before Width: | Height: | Size: 1.8 MiB After Width: | Height: | Size: 1.8 MiB |
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: "Path induction: a GADT perspective"
|
title: "Path induction: a GADT perspective"
|
||||||
slug: 2023-10-23-path-induction-gadt-perspective
|
id: 2023-10-23-path-induction-gadt-perspective
|
||||||
date: 2023-10-23
|
date: 2023-10-23
|
||||||
tags: ["type-theory", "pl-theory"]
|
tags: ["type-theory", "pl-theory"]
|
||||||
---
|
---
|
Before Width: | Height: | Size: 704 KiB After Width: | Height: | Size: 704 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 99 KiB |
Before Width: | Height: | Size: 478 KiB After Width: | Height: | Size: 478 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 2.4 MiB After Width: | Height: | Size: 2.4 MiB |
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: "Agda syntax highlighting in my blog!"
|
title: "Agda syntax highlighting in my blog!"
|
||||||
slug: 2024-06-26-agda-rendering
|
id: 2024-06-26-agda-rendering
|
||||||
date: 2024-06-27T04:25:15.332Z
|
date: 2024-06-27T04:25:15.332Z
|
||||||
tags: ["meta", "agda"]
|
tags: ["meta", "agda"]
|
||||||
---
|
---
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: Boolean equivalences
|
title: Boolean equivalences
|
||||||
slug: 2024-06-28-boolean-equivalences
|
id: 2024-06-28-boolean-equivalences
|
||||||
date: 2024-06-28T21:37:04.299Z
|
date: 2024-06-28T21:37:04.299Z
|
||||||
tags: ["agda", "type-theory", "hott"]
|
tags: ["agda", "type-theory", "hott"]
|
||||||
---
|
---
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 120 KiB |
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 98 KiB |
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: The circle is a suspension over booleans
|
title: The circle is a suspension over booleans
|
||||||
slug: 2024-09-15-circle-is-a-suspension-over-booleans
|
id: 2024-09-15-circle-is-a-suspension-over-booleans
|
||||||
date: 2024-09-15T23:02:32.058Z
|
date: 2024-09-15T23:02:32.058Z
|
||||||
tags: [algebraic-topology, hott]
|
tags: [algebraic-topology, hott]
|
||||||
draft: true
|
draft: true
|