Go to file
Maas Lalani e72857b737
docs: Add some examples of how to use gum in workflows
This commit adds usage examples to the README.md on how users can use
gum in their workflows. In fact, this commit message is being created
through the `gum write` command as shown in the example!
2022-07-11 13:35:06 -04:00
.github/workflows feat(ci): add ci build and goreleaser 2022-07-08 13:21:53 -04:00
examples refactor: rename gum search to gum filter 2022-07-08 13:58:14 -04:00
filter refactor: rename gum search to gum filter 2022-07-08 13:58:14 -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
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): honor --height argument 2022-07-08 22:39:21 -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: fix bubbles components links 2022-07-11 10:41:16 -04:00
LICENSE Initial commit 2022-07-06 12:05:45 -04:00
main.go refactor: rename gum search to gum filter 2022-07-08 13:58:14 -04:00
README.md docs: Add some examples of how to use gum in workflows 2022-07-11 13:35:06 -04:00

Gum

Latest Release GoDoc Build Status

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.

# Prompt users for input
NAME=$(gum input --placeholder "What is your name?")

# Style some text
gum style --foreground 212 --padding "1 4" \
	--border double --border-foreground 57 \
	"Nice to meet you, $NAME."

# Do some work while spinning
gum spin --title "Taking a nap..." --color 212 -- sleep 5

# Fuzzy find a file or directory
find . -type f | gum filter

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 (btw)
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

Filter

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 filter > 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     ║
║                      ║║             ║
╚══════════════════════╝╚═════════════╝

Examples

See the examples directory for more real world use cases.

How to use gum in your daily workflows:

Open files in your $EDITOR

By default gum filter will display a list of all files (searched recursively) through your current directory, it has some sensible ignored defaults (.git, node_modules). You can use this to pick a file and open it in your $EDITOR.

$EDITOR $(gum filter)

Write a commit message

Prompt for user input to write git commit messages with a short summary and longer details with gum input and gum write.

Bonus points if you use gum filter with the Conventional Commits Specification as a prefix for your commit message.

git commit -m "$(gum input --width 50 --placeholder "Summary of changes")" \
           -m "$(gum write --width 80 --placeholder "Details of changes")"

Connect to a TMUX session

Pick from a running TMUX session and attach to it if not inside TMUX or switch your client to the session if already attached to a session.

SESSION=$(tmux list-sessions -F \#S | gum filter --placeholder "Pick session...")
tmux switch-client -t $SESSION || tmux attach -t $SESSION

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