From 21ad72400d357a9c1d743434758e4783892a4fe1 Mon Sep 17 00:00:00 2001 From: Nathan Price Date: Fri, 17 Jan 2025 14:47:12 -0500 Subject: [PATCH] configuration using json --- config.json | 137 +++++++++++++++++++++++++++++++++++++++++++++++ quartz.config.ts | 103 ++++++++--------------------------- 2 files changed, 158 insertions(+), 82 deletions(-) create mode 100644 config.json diff --git a/config.json b/config.json new file mode 100644 index 000000000..c6b5b33f0 --- /dev/null +++ b/config.json @@ -0,0 +1,137 @@ +{ + "configuration": { + "pageTitle": "🪴 Quartz 4.0", + "pageTitleSuffix": "", + "enableSPA": true, + "enablePopovers": true, + "analytics": { + "provider": "plausible" + }, + "locale": "en-US", + "baseUrl": "quartz.jzhao.xyz", + "ignorePatterns": ["private", "templates", ".obsidian"], + "defaultDateType": "created", + "generateSocialImages": false, + "theme": { + "fontOrigin": "googleFonts", + "cdnCaching": true, + "typography": { + "header": "Schibsted Grotesk", + "body": "Source Sans Pro", + "code": "IBM Plex Mono" + }, + "colors": { + "lightMode": { + "light": "#faf8f8", + "lightgray": "#e5e5e5", + "gray": "#b8b8b8", + "darkgray": "#4e4e4e", + "dark": "#2b2b2b", + "secondary": "#284b63", + "tertiary": "#84a59d", + "highlight": "rgba(143, 159, 169, 0.15)", + "textHighlight": "#fff23688" + }, + "darkMode": { + "light": "#161618", + "lightgray": "#393639", + "gray": "#646464", + "darkgray": "#d4d4d4", + "dark": "#ebebec", + "secondary": "#7b97aa", + "tertiary": "#84a59d", + "highlight": "rgba(143, 159, 169, 0.15)", + "textHighlight": "#b3aa0288" + } + } + } + }, + "plugins": { + "transformers": [ + { + "name": "FrontMatter" + }, + { + "name": "CreatedModifiedDate", + "config": { + "priority": ["frontmatter", "filesystem"] + } + }, + { + "name": "SyntaxHighlighting", + "config": { + "theme": { + "light": "github-light", + "dark": "github-dark" + }, + "keepBackground": false + } + }, + { + "name": "ObsidianFlavoredMarkdown", + "config": { + "enableInHtmlEmbed": false + } + }, + { + "name": "GitHubFlavoredMarkdown" + }, + { + "name": "TableOfContents" + }, + { + "name": "CrawlLinks", + "config": { + "markdownLinkResolution": "shortest" + } + }, + { + "name": "Description" + }, + { + "name": "Latex", + "config": { + "renderEngine": "katex" + } + } + ], + "filters": [ + { + "name": "RemoveDrafts" + } + ], + "emitters": [ + { + "name": "AliasRedirects" + }, + { + "name": "ComponentResources" + }, + { + "name": "ContentPage" + }, + { + "name": "FolderPage" + }, + { + "name": "TagPage" + }, + { + "name": "ContentIndex", + "config": { + "enableSiteMap": true, + "enableRSS": true + } + }, + { + "name": "Assets" + }, + { + "name": "Static" + }, + { + "name": "NotFoundPage" + } + ] + } +} diff --git a/quartz.config.ts b/quartz.config.ts index dc339d987..d47008573 100644 --- a/quartz.config.ts +++ b/quartz.config.ts @@ -1,94 +1,33 @@ import { QuartzConfig } from "./quartz/cfg" import * as Plugin from "./quartz/plugins" - +import * as fs from "fs" +import * as path from "path" /** * Quartz 4.0 Configuration * * See https://quartz.jzhao.xyz/configuration for more information. */ + +const configPath = process.env.QUARTZ_CONFIG_PATH || path.resolve(__dirname, "config.json") + +const rawData = fs.readFileSync(configPath, "utf-8") +const configData = JSON.parse(rawData) + +function loadPlugins(pluginList: { name: string; config?: Record }[]): T[] { + return pluginList.map((plugin) => { + if (plugin.config) { + return (Plugin as any)[plugin.name](plugin.config) + } + return (Plugin as any)[plugin.name]() + }) +} + const config: QuartzConfig = { - configuration: { - pageTitle: "🪴 Quartz 4.0", - pageTitleSuffix: "", - enableSPA: true, - enablePopovers: true, - analytics: { - provider: "plausible", - }, - locale: "en-US", - baseUrl: "quartz.jzhao.xyz", - ignorePatterns: ["private", "templates", ".obsidian"], - defaultDateType: "created", - generateSocialImages: false, - theme: { - fontOrigin: "googleFonts", - cdnCaching: true, - typography: { - header: "Schibsted Grotesk", - body: "Source Sans Pro", - code: "IBM Plex Mono", - }, - colors: { - lightMode: { - light: "#faf8f8", - lightgray: "#e5e5e5", - gray: "#b8b8b8", - darkgray: "#4e4e4e", - dark: "#2b2b2b", - secondary: "#284b63", - tertiary: "#84a59d", - highlight: "rgba(143, 159, 169, 0.15)", - textHighlight: "#fff23688", - }, - darkMode: { - light: "#161618", - lightgray: "#393639", - gray: "#646464", - darkgray: "#d4d4d4", - dark: "#ebebec", - secondary: "#7b97aa", - tertiary: "#84a59d", - highlight: "rgba(143, 159, 169, 0.15)", - textHighlight: "#b3aa0288", - }, - }, - }, - }, + configuration: configData.configuration, plugins: { - transformers: [ - Plugin.FrontMatter(), - Plugin.CreatedModifiedDate({ - priority: ["frontmatter", "filesystem"], - }), - Plugin.SyntaxHighlighting({ - theme: { - light: "github-light", - dark: "github-dark", - }, - keepBackground: false, - }), - Plugin.ObsidianFlavoredMarkdown({ enableInHtmlEmbed: false }), - Plugin.GitHubFlavoredMarkdown(), - Plugin.TableOfContents(), - Plugin.CrawlLinks({ markdownLinkResolution: "shortest" }), - Plugin.Description(), - Plugin.Latex({ renderEngine: "katex" }), - ], - filters: [Plugin.RemoveDrafts()], - emitters: [ - Plugin.AliasRedirects(), - Plugin.ComponentResources(), - Plugin.ContentPage(), - Plugin.FolderPage(), - Plugin.TagPage(), - Plugin.ContentIndex({ - enableSiteMap: true, - enableRSS: true, - }), - Plugin.Assets(), - Plugin.Static(), - Plugin.NotFoundPage(), - ], + transformers: loadPlugins(configData.plugins.transformers), + filters: loadPlugins(configData.plugins.filters), + emitters: loadPlugins(configData.plugins.emitters), }, }