text: const rssPlugin = require('@11ty/eleventy-plugin-rss');
  const syntaxHighlight = require('@11ty/eleventy-plugin-syntaxhighlight');
  const fs = require("fs");
  
  // Import filters
  const dateFilter = require('./src/filters/date-filter.js');
  const markdownFilter = require('./src/filters/markdown-filter.js');
  const w3DateFilter = require('./src/filters/w3-date-filter.js');
  
  // Import transforms
  const htmlMinTransform = require('./src/transforms/html-min-transform.js');
  const parseTransform = require('./src/transforms/parse-transform.js');
  
  // Import data files
  const site = require('./src/_data/site.json');
  
  module.exports = function(config) {
    // Filters
    config.addFilter('dateFilter', dateFilter);
    config.addFilter('markdownFilter', markdownFilter);
    config.addFilter('w3DateFilter', w3DateFilter);
  
    // Layout aliases
    config.addLayoutAlias('home', 'layouts/home.njk');
  
    // Transforms
    config.addTransform('htmlmin', htmlMinTransform);
    config.addTransform('parse', parseTransform);
  
    // Passthrough copy
    config.addPassthroughCopy('src/fonts');
    config.addPassthroughCopy('src/images');
    config.addPassthroughCopy('src/js');
    config.addPassthroughCopy('src/admin/config.yml');
    config.addPassthroughCopy('src/admin/previews.js');
    config.addPassthroughCopy('node_modules/nunjucks/browser/nunjucks-slim.js');
  
    const now = new Date();
  
    // Custom collections
    const livePosts = post => post.date <= now && !post.data.draft;
    config.addCollection('posts', collection => {
      return [
        ...collection.getFilteredByGlob('./src/posts/*.md').filter(livePosts)
      ].reverse();
    });
  
    config.addCollection('postFeed', collection => {
      return [...collection.getFilteredByGlob('./src/posts/*.md').filter(livePosts)]
        .reverse()
        .slice(0, site.maxPostsPerPage);
    });
  
  
    // .eleventy.js
    config.addCollection('postsNext', collection => {
      const coll = collection.getFilteredByGlob('./src/posts/*.md').filter(livePosts);
  
      for(let i = 0; i < coll.length ; i++) {
        const prevPost = coll[i-1];
        const nextPost = coll[i + 1];
  
        coll[i].data["prevPost"] = prevPost;
        coll[i].data["nextPost"] = nextPost;
      }
  
      return coll;
    });
  
    
  
    // Plugins
    config.addPlugin(rssPlugin);
    config.addPlugin(syntaxHighlight);
  
    // 404 
    config.setBrowserSyncConfig({
      callbacks: {
        ready: function(err, browserSync) {
          const content_404 = fs.readFileSync('dist/404.html');
  
          browserSync.addMiddleware("*", (req, res) => {
            // Provides the 404 content without redirect.
            res.write(content_404);
            res.end();
          });
        }
      }
    });
  
    return {
      dir: {
        input: 'src',
        output: 'dist'
      },
      passthroughFileCopy: true
    };
  };
  