on main help sign in
chore(theme): use charmtone in glamour theme
fe3ad5bChristian Rocha
go.mod+3−3
@@ -18,7 +18,7 @@ require (
18 github.com/charmbracelet/glamour/v2 v2.0.0-20250516160903-6f1e2c8f9ebe
18 github.com/charmbracelet/glamour/v2 v2.0.0-20250516160903-6f1e2c8f9ebe
19 github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1.0.20250523195325-2d1af06b557c
19 github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1.0.20250523195325-2d1af06b557c
20 github.com/charmbracelet/x/ansi v0.9.3-0.20250602153603-fb931ed90413
20 github.com/charmbracelet/x/ansi v0.9.3-0.20250602153603-fb931ed90413
21− github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444
21+ github.com/charmbracelet/x/exp/charmtone v0.0.0-20250627134340-c144409e381c
22 github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a
22 github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a
23 github.com/disintegration/imageorient v0.0.0-20180920195336-8147d86e83ec
23 github.com/disintegration/imageorient v0.0.0-20180920195336-8147d86e83ec
24 github.com/fsnotify/fsnotify v1.8.0
24 github.com/fsnotify/fsnotify v1.8.0
@@ -41,7 +41,6 @@ require (
41)
41)
42
42
43require (
43require (
44− golang.org/x/term v0.31.0 // indirect
45 cloud.google.com/go v0.116.0 // indirect
44 cloud.google.com/go v0.116.0 // indirect
46 cloud.google.com/go/auth v0.13.0 // indirect
45 cloud.google.com/go/auth v0.13.0 // indirect
47 cloud.google.com/go/compute/metadata v0.6.0 // indirect
46 cloud.google.com/go/compute/metadata v0.6.0 // indirect
@@ -108,7 +107,7 @@ require (
108 github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
107 github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
109 github.com/sethvargo/go-retry v0.3.0 // indirect
108 github.com/sethvargo/go-retry v0.3.0 // indirect
110 github.com/sourcegraph/conc v0.3.0 // indirect
109 github.com/sourcegraph/conc v0.3.0 // indirect
111− github.com/spf13/afero v1.12.0 // indirect
110+ github.com/spf13/afero v1.12.0
112 github.com/spf13/cast v1.7.1 // indirect
111 github.com/spf13/cast v1.7.1 // indirect
113 github.com/spf13/pflag v1.0.6 // indirect
112 github.com/spf13/pflag v1.0.6 // indirect
114 github.com/subosito/gotenv v1.6.0 // indirect
113 github.com/subosito/gotenv v1.6.0 // indirect
@@ -132,6 +131,7 @@ require (
132 golang.org/x/net v0.39.0 // indirect
131 golang.org/x/net v0.39.0 // indirect
133 golang.org/x/sync v0.13.0 // indirect
132 golang.org/x/sync v0.13.0 // indirect
134 golang.org/x/sys v0.32.0 // indirect
133 golang.org/x/sys v0.32.0 // indirect
134+ golang.org/x/term v0.31.0 // indirect
135 golang.org/x/text v0.24.0 // indirect
135 golang.org/x/text v0.24.0 // indirect
136 google.golang.org/genai v1.3.0
136 google.golang.org/genai v1.3.0
137 google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 // indirect
137 google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 // indirect
go.sum+2
@@ -86,6 +86,8 @@ github.com/charmbracelet/x/cellbuf v0.0.14-0.20250516160309-24eee56f89fa h1:lphz
86github.com/charmbracelet/x/cellbuf v0.0.14-0.20250516160309-24eee56f89fa/go.mod h1:xBlh2Yi3DL3zy/2n15kITpg0YZardf/aa/hgUaIM6Rk=
86github.com/charmbracelet/x/cellbuf v0.0.14-0.20250516160309-24eee56f89fa/go.mod h1:xBlh2Yi3DL3zy/2n15kITpg0YZardf/aa/hgUaIM6Rk=
87github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444 h1:IJDiTgVE56gkAGfq0lBEloWgkXMk4hl/bmuPoicI4R0=
87github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444 h1:IJDiTgVE56gkAGfq0lBEloWgkXMk4hl/bmuPoicI4R0=
88github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444/go.mod h1:T9jr8CzFpjhFVHjNjKwbAD7KwBNyFnj2pntAO7F2zw0=
88github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444/go.mod h1:T9jr8CzFpjhFVHjNjKwbAD7KwBNyFnj2pntAO7F2zw0=
89+github.com/charmbracelet/x/exp/charmtone v0.0.0-20250627134340-c144409e381c h1:2GELBLPgfSbHU53bsQhR9XIgNuVZ6w+Rz8RWV5Lq+A4=
90+github.com/charmbracelet/x/exp/charmtone v0.0.0-20250627134340-c144409e381c/go.mod h1:T9jr8CzFpjhFVHjNjKwbAD7KwBNyFnj2pntAO7F2zw0=
89github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a h1:FsHEJ52OC4VuTzU8t+n5frMjLvpYWEznSr/u8tnkCYw=
91github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a h1:FsHEJ52OC4VuTzU8t+n5frMjLvpYWEznSr/u8tnkCYw=
90github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
92github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
91github.com/charmbracelet/x/exp/slice v0.0.0-20250611152503-f53cdd7e01ef h1:v7qwsZ2OxzlwvpKwz8dtZXp7fIJlcDEUOyFBNE4fz4Q=
93github.com/charmbracelet/x/exp/slice v0.0.0-20250611152503-f53cdd7e01ef h1:v7qwsZ2OxzlwvpKwz8dtZXp7fIJlcDEUOyFBNE4fz4Q=
internal/tui/styles/crush.go+1
@@ -13,6 +13,7 @@ func NewCrushTheme() *Theme {
13 Secondary: charmtone.Dolly,
13 Secondary: charmtone.Dolly,
14 Tertiary: charmtone.Bok,
14 Tertiary: charmtone.Bok,
15 Accent: charmtone.Zest,
15 Accent: charmtone.Zest,
16+
16 // Backgrounds
17 // Backgrounds
17 BgBase: charmtone.Pepper,
18 BgBase: charmtone.Pepper,
18 BgBaseLighter: Lighten(charmtone.Pepper, 2),
19 BgBaseLighter: Lighten(charmtone.Pepper, 2),
internal/tui/styles/theme.go+39−39
@@ -13,6 +13,7 @@ import (
13 "github.com/charmbracelet/crush/internal/exp/diffview"
13 "github.com/charmbracelet/crush/internal/exp/diffview"
14 "github.com/charmbracelet/glamour/v2/ansi"
14 "github.com/charmbracelet/glamour/v2/ansi"
15 "github.com/charmbracelet/lipgloss/v2"
15 "github.com/charmbracelet/lipgloss/v2"
16+ "github.com/charmbracelet/x/exp/charmtone"
16 "github.com/lucasb-eyer/go-colorful"
17 "github.com/lucasb-eyer/go-colorful"
17 "github.com/rivo/uniseg"
18 "github.com/rivo/uniseg"
18)
19)
@@ -191,13 +192,12 @@ func (t *Theme) buildStyles() *Styles {
191 },
192 },
192 },
193 },
193
194
194− // TODO: update using the colors and add colors if missing
195 Markdown: ansi.StyleConfig{
195 Markdown: ansi.StyleConfig{
196 Document: ansi.StyleBlock{
196 Document: ansi.StyleBlock{
197 StylePrimitive: ansi.StylePrimitive{
197 StylePrimitive: ansi.StylePrimitive{
198 // BlockPrefix: "\n",
198 // BlockPrefix: "\n",
199 // BlockSuffix: "\n",
199 // BlockSuffix: "\n",
200− Color: stringPtr("252"),
200+ Color: stringPtr(charmtone.Smoke.Hex()),
201 },
201 },
202 // Margin: uintPtr(defaultMargin),
202 // Margin: uintPtr(defaultMargin),
203 },
203 },
@@ -212,7 +212,7 @@ func (t *Theme) buildStyles() *Styles {
212 Heading: ansi.StyleBlock{
212 Heading: ansi.StyleBlock{
213 StylePrimitive: ansi.StylePrimitive{
213 StylePrimitive: ansi.StylePrimitive{
214 BlockSuffix: "\n",
214 BlockSuffix: "\n",
215− Color: stringPtr("39"),
215+ Color: stringPtr(charmtone.Malibu.Hex()),
216 Bold: boolPtr(true),
216 Bold: boolPtr(true),
217 },
217 },
218 },
218 },
@@ -220,8 +220,8 @@ func (t *Theme) buildStyles() *Styles {
220 StylePrimitive: ansi.StylePrimitive{
220 StylePrimitive: ansi.StylePrimitive{
221 Prefix: " ",
221 Prefix: " ",
222 Suffix: " ",
222 Suffix: " ",
223− Color: stringPtr("228"),
223+ Color: stringPtr(charmtone.Zest.Hex()),
224− BackgroundColor: stringPtr("63"),
224+ BackgroundColor: stringPtr(charmtone.Charple.Hex()),
225 Bold: boolPtr(true),
225 Bold: boolPtr(true),
226 },
226 },
227 },
227 },
@@ -248,7 +248,7 @@ func (t *Theme) buildStyles() *Styles {
248 H6: ansi.StyleBlock{
248 H6: ansi.StyleBlock{
249 StylePrimitive: ansi.StylePrimitive{
249 StylePrimitive: ansi.StylePrimitive{
250 Prefix: "###### ",
250 Prefix: "###### ",
251− Color: stringPtr("35"),
251+ Color: stringPtr(charmtone.Guac.Hex()),
252 Bold: boolPtr(false),
252 Bold: boolPtr(false),
253 },
253 },
254 },
254 },
@@ -262,7 +262,7 @@ func (t *Theme) buildStyles() *Styles {
262 Bold: boolPtr(true),
262 Bold: boolPtr(true),
263 },
263 },
264 HorizontalRule: ansi.StylePrimitive{
264 HorizontalRule: ansi.StylePrimitive{
265− Color: stringPtr("240"),
265+ Color: stringPtr(charmtone.Charcoal.Hex()),
266 Format: "\n--------\n",
266 Format: "\n--------\n",
267 },
267 },
268 Item: ansi.StylePrimitive{
268 Item: ansi.StylePrimitive{
@@ -277,117 +277,117 @@ func (t *Theme) buildStyles() *Styles {
277 Unticked: "[ ] ",
277 Unticked: "[ ] ",
278 },
278 },
279 Link: ansi.StylePrimitive{
279 Link: ansi.StylePrimitive{
280− Color: stringPtr("30"),
280+ Color: stringPtr(charmtone.Zinc.Hex()),
281 Underline: boolPtr(true),
281 Underline: boolPtr(true),
282 },
282 },
283 LinkText: ansi.StylePrimitive{
283 LinkText: ansi.StylePrimitive{
284− Color: stringPtr("35"),
284+ Color: stringPtr(charmtone.Guac.Hex()),
285 Bold: boolPtr(true),
285 Bold: boolPtr(true),
286 },
286 },
287 Image: ansi.StylePrimitive{
287 Image: ansi.StylePrimitive{
288− Color: stringPtr("212"),
288+ Color: stringPtr(charmtone.Cheeky.Hex()),
289 Underline: boolPtr(true),
289 Underline: boolPtr(true),
290 },
290 },
291 ImageText: ansi.StylePrimitive{
291 ImageText: ansi.StylePrimitive{
292− Color: stringPtr("243"),
292+ Color: stringPtr(charmtone.Squid.Hex()),
293 Format: "Image: {{.text}} →",
293 Format: "Image: {{.text}} →",
294 },
294 },
295 Code: ansi.StyleBlock{
295 Code: ansi.StyleBlock{
296 StylePrimitive: ansi.StylePrimitive{
296 StylePrimitive: ansi.StylePrimitive{
297 Prefix: " ",
297 Prefix: " ",
298 Suffix: " ",
298 Suffix: " ",
299− Color: stringPtr("203"),
299+ Color: stringPtr(charmtone.Coral.Hex()),
300− BackgroundColor: stringPtr("236"),
300+ BackgroundColor: stringPtr(charmtone.Charcoal.Hex()),
301 },
301 },
302 },
302 },
303 CodeBlock: ansi.StyleCodeBlock{
303 CodeBlock: ansi.StyleCodeBlock{
304 StyleBlock: ansi.StyleBlock{
304 StyleBlock: ansi.StyleBlock{
305 StylePrimitive: ansi.StylePrimitive{
305 StylePrimitive: ansi.StylePrimitive{
306− Color: stringPtr("244"),
306+ Color: stringPtr(charmtone.Charcoal.Hex()),
307 },
307 },
308 Margin: uintPtr(defaultMargin),
308 Margin: uintPtr(defaultMargin),
309 },
309 },
310 Chroma: &ansi.Chroma{
310 Chroma: &ansi.Chroma{
311 Text: ansi.StylePrimitive{
311 Text: ansi.StylePrimitive{
312− Color: stringPtr("#C4C4C4"),
312+ Color: stringPtr(charmtone.Smoke.Hex()),
313 },
313 },
314 Error: ansi.StylePrimitive{
314 Error: ansi.StylePrimitive{
315− Color: stringPtr("#F1F1F1"),
315+ Color: stringPtr(charmtone.Butter.Hex()),
316− BackgroundColor: stringPtr("#F05B5B"),
316+ BackgroundColor: stringPtr(charmtone.Sriracha.Hex()),
317 },
317 },
318 Comment: ansi.StylePrimitive{
318 Comment: ansi.StylePrimitive{
319− Color: stringPtr("#676767"),
319+ Color: stringPtr(charmtone.Oyster.Hex()),
320 },
320 },
321 CommentPreproc: ansi.StylePrimitive{
321 CommentPreproc: ansi.StylePrimitive{
322− Color: stringPtr("#FF875F"),
322+ Color: stringPtr(charmtone.Bengal.Hex()),
323 },
323 },
324 Keyword: ansi.StylePrimitive{
324 Keyword: ansi.StylePrimitive{
325− Color: stringPtr("#00AAFF"),
325+ Color: stringPtr(charmtone.Malibu.Hex()),
326 },
326 },
327 KeywordReserved: ansi.StylePrimitive{
327 KeywordReserved: ansi.StylePrimitive{
328− Color: stringPtr("#FF5FD2"),
328+ Color: stringPtr(charmtone.Pony.Hex()),
329 },
329 },
330 KeywordNamespace: ansi.StylePrimitive{
330 KeywordNamespace: ansi.StylePrimitive{
331− Color: stringPtr("#FF5F87"),
331+ Color: stringPtr(charmtone.Pony.Hex()),
332 },
332 },
333 KeywordType: ansi.StylePrimitive{
333 KeywordType: ansi.StylePrimitive{
334− Color: stringPtr("#6E6ED8"),
334+ Color: stringPtr(charmtone.Guppy.Hex()),
335 },
335 },
336 Operator: ansi.StylePrimitive{
336 Operator: ansi.StylePrimitive{
337− Color: stringPtr("#EF8080"),
337+ Color: stringPtr(charmtone.Salmon.Hex()),
338 },
338 },
339 Punctuation: ansi.StylePrimitive{
339 Punctuation: ansi.StylePrimitive{
340− Color: stringPtr("#E8E8A8"),
340+ Color: stringPtr(charmtone.Zest.Hex()),
341 },
341 },
342 Name: ansi.StylePrimitive{
342 Name: ansi.StylePrimitive{
343− Color: stringPtr("#C4C4C4"),
343+ Color: stringPtr(charmtone.Smoke.Hex()),
344 },
344 },
345 NameBuiltin: ansi.StylePrimitive{
345 NameBuiltin: ansi.StylePrimitive{
346− Color: stringPtr("#FF8EC7"),
346+ Color: stringPtr(charmtone.Cheeky.Hex()),
347 },
347 },
348 NameTag: ansi.StylePrimitive{
348 NameTag: ansi.StylePrimitive{
349− Color: stringPtr("#B083EA"),
349+ Color: stringPtr(charmtone.Mauve.Hex()),
350 },
350 },
351 NameAttribute: ansi.StylePrimitive{
351 NameAttribute: ansi.StylePrimitive{
352− Color: stringPtr("#7A7AE6"),
352+ Color: stringPtr(charmtone.Hazy.Hex()),
353 },
353 },
354 NameClass: ansi.StylePrimitive{
354 NameClass: ansi.StylePrimitive{
355− Color: stringPtr("#F1F1F1"),
355+ Color: stringPtr(charmtone.Salt.Hex()),
356 Underline: boolPtr(true),
356 Underline: boolPtr(true),
357 Bold: boolPtr(true),
357 Bold: boolPtr(true),
358 },
358 },
359 NameDecorator: ansi.StylePrimitive{
359 NameDecorator: ansi.StylePrimitive{
360− Color: stringPtr("#FFFF87"),
360+ Color: stringPtr(charmtone.Citron.Hex()),
361 },
361 },
362 NameFunction: ansi.StylePrimitive{
362 NameFunction: ansi.StylePrimitive{
363− Color: stringPtr("#00D787"),
363+ Color: stringPtr(charmtone.Guac.Hex()),
364 },
364 },
365 LiteralNumber: ansi.StylePrimitive{
365 LiteralNumber: ansi.StylePrimitive{
366− Color: stringPtr("#6EEFC0"),
366+ Color: stringPtr(charmtone.Julep.Hex()),
367 },
367 },
368 LiteralString: ansi.StylePrimitive{
368 LiteralString: ansi.StylePrimitive{
369− Color: stringPtr("#C69669"),
369+ Color: stringPtr(charmtone.Cumin.Hex()),
370 },
370 },
371 LiteralStringEscape: ansi.StylePrimitive{
371 LiteralStringEscape: ansi.StylePrimitive{
372− Color: stringPtr("#AFFFD7"),
372+ Color: stringPtr(charmtone.Bok.Hex()),
373 },
373 },
374 GenericDeleted: ansi.StylePrimitive{
374 GenericDeleted: ansi.StylePrimitive{
375− Color: stringPtr("#FD5B5B"),
375+ Color: stringPtr(charmtone.Coral.Hex()),
376 },
376 },
377 GenericEmph: ansi.StylePrimitive{
377 GenericEmph: ansi.StylePrimitive{
378 Italic: boolPtr(true),
378 Italic: boolPtr(true),
379 },
379 },
380 GenericInserted: ansi.StylePrimitive{
380 GenericInserted: ansi.StylePrimitive{
381− Color: stringPtr("#00D787"),
381+ Color: stringPtr(charmtone.Guac.Hex()),
382 },
382 },
383 GenericStrong: ansi.StylePrimitive{
383 GenericStrong: ansi.StylePrimitive{
384 Bold: boolPtr(true),
384 Bold: boolPtr(true),
385 },
385 },
386 GenericSubheading: ansi.StylePrimitive{
386 GenericSubheading: ansi.StylePrimitive{
387− Color: stringPtr("#777777"),
387+ Color: stringPtr(charmtone.Squid.Hex()),
388 },
388 },
389 Background: ansi.StylePrimitive{
389 Background: ansi.StylePrimitive{
390− BackgroundColor: stringPtr("#373737"),
390+ BackgroundColor: stringPtr(charmtone.Charcoal.Hex()),
391 },
391 },
392 },
392 },
393 },
393 },