#!/usr/bin/env bash # # start-nvim.sh — launch Neovim with a minimal config that loads nuwiki. # # Builds the language server (release mode), symlinks it into `bin/` so # the plugin's default install path resolves, then spawns Neovim with # `--clean` and a generated `init.lua` that: # * adds this repo to `runtimepath` # * configures wiki_root to a scratch directory under # $XDG_CACHE_HOME/nuwiki-dev/wiki # * calls `require('nuwiki').setup({...})` # # Usage: ./start-nvim.sh [extra args...] # ./start-nvim.sh # open the scratch wiki's index # ./start-nvim.sh path/to/note.wiki # open a specific file # NUWIKI_DEV_WIKI=/tmp/foo ./start-nvim.sh # # Tested with Neovim 0.10+. State (cache/data/config) lives under # $XDG_CACHE_HOME/nuwiki-dev/ so your real Neovim install stays # untouched. set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DEV_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/nuwiki-dev" WIKI_DIR="${NUWIKI_DEV_WIKI:-$DEV_DIR/wiki}" INIT_FILE="$DEV_DIR/init.lua" STATE_DIR="$DEV_DIR/nvim-state" DATA_DIR="$DEV_DIR/nvim-data" CONFIG_DIR="$DEV_DIR/nvim-config" log() { printf '\033[1;34m[nuwiki-dev]\033[0m %s\n' "$*"; } ensure_binary() { local bin="$REPO_ROOT/bin/nuwiki-ls" local built="$REPO_ROOT/target/release/nuwiki-ls" if [[ -x "$bin" ]]; then return fi log "building nuwiki-ls (release)…" cargo build --release -p nuwiki-ls --manifest-path "$REPO_ROOT/Cargo.toml" mkdir -p "$REPO_ROOT/bin" ln -sf "$built" "$bin" log "binary ready: $bin" } seed_wiki() { mkdir -p "$WIKI_DIR" "$WIKI_DIR/diary" if [[ ! -f "$WIKI_DIR/index.wiki" ]]; then cat > "$WIKI_DIR/index.wiki" <<'EOF' = Welcome to nuwiki = This is a scratch wiki created by start-nvim.sh. Edit, run commands, or jump to the linked pages to test the plugin. == Smoke test == - [[Notes]] - [[diary/]] - [ ] Toggle me with - [ ] Or with :VimwikiToggleListItem == Commands to try == - :VimwikiTOC - :VimwikiGenerateLinks - :VimwikiCheckLinks - :VimwikiMakeDiaryNote - :Vimwiki2HTMLBrowse == Tags == :smoke-test:sandbox: == Links == * [[Notes]] * [[Notes#section-one]] * https://example.com EOF fi if [[ ! -f "$WIKI_DIR/Notes.wiki" ]]; then cat > "$WIKI_DIR/Notes.wiki" <<'EOF' = Notes = A second page so [[index]] has somewhere to point. == Section one == Anchor target for :checkhealth-style smoke tests. EOF fi } write_init() { mkdir -p "$DEV_DIR" cat > "$INIT_FILE" <