appdwarf/appdwarf

82 lines
1.6 KiB
Plaintext
Raw Normal View History

#!/bin/bash
set -eo pipefail
IFS=$'\n\t'
version=1.2
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 " -u, --url Fetch AppImage from URL and convert to appdwarf"
}
dwarf() {
2021-10-28 17:20:08 +00:00
mkdwarfs -i "$1" -o "$(basename "$1").sh" -B5 "${@:2}" --header <(cat << 'EOF'
#!/bin/sh
2021-08-10 01:30:43 +00:00
DIR="$(mktemp -td dwarf_$(basename "$0")XXXXX)"
ARG="-o offset=auto -o tidy_strategy=swap -o workers=4"
dwarfs $ARG "$0" "$DIR" 2>/dev/null
export APPDWARF_CMD=$(basename "$0")
"$DIR/AppRun" "$@"
fusermount -u "$DIR"
rmdir "$DIR"
exit
EOF
)
2021-07-10 03:40:58 +00:00
chmod +x "$(basename "$1").sh"
}
appimage() {
if [[ -f "$1" ]]
then
chmod +x "$1"
rm -rf squashfs-root
./"$1" --appimage-extract || exit 1
2021-07-10 03:40:58 +00:00
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
}
while true
do
case "$1" in
--help | -h)
usage
exit 0
;;
--version)
echo "$version"
exit 0
;;
--appimage | -a)
2021-07-10 03:40:58 +00:00
appimage "${@:2}"
exit 0
;;
--url | -u)
file=$(basename "$2")
wget "$2" -O "$file" || exit 1
2021-07-10 03:40:58 +00:00
appimage "$file" "${@:3}"
rm "$file"
exit 0
;;
--)
shift; break;;
*)
break;;
esac
done
if test $# -eq 0; then
usage
exit 0
else
2021-07-10 03:40:58 +00:00
dwarf "$@"
exit 0
fi