From afae0986af445d903a53e34c0f93c4038e9f1fb6 Mon Sep 17 00:00:00 2001 From: dralagen Date: Fri, 25 Apr 2025 14:40:19 +0200 Subject: [PATCH] feat(favicon): add plugin to expose favicon from icon.png --- quartz.config.ts | 1 + quartz/plugins/emitters/favicon.ts | 19 +++++++++++++++++++ quartz/plugins/emitters/index.ts | 1 + 3 files changed, 21 insertions(+) create mode 100644 quartz/plugins/emitters/favicon.ts diff --git a/quartz.config.ts b/quartz.config.ts index efe96485c..b3db3d60d 100644 --- a/quartz.config.ts +++ b/quartz.config.ts @@ -86,6 +86,7 @@ const config: QuartzConfig = { }), Plugin.Assets(), Plugin.Static(), + Plugin.Favicon(), Plugin.NotFoundPage(), // Comment out CustomOgImages to speed up build time Plugin.CustomOgImages(), diff --git a/quartz/plugins/emitters/favicon.ts b/quartz/plugins/emitters/favicon.ts new file mode 100644 index 000000000..7bb53640c --- /dev/null +++ b/quartz/plugins/emitters/favicon.ts @@ -0,0 +1,19 @@ +import sharp from "sharp"; +import { joinSegments, QUARTZ, FilePath } from "../../util/path"; +import { QuartzEmitterPlugin } from "../types"; + +export const Favicon: QuartzEmitterPlugin = () => ({ + name: "Favicon", + async *emit({ argv, cfg }) { + const iconPath = joinSegments(QUARTZ, "static", "icon.png") + const dest = joinSegments(argv.output, "favicon.ico") as FilePath + + await sharp(iconPath) + .resize(48, 48) + .toFormat("png") + .toFile(dest) + + yield dest + }, + async *partialEmit() {}, +}) \ No newline at end of file diff --git a/quartz/plugins/emitters/index.ts b/quartz/plugins/emitters/index.ts index 842ffb083..d2de2ed1e 100644 --- a/quartz/plugins/emitters/index.ts +++ b/quartz/plugins/emitters/index.ts @@ -5,6 +5,7 @@ export { ContentIndex as ContentIndex } from "./contentIndex" export { AliasRedirects } from "./aliases" export { Assets } from "./assets" export { Static } from "./static" +export { Favicon } from "./favicon" export { ComponentResources } from "./componentResources" export { NotFoundPage } from "./404" export { CNAME } from "./cname"