115 lines
4 KiB
JavaScript
115 lines
4 KiB
JavaScript
/**
|
|
* Most adjustments must be made in `./src/_config/*`
|
|
*/
|
|
|
|
/**
|
|
* Configures Eleventy with various settings, collections, plugins, filters, shortcodes, and more.
|
|
* Hint VS Code for eleventyConfig autocompletion.
|
|
* © Henry Desroches - https://gist.github.com/xdesro/69583b25d281d055cd12b144381123bf
|
|
* @param {import("@11ty/eleventy/src/UserConfig")} eleventyConfig -
|
|
* @returns {Object} -
|
|
*/
|
|
|
|
// register dotenv for process.env.* variables to pickup
|
|
import dotenv from 'dotenv';
|
|
dotenv.config();
|
|
|
|
// add yaml support
|
|
import yaml from 'js-yaml';
|
|
|
|
// config import
|
|
import {getAllPosts, onlyMarkdown, tagList} from './src/_config/collections.js';
|
|
import events from './src/_config/events.js';
|
|
import filters from './src/_config/filters.js';
|
|
import plugins from './src/_config/plugins.js';
|
|
import shortcodes from './src/_config/shortcodes.js';
|
|
|
|
export default async function (eleventyConfig) {
|
|
eleventyConfig.addWatchTarget('./src/assets/**/*.{css,js,svg,png,jpeg}');
|
|
eleventyConfig.addWatchTarget('./src/_includes/**/*.{webc}');
|
|
|
|
// --------------------- layout aliases
|
|
eleventyConfig.addLayoutAlias('base', 'base.njk');
|
|
eleventyConfig.addLayoutAlias('home', 'home.njk');
|
|
eleventyConfig.addLayoutAlias('page', 'page.njk');
|
|
eleventyConfig.addLayoutAlias('blog', 'blog.njk');
|
|
eleventyConfig.addLayoutAlias('post', 'post.njk');
|
|
eleventyConfig.addLayoutAlias('tags', 'tags.njk');
|
|
|
|
// --------------------- Collections
|
|
eleventyConfig.addCollection('allPosts', getAllPosts);
|
|
eleventyConfig.addCollection('onlyMarkdown', onlyMarkdown);
|
|
eleventyConfig.addCollection('tagList', tagList);
|
|
|
|
// --------------------- Plugins
|
|
eleventyConfig.addPlugin(plugins.htmlConfig);
|
|
eleventyConfig.addPlugin(plugins.cssConfig);
|
|
eleventyConfig.addPlugin(plugins.jsConfig);
|
|
|
|
eleventyConfig.addPlugin(plugins.EleventyRenderPlugin);
|
|
eleventyConfig.addPlugin(plugins.rss);
|
|
eleventyConfig.addPlugin(plugins.syntaxHighlight);
|
|
|
|
eleventyConfig.addPlugin(plugins.webc, {
|
|
components: ['./src/_includes/webc/*.webc'],
|
|
useTransform: true
|
|
});
|
|
|
|
// --------------------- bundle
|
|
eleventyConfig.addBundle('css', {hoist: true});
|
|
|
|
// --------------------- Library and Data
|
|
eleventyConfig.setLibrary('md', plugins.markdownLib);
|
|
eleventyConfig.addDataExtension('yaml', contents => yaml.load(contents));
|
|
|
|
// --------------------- Filters
|
|
eleventyConfig.addFilter('toIsoString', filters.toISOString);
|
|
eleventyConfig.addFilter('formatDate', filters.formatDate);
|
|
eleventyConfig.addFilter('markdownFormat', filters.markdownFormat);
|
|
eleventyConfig.addFilter('splitlines', filters.splitlines);
|
|
eleventyConfig.addFilter('striptags', filters.striptags);
|
|
eleventyConfig.addFilter('shuffle', filters.shuffleArray);
|
|
eleventyConfig.addFilter('alphabetic', filters.sortAlphabetically);
|
|
eleventyConfig.addFilter('toAbsoluteUrl', filters.toAbsoluteUrl);
|
|
eleventyConfig.addFilter('slugify', filters.slugifyString);
|
|
|
|
// --------------------- Shortcodes
|
|
eleventyConfig.addShortcode('svg', shortcodes.svgShortcode);
|
|
eleventyConfig.addShortcode('image', shortcodes.imageShortcode);
|
|
eleventyConfig.addShortcode('year', () => `${new Date().getFullYear()}`);
|
|
|
|
// --------------------- Events ---------------------
|
|
if (process.env.ELEVENTY_RUN_MODE === 'serve') {
|
|
eleventyConfig.on('eleventy.after', events.svgToJpeg);
|
|
}
|
|
|
|
// --------------------- Passthrough File Copy
|
|
|
|
// -- same path
|
|
['src/assets/fonts/', 'src/assets/images/template', 'src/assets/og-images'].forEach(path =>
|
|
eleventyConfig.addPassthroughCopy(path)
|
|
);
|
|
|
|
eleventyConfig.addPassthroughCopy({
|
|
// -- to root
|
|
'src/assets/images/favicon/*': '/',
|
|
|
|
// -- node_modules
|
|
'node_modules/lite-youtube-embed/src/lite-yt-embed.{css,js}': `assets/components/`
|
|
});
|
|
|
|
// --------------------- Build Settings
|
|
eleventyConfig.setDataDeepMerge(true);
|
|
|
|
// --------------------- general config
|
|
return {
|
|
markdownTemplateEngine: 'njk',
|
|
|
|
dir: {
|
|
output: 'dist',
|
|
input: 'src',
|
|
includes: '_includes',
|
|
layouts: '_layouts'
|
|
}
|
|
};
|
|
}
|