From 43e2798fb1cc98d2218baf90000cdd8ca7389ec0 Mon Sep 17 00:00:00 2001 From: JasterV <49537445+JasterV@users.noreply.github.com> Date: Mon, 2 Jun 2025 21:51:05 +0200 Subject: [PATCH] Add D2 as a diagramming tool --- .gitignore | 3 +++ astro.config.mjs | 15 ++++++++++++++- bun.lockb | Bin 221510 -> 222046 bytes package.json | 1 + .../blog/DecouplingElixirGenServers.md | 6 ++++-- 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 7f45cd8..8118bd2 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,6 @@ pnpm-debug.log* .env .env.production +# Ignore automatic generated diagrams from D2 +public/assets/d2/ + diff --git a/astro.config.mjs b/astro.config.mjs index 8673b2d..a10eb0c 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,7 +1,7 @@ import { defineConfig } from "astro/config"; import icon from "astro-icon"; - import sitemap from "@astrojs/sitemap"; +import d2 from "astro-d2"; // https://astro.build/config export default defineConfig({ @@ -15,5 +15,18 @@ export default defineConfig({ }, }), sitemap(), + // Refer to: https://astro-d2.vercel.app/configuration/ + d2({ + // Outputs to `public/assets/d2` + output: "assets/d2", + sketch: true, + pad: 50, + layout: "dagre", + // https://d2lang.com/tour/themes/ + theme: { + default: "3", + dark: "200", + }, + }), ], }); diff --git a/bun.lockb b/bun.lockb index dd45413b9becb7b9a124a92df1adc272b1787863..2d24ea2c50d4c00054a4bd340d5c615ada441f98 100755 GIT binary patch delta 36337 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 u9@_qcnQTg2vT7Wv_?6Xm-v0%y$aoq6 diff --git a/package.json b/package.json index 2bf141f..5490109 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "@astrojs/check": "^0.9.4", "@astrojs/sitemap": "^3.4.0", "astro": "^5.8.1", + "astro-d2": "^0.8.0", "astro-icon": "^1.1.5", "typescript": "^5.8.3" }, diff --git a/src/content/blog/DecouplingElixirGenServers.md b/src/content/blog/DecouplingElixirGenServers.md index 158466d..a79c1dd 100644 --- a/src/content/blog/DecouplingElixirGenServers.md +++ b/src/content/blog/DecouplingElixirGenServers.md @@ -37,9 +37,11 @@ We skip all of that for the sake of making this very simple, but I think having Let's look at a simple diagram. +```d2 title="Door IoT Ws client" +direction: right - -Let's look at some code: +Documentation -> Starlight -> Website: {style.animated: true} +``` ## Let's get into code