diff --git a/home.nix b/home.nix index 1a897da..8c85511 100644 --- a/home.nix +++ b/home.nix @@ -42,6 +42,7 @@ in devenv devbox tldr + biome ]; fonts.fontconfig.enable = true; diff --git a/nvim/init.lua b/nvim/init.lua index 4da9242..77908c8 100644 --- a/nvim/init.lua +++ b/nvim/init.lua @@ -78,6 +78,7 @@ vim.opt.tabstop = 4 vim.opt.splitkeep = "screen" require "my.keymaps" +require "my.lsp" vim.api.nvim_create_autocmd("TextYankPost", { group = vim.api.nvim_create_augroup("HighlightYank", {}), diff --git a/nvim/lua/my/lsp.lua b/nvim/lua/my/lsp.lua new file mode 100644 index 0000000..caee4d0 --- /dev/null +++ b/nvim/lua/my/lsp.lua @@ -0,0 +1,71 @@ +vim.lsp.config.svelte = {} +vim.lsp.config.gopls = {} +vim.lsp.config.ts_ls = {} + +vim.lsp.config.expert = { + cmd = { vim.fn.expand '$HOME/.local/bin/expert' }, + root_markers = { 'mix.exs', '.git' }, + filetypes = { 'elixir', 'eelixir', 'heex' }, +} + +vim.lsp.config.lua_ls = { + settings = { + Lua = { + runtime = { + version = "LuaJIT", + }, + diagnostics = { + globals = { "vim" }, + }, + workspace = { + checkThirdParty = false, + library = vim.api.nvim_get_runtime_file("", true), + }, + telemetry = { + enable = false, + }, + }, + }, +} + +vim.lsp.config.intelephense = { + init_options = { licenceKey = vim.fn.stdpath("config") .. "/intelephense-license" }, + settings = { + intelephense = { + files = { maxSize = 1000000000 }, + format = { enable = false }, + stubs = require "intelephense_stubs", + }, + }, +} + +vim.lsp.config.nixd = { + settings = { + formatting = { + command = { "nixfmt" }, + }, + }, +} + +vim.lsp.enable { 'expert', 'lua_ls', 'svelte', 'intelephense', 'nixd', 'gopls', 'ts_ls' } + +vim.api.nvim_create_autocmd("LspAttach", { + callback = function(args) + local client = vim.lsp.get_client_by_id(args.data.client_id) + + if not client then + return + end + + if client.server_capabilities.documentHighlightProvider then + vim.api.nvim_create_autocmd({ "CursorHold" }, { + callback = vim.lsp.buf.document_highlight, + buffer = args.buf, + }) + vim.api.nvim_create_autocmd({ "CursorMoved" }, { + callback = vim.lsp.buf.clear_references, + buffer = args.buf, + }) + end + end, +}) diff --git a/nvim/lua/plugins/lspconfig.lua b/nvim/lua/plugins/lspconfig.lua index 1a3dfd2..fa5f60b 100644 --- a/nvim/lua/plugins/lspconfig.lua +++ b/nvim/lua/plugins/lspconfig.lua @@ -1,154 +1,79 @@ -local function config() - local lspconfig = require "lspconfig" - require "neodev".setup() +-- local function config() +-- local lspconfig = require "lspconfig" - local capabilities = {} +-- local capabilities = {} - local has_cmp, cmp_lsp = pcall(require, "cmp_nvim_lsp") - if has_cmp then - capabilities = cmp_lsp.default_capabilities() - end +-- local has_cmp, cmp_lsp = pcall(require, "cmp_nvim_lsp") +-- if has_cmp then +-- capabilities = cmp_lsp.default_capabilities() +-- end +-- +-- local eslint = { +-- lintCommand = [[eslint_d -f visualstudio --stdin --stdin-filename ${INPUT}]], +-- lintIgnoreExitCode = true, +-- lintStdin = true, +-- lintFormats = { +-- "%f(%l,%c): %tarning %m", +-- "%f(%l,%c): %rror %m", +-- }, +-- lintSource = "eslint", +-- } - local eslint = { - lintCommand = [[eslint_d -f visualstudio --stdin --stdin-filename ${INPUT}]], - lintIgnoreExitCode = true, - lintStdin = true, - lintFormats = { - "%f(%l,%c): %tarning %m", - "%f(%l,%c): %rror %m", - }, - lintSource = "eslint", - } - - local shellcheck = { - lintCommand = "shellcheck -f gcc -x", - lintSource = "shellcheck", - lintFormats = { - "%f:%l:%c: %trror: %m", - "%f:%l:%c: %tarning: %m", - "%f:%l:%c: %tote: %m", - }, - } - - local servers = { - efm = { - filetypes = { "javascript", "javascriptreact", "typescript", "typescriptreact", "sh" }, - init_options = { documentFormatting = true }, - settings = { - rootMarkers = { ".git/" }, - languages = { - typescript = { eslint }, - typescriptreact = { eslint }, - javascript = { eslint }, - javascriptreact = { eslint }, - sh = { shellcheck }, - }, - }, - }, - gopls = {}, - nixd = { - settings = { - formatting = { - command = { "nixfmt" }, - }, - }, - }, - rust_analyzer = { - assist = { - importGranularity = "module", - importPrefix = "self", - }, - cargo = { - buildScripts = { - enable = true, - }, - }, - procMacro = { - enable = true, - }, - }, - lua_ls = { - settings = { - Lua = { - runtime = { - version = "LuaJIT", - }, - diagnostics = { - globals = { "vim" }, - }, - workspace = { - checkThirdParty = false, - library = vim.api.nvim_get_runtime_file("", true), - }, - telemetry = { - enable = false, - }, - }, - }, - }, - lexical = { - cmd = { "lexical" }, - }, - gleam = {}, - ts_ls = { - root_dir = function(filename, _) - local deno = lspconfig.util.root_pattern("deno.json", "deno.jsonc")(filename) - if deno then - return nil - end - - return lspconfig.util.root_pattern("package.json")(filename) - end, - single_file_support = false, - }, - svelte = {}, - denols = { - root_dir = lspconfig.util.root_pattern("deno.json", "deno.jsonc"), - }, - intelephense = { - init_options = { licenceKey = vim.fn.stdpath("config") .. "/intelephense-license" }, - settings = { - intelephense = { - files = { maxSize = 1000000000 }, - format = { enable = false }, - stubs = require "intelephense_stubs", - }, - } - }, - zls = {}, - bashls = {}, - } - for lsp, settings in pairs(servers) do - lspconfig[lsp].setup(vim.tbl_extend("force", { capabilities = capabilities }, settings)) - end - - vim.api.nvim_create_autocmd("LspAttach", { - callback = function(args) - local client = vim.lsp.get_client_by_id(args.data.client_id) - - if not client then - return - end - - if client.server_capabilities.documentHighlightProvider then - vim.api.nvim_create_autocmd({ "CursorHold" }, { - callback = vim.lsp.buf.document_highlight, - buffer = args.buf, - }) - vim.api.nvim_create_autocmd({ "CursorMoved" }, { - callback = vim.lsp.buf.clear_references, - buffer = args.buf, - }) - end - end, - }) -end +-- local shellcheck = { +-- lintCommand = "shellcheck -f gcc -x", +-- lintSource = "shellcheck", +-- lintFormats = { +-- "%f:%l:%c: %trror: %m", +-- "%f:%l:%c: %tarning: %m", +-- "%f:%l:%c: %tote: %m", +-- }, +-- } +-- +-- local servers = { +-- efm = { +-- filetypes = { "javascript", "javascriptreact", "typescript", "typescriptreact", "sh" }, +-- init_options = { documentFormatting = true }, +-- settings = { +-- rootMarkers = { ".git/" }, +-- languages = { +-- typescript = { eslint }, +-- typescriptreact = { eslint }, +-- javascript = { eslint }, +-- javascriptreact = { eslint }, +-- sh = { shellcheck }, +-- }, +-- }, +-- }, +-- rust_analyzer = { +-- assist = { +-- importGranularity = "module", +-- importPrefix = "self", +-- }, +-- cargo = { +-- buildScripts = { +-- enable = true, +-- }, +-- }, +-- procMacro = { +-- enable = true, +-- }, +-- }, +-- gleam = {}, +-- denols = { +-- root_dir = lspconfig.util.root_pattern("deno.json", "deno.jsonc"), +-- }, +-- zls = {}, +-- bashls = {}, +-- } +-- end return { { "neovim/nvim-lspconfig", dependencies = { "folke/neodev.nvim", }, - config = config, + config = function() + require("neodev").setup() + end, }, { "j-hui/fidget.nvim",