Files
jpg-quartz/quartz.config.ts

121 lines
3.4 KiB
TypeScript

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