aboutsummaryrefslogtreecommitdiffstats
path: root/eleventy.config.js
blob: a0ffb114d04e10397cd6793ab38fe184c46b7174 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import { EleventyHtmlBasePlugin, RenderPlugin, InputPathToUrlTransformPlugin } from '@11ty/eleventy';
import syntaxHighlightPlugin from "@11ty/eleventy-plugin-syntaxhighlight";
import { feedPlugin } from "@11ty/eleventy-plugin-rss";
import eleventyNavigationPlugin from "@11ty/eleventy-navigation";
import directoryOutputPlugin from "@11ty/eleventy-plugin-directory-output";
import { eleventyImageTransformPlugin } from "@11ty/eleventy-img";
import pluginWebc from "@11ty/eleventy-plugin-webc";

import { DateTime } from "luxon";

import postcss from "postcss";
import cssnano from 'cssnano';

import htmlmin from "html-minifier";

export default async function(eleventyConfig) {
	eleventyConfig.addPlugin(EleventyHtmlBasePlugin);
	eleventyConfig.addPlugin(RenderPlugin);
	eleventyConfig.addPlugin(InputPathToUrlTransformPlugin);
	eleventyConfig.addPlugin(syntaxHighlightPlugin);
	eleventyConfig.addPlugin(feedPlugin, {
		type: "atom",
		outputPath: "/atom.xml",
		collection: {
			name: "post"
		},
		metadata: {
			language: "en",
			title: "Sudomsg",
			subtitle: "Messages from Root",
			base: "https://sudomsg.com/",
			author: {
				name: "Marc Pervaz Boocha",
				email: "mboocha@sudomsg.com",
			}
		}
	});
	eleventyConfig.addPlugin(eleventyNavigationPlugin);

	eleventyConfig.addPlugin(directoryOutputPlugin);

	eleventyConfig.addPlugin(pluginWebc, {
		bundlePluginOptions: {
			transforms: [
				async function(content) {
					if (this.type === 'css') {
						let result = await postcss([
							cssnano({
								preset: "default",
							})
						]).process(content, {
							from: this.page.inputPath,
							to: null
						});
						return result.css;
					}

					return content;
				}
			]
		},
	});

	eleventyConfig.addTransform("htmlmin", function(content) {
		if (this.page.outputPath && this.page.outputPath.endsWith(".html")) {
			let minified = htmlmin.minify(content, {
				useShortDoctype: true,
				removeComments: true,
				collapseWhitespace: true,
			});
			return minified;
		}

		return content;
	});

	eleventyConfig.addPassthroughCopy({
		"./public/": "/",
	});

	eleventyConfig.addPlugin(eleventyImageTransformPlugin, {
		extensions: "html",
		formats: ["webp", "jpeg", "svg", "avif", "auto", "png"],
		defaultAttributes: {
			loading: "lazy",
			decoding: "async",
		},
	});

	eleventyConfig.setServerPassthroughCopyBehavior("passthrough");


	eleventyConfig.addFilter("readableDate", (dateObj, format, zone) => {
		return DateTime.fromJSDate(dateObj, { zone: zone || "utc" }).toFormat(format || "dd LLLL yyyy");
	});

	eleventyConfig.addFilter('htmlDateString', (dateObj) => {
		return DateTime.fromJSDate(dateObj, { zone: 'utc' }).toFormat('yyyy-LL-dd');
	});

	eleventyConfig.addShortcode('schema', (type) => {
		return (type instanceof URL ? type : new URL(type, "http://schema.org/")).href;
	});

	eleventyConfig.setQuietMode(true);
	eleventyConfig.setDynamicPermalinks(false);

	return {
		markdownTemplateEngine: "njk",
		htmlTemplateEngine: "webc",
		output: "dist"
	}
}