alfred-mobile/install-alfred-mobile.sh

309 lines
11 KiB
Bash
Raw Permalink Normal View History

#!/data/data/com.termux/files/usr/bin/bash
# ═══════════════════════════════════════════════════════════════════
# Alfred Linux Mobile Installer
# Version: 1.0.0 — April 6, 2026
# Compatible: Samsung Galaxy S26 Ultra, Pixel, any Android 12+
# Method: Termux + proot-distro (NO ROOT REQUIRED)
# ═══════════════════════════════════════════════════════════════════
#
# PREREQUISITES:
# 1. Install Termux from F-Droid (NOT Google Play — that version is outdated)
# https://f-droid.org/en/packages/com.termux/
# 2. Open Termux and run:
# curl -fsSL https://alfredlinux.com/downloads/install-alfred-mobile.sh | bash
#
# WHAT THIS DOES:
# - Installs proot-distro in Termux
# - Creates a Debian Bookworm environment (same base as Alfred Linux desktop)
# - Installs Alfred IDE (code-server) accessible via browser
# - Installs Alfred Voice (Kokoro TTS)
# - Installs Alfred Search (Meilisearch)
# - Creates 'alfred' launcher command
#
# STORAGE: ~4 GB after full install
# ═══════════════════════════════════════════════════════════════════
set -e
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
AMBER='\033[0;33m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m'
banner() {
echo ""
echo -e "${AMBER}${BOLD}"
echo " ╔═══════════════════════════════════════╗"
echo " ║ ALFRED LINUX MOBILE ║"
echo " ║ The AI-Native OS — Everywhere ║"
echo " ╚═══════════════════════════════════════╝"
echo -e "${NC}"
echo -e " ${CYAN}Version 1.0.0 · April 2026 · Debian Bookworm${NC}"
echo ""
}
step() {
echo -e "\n${GREEN}${BOLD}[$(date +%H:%M:%S)] ▸ $1${NC}"
}
warn() {
echo -e "${AMBER}$1${NC}"
}
fail() {
echo -e "${RED}${BOLD}$1${NC}"
exit 1
}
ok() {
echo -e "${GREEN}$1${NC}"
}
# ── Preflight ──────────────────────────────────────────────────────
banner
# Verify we're in Termux
if [[ ! -d /data/data/com.termux ]]; then
fail "This script must be run inside Termux on Android."
fi
step "Checking Android environment..."
ARCH=$(uname -m)
echo " Architecture: $ARCH"
echo " Android API: $(getprop ro.build.version.sdk 2>/dev/null || echo 'unknown')"
echo " Device: $(getprop ro.product.model 2>/dev/null || echo 'unknown')"
echo " Storage free: $(df -h /data | tail -1 | awk '{print $4}')"
if [[ "$ARCH" != "aarch64" && "$ARCH" != "arm64" && "$ARCH" != "x86_64" ]]; then
fail "Unsupported architecture: $ARCH. Need arm64 or x86_64."
fi
# Check available storage (need at least 4GB)
FREE_MB=$(df -m /data | tail -1 | awk '{print $4}')
if [[ "$FREE_MB" -lt 3000 ]]; then
warn "Low storage: ${FREE_MB}MB free. Alfred needs ~4GB. Continuing anyway..."
fi
# ── Phase 1: Update Termux ────────────────────────────────────────
step "Updating Termux packages..."
pkg update -y 2>&1 | tail -3
pkg upgrade -y 2>&1 | tail -3
ok "Termux updated"
# ── Phase 2: Install proot-distro ─────────────────────────────────
step "Installing proot-distro..."
pkg install -y proot-distro pulseaudio 2>&1 | tail -3
ok "proot-distro installed"
# ── Phase 3: Install Debian Bookworm ──────────────────────────────
step "Installing Debian Bookworm (Alfred Linux base)..."
if proot-distro list | grep -q "debian.*installed"; then
warn "Debian already installed — using existing installation"
else
proot-distro install debian 2>&1 | tail -5
fi
ok "Debian Bookworm ready"
# ── Phase 4: Alfred Layer Installation ────────────────────────────
step "Installing Alfred Linux components inside Debian..."
proot-distro login debian -- bash -c '
set -e
echo "[Alfred] Updating base system..."
apt-get update -qq
apt-get upgrade -y -qq
echo "[Alfred] Installing core packages..."
apt-get install -y -qq \
curl wget git sudo nano htop neofetch \
python3 python3-pip python3-venv \
nodejs npm \
build-essential \
ca-certificates \
locales \
2>&1 | tail -5
# Set locale
sed -i "s/# en_US.UTF-8/en_US.UTF-8/" /etc/locale.gen
locale-gen en_US.UTF-8 2>/dev/null || true
# ── Alfred IDE (code-server) ──
echo "[Alfred] Installing Alfred IDE (code-server)..."
if ! command -v code-server &>/dev/null; then
curl -fsSL https://code-server.dev/install.sh | sh -s -- --method=standalone 2>&1 | tail -3
fi
echo "[Alfred IDE] Installed: $(code-server --version 2>/dev/null | head -1)"
# Configure code-server for mobile
mkdir -p ~/.config/code-server
cat > ~/.config/code-server/config.yaml << IDECONF
bind-addr: 0.0.0.0:8080
auth: none
cert: false
app-name: Alfred IDE Mobile
IDECONF
# ── Alfred Search (Meilisearch) ──
echo "[Alfred] Installing Alfred Search (Meilisearch)..."
if ! command -v meilisearch &>/dev/null; then
curl -fsSL https://install.meilisearch.com | sh 2>&1 | tail -3
mv ./meilisearch /usr/local/bin/ 2>/dev/null || true
fi
# ── Alfred Voice (Kokoro TTS) ──
echo "[Alfred] Installing Alfred Voice (Kokoro TTS)..."
python3 -m venv /opt/alfred-voice 2>/dev/null || true
/opt/alfred-voice/bin/pip install --quiet kokoro 2>&1 | tail -3 || echo "[Alfred Voice] Note: Full voice engine requires more resources. Basic install done."
# ── Alfred Branding ──
echo "[Alfred] Applying Alfred Linux branding..."
mkdir -p /etc/alfred
cat > /etc/alfred/release << RELEASE
ALFRED_LINUX_VERSION="2.0-mobile"
ALFRED_LINUX_CODENAME="Sovereign"
ALFRED_LINUX_BUILD="rc3-mobile"
ALFRED_LINUX_DATE="2026-04-06"
ALFRED_LINUX_BASE="Debian Bookworm"
ALFRED_LINUX_EDITION="Mobile"
RELEASE
# Custom MOTD
cat > /etc/motd << MOTD
╔═══════════════════════════════════════╗
║ ALFRED LINUX 2.0 — MOBILE ║
║ The AI-Native OS — In Your Pocket ║
╚═══════════════════════════════════════╝
Alfred IDE: code-server (port 8080)
Alfred Search: meilisearch (port 7700)
Alfred Voice: kokoro-tts
Commands:
alfred-ide → Launch Alfred IDE in browser
alfred-search → Start Meilisearch
alfred-info → System info
MOTD
# ── Custom neofetch config ──
mkdir -p ~/.config/neofetch
cat > ~/.config/neofetch/config.conf << NEOFETCH
print_info() {
info title
info underline
info "OS" distro
info "Host" model
info "Kernel" kernel
info "Shell" shell
info "Packages" packages
info "Memory" memory
info "Disk" disk
info "Alfred" local_ip
}
NEOFETCH
echo ""
echo "[Alfred] ✓ All components installed successfully!"
echo ""
'
ok "Alfred Linux components installed in Debian"
# ── Phase 5: Create Launcher Commands ─────────────────────────────
step "Creating launcher commands..."
# Main alfred command
cat > "$PREFIX/bin/alfred" << 'LAUNCHER'
#!/data/data/com.termux/files/usr/bin/bash
echo ""
echo " ╔═══════════════════════════════════════╗"
echo " ║ ALFRED LINUX 2.0 — MOBILE ║"
echo " ╚═══════════════════════════════════════╝"
echo ""
proot-distro login debian
LAUNCHER
chmod +x "$PREFIX/bin/alfred"
# Alfred IDE launcher
cat > "$PREFIX/bin/alfred-ide" << 'IDELAUNCHER'
#!/data/data/com.termux/files/usr/bin/bash
echo ""
echo " Starting Alfred IDE on port 8080..."
echo " Open your browser to: http://localhost:8080"
echo ""
proot-distro login debian -- bash -c 'code-server --bind-addr 0.0.0.0:8080 2>&1' &
sleep 2
am start -a android.intent.action.VIEW -d "http://localhost:8080" 2>/dev/null || echo " Open http://localhost:8080 in your browser"
echo ""
echo " Alfred IDE is running. Press Ctrl+C to stop."
wait
IDELAUNCHER
chmod +x "$PREFIX/bin/alfred-ide"
# Alfred info command
cat > "$PREFIX/bin/alfred-info" << 'INFOLAUNCHER'
#!/data/data/com.termux/files/usr/bin/bash
proot-distro login debian -- bash -c '
cat /etc/alfred/release 2>/dev/null
echo ""
echo "Device: $(uname -m)"
echo "Kernel: $(uname -r)"
echo "Debian: $(cat /etc/debian_version)"
echo ""
echo "Installed Components:"
command -v code-server &>/dev/null && echo " ✓ Alfred IDE (code-server $(code-server --version 2>/dev/null | head -1))"
command -v meilisearch &>/dev/null && echo " ✓ Alfred Search (Meilisearch)"
[[ -d /opt/alfred-voice ]] && echo " ✓ Alfred Voice (Kokoro TTS)"
echo ""
'
INFOLAUNCHER
chmod +x "$PREFIX/bin/alfred-info"
ok "Launcher commands created"
# ── Phase 6: Termux Shortcuts (optional) ──────────────────────────
step "Creating Termux widget shortcuts..."
mkdir -p ~/.shortcuts
echo '#!/data/data/com.termux/files/usr/bin/bash
alfred-ide' > ~/.shortcuts/Alfred-IDE
chmod +x ~/.shortcuts/Alfred-IDE
echo '#!/data/data/com.termux/files/usr/bin/bash
alfred' > ~/.shortcuts/Alfred-Shell
chmod +x ~/.shortcuts/Alfred-Shell
ok "Shortcuts created (install Termux:Widget for home screen access)"
# ── Done ──────────────────────────────────────────────────────────
echo ""
echo -e "${GREEN}${BOLD}"
echo " ╔═══════════════════════════════════════╗"
echo " ║ INSTALLATION COMPLETE! ✓ ║"
echo " ╚═══════════════════════════════════════╝"
echo -e "${NC}"
echo -e " ${BOLD}Quick Start:${NC}"
echo ""
echo -e " ${CYAN}alfred${NC} → Enter Alfred Linux shell"
echo -e " ${CYAN}alfred-ide${NC} → Launch Alfred IDE in browser"
echo -e " ${CYAN}alfred-info${NC} → Show system info"
echo ""
echo -e " ${BOLD}Samsung DeX:${NC}"
echo -e " Connect to monitor/TV, launch alfred-ide,"
echo -e " and you have a full desktop IDE experience."
echo ""
echo -e " ${BOLD}What you have:${NC}"
echo -e " • Full Debian Bookworm Linux environment"
echo -e " • Alfred IDE (VS Code in browser)"
echo -e " • Alfred Search (Meilisearch)"
echo -e " • Alfred Voice (Kokoro TTS)"
echo -e " • Python 3, Node.js, Git, and build tools"
echo ""
echo -e " ${AMBER}Alfred Linux 2.0 Mobile — Your phone is now a sovereign computer.${NC}"
echo ""