appdwarf/appdwarf

98 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
set -eo pipefail
IFS=$'\n\t'
VER=2
HERE=$(dirname $(readlink -f "${0}"))
source $HERE/headers
usage(){
echo "Usage: $(basename "$0") [option] [FILE/FOLDER/URL]"
echo " Compress a given AppDir (default)"
echo " -a, --appimage Convert a given AppImage to appdwarf"
echo " -b, --lookback Change dwarfs block lookback amount"
echo " -f, --folder Make image mount to a specified folder instead of running AppRun"
echo " -s, --separate Use old, separated header format"
echo " -u, --url Fetch AppImage from URL and convert to appdwarf"
echo " -h, --help Print this help text"
echo " -v, --version Print the appdwarf version"
}
dwarf() {
mkdwarfs -i "$1" -o "$(realpath "$1").sh" -B$back "${@:2}" --header $HEAD
chmod +x "$(realpath "$1").sh"
}
appimage() {
if [[ -f "$1" ]]
then
chmod +x "$1"
rm -rf squashfs-root
./"$1" --appimage-extract || exit 1
dwarf squashfs-root "${@:2}"
rm -rf squashfs-root
mv squashfs-root.sh "$(basename "$1" .AppImage)".sh
else
echo "$1" is not a valid file
exit 1
fi
}
################################################################
header
back=5
while true
do
case "$1" in
--help | -h)
usage
exit 0
;;
--version | -v)
tput setaf 2
echo appdwarf v"$VER"
echo Maintained by phantop.
exit 0
;;
--folder | -f)
header_folder $(realpath $2)
shift 2
;;
--lookback | -b)
back=$2
shift 2
;;
--separate | -s)
header_separate
shift
;;
--appimage | -a)
appimage "${@:2}"
exit 0
;;
--url | -u)
file=$(basename "$2")
wget "$2" -O "$file" || exit 1
appimage "$file" "${@:3}"
rm "$file"
exit 0
;;
--)
shift; break;;
*)
break;;
esac
done
if test $# -eq 0; then
usage
exit 0
else
dwarf "$@"
exit 0
fi