summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorDave Tang <davetingpongtang@gmail.com>2026-06-23 09:44:07 +0900
committerDave Tang <davetingpongtang@gmail.com>2026-06-23 09:44:07 +0900
commite28c074e15dd093f3acd7a3cce10afae149003cd (patch)
tree6bef6a7f865c3531082f94c9a6d35979c94999ea /scripts
Initial set of instructions for setting up Docsify
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/setup.sh193
1 files changed, 193 insertions, 0 deletions
diff --git a/scripts/setup.sh b/scripts/setup.sh
new file mode 100755
index 0000000..d3d188e
--- /dev/null
+++ b/scripts/setup.sh
@@ -0,0 +1,193 @@
+#!/usr/bin/env bash
+# setup-docsify.sh — Bootstrap a self-hosted Docsify site on Apache 2.
+#
+# Run this script from your Apache document root:
+# cd /path/to/docroot
+# bash setup-docsify.sh [--with-prism]
+#
+# Options:
+# --with-prism Also download Prism and enable syntax highlighting in index.html
+
+set -euo pipefail
+
+# ── Configuration ───────────────────────────────────────────────────────────────
+# Use "4" for the latest 4.x release, or pin to a specific version e.g. "4.13.1"
+DOCSIFY_VERSION="4"
+PRISM=false
+
+# ── Argument parsing ────────────────────────────────────────────────────────────
+for arg in "$@"; do
+ case "$arg" in
+ --with-prism) PRISM=true ;;
+ *) echo "Unknown option: $arg" >&2; exit 1 ;;
+ esac
+done
+
+# ── Output helpers ──────────────────────────────────────────────────────────────
+GREEN='\033[0;32m'
+BLUE='\033[0;34m'
+RED='\033[0;31m'
+BOLD='\033[1m'
+NC='\033[0m'
+
+step() { echo -e "\n${BLUE}${BOLD}==> $1${NC}"; }
+ok() { echo -e " ${GREEN}✓${NC} $1"; }
+die() { echo -e " ${RED}✗${NC} $1" >&2; exit 1; }
+
+# ── Preflight checks ────────────────────────────────────────────────────────────
+step "Preflight checks"
+
+command -v curl &>/dev/null \
+ || die "curl is required but not found. Install curl and try again."
+ok "curl $(curl --version | head -1 | awk '{print $2}')"
+
+if [[ -f index.html ]]; then
+ echo -e " ${RED}!${NC} index.html already exists in: $(pwd)"
+ echo -e " This script will overwrite index.html and all boilerplate .md files."
+ read -r -p " Continue? [y/N] " reply
+ [[ "${reply,,}" == "y" ]] || { echo "Aborted."; exit 0; }
+fi
+
+echo -e " Working in: $(pwd)"
+
+# ── Step 1: Directories ─────────────────────────────────────────────────────────
+step "Step 1 — Creating directory structure"
+
+mkdir -p assets/js assets/css
+ok "assets/js/"
+ok "assets/css/"
+
+# ── Step 2: Download Docsify assets ─────────────────────────────────────────────
+step "Step 2 — Downloading Docsify assets"
+
+CDN="https://cdn.jsdelivr.net/npm"
+
+fetch() {
+ local url="$1" dest="$2"
+ curl -sL --fail "$url" -o "$dest" || die "Failed to download: $url"
+ ok "$dest"
+}
+
+fetch "${CDN}/docsify@${DOCSIFY_VERSION}/lib/docsify.min.js" assets/js/docsify.min.js
+fetch "${CDN}/docsify@${DOCSIFY_VERSION}/lib/plugins/search.min.js" assets/js/search.min.js
+fetch "${CDN}/docsify@${DOCSIFY_VERSION}/themes/vue.css" assets/css/vue.css
+
+if [[ "$PRISM" == true ]]; then
+ echo ""
+ echo " Downloading Prism syntax highlighting..."
+ fetch "${CDN}/prismjs@1/components/prism-core.min.js" assets/js/prism-core.min.js
+ fetch "${CDN}/prismjs@1/components/prism-bash.min.js" assets/js/prism-bash.min.js
+ fetch "${CDN}/prismjs@1/components/prism-yaml.min.js" assets/js/prism-yaml.min.js
+ fetch "${CDN}/prismjs@1/components/prism-javascript.min.js" assets/js/prism-javascript.min.js
+fi
+
+# ── Step 3: index.html ──────────────────────────────────────────────────────────
+step "Step 3 — Creating index.html"
+
+# index.html is assembled in parts so the Prism <script> block can be
+# included or omitted cleanly. The heredoc delimiters are single-quoted
+# ('HTML_HEAD') to prevent the shell from expanding $docsify.
+{
+ cat << 'HTML_HEAD'
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>My Docs</title>
+ <link rel="stylesheet" href="assets/css/vue.css">
+</head>
+<body>
+ <div id="app"></div>
+ <script>
+ window.$docsify = {
+ name: 'My Docs',
+ loadSidebar: true, // enables _sidebar.md
+ subMaxLevel: 2, // auto-generate H2 entries in sidebar
+ search: 'auto' // enables the search plugin
+ }
+ </script>
+ <script src="assets/js/docsify.min.js"></script>
+ <script src="assets/js/search.min.js"></script>
+HTML_HEAD
+
+ if [[ "$PRISM" == true ]]; then
+ cat << 'HTML_PRISM'
+
+ <!-- Prism syntax highlighting -->
+ <script src="assets/js/prism-core.min.js"></script>
+ <script src="assets/js/prism-bash.min.js"></script>
+ <script src="assets/js/prism-yaml.min.js"></script>
+ <script src="assets/js/prism-javascript.min.js"></script>
+HTML_PRISM
+ fi
+
+ cat << 'HTML_FOOT'
+</body>
+</html>
+HTML_FOOT
+} > index.html
+
+ok "index.html"
+
+# ── Step 4: Boilerplate content ─────────────────────────────────────────────────
+step "Step 4 — Creating boilerplate content"
+
+cat > README.md << 'EOF'
+# Welcome
+
+This is the home page of your documentation site.
+Edit `README.md` to replace this content.
+
+## Quick Links
+
+- [Getting Started](getting-started.md)
+EOF
+ok "README.md"
+
+cat > _sidebar.md << 'EOF'
+- [Home](/)
+- [Getting Started](getting-started.md)
+EOF
+ok "_sidebar.md"
+
+cat > getting-started.md << 'EOF'
+# Getting Started
+
+This is an example page. Replace this content with your own documentation.
+
+## Section One
+
+Write your content here using standard Markdown.
+
+## Section Two
+
+Docsify will automatically generate sidebar anchors for H2 headings
+when `subMaxLevel: 2` is set in `index.html`.
+EOF
+ok "getting-started.md"
+
+# ── Step 5: Permissions ─────────────────────────────────────────────────────────
+step "Step 5 — Setting file permissions"
+
+find . -type f -exec chmod 644 {} \;
+find . -type d -exec chmod 755 {} \;
+ok "Files: 644 | Directories: 755"
+
+# ── Verify ───────────────────────────────────────────────────────────────────────
+step "Verifying file layout"
+
+find . -not -path '*/\.*' | sort
+
+# ── Done ─────────────────────────────────────────────────────────────────────────
+echo ""
+echo -e "${GREEN}${BOLD}Setup complete.${NC}"
+echo -e "Open your site in a browser to verify."
+
+if [[ "$PRISM" == true ]]; then
+ echo ""
+ echo -e "Prism is enabled for: bash, yaml, javascript."
+ echo -e "To add more languages, download additional prism-*.min.js files"
+ echo -e "into assets/js/ and add their <script> tags to index.html."
+fi