From 01f82f6189fda64ccd5af36b8b2db9c55a055fe7 Mon Sep 17 00:00:00 2001 From: Ethan Holz Date: Sat, 9 Aug 2025 19:01:17 -0600 Subject: [PATCH] feat: update LSP config with snippets, yamlls, and biome --- nvim/.config/nvim/lazy-lock.json | 5 ++- nvim/.config/nvim/lsp/biome-custom.lua | 46 +++++++++++++++++++++++++ nvim/.config/nvim/lsp/yamlls.lua | 14 ++++++++ nvim/.config/nvim/lua/lsp.lua | 6 ++++ nvim/.config/nvim/lua/plugins/init.lua | 1 - nvim/.config/nvim/snippets/package.json | 8 +++++ nvim/.config/nvim/snippets/yaml.json | 21 +++++++++++ 7 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 nvim/.config/nvim/lsp/biome-custom.lua create mode 100644 nvim/.config/nvim/lsp/yamlls.lua create mode 100644 nvim/.config/nvim/snippets/package.json create mode 100644 nvim/.config/nvim/snippets/yaml.json diff --git a/nvim/.config/nvim/lazy-lock.json b/nvim/.config/nvim/lazy-lock.json index aec7899..0a76b3b 100644 --- a/nvim/.config/nvim/lazy-lock.json +++ b/nvim/.config/nvim/lazy-lock.json @@ -3,8 +3,7 @@ "conform.nvim": { "branch": "master", "commit": "973f3cb73887d510321653044791d7937c7ec0fa" }, "crates.nvim": { "branch": "main", "commit": "a49df0f70171adc77704eac70dd2c0d179065933" }, "freeze.nvim": { "branch": "main", "commit": "6460f282b01d4dafd69fbd8d4a38da56572227bc" }, - "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, - "gitsigns.nvim": { "branch": "main", "commit": "736f51d2bb684c06f39a2032f064d7244f549981" }, + "gitsigns.nvim": { "branch": "main", "commit": "c7d37ca22b461f64e26f8f6701b2586128ed0bef" }, "harpoon": { "branch": "master", "commit": "1bc17e3e42ea3c46b33c0bbad6a880792692a1b3" }, "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, "lsp-trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" }, @@ -15,7 +14,7 @@ "nightfox.nvim": { "branch": "main", "commit": "ba47d4b4c5ec308718641ba7402c143836f35aa9" }, "nvim-coverage": { "branch": "main", "commit": "a939e425e363319d952a6c35fb3f38b34041ded2" }, "nvim-lastplace": { "branch": "main", "commit": "0bb6103c506315044872e0f84b1f736c4172bb20" }, - "nvim-lspconfig": { "branch": "master", "commit": "9141be4c1332afc83bdf1b0278dbb030f75ff8e3" }, + "nvim-lspconfig": { "branch": "master", "commit": "d6dc63670d3dc5204b1e874af4cbf340cb5d9d18" }, "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, "nvim-treesitter-context": { "branch": "master", "commit": "dca8726fea2c14e1ce6adbaa76a04816fbfaff61" }, "oil.nvim": { "branch": "master", "commit": "bbad9a76b2617ce1221d49619e4e4b659b3c61fc" }, diff --git a/nvim/.config/nvim/lsp/biome-custom.lua b/nvim/.config/nvim/lsp/biome-custom.lua new file mode 100644 index 0000000..0b974d6 --- /dev/null +++ b/nvim/.config/nvim/lsp/biome-custom.lua @@ -0,0 +1,46 @@ +---@brief +--- https://biomejs.dev +--- +--- Toolchain of the web. [Successor of Rome](https://biomejs.dev/blog/annoucing-biome). +--- +--- ```sh +--- npm install [-g] @biomejs/biome +--- ``` + +return { + cmd = function(dispatchers, config) + local util = require("lspconfig.util") + local cwd = vim.fn.getcwd() + local root_files = { "biome.json", "biome.jsonc" } + root_files = util.insert_package_json(root_files, "biome", cwd) + local root_dir = vim.fs.dirname(vim.fs.find(root_files, { path = cwd, upward = true })[1]) + local local_cmd = root_dir .. "/node_modules/.bin/biome" + return vim.lsp.rpc.start({ local_cmd, "lsp-proxy" }, dispatchers) + end, + filetypes = { + "astro", + "css", + "graphql", + "html", + "javascript", + "javascriptreact", + "json", + "jsonc", + "svelte", + "typescript", + "typescript.tsx", + "typescriptreact", + "vue", + }, + workspace_required = true, + root_dir = function(_, on_dir) + local util = require("lspconfig.util") + -- To support monorepos, biome recommends starting the search for the root from cwd + -- https://biomejs.dev/guides/big-projects/#use-multiple-configuration-files + local cwd = vim.fn.getcwd() + local root_files = { "biome.json", "biome.jsonc" } + root_files = util.insert_package_json(root_files, "biome", cwd) + local root_dir = vim.fs.dirname(vim.fs.find(root_files, { path = cwd, upward = true })[1]) + on_dir(root_dir) + end, +} diff --git a/nvim/.config/nvim/lsp/yamlls.lua b/nvim/.config/nvim/lsp/yamlls.lua new file mode 100644 index 0000000..fda4e3e --- /dev/null +++ b/nvim/.config/nvim/lsp/yamlls.lua @@ -0,0 +1,14 @@ +return { + settings = { + redhat = { + telemetry = { + enabled = false, + }, + }, + yaml = { + schemas = { + ["https://directory.omsf.io/schema.json"] = { "/software/*", "/workflows/*" }, + }, + }, + }, +} diff --git a/nvim/.config/nvim/lua/lsp.lua b/nvim/.config/nvim/lua/lsp.lua index 564866a..284ee3d 100644 --- a/nvim/.config/nvim/lua/lsp.lua +++ b/nvim/.config/nvim/lua/lsp.lua @@ -43,6 +43,10 @@ local servers = { "gh_actions_ls", exec = "gh-actions-language-server", }, + { + "yamlls", + exec = "yaml-language-server", + }, } -- Only install servers that exist + use custom options @@ -75,6 +79,8 @@ for _, server in ipairs(servers) do ::continue:: end +vim.lsp.enable("biome-custom") + vim.g.rustaceanvim = { server = { on_attach = function(client, _) diff --git a/nvim/.config/nvim/lua/plugins/init.lua b/nvim/.config/nvim/lua/plugins/init.lua index 07f91c2..fbd00b1 100644 --- a/nvim/.config/nvim/lua/plugins/init.lua +++ b/nvim/.config/nvim/lua/plugins/init.lua @@ -23,7 +23,6 @@ return { { "saghen/blink.cmp", - dependencies = { "rafamadriz/friendly-snippets" }, version = "1.*", opts = { completion = { diff --git a/nvim/.config/nvim/snippets/package.json b/nvim/.config/nvim/snippets/package.json new file mode 100644 index 0000000..0e38654 --- /dev/null +++ b/nvim/.config/nvim/snippets/package.json @@ -0,0 +1,8 @@ +{ + "name": "personal-snippet", + "contributes": { + "snippets": [ + {"language": "yaml", "path": "./yaml.json"} + ] + } +} diff --git a/nvim/.config/nvim/snippets/yaml.json b/nvim/.config/nvim/snippets/yaml.json new file mode 100644 index 0000000..7cc2a13 --- /dev/null +++ b/nvim/.config/nvim/snippets/yaml.json @@ -0,0 +1,21 @@ +{ + "omsf-directory-snippets": { + "prefix": "omsf-dir", + "body": [ + "name: ${1:package-name}", + "description: ${2:Package description}", + "docs: ${3:https://example.com/docs}", + "licenses:", + " - ${4:MIT}", + "link: ${5:https://example.com}", + "repository: ${6:https://github.com/user/repo}", + "tags:", + " - ${7:tag1}", + " - ${8:tag2}", + "languages:", + " - ${9:Python}", + "project: ${10|Open Force Field,Open Free Energy,OpenFold|}" + ], + "description": "Generate YAML for OMSF Directory based on JSON schema" + } +} -- 2.51.2