diff --git a/start-nvim.sh b/start-nvim.sh new file mode 100755 index 0000000..c174fa3 --- /dev/null +++ b/start-nvim.sh @@ -0,0 +1,147 @@ +#!/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" </dev/null 2>&1; then + log "git not found — skipping $repo_url" + return 1 + fi + log "cloning $repo_url → $dest" + git clone --depth 1 "$repo_url" "$dest" >/dev/null 2>&1 +} + +ensure_vim_lsp() { + if [[ "${NUWIKI_DEV_NO_LSP:-0}" == "1" ]]; then + log "NUWIKI_DEV_NO_LSP=1 — skipping vim-lsp setup" + return + fi + mkdir -p "$DEV_DIR" + clone_if_missing https://github.com/prabirshrestha/vim-lsp.git "$VIM_LSP_DIR" || true + clone_if_missing https://github.com/prabirshrestha/async.vim.git "$ASYNC_DIR" || true +} + +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-vim.sh. Edit, run commands, +or jump to the linked pages to test the plugin. + +== Smoke test == + +- [[Notes]] +- [[diary/]] +- [ ] Toggle me with :VimwikiToggleListItem +- [ ] Inspect the LSP via :LspStatus + +== Commands to try == + +- :VimwikiTOC +- :VimwikiGenerateLinks +- :VimwikiCheckLinks +- :VimwikiMakeDiaryNote + +== Tags == + +:smoke-test:sandbox: +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 cross-page link follows. +EOF + fi +} + +write_vimrc() { + mkdir -p "$DEV_DIR" + cat > "$VIMRC" <