import { QuartzConfig } from "./quartz/cfg" import * as Plugin from "./quartz/plugins" /** * Quartz 4 Configuration * * See https://quartz.jzhao.xyz/configuration for more information. */ const config: QuartzConfig = { configuration: { pageTitle: "🗾 Japanese", enableSPA: true, enablePopovers: true, analytics: null, locale: "en-US", baseUrl: "jp.marchal.dev", ignorePatterns: ["private", "templates", ".obsidian"], defaultDateType: "modified", theme: { fontOrigin: "googleFonts", cdnCaching: false, 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: [ Plugin.FrontMatter(), Plugin.CreatedModifiedDate({ priority: ["frontmatter", "git", "filesystem"], }), Plugin.SyntaxHighlighting({ theme: { light: "github-light", dark: "github-dark", }, keepBackground: false, }), Plugin.ObsidianFlavoredMarkdown({ enableInHtmlEmbed: true, enableYouTubeEmbed: true }), Plugin.GitHubFlavoredMarkdown(), Plugin.TableOfContents({ maxDepth: 4, }), Plugin.CrawlLinks({ markdownLinkResolution: "shortest" }), Plugin.Description(), Plugin.Latex({ renderEngine: "katex" }), ], filters: [Plugin.RemoveDrafts()], emitters: [ Plugin.AliasRedirects(), Plugin.ComponentResources(), Plugin.ContentPage(), Plugin.FolderPage({ sort: (f1, f2) => { const naturalCompare = (a: string, b: string) => { const splitA = a.split(/(\d+)/).filter(Boolean) const splitB = b.split(/(\d+)/).filter(Boolean) for (let i = 0; i < Math.min(splitA.length, splitB.length); i++) { const numA = parseInt(splitA[i], 10) const numB = parseInt(splitB[i], 10) if (!isNaN(numA) && !isNaN(numB)) { if (numA !== numB) return numA - numB } else { const compare = splitA[i].localeCompare(splitB[i]) if (compare !== 0) return compare } } return splitA.length - splitB.length } const f1Title = f1.frontmatter?.title?.toLowerCase() ?? "" const f2Title = f2.frontmatter?.title?.toLowerCase() ?? "" return naturalCompare(f1Title, f2Title) }, }), Plugin.TagPage(), Plugin.ContentIndex({ enableSiteMap: true, enableRSS: true, }), Plugin.Assets(), Plugin.Static(), Plugin.Favicon(), Plugin.NotFoundPage(), // Comment out CustomOgImages to speed up build time // Plugin.CustomOgImages(), ], }, } export default config