import lume from "lume/mod.ts"; import brotli from "lume/plugins/brotli.ts"; import feed from "lume/plugins/feed.ts"; import lightningcss from "lume/plugins/lightningcss.ts"; import metas from "lume/plugins/metas.ts"; import nav from "lume/plugins/nav.ts"; import picture from "lume/plugins/picture.ts"; import postcss from "lume/plugins/postcss.ts"; import purgecss from "lume/plugins/purgecss.ts"; import relations from "lume/plugins/relations.ts"; import robots from "lume/plugins/robots.ts"; import sitemap from "lume/plugins/sitemap.ts"; import slugify_urls from "lume/plugins/slugify_urls.ts"; import source_maps from "lume/plugins/source_maps.ts"; import svgo from "lume/plugins/svgo.ts"; import tailwindcss from "lume/plugins/tailwindcss.ts"; import toml from "lume/plugins/toml.ts"; import transform_images from "lume/plugins/transform_images.ts"; import catppuccin from "npm:@catppuccin/tailwindcss"; // Disabled Plugins: // import minify_html from "lume/plugins/minify_html.ts"; // import og_images from "lume/plugins/og_images.ts"; // import pagefind from "lume/plugins/pagefind.ts"; // import sri from "lume/plugins/sri.ts"; // To Add: // https://deno.land/x/lume_markdown_plugins@v0.8.0 (toc and footnotes plugins) // https://deno.land/x/lume_shiki@0.0.16 const site = lume({ src: "./src", location: new URL("https://blog.pyrox.dev"), }); site.loadAssets([".css"]); site.copy([".woff2"]); site.use(metas()); // site.use(minify_html({ // options: { // keep_html_and_head_opening_tags: true, // keep_spaces_between_attributes: true // } // })); site.use(nav()); site.use(picture()); site.use(transform_images()); site.use(relations()); site.use(sitemap()); site.use(slugify_urls()); site.use(svgo()); site.use(toml()); // Tailwind CSS site.use(tailwindcss({ extensions: [".html", ".vto"], options: { plugins: [catppuccin], safelist: ['latte'] } })) site.use(postcss()) // RSS/JSON Feed Generation site.use(feed({ output: ["/blog.rss", "/blog.json"], query: "type=blog", sort: "date=desc", info: { title: "dish blog", description: "dish's thoughts on many things", published: new Date(), lang: "en", generator: true, authorName: "dish", authorUrl: "https://blog.pyrox.dev", }, items: { title: "=title", description: "=summary", published: "=published", updated: "=updated || undefined", content: "=children", lang: "=lang", image: "=banner", authorName: "=author.name", authorUrl: "=author.url", }, })); // CSS postprocessing site.use(purgecss()) site.use(lightningcss({ options: { minify: true, bundle: false, } })); // Source Map Generation site.use(source_maps()); // Compress everything with Brotli site.use(brotli({ extensions: [ ".html", ".css", ".js", ".mjs", ".svg", ".json", ".xml", ".txt", ".rss", ".map" ] })); // robots.txt generation site.use(robots({ disallow: [ "AI2Bot", "Amazonbot", "Applebot-Extended", "Bytespider", "ChatGPT-User", "ClaudeBot", "Diffbot", "DuckAssistBot", "FacebookBot", "GPTBot", "Google-Extended", "Meta-ExternalAgent", "Meta-ExternalFetcher", "OAI-SearchBot", "Operator", "PanguBot", "PerplexityBot", "SemrushBot", "SemrushBot-OCOB", "Timpibot", "Webzio-Extended", "YouBot", "cohere-training-data-crawler", "omgili", "t3versions", ] })); // Copy .well-known to site root site.copy("static/.well-known", ".well-known") // Get current commit as a version number // Taken from https://github.com/pixeldesu/pixelde.su/blob/main/_config.ts // Associated usage in src/_includes/components/footer.vto also from the above repo const commitCmd = new Deno.Command("git", { args: ["rev-parse", "HEAD"] }); const { stdout } = await commitCmd.output(); const commitHash = new TextDecoder().decode(stdout); site.data("commit", commitHash); export default site;