diff --git a/install-alfred-mobile.sh b/install-alfred-mobile.sh new file mode 100644 index 0000000..00b9d85 --- /dev/null +++ b/install-alfred-mobile.sh @@ -0,0 +1,308 @@ +#!/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 ""