Go to file
2022-07-08 13:37:13 -04:00
.github/workflows feat(ci): add ci build and goreleaser 2022-07-08 13:21:53 -04:00
examples feat: Default accent color is 212 (Bubble Gum Pink) 2022-07-07 17:46:22 -04:00
input feat: Default accent color is 212 (Bubble Gum Pink) 2022-07-07 17:46:22 -04:00
internal fix: ignore node_modules by default 2022-07-07 22:39:28 -04:00
join feat: Add gum join command 2022-07-07 19:32:21 -04:00
progress feat: Default accent color is 212 (Bubble Gum Pink) 2022-07-07 17:46:22 -04:00
search feat: list all files if gum search receives no input. 2022-07-07 22:10:31 -04:00
spin feat: Default accent color is 212 (Bubble Gum Pink) 2022-07-07 17:46:22 -04:00
style feat: Add gum join command 2022-07-07 19:32:21 -04:00
write fix(write): Placeholder color fix 2022-07-07 22:39:42 -04:00
.gitignore Initial commit 2022-07-06 12:05:45 -04:00
.goreleaser.yml feat(ci): add ci build and goreleaser 2022-07-08 13:21:53 -04:00
Dockerfile feat: add Dockerfile 2022-07-08 13:37:13 -04:00
go.mod fix(write): Placeholder color fix 2022-07-07 22:39:42 -04:00
go.sum fix(write): Placeholder color fix 2022-07-07 22:39:42 -04:00
gum.go docs: add join comment with example 2022-07-08 10:23:45 -04:00
LICENSE Initial commit 2022-07-06 12:05:45 -04:00
main.go feat: Add gum join command 2022-07-07 19:32:21 -04:00
README.md docs: add installation methods to readme 2022-07-08 13:31:54 -04:00

Gum

Gum is a collection of command-line utilities that make your shell scripts a little more glamorous. It gives you the power of Bubbles and Lip Gloss without needing to write any Go code.

The following example is running from a single Bash script.

Shell running the Gum examples/demo.sh script

Installation

Use a package manager:

# macOS or Linux
brew tap charmbracelet/tap && brew install charmbracelet/tap/gum

# Arch Linux
pacman -S gum

# Nix
nix-env -iA nixpkgs.gum

# Debian/Ubuntu
echo 'deb [trusted=yes] https://repo.charm.sh/apt/ /' | sudo tee /etc/apt/sources.list.d/charm.list
sudo apt update && sudo apt install gum

# Fedora
echo '[charm]
name=Charm
baseurl=https://repo.charm.sh/yum/
enabled=1
gpgcheck=0' | sudo tee /etc/yum.repos.d/charm.repo
sudo yum install gum

Or download it:

  • Packages are available in Debian and RPM formats
  • Binaries are available for Linux, macOS, and Windows

Or just install it with go:

go install github.com/charmbracelet/gum@latest

Interaction

Input

Prompt your users for input with a simple command.

gum input > answer.text

Write

Prompt your users to write some multi-line text.

gum write > story.text

Allow your users to filter through a list of options by fuzzy searching.

echo Strawberry >> flavors.text
echo Banana >> flavors.text
echo Cherry >> flavors.text
cat flavors.text | gum search > selection.text

Progress

Display a progress bar while loading. The following command will display a progress bar and increment the progress by 10% every 1 second. Thus, taking 10 seconds to complete the progress bar.

gum progress --increment 0.1 --interval 1s

Spinners

Display a spinner while taking some running action. We specify the command to run while showing the spinner, the spinner will automatically stop after the command exits.

gum spin --spinner dot --title "Buying Bubble Gum..." -- sleep 5

Styling and Layout

Style

Pretty print any string with any layout with one command.

gum style \
	--foreground "#FF06B7" --border "double" --align "center" \
	--width 50 --margin "1 2" --padding "2 4" \
	"Bubble Gum (1¢)" "So sweet and so fresh\!"
                                                        
  ╔══════════════════════════════════════════════════╗  
  ║                                                  ║  
  ║                                                  ║  
  ║                 Bubble Gum (1¢)                  ║  
  ║              So sweet and so fresh!              ║  
  ║                                                  ║  
  ║                                                  ║  
  ╚══════════════════════════════════════════════════╝  

Join

Combine text vertically or horizontally with a single command, use this command with gum style to build layouts and pretty output.

Note: It's important to wrap the output of gum style in quotes to ensure new lines (\n) are part of a single argument passed to the join command.

I=$(gum style --padding "1 5" --border double "I")
LOVE=$(gum style --padding "1 4" --border double "LOVE")
BUBBLE=$(gum style --padding "1 8" --border double "Bubble")
GUM=$(gum style --padding "1 5" --border double "Gum")

I_LOVE=$(gum join "$I" "$LOVE")
BUBBLE_GUM=$(gum join "$BUBBLE" "$GUM")
gum join --align center --vertical "$I_LOVE" "$BUBBLE_GUM"
      ╔═══════════╗╔════════════╗      
      ║           ║║            ║      
      ║     I     ║║    LOVE    ║      
      ║           ║║            ║      
      ╚═══════════╝╚════════════╝      
╔══════════════════════╗╔═════════════╗
║                      ║║             ║
║        Bubble        ║║     Gum     ║
║                      ║║             ║
╚══════════════════════╝╚═════════════╝

Feedback

Wed love to hear your thoughts on this project. Feel free to drop us a note!

License

MIT

Part of Charm.

The Charm logo

Charm热爱开源 • Charm loves open source