#!/bin/sh -

host="${TERMUX_HOST:-s6lite}"
termuxdir=/data/data/com.termux/files
bakdir="$HOME"/l/external/bak
sysbak=termux-sys-backup.tgz
homebak=termux-home-backup.tgz

# termux - convenience front-end for common Termux operations
# Steve Kinzler, steve@kinzler.com, Jan 25
# https://kinzler.com/me/home.html#android

tmpdir="$HOME"/l/download/tmp	# somewhere accessible by Android and Termux
mkdir -p $tmpdir

case "$1" in
-h|--help)	echo "usage: $0 op [ arg ... ]" 1>&2
		$0 -L | sed 's/^/	/'      1>&2;		    exit 1;;
-L)		sed -n 's/#FUNCXX\ //p' $0 |
			sed 's/^#//; s/|/,/g; s/)	/	/'; exit;;
-l)		$0 -L | sed 's/[ 	].*//' | tr , '\012';	    exit;;

version|info)	#FUNCXX output termux information
	       exec termux-info;;
test)		#FUNCXX test if running under Termux
	exec test -d /data/data/com.termux;;

config)		#FUNCXX reconfigure termux
	${VISUAL-${EDITOR-vi}} ~/.termux/termux.properties
	exec "$0" reload;;
reload)		#FUNCXX reload termux settings
	       exec termux-reload-settings;;

# 2025-01-01 Android viewers may not be able to access files in Termux space
open)		#FUNCXX open the given file or URL in Android
	shift; exec termux-open        "$@";;
send)		#FUNCXX open the given file or URL in Android for sending
	shift; exec termux-open --send "$@";;
# 2025-01-01 "*as html" may not work with some HTML viewers
openas)		#FUNCXX open stdin with the given suffix in Android
	tmp="$tmpdir/termux_openas-$$.$2"
#	trap "(sleep 600; rm -f '$tmp') &; exit" 0 1 2 13 15
	cat > "$tmp" && exec termux-open	"$tmp";;
sendas)		#FUNCXX open stdin with the given suffix in Android for sending
	tmp="$tmpdir/termux_sendas-$$.$2"
#	trap "(sleep 600; rm -f '$tmp') &; exit" 0 1 2 13 15
	cat > "$tmp" && exec termux-open --send "$tmp";;

nosleep|wake)	#FUNCXX prevent the CPU from sleeping
	       exec termux-wake-lock;;
sleep|nowake)	#FUNCXX allow the CPU to sleep (default)
	       exec termux-wake-unlock;;

up*)		#FUNCXX update repos and upgrade packages
	pkg update; exec pkg upgrade -y;;

# See https://wiki.termux.com/wiki/Backing_up_Termux
baksys)		#FUNCXX backup termux system
	mkdir -p "$bakdir"
	pkg clean
	case "$TMPDIR" in
	/data/.*/tmp)	rm -fr "$TMPDIR"/.??* "$TMPDIR"/*;;
	esac
	rm -fr "$tmpdir"/*
	# Note: can ignore any socket warnings
	exec tar -zcf "$bakdir/$sysbak"  -C "$termuxdir" ./usr;;
bakhome)		#FUNCXX backup termux homedir
	mkdir -p "$bakdir"
	exec tar -zcf "$bakdir/$homebak" -C "$termuxdir" ./home;;
restoresys)	#FUNCXX restore termux system
	# Note: can ignore any socket warnings
	exec tar -zxf "$bakdir/$sysbak"  -C "$termuxdir" \
		--recursive-unlink --preserve-permissions;;
restorehome)	#FUNCXX restore termux homedir
	exec tar -zxf "$bakdir/$homebak" -C "$termuxdir" \
		--recursive-unlink --preserve-permissions;;

maint)		#FUNCXX remotely run regular maintenance tasks
	dailyp "$host"
	(cd $HOME/.vim; make mirrorXH)
	ssh -x -n "$host" 'termux up; termux baksys; termux bakhome'
	exec "$0" mirrorbak;;
mirrorbak)	#FUNCXX remotely backup the termux backups
	exec csh -c "mirrorv '$host':l/external/bak/. /bak/'$host'/.";;

repair)		#FUNCXX how to fix loss of access to internal storage
	echo '1) Try toggling all file access perms for Termux in Android'
	echo '   settings, ending with all ON'
	echo '2) Try running `termux-setup-storage`';;

*)	exec "$0" -h;;
esac
