Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
3.9 KiB
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).