From f5b654af54700deea4de0d3925735ff7709e5eb8 Mon Sep 17 00:00:00 2001 From: hektor Date: Tue, 3 Nov 2026 23:13:21 +0100 Subject: [PATCH] feat(nvim): make TypeScript language server configurable --- .../nvim/config/after/plugin/lspconfig.lua | 80 ++++++++++--------- home/modules/nvim/config/flake.nix | 4 +- home/modules/nvim/default.nix | 16 +++- 3 files changed, 58 insertions(+), 42 deletions(-) diff --git a/home/modules/nvim/config/after/plugin/lspconfig.lua b/home/modules/nvim/config/after/plugin/lspconfig.lua index edababf..569c202 100644 --- a/home/modules/nvim/config/after/plugin/lspconfig.lua +++ b/home/modules/nvim/config/after/plugin/lspconfig.lua @@ -96,43 +96,42 @@ local servers = { }, tailwindcss = {}, ts_ls = {}, - -- vtsls = { - -- maxTsServerMemory = 16384, - -- filetypes = { - -- "javascript", - -- "javascriptreact", - -- "javascript.jsx", - -- "typescript", - -- "typescriptreact", - -- "typescript.tsx", - -- }, - -- settings = { - -- complete_function_calls = true, - -- vtsls = { - -- enableMoveToFileCodeAction = true, - -- autoUseWorkspaceTsdk = true, - -- experimental = { - -- completion = { - -- enableServerSideFuzzyMatch = true, - -- }, - -- }, - -- }, - -- typescript = { - -- updateImportsOnFileMove = { enabled = "always" }, - -- suggest = { - -- completeFunctionCalls = true, - -- }, - -- inlayHints = { - -- enumMemberValues = { enabled = true }, - -- functionLikeReturnTypes = { enabled = true }, - -- parameterNames = { enabled = "literals" }, - -- parameterTypes = { enabled = true }, - -- propertyDeclarationTypes = { enabled = true }, - -- variableTypes = { enabled = false }, - -- }, - -- }, - -- }, - -- }, + vtsls = { + filetypes = { + "javascript", + "javascriptreact", + "javascript.jsx", + "typescript", + "typescriptreact", + "typescript.tsx", + }, + settings = { + vtsls = { + enableMoveToFileCodeAction = true, + autoUseWorkspaceTsdk = true, + experimental = { + completion = { + enableServerSideFuzzyMatch = true, + }, + }, + }, + typescript = { + updateImportsOnFileMove = { enabled = "always" }, + tsserver = { maxTsServerMemory = 16384 }, + suggest = { + completeFunctionCalls = true, + }, + inlayHints = { + enumMemberValues = { enabled = true }, + functionLikeReturnTypes = { enabled = true }, + parameterNames = { enabled = "literals" }, + parameterTypes = { enabled = true }, + propertyDeclarationTypes = { enabled = true }, + variableTypes = { enabled = false }, + }, + }, + }, + }, yamlls = { settings = { yaml = { @@ -149,6 +148,13 @@ local servers = { }, } +local typescript_server = require("nixCatsUtils").getCatOrDefault("typescriptServer", "ts_ls") +for _, server in ipairs({ "ts_ls", "vtsls" }) do + if server ~= typescript_server then + servers[server] = nil + end +end + for server, config in pairs(servers) do config.capabilities = capabilities vim.lsp.config(server, config) diff --git a/home/modules/nvim/config/flake.nix b/home/modules/nvim/config/flake.nix index 4da3f87..9cc71ba 100644 --- a/home/modules/nvim/config/flake.nix +++ b/home/modules/nvim/config/flake.nix @@ -107,9 +107,8 @@ stylua tree-sitter tailwindcss-language-server - typescript-language-server + (if (categories.typescriptServer or "ts_ls") == "vtsls" then vtsls else typescript-language-server) vscode-langservers-extracted - vtsls yaml-language-server yamllint ]; @@ -214,6 +213,7 @@ general = true; github = false; colorscheme = "zenwritten"; + typescriptServer = "ts_ls"; }; }; }; diff --git a/home/modules/nvim/default.nix b/home/modules/nvim/default.nix index ec8eb26..c98470e 100644 --- a/home/modules/nvim/default.nix +++ b/home/modules/nvim/default.nix @@ -13,9 +13,18 @@ in { imports = [ inputs.nvim.homeModules.default ]; - options.nvim.colorscheme = lib.mkOption { - type = lib.types.enum (lib.attrNames themes); - default = "zenwritten"; + options.nvim = { + colorscheme = lib.mkOption { + type = lib.types.enum (lib.attrNames themes); + default = "zenwritten"; + }; + typescriptServer = lib.mkOption { + default = "ts_ls"; + type = lib.types.enum [ + "ts_ls" + "vtsls" + ]; + }; }; config = lib.mkIf config.nvim.enable { @@ -23,6 +32,7 @@ in categories = { colorscheme = config.nvim.colorscheme; github = config.git.github.enable; + inherit (config.nvim) typescriptServer; }; };