import lume from "lume/mod.ts"; import brotli from "lume/plugins/brotli.ts"; import date from "lume/plugins/date.ts"; import feed from "lume/plugins/feed.ts"; import metas from "lume/plugins/metas.ts"; import picture from "lume/plugins/picture.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 toml from "lume/plugins/toml.ts"; import transform_images from "lume/plugins/transform_images.ts"; // Markdown-it plugins import md_linenums from "npm:markdown-it-inject-linenumbers@0.3.0"; // CSS // // Base dependencies import tailwindcss from "lume/plugins/tailwindcss.ts"; import postcss from "lume/plugins/postcss.ts"; import catppuccin from "npm:@catppuccin/tailwindcss"; // // 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 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"; // 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://blog.pyrox.dev"), }, { mdConfig }, ); 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(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", }, }), ); // Tailwind CSS site.use( tailwindcss({ options: { plugins: [catppuccin], theme: { fontFamily: { sans: ["Inter", "ui-sans-serif", "system-ui", "sans-serif"], serif: ["IBM Plex Serif", "ui-serif", "serif"], }, }, }, }), ); site.use(postcss()); // 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,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;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", }), ); // 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 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;