2026-05-26 14:48:24 +02:00
2026-05-26 14:48:24 +02:00
2026-05-26 14:44:03 +02:00
2026-05-26 14:44:03 +02:00
2026-05-26 14:44:03 +02:00
2026-05-26 14:44:03 +02:00
2026-05-26 14:44:03 +02:00
2026-05-26 14:44:03 +02:00
2026-05-26 14:44:03 +02:00
2026-05-26 14:44:03 +02:00
2026-05-26 14:44:03 +02:00
2026-05-26 14:44:03 +02:00
2026-05-26 14:44:03 +02:00
2026-05-26 14:44:03 +02:00
2026-05-26 14:44:03 +02:00
2026-05-26 14:44:03 +02:00

Ilovetui

A minimal Go library that provides a shared Base16 color theme for terminal UIs built with bubbletea and lipgloss.

The idea is simple: instead of every TUI app managing its own colors, they all share one theme file so the user customizes once and every app looks consistent.

How it works

On import, ilovetui automatically loads the user's theme from ~/.config/ilovetui/config.yaml (respecting $XDG_CONFIG_HOME). If no config exists, it falls back to the embedded default. The active theme is exposed as the package-level variable S.

import "github.com/anotherhadi/ilovetui"

// Use colors directly
style := lipgloss.NewStyle().Foreground(ilovetui.S.Primary)

// Use pre-built panel styles
box := ilovetui.RenderWithTitle(ilovetui.S.PanelFocused, "Title", content, w, h)

No setup required — just import and use.

Installation

go get github.com/anotherhadi/ilovetui

Theme

The theme follows the Base16 standard (16 colors). The library exposes both the raw palette and semantic aliases:

Alias Base16 Meaning
Background Base00 Background
SubtleBg Base01 Lighter Background / Status Bars
Selection Base02 Selection Background
Subtle Base03 Comments / Invisibles
Muted Base04 Dark Foreground / Status Bars
Text Base05 Default Foreground
Primary Base0D Functions / Methods / Headings / Accent
Success Base0B Strings / Success / Diff Inserted
Warning Base09 Integers / Constants / Booleans
Error Base08 Variables / Errors / Diff Deleted

The default theme is ./default.yaml. Copy it and edit to customize:

mkdir -p ~/.config/ilovetui
cp $(go env GOPATH)/pkg/mod/github.com/anotherhadi/ilovetui*/default.yaml ~/.config/ilovetui/config.yaml

Or let your app write it on first run:

ilovetui.WriteDefaultConfig(ilovetui.DefaultConfigPath())

Pre-built styles

S ships with a few ready-to-use lipgloss styles:

Field Description
S.Bold Bold text
S.Faint Muted / dimmed text
S.Panel Rounded border, unfocused (Subtle color)
S.PanelFocused Rounded border, focused (Primary color)

Helpers

// Inner usable height of a bordered panel with outer height h
inner := ilovetui.ContentHeight(h)

// Render a box with a title embedded in the top border
box := ilovetui.RenderWithTitle(ilovetui.S.PanelFocused, "Header", content, w, h)

API

ilovetui.Init()                      // Reload from default config path
ilovetui.InitFrom(path string)       // Reload from a custom path
ilovetui.InitFromBytes(data []byte)  // Parse raw YAML
ilovetui.DefaultConfigPath() string  // ~/.config/ilovetui/config.yaml
ilovetui.WriteDefaultConfig(path)    // Write default config if missing

Projects using ilovetui

  • anotherhadi/spilltea: A minimal, terminal-based HTTP(S) proxy for pentesters and CTF players. Think Burp Suite or Caido, but entirely in your terminal.
  • anotherhadi/usbguard-tui: A terminal UI for managing USB devices via usbguard. TUI built with golang & bubbletea.
  • anotherhadi/jwt-tui: A terminal UI for inspecting, editing, and signing JSON Web Tokens (JWTs).
S
Description
A minimal Go library that provides a shared Base16color theme for terminal UIs built with bubbletea and lipgloss.
Readme MIT 63 KiB
Languages
Go 94.2%
Nix 5.8%