GUM(1)
π GUM π
okay so you've pulled up the manual page for gum β yes, that gum, the one from section 1 of the manual, bestie. Subtitle on the tin: A tool for glamorous shell scripts. Which, like, is the whole personality. Let's get into it π«Ά
β¨ NAME β¨
gum β A tool for glamorous shell scripts. that's it, that's the name, and honestly it ate π
πΈ SYNOPSIS πΈ
gum [options...] [argument...]
π¦ DESCRIPTION π¦
so, funny thing: this section is literally empty in the original page π no cap, nothing in there. the vibes are doing all the work. moving on π
π OPTIONS π
-h,--helpβ shows you the help, but like, context-sensitive help, so it actually knows where you are π-v,--versionβ prints the version number, so you can flex how up-to-date you are β¨
π COMMANDS π
π choose [<options> ...] [flags]
pick one (or more, we don't judge) from a list of choices. this is the main character of the commands, fr fr π
π OPTIONS π
--cursor-prefix="β’ "β the prefix that shows up on the cursor item (it goes hidden iflimitis1)--cursor.align="left"β text alignment--cursor.background=""β background color--cursor.boldβ bold text--cursor.border-background=""β border background color--cursor.border-foreground=""β border foreground color--cursor.border="none"β border style--cursor.faintβ faint text--cursor.foreground="212"β foreground color--cursor.height=0β text height--cursor.italicβ italicize text--cursor.margin="0 0"β text margin--cursor.padding="0 0"β text padding--cursor.strikethroughβ strikethrough text--cursor.underlineβ underline text--cursor.width=0β text width--cursor="> "β the prefix on the item that matches where the cursor is sitting rn--header.align="left"β text alignment--header.background=""β background color--header.boldβ bold text--header.border-background=""β border background color--header.border-foreground=""β border foreground color--header.border="none"β border style--header.faintβ faint text--header.foreground="99"β foreground color--header.height=0β text height--header.italicβ italicize text--header.margin="0 0"β text margin--header.padding="0 0"β text padding--header.strikethroughβ strikethrough text--header.underlineβ underline text--header.width=0β text width--header="Choose:"β what the header actually says--height=10β how tall the list is--input-delimiter="\n"β the delimiter used for options when it's reading from STDIN--item.align="left"β text alignment--item.background=""β background color--item.boldβ bold text--item.border-background=""β border background color--item.border-foreground=""β border foreground color--item.border="none"β border style--item.faintβ faint text--item.foreground=""β foreground color--item.height=0β text height--item.italicβ italicize text--item.margin="0 0"β text margin--item.padding="0 0"β text padding--item.strikethroughβ strikethrough text--item.underlineβ underline text--item.width=0β text width--label-delimiter=""β lets you set a delimiter so options can be written aslabel:value, iconic--limit=1β max number of options you're allowed to pick--no-limitβ pick an unlimited number of options (this straight up ignoreslimit)--orderedβ keeps the selected options in the order they were selected, not the order they appeared--output-delimiter="\n"β the delimiter used for options when it writes out to STDOUT--padding="0 0"β padding--select-if-oneβ auto-selects the option if there's literally only one of them--selected-prefix="β "β the prefix on selected items (hidden iflimitis1)--selected.align="left"β text alignment--selected.background=""β background color--selected.boldβ bold text--selected.border-background=""β border background color--selected.border-foreground=""β border foreground color--selected.border="none"β border style--selected.faintβ faint text--selected.foreground="212"β foreground color--selected.height=0β text height--selected.italicβ italicize text--selected.margin="0 0"β text margin--selected.padding="0 0"β text padding--selected.strikethroughβ strikethrough text--selected.underlineβ underline text--selected.width=0β text width--selected=,...β options that should start out already selected (pass*and it selects all of them, periodt)--show-helpβ shows the help keybinds--strip-ansiβ strips ANSI sequences when reading from STDIN--timeout=0sβ timeout untilchoosereturns the selected element--unselected-prefix="β’ "β the prefix on the unselected items (hidden iflimitis1)
π confirm [<prompt>] [flags]
asks the user to confirm an action. yes/no moment, very dramatic π
π OPTIONS π
--affirmative="Yes"β the title of the affirmative action--defaultβ the default confirmation action--negative="No"β the title of the negative action--padding="0 0"β padding--prompt.align="left"β text alignment--prompt.background=""β background color--prompt.boldβ bold text--prompt.border-background=""β border background color--prompt.border-foreground=""β border foreground color--prompt.border="none"β border style--prompt.faintβ faint text--prompt.foreground="#7571F9"β foreground color--prompt.height=0β text height--prompt.italicβ italicize text--prompt.margin="0 0 0 1"β text margin--prompt.padding="0 0"β text padding--prompt.strikethroughβ strikethrough text--prompt.underlineβ underline text--prompt.width=0β text width--selected.align="left"β text alignment--selected.background="212"β background color--selected.boldβ bold text--selected.border-background=""β border background color--selected.border-foreground=""β border foreground color--selected.border="none"β border style--selected.faintβ faint text--selected.foreground="230"β foreground color--selected.height=0β text height--selected.italicβ italicize text--selected.margin="0 1"β text margin--selected.padding="0 3"β text padding--selected.strikethroughβ strikethrough text--selected.underlineβ underline text--selected.width=0β text width--show-helpβ shows the help key binds--show-outputβ prints the prompt and the chosen action to the output--timeout=0sβ timeout untilconfirmreturns the selected value, or the default if one was provided--unselected.align="left"β text alignment--unselected.background="235"β background color--unselected.boldβ bold text--unselected.border-background=""β border background color--unselected.border-foreground=""β border foreground color--unselected.border="none"β border style--unselected.faintβ faint text--unselected.foreground="254"β foreground color--unselected.height=0β text height--unselected.italicβ italicize text--unselected.margin="0 1"β text margin--unselected.padding="0 3"β text padding--unselected.strikethroughβ strikethrough text--unselected.underlineβ underline text--unselected.width=0β text width
π file [<path>] [flags]
pick a file out of a folder. little file browser moment πβ¨
π OPTIONS π
-a,--allβ show hidden and 'dot' files too, no secrets π--cursor.align="left"β text alignment--cursor.background=""β background color--cursor.boldβ bold text--cursor.border-background=""β border background color--cursor.border-foreground=""β border foreground color--cursor.border="none"β border style--cursor.faintβ faint text--cursor.foreground="212"β foreground color--cursor.height=0β text height--cursor.italicβ italicize text--cursor.margin="0 0"β text margin--cursor.padding="0 0"β text padding--cursor.strikethroughβ strikethrough text--cursor.underlineβ underline text--cursor.width=0β text width-c,--cursor=">"β the cursor character itself--directoryβ allow directory selection, so folders are fair game--directory.align="left"β text alignment--directory.background=""β background color--directory.boldβ bold text--directory.border-background=""β border background color--directory.border-foreground=""β border foreground color--directory.border="none"β border style--directory.faintβ faint text--directory.foreground="99"β foreground color--directory.height=0β text height--directory.italicβ italicize text--directory.margin="0 0"β text margin--directory.padding="0 0"β text padding--directory.strikethroughβ puts a lil strike through the directory text π--directory.underlineβ underlines the directory text, very demure--directory.width=0β text width for the directory column--fileβ yes bestie, this lets you select actual files π--file-size.align="right"β text alignment for the file size--file-size.background=""β background colour--file-size.boldβ bold text, main character behaviour--file-size.border-background=""β border background colour--file-size.border-foreground=""β border foreground colour--file-size.border="none"β border style--file-size.faintβ faint text (shy text)--file-size.foreground="240"β foreground colour--file-size.height=0β text height--file-size.italicβ italicize text, fancy fr--file-size.margin="0 0"β text margin--file-size.padding="0 0"β text padding--file-size.strikethroughβ strikethrough text--file-size.underlineβ underline text--file-size.width=8β text width--file.align="left"β text alignment--file.background=""β background colour--file.boldβ bold text--file.border-background=""β border background colour--file.border-foreground=""β border foreground colour--file.border="none"β border style--file.faintβ faint text--file.foreground=""β foreground colour--file.height=0β text height--file.italicβ italicize text--file.margin="0 0"β text margin--file.padding="0 0"β text padding--file.strikethroughβ strikethrough text--file.underlineβ underline text--file.width=0β text width--header.align="left"β text alignment for the header--header.background=""β background colour--header.boldβ bold text--header.border-background=""β border background colour--header.border-foreground=""β border foreground colour--header.border="none"β border style--header.faintβ faint text--header.foreground="99"β foreground colour--header.height=0β text height--header.italicβ italicize text--header.margin="0 0"β text margin--header.padding="0 0"β text padding--header.strikethroughβ strikethrough text--header.underlineβ underline text--header.width=0β text width--header=""β the actual header value, like the words at the top β¨--height=10β max number of files to display at once--padding="0 0"β padding-p,--permissionsβ show file permissions π--permissions.align="left"β text alignment--permissions.background=""β background colour--permissions.boldβ bold text--permissions.border-background=""β border background colour--permissions.border-foreground=""β border foreground colour--permissions.border="none"β border style--permissions.faintβ faint text--permissions.foreground="244"β foreground colour--permissions.height=0β text height--permissions.italicβ italicize text--permissions.margin="0 0"β text margin--permissions.padding="0 0"β text padding--permissions.strikethroughβ strikethrough text--permissions.underlineβ underline text--permissions.width=0β text width--selected.align="left"β text alignment for whatever you've picked--selected.background=""β background colour--selected.boldβ bold text--selected.border-background=""β border background colour--selected.border-foreground=""β border foreground colour--selected.border="none"β border style--selected.faintβ faint text--selected.foreground="212"β foreground colour--selected.height=0β text height--selected.italicβ italicize text--selected.margin="0 0"β text margin--selected.padding="0 0"β text padding--selected.strikethroughβ strikethrough text--selected.underlineβ underline text--selected.width=0β text width--show-helpβ show the help key binds π«Ά-s,--sizeβ show file size--symlink.align="left"β text alignment--symlink.background=""β background colour--symlink.boldβ bold text--symlink.border-background=""β border background colour--symlink.border-foreground=""β border foreground colour--symlink.border="none"β border style--symlink.faintβ faint text--symlink.foreground="36"β foreground colour--symlink.height=0β text height--symlink.italicβ italicize text--symlink.margin="0 0"β text margin--symlink.padding="0 0"β text padding--symlink.strikethroughβ strikethrough text--symlink.underlineβ underline text--symlink.width=0β text width--timeout=0sβ timeout until the command just gives up and aborts without a selection π (yes, it will simply leave you on read)
π¦ filter [<options> ...] [flags]
Filter items from a list β like a little sieve for your options, and honestly? iconic.
β¨ OPTIONS β¨
--cursor-text.align="left"β text alignment for the cursor text--cursor-text.background=""β background colour--cursor-text.boldβ bold text--cursor-text.border-background=""β border background colour--cursor-text.border-foreground=""β border foreground colour--cursor-text.border="none"β border style--cursor-text.faintβ faint text--cursor-text.foreground=""β foreground colour--cursor-text.height=0β text height--cursor-text.italicβ italicize text--cursor-text.margin="0 0"β text margin--cursor-text.padding="0 0"β text padding--cursor-text.strikethroughβ strikethrough text--cursor-text.underlineβ underline text--cursor-text.width=0β text width--fuzzyβ enable fuzzy matching; otherwise it matches from the start of the word π--fuzzy-sortβ sort fuzzy results by their scores--header.align="left"β text alignment--header.background=""β background colour--header.boldβ bold text--header.border-background=""β border background colour--header.border-foreground=""β border foreground colour--header.border="none"β border style--header.faintβ faint text--header.foreground="99"β foreground colour--header.height=0β text height--header.italicβ italicize text--header.margin="0 0"β text margin--header.padding="0 0"β text padding--header.strikethroughβ strikethrough text--header.underlineβ underline text--header.width=0β text width--header=""β header value--height=0β input height--indicator.align="left"β text alignment--indicator.background=""β background colour--indicator.boldβ bold text--indicator.border-background=""β border background colour--indicator.border-foreground=""β border foreground colour--indicator.border="none"β border style--indicator.faintβ faint text--indicator.foreground="212"β foreground colour--indicator.height=0β text height--indicator.italicβ italicize text--indicator.margin="0 0"β text margin--indicator.padding="0 0"β text padding--indicator.strikethroughβ strikethrough text--indicator.underlineβ underline text--indicator.width=0β text width--indicator="β’"β the character that marks your selection π--input-delimiter="\n"β option delimiter when reading from STDIN--limit=1β maximum number of options to pick--match.align="left"β text alignment for the matched bits--match.background=""β background colour--match.boldβ bold text--match.border-background=""β border background colour--match.border-foreground=""β border foreground colour--match.border="none"β border style--match.faintβ faint text--match.foreground="212"β foreground colour--match.height=0β text height--match.italicβ italicize text--match.margin="0 0"β text margin--match.padding="0 0"β text padding--match.strikethroughβ strikethrough text--match.underlineβ underline text--match.width=0β text width--no-limitβ pick an unlimited number of options (this ignoreslimit, periodt)--output-delimiter="\n"β option delimiter when writing to STDOUT--padding="0 0"β padding--placeholder.align="left"β text alignment for the placeholder text--placeholder.background=""β background colour--placeholder.boldβ bold text
β¦and the style parade keeps marching π
every widget in gum has its own little wardrobe, and the pattern is always the same: <widget>.<property>. Slap a value on it and the widget serves a look. Periodt.
--placeholder.border-background=""β the background colour behind the placeholder's border π empty by default.--placeholder.border-foreground=""β the colour the placeholder's border itself is drawn in. Also empty unless you say otherwise.--placeholder.border="none"β what style of border the placeholder gets. Default isnone, so no box unless you ask π--placeholder.faintβ makes the placeholder text faint. Subtle queen behaviour.--placeholder.foreground="240"β the placeholder text colour, sitting pretty at240by default.--placeholder.height=0β how tall the placeholder is, in text terms.0means default, no cap.--placeholder.italicβ italicises the placeholder. Slanty vibes β¨--placeholder.margin="0 0"β margin around the placeholder,0 0to start.--placeholder.padding="0 0"β padding inside the placeholder, also0 0out the gate.--placeholder.strikethroughβ draws a line through the placeholder text π dramatic but valid.--placeholder.underlineβ underlines the placeholder. Lowkey classic.--placeholder.width=0β width of the placeholder.0= default behaviour.--placeholder="Filter..."β the actual placeholder text shown when the field is empty. Defaults toFilter...π
Okay and now the prompt, same energy, different widget π
--prompt.align="left"β where the prompt text lines up. Defaultleft, like a sane person.--prompt.background=""β prompt background colour, empty default.--prompt.boldβ bolds the prompt. Make it loud π£--prompt.border-background=""β background behind the prompt's border. Empty unless set.--prompt.border-foreground=""β colour of the prompt's border line.--prompt.border="none"β border style for the prompt.noneby default π«--prompt.faintβ faint prompt text, whispery.--prompt.foreground="240"β prompt text colour,240initially.--prompt.height=0β height of the prompt block.0= default.--prompt.italicβ italicises the prompt π¦--prompt.margin="0 0"β margin around the prompt,0 0.--prompt.padding="0 0"β padding inside the prompt,0 0.--prompt.strikethroughβ strikes through the prompt. Chaotic but it's an option.--prompt.underlineβ underlines the prompt, understated slay.--prompt.width=0β prompt width,0for default.--prompt="> "β the literal prompt string shown to the user. Default is>, and yes the space matters π
Then the filter's actual behaviour knobs, which are theδΈ»ι£ of this whole thing:
--reverseβ flips it so stuff displays from the bottom of the screen instead of the top. Main character chaos π--select-if-oneβ if there's literally only one option, it just selects it. No need to make the user work for it π«Ά--selected-indicator.align="left"β alignment of the selected indicator.left.--selected-indicator.background=""β its background colour, empty default.--selected-indicator.boldβ bolds the selected indicator.--selected-indicator.border-background=""β background behind its border.--selected-indicator.border-foreground=""β colour of its border.--selected-indicator.border="none"β border style,noneunless changed.--selected-indicator.faintβ faint rendering for the selected indicator.--selected-indicator.foreground="212"β colour of the selected indicator, defaulting to a very cute212πΈ--selected-indicator.height=0β its height.0= default.--selected-indicator.italicβ italicises it.--selected-indicator.margin="0 0"β margin,0 0.--selected-indicator.padding="0 0"β padding,0 0.--selected-indicator.strikethroughβ strike it through if that's the vibe.--selected-indicator.underlineβ underline it instead.--selected-indicator.width=0β width,0for default.--selected-prefix=" β "β the lil character marking selected items. Defaultββ and heads up, it's hidden if limit is 1 π--selected=,...β options that should start out already selected. Give it*and it selects all of them, no cap β--show-helpβ shows the help keybinds so nobody's left guessing.--sortβ sorts fuzzy results by their scores. Tidy β¨--strictβ only returns if anything actually matched; otherwise it returnsFilter. Choose your fighter.--strip-ansiβ strips ANSI sequences when reading from STDIN. Clean text only π§Ό--text.align="left"β text alignment,leftby default.--text.background=""β text background colour, empty.--text.boldβ bold text.--text.border-background=""β border background colour.--text.border-foreground=""β border foreground colour.--text.border="none"β border style,none.--text.faintβ faint text.--text.foreground=""β foreground colour. Note this one's empty by default, not240π--text.height=0β text height,0.--text.italicβ italic text.--text.margin="0 0"β margin,0 0.--text.padding="0 0"β padding,0 0.--text.strikethroughβ strikethrough text.--text.underlineβ underlined text.--text.width=0β text width,0.--timeout=0sβ how long before the filter command gives up and aborts. Default0sβ°--unselected-prefix.align="left"β alignment for the unselected prefix,left.--unselected-prefix.background=""β its background colour, empty.--unselected-prefix.boldβ bolds it.--unselected-prefix.border-background=""β border background colour.--unselected-prefix.border-foreground=""β border foreground colour.--unselected-prefix.border="none"β border style,none.--unselected-prefix.faintβ faint rendering.--unselected-prefix.foreground="240"β foreground colour,240.--unselected-prefix.height=0β height,0.--unselected-prefix.italicβ italicise it.--unselected-prefix.margin="0 0"β margin,0 0.--unselected-prefix.padding="0 0"β padding,0 0.--unselected-prefix.strikethroughβ strikethrough.--unselected-prefix.underlineβ underline.--unselected-prefix.width=0β width,0.--unselected-prefix=" β "β the character that marks unselected items. Defaultβ, and it's hidden if limit is 1 π«₯--value=""β the initial filter value, empty by default.--width=0β input width.0means default.
π format [<template> ...] [flags]
This one formats a string using a template. Glow-up for your text, basically π
OPTIONS
-l,--language=""β the programming language to parse code with. Empty by default.--strip-ansiβ strips ANSI sequences when reading from STDIN. Again, squeaky clean π§Ό--theme="pink"β the Glamour theme used for markdown formatting. Defaults topinkβ taste, honestly π-t,--type="markdown"β which format to use. Options aremarkdown,template,code,emoji. Default ismarkdownβ¨
πΈ input [flags]
Prompts you for some input. It's giving interactive, it's giving conversation π«Ά
OPTIONS
--char-limit=400β max length of the value. Set it to0for no limit at all. Default is400.--cursor.align="left"β cursor text alignment,left.--cursor.background=""β cursor background colour, empty.--cursor.boldβ bold cursor.--cursor.border-background=""β border background colour.--cursor.border-foreground=""β border foreground colour.--cursor.border="none"β border style,none.--cursor.faintβ faint cursor.--cursor.foreground="212"β cursor colour, that iconic212π--cursor.height=0β cursor height,0.--cursor.italicβ italic cursor.--cursor.margin="0 0"β cursor margin,0 0.--cursor.mode="blink"β the cursor mode. Default isblinkποΈ--cursor.padding="0 0"β cursor padding,0 0.--cursor.strikethroughβ strikethrough cursor.--cursor.underlineβ underlined cursor.--cursor.width=0β cursor width,0.--header.align="left"β header alignment,left.--header.background=""β header background colour, empty.--header.boldβ bold header.--header.border-background=""β header border background colour.--header.border-foreground=""β header border foreground colour.--header.border="none"β header border style,none.--header.faintβ faint header.--header.foreground="240"β header colour,240.--header.height=0β header height,0.--header.italicβ italic header.--header.margin="0 0"β header margin,0 0.--header.padding="0 0"β header padding,0 0.--header.strikethroughβ strikethrough header.--header.underlineβ underlined header.--header.width=0β header width,0.--header=""β the actual header value. Empty by default.--padding="0 0"β padding for the whole thing,0 0.--passwordβ masks the input characters. For when nobody (including your screen) should see π π--placeholder.align="left"β placeholder alignment,left.--placeholder.background=""β placeholder background colour, empty.--placeholder.boldβ bold placeholder.--placeholder.border-background=""β its border background colour.--placeholder.border-foreground=""β its border foreground colour.--placeholder.border="none"β its border style,none.--placeholder.faintβ faint placeholder.--placeholder.foreground="240"β placeholder colour,240.--placeholder.height=0β placeholder height,0.--placeholder.italicβ italic placeholder.--placeholder.margin="0 0"β placeholder margin,0 0.--placeholder.padding="0 0"β placeholder padding,0 0.--placeholder.strikethroughβ strikethrough placeholder.--placeholder.underlineβ underlined placeholder.--placeholder.width=0β placeholder width,0.--placeholder="Type something..."β the placeholder text. Default here isType something...βοΈ--prompt.align="left"β prompt alignment,left.--prompt.background=""β prompt background colour, empty.--prompt.boldβ bold prompt.--prompt.border-background=""β prompt border background colour.--prompt.border-foreground=""β prompt border foreground colour.--prompt.border="none"β prompt border style,none.--prompt.faintβ faint prompt.--prompt.foreground=""β prompt colour. Empty default here, not240β mind the difference π§--prompt.height=0β prompt height,0.--prompt.italicβ italic prompt.--prompt.margin="0 0"β prompt margin,0 0.--prompt.padding="0 0"β prompt padding,0 0.--prompt.strikethroughβ strikethrough prompt.--prompt.underlineβ underlined prompt.--prompt.width=0β prompt width,0.--prompt="> "β the prompt string. Defaults to>β--show-helpβ shows the help keybinds.--strip-ansiβ strips ANSI sequences when reading from STDIN. Yes, again. It's everywhere and we love her π--timeout=0sβ timeout until the input aborts. Default0s.--value=""β initial value. You can also pass it in via stdin π--width=0β input width.0means it uses the terminal width.
π¦ join <text> ... [flags]
Glues your text together β vertically or horizontally, dealer's choice π
OPTIONS
--align="left"β text alignment,leftby default.--horizontalβ joins potentially multi-line strings side by side instead of stacked π«Ά--verticalβ stacks (potentially multi-line) strings vertically, like a lil tower of vibes πΌ
πͺ΅ log <text> ... [flags]
Logs messages to output. That's it, that's the whole thing β you feed it text, it writes a log line. Very demure, very mindful. π
β¨ OPTIONS β¨
-o,--file=STRINGβ log to a file instead of just yeeting it at stdout-f,--formatβ formats the message usingprintf--formatter="text"β which log formatter to use (default:"text")
Okay so the next chunk is the styling situation, and it comes in themed gangs: key, level, message, prefix, separator, time, value. Each gang has the exact same set of knobs (except key and level skip nothing, they're all identical), so think of this as one lipstick shade in seven different tubes. π Every single one of them is listed below because we do NOT skip things in this house.
π the key crew β how the key part of your structured log looks:
--key.align="left"β text alignment (default"left")--key.background=""β background color--key.boldβ bold text--key.border-background=""β border background color--key.border-foreground=""β border foreground color--key.border="none"β border style (default"none", so, no border bestie)--key.faintβ faint text--key.foreground=""β foreground color--key.height=0β text height--key.italicβ italicize text--key.margin="0 0"β text margin--key.padding="0 0"β text padding--key.strikethroughβ ~~strikethrough~~ text--key.underlineβ underline text--key.width=0β text width
πΈ the level crew β same energy, now for the log level:
--level.align="left"β text alignment--level.background=""β background color--level.boldβ bold text--level.border-background=""β border background color--level.border-foreground=""β border foreground color--level.border="none"β border style--level.faintβ faint text--level.foreground=""β foreground color--level.height=0β text height--level.italicβ italicize text--level.margin="0 0"β text margin--level.padding="0 0"β text padding--level.strikethroughβ strikethrough text--level.underlineβ underline text--level.width=0β text width-l,--level="none"β the log level to use (default"none")
π¦ the message crew β for the actual words you're saying:
--message.align="left"β text alignment--message.background=""β background color--message.boldβ bold text--message.border-background=""β border background color--message.border-foreground=""β border foreground color--message.border="none"β border style--message.faintβ faint text--message.foreground=""β foreground color--message.height=0β text height--message.italicβ italicize text--message.margin="0 0"β text margin--message.padding="0 0"β text padding--message.strikethroughβ strikethrough text--message.underlineβ underline text--message.width=0β text width--min-level=""β minimal level to show (default is empty, so everything shows up, no gatekeeping πͺ)
π§ the prefix crew β the little thing that goes before the message:
--prefix.align="left"β text alignment--prefix.background=""β background color--prefix.boldβ bold text--prefix.border-background=""β border background color--prefix.border-foreground=""β border foreground color--prefix.border="none"β border style--prefix.faintβ faint text--prefix.foreground=""β foreground color--prefix.height=0β text height--prefix.italicβ italicize text--prefix.margin="0 0"β text margin--prefix.padding="0 0"β text padding--prefix.strikethroughβ strikethrough text--prefix.underlineβ underline text--prefix.width=0β text width--prefix=STRINGβ prefix to print before the message
π the separator crew β the divider between bits:
--separator.align="left"β text alignment--separator.background=""β background color--separator.boldβ bold text--separator.border-background=""β border background color--separator.border-foreground=""β border foreground color--separator.border="none"β border style--separator.faintβ faint text--separator.foreground=""β foreground color--separator.height=0β text height--separator.italicβ italicize text--separator.margin="0 0"β text margin--separator.padding="0 0"β text padding--separator.strikethroughβ strikethrough text--separator.underlineβ underline text--separator.width=0β text width-s,--structuredβ use structured logging (keys and values, the whole organized moment π
π the time crew β timestamp aesthetics:
--time.align="left"β text alignment--time.background=""β background color--time.boldβ bold text--time.border-background=""β border background color--time.border-foreground=""β border foreground color--time.border="none"β border style--time.faintβ faint text--time.foreground=""β foreground color--time.height=0β text height--time.italicβ italicize text--time.margin="0 0"β text margin--time.padding="0 0"β text padding--time.strikethroughβ strikethrough text--time.underlineβ underline text--time.width=0β text width-t,--time=""β the time format to use (kitchen,layout,ansic,rfc822, etcβ¦)
β the value crew β closing out the styling gangs:
--value.align="left"β text alignment--value.background=""β background color--value.boldβ bold text--value.border-background=""β border background color--value.border-foreground=""β border foreground color--value.border="none"β border style--value.faintβ faint text--value.foreground=""β foreground color--value.height=0β text height--value.italicβ italicize text--value.margin="0 0"β text margin--value.padding="0 0"β text padding--value.strikethroughβ strikethrough text--value.underlineβ underline text--value.width=0β text width
π pager [<content>] [flags]
Scrolls through a file. Cozy little reading nook energy, but make it terminal. ποΈ
β¨ OPTIONS β¨
--align="left"β text alignment--background=""β background color--boldβ bold text--border-background=""β border background color--border-foreground="212"β border foreground color (default"212", a very cute pink-ish number bestie)--border="rounded"β border style (default"rounded", obviously, we're soft here)--faintβ faint text--foreground=""β foreground color--height=0β text height
π the help crew β for the help text itself:
--help.align="left"β text alignment--help.background=""β background color--help.boldβ bold text--help.border-background=""β border background color--help.border-foreground=""β border foreground color--help.border="none"β border style--help.faintβ faint text--help.foreground="241"β foreground color (default"241")--help.height=0β text height--help.italicβ italicize text--help.margin="0 0"β text margin--help.padding="0 0"β text padding--help.strikethroughβ strikethrough text--help.underlineβ underline text--help.width=0β text width--italicβ italicize text
π’ the line-number crew β the numbers down the side:
--line-number.align="left"β text alignment--line-number.background=""β background color--line-number.boldβ bold text--line-number.border-background=""β border background color--line-number.border-foreground=""β border foreground color--line-number.border="none"β border style--line-number.faintβ faint text--line-number.foreground="237"β foreground color (default"237")--line-number.height=0β text height--line-number.italicβ italicize text--line-number.margin="0 0"β text margin--line-number.padding="0 0"β text padding--line-number.strikethroughβ strikethrough text--line-number.underlineβ underline text--line-number.width=0β text width--margin="0 0"β text margin
π₯ the match-highlight crew β for when your search hits, and it HITS:
--match-highlight.align="left"β text alignment--match-highlight.background="225"β background color (default"225")--match-highlight.boldβ bold text--match-highlight.border-background=""β border background color--match-highlight.border-foreground=""β border foreground color--match-highlight.border="none"β border style--match-highlight.faintβ faint text--match-highlight.foreground="235"β foreground color (default"235")--match-highlight.height=0β text height--match-highlight.italicβ italicize text--match-highlight.margin="0 0"β text margin--match-highlight.padding="0 0"β text padding--match-highlight.strikethroughβ strikethrough text--match-highlight.underlineβ underline text--match-highlight.width=0β text width
π and the match crew β the plain, un-highlighted matches:
--match.align="left"β text alignment--match.background=""β background color--match.boldβ bold text--match.border-background=""β border background color--match.border-foreground=""β border foreground color--match.border="none"β border style for the match highlight π--match.faintβ faint text for matches--match.foreground="212"β foreground color of the match (default212, she's got taste β¨)--match.height=0β text height--match.italicβ italicize the match text--match.margin="0 0"β text margin--match.padding="0 0"β text padding--match.strikethroughβ strikethrough text--match.underlineβ underline text--match.width=0β text width--padding="0 1"β text padding, defaulting to"0 1"π--show-line-numbersβ show line numbers, lowkey essential ngl--soft-wrapβ soft wrap those long lines π¦--strikethroughβ strikethrough text--timeout=0sβ timeout until command exits--underlineβ underline text--width=0β text width
π spin β the "we're working on it bestie" command
spin <command> ... [flags]
Displays a spinner while running a command. It's giving main character energy while your build chugs along in the background π
β¨ OPTIONS β¨
-a,--align="left"β alignment of the spinner with regard to the title, default"left"--padding="0 0"β padding--show-errorβ show the output of the command only if the command fails π--show-outputβ show or pipe the output of the command during execution (shows both STDOUT and STDERR, so you get the whole picture)--show-stderrβ show STDERR errput (yes, "errput", that's what it says, iconic typo honestly)--show-stdoutβ show STDOUT output--spinner.align="left"β text alignment for the spinner itself--spinner.background=""β background color--spinner.boldβ bold text--spinner.border-background=""β border background color--spinner.border-foreground=""β border foreground color--spinner.border="none"β border style--spinner.faintβ faint text--spinner.foreground="212"β foreground color, default"212"π--spinner.height=0β text height--spinner.italicβ italicize text--spinner.margin="0 0"β text margin--spinner.padding="0 0"β text padding--spinner.strikethroughβ strikethrough text--spinner.underlineβ underline text--spinner.width=0β text width-s,--spinner="dot"β spinner type, default"dot"(a literal dot spinning, slay)--timeout=0sβ timeout until thespincommand aborts--title.align="left"β text alignment for the title--title.background=""β background color--title.boldβ bold text--title.border-background=""β border background color--title.border-foreground=""β border foreground color--title.border="none"β border style--title.faintβ faint text--title.foreground=""β foreground color--title.height=0β text height--title.italicβ italicize text--title.margin="0 0"β text margin--title.padding="0 0"β text padding--title.strikethroughβ strikethrough text--title.underlineβ underline text--title.width=0β text width--title="Loading..."β the text you show the user while spinning, default"Loading..."π«Ά
π¨ style β make your text pretty
style [<text> ...] [flags]
Apply coloring, borders, spacing to text. This is THE glow-up command, no cap π β¨
β¨ OPTIONS β¨
--align="left"β text alignment--background=""β background color--boldβ bold text--border-background=""β border background color--border-foreground=""β border foreground color--border="none"β border style--faintβ faint text--foreground=""β foreground color--height=0β text height--italicβ italicize text--margin="0 0"β text margin--padding="0 0"β text padding--strikethroughβ strikethrough text--strip-ansiβ strip ANSI sequences when reading from STDIN π§Ό--trimβ trim whitespaces on every input line--underlineβ underline text--width=0β text width
π table β render a table of data
table [flags]
Render a table of data. Data girlies rise up π
β¨ OPTIONS β¨
--border.align="left"β text alignment--border.background=""β background color--border.boldβ bold text--border.border-background=""β border background color--border.border-foreground=""β border foreground color--border.border="none"β border style--border.faintβ faint text--border.foreground=""β foreground color--border.height=0β text height--border.italicβ italicize text--border.margin="0 0"β text margin--border.padding="0 0"β text padding--border.strikethroughβ strikethrough text--border.underlineβ underline text--border.width=0β text width-b,--border="rounded"β border style, default"rounded"(rounded corners are objectively superior, I don't make the rules) π--cell.align="left"β text alignment--cell.background=""β background color--cell.boldβ bold text--cell.border-background=""β border background color--cell.border-foreground=""β border foreground color--cell.border="none"β border style--cell.faintβ faint text--cell.foreground=""β foreground color--cell.height=0β text height--cell.italicβ italicize text--cell.margin="0 0"β text margin--cell.padding="0 0"β text padding--cell.strikethroughβ strikethrough text--cell.underlineβ underline text--cell.width=0β text width-c,--columns=COLUMNS,...β column names--fields-per-record=0β sets the number of expected fields per record-f,--file=""β file path--header.align="left"β text alignment--header.background=""β background color--header.boldβ bold text--header.border-background=""β border background color--header.border-foreground=""β border foreground color--header.border="none"β border style--header.faintβ faint text--header.foreground=""β foreground color--header.height=0β text height--header.italicβ italicize text--header.margin="0 0"β text margin--header.padding="0 0"β text padding--header.strikethroughβ strikethrough text--header.underlineβ underline text--header.width=0β text width--height=0β table height--hide-countβ hide item count on help keybinds--lazy-quotesβ if LazyQuotes is true, a quote may appear in an unquoted field and a non-doubled quote may appear in a quoted field (that's the whole description, bestie, take it verbatim)--padding="0 0"β padding-p,--printβ static print-r,--return-column=0β which column number should be returned instead of whole row as string. Default=0 returns whole Row π«Ά--selected.align="left"β text alignment--selected.background=""β background color--selected.boldβ bold text--selected.border-background=""β border background color--selected.border-foreground=""β border foreground color--selected.border="none"β border style--selected.faintβ faint text--selected.foreground="212"β foreground color, default"212"π--selected.height=0β text height--selected.italicβ italicize text--selected.margin="0 0"β text margin--selected.padding="0 0"β text padding--selected.strikethroughβ strikethrough text--selected.underlineβ underline text--selected.width=0β text width-s,--separator=","β row separator, default","--show-helpβ show help keybinds--timeout=0sβ timeout untilchoosereturns selected element-w,--widths=WIDTHS,...β column widths
π·οΈ version-check β semver vibes
version-check <constraint> [flags]
Semver check current gum version. Like a vibe check but for version numbers π
βοΈ write β prompt for long-form text
write [flags]
Prompt for long-form text. Essay mode activated, bestie π
β¨ OPTIONS β¨
--base.align="left"β text alignment--base.background=""β background color--base.boldβ bold text--base.border-background=""β border background color--base.border-foreground=""β border foreground color--base.border="none"β border style--base.faintβ faint text--base.foreground=""β foreground color--base.height=0β text height--base.italicβ italicize text--base.margin="0 0"β text margin--base.padding="0 0"β text padding--base.strikethroughβ strikethrough text--base.underlineβ underline text--base.width=0β text width--char-limit=0β maximum value length (0for no limit, so0means go off queen)--cursor-line-number.align="left"β text alignment--cursor-line-number.background=""β background color--cursor-line-number.boldβ bold text--cursor-line-number.border-background=""β border background color--cursor-line-number.border-foreground=""β border foreground color--cursor-line-number.border="none"β border style--cursor-line-number.faintβ faint text--cursor-line-number.foreground="7"β foreground colour, default7π¨--cursor-line-number.height=0β text height, default0--cursor-line-number.italicβ italicize the text π¦--cursor-line-number.margin="0 0"β text margin, default0 0--cursor-line-number.padding="0 0"β text padding, default0 0--cursor-line-number.strikethroughβ strikethrough text π--cursor-line-number.underlineβ underline text--cursor-line-number.width=0β text width, default0
okay next up, the cursor-line bundle β the whole-line version of that vibe π«Ά
--cursor-line.align="left"β text alignment, defaultleft--cursor-line.background=""β background colour, default empty--cursor-line.boldβ bold text π₯--cursor-line.border-background=""β border background colour, default empty--cursor-line.border-foreground=""β border foreground colour, default empty--cursor-line.border="none"β border style, defaultnone--cursor-line.faintβ faint text--cursor-line.foreground=""β foreground colour, default empty--cursor-line.height=0β text height, default0--cursor-line.italicβ italicize text--cursor-line.margin="0 0"β text margin, default0 0--cursor-line.padding="0 0"β text padding, default0 0--cursor-line.strikethroughβ strikethrough text--cursor-line.underlineβ underline text--cursor-line.width=0β text width, default0
and now the actual cursor itself, main character energy π
--cursor.align="left"β text alignment, defaultleft--cursor.background=""β background colour, default empty--cursor.boldβ bold text--cursor.border-background=""β border background colour, default empty--cursor.border-foreground=""β border foreground colour, default empty--cursor.border="none"β border style, defaultnone--cursor.faintβ faint text--cursor.foreground="212"β foreground colour, default212π--cursor.height=0β text height, default0--cursor.italicβ italicize text--cursor.margin="0 0"β text margin, default0 0--cursor.mode="blink"β cursor mode, defaultblinkβ¨- **
--cursor.padding="0 0"** β text padding, default0 0` --cursor.strikethroughβ strikethrough text--cursor.underlineβ underline text--cursor.width=0β text width, default0
end-of-buffer squad, for when you've scrolled all the way down π
--end-of-buffer.align="left"β text alignment, defaultleft--end-of-buffer.background=""β background colour, default empty--end-of-buffer.boldβ bold text--end-of-buffer.border-background=""β border background colour, default empty--end-of-buffer.border-foreground=""β border foreground colour, default empty--end-of-buffer.border="none"β border style, defaultnone--end-of-buffer.faintβ faint text--end-of-buffer.foreground="0"β foreground colour, default0--end-of-buffer.height=0β text height, default0--end-of-buffer.italicβ italicize text--end-of-buffer.margin="0 0"β text margin, default0 0--end-of-buffer.padding="0 0"β text padding, default0 0--end-of-buffer.strikethroughβ strikethrough text--end-of-buffer.underlineβ underline text--end-of-buffer.width=0β text width, default0
header styling, because first impressions >>> πΈ
--header.align="left"β text alignment, defaultleft--header.background=""β background colour, default empty--header.boldβ bold text--header.border-background=""β border background colour, default empty--header.border-foreground=""β border foreground colour, default empty--header.border="none"β border style, defaultnone--header.faintβ faint text--header.foreground="240"β foreground colour, default240--header.height=0β text height, default0--header.italicβ italicize text--header.margin="0 0"β text margin, default0 0--header.padding="0 0"β text padding, default0 0--header.strikethroughβ strikethrough text--header.underlineβ underline text--header.width=0β text width, default0--header=""β the actual header value, default empty π--height=5β text area height, default5--line-number.align="left"β text alignment, defaultleft--line-number.background=""β background colour, default empty--line-number.boldβ bold text--line-number.border-background=""β border background colour, default empty--line-number.border-foreground=""β border foreground colour, default empty--line-number.border="none"β border style, defaultnone--line-number.faintβ faint text--line-number.foreground="7"β foreground colour, default7--line-number.height=0β text height, default0--line-number.italicβ italicize text--line-number.margin="0 0"β text margin, default0 0--line-number.padding="0 0"β text padding, default0 0--line-number.strikethroughβ strikethrough text--line-number.underlineβ underline text--line-number.width=0β text width, default0--max-lines=0β maximum number of lines;0means no limit π«--padding="0 0"β padding, default0 0--placeholder.align="left"β text alignment, defaultleft--placeholder.background=""β background colour, default empty--placeholder.boldβ bold text--placeholder.border-background=""β border background colour, default empty--placeholder.border-foreground=""β border foreground colour, default empty--placeholder.border="none"β border style, defaultnone--placeholder.faintβ faint text--placeholder.foreground="240"β foreground colour, default240--placeholder.height=0β text height, default0--placeholder.italicβ italicize text--placeholder.margin="0 0"β text margin, default0 0--placeholder.padding="0 0"β text padding, default0 0--placeholder.strikethroughβ strikethrough text--placeholder.underlineβ underline text--placeholder.width=0β text width, default0--placeholder="Write something..."β the placeholder value itself, defaultWrite something...βοΈ--prompt.align="left"β text alignment, defaultleft--prompt.background=""β background colour, default empty--prompt.boldβ bold text--prompt.border-background=""β border background colour, default empty--prompt.border-foreground=""β border foreground colour, default empty--prompt.border="none"β border style, defaultnone--prompt.faintβ faint text--prompt.foreground="7"β foreground colour, default7--prompt.height=0β text height, default0--prompt.italicβ italicize text--prompt.margin="0 0"β text margin, default0 0--prompt.padding="0 0"β text padding, default0 0--prompt.strikethroughβ strikethrough text--prompt.underlineβ underline text--prompt.width=0β text width, default0--prompt="β "β the prompt to display, defaultβπ«Ά--show-cursor-lineβ show the cursor line π--show-helpβ show help key binds β¨οΈ--show-line-numbersβ show line numbers π’--strip-ansiβ strip ANSI sequences when reading fromSTDINπ§Ό--timeout=0sβ timeout until choose returns the selected element, default0sβ³--value=""β initial value (and yes, it can be passed via stdin), default empty π--width=0β text area width;0means terminal width, default0π
π COPYRIGHT π
(c) 2022-2024 Charmbracelet, Inc.
Released under MIT license.
okay that's the whole page bestie, you're officially a gum scholar πβ¨ this beauty is gum, stamped 2026-09-24, and filed under GUM(1) β go forth and make your terminal gorgeous π
π
π¦ where this page comes from
- arch rolling: gum 2.0.2-1 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms