48 lines · 2.0 KB · JavaScript
RawDownload
#!/usr/bin/env node// Stage vim's runtime tree into the gitignored `share/vim/vim92/` so// `agentos-toolchain build` ships it in dist/package and the manifest's// `provides.files` can overlay it read-only at /usr/local/share/vim/vim92// (VIMRUNTIME points straight at it, bypassing vim's version-dir search, so a// 9.0/9.1 host runtime sources cleanly under the 9.2 binary).//// Sources, in order: $VIM_RUNTIME_SRC, then the host vim runtimes. Bulky,// non-load-bearing subtrees (docs, tutor, spell dictionaries, translations)// are trimmed — the runtime here exists so `vim` starts clean (defaults.vim,// syntax, ftplugin, indent, autoload, colors), not to ship a manual.// Missing source → skip with a notice (the package stays a valid placeholder,// same contract as a missing command binary).import { cpSync, existsSync, mkdirSync, rmSync } from "node:fs";import { dirname, join, resolve } from "node:path";import { fileURLToPath } from "node:url"; const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");const target = join(packageRoot, "share", "vim", "vim92"); const TRIM = new Set(["doc", "tutor", "spell", "lang", "print", "keymap"]); const candidates = [	process.env.VIM_RUNTIME_SRC,	"/usr/share/vim/vim92",	"/usr/share/vim/vim91",	"/usr/share/vim/vim90",	"/usr/local/share/vim/vim92",].filter(Boolean); const source = candidates.find((dir) => existsSync(join(dir, "defaults.vim")));if (!source) {	console.log(		"stage-runtime: no vim runtime found (set VIM_RUNTIME_SRC or install vim) — skipping; package ships without the runtime tree",	);	process.exit(0);} rmSync(join(packageRoot, "share"), { recursive: true, force: true });mkdirSync(target, { recursive: true });cpSync(source, target, {	recursive: true,	filter: (src) => {		const rel = src.slice(source.length).split("/").filter(Boolean);		return rel.length === 0 || !TRIM.has(rel[0]);	},});console.log(`stage-runtime: ${source} -> share/vim/vim92 (trimmed: ${[...TRIM].join(", ")})`);