catppuccin.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. package theme
  2. import (
  3. catppuccin "github.com/catppuccin/go"
  4. "github.com/charmbracelet/lipgloss"
  5. )
  6. // CatppuccinTheme implements the Theme interface with Catppuccin colors.
  7. // It provides both dark (Mocha) and light (Latte) variants.
  8. type CatppuccinTheme struct {
  9. BaseTheme
  10. }
  11. // NewCatppuccinTheme creates a new instance of the Catppuccin theme.
  12. func NewCatppuccinTheme() *CatppuccinTheme {
  13. // Get the Catppuccin palettes
  14. mocha := catppuccin.Mocha
  15. latte := catppuccin.Latte
  16. theme := &CatppuccinTheme{}
  17. // Base colors
  18. theme.PrimaryColor = lipgloss.AdaptiveColor{
  19. Dark: mocha.Blue().Hex,
  20. Light: latte.Blue().Hex,
  21. }
  22. theme.SecondaryColor = lipgloss.AdaptiveColor{
  23. Dark: mocha.Mauve().Hex,
  24. Light: latte.Mauve().Hex,
  25. }
  26. theme.AccentColor = lipgloss.AdaptiveColor{
  27. Dark: mocha.Peach().Hex,
  28. Light: latte.Peach().Hex,
  29. }
  30. // Status colors
  31. theme.ErrorColor = lipgloss.AdaptiveColor{
  32. Dark: mocha.Red().Hex,
  33. Light: latte.Red().Hex,
  34. }
  35. theme.WarningColor = lipgloss.AdaptiveColor{
  36. Dark: mocha.Peach().Hex,
  37. Light: latte.Peach().Hex,
  38. }
  39. theme.SuccessColor = lipgloss.AdaptiveColor{
  40. Dark: mocha.Green().Hex,
  41. Light: latte.Green().Hex,
  42. }
  43. theme.InfoColor = lipgloss.AdaptiveColor{
  44. Dark: mocha.Blue().Hex,
  45. Light: latte.Blue().Hex,
  46. }
  47. // Text colors
  48. theme.TextColor = lipgloss.AdaptiveColor{
  49. Dark: mocha.Text().Hex,
  50. Light: latte.Text().Hex,
  51. }
  52. theme.TextMutedColor = lipgloss.AdaptiveColor{
  53. Dark: mocha.Subtext0().Hex,
  54. Light: latte.Subtext0().Hex,
  55. }
  56. theme.TextEmphasizedColor = lipgloss.AdaptiveColor{
  57. Dark: mocha.Lavender().Hex,
  58. Light: latte.Lavender().Hex,
  59. }
  60. // Background colors
  61. theme.BackgroundColor = lipgloss.AdaptiveColor{
  62. Dark: "#212121", // From existing styles
  63. Light: "#EEEEEE", // Light equivalent
  64. }
  65. theme.BackgroundSecondaryColor = lipgloss.AdaptiveColor{
  66. Dark: "#2c2c2c", // From existing styles
  67. Light: "#E0E0E0", // Light equivalent
  68. }
  69. theme.BackgroundDarkerColor = lipgloss.AdaptiveColor{
  70. Dark: "#181818", // From existing styles
  71. Light: "#F5F5F5", // Light equivalent
  72. }
  73. // Border colors
  74. theme.BorderNormalColor = lipgloss.AdaptiveColor{
  75. Dark: "#4b4c5c", // From existing styles
  76. Light: "#BDBDBD", // Light equivalent
  77. }
  78. theme.BorderFocusedColor = lipgloss.AdaptiveColor{
  79. Dark: mocha.Blue().Hex,
  80. Light: latte.Blue().Hex,
  81. }
  82. theme.BorderDimColor = lipgloss.AdaptiveColor{
  83. Dark: mocha.Surface0().Hex,
  84. Light: latte.Surface0().Hex,
  85. }
  86. // Diff view colors
  87. theme.DiffAddedColor = lipgloss.AdaptiveColor{
  88. Dark: "#478247", // From existing diff.go
  89. Light: "#2E7D32", // Light equivalent
  90. }
  91. theme.DiffRemovedColor = lipgloss.AdaptiveColor{
  92. Dark: "#7C4444", // From existing diff.go
  93. Light: "#C62828", // Light equivalent
  94. }
  95. theme.DiffContextColor = lipgloss.AdaptiveColor{
  96. Dark: "#a0a0a0", // From existing diff.go
  97. Light: "#757575", // Light equivalent
  98. }
  99. theme.DiffHunkHeaderColor = lipgloss.AdaptiveColor{
  100. Dark: "#a0a0a0", // From existing diff.go
  101. Light: "#757575", // Light equivalent
  102. }
  103. theme.DiffHighlightAddedColor = lipgloss.AdaptiveColor{
  104. Dark: "#DAFADA", // From existing diff.go
  105. Light: "#A5D6A7", // Light equivalent
  106. }
  107. theme.DiffHighlightRemovedColor = lipgloss.AdaptiveColor{
  108. Dark: "#FADADD", // From existing diff.go
  109. Light: "#EF9A9A", // Light equivalent
  110. }
  111. theme.DiffAddedBgColor = lipgloss.AdaptiveColor{
  112. Dark: "#303A30", // From existing diff.go
  113. Light: "#E8F5E9", // Light equivalent
  114. }
  115. theme.DiffRemovedBgColor = lipgloss.AdaptiveColor{
  116. Dark: "#3A3030", // From existing diff.go
  117. Light: "#FFEBEE", // Light equivalent
  118. }
  119. theme.DiffContextBgColor = lipgloss.AdaptiveColor{
  120. Dark: "#212121", // From existing diff.go
  121. Light: "#F5F5F5", // Light equivalent
  122. }
  123. theme.DiffLineNumberColor = lipgloss.AdaptiveColor{
  124. Dark: "#888888", // From existing diff.go
  125. Light: "#9E9E9E", // Light equivalent
  126. }
  127. theme.DiffAddedLineNumberBgColor = lipgloss.AdaptiveColor{
  128. Dark: "#293229", // From existing diff.go
  129. Light: "#C8E6C9", // Light equivalent
  130. }
  131. theme.DiffRemovedLineNumberBgColor = lipgloss.AdaptiveColor{
  132. Dark: "#332929", // From existing diff.go
  133. Light: "#FFCDD2", // Light equivalent
  134. }
  135. // Markdown colors
  136. theme.MarkdownTextColor = lipgloss.AdaptiveColor{
  137. Dark: mocha.Text().Hex,
  138. Light: latte.Text().Hex,
  139. }
  140. theme.MarkdownHeadingColor = lipgloss.AdaptiveColor{
  141. Dark: mocha.Mauve().Hex,
  142. Light: latte.Mauve().Hex,
  143. }
  144. theme.MarkdownLinkColor = lipgloss.AdaptiveColor{
  145. Dark: mocha.Sky().Hex,
  146. Light: latte.Sky().Hex,
  147. }
  148. theme.MarkdownLinkTextColor = lipgloss.AdaptiveColor{
  149. Dark: mocha.Pink().Hex,
  150. Light: latte.Pink().Hex,
  151. }
  152. theme.MarkdownCodeColor = lipgloss.AdaptiveColor{
  153. Dark: mocha.Green().Hex,
  154. Light: latte.Green().Hex,
  155. }
  156. theme.MarkdownBlockQuoteColor = lipgloss.AdaptiveColor{
  157. Dark: mocha.Yellow().Hex,
  158. Light: latte.Yellow().Hex,
  159. }
  160. theme.MarkdownEmphColor = lipgloss.AdaptiveColor{
  161. Dark: mocha.Yellow().Hex,
  162. Light: latte.Yellow().Hex,
  163. }
  164. theme.MarkdownStrongColor = lipgloss.AdaptiveColor{
  165. Dark: mocha.Peach().Hex,
  166. Light: latte.Peach().Hex,
  167. }
  168. theme.MarkdownHorizontalRuleColor = lipgloss.AdaptiveColor{
  169. Dark: mocha.Overlay0().Hex,
  170. Light: latte.Overlay0().Hex,
  171. }
  172. theme.MarkdownListItemColor = lipgloss.AdaptiveColor{
  173. Dark: mocha.Blue().Hex,
  174. Light: latte.Blue().Hex,
  175. }
  176. theme.MarkdownListEnumerationColor = lipgloss.AdaptiveColor{
  177. Dark: mocha.Sky().Hex,
  178. Light: latte.Sky().Hex,
  179. }
  180. theme.MarkdownImageColor = lipgloss.AdaptiveColor{
  181. Dark: mocha.Sapphire().Hex,
  182. Light: latte.Sapphire().Hex,
  183. }
  184. theme.MarkdownImageTextColor = lipgloss.AdaptiveColor{
  185. Dark: mocha.Pink().Hex,
  186. Light: latte.Pink().Hex,
  187. }
  188. theme.MarkdownCodeBlockColor = lipgloss.AdaptiveColor{
  189. Dark: mocha.Text().Hex,
  190. Light: latte.Text().Hex,
  191. }
  192. // Syntax highlighting colors
  193. theme.SyntaxCommentColor = lipgloss.AdaptiveColor{
  194. Dark: mocha.Overlay1().Hex,
  195. Light: latte.Overlay1().Hex,
  196. }
  197. theme.SyntaxKeywordColor = lipgloss.AdaptiveColor{
  198. Dark: mocha.Pink().Hex,
  199. Light: latte.Pink().Hex,
  200. }
  201. theme.SyntaxFunctionColor = lipgloss.AdaptiveColor{
  202. Dark: mocha.Green().Hex,
  203. Light: latte.Green().Hex,
  204. }
  205. theme.SyntaxVariableColor = lipgloss.AdaptiveColor{
  206. Dark: mocha.Sky().Hex,
  207. Light: latte.Sky().Hex,
  208. }
  209. theme.SyntaxStringColor = lipgloss.AdaptiveColor{
  210. Dark: mocha.Yellow().Hex,
  211. Light: latte.Yellow().Hex,
  212. }
  213. theme.SyntaxNumberColor = lipgloss.AdaptiveColor{
  214. Dark: mocha.Teal().Hex,
  215. Light: latte.Teal().Hex,
  216. }
  217. theme.SyntaxTypeColor = lipgloss.AdaptiveColor{
  218. Dark: mocha.Sky().Hex,
  219. Light: latte.Sky().Hex,
  220. }
  221. theme.SyntaxOperatorColor = lipgloss.AdaptiveColor{
  222. Dark: mocha.Pink().Hex,
  223. Light: latte.Pink().Hex,
  224. }
  225. theme.SyntaxPunctuationColor = lipgloss.AdaptiveColor{
  226. Dark: mocha.Text().Hex,
  227. Light: latte.Text().Hex,
  228. }
  229. return theme
  230. }
  231. func init() {
  232. // Register the Catppuccin theme with the theme manager
  233. RegisterTheme("catppuccin", NewCatppuccinTheme())
  234. }