onedark.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. package theme
  2. import (
  3. "github.com/charmbracelet/lipgloss"
  4. )
  5. // OneDarkTheme implements the Theme interface with Atom's One Dark colors.
  6. // It provides both dark and light variants.
  7. type OneDarkTheme struct {
  8. BaseTheme
  9. }
  10. // NewOneDarkTheme creates a new instance of the One Dark theme.
  11. func NewOneDarkTheme() *OneDarkTheme {
  12. // One Dark color palette
  13. // Dark mode colors from Atom One Dark
  14. darkBackground := "#282c34"
  15. darkCurrentLine := "#2c313c"
  16. darkSelection := "#3e4451"
  17. darkForeground := "#abb2bf"
  18. darkComment := "#5c6370"
  19. darkRed := "#e06c75"
  20. darkOrange := "#d19a66"
  21. darkYellow := "#e5c07b"
  22. darkGreen := "#98c379"
  23. darkCyan := "#56b6c2"
  24. darkBlue := "#61afef"
  25. darkPurple := "#c678dd"
  26. darkBorder := "#3b4048"
  27. // Light mode colors from Atom One Light
  28. lightBackground := "#fafafa"
  29. lightCurrentLine := "#f0f0f0"
  30. lightSelection := "#e5e5e6"
  31. lightForeground := "#383a42"
  32. lightComment := "#a0a1a7"
  33. lightRed := "#e45649"
  34. lightOrange := "#da8548"
  35. lightYellow := "#c18401"
  36. lightGreen := "#50a14f"
  37. lightCyan := "#0184bc"
  38. lightBlue := "#4078f2"
  39. lightPurple := "#a626a4"
  40. lightBorder := "#d3d3d3"
  41. theme := &OneDarkTheme{}
  42. // Base colors
  43. theme.PrimaryColor = lipgloss.AdaptiveColor{
  44. Dark: darkBlue,
  45. Light: lightBlue,
  46. }
  47. theme.SecondaryColor = lipgloss.AdaptiveColor{
  48. Dark: darkPurple,
  49. Light: lightPurple,
  50. }
  51. theme.AccentColor = lipgloss.AdaptiveColor{
  52. Dark: darkOrange,
  53. Light: lightOrange,
  54. }
  55. // Status colors
  56. theme.ErrorColor = lipgloss.AdaptiveColor{
  57. Dark: darkRed,
  58. Light: lightRed,
  59. }
  60. theme.WarningColor = lipgloss.AdaptiveColor{
  61. Dark: darkOrange,
  62. Light: lightOrange,
  63. }
  64. theme.SuccessColor = lipgloss.AdaptiveColor{
  65. Dark: darkGreen,
  66. Light: lightGreen,
  67. }
  68. theme.InfoColor = lipgloss.AdaptiveColor{
  69. Dark: darkBlue,
  70. Light: lightBlue,
  71. }
  72. // Text colors
  73. theme.TextColor = lipgloss.AdaptiveColor{
  74. Dark: darkForeground,
  75. Light: lightForeground,
  76. }
  77. theme.TextMutedColor = lipgloss.AdaptiveColor{
  78. Dark: darkComment,
  79. Light: lightComment,
  80. }
  81. theme.TextEmphasizedColor = lipgloss.AdaptiveColor{
  82. Dark: darkYellow,
  83. Light: lightYellow,
  84. }
  85. // Background colors
  86. theme.BackgroundColor = lipgloss.AdaptiveColor{
  87. Dark: darkBackground,
  88. Light: lightBackground,
  89. }
  90. theme.BackgroundSecondaryColor = lipgloss.AdaptiveColor{
  91. Dark: darkCurrentLine,
  92. Light: lightCurrentLine,
  93. }
  94. theme.BackgroundDarkerColor = lipgloss.AdaptiveColor{
  95. Dark: "#21252b", // Slightly darker than background
  96. Light: "#ffffff", // Slightly lighter than background
  97. }
  98. // Border colors
  99. theme.BorderNormalColor = lipgloss.AdaptiveColor{
  100. Dark: darkBorder,
  101. Light: lightBorder,
  102. }
  103. theme.BorderFocusedColor = lipgloss.AdaptiveColor{
  104. Dark: darkBlue,
  105. Light: lightBlue,
  106. }
  107. theme.BorderDimColor = lipgloss.AdaptiveColor{
  108. Dark: darkSelection,
  109. Light: lightSelection,
  110. }
  111. // Diff view colors
  112. theme.DiffAddedColor = lipgloss.AdaptiveColor{
  113. Dark: "#478247",
  114. Light: "#2E7D32",
  115. }
  116. theme.DiffRemovedColor = lipgloss.AdaptiveColor{
  117. Dark: "#7C4444",
  118. Light: "#C62828",
  119. }
  120. theme.DiffContextColor = lipgloss.AdaptiveColor{
  121. Dark: "#a0a0a0",
  122. Light: "#757575",
  123. }
  124. theme.DiffHunkHeaderColor = lipgloss.AdaptiveColor{
  125. Dark: "#a0a0a0",
  126. Light: "#757575",
  127. }
  128. theme.DiffHighlightAddedColor = lipgloss.AdaptiveColor{
  129. Dark: "#DAFADA",
  130. Light: "#A5D6A7",
  131. }
  132. theme.DiffHighlightRemovedColor = lipgloss.AdaptiveColor{
  133. Dark: "#FADADD",
  134. Light: "#EF9A9A",
  135. }
  136. theme.DiffAddedBgColor = lipgloss.AdaptiveColor{
  137. Dark: "#303A30",
  138. Light: "#E8F5E9",
  139. }
  140. theme.DiffRemovedBgColor = lipgloss.AdaptiveColor{
  141. Dark: "#3A3030",
  142. Light: "#FFEBEE",
  143. }
  144. theme.DiffContextBgColor = lipgloss.AdaptiveColor{
  145. Dark: darkBackground,
  146. Light: lightBackground,
  147. }
  148. theme.DiffLineNumberColor = lipgloss.AdaptiveColor{
  149. Dark: "#888888",
  150. Light: "#9E9E9E",
  151. }
  152. theme.DiffAddedLineNumberBgColor = lipgloss.AdaptiveColor{
  153. Dark: "#293229",
  154. Light: "#C8E6C9",
  155. }
  156. theme.DiffRemovedLineNumberBgColor = lipgloss.AdaptiveColor{
  157. Dark: "#332929",
  158. Light: "#FFCDD2",
  159. }
  160. // Markdown colors
  161. theme.MarkdownTextColor = lipgloss.AdaptiveColor{
  162. Dark: darkForeground,
  163. Light: lightForeground,
  164. }
  165. theme.MarkdownHeadingColor = lipgloss.AdaptiveColor{
  166. Dark: darkPurple,
  167. Light: lightPurple,
  168. }
  169. theme.MarkdownLinkColor = lipgloss.AdaptiveColor{
  170. Dark: darkBlue,
  171. Light: lightBlue,
  172. }
  173. theme.MarkdownLinkTextColor = lipgloss.AdaptiveColor{
  174. Dark: darkCyan,
  175. Light: lightCyan,
  176. }
  177. theme.MarkdownCodeColor = lipgloss.AdaptiveColor{
  178. Dark: darkGreen,
  179. Light: lightGreen,
  180. }
  181. theme.MarkdownBlockQuoteColor = lipgloss.AdaptiveColor{
  182. Dark: darkYellow,
  183. Light: lightYellow,
  184. }
  185. theme.MarkdownEmphColor = lipgloss.AdaptiveColor{
  186. Dark: darkYellow,
  187. Light: lightYellow,
  188. }
  189. theme.MarkdownStrongColor = lipgloss.AdaptiveColor{
  190. Dark: darkOrange,
  191. Light: lightOrange,
  192. }
  193. theme.MarkdownHorizontalRuleColor = lipgloss.AdaptiveColor{
  194. Dark: darkComment,
  195. Light: lightComment,
  196. }
  197. theme.MarkdownListItemColor = lipgloss.AdaptiveColor{
  198. Dark: darkBlue,
  199. Light: lightBlue,
  200. }
  201. theme.MarkdownListEnumerationColor = lipgloss.AdaptiveColor{
  202. Dark: darkCyan,
  203. Light: lightCyan,
  204. }
  205. theme.MarkdownImageColor = lipgloss.AdaptiveColor{
  206. Dark: darkBlue,
  207. Light: lightBlue,
  208. }
  209. theme.MarkdownImageTextColor = lipgloss.AdaptiveColor{
  210. Dark: darkCyan,
  211. Light: lightCyan,
  212. }
  213. theme.MarkdownCodeBlockColor = lipgloss.AdaptiveColor{
  214. Dark: darkForeground,
  215. Light: lightForeground,
  216. }
  217. // Syntax highlighting colors
  218. theme.SyntaxCommentColor = lipgloss.AdaptiveColor{
  219. Dark: darkComment,
  220. Light: lightComment,
  221. }
  222. theme.SyntaxKeywordColor = lipgloss.AdaptiveColor{
  223. Dark: darkPurple,
  224. Light: lightPurple,
  225. }
  226. theme.SyntaxFunctionColor = lipgloss.AdaptiveColor{
  227. Dark: darkBlue,
  228. Light: lightBlue,
  229. }
  230. theme.SyntaxVariableColor = lipgloss.AdaptiveColor{
  231. Dark: darkRed,
  232. Light: lightRed,
  233. }
  234. theme.SyntaxStringColor = lipgloss.AdaptiveColor{
  235. Dark: darkGreen,
  236. Light: lightGreen,
  237. }
  238. theme.SyntaxNumberColor = lipgloss.AdaptiveColor{
  239. Dark: darkOrange,
  240. Light: lightOrange,
  241. }
  242. theme.SyntaxTypeColor = lipgloss.AdaptiveColor{
  243. Dark: darkYellow,
  244. Light: lightYellow,
  245. }
  246. theme.SyntaxOperatorColor = lipgloss.AdaptiveColor{
  247. Dark: darkCyan,
  248. Light: lightCyan,
  249. }
  250. theme.SyntaxPunctuationColor = lipgloss.AdaptiveColor{
  251. Dark: darkForeground,
  252. Light: lightForeground,
  253. }
  254. return theme
  255. }
  256. func init() {
  257. // Register the One Dark theme with the theme manager
  258. RegisterTheme("onedark", NewOneDarkTheme())
  259. }