Style definitions for nice terminal layouts 👄

Overview

Lip Gloss

Lip Gloss Title Treatment
Latest Release GoDoc Build Status

Style definitions for nice terminal layouts. Built with TUIs in mind.

Lip Gloss example

Lip Gloss takes an expressive, declarative approach to terminal rendering. Users familiar with CSS will feel at home with Lip Gloss.

import "github.com/charmbracelet/lipgloss"

var style = lipgloss.NewStyle().
    Bold(true).
    Foreground(lipgloss.Color("#FAFAFA")).
    Background(lipgloss.Color("#7D56F4")).
    PaddingTop(2).
    PaddingLeft(4).
    Width(22)

    fmt.Println(style.Render("Hello, kitty."))

Colors

Lip Gloss supports the following color profiles:

ANSI 16 colors (4-bit)

lipgloss.Color("5")  // magenta
lipgloss.Color("9")  // red
lipgloss.Color("12") // light blue

ANSI 256 Colors (8-bit)

lipgloss.Color("86")  // aqua
lipgloss.Color("201") // hot pink
lipgloss.Color("202") // orange

True Color (24-bit)

lipgloss.Color("#0000FF") // good ol' 100% blue
lipgloss.Color("#04B575") // a green
lipgloss.Color("#3C3C3C") // a dark gray

The terminal's color profile will be automatically detected, and colors outside the gamut of the current palette will be automatically coerced to their closest available value.

Adaptive Colors

You can also specify color options for light and dark backgrounds:

lipgloss.AdaptiveColor{Light: "236", Dark: "248"}

The terminal's background color will automatically be detected and the appropriate color will be chosen at runtime.

Inline Formatting

Lip Gloss supports the usual ANSI text formatting options:

var style = lipgloss.NewStyle().
    Bold(true).
    Italic(true).
    Faint(true).
    Blink(true).
    Strikethrough(true).
    Underline(true).
    Reverse(true)

Block-Level Formatting

Lip Gloss also supports rules for block-level formatting:

// Padding
var style = lipgloss.NewStyle().
    PaddingTop(2).
    PaddingRight(4).
    PaddingBottom(2).
    PaddingLeft(4)

// Margins
var style = lipgloss.NewStyle().
    MarginTop(2).
    RightMarginRight(4).
    MarginBottom(2).
    MarginLeft(4)

There is also shorthand syntax for margins and padding, which follows the same format as CSS:

// 2 cells on all sides
lipgloss.NewStyle().Padding(2)

// 2 cells on the top and bottom, 4 cells on the left and right
lipgloss.NewStyle().Margin(2, 4)

// 1 cell on the top, 4 cells on the sides, 2 cells on the bottom
lipgloss.NewStyle().Padding(1, 4, 2)

// Clockwise, starting from the top: 2 cells on the top, 4 on the right, 3 on
// the bottom, and 1 on the left
lipgloss.NewStyle().Margin(2, 4, 3, 1)

Aligning Text

You can align paragraphs of text to the left, right, or center.

var style = lipgloss.NewStyle().
    Width(24).
    Align(lipgloss.Left).  // align it left
    Align(lipgloss.Right). // no wait, align it right
    Align(lipgloss.Center) // just kidding, align it in the center

Width and Height

Setting a minimim width and height is simple and straightforward.

var str = lipgloss.NewStyle().
    Width(24).
    Height(32).
    Foreground(lipgloss.Color("63")).
    Render("What’s for lunch?")

Copying Styles

Just use Copy():

var style = lipgloss.NewStyle().Foreground(lipgloss.Color("219"))

var wildStyle = style.Copy().Blink(true)

Copy() performs a copy on the underlying data structure ensuring that you get a true, dereferenced copy of a style. Without copying it's possible to mutate styles.

Inheritance

Styles can inherit rules from other styles. When inheriting, only unset rules on the receiver are inherited.

var styleA = lipgloss.NewStyle().
    Foreground(lipgloss.Color("229")).
    Background(lipgloss.Color("63"))

// Only the background color will be inherited here, because the foreground
// color will have been already set:
var styleB = lipgloss.NewStyle().
    Foreground(lipgloss.Color("201")).
    Inherit(styleA)

Unsetting Rules

All rules can be unset:

var style = lipgloss.NewStyle().
    Bold(true).                        // make it bold
    UnsetBold().                       // jk don't make it bold
    Background(lipgloss.Color("227")). // yellow background
    UnsetBackground()                  // never mind

When a rule is unset, it won't be inherited or copied.

Note that in the case of boolean values, unset values are different from falsey ones. That is, values explicitly set to false will be copied and inherited, whereas unset values will not.

Enforcing Rules

Sometimes, such as when developing a component, you want to make sure style definitions respect their intended purpose in the UI. This is where Inline and MaxWidth, and MaxHeight come in:

// Force rendering onto a single line, ignoring margins, padding, and borders.
someStyle.Inline().Render("yadda yadda")

// Also limit rendering to five cells
someStyle.Inline().MaxWidth(5).Render("yadda yadda")

// Limit rendering to a 5x5 cell block
someStyle.MaxWidth(5).MaxHeight(5).Render("yadda yadda")

Rendering

Generally, you just call the Render(string) method on a lipgloss.Style:

fmt.Println(lipgloss.NewStyle().Bold(true).Render("Hello, kitty."))

But you could also use the Stringer interface:

var style = lipgloss.NewStyle().String("你好,猫咪。").Bold(true)

fmt.Printf("%s\n", style)

Joining Paragraphs

There are also some utility functions for horizontally and vertically joining paragraphs of text.

// Horizontally join three paragraphs along their bottom edges
lipgloss.HorizontalJoin(lipgloss.Bottom, paragraphA, paragraphB, paragraphC)

// Vertically join two paragraphs along their center axes
lipgloss.VerticalJoin(lipgloss.Center, paragraphA, paragraphB)

// Horizontally join three paragraphs, with the shorter ones aligning 20%
// from the top of the tallest
lipgloss.HorizontalJoin(0.2, paragraphA, paragraphB, paragraphC)

Placing Text in Whitespace

Sometimes you simply want to place a block of text in whitespace.

// Center a paragraph horizontally in a space 80 cells wide. The height of
// the block returned will be as tall as the input paragraph.
block := lipgloss.PlaceHorizontal(80, lipgloss.Center, fancyStyledParagraph)

// Place a paragraph at the bottom of a space 30 cells tall. The width of
// the text block returned will be as wide as the input paragraph.
block := lipgloss.PlaceVertical(30, lipgloss.Bottom, fancyStyledParagraph)

// Place a paragraph in the bottom right corner of a 30x80 cell space.
block := lipgloss.Place(30, 80, lipgloss.Right, lipgloss.Bottom, fancyStyledParagraph)

You can also style the whitespace. For details, see the docs.


What about Bubble Tea?

Lip Gloss doesn’t replace Bubble Tea. Rather, it is an excellent Bubble Tea companion. It was designed to make assembling terminal user interface views as simple and fun as possible so that you can focus on building your application instead of concerning yourself with low-level layout details.

In simple terms, you can use Lip Gloss to help build your Bubble Tea views.

Under the Hood

Lip Gloss is built on the excellent Termenv and Reflow libraries which deal with color and ANSI-aware text operations, respectively. For many use cases Termenv and Reflow will be sufficient for your needs.

Rendering Markdown

For a more document-centric rendering solution with support for things like lists, tables, and syntax-highlighted code have a look at Glamour, the stylesheet-based Markdown renderer.

License

MIT


Part of Charm.

The Charm logo

Charm热爱开源 • Charm loves open source

Issues
  • Explicitly setting the color profile

    Explicitly setting the color profile

    Curious how y'all test the lipgloss output. I'm currently running into issues where the terminal colors are sometimes rendered in tests and sometimes they are not, and it seems to be based on which directory I'm running go test from. Any ideas on how to handle this?

    Screen Shot 2021-05-26 at 10 16 31 AM enhancement 
    opened by komalali 12
  • No colour on linux tty terminal

    No colour on linux tty terminal

    On Ubuntu - everything works fine in the Gnome Terminal and $TERM is xterm-256color

    If I switch to tty console where the $TERM is linux then I get no colour. I expected it fall back to 4-bit, which is supported

    bug 
    opened by THe-SP00K 10
  • Rendering Issues on Windows

    Rendering Issues on Windows

    I found border rendering is very strange, I've tried on Windows Terminal and legacy CMD, both are missing some characters, am I missing some configs? 7cf793398ba9c0f97cad7e956f9ccf1 baff54d81acc85835c65aadec4cdad6 Here is my code: logo := "foo bar" fmt.Printf(lipgloss.NewStyle().BorderStyle(lipgloss.DoubleBorder()).Render(logo))

    BTW, I love this lib and bubbletea. I'm trying to build a cli tool in go, your repo is the most elegant framework I've ever seen. Thanks for building this.

    opened by PrinnyRay 9
  • Example program outputs broken escape codes in Alacritty

    Example program outputs broken escape codes in Alacritty

    When running the example program under Alacritty, some gibberish escape codes are printed at the beginning of the output:

    2021-04-03_21-18-11_100001:lg:1

    In the screenshot, I am running Alacritty in the left pane and Kitty in the right.

    I'm not sure if this is an issue with the example program or the library itself. Other than the extraneous escape codes, both outputs look identical (and very cool!)

    $ alacritty --version
    alacritty 0.8.0-dev (d5dd009a)
    
    opened by b0o 5
  • Colors not working

    Colors not working

    Hey, somehow colors are not working for me.

    What i did Clone this Repo, cd into examples and ran go mod tidy to download deps.

    What did i expect See the exact same UI as in this Repos Readme. Sadly colors are not working for me image

    My Terminal supports 256 colors, so this should not be the problem. image

    Do you have any ideas what could cause this issue?

    Best regards

    opened by kjell0w 4
  • Inherit seems misleading

    Inherit seems misleading

    The comment for Inherit states:

    // Inherit takes values from the style in the argument applies them to this
    // style, overwriting existing definitions. Only values explicitly set on the
    // style in argument will be applied.
    

    But the code seems to behave in the opposite way: https://github.com/charmbracelet/lipgloss/blob/master/style.go#L146

    The code skips existing definitions, it does not overwrite. Is this intentional?

    documentation 
    opened by Evertras 3
  • Feature Request: Override AdaptiveColor, Force Dark/Light mode

    Feature Request: Override AdaptiveColor, Force Dark/Light mode

    Hey Team Charm,

    I am currently using lipgloss.AdaptiveColor{} to adapt the colors of my TUI based on the user's color scheme. It is working great and I find this feature very useful.

    I was wondering if there was I way where I could override which color AdaptiveColor resolves to, so that a user could run the program like so: cli --force-light-mode.

    I can see this being useful where getting the color scheme is not possible, like from tmux or screen. It can also be useful where the user's color scheme borders between the cutoff point between dark and light.

    opened by bensadeh 2
  • Clarify Inherit comment

    Clarify Inherit comment

    The old comment implied that the argument would overwrite, but this is different from the actual behavior which is to NOT overwrite. This updates the comment to reflect this behavior.

    opened by Evertras 2
  • [Question] How to force text to wrap?

    [Question] How to force text to wrap?

    I created a UI with only 64 width, but if the text contains "file path", the text will not be forced to wrap:

    The text contains "file path":

    image

    The text does not contain "file path":

    image

    opened by mritd 2
  • Rendering issues

    Rendering issues

    First of all, congratulations for the good job you have done.

    I am configuring a server (redhat 8.4) to see the example correctly, but I havent achieved yet.

    Reading the issues I got the colors to work

    export TERM=xterm-256color export COLORTERM=true

    But Im still missing something. Could you please help me?

    image

    Thanks in advance

    opened by gallipi 1
  • Add separate sets of hard- and soft-enforced linters

    Add separate sets of hard- and soft-enforced linters

    Soft-enforced linters will only annotate code changes, hard-enforced linters actually make the workflow fail if they encounter an issue.

    You can run the soft linters manually on your machine:

    golangci-lint run --config .golangci-soft.yml
    
    opened by muesli 1
  • Vertical Blocks Joined Centrally Not Centrally Aligned When Rendered By Vertically Aligned Style

    Vertical Blocks Joined Centrally Not Centrally Aligned When Rendered By Vertically Aligned Style

    Example code: https://go.dev/play/p/m_4_YwnUyNI

    Summary: I'm trying to align a check box vertically with its header (which can differ based on the data). It seems that when I join the Header and the checkbox vertically, they're fine; the [X] had 3 sectors of whitespace to the left, and 2 the right.

    However, when I then style that joined-string to a minwidth of 21 and align it centrally, the checkbox ends up with 10 sectors of whitespace to the left and 8 sectors to the right instead of 9 and 9.

    opened by mcquackers 0
  • Example for simple table with Borders

    Example for simple table with Borders

    Really great library and examples, but I am struggling to render a table with borders.

    It would be really useful to add an example for this. Seems like a common use case.

    There are a few libraries that do complex interactive table around based on this library, but I'm looking for a really simple way to just render some text in a table, with the ability for additional styling (foreground / background color etc) with lipgloss.

    opened by miketonks-form3 5
  • feat: New Border Title API

    feat: New Border Title API

    Adds new Border Title API (requested in the issue #87):

    • func (s Style) BorderTitle(title string) Style
    • func (s Style) BorderTitleAlignment(alignment Position) Style
    • func (s Style) BorderTitleBackground(color TerminalColor) Style
    • func (s Style) BorderTitleForeground(color TerminalColor) Style
    • func (s Style) GetBorderTitle() string
    • func (s Style) GetBorderTitleAlignment() Position
    • func (s Style) GetBorderTitleBackground() TerminalColor
    • func (s Style) GetBorderTitleForeground() TerminalColor

    Updated example: image

    opened by eugener 1
  • feat: lipgloss renderer

    feat: lipgloss renderer

    • Introduce lipgloss renderer to render styles and text
    • Deprecate the stringer interface
    • Drop TerminalColor color.Color conformance and reduce dependencies
    • Add ANSIColor as a syntactic sugar
    • Update docs
    opened by aymanbagabas 0
  • weird wordwrapping

    weird wordwrapping

    Hi, I'm facing some weird behavior when I use lipgloss to wrap some strings. Somehow it doesn't behave the same way as wrap.String() from @muesli's reflow package.

    Example

    package main
    
    import (
    	"fmt"
    
    	"github.com/charmbracelet/lipgloss"
    	"github.com/muesli/reflow/wrap"
    )
    
    var x = "x10-test, x10-ab, x10-test1, x10-test10-test, x10-testing-this"
    
    func main() {
    	fmt.Println(wrap.String(x, 28))
    	fmt.Println(lipgloss.NewStyle().Width(28).Render(x))
    }
    

    Result

    Using wrap.String() prints:

    x10-test, x10-ab, x10-test1,
    x10-test10-test, x10-testing
    -this
    

    Using lipgloss:

    x10-test, x10-ab, x10-test1,
    x10-test10-test, x10-testing
    -
    this
    

    Is there an option I'm missing in lipgloss or am I wrong to expect them to behave the same?

    bug 
    opened by jon4hz 3
Releases(v0.5.0)
  • v0.5.0(Feb 14, 2022)

    Laziness

    Happy Valentines Day! Have you ever noticed that programming is the one field where laziness is totally awesome?

    The big news in this release is that Lip Gloss will now wait until absolutely necessary to query for the terminal's background color. This was formerly a fairly heavy hit on the system, however it's been optimized to the point where we can now run it on demand. This, and some other major performance benefits, come from some acute improvements upstream in Termenv. For the low level details check out the release notes for the mighty Termenv v0.10.0 and v0.11.0 releases.

    New

    • Styles now have a Value() method for getting the underlying string value set with SetString() (thanks @76creates) https://github.com/charmbracelet/lipgloss/pull/66

    Improved

    • Lazily detect the background color https://github.com/charmbracelet/lipgloss/pull/61
    • Use termenv's EnvColorProfile, which respects NO_COLOR and CLICOLOR_FORCE env vars https://github.com/charmbracelet/lipgloss/pull/64

    Fixed

    • Fix JoinVertical behavior for non-edge non-center alignments (thanks @ryantriangles) https://github.com/charmbracelet/lipgloss/pull/49

    New Contributors

    • @maaslalani made their first contribution in https://github.com/charmbracelet/lipgloss/pull/48
    • @stefanvanburen made their first contribution in https://github.com/charmbracelet/lipgloss/pull/51
    • @ryantriangles made their first contribution in https://github.com/charmbracelet/lipgloss/pull/49
    • @76creates made their first contribution in https://github.com/charmbracelet/lipgloss/pull/66

    Full Changelog: https://github.com/charmbracelet/lipgloss/compare/v0.4.0...v0.5.0


    The Charm logo

    Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or Slack.

    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Sep 3, 2021)

    Quality-of-Life Updates

    This release includes a menagerie of small but useful and handy improvements.

    Automatic Wrapping for Long Words

    Occasionally you’ll have a word (often a URL or a path) that runs wider than the Width() you set on a style:

    // style.Width(5)
    ╭───────────╮
    │Schnurrbart│
    ╰───────────╯
    // ... that is definitely more than 5 cells wide
    

    Such words will now automatically wrap:

    // style.Width(5)
    ╭─────╮
    │Schnu│
    │rrbar│
    │t    │
    ╰─────╯
    // There we go
    

    For details, see the corresponding PR.

    Query Borders and Whitespace

    Sometimes you need to measure borders and whitespace when calculating your layouts and you end up with code like this:

    const horizontalPadding = 6
    
    style.Copy().Width(windowWidth-horizontalPadding)
    

    This update includes a multitude of methods for querying your styles so you can do away with unnecessary constants and magic numbers. For example:

    style.Copy().Width(windowWidth-style.GetHorizontalPadding())
    

    The most useful of these methods are perhaps the ones that let you query margins, borders and padding all at once:

    • Style.GetFrameSize() (x, y int)
    • Style.GetVerticalFrameSize() int
    • Style.GetHorizontalFrameSize() int

    For details see the changelog below.

    Improved Automatic Color Degradation

    • Better color conversions when automatically degrading a color profile (for example, when coercing from TrueColor to ANSI256).

    The Mystical Hidden Border

    At first glance a hidden border seems silly. Hidden borders can be useful, however, if you want to remove a border but maintain layout positioning in, say, an interactive TUI. Also note that you can still apply a background color to a hidden border.

    To make a hidden border simply call lipgloss.HiddenBorder().


    Changelog

    Changed

    • Words wider than a style’s Width() now wrap automatically
    • Update termenv for improved color space for color profile conversions (it now uses the excellent HSLuv color space)

    New

    • HiddenBorder(), which renders a border comprised of spaces
    • Style-level methods for querying borders and whitespace:
      • Borders:
        • Style.GetBorderTopSize() int
        • Style.GetBorderRightSize() int
        • Style.GetBorderBottomSize() int
        • Style.GetBorderLeftSize() int
        • Style.GetHorizontalBorderSize() int
        • Style.GetVerticalBorderSize() int
      • Margins:
        • Style.GetMarginTop() int
        • Style.GetMarginRight() int
        • Style.GetMarginBottom() int
        • Style.GetMarginLeft() int
        • Style.GetHorizontalMargins() int
        • Style.GetVerticalMargins() int
      • Padding:
        • Style.GetPaddingTop() int
        • Style.GetPaddingRight() int
        • Style.GetPaddingBottom() int
        • Style.GetPaddingLeft() int
        • Style.GetHorizontalPadding() int
        • Style.GetVerticalPadding() int
      • Get horizontal margins, padding, and border widths all at once:
        • Style.GetVerticalFrameSize() int
        • Style.GetHorizontalFrameSize() int
        • Style.GetFrameSize() (x, y int)
    • Border-level size querying methods:
      • Border.GetTopSize() int
      • Border.GetRightSize() int
      • Border.GetBottomSize() int
      • Border.GetLeftSize() int

    Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse or right here in GitHub Discussions.

    The Charm logo

    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Jun 18, 2021)

    Utility Functions

    This release adds two utility functions to the Lip Gloss tool belt:

    1. StyleRunes can apply styling to runes at specific indices in a string, perfect for highlighting matched characters in a fuzzy search result, marking a hotkey on a button and so on.

    2. SetColorProfile sets the color profile on a package-wide basis, which is very useful in testing. Note that outside of testing you probably don’t want to set the color profile as the best available option will be automatically chosen.

    Changelog

    New

    • StyleRunes: applying styling to specific runes in a string
    • SetColorProfile: set the color profile on a package-wide context

    Changed


    Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse or right here in GitHub Discussions.

    The Charm logo

    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Apr 29, 2021)

    Border Fantasy

    This PR adds support for fancier borders, fixes some bugs, and adds a helper function for measuring text blocks.

    With the new border support, it's possible to construct borders from multiple runes, such as this:

    A Rococo-style border constructed of multiple runes

    New

    • Support for multi-rune borders
    • Added Size() (int, int) for returning the width and the height of a block in one go

    Fixed

    • Bump go-runewidth to fix some emoji mis-measuring
    • Fix a panic that could happen in custom borders

    Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse or right here in GitHub Discussions.

    The Charm logo

    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Apr 21, 2021)

    Getters

    This PR adds getters for all style rules, enabling you to query your style rules. This can be handy when building layouts, particularly when styles are variable, such as a component. For example:

    if headerStyle.GetMarginLeft() > lipgloss.Width(spinner) + lipgloss.Width(gap) {
        // jam the spinner in the left gutter
    } else {
       // just put the spinner on the right
    }
    

    For details on the getter API, check out the docs.


    Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse or right here in GitHub Discussions.

    The Charm logo

    Source code(tar.gz)
    Source code(zip)
  • v0.1.3(Apr 17, 2021)

  • v0.1.2(Apr 7, 2021)

    Border Color API Adjustments

    This update makes the border color API more consistent with the other color-related potions of the API by dropping the Color suffix in color-related border methods.

    Changes to border foreground methods:

    • BorderForegroundColor is now BorderForeground
    • BorderTopForegroundColor is now BorderTopForeground
    • BorderRightForegroundColor is now BorderRightForeground
    • BorderBottomForegroundColor is now BorderBottomForeground
    • BorderLeftForegroundColor is now BorderLeftForeground

    Changes to border background methods:

    • BorderBackgroundColor is now BorderBackground
    • BorderTopBackgroundColor is now BorderTopBackground
    • BorderRightBackgroundColor is now BorderRightBackground
    • BorderBottomBackgroundColor is now BorderBottomBackground
    • BorderLeftBackgroundColor is now BorderLeftBackground

    Also:

    • UnsetBorderColor has been removed. To unset border colors use UnsetBorderForeground and UnsetBorderBackground.

    We hope you’re enjoying Lip Gloss!


    Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse or right here in GitHub Discussions.

    The Charm logo

    Source code(tar.gz)
    Source code(zip)
  • v0.1.1(Apr 6, 2021)

    Windows Legacy

    This release includes support for the Windows 10 legacy command console, which includes cmd.exe and the standalone PowerShell application on Windows. Lip Gloss should now "just work" on those consoles.

    Note that ANSI already works by default in Windows Terminal.

    lipgloss.dll

    Thoughts? Questions? Feel free to reach out on Twitter, The Fediverse or right here in GitHub Discussions. We love hearing from you.

    The Charm logo

    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Apr 3, 2021)

    Hello World

    We’re excited to present Lip Gloss, a new declarative terminal styling library built with TUIs in mind. We made this library after seeing design patterns emerge while building Bubble Tea projects such as Glow.

    Lip Gloss does not replace Bubble Tea. Rather, it is a Bubble Tea companion. It was designed to make building terminal user interfaces—and general terminal rendering—as simple and fun as possible, allowing you to focus on building your application rather than concerning yourself with the nuts and bolts of layout details.

    Let us know what you think. Feel free to reach out on Twitter, The Fediverse or right here in GitHub Discussions. We love hearing from you.

    The Charm logo

    Source code(tar.gz)
    Source code(zip)
Owner
Charm
We build tools to make the command line glamorous
Charm
That's right - order that nice pizza 🍕 with `kubectl`

pizza-controller making kubernetes do what it was always meant to do: order pizza. https://gum.co/kubernetes-crds to get up to speed with custom resou

Ciro S. Costa 109 Apr 5, 2022
🎀 a nice lil shell for lua people made with go and lua

Hilbish ?? a nice lil shell for lua people made with go and lua It is currently in a mostly beta state but is very much usable (I'm using it right now

Hilbis Development 242 Aug 2, 2022
go program that installs and customizes ohmyzsh tmux vim via various plugins and other nice to haves

Pimp-My-Shell Table of Contents Pimp-My-Shell Install Usage About Resources Tmux Hotkeys VIM Hotkeys Adjusting Custom Aliases Mac Fix Terminal bind ke

null 8 Jul 24, 2022
Advanced ANSI style & color support for your terminal applications

termenv lets you safely use advanced styling options on the terminal. It gathers information about the terminal environment in terms of its ANSI & col

Christian Muehlhaeuser 1.1k Aug 12, 2022
Automatically generate Go (golang) struct definitions from example JSON

gojson gojson generates go struct definitions from json or yaml documents. Example $ curl -s https://api.github.com/repos/chimeracoder/gojson | gojson

Aditya Mukerjee 2.5k Aug 8, 2022
Stonks is a terminal based stock visualizer and tracker that displays realtime stocks in graph format in a terminal.

Stonks is a terminal based stock visualizer and tracker. Installation Requirements: golang >= 1.13 Manual Clone the repo Run make && make install Pack

Eric Moynihan 514 Aug 1, 2022
Drop-in replacement for Go's flag package, implementing POSIX/GNU-style --flags.

Description pflag is a drop-in replacement for Go's flag package, implementing POSIX/GNU-style --flags. pflag is compatible with the GNU extensions to

Steve Francia 1.9k Aug 9, 2022
Pack a Go workflow/function as a Unix-style pipeline command

tpack Pack a Go workflow/function as a Unix-style pipeline command. Wiki In Unix-like computer operating systems, a pipeline is a mechanism for inter-

Eugene R. 56 Jun 1, 2022
GitHub CLI extension to preview your markdown similar to the style of GitHub.

gh markdown-preview GitHub CLI extension to preview your markdown similar to the style of GitHub gh markdown-preview is a GitHub CLI extension to prev

Yusuke Wada 134 Aug 11, 2022
Clirunner - Package clirunner runs a legacy shell-style CLI as if a human were running it.

clirunner Package clirunner runs a legacy shell-style command-line interpreter (CLI) as if a human were running it. A shell-style CLI offers a prompt

Jeff Regan 0 Jan 4, 2022
Terminal client for SimpleNote

GoNote - Terminal client for SimpleNote GoNote is a simple utility for managing notes in your SimpleNote account. It allows basic operations like crea

Konrad Wąsowicz 53 Jul 18, 2022
gomerge is a tool to quickly bulk merge several pull requests from your terminal.

Gomerge is a tool to quickly enable you to bulk merge Github pull requests from your terminal. The intention of this tool is to simplfy, and eventually automate the merging of github pull requests. This tool should be able to run on most systems.

Cian Gallagher 33 Jul 23, 2022
`tmax` is a powerful tool to help you get terminal cmd directly.

The positioning of tmax is a command line tool with a little artificial intelligence. If you frequently deal with the terminal daily, tmax will greatly improve your work efficiency.

Jeremy 29 Jul 24, 2022
YouTube client on your terminal

MeowTube YouTube client on your terminal Table of Contents About Getting Started Usage Contributing About MeowTube is a CLI (Command Line Interface) t

Abdul Fattah Ikhsan 27 Jul 29, 2022
🎄 A Christmas tree right from your terminal!

ctree ?? A Christmas tree right from your terminal! ?? Demo ⌛ No Refresh Don't want the tree to refresh every 2 seconds? Easy! Just add the --no-refre

Matthew Gleich 37 Jan 3, 2022
progress_bar creates a single customizable progress bar for Linux terminal.

progress_bar Go Progress Bar Features progress_bar creates a single customizable progress bar for Linux terminal. Installation go get -u github.com/er

erman imer 127 Jul 21, 2022
A terminal based typing test.

What A terminal based typing test. Installation Linux sudo curl -L https://github.com/lemnos/tt/releases/download/v0.4.0/tt-linux -o /usr/local/bin/tt

null 376 Aug 10, 2022
Raspberry Pi terminal based activity monitor

pitop Raspberry Pi terminal based activity monitor Yes I know there are plenty of solutions already available, but I wanted to build my own terminal b

Pierre 219 Apr 4, 2022
❓🖼 Find the anime scene by image using your terminal

What Anime CLI ❓ ?? > This application is basically a ?? wrapper around trace.moe PREVIEW Usage ?? Get Anime By Image File ?? what-anime file anime.jp

Ilya Revenko 713 Aug 12, 2022