From 9e58857746b74ef3e122139f7db09509435bebc8 Mon Sep 17 00:00:00 2001 From: dralagen Date: Sat, 26 Apr 2025 20:06:59 +0200 Subject: [PATCH] feat(favicon): add plugin to expose favicon from icon.png (#1942) * feat(favicon): add plugin to expose favicon from icon.png * chore(favicon): clean up formatting and remove unnecessary line breaks --- quartz.config.ts | 1 + quartz/plugins/emitters/favicon.ts | 16 ++++++++++++++++ quartz/plugins/emitters/index.ts | 1 + 3 files changed, 18 insertions(+) create mode 100644 quartz/plugins/emitters/favicon.ts diff --git a/quartz.config.ts b/quartz.config.ts index efe9648..b3db3d6 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 0000000..c58322c --- /dev/null +++ b/quartz/plugins/emitters/favicon.ts @@ -0,0 +1,16 @@ +import sharp from "sharp" +import { joinSegments, QUARTZ, FilePath } from "../../util/path" +import { QuartzEmitterPlugin } from "../types" + +export const Favicon: QuartzEmitterPlugin = () => ({ + name: "Favicon", + async *emit({ argv }) { + 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() {}, +}) diff --git a/quartz/plugins/emitters/index.ts b/quartz/plugins/emitters/index.ts index 842ffb0..d2de2ed 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"