Gemini Gemtext blog engine and to HTML + Markdown converter
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

120 lines
3.0 KiB

#!/usr/bin/env bash
#
# The Gemtexter blog engine and static site generator
# by Paul Buetow 2021
declare -r ARG="$1"; shift
declare -r VERSION=1.1
declare -r VERSION_DESCR=prerelease
declare DATE=date
declare SED=sed
declare GREP=grep
which gdate &>/dev/null && DATE=gdate
which gsed &>/dev/null && SED=gsed
which ggrep &>/dev/null && GREP=ggrep
readonly DATE
readonly SED
readonly GREP
set -e
if [[ -n "$CONFIG_FILE_PATH" ]]; then
source "$CONFIG_FILE_PATH"
elif [[ -f ~/.config/gemtexter.conf ]]; then
source ~/.config/gemtexter.conf
else
source ./gemtexter.conf
fi
source ./lib/assert.source.sh
source ./lib/git.source.sh
source ./lib/atomfeed.source.sh
source ./lib/gemfeed.source.sh
source ./lib/generate.source.sh
source ./lib/html.source.sh
source ./lib/log.source.sh
source ./lib/md.source.sh
help () {
cat <<HELPHERE
$0's possible arguments:
--feed Generates Gemtext Atom feed and Gemfeed.
--generate Generates all known output formats (html, md, ...).
If USE_GIT=yes set, all files will be commited to git too.
If GIT_PUSH=yes is set, all content will be pushed to origin.
--test Only runs some shellcheck and unit tests.
--version Prints out the version of gemtexter
--help Prints this retty text.
Example:
USE_GIT=yes GIT_PUSH=yes $0 --generate
HELPHERE
}
setup () {
if [ ! -d "$CONTENT_BASE_DIR" ]; then
cat <<END
The content base directory, does not exist. Run the following to create it, it
also adds some sample Gemtext content:
mkdir -p $CONTENT_BASE_DIR/{meta,md,html}
git clone --branch content-gemtext https://codeberg.org/snonux/snonux.de $CONTENT_BASE_DIR/gemtext
rm -Rf $CONTENT_BASE_DIR/gemtext/.git
Once done, you are ready to edit the files in $CONTENT_BASE_DIR/gemtext. Every
time you want to generate other formats from Gemtext (e.g. HTML, Markdown), run
$0 --generate
again.
For a list of other available arguments run
$0 --help
Pro tip: You could make all the directories in $CONTENT_BASE_DIR separate git
repositories or branches. You can then run
USE_GIT=yes $0 --generate
so that all static files are commited to the content repositories too.
END
exit 1
fi
}
main () {
local -r arg="$1"; shift
setup
case $arg in
--test)
LOG_VERBOSE=yes
assert::shellcheck
html::test
md::test
;;
--feed)
git::cleanup
html::test
md::test
gemfeed::generate
atomfeed::generate
;;
--generate)
git::cleanup
html::test
md::test
gemfeed::generate &
atomfeed::generate &
wait
generate::fromgmi html md
;;
--version)
echo "This is gemtexter version $VERSION $VERSION_DESCR"
;;
--help|*)
help
;;
esac
return 0
}
main "$ARG"
exit $?