From e28c074e15dd093f3acd7a3cce10afae149003cd Mon Sep 17 00:00:00 2001 From: Dave Tang Date: Tue, 23 Jun 2026 09:44:07 +0900 Subject: Initial set of instructions for setting up Docsify --- scripts/setup.sh | 193 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100755 scripts/setup.sh (limited to 'scripts/setup.sh') 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 + + +HTML_HEAD + + if [[ "$PRISM" == true ]]; then + cat << 'HTML_PRISM' + + + + + + +HTML_PRISM + fi + + cat << 'HTML_FOOT' + + +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