diff --git a/lua/glaze/health.lua b/lua/glaze/health.lua new file mode 100644 index 0000000..8258056 --- /dev/null +++ b/lua/glaze/health.lua @@ -0,0 +1,87 @@ +---@brief [[ +--- glaze.nvim health check +--- Run with :checkhealth glaze +---@brief ]] + +local M = {} + +function M.check() + vim.health.start("glaze.nvim") + + -- Check Neovim version + if vim.fn.has("nvim-0.9") == 1 then + vim.health.ok("Neovim >= 0.9") + else + vim.health.error("Neovim >= 0.9 required", { "Upgrade Neovim to 0.9 or later" }) + end + + -- Check Go (required) + if vim.fn.executable("go") == 1 then + local go_version = vim.fn.system("go version"):gsub("%s+$", "") + vim.health.ok(go_version) + elseif vim.fn.executable("goenv") == 1 then + local go_version = vim.fn.system("goenv exec go version 2>/dev/null"):gsub("%s+$", "") + if go_version ~= "" and not go_version:match("not found") then + vim.health.ok(go_version .. " (via goenv)") + else + vim.health.error("goenv found but no Go version installed", { + "Run: goenv install ", + "Or install Go directly: https://go.dev/dl/", + }) + end + else + vim.health.error("Go not found", { + "Go is required for installing and updating binaries", + "Install from: https://go.dev/dl/", + }) + end + + -- Check GOBIN / GOPATH + local gobin = vim.env.GOBIN + if not gobin or gobin == "" then + local gopath = vim.env.GOPATH + if gopath and gopath ~= "" then + gobin = gopath .. "/bin" + else + gobin = vim.env.HOME .. "/go/bin" + end + end + + if vim.fn.isdirectory(gobin) == 1 then + -- Check if GOBIN is in PATH + local path = vim.env.PATH or "" + if path:find(gobin, 1, true) then + vim.health.ok("GOBIN in PATH: " .. gobin) + else + vim.health.warn("GOBIN exists but is not in PATH: " .. gobin, { + "Add to PATH: export PATH=\"" .. gobin .. ":$PATH\"", + "Binaries installed by Glaze may not be found without this", + }) + end + else + vim.health.info("GOBIN directory does not exist yet: " .. gobin) + end + + -- Check registered binaries + local glaze = require("glaze") + local binaries = glaze.binaries() + local count = vim.tbl_count(binaries) + + if count == 0 then + vim.health.info("No binaries registered (plugins will register on setup)") + else + vim.health.ok(count .. " binary(ies) registered") + for name, binary in pairs(binaries) do + if glaze.is_installed(name) then + vim.health.ok(" " .. name .. " — installed" .. (binary.plugin and (" (" .. binary.plugin .. ")") or "")) + else + vim.health.warn(" " .. name .. " — missing" .. (binary.plugin and (" (" .. binary.plugin .. ")") or ""), { + "Run :GlazeInstall " .. name, + "Or: go install " .. binary.url .. "@latest", + }) + end + end + end +end + +return M