chore(theme): use charmtone in glamour theme

Christian Rocha created

Change summary

go.mod                       |  6 +-
go.sum                       |  2 
internal/tui/styles/crush.go |  1 
internal/tui/styles/theme.go | 78 +++++++++++++++++++-------------------
4 files changed, 45 insertions(+), 42 deletions(-)

Detailed changes

go.mod 🔗

@@ -18,7 +18,7 @@ require (
 	github.com/charmbracelet/glamour/v2 v2.0.0-20250516160903-6f1e2c8f9ebe
 	github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1.0.20250523195325-2d1af06b557c
 	github.com/charmbracelet/x/ansi v0.9.3-0.20250602153603-fb931ed90413
-	github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444
+	github.com/charmbracelet/x/exp/charmtone v0.0.0-20250627134340-c144409e381c
 	github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a
 	github.com/disintegration/imageorient v0.0.0-20180920195336-8147d86e83ec
 	github.com/fsnotify/fsnotify v1.8.0
@@ -41,7 +41,6 @@ require (
 )
 
 require (
-	golang.org/x/term v0.31.0 // indirect
 	cloud.google.com/go v0.116.0 // indirect
 	cloud.google.com/go/auth v0.13.0 // indirect
 	cloud.google.com/go/compute/metadata v0.6.0 // indirect
@@ -108,7 +107,7 @@ require (
 	github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
 	github.com/sethvargo/go-retry v0.3.0 // indirect
 	github.com/sourcegraph/conc v0.3.0 // indirect
-	github.com/spf13/afero v1.12.0 // indirect
+	github.com/spf13/afero v1.12.0
 	github.com/spf13/cast v1.7.1 // indirect
 	github.com/spf13/pflag v1.0.6 // indirect
 	github.com/subosito/gotenv v1.6.0 // indirect
@@ -132,6 +131,7 @@ require (
 	golang.org/x/net v0.39.0 // indirect
 	golang.org/x/sync v0.13.0 // indirect
 	golang.org/x/sys v0.32.0 // indirect
+	golang.org/x/term v0.31.0 // indirect
 	golang.org/x/text v0.24.0 // indirect
 	google.golang.org/genai v1.3.0
 	google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 // indirect

go.sum 🔗

@@ -86,6 +86,8 @@ github.com/charmbracelet/x/cellbuf v0.0.14-0.20250516160309-24eee56f89fa h1:lphz
 github.com/charmbracelet/x/cellbuf v0.0.14-0.20250516160309-24eee56f89fa/go.mod h1:xBlh2Yi3DL3zy/2n15kITpg0YZardf/aa/hgUaIM6Rk=
 github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444 h1:IJDiTgVE56gkAGfq0lBEloWgkXMk4hl/bmuPoicI4R0=
 github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444/go.mod h1:T9jr8CzFpjhFVHjNjKwbAD7KwBNyFnj2pntAO7F2zw0=
+github.com/charmbracelet/x/exp/charmtone v0.0.0-20250627134340-c144409e381c h1:2GELBLPgfSbHU53bsQhR9XIgNuVZ6w+Rz8RWV5Lq+A4=
+github.com/charmbracelet/x/exp/charmtone v0.0.0-20250627134340-c144409e381c/go.mod h1:T9jr8CzFpjhFVHjNjKwbAD7KwBNyFnj2pntAO7F2zw0=
 github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a h1:FsHEJ52OC4VuTzU8t+n5frMjLvpYWEznSr/u8tnkCYw=
 github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
 github.com/charmbracelet/x/exp/slice v0.0.0-20250611152503-f53cdd7e01ef h1:v7qwsZ2OxzlwvpKwz8dtZXp7fIJlcDEUOyFBNE4fz4Q=

internal/tui/styles/crush.go 🔗

@@ -13,6 +13,7 @@ func NewCrushTheme() *Theme {
 		Secondary: charmtone.Dolly,
 		Tertiary:  charmtone.Bok,
 		Accent:    charmtone.Zest,
+
 		// Backgrounds
 		BgBase:        charmtone.Pepper,
 		BgBaseLighter: Lighten(charmtone.Pepper, 2),

internal/tui/styles/theme.go 🔗

@@ -13,6 +13,7 @@ import (
 	"github.com/charmbracelet/crush/internal/exp/diffview"
 	"github.com/charmbracelet/glamour/v2/ansi"
 	"github.com/charmbracelet/lipgloss/v2"
+	"github.com/charmbracelet/x/exp/charmtone"
 	"github.com/lucasb-eyer/go-colorful"
 	"github.com/rivo/uniseg"
 )
@@ -191,13 +192,12 @@ func (t *Theme) buildStyles() *Styles {
 			},
 		},
 
-		// TODO:  update using the colors and add colors if missing
 		Markdown: ansi.StyleConfig{
 			Document: ansi.StyleBlock{
 				StylePrimitive: ansi.StylePrimitive{
 					// BlockPrefix: "\n",
 					// BlockSuffix: "\n",
-					Color: stringPtr("252"),
+					Color: stringPtr(charmtone.Smoke.Hex()),
 				},
 				// Margin: uintPtr(defaultMargin),
 			},
@@ -212,7 +212,7 @@ func (t *Theme) buildStyles() *Styles {
 			Heading: ansi.StyleBlock{
 				StylePrimitive: ansi.StylePrimitive{
 					BlockSuffix: "\n",
-					Color:       stringPtr("39"),
+					Color:       stringPtr(charmtone.Malibu.Hex()),
 					Bold:        boolPtr(true),
 				},
 			},
@@ -220,8 +220,8 @@ func (t *Theme) buildStyles() *Styles {
 				StylePrimitive: ansi.StylePrimitive{
 					Prefix:          " ",
 					Suffix:          " ",
-					Color:           stringPtr("228"),
-					BackgroundColor: stringPtr("63"),
+					Color:           stringPtr(charmtone.Zest.Hex()),
+					BackgroundColor: stringPtr(charmtone.Charple.Hex()),
 					Bold:            boolPtr(true),
 				},
 			},
@@ -248,7 +248,7 @@ func (t *Theme) buildStyles() *Styles {
 			H6: ansi.StyleBlock{
 				StylePrimitive: ansi.StylePrimitive{
 					Prefix: "###### ",
-					Color:  stringPtr("35"),
+					Color:  stringPtr(charmtone.Guac.Hex()),
 					Bold:   boolPtr(false),
 				},
 			},
@@ -262,7 +262,7 @@ func (t *Theme) buildStyles() *Styles {
 				Bold: boolPtr(true),
 			},
 			HorizontalRule: ansi.StylePrimitive{
-				Color:  stringPtr("240"),
+				Color:  stringPtr(charmtone.Charcoal.Hex()),
 				Format: "\n--------\n",
 			},
 			Item: ansi.StylePrimitive{
@@ -277,117 +277,117 @@ func (t *Theme) buildStyles() *Styles {
 				Unticked:       "[ ] ",
 			},
 			Link: ansi.StylePrimitive{
-				Color:     stringPtr("30"),
+				Color:     stringPtr(charmtone.Zinc.Hex()),
 				Underline: boolPtr(true),
 			},
 			LinkText: ansi.StylePrimitive{
-				Color: stringPtr("35"),
+				Color: stringPtr(charmtone.Guac.Hex()),
 				Bold:  boolPtr(true),
 			},
 			Image: ansi.StylePrimitive{
-				Color:     stringPtr("212"),
+				Color:     stringPtr(charmtone.Cheeky.Hex()),
 				Underline: boolPtr(true),
 			},
 			ImageText: ansi.StylePrimitive{
-				Color:  stringPtr("243"),
+				Color:  stringPtr(charmtone.Squid.Hex()),
 				Format: "Image: {{.text}} →",
 			},
 			Code: ansi.StyleBlock{
 				StylePrimitive: ansi.StylePrimitive{
 					Prefix:          " ",
 					Suffix:          " ",
-					Color:           stringPtr("203"),
-					BackgroundColor: stringPtr("236"),
+					Color:           stringPtr(charmtone.Coral.Hex()),
+					BackgroundColor: stringPtr(charmtone.Charcoal.Hex()),
 				},
 			},
 			CodeBlock: ansi.StyleCodeBlock{
 				StyleBlock: ansi.StyleBlock{
 					StylePrimitive: ansi.StylePrimitive{
-						Color: stringPtr("244"),
+						Color: stringPtr(charmtone.Charcoal.Hex()),
 					},
 					Margin: uintPtr(defaultMargin),
 				},
 				Chroma: &ansi.Chroma{
 					Text: ansi.StylePrimitive{
-						Color: stringPtr("#C4C4C4"),
+						Color: stringPtr(charmtone.Smoke.Hex()),
 					},
 					Error: ansi.StylePrimitive{
-						Color:           stringPtr("#F1F1F1"),
-						BackgroundColor: stringPtr("#F05B5B"),
+						Color:           stringPtr(charmtone.Butter.Hex()),
+						BackgroundColor: stringPtr(charmtone.Sriracha.Hex()),
 					},
 					Comment: ansi.StylePrimitive{
-						Color: stringPtr("#676767"),
+						Color: stringPtr(charmtone.Oyster.Hex()),
 					},
 					CommentPreproc: ansi.StylePrimitive{
-						Color: stringPtr("#FF875F"),
+						Color: stringPtr(charmtone.Bengal.Hex()),
 					},
 					Keyword: ansi.StylePrimitive{
-						Color: stringPtr("#00AAFF"),
+						Color: stringPtr(charmtone.Malibu.Hex()),
 					},
 					KeywordReserved: ansi.StylePrimitive{
-						Color: stringPtr("#FF5FD2"),
+						Color: stringPtr(charmtone.Pony.Hex()),
 					},
 					KeywordNamespace: ansi.StylePrimitive{
-						Color: stringPtr("#FF5F87"),
+						Color: stringPtr(charmtone.Pony.Hex()),
 					},
 					KeywordType: ansi.StylePrimitive{
-						Color: stringPtr("#6E6ED8"),
+						Color: stringPtr(charmtone.Guppy.Hex()),
 					},
 					Operator: ansi.StylePrimitive{
-						Color: stringPtr("#EF8080"),
+						Color: stringPtr(charmtone.Salmon.Hex()),
 					},
 					Punctuation: ansi.StylePrimitive{
-						Color: stringPtr("#E8E8A8"),
+						Color: stringPtr(charmtone.Zest.Hex()),
 					},
 					Name: ansi.StylePrimitive{
-						Color: stringPtr("#C4C4C4"),
+						Color: stringPtr(charmtone.Smoke.Hex()),
 					},
 					NameBuiltin: ansi.StylePrimitive{
-						Color: stringPtr("#FF8EC7"),
+						Color: stringPtr(charmtone.Cheeky.Hex()),
 					},
 					NameTag: ansi.StylePrimitive{
-						Color: stringPtr("#B083EA"),
+						Color: stringPtr(charmtone.Mauve.Hex()),
 					},
 					NameAttribute: ansi.StylePrimitive{
-						Color: stringPtr("#7A7AE6"),
+						Color: stringPtr(charmtone.Hazy.Hex()),
 					},
 					NameClass: ansi.StylePrimitive{
-						Color:     stringPtr("#F1F1F1"),
+						Color:     stringPtr(charmtone.Salt.Hex()),
 						Underline: boolPtr(true),
 						Bold:      boolPtr(true),
 					},
 					NameDecorator: ansi.StylePrimitive{
-						Color: stringPtr("#FFFF87"),
+						Color: stringPtr(charmtone.Citron.Hex()),
 					},
 					NameFunction: ansi.StylePrimitive{
-						Color: stringPtr("#00D787"),
+						Color: stringPtr(charmtone.Guac.Hex()),
 					},
 					LiteralNumber: ansi.StylePrimitive{
-						Color: stringPtr("#6EEFC0"),
+						Color: stringPtr(charmtone.Julep.Hex()),
 					},
 					LiteralString: ansi.StylePrimitive{
-						Color: stringPtr("#C69669"),
+						Color: stringPtr(charmtone.Cumin.Hex()),
 					},
 					LiteralStringEscape: ansi.StylePrimitive{
-						Color: stringPtr("#AFFFD7"),
+						Color: stringPtr(charmtone.Bok.Hex()),
 					},
 					GenericDeleted: ansi.StylePrimitive{
-						Color: stringPtr("#FD5B5B"),
+						Color: stringPtr(charmtone.Coral.Hex()),
 					},
 					GenericEmph: ansi.StylePrimitive{
 						Italic: boolPtr(true),
 					},
 					GenericInserted: ansi.StylePrimitive{
-						Color: stringPtr("#00D787"),
+						Color: stringPtr(charmtone.Guac.Hex()),
 					},
 					GenericStrong: ansi.StylePrimitive{
 						Bold: boolPtr(true),
 					},
 					GenericSubheading: ansi.StylePrimitive{
-						Color: stringPtr("#777777"),
+						Color: stringPtr(charmtone.Squid.Hex()),
 					},
 					Background: ansi.StylePrimitive{
-						BackgroundColor: stringPtr("#373737"),
+						BackgroundColor: stringPtr(charmtone.Charcoal.Hex()),
 					},
 				},
 			},