Skip to content

Commit 9ef87ad

Browse files
authored
feat: improve command UI (#4747)
* feat: improve command UI * cl * hide deprecated commands + improve color pallet
1 parent b71f888 commit 9ef87ad

File tree

5 files changed

+63
-7
lines changed

5 files changed

+63
-7
lines changed

changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
- [#4717](https://github.com/ignite/cli/pull/4717) Bump Cosmos SDK to `v0.53.2`.
1616
- [#4718](https://github.com/ignite/cli/pull/4718) Bump default Ignite Apps.
17+
- [#4747](https://github.com/ignite/cli/pull/4747) Improve Ignite UI.
1718

1819
### Fixes
1920

go.mod

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ require (
1414
github.com/cenkalti/backoff v2.2.1+incompatible
1515
github.com/charmbracelet/bubbles v0.21.0
1616
github.com/charmbracelet/bubbletea v1.3.5
17+
github.com/charmbracelet/fang v0.2.0
1718
github.com/charmbracelet/glow v1.5.1
1819
github.com/charmbracelet/lipgloss v1.1.0
1920
github.com/cockroachdb/errors v1.12.0
@@ -140,10 +141,12 @@ require (
140141
github.com/cespare/xxhash/v2 v2.3.0 // indirect
141142
github.com/charithe/durationcheck v0.0.10 // indirect
142143
github.com/charmbracelet/charm v0.8.7 // indirect
143-
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect
144+
github.com/charmbracelet/colorprofile v0.3.0 // indirect
144145
github.com/charmbracelet/glamour v0.6.0 // indirect
146+
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1 // indirect
145147
github.com/charmbracelet/x/ansi v0.8.0 // indirect
146-
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect
148+
github.com/charmbracelet/x/cellbuf v0.0.13 // indirect
149+
github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444 // indirect
147150
github.com/charmbracelet/x/term v0.2.1 // indirect
148151
github.com/chavacava/garif v0.1.0 // indirect
149152
github.com/chigopher/pathlib v0.19.1 // indirect
@@ -353,6 +356,10 @@ require (
353356
github.com/muesli/cancelreader v0.2.2 // indirect
354357
github.com/muesli/gitcha v0.2.0 // indirect
355358
github.com/muesli/go-app-paths v0.2.2 // indirect
359+
github.com/muesli/mango v0.1.0 // indirect
360+
github.com/muesli/mango-cobra v1.2.0 // indirect
361+
github.com/muesli/mango-pflag v0.1.0 // indirect
362+
github.com/muesli/roff v0.1.0 // indirect
356363
github.com/muesli/sasquatch v0.0.0-20200811221207-66979d92330a // indirect
357364
github.com/muesli/termenv v0.16.0 // indirect
358365
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect

go.sum

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -417,8 +417,10 @@ github.com/charmbracelet/bubbletea v1.3.5 h1:JAMNLTbqMOhSwoELIr0qyP4VidFq72/6E9j
417417
github.com/charmbracelet/bubbletea v1.3.5/go.mod h1:TkCnmH+aBd4LrXhXcqrKiYwRs7qyQx5rBgH5fVY3v54=
418418
github.com/charmbracelet/charm v0.8.7 h1:FJ9b7IxWUWHOPR72zS/QJLEqtudOB2Mwfc+Sir0eZR8=
419419
github.com/charmbracelet/charm v0.8.7/go.mod h1:ApJYwJljEjODkOYJgFDzbUqztLrCWQct9zyPD+xcVr4=
420-
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs=
421-
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk=
420+
github.com/charmbracelet/colorprofile v0.3.0 h1:KtLh9uuu1RCt+Hml4s6Hz+kB1PfV3wi++1h5ia65yKQ=
421+
github.com/charmbracelet/colorprofile v0.3.0/go.mod h1:oHJ340RS2nmG1zRGPmhJKJ/jf4FPNNk0P39/wBPA1G0=
422+
github.com/charmbracelet/fang v0.2.0 h1:F2sK2Zjy9kRYz/xUSF1o89DNj2BHKpxVKT7TA21KZi0=
423+
github.com/charmbracelet/fang v0.2.0/go.mod h1:TPpME1GkB6/4uR4wXmPnugTCkqRLgZkWSH+aMds6454=
422424
github.com/charmbracelet/glamour v0.6.0 h1:wi8fse3Y7nfcabbbDuwolqTqMQPMnVPeZhDM273bISc=
423425
github.com/charmbracelet/glamour v0.6.0/go.mod h1:taqWV4swIMMbWALc0m7AfE9JkPSU8om2538k9ITBxOc=
424426
github.com/charmbracelet/glow v1.5.1 h1:o1mwT4xXXpkfUhJG6euQayNxLZf9yKctOCNHLztrwdE=
@@ -427,10 +429,14 @@ github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJ
427429
github.com/charmbracelet/lipgloss v0.6.0/go.mod h1:tHh2wr34xcHjC2HCXIlGSG1jaDF0S0atAUvBMP6Ppuk=
428430
github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
429431
github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
432+
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1 h1:D9AJJuYTN5pvz6mpIGO1ijLKpfTYSHOtKGgwoTQ4Gog=
433+
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1/go.mod h1:tRlx/Hu0lo/j9viunCN2H+Ze6JrmdjQlXUQvvArgaOc=
430434
github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
431435
github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
432-
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8=
433-
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
436+
github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k=
437+
github.com/charmbracelet/x/cellbuf v0.0.13/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
438+
github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444 h1:IJDiTgVE56gkAGfq0lBEloWgkXMk4hl/bmuPoicI4R0=
439+
github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444/go.mod h1:T9jr8CzFpjhFVHjNjKwbAD7KwBNyFnj2pntAO7F2zw0=
434440
github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91 h1:payRxjMjKgx2PaCWLZ4p3ro9y97+TVLZNaRZgJwSVDQ=
435441
github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
436442
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
@@ -1354,9 +1360,17 @@ github.com/muesli/gitcha v0.2.0/go.mod h1:Ri8m9TZS4+ORG4JVmVKUQcWZuxDvUW3UKxMdQf
13541360
github.com/muesli/go-app-paths v0.2.1/go.mod h1:SxS3Umca63pcFcLtbjVb+J0oD7cl4ixQWoBKhGEtEho=
13551361
github.com/muesli/go-app-paths v0.2.2 h1:NqG4EEZwNIhBq/pREgfBmgDmt3h1Smr1MjZiXbpZUnI=
13561362
github.com/muesli/go-app-paths v0.2.2/go.mod h1:SxS3Umca63pcFcLtbjVb+J0oD7cl4ixQWoBKhGEtEho=
1363+
github.com/muesli/mango v0.1.0 h1:DZQK45d2gGbql1arsYA4vfg4d7I9Hfx5rX/GCmzsAvI=
1364+
github.com/muesli/mango v0.1.0/go.mod h1:5XFpbC8jY5UUv89YQciiXNlbi+iJgt29VDC5xbzrLL4=
1365+
github.com/muesli/mango-cobra v1.2.0 h1:DQvjzAM0PMZr85Iv9LIMaYISpTOliMEg+uMFtNbYvWg=
1366+
github.com/muesli/mango-cobra v1.2.0/go.mod h1:vMJL54QytZAJhCT13LPVDfkvCUJ5/4jNUKF/8NC2UjA=
1367+
github.com/muesli/mango-pflag v0.1.0 h1:UADqbYgpUyRoBja3g6LUL+3LErjpsOwaC9ywvBWe7Sg=
1368+
github.com/muesli/mango-pflag v0.1.0/go.mod h1:YEQomTxaCUp8PrbhFh10UfbhbQrM/xJ4i2PB8VTLLW0=
13571369
github.com/muesli/reflow v0.2.1-0.20210115123740-9e1d0d53df68/go.mod h1:Xk+z4oIWdQqJzsxyjgl3P22oYZnHdZ8FFTHAQQt5BMQ=
13581370
github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
13591371
github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8=
1372+
github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8=
1373+
github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig=
13601374
github.com/muesli/sasquatch v0.0.0-20200811221207-66979d92330a h1:Hw/15RYEOUD6T9UCRkUmNBa33kJkH33Fui6hE4sRLKU=
13611375
github.com/muesli/sasquatch v0.0.0-20200811221207-66979d92330a/go.mod h1:+XG0ne5zXWBTSbbe7Z3/RWxaT8PZY6zaZ1dX6KjprYY=
13621376
github.com/muesli/termenv v0.7.2/go.mod h1:ct2L5N2lmix82RaY3bMWwVu/jUFc9Ule0KGDCiKYPh8=

ignite/cmd/cmd.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,18 +248,22 @@ func deprecated() []*cobra.Command {
248248
return []*cobra.Command{
249249
{
250250
Use: "build",
251+
Hidden: true,
251252
Deprecated: "use `ignite chain build` instead.",
252253
},
253254
{
254255
Use: "serve",
256+
Hidden: true,
255257
Deprecated: "use `ignite chain serve` instead.",
256258
},
257259
{
258260
Use: "faucet",
261+
Hidden: true,
259262
Deprecated: "use `ignite chain faucet` instead.",
260263
},
261264
{
262265
Use: "node",
266+
Hidden: true,
263267
Deprecated: "use ignite connect app instead (ignite app install -g github.com/ignite/apps/connect).",
264268
},
265269
}

ignite/cmd/ignite/main.go

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ package main
33
import (
44
"context"
55
"fmt"
6+
"image/color"
67
"os"
78
"sync"
89

10+
"github.com/charmbracelet/fang"
11+
"github.com/charmbracelet/lipgloss/v2"
912
"google.golang.org/grpc/status"
1013

1114
ignitecmd "github.com/ignite/cli/v29/ignite/cmd"
@@ -17,6 +20,7 @@ import (
1720
"github.com/ignite/cli/v29/ignite/pkg/errors"
1821
"github.com/ignite/cli/v29/ignite/pkg/validation"
1922
"github.com/ignite/cli/v29/ignite/pkg/xstrings"
23+
"github.com/ignite/cli/v29/ignite/version"
2024
)
2125

2226
const exitCodeOK, exitCodeError = 0, 1
@@ -44,7 +48,11 @@ func run() int {
4448
analytics.SendMetric(&wg, subCmd)
4549
analytics.EnableSentry(ctx, &wg)
4650

47-
err = cmd.ExecuteContext(ctx)
51+
// use charm's fang to improve CLI output
52+
err = fang.Execute(ctx, cmd,
53+
fang.WithColorSchemeFunc(cliColorScheme),
54+
fang.WithVersion(version.Version),
55+
)
4856
if err != nil {
4957
err = ensureError(err)
5058
}
@@ -109,3 +117,25 @@ func ensureError(err error) error {
109117
// extra gRPC error information like code or prefix.
110118
return errors.New(cause)
111119
}
120+
121+
// cliColorScheme returns a ColorScheme for the CLI.
122+
var cliColorScheme = func(c lipgloss.LightDarkFunc) fang.ColorScheme {
123+
return fang.ColorScheme{
124+
Base: c(lipgloss.Color("#2F2E36"), lipgloss.Color(colors.White)),
125+
Title: lipgloss.Color(colors.HiBlue),
126+
Codeblock: c(lipgloss.Color("#F5F5F5"), lipgloss.Color("#2F2E36")),
127+
Program: c(lipgloss.Color(colors.Blue), lipgloss.Color(colors.Cyan)),
128+
Command: c(lipgloss.Color(colors.Magenta), lipgloss.Color(colors.HiBlue)),
129+
DimmedArgument: c(lipgloss.Color(colors.Magenta), lipgloss.Color("#AAAAAA")),
130+
Comment: c(lipgloss.Color("#666666"), lipgloss.Color("#CCCCCC")),
131+
Flag: c(lipgloss.Color(colors.Green), lipgloss.Color(colors.Green)),
132+
Argument: c(lipgloss.Color("#2F2E36"), lipgloss.Color(colors.White)),
133+
Description: c(lipgloss.Color("#2F2E36"), lipgloss.Color(colors.White)), // flag and command descriptions
134+
FlagDefault: c(lipgloss.Color(colors.Blue), lipgloss.Color(colors.HiBlue)), // flag default values in descriptions
135+
QuotedString: c(lipgloss.Color(colors.Yellow), lipgloss.Color(colors.Yellow)),
136+
ErrorHeader: [2]color.Color{
137+
lipgloss.Color(colors.Yellow),
138+
lipgloss.Color(colors.Red),
139+
},
140+
}
141+
}

0 commit comments

Comments
 (0)