diff options
| author | Dave Tang <davetingpongtang@gmail.com> | 2026-06-23 09:44:07 +0900 |
|---|---|---|
| committer | Dave Tang <davetingpongtang@gmail.com> | 2026-06-23 09:44:07 +0900 |
| commit | e28c074e15dd093f3acd7a3cce10afae149003cd (patch) | |
| tree | 6bef6a7f865c3531082f94c9a6d35979c94999ea /scripts/setup.sh | |
Initial set of instructions for setting up Docsify
Diffstat (limited to 'scripts/setup.sh')
| -rwxr-xr-x | scripts/setup.sh | 193 |
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 |
