diff options
| author | Martin Palma <[email protected]> | 2025-05-26 13:45:06 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-05-26 06:45:06 -0500 |
| commit | 96fbc37f0175052291f8a096d530bd4480f6cb19 (patch) | |
| tree | 57b5311dc4c443b3997aa0da098a4ff0a684aea3 /internal | |
| parent | 89e3a72ae10b96cc1d8a01a8882c6d9e81f20b6a (diff) | |
| download | opencode-96fbc37f0175052291f8a096d530bd4480f6cb19.tar.gz opencode-96fbc37f0175052291f8a096d530bd4480f6cb19.zip | |
feat: ayu theme (#60)
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/tui/theme/ayu.go | 280 |
1 files changed, 280 insertions, 0 deletions
diff --git a/internal/tui/theme/ayu.go b/internal/tui/theme/ayu.go new file mode 100644 index 000000000..b3dfa870a --- /dev/null +++ b/internal/tui/theme/ayu.go @@ -0,0 +1,280 @@ +package theme + +import ( + "github.com/charmbracelet/lipgloss" +) + +// AyuDarkTheme implements the Theme interface with Ayu Dark colors. +type AyuDarkTheme struct { + BaseTheme +} + +// AyuLightTheme implements the Theme interface with Ayu Light colors. +type AyuLightTheme struct { + BaseTheme +} + +// AyuMirageTheme implements the Theme interface with Ayu Mirage colors. +type AyuMirageTheme struct { + BaseTheme +} + +// NewAyuDarkTheme creates a new instance of the Ayu Dark theme. +func NewAyuDarkTheme() *AyuDarkTheme { + // Ayu Dark color palette + darkBackground := "#0f1419" + darkCurrentLine := "#191f26" + darkSelection := "#253340" + darkForeground := "#b3b1ad" + darkComment := "#5c6773" + darkBlue := "#53bdfa" + darkCyan := "#90e1c6" + darkGreen := "#91b362" + darkOrange := "#f9af4f" + darkPurple := "#fae994" + darkRed := "#ea6c73" + darkBorder := "#253340" + + // Light mode approximation for terminal compatibility + lightBackground := "#fafafa" + lightCurrentLine := "#f0f0f0" + lightSelection := "#d1d1d1" + lightForeground := "#5c6773" + lightComment := "#828c99" + lightBlue := "#3199e1" + lightCyan := "#46ba94" + lightGreen := "#7c9f32" + lightOrange := "#f29718" + lightPurple := "#9e75c7" + lightRed := "#f07171" + lightBorder := "#d1d1d1" + + theme := &AyuDarkTheme{} + + // Base colors + theme.PrimaryColor = lipgloss.AdaptiveColor{ + Dark: darkBlue, + Light: lightBlue, + } + theme.SecondaryColor = lipgloss.AdaptiveColor{ + Dark: darkCyan, + Light: lightCyan, + } + theme.AccentColor = lipgloss.AdaptiveColor{ + Dark: darkOrange, + Light: lightOrange, + } + + // Status colors + theme.ErrorColor = lipgloss.AdaptiveColor{ + Dark: darkRed, + Light: lightRed, + } + theme.WarningColor = lipgloss.AdaptiveColor{ + Dark: darkOrange, + Light: lightOrange, + } + theme.SuccessColor = lipgloss.AdaptiveColor{ + Dark: darkGreen, + Light: lightGreen, + } + theme.InfoColor = lipgloss.AdaptiveColor{ + Dark: darkCyan, + Light: lightCyan, + } + + // Text colors + theme.TextColor = lipgloss.AdaptiveColor{ + Dark: darkForeground, + Light: lightForeground, + } + theme.TextMutedColor = lipgloss.AdaptiveColor{ + Dark: darkComment, + Light: lightComment, + } + theme.TextEmphasizedColor = lipgloss.AdaptiveColor{ + Dark: darkPurple, + Light: lightPurple, + } + + // Background colors + theme.BackgroundColor = lipgloss.AdaptiveColor{ + Dark: darkBackground, + Light: lightBackground, + } + theme.BackgroundSecondaryColor = lipgloss.AdaptiveColor{ + Dark: darkCurrentLine, + Light: lightCurrentLine, + } + theme.BackgroundDarkerColor = lipgloss.AdaptiveColor{ + Dark: "#0b0e14", // Darker than background + Light: "#ffffff", // Lighter than background + } + + // Border colors + theme.BorderNormalColor = lipgloss.AdaptiveColor{ + Dark: darkBorder, + Light: lightBorder, + } + theme.BorderFocusedColor = lipgloss.AdaptiveColor{ + Dark: darkBlue, + Light: lightBlue, + } + theme.BorderDimColor = lipgloss.AdaptiveColor{ + Dark: darkSelection, + Light: lightSelection, + } + + // Diff view colors + theme.DiffAddedColor = lipgloss.AdaptiveColor{ + Dark: darkGreen, + Light: lightGreen, + } + theme.DiffRemovedColor = lipgloss.AdaptiveColor{ + Dark: darkRed, + Light: lightRed, + } + theme.DiffContextColor = lipgloss.AdaptiveColor{ + Dark: darkComment, + Light: lightComment, + } + theme.DiffHunkHeaderColor = lipgloss.AdaptiveColor{ + Dark: darkBlue, + Light: lightBlue, + } + theme.DiffHighlightAddedColor = lipgloss.AdaptiveColor{ + Dark: "#91b362", + Light: "#a5d6a7", + } + theme.DiffHighlightRemovedColor = lipgloss.AdaptiveColor{ + Dark: "#ea6c73", + Light: "#ef9a9a", + } + theme.DiffAddedBgColor = lipgloss.AdaptiveColor{ + Dark: "#1f2c1f", + Light: "#e8f5e9", + } + theme.DiffRemovedBgColor = lipgloss.AdaptiveColor{ + Dark: "#2c1f1f", + Light: "#ffebee", + } + theme.DiffContextBgColor = lipgloss.AdaptiveColor{ + Dark: darkBackground, + Light: lightBackground, + } + theme.DiffLineNumberColor = lipgloss.AdaptiveColor{ + Dark: darkComment, + Light: lightComment, + } + theme.DiffAddedLineNumberBgColor = lipgloss.AdaptiveColor{ + Dark: "#1a261a", + Light: "#c8e6c9", + } + theme.DiffRemovedLineNumberBgColor = lipgloss.AdaptiveColor{ + Dark: "#261a1a", + Light: "#ffcdd2", + } + + // Markdown colors + theme.MarkdownTextColor = lipgloss.AdaptiveColor{ + Dark: darkForeground, + Light: lightForeground, + } + theme.MarkdownHeadingColor = lipgloss.AdaptiveColor{ + Dark: darkBlue, + Light: lightBlue, + } + theme.MarkdownLinkColor = lipgloss.AdaptiveColor{ + Dark: darkCyan, + Light: lightCyan, + } + theme.MarkdownLinkTextColor = lipgloss.AdaptiveColor{ + Dark: darkBlue, + Light: lightBlue, + } + theme.MarkdownCodeColor = lipgloss.AdaptiveColor{ + Dark: darkGreen, + Light: lightGreen, + } + theme.MarkdownBlockQuoteColor = lipgloss.AdaptiveColor{ + Dark: darkComment, + Light: lightComment, + } + theme.MarkdownEmphColor = lipgloss.AdaptiveColor{ + Dark: darkPurple, + Light: lightPurple, + } + theme.MarkdownStrongColor = lipgloss.AdaptiveColor{ + Dark: darkOrange, + Light: lightOrange, + } + theme.MarkdownHorizontalRuleColor = lipgloss.AdaptiveColor{ + Dark: darkComment, + Light: lightComment, + } + theme.MarkdownListItemColor = lipgloss.AdaptiveColor{ + Dark: darkBlue, + Light: lightBlue, + } + theme.MarkdownListEnumerationColor = lipgloss.AdaptiveColor{ + Dark: darkCyan, + Light: lightCyan, + } + theme.MarkdownImageColor = lipgloss.AdaptiveColor{ + Dark: darkBlue, + Light: lightBlue, + } + theme.MarkdownImageTextColor = lipgloss.AdaptiveColor{ + Dark: darkCyan, + Light: lightCyan, + } + theme.MarkdownCodeBlockColor = lipgloss.AdaptiveColor{ + Dark: darkForeground, + Light: lightForeground, + } + + // Syntax highlighting colors + theme.SyntaxCommentColor = lipgloss.AdaptiveColor{ + Dark: darkComment, + Light: lightComment, + } + theme.SyntaxKeywordColor = lipgloss.AdaptiveColor{ + Dark: darkPurple, + Light: lightPurple, + } + theme.SyntaxFunctionColor = lipgloss.AdaptiveColor{ + Dark: darkBlue, + Light: lightBlue, + } + theme.SyntaxVariableColor = lipgloss.AdaptiveColor{ + Dark: darkForeground, + Light: lightForeground, + } + theme.SyntaxStringColor = lipgloss.AdaptiveColor{ + Dark: darkGreen, + Light: lightGreen, + } + theme.SyntaxNumberColor = lipgloss.AdaptiveColor{ + Dark: darkPurple, + Light: lightPurple, + } + theme.SyntaxTypeColor = lipgloss.AdaptiveColor{ + Dark: darkCyan, + Light: lightCyan, + } + theme.SyntaxOperatorColor = lipgloss.AdaptiveColor{ + Dark: darkOrange, + Light: lightOrange, + } + theme.SyntaxPunctuationColor = lipgloss.AdaptiveColor{ + Dark: darkForeground, + Light: lightForeground, + } + + return theme +} + +func init() { + // Register all three Ayu theme variants with the theme manager + RegisterTheme("ayu", NewAyuDarkTheme()) +} |
