Files
lxs/tools/index.sh
T
hykocx ade8e76a68 style(ui): apply cyberpunk neon theme across all menus
- 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
2026-05-12 22:01:57 -04:00

90 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
# LXS - Tools index
# Description: Interactive menu listing the scripts in tools/
# 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 tool 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
# self_dir points at tools/; the install layout puts siblings here too.
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_tools() {
while true; do
clear
show_title "TOOLS" "SYS_DAEMONS"
echo ""
echo -e " ${YELLOW}◢ 01${NC} ${GRAY}${NC} ${WHITE}System Infos${NC}"
echo -e " ${YELLOW}◢ 02${NC} ${GRAY}${NC} ${WHITE}Server Benchmark${NC}"
echo -e " ${YELLOW}◢ 03${NC} ${GRAY}${NC} ${WHITE}Harden Server${NC}"
echo -e " ${YELLOW}◢ 04${NC} ${GRAY}${NC} ${WHITE}Change Root Password${NC}"
echo -e " ${YELLOW}◢ 05${NC} ${GRAY}${NC} ${WHITE}Update Server${NC}"
echo -e " ${YELLOW}◢ 06${NC} ${GRAY}${NC} ${WHITE}Root SSH Password Login${NC}"
echo -e " ${YELLOW}◢ 07${NC} ${GRAY}${NC} ${WHITE}Welcome Message (MOTD)${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 "tools/system-infos.sh" ;;
2|02) run_sibling "tools/server-benchmark.sh" ;;
3|03) run_sibling "tools/harden.sh" ;;
4|04) run_sibling "tools/root-password.sh" ;;
5|05) run_sibling "tools/update-server.sh" ;;
6|06) run_sibling "tools/root-ssh-login.sh" ;;
7|07) run_sibling "tools/welcome-message.sh" ;;
0|00) return ;;
*) echo -e "${RED}[KO] Invalid protocol. Select 0-7.${NC}"; sleep 1; continue ;;
esac
if [ "$choice" != "0" ] && [ "$choice" != "00" ]; then
echo ""
read -r -p "Press Enter to continue..."
fi
done
}
menu_tools