Skip to content

calahil/cal-tui

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cal TUI Library

A minimal reusable Text-based User Interface (TUI) toolkit for Bash scripting. Build beautiful CLI interfaces with color, menus, input validation, progress bars, and confirmations.

Features

  • ✅ Colorized text output (info, success, error)
  • 🔄 Dynamic, argument-driven menu system
  • 🟩 Relative progress bar
  • 📝 Input with required/regex validation
  • ❓ Yes/No confirmation prompt
  • ⚠️ Emoji/Nerd Font/plain text support
  • 🌐 Installable via curl

Getting Started

🔧 Quick Install

bash -c "$(curl -fsSL https://raw.githubusercontent.com/calahil/cal-tui/main/install.sh)"
source $HOME/.local/bin/cal-tui.sh

Or manually:

curl -fsSL https://raw.githubusercontent.com/calahil/cal-tui/main/cal-tui.sh -o $HOME/.local/bin/cal-tui.sh
source $HOME/.local/bin/cal-tui.sh

📁 File Structure

cal-tui/
├── cal-tui.sh                # The TUI library
├── example.sh                # Demo script
├── install.sh                # Curl-installable setup
├── .gitlab-ci.yml            # GitLab CI runners
├── .github/workflows/        # GitHub Actions CI
│   └── main.yml
├── README.md                 # Docs (this file)
└── LICENSE                   # MIT License

🧪 Example Usage

Menu

source $HOME/.local/bin/cal-tui.sh

my_func() {
  cal-tui::print_info "This is a menu option."
}

my_func_with_args() {
    local temp="$1"
    echo "$temp"
}
main() {
    cal-tui::init_icons "nerd"
    local -a options=("My Function" "Print Args" "Exit")
    local -a icons=("$(cal-tui::get_icon SUCCESS)" "$(cal-tui::get_icon COPY)" "$(cal-tui::get_icon EXIT)")
    local -a commands=("my_func" "$(cal-tui::build_string "my_func_with_args" "Hello World")" "cal-tui::exit")
    local -a callbacks=("main" "main" "")

    cal-tui::menu "Main Menu" options icons commands callbacks
}

Input With Validation

name=$(cal-tui::input_prompt "Enter your name:" true '^[A-Za-z]+$' "Letters only!")

Progress Bar

for i in {1..10}; do
  sleep 0.1
  cal-tui::progress_bar $i 10
done

Confirmation Prompt

if cal-tui::confirm_prompt "Continue with installation?" "n"; then
  cal-tui::print_success "Proceeding."
else
  cal-tui::print_info "Canceled."
fi

Icon use

cal-tui::init_icons "nerd"
$(cal-tui::get_icon SUCCESS)

🚀 License

MIT License. See LICENSE file for full text.


🔗 Contributing / Roadmap

  • Colorized output
  • Progress bar
  • Input validation
  • Yes/No prompt
  • Dynamic menu
  • Install via curl
  • Icon support
  • Pass commands and arguments to menu options
  • Remove all instances of eval
  • Tables
  • Multi-field form input
  • Popup/dialog UI
  • Animated spinners

Fork, PR, or open an issue to suggest features or improvements.


Made with ❤️ in Bash.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages