|
#!/bin/sh -e
|
|
#
|
|
# Copyright (C) 2019 Josh Habdas <jhabdas@protonmail.com>
|
|
#
|
|
# This file is part of After Dark.
|
|
#
|
|
# After Dark is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU Affero General Public License as published
|
|
# by the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# After Dark is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Affero General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
validate_hugo () {
|
|
# Exit with error if hugo is not installed
|
|
if ! hash hugo 2>/dev/null ; then
|
|
echo "Error: After Dark requires Hugo version 0.51 or greater" >&2; exit 1
|
|
fi
|
|
|
|
# Exit with error if not minimum required hugo version
|
|
re="v(0\d*\.([5-9][1-9]|[6-9])|[1-9]).*"
|
|
if ! hugo version | grep -qE "$re" ; then
|
|
echo "Error: After Dark requires Hugo version 0.51 or greater" >&2; exit 1
|
|
fi
|
|
}
|
|
|
|
create_site_dir () {
|
|
SITE_DIR="flying-toasters"
|
|
if [ "$1" != "" ] ; then
|
|
SITE_DIR="$1"
|
|
fi
|
|
|
|
SITE_DIR_ABS="$PWD/$SITE_DIR"
|
|
mkdir -p "$SITE_DIR"
|
|
}
|
|
|
|
create_site () {
|
|
echo "Creating a new Hugo site ..."
|
|
hugo new site "$SITE_DIR" 1>/dev/null
|
|
cd "$SITE_DIR" || exit 1
|
|
}
|
|
|
|
download_theme () {
|
|
echo "Downloading the latest version of After Dark ..."
|
|
LATEST_META=$(wget -qO - https://registry.npmjs.org/after-dark/latest)
|
|
vers=$(echo "$LATEST_META" | grep -oE "\"version\".*[^,]*," | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '" ')
|
|
mkdir -p themes/after-dark
|
|
wget -qO - https://registry.npmjs.org/after-dark/-/after-dark-"$vers".tgz | tar --strip-components=1 -xz -C themes/after-dark
|
|
echo "Version $vers downloaded to $SITE_DIR/themes/after-dark"
|
|
}
|
|
|
|
download_module () {
|
|
[ -z "$1" ] && { echo "Error: Attempt to download undefined module" >&2; exit 1; }
|
|
echo "Downloading $1 module for After Dark ..."
|
|
meta=$(wget -qO - https://registry.npmjs.org/"$1"/latest)
|
|
vers=$(echo "$meta" | grep -oE "\"version\".*[^,]*," | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '" ')
|
|
mkdir -p themes/"$1"
|
|
wget -qO - https://registry.npmjs.org/"$1"/-/"$1"-"$vers".tgz | tar --strip-components=1 -xz -C themes/"$1"
|
|
echo "Version $vers downloaded to $SITE_DIR/themes/$1"
|
|
}
|
|
|
|
configure_theme () {
|
|
echo "Configuring basic After Dark theme settings ..."
|
|
tee "config.toml" > /dev/null <<TOML
|
|
baseurl = "https://domain.example" # Controls base URL sitewide
|
|
languageCode = "en-US" # Controls site language
|
|
title = "After Dark" # Homepage title and page title suffix
|
|
paginate = 11 # Number of posts to show before paginating
|
|
copyright = "Copyright © Copyright Owner. Licensed under <a target=\"_blank\" rel=\"external noopener license\" href=\"https://creativecommons.org/licenses/by-nd/4.0/\">CC-BY-ND-4.0</a>." # Optional, remove to suppress copyright notices
|
|
|
|
# Controls default theme and theme components
|
|
theme = [
|
|
"fractal-forest", # OBSD
|
|
"after-dark" # AGPL-3.0-or-later
|
|
]
|
|
|
|
disableLiveReload = false # Optional, set true to disable live reload
|
|
enableRobotsTXT = true # Suggested, enable robots.txt file
|
|
sectionPagesMenu = "main" # Enable menu system for lazy bloggers
|
|
|
|
[markup.goldmark.renderer]
|
|
unsafe = true # Optional, allows HTML inside your CommonMark content
|
|
[markup.tableOfContents]
|
|
startLevel = 1 # Suggested, draws TOC using all heading levels
|
|
endLevel = 6 # Suggested, draws TOC using all heading levels
|
|
[markup.highlight]
|
|
noClasses = false # Suggested, used for custom syntax highlighting
|
|
|
|
[params]
|
|
description = "" # Suggested, controls default description meta
|
|
author = "" # Optional, controls author name display on posts
|
|
hide_author = false # Optional, set true to hide author name on posts
|
|
disable_csp = false # Optional, set true to disable content security policy
|
|
images = [
|
|
"https://source.unsplash.com/collection/983219/2000x1322"
|
|
] # Suggested, controls default Open Graph images
|
|
|
|
[params.layout.menu.main]
|
|
hidden = true # Optional, set false or remove to show section menu
|
|
|
|
[params.layout.footer]
|
|
hidden = false # Optional, set true to hide footer
|
|
|
|
[params.modules.fractal_forest]
|
|
enabled = true # Optional, set false to disable module
|
|
decoders = ["bpgdec8a"] # Optional, 8-bit javascript decoder with animation
|
|
TOML
|
|
}
|
|
|
|
update_archetypes () {
|
|
echo "Updating the default content archetype ..."
|
|
rm -f archetypes/default.md
|
|
cp themes/after-dark/archetypes/default.md archetypes
|
|
}
|
|
|
|
create_welcome_post () {
|
|
echo "Creating welcome post ..."
|
|
hugo new post/welcome.md 1>/dev/null
|
|
}
|
|
|
|
serve_site () {
|
|
echo "Starting site server ..."
|
|
hugo serve --buildDrafts --navigateToChanged --port 1313 1>/dev/null &
|
|
}
|
|
|
|
generate_help_docs () {
|
|
echo "Generating help documentation ..."
|
|
THEME_PATH=themes/after-dark
|
|
meta_path="$THEME_PATH"/data/npm
|
|
mkdir -p "$meta_path" && echo "$LATEST_META" | tr '\r\n' ' ' > "$meta_path"/latest.json
|
|
cd "$THEME_PATH"/docs && mkdir themes && ln -s ../.. "$THEME_PATH"
|
|
hugo new validate.md --kind validate 1>/dev/null
|
|
}
|
|
|
|
serve_help () {
|
|
echo "Starting help server ..."
|
|
hugo serve --disableLiveReload --port 1414 1>/dev/null &
|
|
}
|
|
|
|
echo "Welcome to the After Dark quick installer. Press CTRL-C at any time to abort."
|
|
|
|
validate_hugo
|
|
create_site_dir "$1"
|
|
create_site
|
|
download_theme
|
|
update_archetypes
|
|
download_module "fractal-forest"
|
|
configure_theme
|
|
create_welcome_post
|
|
serve_site
|
|
generate_help_docs
|
|
serve_help
|
|
|
|
YELLOW='\033[0;33m'
|
|
NC='\033[0m'
|
|
|
|
printf "${YELLOW}Installation successful!${NC}\n"
|
|
echo "Site created in $SITE_DIR_ABS"
|
|
echo "Site server started at http://localhost:1313/"
|
|
echo "To stop it run \"kill \$(ps aux | awk '/[h]ugo.*1313/ {print \$2}')\"."
|
|
echo "Help server started at http://localhost:1414/"
|
|
echo "To stop and restart it run \"./themes/after-dark/bin/help\"."
|
|
echo "Thank you for choosing After Dark."
|