diff --git a/README.md b/README.md index 4914280..0cc3e34 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,9 @@ ``` 3. 运行 `nvim`。首次启动会下载 `lazy.nvim` 和插件;需要时在 Neovim 中执行 `:Lazy sync`。 -4. 用 `:Mason` 检查或安装所需语言工具。Mason 下载的程序不会随本仓库迁移。 +4. 仓库中的 `mason-packages.txt` 记录了当前安装的 Mason 包名。在配置目录运行 `bash scripts/restore-mason.sh` 可按清单安装;也可以用 `:Mason` 手动检查。Mason 下载的程序不会随本仓库迁移。 + +清单只记录包名,不锁定版本。以后用 Mason 安装或卸载工具时,记得同步更新 `mason-packages.txt`。 `~/.local/share/nvim` 和 `~/.local/state/nvim` 中的插件、语言工具、缓存、日志和会话属于各设备的本地数据,不需要提交到此仓库。 diff --git a/mason-packages.txt b/mason-packages.txt new file mode 100644 index 0000000..06f8c82 --- /dev/null +++ b/mason-packages.txt @@ -0,0 +1,24 @@ +asm-lsp +clang-format +clangd +cmakelang +cmakelint +codelldb +csharpier +fantomas +fsautocomplete +glsl_analyzer +json-lsp +lua-language-server +neocmakelsp +netcoredbg +omnisharp +pyright +ruff +rust-analyzer +shfmt +sqlfluff +stylua +taplo +tinymist +yaml-language-server diff --git a/scripts/restore-mason.sh b/scripts/restore-mason.sh new file mode 100644 index 0000000..a720cbf --- /dev/null +++ b/scripts/restore-mason.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +set -euo pipefail + +config_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd) +packages=() + +while IFS= read -r package || [[ -n $package ]]; do + [[ -z $package || $package == \#* ]] && continue + if [[ ! $package =~ ^[a-zA-Z0-9_-]+$ ]]; then + printf 'Invalid Mason package name: %s\n' "$package" >&2 + exit 1 + fi + packages+=("$package") +done < "$config_dir/mason-packages.txt" + +if ((${#packages[@]} == 0)); then + printf 'No Mason packages listed.\n' >&2 + exit 1 +fi + +nvim --headless \ + -c 'lua require("lazy").load({ plugins = { "mason.nvim" } })' \ + -c "MasonInstall ${packages[*]}" \ + -c qall