1import lume from "lume/mod.ts"; 2import brotli from "lume/plugins/brotli.ts"; 3import feed from "lume/plugins/feed.ts"; 4import lightningcss from "lume/plugins/lightningcss.ts"; 5import metas from "lume/plugins/metas.ts"; 6import nav from "lume/plugins/nav.ts"; 7import picture from "lume/plugins/picture.ts"; 8import postcss from "lume/plugins/postcss.ts"; 9import purgecss from "lume/plugins/purgecss.ts"; 10import relations from "lume/plugins/relations.ts"; 11import robots from "lume/plugins/robots.ts"; 12import sitemap from "lume/plugins/sitemap.ts"; 13import slugify_urls from "lume/plugins/slugify_urls.ts"; 14import source_maps from "lume/plugins/source_maps.ts"; 15import svgo from "lume/plugins/svgo.ts"; 16import tailwindcss from "lume/plugins/tailwindcss.ts"; 17import toml from "lume/plugins/toml.ts"; 18import transform_images from "lume/plugins/transform_images.ts"; 19 20import catppuccin from "npm:@catppuccin/tailwindcss"; 21 22// Disabled Plugins: 23// import minify_html from "lume/plugins/minify_html.ts"; 24// import og_images from "lume/plugins/og_images.ts"; 25// import pagefind from "lume/plugins/pagefind.ts"; 26// import sri from "lume/plugins/sri.ts"; 27 28// To Add: 29// https://deno.land/x/lume_markdown_plugins@v0.8.0 (toc and footnotes plugins) 30// https://deno.land/x/lume_shiki@0.0.16 31 32const site = lume({ 33 src: "./src", 34 location: new URL("https://blog.pyrox.dev"), 35}); 36 37site.loadAssets([".css"]); 38site.copy([".woff2"]); 39 40site.use(metas()); 41// site.use(minify_html({ 42// options: { 43// keep_html_and_head_opening_tags: true, 44// keep_spaces_between_attributes: true 45// } 46// })); 47site.use(nav()); 48site.use(picture()); 49site.use(transform_images()); 50site.use(relations()); 51site.use(sitemap()); 52site.use(slugify_urls()); 53site.use(svgo()); 54site.use(toml()); 55 56// Tailwind CSS 57site.use(tailwindcss({ 58 extensions: [".html", ".vto"], 59 options: { 60 plugins: [catppuccin], 61 safelist: ['latte'] 62 } 63})) 64site.use(postcss()) 65 66// RSS/JSON Feed Generation 67site.use(feed({ 68 output: ["/blog.rss", "/blog.json"], 69 query: "type=blog", 70 sort: "date=desc", 71 info: { 72 title: "dish blog", 73 description: "dish's thoughts on many things", 74 published: new Date(), 75 lang: "en", 76 generator: true, 77 authorName: "dish", 78 authorUrl: "https://blog.pyrox.dev", 79 }, 80 items: { 81 title: "=title", 82 description: "=summary", 83 published: "=published", 84 updated: "=updated || undefined", 85 content: "=children", 86 lang: "=lang", 87 image: "=banner", 88 authorName: "=author.name", 89 authorUrl: "=author.url", 90 }, 91})); 92 93// CSS postprocessing 94site.use(purgecss()) 95site.use(lightningcss({ 96 options: { 97 minify: true, 98 bundle: false, 99 } 100})); 101 102// Source Map Generation 103site.use(source_maps()); 104 105// Compress everything with Brotli 106site.use(brotli({ 107 extensions: [ 108 ".html", 109 ".css", 110 ".js", 111 ".mjs", 112 ".svg", 113 ".json", 114 ".xml", 115 ".txt", 116 ".rss", 117 ".map" 118 ] 119})); 120 121// robots.txt generation 122site.use(robots({ 123 disallow: [ 124 "AI2Bot", 125 "Amazonbot", 126 "Applebot-Extended", 127 "Bytespider", 128 "ChatGPT-User", 129 "ClaudeBot", 130 "Diffbot", 131 "DuckAssistBot", 132 "FacebookBot", 133 "GPTBot", 134 "Google-Extended", 135 "Meta-ExternalAgent", 136 "Meta-ExternalFetcher", 137 "OAI-SearchBot", 138 "Operator", 139 "PanguBot", 140 "PerplexityBot", 141 "SemrushBot", 142 "SemrushBot-OCOB", 143 "Timpibot", 144 "Webzio-Extended", 145 "YouBot", 146 "cohere-training-data-crawler", 147 "omgili", 148 "t3versions", 149 ] 150})); 151 152// Copy .well-known to site root 153site.copy("static/.well-known", ".well-known") 154 155// Get current commit as a version number 156// Taken from https://github.com/pixeldesu/pixelde.su/blob/main/_config.ts 157// Associated usage in src/_includes/components/footer.vto also from the above repo 158const commitCmd = new Deno.Command("git", { args: ["rev-parse", "HEAD"] }); 159const { stdout } = await commitCmd.output(); 160const commitHash = new TextDecoder().decode(stdout); 161site.data("commit", commitHash); 162 163export default site;