|
1 | 1 | #!/bin/bash |
2 | 2 | # Author: Lokesh Kumar |
3 | | -# Update: 08/03/2026 |
4 | | -# setup.sh |
| 3 | +# Update: 28/03/2026 |
| 4 | +# Project: Tool-X Universal Installer |
5 | 5 |
|
6 | 6 | TOOL_DIR="$HOME/tool-x" |
7 | 7 | REPO_URL="https://github.com/trmxvibs/Tool-X" |
8 | 8 | INSTALLER_SCRIPT="tool-x.py" |
9 | | -ALIAS_NAME="Tool-x" |
10 | 9 |
|
11 | | -# Define colors |
| 10 | +# User-friendly command variations (Case-insensitivity) |
| 11 | +COMMANDS=("toolx" "Toolx" "Tool-x" "tool-x") |
| 12 | + |
| 13 | +# Colors for UI |
12 | 14 | GREEN='\033[1;32m' |
13 | 15 | YELLOW='\033[1;33m' |
14 | 16 | RED='\033[1;31m' |
15 | 17 | NC='\033[0m' |
16 | 18 |
|
17 | 19 | echo -e "\n${GREEN}[*] Initializing Tool-X Universal Setup...${NC}" |
18 | 20 |
|
19 | | -# >> Step 1: Detect Environment & Install Dependencies --- |
| 21 | +# --- STEP 1: Advanced OS & Package Manager Detection --- |
20 | 22 | echo -e "${YELLOW}[*] Detecting Operating System and Package Manager...${NC}" |
21 | 23 |
|
22 | 24 | if [ -d "$PREFIX" ] && grep -q "com.termux" "$PREFIX/etc/bash.bashrc" 2>/dev/null; then |
23 | | - IS_TERMUX=true |
| 25 | + # 1. Termux (Android) |
| 26 | + OS_TYPE="termux" |
| 27 | + BIN_DIR="$PREFIX/bin" |
24 | 28 | echo -e "${GREEN}[+] Environment: Termux Detected.${NC}" |
25 | | - pkg update -y |
26 | | - pkg install git python -y |
| 29 | + pkg update -y && pkg install git python -y |
| 30 | + |
| 31 | +elif [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" || "$OSTYPE" == "win32" ]]; then |
| 32 | + # 2. Windows (Git Bash / MSYS2) |
| 33 | + OS_TYPE="windows" |
| 34 | + echo -e "${GREEN}[+] Environment: Windows Detected.${NC}" |
| 35 | + # Windows users need to have Git and Python installed manually |
| 36 | + |
| 37 | +elif [[ "$OSTYPE" == "darwin"* ]]; then |
| 38 | + # 3. macOS |
| 39 | + OS_TYPE="macos" |
| 40 | + BIN_DIR="/usr/local/bin" |
| 41 | + echo -e "${GREEN}[+] Environment: macOS (Homebrew) Detected.${NC}" |
| 42 | + if command -v brew >/dev/null; then |
| 43 | + brew install git python |
| 44 | + else |
| 45 | + echo -e "${RED}[!] Homebrew not found. Please install Homebrew first.${NC}" |
| 46 | + fi |
| 47 | + |
27 | 48 | else |
28 | | - IS_TERMUX=false |
29 | | - #>> Smart Package Manager Detection for Linux/Mac |
| 49 | + # 4. Linux Distributions (Debian, Ubuntu, Kali, Parrot, Arch, Manjaro, BlackArch, Fedora, RedHat) |
| 50 | + OS_TYPE="linux" |
| 51 | + BIN_DIR="/usr/local/bin" |
| 52 | + |
30 | 53 | if command -v apt-get >/dev/null; then |
31 | 54 | echo -e "${GREEN}[+] Environment: Debian/Ubuntu/Kali/Parrot Detected.${NC}" |
32 | | - sudo apt-get update -y |
33 | | - sudo apt-get install git python3 python3-pip -y |
| 55 | + sudo apt-get update -y && sudo apt-get install git python3 python3-pip -y |
34 | 56 | elif command -v pacman >/dev/null; then |
35 | 57 | echo -e "${GREEN}[+] Environment: Arch/Manjaro/BlackArch Detected.${NC}" |
36 | 58 | sudo pacman -Sy --noconfirm git python python-pip |
37 | 59 | elif command -v dnf >/dev/null; then |
38 | 60 | echo -e "${GREEN}[+] Environment: Fedora/RedHat Detected.${NC}" |
39 | 61 | sudo dnf install -y git python3 python3-pip |
40 | | - elif command -v brew >/dev/null; then |
41 | | - echo -e "${GREEN}[+] Environment: macOS (Homebrew) Detected.${NC}" |
42 | | - brew install git python |
43 | 62 | else |
44 | | - echo -e "${YELLOW}[!] Package manager not recognized (Windows/GitBash?). Please install Git and Python manually.${NC}" |
| 63 | + echo -e "${RED}[!] Unknown Linux Distro. Attempting manual dependency check...${NC}" |
45 | 64 | fi |
46 | 65 | fi |
47 | 66 |
|
48 | | -# >>> Step 2: Install Python Requirements --- |
| 67 | +# --- STEP 2: Python Libraries Setup --- |
49 | 68 | echo -e "\n${YELLOW}[*] Installing Python Libraries (Rich UI)...${NC}" |
50 | | -# >>break-system-packages is used for newer Python versions (PEP 668) |
| 69 | +# Handling PEP 668 for newer Linux distros |
51 | 70 | pip install rich requests beautifulsoup4 --break-system-packages 2>/dev/null || pip install rich requests beautifulsoup4 |
52 | 71 |
|
53 | | -# >> Step 3: Clone or Update Repository --- |
| 72 | +# --- STEP 3: Clone or Update Tool-X --- |
54 | 73 | if [ -d "$TOOL_DIR" ]; then |
55 | | - echo -e "\n${YELLOW}[*] Updating Tool-X...${NC}" |
| 74 | + echo -e "\n${YELLOW}[*] Updating Tool-X Repository...${NC}" |
56 | 75 | cd "$TOOL_DIR" || exit |
57 | 76 | git pull |
58 | 77 | else |
59 | | - echo -e "\n${GREEN}[*] Cloning Tool-X...${NC}" |
| 78 | + echo -e "\n${GREEN}[*] Cloning Tool-X Repository...${NC}" |
60 | 79 | git clone "$REPO_URL" "$TOOL_DIR" |
61 | 80 | cd "$TOOL_DIR" || exit |
62 | 81 | fi |
63 | | - |
64 | 82 | chmod +x "$INSTALLER_SCRIPT" 2>/dev/null || true |
65 | 83 |
|
66 | | -# >> Step 4: Smart Alias Setup (Handles bash and zsh) --- |
67 | | -echo -e "\n${YELLOW}[*] Setting up shortcut command...${NC}" |
| 84 | +# --- STEP 4: Centralization (The Global Shortcut Logic) --- |
| 85 | +echo -e "\n${YELLOW}[*] Centralizing Commands for Global Access...${NC}" |
68 | 86 |
|
69 | | -if [ "$IS_TERMUX" = true ]; then |
70 | | - SHELL_RC="$PREFIX/etc/bash.bashrc" |
71 | | -else |
72 | | - # Check if user is using zsh (Default in Kali & Mac) |
73 | | - if [ "$(basename "$SHELL")" = "zsh" ]; then |
74 | | - SHELL_RC="$HOME/.zshrc" |
75 | | - else |
76 | | - SHELL_RC="$HOME/.bashrc" |
77 | | - fi |
78 | | -fi |
| 87 | +if [ "$OS_TYPE" == "windows" ]; then |
| 88 | + # Windows CMD/PowerShell Support (.bat files) |
| 89 | + for cmd in "${COMMANDS[@]}"; do |
| 90 | + echo "@echo off" > "$TOOL_DIR/$cmd.bat" |
| 91 | + echo "python \"$TOOL_DIR/$INSTALLER_SCRIPT\" %*" >> "$TOOL_DIR/$cmd.bat" |
| 92 | + done |
| 93 | + # Git Bash Support (Linux-like wrapper in ~/bin) |
| 94 | + mkdir -p "$HOME/bin" |
| 95 | + for cmd in "${COMMANDS[@]}"; do |
| 96 | + echo "python \"$TOOL_DIR/$INSTALLER_SCRIPT\" \"\$@\"" > "$HOME/bin/$cmd" |
| 97 | + chmod +x "$HOME/bin/$cmd" |
| 98 | + done |
| 99 | + echo -e "${GREEN}[+] Windows Batch and Bash wrappers created.${NC}" |
79 | 100 |
|
80 | | -if [ -f "$SHELL_RC" ]; then |
81 | | - ALIAS_CMD="alias $ALIAS_NAME='python $TOOL_DIR/$INSTALLER_SCRIPT'" |
82 | | - |
83 | | - if grep -q "alias $ALIAS_NAME=" "$SHELL_RC"; then |
84 | | - echo -e "${YELLOW}[!] Alias '$ALIAS_NAME' already exists in $SHELL_RC.${NC}" |
85 | | - else |
86 | | - echo -e "\n# Tool-X Alias" >> "$SHELL_RC" |
87 | | - echo "$ALIAS_CMD" >> "$SHELL_RC" |
88 | | - echo -e "${GREEN}[+] Shortcut '$ALIAS_NAME' added to $SHELL_RC${NC}" |
89 | | - fi |
90 | 101 | else |
91 | | - echo -e "${YELLOW}[!] Shell config file not found. Run tool manually: python $TOOL_DIR/$INSTALLER_SCRIPT${NC}" |
| 102 | + # Linux, macOS, and Termux (Global binary creation) |
| 103 | + SUDO_CMD="" |
| 104 | + [ "$OS_TYPE" != "termux" ] && SUDO_CMD="sudo" |
| 105 | + |
| 106 | + for cmd in "${COMMANDS[@]}"; do |
| 107 | + WRAPPER="#!/bin/bash\npython3 \"$TOOL_DIR/$INSTALLER_SCRIPT\" \"\$@\"" |
| 108 | + if [ "$OS_TYPE" == "termux" ]; then |
| 109 | + echo -e "$WRAPPER" > "$BIN_DIR/$cmd" |
| 110 | + chmod +x "$BIN_DIR/$cmd" |
| 111 | + else |
| 112 | + echo -e "$WRAPPER" | $SUDO_CMD tee "$BIN_DIR/$cmd" > /dev/null |
| 113 | + $SUDO_CMD chmod +x "$BIN_DIR/$cmd" |
| 114 | + fi |
| 115 | + done |
| 116 | + echo -e "${GREEN}[+] Centralized commands created in $BIN_DIR${NC}" |
92 | 117 | fi |
93 | 118 |
|
94 | 119 | echo -e "\n${GREEN}========================================${NC}" |
95 | | -echo -e "${GREEN} Setup Complete! Type: $ALIAS_NAME ${NC}" |
| 120 | +echo -e "${GREEN} Setup Complete! Type: toolx ${NC}" |
96 | 121 | echo -e "${GREEN}========================================${NC}" |
| 122 | +echo -e "${YELLOW}Supported Commands: ${NC}${COMMANDS[*]}" |
97 | 123 |
|
98 | | -if [ "$IS_TERMUX" = true ]; then |
99 | | - echo -e "${YELLOW}Please restart Termux to apply changes.${NC}" |
100 | | -else |
101 | | - echo -e "${YELLOW}Please restart your terminal or type: source $SHELL_RC${NC}" |
| 124 | +if [ "$OS_TYPE" == "windows" ]; then |
| 125 | + echo -e "\n${RED}[!] Windows Note:${NC} Add '$TOOL_DIR' to your System PATH to use commands in CMD." |
102 | 126 | fi |
0 commit comments