update more stuff and prepare for next blogpost

pyrox.dev 13e3eb97 2c6a9257

verified
Changed files
+92 -25
scripts
bootstrap-icons
src
+19 -9
_config.ts
··· 27 27 28 28 // Additional external plugins 29 29 import toc from "https://deno.land/x/lume_markdown_plugins@v0.8.0/toc.ts"; 30 + import anchor from "npm:markdown-it-anchor"; 31 + import slugify from "npm:@sindresorhus/slugify"; 30 32 31 33 // CSS 32 34 // // Base dependencies ··· 47 49 // import purgecss from "lume/plugins/purgecss.ts"; 48 50 // import relations from "lume/plugins/relations.ts"; 49 51 // import sri from "lume/plugins/sri.ts"; 50 - // import { default as md_linenums } from "npm:markdown-it-inject-linenumbers@0.3.0"; 51 52 52 53 // To Add: 53 54 // https://deno.land/x/lume_markdown_plugins@v0.8.0 (footnotes plugins) ··· 56 57 const site = lume({ 57 58 src: "./src", 58 59 location: new URL("https://pyrox.dev"), 60 + }, { 61 + markdown: { 62 + plugins: [ 63 + [BiDirectionalLinks, { 64 + dir: Deno.cwd() + "/src/", 65 + stillRenderNoMatched: false, 66 + }], 67 + mdItObsidianCallouts, 68 + [anchor, { 69 + permalink: anchor.permalink.headerLink(), 70 + slugify: (s: string) => slugify(s), 71 + }], 72 + ], 73 + }, 59 74 }); 60 - 61 - // site.hooks.addMarkdownItPlugin(md_linenums, {}); 62 - site.hooks.addMarkdownItPlugin(BiDirectionalLinks({ 63 - dir: Deno.cwd() + "/src/", 64 - stillRenderNoMatched: false, 65 - })); 66 - site.hooks.addMarkdownItPlugin(mdItObsidianCallouts, {}); 67 75 68 76 // Copy Static Files 69 77 site.add(".css"); ··· 99 107 }, 100 108 }), 101 109 ); 102 - site.use(toc()); 110 + site.use(toc({ 111 + anchor: false, 112 + })); 103 113 site.use(resolveUrls()); 104 114 105 115 // RSS/JSON Feed Generation
+38
deno.lock
··· 33 33 "jsr:@std/yaml@^1.0.5": "1.0.5", 34 34 "npm:@img/sharp-wasm32@0.33.5": "0.33.5", 35 35 "npm:@nolebase/markdown-it-bi-directional-links@^2.15.0": "2.15.0_markdown-it@14.1.0", 36 + "npm:@sindresorhus/slugify@*": "2.2.1", 36 37 "npm:@tailwindcss/oxide@4.0.3": "4.0.3", 37 38 "npm:@tailwindcss/oxide@4.0.6": "4.0.6", 38 39 "npm:date-fns@4.1.0": "4.1.0", ··· 41 42 "npm:html-validate@9.4.1": "9.4.1_ajv@8.17.1", 42 43 "npm:ico-endec@0.1.6": "0.1.6", 43 44 "npm:lightningcss-wasm@1.29.1": "1.29.1", 45 + "npm:markdown-it-anchor@*": "9.2.0_@types+markdown-it@14.1.2_markdown-it@14.1.0", 44 46 "npm:markdown-it-attrs@4.3.1": "4.3.1_markdown-it@14.1.0", 45 47 "npm:markdown-it-deflist@3.0.0": "3.0.0", 46 48 "npm:markdown-it@14.1.0": "14.1.0", ··· 295 297 "kleur@4.1.5" 296 298 ] 297 299 }, 300 + "@sindresorhus/slugify@2.2.1": { 301 + "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==", 302 + "dependencies": [ 303 + "@sindresorhus/transliterate", 304 + "escape-string-regexp" 305 + ] 306 + }, 307 + "@sindresorhus/transliterate@1.6.0": { 308 + "integrity": "sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==", 309 + "dependencies": [ 310 + "escape-string-regexp" 311 + ] 312 + }, 298 313 "@tailwindcss/oxide-android-arm64@4.0.3": { 299 314 "integrity": "sha512-S8XOTQuMnpijZRlPm5HBzPJjZ28quB+40LSRHjRnQF6rRYKsvpr1qkY7dfwsetNdd+kMLOMDsvmuT8WnqqETvg==" 300 315 }, ··· 399 414 "@types/estree@1.0.6": { 400 415 "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" 401 416 }, 417 + "@types/linkify-it@5.0.0": { 418 + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==" 419 + }, 420 + "@types/markdown-it@14.1.2": { 421 + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", 422 + "dependencies": [ 423 + "@types/linkify-it", 424 + "@types/mdurl" 425 + ] 426 + }, 427 + "@types/mdurl@2.0.0": { 428 + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==" 429 + }, 402 430 "ajv@8.17.1": { 403 431 "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", 404 432 "dependencies": [ ··· 571 599 "entities@4.5.0": { 572 600 "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" 573 601 }, 602 + "escape-string-regexp@5.0.0": { 603 + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" 604 + }, 574 605 "estree-walker@3.0.3": { 575 606 "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 576 607 "dependencies": [ ··· 662 693 }, 663 694 "lru-cache@10.4.3": { 664 695 "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" 696 + }, 697 + "markdown-it-anchor@9.2.0_@types+markdown-it@14.1.2_markdown-it@14.1.0": { 698 + "integrity": "sha512-sa2ErMQ6kKOA4l31gLGYliFQrMKkqSO0ZJgGhDHKijPf0pNFM9vghjAh3gn26pS4JDRs7Iwa9S36gxm3vgZTzg==", 699 + "dependencies": [ 700 + "@types/markdown-it", 701 + "markdown-it" 702 + ] 665 703 }, 666 704 "markdown-it-attrs@4.3.1_markdown-it@14.1.0": { 667 705 "integrity": "sha512-/ko6cba+H6gdZ0DOw7BbNMZtfuJTRp9g/IrGIuz8lYc/EfnmWRpaR3CFPnNbVz0LDvF8Gf1hFGPqrQqq7De0rg==",
+2 -2
scripts/bootstrap-icons/src/classes.json
··· 7 7 "bi-clipboard2-data", 8 8 "bi-exclamation-triangle", 9 9 "bi-fire", 10 + "bi-hash", 10 11 "bi-info-circle", 11 12 "bi-lightning", 12 13 "bi-list-ul", 13 - "bi-paragraph", 14 14 "bi-pencil", 15 15 "bi-question-circle", 16 16 "bi-quote", 17 17 "bi-x-lg" 18 - ] 18 + ]
+2 -1
src/_archetypes/blog.ts
··· 8 8 title: title, 9 9 summary: "", 10 10 draft: true, 11 - date: new Date(Date.now()).toISOString().split("T")[0], 11 + published: new Date(Date.now()).toISOString().split("T")[0], 12 + templateEngine: ["vto", "md"], 12 13 }, 13 14 }; 14 15 }
+5
src/_components/lorem_ipsum.vto
··· 1 + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore 2 + et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut 3 + aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 4 + cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in 5 + culpa qui officia deserunt mollit anim id est laborum.
+2 -2
src/_components/post_card.vto
··· 5 5 <p class="text-subtext1 text-lg">{{ post.title }}</p> 6 6 <p class="inline italic text-subtext0">{{ post.summary }}</p> 7 7 <p class="float-right inline text-blue"> 8 - <time datetime="{{ post.published |> date('date') }}"> 8 + <time datetime="{{ post.published |> date('SHORT_DATE') }}"> 9 9 {{ post.published |> date('DATE') }} 10 10 </time> 11 11 </p> ··· 19 19 <h2 class="text-subtext1 font-serif text-2xl mb-2">{{ post.title }}</h2> 20 20 <h3 class="text-lg lg:inline italic text-subtext0">{{ post.summary }}</h3> 21 21 <p class="text-lg lg:float-right lg:inline text-blue"> 22 - <time datetime="{{ post.published |> date('date') }}"> 22 + <time datetime="{{ post.published |> date('SHORT_DATE') }}"> 23 23 {{ post.published |> date('DATE') }} 24 24 </time> 25 25 </p>
+1 -1
src/_includes/layouts/home.vto
··· 15 15 </p> 16 16 <h2 class="my-8 text-2xl">Recent blog posts:</h2> 17 17 <ul class="lg:w-3/4"> 18 - {{ for post of search.pages("category=blog", "date", 5) }} 18 + {{ for post of search.pages("category=blog", "published=desc", 5) }} 19 19 {{ await comp.post_card({"post": post, compact: true}) }} 20 20 {{ /for }} 21 21 </ul>
+1
src/blog/example-blog-post.md
··· 6 6 --- 7 7 8 8 ## meow meow! {#meow-meow} 9 + 9 10 <!-- deno-fmt-ignore-start --> 10 11 > [!info]- Closed default 11 12 > You shouldn't see this
+1 -1
src/blog/hello-world.md
··· 2 2 title: Hello World! 3 3 summary: 'The first real blog post' 4 4 draft: false 5 - published: '2025-02-20' 5 + published: 2025-02-20 6 6 --- 7 7 8 8 Well, here we are again. This the 8th rewrite of this blog, and hopefully the final one, since Lume
+4 -4
src/static/icons/bsi.min.css
··· 2 2 @font-face { 3 3 font-display: block; 4 4 font-family: bootstrap-icons; 5 - src: url("/static/icons/bsi.min.woff2?v=1740282679") format("woff2"); 5 + src: url("/static/icons/bsi.min.woff2?v=1740884805") format("woff2"); 6 6 } 7 7 .bi::before, 8 8 [class*=" bi-"]::before, ··· 35 35 .bi-exclamation-triangle::before { 36 36 content: "\f33b"; 37 37 } 38 + .bi-hash::before { 39 + content: "\f40a"; 40 + } 38 41 .bi-info-circle::before { 39 42 content: "\f431"; 40 43 } ··· 43 46 } 44 47 .bi-list-ul::before { 45 48 content: "\f478"; 46 - } 47 - .bi-paragraph::before { 48 - content: "\f4b4"; 49 49 } 50 50 .bi-pencil::before { 51 51 content: "\f4cb";
src/static/icons/bsi.min.woff2

This is a binary file and will not be displayed.

+17 -5
src/static/styles.css
··· 134 134 p { 135 135 @apply mb-6; 136 136 } 137 + 138 + blockquote { 139 + @apply border-l-2 pl-6 relative border-overlay0 italic; 140 + left: -0.5rem; 141 + } 142 + 137 143 div.callout-content > p { 138 144 @apply mb-0; 139 145 } 140 146 141 147 h2:has(a.header-anchor) { 142 - @apply text-3xl text-mauve relative mb-8 no-underline; 148 + @apply text-3xl text-mauve relative mb-8; 143 149 left: -1.75rem; 144 150 } 145 - h2:has(a.header-anchor)::before { 146 - @apply text-2xl relative mr-1; 147 - top: 0.25rem; 151 + 152 + h3:has(a.header-anchor) { 153 + @apply text-2xl text-mauve relative mb-6; 154 + left: -1.75rem; 155 + } 156 + 157 + a.header-anchor::before { 158 + @apply relative mr-1 inline-block; 148 159 font-family: "bootstrap-icons"; 149 - content: "\F4B4"; 160 + content: "\F40A"; 161 + top: 0.225rem; 150 162 } 151 163 } 152 164