bankml / tools /bashmoji.sh
Gregory-L's picture
bankML: the whole source (github.com/cryptoAGI/bankml @ 12ae409) and its page, with the bankML persona; the live engine (Dockerfile, hf/start.sh) ready for Docker hardware
28c70af verified
Raw History Blame Contribute Delete
8.96 kB
#!/usr/bin/env bash
# SPDX-License-Identifier: MIT OR Apache-2.0
# =============================================================================
# bashmoji.sh โ€” emoji + colour for shell scripts, safe to source.
# vendored: tools/bashmoji.sh in bankml, from cryptoAGI/bashmoji e81d425 (MIT OR Apache-2.0); update by copying the file
#
# home: https://github.com/cryptoAGI/bashmoji
# used by: the DeltaVerse installer โ€” https://deltaverse.pythai.net
# author: codephreak
#
# source ./bashmoji.sh # in a script: defines BM_* glyphs/colours + bm_* helpers
# ./bashmoji.sh # run it: shows every glyph, colour and helper
# ./bashmoji.sh --plain # the same, as the ASCII fallback renders it
#
# Rules this file keeps, so sourcing it can never break the script that sources it:
# ยท every name is prefixed BM_ (variables) or bm_ (functions) โ€” it never assigns
# PATH, PORT, HOME, NODE or any other name a script or the shell already uses;
# ยท it runs nothing and prints nothing when sourced;
# ยท it works in bash 3.2 (macOS) and later: no associative arrays, no ${x,,};
# ยท it degrades by itself: no colour when stdout is not a terminal, when
# NO_COLOR is set (https://no-color.org) or TERM=dumb; ASCII instead of emoji
# when the locale is not UTF-8 or BASHMOJI=plain.
#
# Overrides: BASHMOJI=plain|emoji BASHMOJI_COLOR=never|always NO_COLOR=1
# =============================================================================
# guard against double sourcing
if [ -n "${BM_LOADED:-}" ]; then return 0 2>/dev/null || exit 0; fi
BM_LOADED=1
BM_VERSION="2.0.0"
BM_HOME="https://github.com/cryptoAGI/bashmoji"
BM_DELTAVERSE="https://deltaverse.pythai.net"
# โ”€โ”€ capability detection โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
bm__utf8() {
case "${LC_ALL:-${LC_CTYPE:-${LANG:-}}}" in *[Uu][Tt][Ff]-8*|*[Uu][Tt][Ff]8*) return 0;; esac
return 1
}
bm__color() {
case "${BASHMOJI_COLOR:-auto}" in always) return 0;; never) return 1;; esac
[ -z "${NO_COLOR:-}" ] && [ "${TERM:-dumb}" != "dumb" ] && [ -t 1 ]
}
case "${BASHMOJI:-auto}" in
plain) BM_EMOJI=0;;
emoji) BM_EMOJI=1;;
*) if bm__utf8 && [ "${TERM:-dumb}" != "dumb" ]; then BM_EMOJI=1; else BM_EMOJI=0; fi;;
esac
if bm__color; then BM_COLOR=1; else BM_COLOR=0; fi
# bm__g NAME "emoji" "ascii" โ€” define one glyph with its fallback
bm__g() { if [ "$BM_EMOJI" = 1 ]; then eval "$1=\"\$2\""; else eval "$1=\"\$3\""; fi; }
# bm__c NAME "escape" โ€” define one colour (empty when colour is off)
bm__c() { if [ "$BM_COLOR" = 1 ]; then eval "$1=\"\$2\""; else eval "$1=''"; fi; }
# โ”€โ”€ colours (ANSI; the full 256/true-colour palette lives in colorbash.sh) โ”€โ”€
bm__c BM_NC $'\033[0m'
bm__c BM_BOLD $'\033[1m'
bm__c BM_DIM $'\033[2m'
bm__c BM_ULINE $'\033[4m'
bm__c BM_RED $'\033[0;31m'
bm__c BM_GREEN $'\033[0;32m'
bm__c BM_YELLOW $'\033[0;33m'
bm__c BM_BLUE $'\033[0;34m'
bm__c BM_MAGENTA $'\033[0;35m'
bm__c BM_CYAN $'\033[0;36m'
bm__c BM_GOLD $'\033[1;33m'
bm__c BM_ORANGE $'\033[38;5;208m'
bm__c BM_VIOLET $'\033[38;5;177m'
# โ”€โ”€ glyphs: status โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
bm__g BM_OK "โœ…" "[ok]"
bm__g BM_FAIL "โŒ" "[x]"
bm__g BM_WARN "โš ๏ธ " "[!]"
bm__g BM_INFO "โ„น๏ธ " "[i]"
bm__g BM_WORKING "๐Ÿ”„" "[~]"
bm__g BM_PENDING "โณ" "[..]"
bm__g BM_SKIP "โญ๏ธ " "[-]"
bm__g BM_BLOCKED "๐Ÿšซ" "[no]"
bm__g BM_DEBUG "๐Ÿ”" "[?]"
bm__g BM_DONE "โ˜‘๏ธ " "[v]"
# โ”€โ”€ glyphs: build & deploy โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
bm__g BM_ROCKET "๐Ÿš€" ">>"
bm__g BM_SPARK "โœจ" "*"
bm__g BM_WRENCH "๐Ÿ”ง" "[cfg]"
bm__g BM_HAMMER "๐Ÿ”จ" "[build]"
bm__g BM_PACKAGE "๐Ÿ“ฆ" "[pkg]"
bm__g BM_INSTALL "๐Ÿ“ฅ" "[in]"
bm__g BM_TEST "๐Ÿงช" "[test]"
bm__g BM_TARGET "๐ŸŽฏ" "[go]"
bm__g BM_BUILDER "๐Ÿ‘ท" "[build]"
# โ”€โ”€ glyphs: system & tools โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
bm__g BM_ROBOT "๐Ÿค–" "[ai]"
bm__g BM_BRAIN "๐Ÿง " "[ml]"
bm__g BM_GEAR "โš™๏ธ " "[sys]"
bm__g BM_TERMINAL "๐Ÿ“Ÿ" "[$]"
bm__g BM_FOLDER "๐Ÿ“" "[dir]"
bm__g BM_FILE "๐Ÿ“„" "[file]"
bm__g BM_LINK "๐Ÿ”—" "[link]"
bm__g BM_GLOBE "๐ŸŒ" "[www]"
bm__g BM_SERVER "๐Ÿ–ฅ๏ธ " "[srv]"
bm__g BM_DOOR "๐Ÿšช" "[port]"
bm__g BM_ROUTE "๐Ÿ›ฃ๏ธ " "[path]"
bm__g BM_BOOK "๐Ÿ“š" "[doc]"
bm__g BM_CLOCK "โฐ" "[t]"
bm__g BM_PYTHON "๐Ÿ" "[py]"
bm__g BM_NODEJS "๐ŸŸข" "[node]"
bm__g BM_PENGUIN "๐Ÿง" "[linux]"
bm__g BM_APPLE "๐ŸŽ" "[mac]"
bm__g BM_WHALE "๐Ÿณ" "[docker]"
# โ”€โ”€ glyphs: security โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
bm__g BM_KEY "๐Ÿ”‘" "[key]"
bm__g BM_LOCK "๐Ÿ”’" "[lock]"
bm__g BM_UNLOCK "๐Ÿ”“" "[open]"
bm__g BM_SHIELD "๐Ÿ›ก๏ธ " "[guard]"
bm__g BM_SIGN "โœ๏ธ " "[sign]"
# โ”€โ”€ glyphs: chain โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
bm__g BM_DELTA "ฮ”" "D"
bm__g BM_CHAIN "โ›“๏ธ " "[chain]"
bm__g BM_CONTRACT "๐Ÿ“œ" "[sol]"
bm__g BM_WALLET "๐Ÿ‘›" "[wallet]"
bm__g BM_TOKEN "๐Ÿช™" "[token]"
bm__g BM_GAS "โ›ฝ" "[gas]"
bm__g BM_NFT "๐ŸŽจ" "[nft]"
bm__g BM_BRIDGE "๐ŸŒ‰" "[bridge]"
bm__g BM_ORACLE "๐Ÿ”ฎ" "[oracle]"
bm__g BM_BITCOIN "โ‚ฟ" "BTC"
bm__g BM_ETHEREUM "โŸ " "ETH"
bm__g BM_UP "๐Ÿ“ˆ" "[up]"
bm__g BM_DOWN "๐Ÿ“‰" "[down]"
# โ”€โ”€ helpers โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# bm_say "message" headline in gold, with BM_PREFIX (default: the rocket)
# bm_sub "message" dim detail line under a headline
# bm_ok / bm_warn / bm_info one line with the matching glyph + colour (stdout)
# bm_err "message" one line to stderr
# bm_die "message" [code] bm_err, then exit (default 1)
# bm_step N TOTAL "message" "[N/TOTAL]" progress headline
# bm_link URL [text] OSC-8 clickable link on terminals that support it, plain text elsewhere
# bm_banner "title" "subtitle" a boxed title line
bm_say() { printf '%s %s%s%s\n' "${BM_PREFIX:-$BM_ROCKET}" "$BM_GOLD" "$*" "$BM_NC"; }
bm_sub() { printf ' %s%s%s\n' "$BM_DIM" "$*" "$BM_NC"; }
bm_ok() { printf '%s %s%s%s\n' "$BM_OK" "$BM_GREEN" "$*" "$BM_NC"; }
bm_warn() { printf '%s %s%s%s\n' "$BM_WARN" "$BM_YELLOW" "$*" "$BM_NC"; }
bm_info() { printf '%s %s%s%s\n' "$BM_INFO" "$BM_CYAN" "$*" "$BM_NC"; }
bm_err() { printf '%s %s%s%s\n' "$BM_FAIL" "$BM_RED" "$*" "$BM_NC" >&2; }
bm_die() { bm_err "$1"; exit "${2:-1}"; }
bm_step() { printf '%s %s[%s/%s]%s %s%s%s\n' "${BM_PREFIX:-$BM_ROCKET}" "$BM_DIM" "$1" "$2" "$BM_NC" "$BM_GOLD" "$3" "$BM_NC"; }
bm_link() {
if [ "$BM_COLOR" = 1 ] && [ -z "${BM_NO_OSC8:-}" ]; then
printf '\033]8;;%s\033\\%s\033]8;;\033\\' "$1" "${2:-$1}"
else
printf '%s' "${2:-$1}"
fi
}
bm_banner() {
printf '%s%s %s %s%s\n' "$BM_BOLD" "$BM_CYAN" "$BM_DELTA" "$1" "$BM_NC"
[ -n "${2:-}" ] && printf ' %s%s%s\n' "$BM_DIM" "$2" "$BM_NC"
return 0
}
# โ”€โ”€ run directly: show the whole set โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
bm__main() {
case "${1:-}" in
--plain) BASHMOJI=plain BM_LOADED= exec bash "$0";;
--version) echo "bashmoji $BM_VERSION"; return 0;;
-h|--help) sed -n '3,26p' "$0"; return 0;;
esac
bm_banner "bashmoji $BM_VERSION" "emoji $([ "$BM_EMOJI" = 1 ] && echo on || echo 'off (ASCII)') ยท colour $([ "$BM_COLOR" = 1 ] && echo on || echo off)"
echo
set | grep -E '^BM_[A-Z_]+=' | grep -vE '^BM_(LOADED|VERSION|HOME|DELTAVERSE|EMOJI|COLOR|NC|BOLD|DIM|ULINE|RED|GREEN|YELLOW|BLUE|MAGENTA|CYAN|GOLD|ORANGE|VIOLET)=' |
while IFS='=' read -r name _; do eval "printf ' %-4s %s\n' \"\$$name\" \"$name\""; done
echo
bm_ok "bm_ok โ€” it worked"
bm_warn "bm_warn โ€” look at this"
bm_info "bm_info โ€” for your information"
bm_err "bm_err โ€” to stderr" 2>&1
bm_step 3 7 "bm_step โ€” a numbered headline"
echo
printf ' %s ยท made for the DeltaVerse: %s\n' "$(bm_link "$BM_HOME" bashmoji)" "$(bm_link "$BM_DELTAVERSE")"
}
if [ "${BASH_SOURCE[0]:-$0}" = "$0" ]; then bm__main "$@"; fi