import lume from "lume/mod.ts"; import date from "lume/plugins/date.ts"; import picture from "lume/plugins/picture.ts"; import relations from "lume/plugins/relations.ts"; import slugify_urls from "lume/plugins/slugify_urls.ts"; import source_maps from "lume/plugins/source_maps.ts"; import toml from "lume/plugins/toml.ts"; // File Generation import feed from "lume/plugins/feed.ts"; import metas from "lume/plugins/metas.ts"; import robots from "lume/plugins/robots.ts"; import sitemap from "lume/plugins/sitemap.ts"; // Optimization import brotli from "lume/plugins/brotli.ts"; import minify_html from "lume/plugins/minify_html.ts"; import svgo from "lume/plugins/svgo.ts"; import transform_images from "lume/plugins/transform_images.ts"; // Markdown-it plugins import { default as md_linenums } from "npm:markdown-it-inject-linenumbers@0.3.0"; // Additional external plugins import toc from "https://deno.land/x/lume_markdown_plugins@v0.8.0/toc.ts"; // CSS // // Base dependencies import tailwindcss from "lume/plugins/tailwindcss.ts"; // // Fonts import googleFonts from "lume/plugins/google_fonts.ts"; // // Optimization import lightningcss from "lume/plugins/lightningcss.ts"; import purgecss from "lume/plugins/purgecss.ts"; // Disabled Plugins: // import og_images from "lume/plugins/og_images.ts"; // import pagefind from "lume/plugins/pagefind.ts"; // import sri from "lume/plugins/sri.ts"; // import nav from "lume/plugins/nav.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 mdConfig = { plugins: [md_linenums], }; const site = lume( { src: "./src", location: new URL("https://pyrox.dev"), }, { mdConfig }, ); // Copy Static Files site.add(".css"); site.add("static/.well-known", ".well-known"); site.add(".woff2"); // Tailwind CSS site.use(tailwindcss()); // Fonts site.use( googleFonts({ subsets: ["latin", "latin-ext"], folder: "/static/fonts/", cssFile: "/static/fonts.css", fonts: "https://fonts.googleapis.com/css2?family=IBM+Plex+Serif:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900", }), ); site.use(metas()); site.use(picture()); site.use(transform_images()); site.use(relations()); site.use(sitemap()); site.use(slugify_urls()); site.use(svgo()); site.use(toml()); site.use( date({ formats: { SHORT_DATE: "yyyy-MM-dd", POST_DATE: "dd MMM, yyyy", }, }), ); site.use(toc()) // RSS/JSON Feed Generation site.use( feed({ output: ["/blog.rss", "/blog.json"], query: "category=blog", 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", content: "$.e-content", 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 // Applies to CSS and JS site.use(source_maps()); // Minify HTML Output site.use(minify_html({ options: { keep_html_and_head_opening_tags: true, keep_spaces_between_attributes: true } })); // 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", ], }), ); // Compress everything with Brotli site.use( brotli({ extensions: [ ".html", ".css", ".js", ".mjs", ".svg", ".json", ".xml", ".txt", ".rss", ".map", ], }), ); // 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;