@@ -0,0 +1,498 @@
4+ "github.com/charmbracelet/glamour/ansi"
5+ "github.com/charmbracelet/lipgloss"
8+const defaultMargin = 2
10+// Helper functions for style pointers
11+func boolPtr(b bool) *bool { return &b }
12+func stringPtr(s string) *string { return &s }
13+func uintPtr(u uint) *uint { return &u }
15+// CatppuccinMarkdownStyle is the Catppuccin Mocha style for Glamour markdown rendering.
16+func CatppuccinMarkdownStyle() ansi.StyleConfig {
17+ isDark := lipgloss.HasDarkBackground()
19+ return catppuccinDark
21+ return catppuccinLight
24+var catppuccinDark = ansi.StyleConfig{
25+ Document: ansi.StyleBlock{
26+ StylePrimitive: ansi.StylePrimitive{
29+ Color: stringPtr(dark.Text().Hex),
31+ Margin: uintPtr(defaultMargin),
33+ BlockQuote: ansi.StyleBlock{
34+ StylePrimitive: ansi.StylePrimitive{
35+ Color: stringPtr(dark.Yellow().Hex),
36+ Italic: boolPtr(true),
40+ Margin: uintPtr(defaultMargin),
42+ List: ansi.StyleList{
43+ LevelIndent: defaultMargin,
44+ StyleBlock: ansi.StyleBlock{
45+ StylePrimitive: ansi.StylePrimitive{
46+ Color: stringPtr(dark.Text().Hex),
50+ Heading: ansi.StyleBlock{
51+ StylePrimitive: ansi.StylePrimitive{
53+ Color: stringPtr(dark.Mauve().Hex),
58+ StylePrimitive: ansi.StylePrimitive{
60+ Color: stringPtr(dark.Lavender().Hex),
66+ StylePrimitive: ansi.StylePrimitive{
68+ Color: stringPtr(dark.Mauve().Hex),
73+ StylePrimitive: ansi.StylePrimitive{
75+ Color: stringPtr(dark.Pink().Hex),
80+ StylePrimitive: ansi.StylePrimitive{
82+ Color: stringPtr(dark.Flamingo().Hex),
87+ StylePrimitive: ansi.StylePrimitive{
89+ Color: stringPtr(dark.Rosewater().Hex),
94+ StylePrimitive: ansi.StylePrimitive{
96+ Color: stringPtr(dark.Rosewater().Hex),
100+ Strikethrough: ansi.StylePrimitive{
101+ CrossedOut: boolPtr(true),
102+ Color: stringPtr(dark.Overlay1().Hex),
104+ Emph: ansi.StylePrimitive{
105+ Color: stringPtr(dark.Yellow().Hex),
106+ Italic: boolPtr(true),
108+ Strong: ansi.StylePrimitive{
109+ Bold: boolPtr(true),
110+ Color: stringPtr(dark.Peach().Hex),
112+ HorizontalRule: ansi.StylePrimitive{
113+ Color: stringPtr(dark.Overlay0().Hex),
114+ Format: "\n─────────────────────────────────────────\n",
116+ Item: ansi.StylePrimitive{
118+ Color: stringPtr(dark.Blue().Hex),
120+ Enumeration: ansi.StylePrimitive{
122+ Color: stringPtr(dark.Sky().Hex),
124+ Task: ansi.StyleTask{
125+ StylePrimitive: ansi.StylePrimitive{},
129+ Link: ansi.StylePrimitive{
130+ Color: stringPtr(dark.Sky().Hex),
131+ Underline: boolPtr(true),
133+ LinkText: ansi.StylePrimitive{
134+ Color: stringPtr(dark.Pink().Hex),
135+ Bold: boolPtr(true),
137+ Image: ansi.StylePrimitive{
138+ Color: stringPtr(dark.Sapphire().Hex),
139+ Underline: boolPtr(true),
140+ Format: "🖼 {{.text}}",
142+ ImageText: ansi.StylePrimitive{
143+ Color: stringPtr(dark.Pink().Hex),
144+ Format: "{{.text}}",
146+ Code: ansi.StyleBlock{
147+ StylePrimitive: ansi.StylePrimitive{
148+ Color: stringPtr(dark.Green().Hex),
153+ CodeBlock: ansi.StyleCodeBlock{
154+ StyleBlock: ansi.StyleBlock{
155+ StylePrimitive: ansi.StylePrimitive{
157+ Color: stringPtr(dark.Text().Hex),
160+ Margin: uintPtr(defaultMargin),
162+ Chroma: &ansi.Chroma{
163+ Text: ansi.StylePrimitive{
164+ Color: stringPtr(dark.Text().Hex),
166+ Error: ansi.StylePrimitive{
167+ Color: stringPtr(dark.Text().Hex),
169+ Comment: ansi.StylePrimitive{
170+ Color: stringPtr(dark.Overlay1().Hex),
172+ CommentPreproc: ansi.StylePrimitive{
173+ Color: stringPtr(dark.Pink().Hex),
175+ Keyword: ansi.StylePrimitive{
176+ Color: stringPtr(dark.Pink().Hex),
178+ KeywordReserved: ansi.StylePrimitive{
179+ Color: stringPtr(dark.Pink().Hex),
181+ KeywordNamespace: ansi.StylePrimitive{
182+ Color: stringPtr(dark.Pink().Hex),
184+ KeywordType: ansi.StylePrimitive{
185+ Color: stringPtr(dark.Sky().Hex),
187+ Operator: ansi.StylePrimitive{
188+ Color: stringPtr(dark.Pink().Hex),
190+ Punctuation: ansi.StylePrimitive{
191+ Color: stringPtr(dark.Text().Hex),
193+ Name: ansi.StylePrimitive{
194+ Color: stringPtr(dark.Sky().Hex),
196+ NameBuiltin: ansi.StylePrimitive{
197+ Color: stringPtr(dark.Sky().Hex),
199+ NameTag: ansi.StylePrimitive{
200+ Color: stringPtr(dark.Pink().Hex),
202+ NameAttribute: ansi.StylePrimitive{
203+ Color: stringPtr(dark.Green().Hex),
205+ NameClass: ansi.StylePrimitive{
206+ Color: stringPtr(dark.Sky().Hex),
208+ NameConstant: ansi.StylePrimitive{
209+ Color: stringPtr(dark.Mauve().Hex),
211+ NameDecorator: ansi.StylePrimitive{
212+ Color: stringPtr(dark.Green().Hex),
214+ NameFunction: ansi.StylePrimitive{
215+ Color: stringPtr(dark.Green().Hex),
217+ LiteralNumber: ansi.StylePrimitive{
218+ Color: stringPtr(dark.Teal().Hex),
220+ LiteralString: ansi.StylePrimitive{
221+ Color: stringPtr(dark.Yellow().Hex),
223+ LiteralStringEscape: ansi.StylePrimitive{
224+ Color: stringPtr(dark.Pink().Hex),
226+ GenericDeleted: ansi.StylePrimitive{
227+ Color: stringPtr(dark.Red().Hex),
229+ GenericEmph: ansi.StylePrimitive{
230+ Color: stringPtr(dark.Yellow().Hex),
231+ Italic: boolPtr(true),
233+ GenericInserted: ansi.StylePrimitive{
234+ Color: stringPtr(dark.Green().Hex),
236+ GenericStrong: ansi.StylePrimitive{
237+ Color: stringPtr(dark.Peach().Hex),
238+ Bold: boolPtr(true),
240+ GenericSubheading: ansi.StylePrimitive{
241+ Color: stringPtr(dark.Mauve().Hex),
245+ Table: ansi.StyleTable{
246+ StyleBlock: ansi.StyleBlock{
247+ StylePrimitive: ansi.StylePrimitive{
252+ CenterSeparator: stringPtr("┼"),
253+ ColumnSeparator: stringPtr("│"),
254+ RowSeparator: stringPtr("─"),
256+ DefinitionDescription: ansi.StylePrimitive{
257+ BlockPrefix: "\n ❯ ",
258+ Color: stringPtr(dark.Sapphire().Hex),
262+var catppuccinLight = ansi.StyleConfig{
263+ Document: ansi.StyleBlock{
264+ StylePrimitive: ansi.StylePrimitive{
267+ Color: stringPtr(light.Text().Hex),
269+ Margin: uintPtr(defaultMargin),
271+ BlockQuote: ansi.StyleBlock{
272+ StylePrimitive: ansi.StylePrimitive{
273+ Color: stringPtr(light.Yellow().Hex),
274+ Italic: boolPtr(true),
278+ Margin: uintPtr(defaultMargin),
280+ List: ansi.StyleList{
281+ LevelIndent: defaultMargin,
282+ StyleBlock: ansi.StyleBlock{
283+ StylePrimitive: ansi.StylePrimitive{
284+ Color: stringPtr(light.Text().Hex),
288+ Heading: ansi.StyleBlock{
289+ StylePrimitive: ansi.StylePrimitive{
291+ Color: stringPtr(light.Mauve().Hex),
292+ Bold: boolPtr(true),
295+ H1: ansi.StyleBlock{
296+ StylePrimitive: ansi.StylePrimitive{
298+ Color: stringPtr(light.Lavender().Hex),
299+ Bold: boolPtr(true),
303+ H2: ansi.StyleBlock{
304+ StylePrimitive: ansi.StylePrimitive{
306+ Color: stringPtr(light.Mauve().Hex),
307+ Bold: boolPtr(true),
310+ H3: ansi.StyleBlock{
311+ StylePrimitive: ansi.StylePrimitive{
313+ Color: stringPtr(light.Pink().Hex),
314+ Bold: boolPtr(true),
317+ H4: ansi.StyleBlock{
318+ StylePrimitive: ansi.StylePrimitive{
320+ Color: stringPtr(light.Flamingo().Hex),
321+ Bold: boolPtr(true),
324+ H5: ansi.StyleBlock{
325+ StylePrimitive: ansi.StylePrimitive{
327+ Color: stringPtr(light.Rosewater().Hex),
328+ Bold: boolPtr(true),
331+ H6: ansi.StyleBlock{
332+ StylePrimitive: ansi.StylePrimitive{
334+ Color: stringPtr(light.Rosewater().Hex),
335+ Bold: boolPtr(true),
338+ Strikethrough: ansi.StylePrimitive{
339+ CrossedOut: boolPtr(true),
340+ Color: stringPtr(light.Overlay1().Hex),
342+ Emph: ansi.StylePrimitive{
343+ Color: stringPtr(light.Yellow().Hex),
344+ Italic: boolPtr(true),
346+ Strong: ansi.StylePrimitive{
347+ Bold: boolPtr(true),
348+ Color: stringPtr(light.Peach().Hex),
350+ HorizontalRule: ansi.StylePrimitive{
351+ Color: stringPtr(light.Overlay0().Hex),
352+ Format: "\n─────────────────────────────────────────\n",
354+ Item: ansi.StylePrimitive{
356+ Color: stringPtr(light.Blue().Hex),
358+ Enumeration: ansi.StylePrimitive{
360+ Color: stringPtr(light.Sky().Hex),
362+ Task: ansi.StyleTask{
363+ StylePrimitive: ansi.StylePrimitive{},
367+ Link: ansi.StylePrimitive{
368+ Color: stringPtr(light.Sky().Hex),
369+ Underline: boolPtr(true),
371+ LinkText: ansi.StylePrimitive{
372+ Color: stringPtr(light.Pink().Hex),
373+ Bold: boolPtr(true),
375+ Image: ansi.StylePrimitive{
376+ Color: stringPtr(light.Sapphire().Hex),
377+ Underline: boolPtr(true),
378+ Format: "🖼 {{.text}}",
380+ ImageText: ansi.StylePrimitive{
381+ Color: stringPtr(light.Pink().Hex),
382+ Format: "{{.text}}",
384+ Code: ansi.StyleBlock{
385+ StylePrimitive: ansi.StylePrimitive{
386+ Color: stringPtr(light.Green().Hex),
391+ CodeBlock: ansi.StyleCodeBlock{
392+ StyleBlock: ansi.StyleBlock{
393+ StylePrimitive: ansi.StylePrimitive{
395+ Color: stringPtr(light.Text().Hex),
398+ Margin: uintPtr(defaultMargin),
400+ Chroma: &ansi.Chroma{
401+ Text: ansi.StylePrimitive{
402+ Color: stringPtr(light.Text().Hex),
404+ Error: ansi.StylePrimitive{
405+ Color: stringPtr(light.Text().Hex),
407+ Comment: ansi.StylePrimitive{
408+ Color: stringPtr(light.Overlay1().Hex),
410+ CommentPreproc: ansi.StylePrimitive{
411+ Color: stringPtr(light.Pink().Hex),
413+ Keyword: ansi.StylePrimitive{
414+ Color: stringPtr(light.Pink().Hex),
416+ KeywordReserved: ansi.StylePrimitive{
417+ Color: stringPtr(light.Pink().Hex),
419+ KeywordNamespace: ansi.StylePrimitive{
420+ Color: stringPtr(light.Pink().Hex),
422+ KeywordType: ansi.StylePrimitive{
423+ Color: stringPtr(light.Sky().Hex),
425+ Operator: ansi.StylePrimitive{
426+ Color: stringPtr(light.Pink().Hex),
428+ Punctuation: ansi.StylePrimitive{
429+ Color: stringPtr(light.Text().Hex),
431+ Name: ansi.StylePrimitive{
432+ Color: stringPtr(light.Sky().Hex),
434+ NameBuiltin: ansi.StylePrimitive{
435+ Color: stringPtr(light.Sky().Hex),
437+ NameTag: ansi.StylePrimitive{
438+ Color: stringPtr(light.Pink().Hex),
440+ NameAttribute: ansi.StylePrimitive{
441+ Color: stringPtr(light.Green().Hex),
443+ NameClass: ansi.StylePrimitive{
444+ Color: stringPtr(light.Sky().Hex),
446+ NameConstant: ansi.StylePrimitive{
447+ Color: stringPtr(light.Mauve().Hex),
449+ NameDecorator: ansi.StylePrimitive{
450+ Color: stringPtr(light.Green().Hex),
452+ NameFunction: ansi.StylePrimitive{
453+ Color: stringPtr(light.Green().Hex),
455+ LiteralNumber: ansi.StylePrimitive{
456+ Color: stringPtr(light.Teal().Hex),
458+ LiteralString: ansi.StylePrimitive{
459+ Color: stringPtr(light.Yellow().Hex),
461+ LiteralStringEscape: ansi.StylePrimitive{
462+ Color: stringPtr(light.Pink().Hex),
464+ GenericDeleted: ansi.StylePrimitive{
465+ Color: stringPtr(light.Red().Hex),
467+ GenericEmph: ansi.StylePrimitive{
468+ Color: stringPtr(light.Yellow().Hex),
469+ Italic: boolPtr(true),
471+ GenericInserted: ansi.StylePrimitive{
472+ Color: stringPtr(light.Green().Hex),
474+ GenericStrong: ansi.StylePrimitive{
475+ Color: stringPtr(light.Peach().Hex),
476+ Bold: boolPtr(true),
478+ GenericSubheading: ansi.StylePrimitive{
479+ Color: stringPtr(light.Mauve().Hex),
483+ Table: ansi.StyleTable{
484+ StyleBlock: ansi.StyleBlock{
485+ StylePrimitive: ansi.StylePrimitive{
490+ CenterSeparator: stringPtr("┼"),
491+ ColumnSeparator: stringPtr("│"),
492+ RowSeparator: stringPtr("─"),
494+ DefinitionDescription: ansi.StylePrimitive{
495+ BlockPrefix: "\n ❯ ",
496+ Color: stringPtr(light.Sapphire().Hex),