+19
-9
_config.ts
+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
+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
+2
-2
scripts/bootstrap-icons/src/classes.json
+2
-1
src/_archetypes/blog.ts
+2
-1
src/_archetypes/blog.ts
+5
src/_components/lorem_ipsum.vto
+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
+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
+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
+1
src/blog/example-blog-post.md
+1
-1
src/blog/hello-world.md
+1
-1
src/blog/hello-world.md
+4
-4
src/static/icons/bsi.min.css
+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
src/static/icons/bsi.min.woff2
This is a binary file and will not be displayed.
+17
-5
src/static/styles.css
+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