1import lume from "lume/mod.ts"; 2import brotli from "lume/plugins/brotli.ts"; 3import code_highlight from "lume/plugins/code_highlight.ts"; 4import feed from "lume/plugins/feed.ts"; 5import lightningcss from "lume/plugins/lightningcss.ts"; 6import icons from "lume/plugins/icons.ts"; 7import inline from "lume/plugins/inline.ts"; 8import metas from "lume/plugins/metas.ts"; 9import minify_html from "lume/plugins/minify_html.ts"; 10import nav from "lume/plugins/nav.ts"; 11import og_images from "lume/plugins/og_images.ts"; 12import pagefind from "lume/plugins/pagefind.ts"; 13import picture from "lume/plugins/picture.ts"; 14import postcss from "lume/plugins/postcss.ts"; 15import purgecss from "lume/plugins/purgecss.ts"; 16import relations from "lume/plugins/relations.ts"; 17import robots from "lume/plugins/robots.ts"; 18import sitemap from "lume/plugins/sitemap.ts"; 19import slugify_urls from "lume/plugins/slugify_urls.ts"; 20import source_maps from "lume/plugins/source_maps.ts"; 21import sri from "lume/plugins/sri.ts"; 22import svgo from "lume/plugins/svgo.ts"; 23import tailwindcss from "lume/plugins/tailwindcss.ts"; 24import toml from "lume/plugins/toml.ts"; 25import transform_images from "lume/plugins/transform_images.ts"; 26 27import catppuccin from "npm:@catppuccin/tailwindcss"; 28 29const site = lume({ 30 src: "./src", 31 location: new URL("https://blog.pyrox.dev"), 32}); 33 34site.loadAssets([".css"]); 35site.copy([".woff2"]); 36 37site.use(code_highlight()); 38site.use(icons()); 39site.use(inline()); 40site.use(metas()); 41site.use(minify_html()); 42site.use(nav()); 43site.use(og_images()); 44site.use(pagefind()); 45site.use(picture()); 46site.use(transform_images()); 47site.use(relations()); 48site.use(robots()); 49site.use(sitemap()); 50site.use(slugify_urls()); 51site.use(sri()); 52site.use(svgo()); 53site.use(toml()); 54 55// Tailwind CSS 56site.use(tailwindcss({ 57 extensions: [".html", ".vto"], 58 options: { 59 plugins: [catppuccin], 60 safelist: ['latte'] 61 } 62})) 63site.use(postcss()) 64 65// RSS/JSON Feed Generation 66site.use(feed({ 67 output: ["/blog.rss", "/blog.json"], 68 query: "type=blog", 69 sort: "date=desc", 70 info: { 71 title: "dish blog", 72 description: "dish's thoughts on many things", 73 published: new Date(), 74 lang: "en", 75 generator: true, 76 authorName: "dish", 77 authorUrl: "https://blog.pyrox.dev", 78 }, 79 items: { 80 title: "=title", 81 description: "=summary", 82 published: "=published", 83 updated: "=updated || undefined", 84 content: "=children", 85 lang: "=lang", 86 image: "=banner", 87 authorName: "=author.name", 88 authorUrl: "=author.url", 89 }, 90})); 91 92// CSS postprocessing 93site.use(purgecss()) 94site.use(lightningcss({ 95 options: { 96 minify: true, 97 bundle: false, 98 } 99})); 100 101// Source Map Generation 102site.use(source_maps()); 103 104// Compress everything with Brotli 105site.use(brotli({ 106 extensions: [ 107 ".html", 108 ".css", 109 ".js", 110 ".mjs", 111 ".svg", 112 ".json", 113 ".xml", 114 ".txt", 115 ".rss", 116 ".map" 117 ] 118})); 119 120export default site;