#!/data/data/com.termux/files/usr/bin/bash # Termux Ultimate Remote Dev Environment Setup # Run: bash setup-termux.sh set -e echo "=== Termux Remote Dev Environment Setup ===" # Update & upgrade pkg update -y && pkg upgrade -y # Grant storage access termux-setup-storage # ── Core Utilities ── pkg install -y \ coreutils findutils grep sed gawk \ curl wget openssl-tool \ git git-lfs \ tar zip unzip p7zip \ man less tree ncurses-utils \ termux-api termux-tools # ── SSH Server & Client ── pkg install -y openssh mosh autossh sshpass # Generate host keys ssh-keygen -A 2>/dev/null || true # Generate user key pair (no passphrase for convenience) [ ! -f ~/.ssh/id_ed25519 ] && ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N "" echo "→ Start SSH server with: sshd -p 8022" echo "→ Connect from PC with: ssh -p 8022 $(whoami)@" # ── Remote Desktop (VNC + X11) ── pkg install -y x11-repo pkg install -y \ tigervnc xorg-server \ openbox xfce4 xfce4-terminal \ aterm dbus # VNC setup mkdir -p ~/.vnc echo "→ Set VNC password:" vncpasswd || true cat > ~/start-vnc.sh << 'VNCEOF' #!/bin/bash export DISPLAY=:1 vncserver :1 -geometry 1920x1080 -depth 24 -localhost no # Start XFCE desktop export PULSE_SERVER=127.0.0.1 dbus-launch --exit-with-session startxfce4 & echo "VNC running on port 5901" VNCEOF chmod +x ~/start-vnc.sh cat > ~/stop-vnc.sh << 'EOF' #!/bin/bash vncserver -kill :1 2>/dev/null echo "VNC stopped" EOF chmod +x ~/stop-vnc.sh # ── Code Server (VS Code in Browser) ── pkg install -y nodejs-lts yarn npm install -g code-server@latest || { echo "code-server npm install failed, trying binary..." curl -fsSL https://code-server.dev/install.sh | sh } mkdir -p ~/.config/code-server cat > ~/.config/code-server/config.yaml << 'CSEOF' bind-addr: 0.0.0.0:8080 auth: password password: changeme123 cert: false CSEOF echo "→ Start code-server with: code-server" echo "→ Access at http://:8080" # ── Editors & Dev Tools ── pkg install -y \ neovim nano micro \ tmux screen \ htop bottom \ jq yq fzf fd ripgrep bat exa \ direnv # Tmux config for remote work cat > ~/.tmux.conf << 'TMUXEOF' set -g mouse on set -g history-limit 50000 set -g default-terminal "tmux-256color" set -ga terminal-overrides ",*256col*:Tc" set -g base-index 1 setw -g pane-base-index 1 set -g status-style 'bg=#333333 fg=#ffffff' set -g status-right '#H | %Y-%m-%d %H:%M' set -g escape-time 10 # Better prefix unbind C-b set -g prefix C-a bind C-a send-prefix # Easy splits bind | split-window -h -c "#{pane_current_path}" bind - split-window -v -c "#{pane_current_path}" TMUXEOF # Neovim basic config mkdir -p ~/.config/nvim cat > ~/.config/nvim/init.lua << 'NVIMEOF' vim.opt.number = true vim.opt.relativenumber = true vim.opt.expandtab = true vim.opt.shiftwidth = 2 vim.opt.tabstop = 2 vim.opt.clipboard = "unnamedplus" vim.opt.termguicolors = true vim.opt.mouse = "a" vim.opt.signcolumn = "yes" NVIMEOF # ── Languages & Runtimes ── pkg install -y \ python python-pip \ rust \ golang \ clang make cmake \ ruby # Python essentials pip install --upgrade pip pip install ipython httpie # ── Networking & Tunneling ── pkg install -y \ nmap net-tools iproute2 dnsutils \ cloudflared # Cloudflare tunnel script (expose without port forwarding) cat > ~/start-tunnel.sh << 'TUNEOF' #!/bin/bash # Expose code-server publicly via Cloudflare tunnel echo "Starting Cloudflare tunnel for code-server on :8080..." cloudflared tunnel --url http://localhost:8080 TUNEOF chmod +x ~/start-tunnel.sh # ── File Sharing ── pkg install -y rsync # Simple HTTP file server alias cat >> ~/.bashrc << 'BASHEOF' # ── Aliases ── alias ll='exa -la --icons 2>/dev/null || ls -la' alias cat='bat --paging=never 2>/dev/null || cat' alias serve='python -m http.server 8888' alias myip='curl -s ifconfig.me && echo' alias sshstart='sshd -p 8022 && echo "SSH running on port 8022"' alias vncstart='~/start-vnc.sh' alias vncstop='~/stop-vnc.sh' alias codestart='code-server &' alias tunnel='~/start-tunnel.sh' # ── Environment ── export EDITOR=nvim export VISUAL=nvim export GPG_TTY=$(tty) BASHEOF # ── Git Config ── git config --global init.defaultBranch main git config --global pull.rebase true git config --global core.editor nvim # ── Summary ── echo "" echo "============================================" echo " ✅ Termux Remote Dev Environment Ready!" echo "============================================" echo "" echo " REMOTE ACCESS OPTIONS:" echo " ─────────────────────" echo " SSH: sshstart → connect on port 8022" echo " VS Code: codestart → browser at :8080" echo " VNC Desktop: vncstart → VNC client at :5901" echo " Tunnel: tunnel → public URL via Cloudflare" echo "" echo " QUICK COMMANDS:" echo " ─────────────" echo " tmux → terminal multiplexer" echo " nvim → editor" echo " serve → HTTP file server on :8888" echo " myip → show public IP" echo "" echo " ⚠️ Change code-server password in:" echo " ~/.config/code-server/config.yaml" echo "" echo " Run: source ~/.bashrc" echo "============================================"