ade8e76a68
- replace color palette with Cyberpunk 2077 neon variants in lib/common.sh - add DIM, BLINK, REV attributes and show_title ui helper - make show_separator terminal-width-aware via tput cols - restyle menus with ◢ numbered items and ▸_ prompt indicator - support two-digit input aliases (01-05, 00) alongside single-digit - update status tokens: [✓]/[✗] → [OK]/[KO], PURPLE → MAGENTA - apply consistent ui changes to lxs.sh and tools/index.sh
85 lines
3.0 KiB
Bash
Executable File
85 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# LXS - Apps index
|
|
# Description: Interactive menu listing the application installers in apps/
|
|
# Author: LXS
|
|
# Date: 2025
|
|
|
|
# Load LXS common library (colors, separator, run_spinner, loggers)
|
|
LXS_RAW_BASE="${LXS_RAW_BASE:-https://git.hyko.cx/hykocx/lxs/raw/branch/main}"
|
|
_lib=$(curl -fsSL "${LXS_RAW_BASE}/lib/common.sh") || { echo "Failed to fetch lib/common.sh" >&2; exit 1; }
|
|
eval "$_lib"
|
|
unset _lib
|
|
|
|
# Run a sibling app script. Prefers a file next to this script (installed
|
|
# layout); falls back to downloading from LXS_RAW_BASE.
|
|
run_sibling() {
|
|
local script_path=$1
|
|
shift
|
|
local script_name self_dir resolved src="${BASH_SOURCE[0]}"
|
|
script_name=$(basename "$script_path")
|
|
|
|
if [ -n "$src" ]; then
|
|
resolved=$(readlink -f "$src" 2>/dev/null) \
|
|
|| resolved=$(realpath "$src" 2>/dev/null) \
|
|
|| resolved="$src"
|
|
self_dir=$(dirname "$resolved")
|
|
fi
|
|
|
|
if [ -n "$self_dir" ] && [ -f "${self_dir}/${script_name}" ]; then
|
|
chmod +x "${self_dir}/${script_name}" 2>/dev/null || true
|
|
"${self_dir}/${script_name}" "$@"
|
|
return $?
|
|
fi
|
|
|
|
local temp_file exit_code
|
|
temp_file=$(mktemp "/tmp/lxs.${script_name%.*}.XXXXXX.sh")
|
|
echo -e "${MAGENTA}[··] Fetching ${BOLD}${script_name}${NC}${MAGENTA}...${NC}"
|
|
if curl -fsSL -H "Cache-Control: no-cache" -o "${temp_file}" "${LXS_RAW_BASE}/${script_path}"; then
|
|
echo -e "${GREEN}[OK] Payload acquired${NC}"
|
|
chmod +x "${temp_file}"
|
|
"${temp_file}" "$@"
|
|
exit_code=$?
|
|
rm -f "${temp_file}"
|
|
return $exit_code
|
|
else
|
|
echo -e "${RED}[KO] Failed to download ${script_path}${NC}"
|
|
rm -f "${temp_file}"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
menu_apps() {
|
|
while true; do
|
|
clear
|
|
show_title "APPLICATIONS" "APP_REPOSITORY"
|
|
echo ""
|
|
echo -e " ${YELLOW}◢ 01${NC} ${GRAY}│${NC} ${WHITE}Coolify${NC}"
|
|
echo -e " ${YELLOW}◢ 02${NC} ${GRAY}│${NC} ${WHITE}Pterodactyl Panel${NC}"
|
|
echo -e " ${YELLOW}◢ 03${NC} ${GRAY}│${NC} ${WHITE}Uptime Kuma${NC}"
|
|
echo -e " ${YELLOW}◢ 04${NC} ${GRAY}│${NC} ${WHITE}CloudPanel${NC}"
|
|
echo -e " ${YELLOW}◢ 05${NC} ${GRAY}│${NC} ${WHITE}Proxmox VE Tools${NC}"
|
|
echo -e " ${RED}◢ 00${NC} ${GRAY}│${NC} ${WHITE}BACK${NC}"
|
|
echo ""
|
|
echo -e -n "${YELLOW}▸${NC}${MAGENTA}_${NC} "
|
|
read -r choice
|
|
|
|
case $choice in
|
|
1|01) run_sibling "apps/coolify.sh" ;;
|
|
2|02) run_sibling "apps/pterodactyl.sh" ;;
|
|
3|03) run_sibling "apps/uptime-kuma.sh" ;;
|
|
4|04) run_sibling "apps/cloudpanel.sh" ;;
|
|
5|05) run_sibling "apps/proxmox.sh" ;;
|
|
0|00) return ;;
|
|
*) echo -e "${RED}[KO] Invalid protocol. Select 0-5.${NC}"; sleep 1; continue ;;
|
|
esac
|
|
|
|
if [ "$choice" != "0" ] && [ "$choice" != "00" ]; then
|
|
echo ""
|
|
read -r -p "Press Enter to continue..."
|
|
fi
|
|
done
|
|
}
|
|
|
|
menu_apps
|