omni-catalyst 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1137 -0
- package/core/bin/core +85 -0
- package/core/bin/omni +21 -0
- package/core/cli/commands/--version.sh +8 -0
- package/core/cli/commands/brain.sh +1549 -0
- package/core/cli/commands/doctor.sh +834 -0
- package/core/cli/commands/env.sh +226 -0
- package/core/cli/commands/init.sh +1266 -0
- package/core/cli/commands/install.sh +759 -0
- package/core/cli/commands/list.sh +397 -0
- package/core/cli/commands/open.sh +71 -0
- package/core/cli/commands/pg.sh +761 -0
- package/core/cli/commands/reinstall.sh +694 -0
- package/core/cli/commands/show.sh +90 -0
- package/core/cli/commands/uninstall.sh +700 -0
- package/core/cli/commands/update.sh +754 -0
- package/core/cli/commands/voice.sh +170 -0
- package/core/cli/core.sh +82 -0
- package/core/cli/omni.sh +634 -0
- package/core/modules/ai.sh +152 -0
- package/core/modules/auto.sh +90 -0
- package/core/modules/db.sh +94 -0
- package/core/modules/deploy.sh +50 -0
- package/core/modules/dev.sh +126 -0
- package/core/modules/editor.sh +101 -0
- package/core/modules/lang.sh +100 -0
- package/core/modules/npm.sh +122 -0
- package/core/modules/shell.sh +312 -0
- package/core/modules/ui.sh +115 -0
- package/core/tools/ai/all.sh +63 -0
- package/core/tools/ai/antigravity-cli/README.md +45 -0
- package/core/tools/ai/antigravity-cli/bin/agy +28 -0
- package/core/tools/ai/antigravity-cli/helper/agy_helper.c +39 -0
- package/core/tools/ai/antigravity-cli/install.sh +469 -0
- package/core/tools/ai/claude-code/README.md +45 -0
- package/core/tools/ai/claude-code/bin/claude +29 -0
- package/core/tools/ai/claude-code/helper/claude_helper.c +42 -0
- package/core/tools/ai/claude-code/install.sh +278 -0
- package/core/tools/ai/codegraph/README.md +43 -0
- package/core/tools/ai/codegraph/bin/codegraph +3 -0
- package/core/tools/ai/codegraph/install.sh +149 -0
- package/core/tools/ai/codex/README.md +44 -0
- package/core/tools/ai/codex/install.sh +104 -0
- package/core/tools/ai/command-code/README.md +62 -0
- package/core/tools/ai/command-code/install.sh +136 -0
- package/core/tools/ai/engram/README.md +44 -0
- package/core/tools/ai/engram/install.sh +127 -0
- package/core/tools/ai/freebuff/README.md +52 -0
- package/core/tools/ai/freebuff/bin/freebuff +28 -0
- package/core/tools/ai/freebuff/helper/freebuff_helper.c +47 -0
- package/core/tools/ai/freebuff/install.sh +301 -0
- package/core/tools/ai/gemini-cli/README.md +46 -0
- package/core/tools/ai/gemini-cli/install.sh +111 -0
- package/core/tools/ai/gentle-ai/README.md +42 -0
- package/core/tools/ai/gentle-ai/install.sh +253 -0
- package/core/tools/ai/gentle-ai/termux-patches.go +256 -0
- package/core/tools/ai/gga/README.md +49 -0
- package/core/tools/ai/gga/install.sh +134 -0
- package/core/tools/ai/hermes-agent/README.md +50 -0
- package/core/tools/ai/hermes-agent/install.sh +80 -0
- package/core/tools/ai/heygen/README.md +24 -0
- package/core/tools/ai/heygen/install.sh +126 -0
- package/core/tools/ai/kilocode-cli/README.md +45 -0
- package/core/tools/ai/kilocode-cli/bin/kilocode +21 -0
- package/core/tools/ai/kilocode-cli/helper/kilocode_helper.c +47 -0
- package/core/tools/ai/kilocode-cli/install.sh +179 -0
- package/core/tools/ai/kimchi-code/README.md +8 -0
- package/core/tools/ai/kimchi-code/install.sh +120 -0
- package/core/tools/ai/kimi-code/README.md +45 -0
- package/core/tools/ai/kimi-code/install.sh +111 -0
- package/core/tools/ai/kiro-cli/README.md +23 -0
- package/core/tools/ai/kiro-cli/install.sh +127 -0
- package/core/tools/ai/mimocode/README.md +43 -0
- package/core/tools/ai/mimocode/bin/mimo +28 -0
- package/core/tools/ai/mimocode/helper/mimocode_helper.c +47 -0
- package/core/tools/ai/mimocode/install.sh +287 -0
- package/core/tools/ai/minimax-cli/README.md +45 -0
- package/core/tools/ai/minimax-cli/install.sh +111 -0
- package/core/tools/ai/mistral-vibe/README.md +46 -0
- package/core/tools/ai/mistral-vibe/install.sh +119 -0
- package/core/tools/ai/odysseus/README.md +35 -0
- package/core/tools/ai/odysseus/install.sh +163 -0
- package/core/tools/ai/ollama/README.md +44 -0
- package/core/tools/ai/ollama/install.sh +78 -0
- package/core/tools/ai/openclaude/README.md +46 -0
- package/core/tools/ai/openclaude/install.sh +110 -0
- package/core/tools/ai/openclaw/README.md +47 -0
- package/core/tools/ai/openclaw/install.sh +112 -0
- package/core/tools/ai/opencode/README.md +51 -0
- package/core/tools/ai/opencode/bin/opencode +28 -0
- package/core/tools/ai/opencode/helper/opencode_helper.c +57 -0
- package/core/tools/ai/opencode/install.sh +290 -0
- package/core/tools/ai/pi/README.md +46 -0
- package/core/tools/ai/pi/install.sh +104 -0
- package/core/tools/ai/qwen-code/README.md +45 -0
- package/core/tools/ai/qwen-code/install.sh +111 -0
- package/core/tools/ai/seedance/README.md +22 -0
- package/core/tools/ai/seedance/install.sh +134 -0
- package/core/tools/ai/veo3/README.md +36 -0
- package/core/tools/ai/veo3/install.sh +151 -0
- package/core/tools/auto/all.sh +57 -0
- package/core/tools/auto/n8n/README.md +47 -0
- package/core/tools/auto/n8n/install.sh +102 -0
- package/core/tools/db/all.sh +60 -0
- package/core/tools/db/mariadb/README.md +43 -0
- package/core/tools/db/mariadb/install.sh +65 -0
- package/core/tools/db/mongodb/README.md +42 -0
- package/core/tools/db/mongodb/install.sh +73 -0
- package/core/tools/db/postgresql/README.md +45 -0
- package/core/tools/db/postgresql/install.sh +65 -0
- package/core/tools/db/sqlite/README.md +44 -0
- package/core/tools/db/sqlite/install.sh +65 -0
- package/core/tools/deploy/all.sh +39 -0
- package/core/tools/deploy/netlify/install.sh +41 -0
- package/core/tools/deploy/railway/install.sh +47 -0
- package/core/tools/deploy/vercel/install.sh +43 -0
- package/core/tools/dev/all.sh +75 -0
- package/core/tools/dev/bat/README.md +44 -0
- package/core/tools/dev/bat/install.sh +82 -0
- package/core/tools/dev/bc/README.md +44 -0
- package/core/tools/dev/bc/install.sh +82 -0
- package/core/tools/dev/cloudflared/README.md +43 -0
- package/core/tools/dev/cloudflared/install.sh +82 -0
- package/core/tools/dev/curl/README.md +43 -0
- package/core/tools/dev/curl/install.sh +82 -0
- package/core/tools/dev/fzf/README.md +44 -0
- package/core/tools/dev/fzf/install.sh +82 -0
- package/core/tools/dev/gh/README.md +43 -0
- package/core/tools/dev/gh/install.sh +82 -0
- package/core/tools/dev/html2text/README.md +44 -0
- package/core/tools/dev/html2text/install.sh +82 -0
- package/core/tools/dev/imagemagick/README.md +44 -0
- package/core/tools/dev/imagemagick/install.sh +82 -0
- package/core/tools/dev/jq/README.md +44 -0
- package/core/tools/dev/jq/install.sh +82 -0
- package/core/tools/dev/lsd/README.md +44 -0
- package/core/tools/dev/lsd/install.sh +82 -0
- package/core/tools/dev/make/README.md +44 -0
- package/core/tools/dev/make/install.sh +82 -0
- package/core/tools/dev/ncurses/README.md +42 -0
- package/core/tools/dev/ncurses/install.sh +82 -0
- package/core/tools/dev/proot/README.md +43 -0
- package/core/tools/dev/proot/install.sh +82 -0
- package/core/tools/dev/shfmt/README.md +44 -0
- package/core/tools/dev/shfmt/install.sh +82 -0
- package/core/tools/dev/tmate/README.md +44 -0
- package/core/tools/dev/tmate/install.sh +82 -0
- package/core/tools/dev/translate/README.md +44 -0
- package/core/tools/dev/translate/install.sh +82 -0
- package/core/tools/dev/tree/README.md +44 -0
- package/core/tools/dev/tree/install.sh +82 -0
- package/core/tools/dev/udocker/README.md +44 -0
- package/core/tools/dev/udocker/install.sh +82 -0
- package/core/tools/dev/wget/README.md +44 -0
- package/core/tools/dev/wget/install.sh +82 -0
- package/core/tools/editor/all.sh +58 -0
- package/core/tools/editor/neovim/README.md +43 -0
- package/core/tools/editor/neovim/install.sh +66 -0
- package/core/tools/editor/nvchad/README.md +45 -0
- package/core/tools/editor/nvchad/install.sh +110 -0
- package/core/tools/lang/all.sh +63 -0
- package/core/tools/lang/clang/README.md +43 -0
- package/core/tools/lang/clang/install.sh +79 -0
- package/core/tools/lang/golang/README.md +43 -0
- package/core/tools/lang/golang/install.sh +79 -0
- package/core/tools/lang/nodejs/README.md +43 -0
- package/core/tools/lang/nodejs/install.sh +79 -0
- package/core/tools/lang/perl/README.md +43 -0
- package/core/tools/lang/perl/install.sh +79 -0
- package/core/tools/lang/php/README.md +43 -0
- package/core/tools/lang/php/install.sh +79 -0
- package/core/tools/lang/python/README.md +43 -0
- package/core/tools/lang/python/install.sh +79 -0
- package/core/tools/lang/rust/README.md +43 -0
- package/core/tools/lang/rust/install.sh +79 -0
- package/core/tools/npm/all.sh +67 -0
- package/core/tools/npm/live-server/README.md +43 -0
- package/core/tools/npm/live-server/install.sh +95 -0
- package/core/tools/npm/localtunnel/README.md +43 -0
- package/core/tools/npm/localtunnel/install.sh +111 -0
- package/core/tools/npm/markserv/README.md +43 -0
- package/core/tools/npm/markserv/install.sh +94 -0
- package/core/tools/npm/ncu/README.md +43 -0
- package/core/tools/npm/ncu/install.sh +94 -0
- package/core/tools/npm/nestjs/README.md +43 -0
- package/core/tools/npm/nestjs/install.sh +94 -0
- package/core/tools/npm/ngrok/README.md +44 -0
- package/core/tools/npm/ngrok/install.sh +94 -0
- package/core/tools/npm/prettier/README.md +43 -0
- package/core/tools/npm/prettier/install.sh +94 -0
- package/core/tools/npm/psqlformat/README.md +43 -0
- package/core/tools/npm/psqlformat/install.sh +94 -0
- package/core/tools/npm/turbopack/README.md +8 -0
- package/core/tools/npm/turbopack/install.sh +41 -0
- package/core/tools/npm/typescript/README.md +43 -0
- package/core/tools/npm/typescript/install.sh +94 -0
- package/core/tools/npm/vercel/README.md +43 -0
- package/core/tools/npm/vercel/install.sh +94 -0
- package/core/tools/shell/all.sh +67 -0
- package/core/tools/shell/better-npm/README.md +43 -0
- package/core/tools/shell/better-npm/install.sh +85 -0
- package/core/tools/shell/fzf-tab/README.md +44 -0
- package/core/tools/shell/fzf-tab/install.sh +85 -0
- package/core/tools/shell/history-substring/README.md +43 -0
- package/core/tools/shell/history-substring/install.sh +85 -0
- package/core/tools/shell/powerlevel10k/README.md +43 -0
- package/core/tools/shell/powerlevel10k/install.sh +85 -0
- package/core/tools/shell/you-should-use/README.md +43 -0
- package/core/tools/shell/you-should-use/install.sh +85 -0
- package/core/tools/shell/zsh-autopair/README.md +44 -0
- package/core/tools/shell/zsh-autopair/install.sh +85 -0
- package/core/tools/shell/zsh-autosuggestions/README.md +43 -0
- package/core/tools/shell/zsh-autosuggestions/install.sh +85 -0
- package/core/tools/shell/zsh-completions/README.md +43 -0
- package/core/tools/shell/zsh-completions/install.sh +85 -0
- package/core/tools/shell/zsh-defer/README.md +43 -0
- package/core/tools/shell/zsh-defer/install.sh +85 -0
- package/core/tools/shell/zsh-syntax-highlighting/README.md +43 -0
- package/core/tools/shell/zsh-syntax-highlighting/install.sh +72 -0
- package/core/tools/ui/all.sh +61 -0
- package/core/tools/ui/banner/README.md +42 -0
- package/core/tools/ui/banner/install.sh +151 -0
- package/core/tools/ui/cursor/README.md +42 -0
- package/core/tools/ui/cursor/install.sh +58 -0
- package/core/tools/ui/extra-keys/README.md +43 -0
- package/core/tools/ui/extra-keys/install.sh +62 -0
- package/core/tools/ui/font/README.md +43 -0
- package/core/tools/ui/font/install.sh +63 -0
- package/core/utils/banner.sh +519 -0
- package/core/utils/bootstrap.sh +25 -0
- package/core/utils/colors.sh +31 -0
- package/core/utils/dialogrc +30 -0
- package/core/utils/env.sh +53 -0
- package/core/utils/log.sh +598 -0
- package/install.sh +272 -0
- package/package.json +43 -0
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# shellcheck disable=all
|
|
3
|
+
[[ -n "$ZSH_VERSION" ]] && emulate -L bash 2>/dev/null || true
|
|
4
|
+
set -e 2>/dev/null || true
|
|
5
|
+
|
|
6
|
+
BANNER_SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)"
|
|
7
|
+
BANNER_VERSION="$(grep "^OMNI_VERSION=" "$BANNER_SCRIPT_DIR/env.sh" 2>/dev/null | cut -d'"' -f2)"
|
|
8
|
+
[[ -z "$BANNER_VERSION" ]] && BANNER_VERSION="4.4.0"
|
|
9
|
+
|
|
10
|
+
ESC=$(printf '\033')
|
|
11
|
+
|
|
12
|
+
# TrueColor gradient: ciano -> azul -> roxo -> magenta -> rosa
|
|
13
|
+
tc() { printf '%s[38;2;%d;%d;%dm' "$ESC" "$1" "$2" "$3"; }
|
|
14
|
+
|
|
15
|
+
# 16-step TrueColor palette
|
|
16
|
+
TP=()
|
|
17
|
+
for i in $(seq 0 15); do
|
|
18
|
+
if (( i < 4 )); then
|
|
19
|
+
r=$(( 0 + i * 16 )); g=$(( 200 + i * 14 )); b=$(( 255 - i * 10 ))
|
|
20
|
+
elif (( i < 8 )); then
|
|
21
|
+
r=$(( 48 + (i-4) * 8 )); g=$(( 255 - (i-4) * 32 )); b=$(( 215 - (i-4) * 25 ))
|
|
22
|
+
elif (( i < 12 )); then
|
|
23
|
+
r=$(( 80 + (i-8) * 30 )); g=$(( 127 - (i-8) * 25 )); b=$(( 115 - (i-8) * 20 ))
|
|
24
|
+
else
|
|
25
|
+
r=$(( 200 + (i-12) * 14 )); g=$(( 27 + (i-12) * 5 )); b=$(( 35 + (i-12) * 20 ))
|
|
26
|
+
fi
|
|
27
|
+
(( r > 255 )) && r=255; (( g > 255 )) && g=255; (( b > 255 )) && b=255
|
|
28
|
+
(( r < 0 )) && r=0; (( g < 0 )) && g=0; (( b < 0 )) && b=0
|
|
29
|
+
TP+=("$(tc "$r" "$g" "$b")")
|
|
30
|
+
done
|
|
31
|
+
|
|
32
|
+
CYAN="${TP[0]}"
|
|
33
|
+
BLUE="${TP[4]}"
|
|
34
|
+
PURP="${TP[8]}"
|
|
35
|
+
MAG="${TP[12]}"
|
|
36
|
+
PINK=$(tc 255 80 140)
|
|
37
|
+
RED=$(tc 220 50 50)
|
|
38
|
+
WHITE="${ESC}[1;37m"
|
|
39
|
+
GRAY="${ESC}[0;90m"
|
|
40
|
+
DIM="${ESC}[2m"
|
|
41
|
+
NC="${ESC}[0m"
|
|
42
|
+
|
|
43
|
+
# Fixed colors for specific elements
|
|
44
|
+
RUBY=$(tc 220 50 60)
|
|
45
|
+
OBSIDIAN=$(tc 140 90 200)
|
|
46
|
+
GREEN1=$(tc 80 220 80)
|
|
47
|
+
GREEN2=$(tc 60 200 120)
|
|
48
|
+
C07="${TP[7]}"
|
|
49
|
+
C01="${TP[1]}"
|
|
50
|
+
C03="${TP[3]}"
|
|
51
|
+
C05="${TP[5]}"
|
|
52
|
+
C09="${TP[9]}"
|
|
53
|
+
C11="${TP[11]}"
|
|
54
|
+
C13="${TP[13]}"
|
|
55
|
+
|
|
56
|
+
_ansi_len() {
|
|
57
|
+
printf '%s' "$1" | sed 's/\x1b\[[0-9;]*m//g' | wc -m | tr -d ' '
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
_center() {
|
|
61
|
+
local text="$1" width="$2"
|
|
62
|
+
local vis; vis=$(_ansi_len "$text")
|
|
63
|
+
local total=$(( width - vis ))
|
|
64
|
+
local left=$(( total / 2 ))
|
|
65
|
+
local right=$(( total - left ))
|
|
66
|
+
printf '%*s' "$left" ''
|
|
67
|
+
printf '%s' "$text"
|
|
68
|
+
printf '%*s' "$right" ''
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
_repeat() {
|
|
72
|
+
local ch="$1" n="$2" out="" _z
|
|
73
|
+
for ((_z=0; _z<n; _z++)); do out+="$ch"; done
|
|
74
|
+
printf '%s' "$out"
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
_mirror() {
|
|
78
|
+
local s="$1" out="" i c
|
|
79
|
+
for (( i = ${#s} - 1; i >= 0; i-- )); do
|
|
80
|
+
c="${s:$i:1}"
|
|
81
|
+
case "$c" in
|
|
82
|
+
┌) c=┐ ;; ┐) c=┌ ;;
|
|
83
|
+
└) c=┘ ;; ┘) c=└ ;;
|
|
84
|
+
├) c=┤ ;; ┤) c=├ ;;
|
|
85
|
+
┏) c=┓ ;; ┓) c=┏ ;;
|
|
86
|
+
┗) c=┛ ;; ┛) c=┗ ;;
|
|
87
|
+
┣) c=┫ ;; ┫) c=┣ ;;
|
|
88
|
+
╭) c=╮ ;; ╮) c=╭ ;;
|
|
89
|
+
╰) c=╯ ;; ╯) c=╰ ;;
|
|
90
|
+
◤) c=◥ ;; ◥) c=◤ ;;
|
|
91
|
+
◣) c=◢ ;; ◢) c=◣ ;;
|
|
92
|
+
esac
|
|
93
|
+
out+="$c"
|
|
94
|
+
done
|
|
95
|
+
printf '%s' "$out"
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
# ================================================================
|
|
99
|
+
# Counters
|
|
100
|
+
# ================================================================
|
|
101
|
+
_count_ai() { local c=0; for cmd in opencode claude gemini codex qwen vibe mimo hermes kimi ollama freebuff agy mmx pi engram codegraph command-code gentle-ai gga openclaude openclaw mistral-vibe minimax-cli antigravity-cli kiro heygen seedance veo3 odysseus kimchi; do command -v "$cmd" &>/dev/null && ((c++)); done; echo "$c"; }
|
|
102
|
+
_count_lang() { local c=0; for cmd in node python python3 rustc go clang php perl; do command -v "$cmd" &>/dev/null && ((c++)); done; echo "$c"; }
|
|
103
|
+
_count_db() { local c=0; command -v pg_ctl &>/dev/null && ((c++)); command -v mariadb &>/dev/null && ((c++)); command -v sqlite3 &>/dev/null && ((c++)); command -v mongod &>/dev/null && ((c++)); echo "$c"; }
|
|
104
|
+
_uptime() {
|
|
105
|
+
if [[ -f /proc/uptime ]]; then
|
|
106
|
+
local secs; secs=$(awk '{print int($1)}' /proc/uptime 2>/dev/null)
|
|
107
|
+
local d=$((secs/86400)) h=$((secs%86400/3600)) m=$((secs%3600/60))
|
|
108
|
+
if (( d>0 )); then printf "%dd %dh" "$d" "$h"
|
|
109
|
+
elif (( h>0 )); then printf "%dh %dm" "$h" "$m"
|
|
110
|
+
else printf "%dm" "$m"; fi
|
|
111
|
+
else echo "?"; fi
|
|
112
|
+
}
|
|
113
|
+
_ram_free() {
|
|
114
|
+
if [[ -f /proc/meminfo ]]; then
|
|
115
|
+
local kb; kb=$(grep MemAvailable /proc/meminfo 2>/dev/null | awk '{print $2}')
|
|
116
|
+
[[ -n "$kb" ]] && echo "$((kb/1024))MB" || echo "?"
|
|
117
|
+
else echo "?"; fi
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
# ================================================================
|
|
121
|
+
# OMNI letters design (8 wide x 7 tall)
|
|
122
|
+
# ================================================================
|
|
123
|
+
O=(
|
|
124
|
+
"╭────╮"
|
|
125
|
+
"│ ╭╮ │"
|
|
126
|
+
"│ ││ │"
|
|
127
|
+
"│ ││ │"
|
|
128
|
+
"│ ││ │"
|
|
129
|
+
"│ ╰╯ │"
|
|
130
|
+
"╰────╯"
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
M=(
|
|
134
|
+
"╭╮ ╭╮"
|
|
135
|
+
"││ ││"
|
|
136
|
+
"│╲ ╱│"
|
|
137
|
+
"│ ╲╱ │"
|
|
138
|
+
"│ ╭╮ │"
|
|
139
|
+
"│ ││ │"
|
|
140
|
+
"╰╯ ╰╯"
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
N=(
|
|
144
|
+
"╭────╮"
|
|
145
|
+
"││ │"
|
|
146
|
+
"││ │"
|
|
147
|
+
"│╲ │"
|
|
148
|
+
"│ ╲ │"
|
|
149
|
+
"│ ╲││"
|
|
150
|
+
"╰╯ ╰╯"
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
I=(
|
|
154
|
+
"╭────╮"
|
|
155
|
+
"│ │ │"
|
|
156
|
+
"│ │ │"
|
|
157
|
+
"│ │ │"
|
|
158
|
+
"│ │ │"
|
|
159
|
+
"│ │ │"
|
|
160
|
+
"╰────╯"
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
OMNI_LETTERS=(O M N I)
|
|
164
|
+
OMNI_W=8
|
|
165
|
+
|
|
166
|
+
# OMNI colors: gradient across letters
|
|
167
|
+
OMNI_COLORS=("${TP[1]}" "${TP[5]}" "${TP[9]}" "${TP[13]}")
|
|
168
|
+
|
|
169
|
+
# ================================================================
|
|
170
|
+
# CATALYST letters design (5 wide x 5 tall)
|
|
171
|
+
# ================================================================
|
|
172
|
+
C_A=(
|
|
173
|
+
"╭──╮"
|
|
174
|
+
"│╭╮│"
|
|
175
|
+
"││││"
|
|
176
|
+
"││││"
|
|
177
|
+
"╰╯╰╯"
|
|
178
|
+
)
|
|
179
|
+
C_T=(
|
|
180
|
+
"╭──╮"
|
|
181
|
+
" ││ "
|
|
182
|
+
" ││ "
|
|
183
|
+
" ││ "
|
|
184
|
+
" ╰╯ "
|
|
185
|
+
)
|
|
186
|
+
C_L=(
|
|
187
|
+
"╭ "
|
|
188
|
+
"│ "
|
|
189
|
+
"│ "
|
|
190
|
+
"│ "
|
|
191
|
+
"╰──╮"
|
|
192
|
+
)
|
|
193
|
+
C_Y=(
|
|
194
|
+
"╭──╮"
|
|
195
|
+
" ╲╱ "
|
|
196
|
+
" ││ "
|
|
197
|
+
" ││ "
|
|
198
|
+
" ╰╯ "
|
|
199
|
+
)
|
|
200
|
+
C_S=(
|
|
201
|
+
"╭──╮"
|
|
202
|
+
"│ "
|
|
203
|
+
"╰──╮"
|
|
204
|
+
" │"
|
|
205
|
+
"╰──╯"
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
C_C=(
|
|
209
|
+
"╭──╮"
|
|
210
|
+
"│ "
|
|
211
|
+
"│ "
|
|
212
|
+
"│ "
|
|
213
|
+
"╰──╯"
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
# Map CATALYST letters
|
|
217
|
+
CAT_MAP=(C_C C_A C_T C_A C_L C_Y C_S C_T)
|
|
218
|
+
CAT_W=5
|
|
219
|
+
CAT_H=5
|
|
220
|
+
CAT_COLORS=("${TP[0]}" "${TP[2]}" "${TP[4]}" "${TP[6]}" "${TP[8]}" "${TP[10]}" "${TP[12]}" "${TP[14]}")
|
|
221
|
+
|
|
222
|
+
# ================================================================
|
|
223
|
+
# Side circuit decorations
|
|
224
|
+
# ================================================================
|
|
225
|
+
SIDE_H=7
|
|
226
|
+
SIDE_W=4
|
|
227
|
+
DECOR_L=(
|
|
228
|
+
$'╭──╮'
|
|
229
|
+
$'│ ╰'
|
|
230
|
+
$'╰╮ '
|
|
231
|
+
$' │ '
|
|
232
|
+
$' ╰──'
|
|
233
|
+
$'╭╮ '
|
|
234
|
+
$'╰╯ '
|
|
235
|
+
)
|
|
236
|
+
DECOR_R=()
|
|
237
|
+
for row in "${DECOR_L[@]}"; do
|
|
238
|
+
DECOR_R+=("$(_mirror "$row")")
|
|
239
|
+
done
|
|
240
|
+
|
|
241
|
+
# ================================================================
|
|
242
|
+
# CATALYST side circuit decorations
|
|
243
|
+
# ================================================================
|
|
244
|
+
CAT_DECOR_L=(
|
|
245
|
+
"╭─╮ "
|
|
246
|
+
"│╰╮ "
|
|
247
|
+
"│ │ "
|
|
248
|
+
"╰╮│ "
|
|
249
|
+
" ╰╯ "
|
|
250
|
+
)
|
|
251
|
+
CAT_DECOR_R=()
|
|
252
|
+
for row in "${CAT_DECOR_L[@]}"; do
|
|
253
|
+
CAT_DECOR_R+=("$(_mirror "$row")")
|
|
254
|
+
done
|
|
255
|
+
|
|
256
|
+
# ================================================================
|
|
257
|
+
# Panel
|
|
258
|
+
# ================================================================
|
|
259
|
+
PANEL_HEADERS=("AI" "Lang" "DB" "Up" "RAM")
|
|
260
|
+
PANEL_ICONS=("◆" "</>" "⛁" "↗" "◫")
|
|
261
|
+
|
|
262
|
+
_panel_value() {
|
|
263
|
+
case $1 in
|
|
264
|
+
0) _count_ai ;;
|
|
265
|
+
1) _count_lang ;;
|
|
266
|
+
2) _count_db ;;
|
|
267
|
+
3) _uptime ;;
|
|
268
|
+
4) _ram_free ;;
|
|
269
|
+
esac
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
# ================================================================
|
|
273
|
+
# Render
|
|
274
|
+
# ================================================================
|
|
275
|
+
_render() {
|
|
276
|
+
local cols="${COLUMNS:-$(tput cols 2>/dev/null || echo 80)}"
|
|
277
|
+
local W=$(( cols > 72 ? 68 : cols - 6 ))
|
|
278
|
+
(( W < 40 )) && W=40
|
|
279
|
+
local GAP_L=$(( (cols - W - 2) / 2 ))
|
|
280
|
+
(( GAP_L < 0 )) && GAP_L=0
|
|
281
|
+
local GAP_R=$(( cols - W - 2 - GAP_L ))
|
|
282
|
+
(( GAP_R < 0 )) && GAP_R=0
|
|
283
|
+
|
|
284
|
+
local pad_l; pad_l=$(printf '%*s' "$GAP_L" '')
|
|
285
|
+
local pad_r; pad_r=$(printf '%*s' "$GAP_R" '')
|
|
286
|
+
local sp_line; sp_line=$(printf '%*s' "$W" '')
|
|
287
|
+
|
|
288
|
+
# ---- Gradient frame line with tech connectors ----
|
|
289
|
+
local p1=$(( W / 4 )) p2=$(( W / 2 )) p3=$(( 3 * W / 4 ))
|
|
290
|
+
local top_frame="" bot_frame="" i
|
|
291
|
+
for (( i = 0; i < W; i++ )); do
|
|
292
|
+
local c_idx=$(( i * 16 / W ))
|
|
293
|
+
(( c_idx > 15 )) && c_idx=15
|
|
294
|
+
if (( i == 1 || i == W-2 )); then
|
|
295
|
+
top_frame+="${TP[$c_idx]}╌${NC}"
|
|
296
|
+
bot_frame+="${TP[$c_idx]}╌${NC}"
|
|
297
|
+
elif (( i == p1 || i == p2 || i == p3 )); then
|
|
298
|
+
top_frame+="${TP[$c_idx]}┬${NC}"
|
|
299
|
+
bot_frame+="${TP[$c_idx]}┴${NC}"
|
|
300
|
+
else
|
|
301
|
+
top_frame+="${TP[$c_idx]}─${NC}"
|
|
302
|
+
bot_frame+="${TP[$c_idx]}─${NC}"
|
|
303
|
+
fi
|
|
304
|
+
done
|
|
305
|
+
|
|
306
|
+
# ---- Top frame ----
|
|
307
|
+
echo "${pad_l}${TP[0]}╭${NC}${top_frame}${TP[15]}╮${NC}${pad_r}"
|
|
308
|
+
|
|
309
|
+
# ---- Header row ----
|
|
310
|
+
local hdr="${DIM}┄${NC}${DIM}┄${NC} ${TP[2]}◈${NC} ${WHITE}OMNI${NC} ${GRAY}${DIM}✦${NC} ${WHITE}SYSTEMS${NC} ${TP[2]}◈${NC} ${DIM}┄${NC}${DIM}┄${NC}"
|
|
311
|
+
echo "${pad_l}${TP[0]}│${NC}$(_center "$hdr" "$W")${TP[15]}│${NC}${pad_r}"
|
|
312
|
+
|
|
313
|
+
# ---- Empty row ----
|
|
314
|
+
echo "${pad_l}${TP[0]}│${NC}${sp_line}${TP[15]}│${NC}${pad_r}"
|
|
315
|
+
|
|
316
|
+
# ---- OMNI letters (7 rows) ----
|
|
317
|
+
local total_omni_w=$(( OMNI_W * 4 + 3 ))
|
|
318
|
+
for (( row_art = 0; row_art < 7; row_art++ )); do
|
|
319
|
+
local content=""
|
|
320
|
+
content+="${DIM}${DECOR_L[$row_art]}${NC} "
|
|
321
|
+
local l
|
|
322
|
+
for (( l = 0; l < 4; l++ )); do
|
|
323
|
+
local _arr="${OMNI_LETTERS[$l]}" _val
|
|
324
|
+
eval "_val=\"\${${_arr}[$row_art]}\""
|
|
325
|
+
content+="${OMNI_COLORS[$l]}${_val}${NC}"
|
|
326
|
+
(( l < 3 )) && content+=" "
|
|
327
|
+
done
|
|
328
|
+
content+=" ${DIM}${DECOR_R[$row_art]}${NC}"
|
|
329
|
+
echo "${pad_l}${TP[0]}│${NC}$(_center "$content" "$W")${TP[15]}│${NC}${pad_r}"
|
|
330
|
+
done
|
|
331
|
+
|
|
332
|
+
# ---- CATALYST (5 rows) ----
|
|
333
|
+
local total_cat_w=$(( CAT_W * 8 + 7 ))
|
|
334
|
+
for (( cat_row = 0; cat_row < CAT_H; cat_row++ )); do
|
|
335
|
+
local cat_line=""
|
|
336
|
+
cat_line+="${DIM}${CAT_DECOR_L[$cat_row]}${NC} "
|
|
337
|
+
for (( li = 0; li < 8; li++ )); do
|
|
338
|
+
local _carr="${CAT_MAP[$li]}" _cval
|
|
339
|
+
eval "_cval=\"\${${_carr}[$cat_row]}\""
|
|
340
|
+
cat_line+="${CAT_COLORS[$li]}${_cval}${NC}"
|
|
341
|
+
(( li < 7 )) && cat_line+=" "
|
|
342
|
+
done
|
|
343
|
+
cat_line+=" ${DIM}${CAT_DECOR_R[$cat_row]}${NC}"
|
|
344
|
+
echo "${pad_l}${TP[0]}│${NC}$(_center "$cat_line" "$W")${TP[15]}│${NC}${pad_r}"
|
|
345
|
+
done
|
|
346
|
+
|
|
347
|
+
# ---- Tech bus divider ----
|
|
348
|
+
local div_total=$(( W - 2 ))
|
|
349
|
+
local div_l=$(( (div_total - 3) / 2 ))
|
|
350
|
+
local div_r=$(( div_total - 3 - div_l ))
|
|
351
|
+
local dash_l="" dash_r="" j
|
|
352
|
+
for (( j = 0; j < div_l; j++ )); do
|
|
353
|
+
local m=$(( j % 4 ))
|
|
354
|
+
if (( m == 0 )); then dash_l+="─"
|
|
355
|
+
elif (( m == 1 )); then dash_l+="┄"
|
|
356
|
+
elif (( m == 2 )); then dash_l+="·"
|
|
357
|
+
else dash_l+="─"; fi
|
|
358
|
+
done
|
|
359
|
+
for (( j = 0; j < div_r; j++ )); do
|
|
360
|
+
local m=$(( j % 4 ))
|
|
361
|
+
if (( m == 0 )); then dash_r+="─"
|
|
362
|
+
elif (( m == 1 )); then dash_r+="┄"
|
|
363
|
+
elif (( m == 2 )); then dash_r+="·"
|
|
364
|
+
else dash_r+="─"; fi
|
|
365
|
+
done
|
|
366
|
+
local div_line="${DIM}${dash_l}${NC}${TP[3]}◈${NC}${DIM}${dash_r}${NC}"
|
|
367
|
+
echo "${pad_l}${TP[0]}│${NC}$(_center "$div_line" "$W")${TP[15]}│${NC}${pad_r}"
|
|
368
|
+
|
|
369
|
+
# ---- RUBY & OBSIDIAN ----
|
|
370
|
+
local gem_line="${TP[2]}◈${NC} ${RUBY}RUBY${NC} ${WHITE}&${NC} ${OBSIDIAN}OBSIDIAN${NC} ${TP[2]}◈${NC}"
|
|
371
|
+
echo "${pad_l}${TP[0]}│${NC}$(_center "$gem_line" "$W")${TP[15]}│${NC}${pad_r}"
|
|
372
|
+
|
|
373
|
+
# ---- Version ----
|
|
374
|
+
echo "${pad_l}${TP[0]}│${NC}$(_center "${GREEN2}Omni${NC} ${GREEN1}v${BANNER_VERSION}${NC}" "$W")${TP[15]}│${NC}${pad_r}"
|
|
375
|
+
|
|
376
|
+
# ---- Author ----
|
|
377
|
+
echo "${pad_l}${TP[0]}│${NC}$(_center "${GRAY}by${NC} ${WHITE}israel${NC} ${GRAY}marques${NC}" "$W")${TP[15]}│${NC}${pad_r}"
|
|
378
|
+
|
|
379
|
+
# ---- Empty row ----
|
|
380
|
+
echo "${pad_l}${TP[0]}│${NC}${sp_line}${TP[15]}│${NC}${pad_r}"
|
|
381
|
+
|
|
382
|
+
# ---- Info panel ----
|
|
383
|
+
local PW=$(( W - 4 ))
|
|
384
|
+
(( PW < 20 )) && PW=20
|
|
385
|
+
local phline; phline=$(_repeat '─' "$PW")
|
|
386
|
+
|
|
387
|
+
# Panel top
|
|
388
|
+
echo "${pad_l}${TP[0]}│${NC} ${TP[3]}╭${NC}${phline}${TP[11]}╮${NC} ${TP[15]}│${NC}${pad_r}"
|
|
389
|
+
|
|
390
|
+
# Panel header
|
|
391
|
+
local ph=" ${TP[3]}◈${NC} ${WHITE}STATUS${NC} ${TP[3]}◈${NC} "
|
|
392
|
+
echo "${pad_l}${TP[0]}│${NC} ${TP[3]}│${NC}$(_center "$ph" "$PW")${TP[11]}│${NC} ${TP[15]}│${NC}${pad_r}"
|
|
393
|
+
|
|
394
|
+
# Panel separator
|
|
395
|
+
local psep="" j
|
|
396
|
+
for (( j = 0; j < PW; j++ )); do
|
|
397
|
+
local m=$(( j % 4 ))
|
|
398
|
+
if (( m == 0 )); then psep+="─"
|
|
399
|
+
elif (( m == 1 )); then psep+="┄"
|
|
400
|
+
elif (( m == 2 )); then psep+="·"
|
|
401
|
+
else psep+="─"; fi
|
|
402
|
+
done
|
|
403
|
+
echo "${pad_l}${TP[0]}│${NC} ${TP[3]}│${NC}${DIM}${psep}${NC}${TP[11]}│${NC} ${TP[15]}│${NC}${pad_r}"
|
|
404
|
+
|
|
405
|
+
# Panel data row
|
|
406
|
+
local col_w=$(( (PW - 4) / 5 ))
|
|
407
|
+
local col_line=""
|
|
408
|
+
for (( i = 0; i < 5; i++ )); do
|
|
409
|
+
local val; val=$(_panel_value $i)
|
|
410
|
+
local entry="${TP[$(( i * 3 + 1 ))]}${PANEL_ICONS[$i]}${NC} ${WHITE}${PANEL_HEADERS[$i]}${NC} ${GREEN1}${val}${NC}"
|
|
411
|
+
local ev; ev=$(_ansi_len "$entry")
|
|
412
|
+
local epad=$(( (col_w - ev) / 2 ))
|
|
413
|
+
(( epad < 1 )) && epad=1
|
|
414
|
+
local epad2=$(( col_w - ev - epad ))
|
|
415
|
+
(( epad2 < 0 )) && epad2=0
|
|
416
|
+
col_line+="$(printf '%*s' "$epad" '')${entry}$(printf '%*s' "$epad2" '')"
|
|
417
|
+
(( i < 4 )) && col_line+="${GRAY}│${NC}"
|
|
418
|
+
done
|
|
419
|
+
echo "${pad_l}${TP[0]}│${NC} ${TP[3]}│${NC}${col_line}${TP[11]}│${NC} ${TP[15]}│${NC}${pad_r}"
|
|
420
|
+
|
|
421
|
+
# Panel bottom
|
|
422
|
+
echo "${pad_l}${TP[0]}│${NC} ${TP[3]}╰${NC}${phline}${TP[11]}╯${NC} ${TP[15]}│${NC}${pad_r}"
|
|
423
|
+
|
|
424
|
+
# ---- Empty row ----
|
|
425
|
+
echo "${pad_l}${TP[0]}│${NC}${sp_line}${TP[15]}│${NC}${pad_r}"
|
|
426
|
+
|
|
427
|
+
# ---- Decorative dot line ----
|
|
428
|
+
local dot_line="" j
|
|
429
|
+
for (( j = 0; j < W; j++ )); do
|
|
430
|
+
if (( j == W/2 )); then
|
|
431
|
+
dot_line+="${TP[3]}◈${NC}"
|
|
432
|
+
elif (( j % 5 == 0 )); then
|
|
433
|
+
dot_line+="${DIM}·${NC}"
|
|
434
|
+
elif (( j % 3 == 1 )); then
|
|
435
|
+
dot_line+="${GRAY}${DIM}┄${NC}"
|
|
436
|
+
else
|
|
437
|
+
dot_line+="${DIM}─${NC}"
|
|
438
|
+
fi
|
|
439
|
+
done
|
|
440
|
+
echo "${pad_l}${TP[0]}│${NC}${dot_line}${TP[15]}│${NC}${pad_r}"
|
|
441
|
+
|
|
442
|
+
# ---- Bottom card frame ----
|
|
443
|
+
echo "${pad_l}${TP[0]}│${NC}${DIM}╭${NC}$(printf '%*s' $((W-2)) '')${DIM}╮${NC}${TP[15]}│${NC}${pad_r}"
|
|
444
|
+
|
|
445
|
+
# ---- Run omni line ----
|
|
446
|
+
local run_content="${CYAN}>${NC} ${GREEN1}Run${NC} ${WHITE}omni${NC} ${GREEN1}to get started${NC} ${CYAN}_${NC}"
|
|
447
|
+
echo "${pad_l}${TP[0]}│${NC}${DIM}╰${NC}$(_center "$run_content" $((W-2)))${DIM}╯${NC}${TP[15]}│${NC}${pad_r}"
|
|
448
|
+
|
|
449
|
+
# ---- Bottom frame ----
|
|
450
|
+
echo "${pad_l}${TP[0]}╰${NC}${bot_frame}${TP[15]}╯${NC}${pad_r}"
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
echo
|
|
454
|
+
_render
|
|
455
|
+
|
|
456
|
+
# Cache banner for clear() override
|
|
457
|
+
_omni_banner_cache="${XDG_CACHE_HOME:-$HOME/.cache}/omni/banner_cache"
|
|
458
|
+
mkdir -p "$(dirname "$_omni_banner_cache")" 2>/dev/null
|
|
459
|
+
[[ -t 1 ]] && _render > "$_omni_banner_cache" 2>/dev/null
|
|
460
|
+
|
|
461
|
+
log_tip() { echo " ${TP[3]}●${NC} ${GRAY}Tip${NC} $*"; }
|
|
462
|
+
|
|
463
|
+
OMNI_TIPS=(
|
|
464
|
+
"Keep Omni updated: ${TP[3]}omni update core${NC}"
|
|
465
|
+
"Check your version: ${TP[3]}omni --version${NC}"
|
|
466
|
+
"Enable debug logs: ${TP[3]}export OMNI_DEBUG=1${NC}"
|
|
467
|
+
"Open framework docs: ${TP[3]}omni open omni${NC}"
|
|
468
|
+
"Install everything: ${TP[3]}omni install lang db dev npm${NC}"
|
|
469
|
+
"Install specific AI tools: ${TP[3]}omni install ai --opencode --ollama${NC}"
|
|
470
|
+
"See what's installed: ${TP[3]}omni list ai${NC}"
|
|
471
|
+
"Read tool docs: ${TP[3]}omni show ai --opencode${NC}"
|
|
472
|
+
"Update a specific tool: ${TP[3]}omni update ai --opencode${NC}"
|
|
473
|
+
"Update all AI tools: ${TP[3]}omni update ai${NC}"
|
|
474
|
+
"Update all databases: ${TP[3]}omni update db${NC}"
|
|
475
|
+
"Update ZSH plugins: ${TP[3]}omni update shell${NC}"
|
|
476
|
+
"Remove a module: ${TP[3]}omni uninstall npm${NC}"
|
|
477
|
+
"Install all languages: ${TP[3]}omni install lang${NC}"
|
|
478
|
+
"Install Python: ${TP[3]}omni install lang --python${NC}"
|
|
479
|
+
"Install Rust: ${TP[3]}omni install lang --rust${NC}"
|
|
480
|
+
"Install Go: ${TP[3]}omni install lang --golang${NC}"
|
|
481
|
+
"Start PostgreSQL: ${TP[3]}omni pg init${NC} then ${TP[3]}omni pg start${NC}"
|
|
482
|
+
"Open psql shell: ${TP[3]}omni pg shell${NC}"
|
|
483
|
+
"Install all AI agents: ${TP[3]}omni install ai${NC}"
|
|
484
|
+
"Install OpenCode: ${TP[3]}omni install ai --opencode${NC}"
|
|
485
|
+
"Install Claude Code: ${TP[3]}omni install ai --claude-code${NC}"
|
|
486
|
+
"Install Codex CLI: ${TP[3]}omni install ai --codex${NC}"
|
|
487
|
+
"Install Gemini CLI: ${TP[3]}omni install ai --gemini-cli${NC}"
|
|
488
|
+
"Install MiMo Code: ${TP[3]}omni install ai --mimocode${NC}"
|
|
489
|
+
"Install Neovim + NvChad: ${TP[3]}omni install editor${NC}"
|
|
490
|
+
"Fuzzy search: ${TP[3]}omni install dev --fzf${NC}"
|
|
491
|
+
"Modern ls: ${TP[3]}omni install dev --lsd${NC}"
|
|
492
|
+
"Syntax cat: ${TP[3]}omni install dev --bat${NC}"
|
|
493
|
+
"GitHub CLI: ${TP[3]}omni install dev --gh${NC}"
|
|
494
|
+
"Format shell scripts: ${TP[3]}omni install dev --shfmt${NC}"
|
|
495
|
+
"Process JSON: ${TP[3]}omni install dev --jq${NC}"
|
|
496
|
+
"Deploy to Vercel: ${TP[3]}omni install npm --vercel${NC}"
|
|
497
|
+
"TypeScript: ${TP[3]}omni install npm --typescript${NC}"
|
|
498
|
+
"Install ZSH + plugins: ${TP[3]}omni install shell${NC}"
|
|
499
|
+
"Customize Termux UI: ${TP[3]}omni install ui${NC}"
|
|
500
|
+
"Install banner: ${TP[3]}omni install ui --banner${NC}"
|
|
501
|
+
"Set API keys: ${TP[3]}omni env set${NC}"
|
|
502
|
+
"Second brain: ${TP[3]}omni brain init${NC}"
|
|
503
|
+
"Save memories: ${TP[3]}omni brain save${NC}"
|
|
504
|
+
"Voice-to-AI: ${TP[3]}omni voice opencode${NC}"
|
|
505
|
+
"Init Next.js: ${TP[3]}cd my-app && omni init next${NC}"
|
|
506
|
+
"Init Express: ${TP[3]}cd api && omni init express${NC}"
|
|
507
|
+
)
|
|
508
|
+
|
|
509
|
+
_tip_index_file="${XDG_CACHE_HOME:-$HOME/.cache}/omni/.last_tip_index"
|
|
510
|
+
if [[ ${#OMNI_TIPS[@]} -gt 0 ]]; then
|
|
511
|
+
last_index=-1
|
|
512
|
+
[[ -f "$_tip_index_file" ]] && last_index=$(cat "$_tip_index_file" 2>/dev/null || echo "-1")
|
|
513
|
+
new_index=$last_index
|
|
514
|
+
while [[ "$new_index" == "$last_index" ]]; do new_index=$(( RANDOM % ${#OMNI_TIPS[@]} )); done
|
|
515
|
+
echo "$new_index" >"$_tip_index_file"
|
|
516
|
+
_tip="${OMNI_TIPS[$new_index]:-}"
|
|
517
|
+
[[ -n "$_tip" ]] && { echo; log_tip "$_tip"; }
|
|
518
|
+
fi
|
|
519
|
+
echo
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# evitar redeclaraciones
|
|
4
|
+
[[ -n "${__OMNI_BOOTSTRAP_LOADED:-}" ]] && return
|
|
5
|
+
__OMNI_BOOTSTRAP_LOADED=1
|
|
6
|
+
|
|
7
|
+
# registro de imports
|
|
8
|
+
declare -A __OMNI_IMPORTED
|
|
9
|
+
|
|
10
|
+
import() {
|
|
11
|
+
local base="${OMNI_PATH}"
|
|
12
|
+
local path="${1//@/$base}.sh"
|
|
13
|
+
|
|
14
|
+
if [[ -n "${__OMNI_IMPORTED[$path]}" ]]; then
|
|
15
|
+
return
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
if [[ ! -f "$path" ]]; then
|
|
19
|
+
echo "omni: import error: $path not found" >&2
|
|
20
|
+
exit 1
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
__OMNI_IMPORTED[$path]=1
|
|
24
|
+
source "$path"
|
|
25
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# light colors
|
|
4
|
+
BLACK="\e[1;30m"
|
|
5
|
+
GRAY="\033[0;90m"
|
|
6
|
+
BLUE="\e[1;34m"
|
|
7
|
+
GREEN="\e[1;32m"
|
|
8
|
+
CYAN="\e[38;5;196m" # Ruby Red
|
|
9
|
+
RED="\e[1;31m"
|
|
10
|
+
PURPLE="\e[1;35m"
|
|
11
|
+
YELLOW="\e[1;33m"
|
|
12
|
+
NC="\e[1;37m" # no color or white
|
|
13
|
+
|
|
14
|
+
# dark colors
|
|
15
|
+
D_BLACK="\e[0;30m"
|
|
16
|
+
D_BLUE="\e[0;34m"
|
|
17
|
+
D_GREEN="\e[0;32m"
|
|
18
|
+
D_CYAN="\e[38;5;129m" # Obsidian Purple
|
|
19
|
+
D_RED="\e[0;31m"
|
|
20
|
+
D_PURPLE="\e[0;35m"
|
|
21
|
+
D_YELLOW="\e[0;33m"
|
|
22
|
+
D_NC="\e[0;37m" # no color or white
|
|
23
|
+
|
|
24
|
+
# background colors
|
|
25
|
+
BG_BLACK=$(setterm -background black)
|
|
26
|
+
BG_BLUE=$(setterm -background blue)
|
|
27
|
+
BG_GREEN=$(setterm -background green)
|
|
28
|
+
BG_CYAN=$(setterm -background cyan)
|
|
29
|
+
BG_RED=$(setterm -background red)
|
|
30
|
+
BG_YELLOW=$(setterm -background yellow)
|
|
31
|
+
BG_WHITE=$(setterm -background white)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
use_shadow = OFF
|
|
2
|
+
use_colors = ON
|
|
3
|
+
screen_color = (WHITE,BLACK,OFF)
|
|
4
|
+
dialog_color = (WHITE,BLACK,OFF)
|
|
5
|
+
title_color = (RED,BLACK,ON)
|
|
6
|
+
border_color = (MAGENTA,BLACK,OFF)
|
|
7
|
+
button_active_color = (WHITE,RED,ON)
|
|
8
|
+
button_inactive_color = (WHITE,BLACK,OFF)
|
|
9
|
+
button_key_active_color = (WHITE,RED,ON)
|
|
10
|
+
button_key_inactive_color = (RED,BLACK,OFF)
|
|
11
|
+
button_label_active_color = (YELLOW,RED,ON)
|
|
12
|
+
button_label_inactive_color = (WHITE,BLACK,ON)
|
|
13
|
+
inputbox_color = (WHITE,BLACK,OFF)
|
|
14
|
+
inputbox_border_color = (MAGENTA,BLACK,OFF)
|
|
15
|
+
searchbox_color = (WHITE,BLACK,OFF)
|
|
16
|
+
searchbox_title_color = (RED,BLACK,ON)
|
|
17
|
+
searchbox_border_color = (MAGENTA,BLACK,OFF)
|
|
18
|
+
position_indicator_color = (RED,BLACK,ON)
|
|
19
|
+
menubox_color = (WHITE,BLACK,OFF)
|
|
20
|
+
menubox_border_color = (MAGENTA,BLACK,OFF)
|
|
21
|
+
item_color = (WHITE,BLACK,OFF)
|
|
22
|
+
item_selected_color = (WHITE,MAGENTA,ON)
|
|
23
|
+
tag_color = (RED,BLACK,ON)
|
|
24
|
+
tag_selected_color = (WHITE,MAGENTA,ON)
|
|
25
|
+
tag_key_color = (RED,BLACK,OFF)
|
|
26
|
+
tag_key_selected_color = (WHITE,MAGENTA,ON)
|
|
27
|
+
check_color = (RED,BLACK,ON)
|
|
28
|
+
check_selected_color = (WHITE,MAGENTA,ON)
|
|
29
|
+
uarrow_color = (MAGENTA,BLACK,ON)
|
|
30
|
+
darrow_color = (MAGENTA,BLACK,ON)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
OMNI_VERSION="1.0.0"
|
|
4
|
+
|
|
5
|
+
# -------------------------
|
|
6
|
+
# Directorios del usuario
|
|
7
|
+
# -------------------------
|
|
8
|
+
|
|
9
|
+
# configuración
|
|
10
|
+
OMNI_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/omni"
|
|
11
|
+
|
|
12
|
+
# cache
|
|
13
|
+
OMNI_CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/omni"
|
|
14
|
+
|
|
15
|
+
# datos del usuario
|
|
16
|
+
OMNI_DATA="${XDG_DATA_HOME:-$HOME/.local/share}/omni-data"
|
|
17
|
+
|
|
18
|
+
# -------------------------
|
|
19
|
+
# Rutas internas del CLI
|
|
20
|
+
# -------------------------
|
|
21
|
+
|
|
22
|
+
OMNI_BIN="$OMNI_PATH/bin"
|
|
23
|
+
OMNI_MODULES="$OMNI_PATH/modules"
|
|
24
|
+
OMNI_UTILS="$OMNI_PATH/utils"
|
|
25
|
+
OMNI_CLI="$OMNI_PATH/cli"
|
|
26
|
+
|
|
27
|
+
# -------------------------
|
|
28
|
+
# Crear directorios
|
|
29
|
+
# -------------------------
|
|
30
|
+
|
|
31
|
+
mkdir -p \
|
|
32
|
+
"$OMNI_CONFIG" \
|
|
33
|
+
"$OMNI_CACHE" \
|
|
34
|
+
"$OMNI_DATA"
|
|
35
|
+
|
|
36
|
+
# -------------------------
|
|
37
|
+
# TUI Colors - Ruby & Obsidian
|
|
38
|
+
# -------------------------
|
|
39
|
+
export DIALOGRC="$OMNI_UTILS/dialogrc"
|
|
40
|
+
export NEWT_COLORS='
|
|
41
|
+
root=,black
|
|
42
|
+
window=,black
|
|
43
|
+
border=magenta,black
|
|
44
|
+
textbox=white,black
|
|
45
|
+
button=white,red
|
|
46
|
+
actbutton=white,magenta
|
|
47
|
+
checkbox=magenta,black
|
|
48
|
+
actcheckbox=white,red
|
|
49
|
+
label=white,black
|
|
50
|
+
listbox=white,black
|
|
51
|
+
actlistbox=white,magenta
|
|
52
|
+
title=red,black
|
|
53
|
+
'
|