diff --git a/dotfiles/.config/nvim/init.lua b/dotfiles/.config/nvim/init.lua index 6fb9a150..b18122e1 100644 --- a/dotfiles/.config/nvim/init.lua +++ b/dotfiles/.config/nvim/init.lua @@ -9,16 +9,57 @@ -- - ThePrimeagen: https://github.com/awesome-streamers/awesome-streamerrc/tree/master/ThePrimeagen ( the funny ) -- - ChristianChiarulli: https://github.com/ChristianChiarulli/LunarVim ( the ambitious ) -require("wax.userconfig") -- comes first, define user configs (waxopts) -require("wax.utils") -- utils with globals require("wax.settings") -- vim.o - -require("wax.plugins") +require("wax.userconfig") -- define user configs (waxopts) +require("wax.utils") -- utils with globals require("wax.filetypes") require("wax.keymaps") -require("wax.themes") - require("wax.autocmds") -require("wax.folds") + +-- Install package manager - https://github.com/folke/lazy.nvim +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not vim.loop.fs_stat(lazypath) then + vim.fn.system({ + "git", + "clone", + "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", + "--branch=stable", -- latest stable release + lazypath, + }) +end +vim.opt.rtp:prepend(lazypath) + +require("lazy").setup({ import = "wax.plugins" }, { + custom_keys = false, + checker = { enabled = false }, -- background plugin update checker + change_detection = { enabled = true, notify = false }, + performance = { + rtp = { + disabled_plugins = { + "tohtml", + "tutor", + "gzip", + "zip", + "zipPlugin", + "tar", + "tarPlugin", + "getscript", + "getscriptPlugin", + "vimball", + "vimballPlugin", + "2html_plugin", + "logipat", + "rrhelper", + "spellfile_plugin", + "fzf", + "matchit", + "matchparen", + }, + }, + }, +}) + +safe_require("wax.folds") diff --git a/dotfiles/.config/nvim/lua/wax/lsp/dmypyls-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/dmypyls-ls.lua deleted file mode 100644 index bcf467d7..00000000 --- a/dotfiles/.config/nvim/lua/wax/lsp/dmypyls-ls.lua +++ /dev/null @@ -1,76 +0,0 @@ -local python_utils = require("wax.lsp.python-utils") -local Pkg = require("mason-core.package") - -local mason_pip = require("mason-core.managers.pip3") -local mason_index = require("mason-registry.index") - -local lspname = "dmypyls" - --- register new server in lspconfig -require("lspconfig.configs")[lspname] = { - default_config = { - cmd = { "dmypy-ls" }, - filetypes = { "python" }, - root_dir = find_root_dir_fn({ - "pyproject.toml", - "setup.py", - "setup.cfg", - "requirements.txt", - "Pipfile", - }), - single_file_support = true, - }, -} - -local function to_dmypyls_cmd(python_path) - -- python -c "from dmypy_ls import main; main()" --help - local cmd = { python_path, "-c", "from dmypy_ls import main; main()" } - - if waxopts.loglevel == "debug" then - vim.list_extend(cmd, { "--debug" }) - end - return cmd -end - -local function register_dmypyls(python_path, project) - project = project or "default" - - local msg = "LSP python (dmypyls) - '%s' using path %s" - log.info(msg:format(project, python_path)) - - mason_index[lspname] = Pkg.new({ - name = lspname, - desc = [[Daemon Mypy LSP for faster type checking in python.]], - homepage = "https://github.com/sileht/dmypy-ls", - languages = { Pkg.Lang.Python }, - categories = { Pkg.Cat.LSP }, - install = mason_pip.packages("dmypy-ls", { bin = to_dmypyls_cmd(python_path) }), - }) -end - --- init nvim-lsp-installer with CWD at first -local initial_workspace = find_root_dir(".") -register_dmypyls( - python_utils.get_python_path(initial_workspace, "python"), - to_workspace_name(initial_workspace) -) - -return { - on_new_config = function(config, new_workspace) - local python_path = python_utils.get_python_path(new_workspace, "python") - local new_workspace_name = to_workspace_name(new_workspace) - - if python_path == "python" then - local msg = "LSP python (dmypyls) - keeping previous python path '%s' for new_root_dir '%s'" - log.debug(msg:format(config.cmd[1], new_workspace)) - return config - else - local msg = "LSP python (dmypyls) - '%s' using path %s" - log.info(msg:format(new_workspace_name, python_path)) - - register_dmypyls(python_path, new_workspace_name) -- Update mason dmypyls server - config.cmd = to_dmypyls_cmd(python_path) - return config - end - end, -} diff --git a/dotfiles/.config/nvim/lua/wax/lsp/init.lua b/dotfiles/.config/nvim/lua/wax/lsp/init.lua index e7625fec..01019751 100644 --- a/dotfiles/.config/nvim/lua/wax/lsp/init.lua +++ b/dotfiles/.config/nvim/lua/wax/lsp/init.lua @@ -22,7 +22,7 @@ lsp_status.config({ }) -- Mappings -local function lsp_keymaps() +local function set_lsp_keymaps() local opts = { noremap = true, silent = true } -- See `:help vim.lsp.*` for documentation on any of the below functions @@ -82,27 +82,18 @@ local function lsp_keymaps() end, opts) end +set_lsp_keymaps() + --Enable completion triggered by vim.api.nvim_set_option("omnifunc", "v:lua.vim.lsp.omnifunc") -- Generate capabilities local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = vim.tbl_extend("force", capabilities, lsp_status.capabilities) -capabilities = require("cmp_nvim_lsp").default_capabilities(capabilities) - --- require("wax.lsp.setup").setup_servers({ --- on_attach = function(client, bufnr) --- lsp_keymaps() - --- -- -- disable semanticTokens for now --- -- vim.lsp.semantic_tokens.stop(bufnr, client.id) --- -- -- client.server_capabilities.semanticTokensProvider = nil - --- lsp_status.on_attach(client, bufnr) --- end, --- capabilities = capabilities, --- }) +capabilities.textDocument.completion = + require("cmp_nvim_lsp").default_capabilities({}).textDocument.completion +-- Customization of the publishDiagnostics (remove all pyright diags) vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(function(_, result, ctx, config) result.diagnostics = vim.tbl_filter(function(diagnostic) -- Filter out all diagnostics from pyright @@ -112,6 +103,10 @@ vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(function(_, r vim.lsp.diagnostic.on_publish_diagnostics(_, result, ctx, config) end, {}) +-- Disable semanticTokens on lsp attach +-- +-- should be done in on_attach setting it to nil, but buggy right now: +-- https://github.com/neovim/neovim/issues/21588 vim.api.nvim_create_autocmd("LspAttach", { callback = function(args) -- disable semanticTokens for now @@ -121,3 +116,77 @@ vim.api.nvim_create_autocmd("LspAttach", { client.server_capabilities.semanticTokensProvider = nil end, }) + +local function generate_handlers() + local default_on_attach = lsp_status.on_attach + + local default_handler = function(server_name) + require("lspconfig")[server_name].setup({ + capabilities = capabilities, + on_attach = default_on_attach, + }) + end + + local handlers = { default_handler } + + local scan = require("plenary.scandir") + + local server_with_custom_config = vim.tbl_map(function(server_file) + return vim.fn.fnamemodify(server_file, ":t:r") + end, scan.scan_dir(lua_waxdir .. "/lsp/servers", { depth = 1 })) + + for _, server_name in ipairs(server_with_custom_config) do + handlers[server_name] = function() + local server_opts = require(("wax.lsp.servers.%s"):format(server_name)) + local on_attach = default_on_attach + if server_opts.on_attach then + on_attach = function(client, bufnr) + default_on_attach(client) + server_opts.on_attach(client, bufnr) + end + end + require("lspconfig")[server_name].setup( + vim.tbl_deep_extend( + "keep", + { capabilities = capabilities, on_attach = on_attach }, + server_opts + ) + ) + end + end + + return handlers +end + +local handlers = generate_handlers() + +-- -- make sure to configure lspconfig before actual setup_handlers of mason-lspconfig +-- -- so we define our custom servers, and make the on_new_config works +-- vim.tbl_map(function(handler) +-- if type(handler) == "function" then +-- handler() +-- end +-- end, +-- handlers +-- ) + +-- Register homemade LSP servers (mypygls): +local lspconfig = require("lspconfig") +local configs = require("lspconfig.configs") + +configs.mypygls = { + default_config = { + cmd = { "mypygls" }, + filetypes = { "python" }, + root_dir = function(fname) + return lspconfig.util.find_git_ancestor(fname) + end, + settings = {}, + }, +} + +-- map it in mason-lspconfig +local server_mapping = require("mason-lspconfig.mappings.server") +server_mapping.lspconfig_to_package["mypygls"] = "mypygls" + +require("mason-lspconfig").setup_handlers(handlers) diff --git a/dotfiles/.config/nvim/lua/wax/lsp/mypygls-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/mypygls-ls.lua deleted file mode 100644 index 4660c45c..00000000 --- a/dotfiles/.config/nvim/lua/wax/lsp/mypygls-ls.lua +++ /dev/null @@ -1,7 +0,0 @@ --- local lspconfig = require("lspconfig") - --- local cmd = { 'mypygls' } - --- -- lspconfig. - -return {} diff --git a/dotfiles/.config/nvim/lua/wax/lsp/python-utils.lua b/dotfiles/.config/nvim/lua/wax/lsp/python-utils.lua index 1e3b5a2d..dd4c0894 100644 --- a/dotfiles/.config/nvim/lua/wax/lsp/python-utils.lua +++ b/dotfiles/.config/nvim/lua/wax/lsp/python-utils.lua @@ -58,7 +58,7 @@ local function find_python_cmd(workspace, cmd) end M.get_python_path = function(workspace, cmd) - workspace = workspace or "" + workspace = workspace or find_workspace_name(vim.api.nvim_buf_get_name(0)) cmd = cmd or "python" local python_path = nil diff --git a/dotfiles/.config/nvim/lua/wax/lsp/bash-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/servers/bashls.lua similarity index 100% rename from dotfiles/.config/nvim/lua/wax/lsp/bash-ls.lua rename to dotfiles/.config/nvim/lua/wax/lsp/servers/bashls.lua diff --git a/dotfiles/.config/nvim/lua/wax/lsp/html-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/servers/html.lua similarity index 100% rename from dotfiles/.config/nvim/lua/wax/lsp/html-ls.lua rename to dotfiles/.config/nvim/lua/wax/lsp/servers/html.lua diff --git a/dotfiles/.config/nvim/lua/wax/lsp/jsonls-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/servers/jsonls.lua similarity index 100% rename from dotfiles/.config/nvim/lua/wax/lsp/jsonls-ls.lua rename to dotfiles/.config/nvim/lua/wax/lsp/servers/jsonls.lua diff --git a/dotfiles/.config/nvim/lua/wax/lsp/lua_ls-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/servers/lua_ls.lua similarity index 96% rename from dotfiles/.config/nvim/lua/wax/lsp/lua_ls-ls.lua rename to dotfiles/.config/nvim/lua/wax/lsp/servers/lua_ls.lua index a1fee712..3f014bb9 100644 --- a/dotfiles/.config/nvim/lua/wax/lsp/lua_ls-ls.lua +++ b/dotfiles/.config/nvim/lua/wax/lsp/servers/lua_ls.lua @@ -3,7 +3,7 @@ return { client.server_capabilities.colorProvider = false client.server_capabilities.documentHighlightProvider = false - client.server_capabilities.documentFormatting = false + client.server_capabilities.documentFormattingProvider = false end, settings = { Lua = { diff --git a/dotfiles/.config/nvim/lua/wax/lsp/svelte-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/servers/mypygls.lua similarity index 100% rename from dotfiles/.config/nvim/lua/wax/lsp/svelte-ls.lua rename to dotfiles/.config/nvim/lua/wax/lsp/servers/mypygls.lua diff --git a/dotfiles/.config/nvim/lua/wax/lsp/pylsp-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/servers/pylsp.lua similarity index 97% rename from dotfiles/.config/nvim/lua/wax/lsp/pylsp-ls.lua rename to dotfiles/.config/nvim/lua/wax/lsp/servers/pylsp.lua index 58647a4b..c41cefd7 100644 --- a/dotfiles/.config/nvim/lua/wax/lsp/pylsp-ls.lua +++ b/dotfiles/.config/nvim/lua/wax/lsp/servers/pylsp.lua @@ -19,6 +19,7 @@ return { client.server_capabilities.documentFormattingProvider = false client.server_capabilities.documentRangeFormattingProvider = false end, + -- cmd = to_pylsp_cmd(python_utils.get_python_path(nil, "python")), settings = { pylsp = { -- https://github.com/python-lsp/python-lsp-server/blob/develop/CONFIGURATION.md diff --git a/dotfiles/.config/nvim/lua/wax/lsp/pyright-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/servers/pyright.lua similarity index 97% rename from dotfiles/.config/nvim/lua/wax/lsp/pyright-ls.lua rename to dotfiles/.config/nvim/lua/wax/lsp/servers/pyright.lua index efceabaf..e37e6fc3 100644 --- a/dotfiles/.config/nvim/lua/wax/lsp/pyright-ls.lua +++ b/dotfiles/.config/nvim/lua/wax/lsp/servers/pyright.lua @@ -40,6 +40,7 @@ return { settings = { python = { -- https://github.com/microsoft/pyright/blob/main/docs/settings.md + -- pythonPath = python_utils.get_python_path(), disableOrganizeImports = true, analysis = { -- diagnosticMode = "workspace", diff --git a/dotfiles/.config/nvim/lua/wax/lsp/ruff_lsp-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/servers/ruff_lsp.lua similarity index 100% rename from dotfiles/.config/nvim/lua/wax/lsp/ruff_lsp-ls.lua rename to dotfiles/.config/nvim/lua/wax/lsp/servers/ruff_lsp.lua diff --git a/dotfiles/.config/nvim/lua/wax/lsp/rust_analyzer-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/servers/rust_analyzer.lua similarity index 100% rename from dotfiles/.config/nvim/lua/wax/lsp/rust_analyzer-ls.lua rename to dotfiles/.config/nvim/lua/wax/lsp/servers/rust_analyzer.lua diff --git a/dotfiles/.config/nvim/lua/wax/lsp/sqls-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/servers/sqls.lua similarity index 100% rename from dotfiles/.config/nvim/lua/wax/lsp/sqls-ls.lua rename to dotfiles/.config/nvim/lua/wax/lsp/servers/sqls.lua diff --git a/dotfiles/.config/nvim/lua/wax/lsp/servers/svelte.lua b/dotfiles/.config/nvim/lua/wax/lsp/servers/svelte.lua new file mode 100644 index 00000000..a5647075 --- /dev/null +++ b/dotfiles/.config/nvim/lua/wax/lsp/servers/svelte.lua @@ -0,0 +1 @@ +return {} diff --git a/dotfiles/.config/nvim/lua/wax/lsp/tailwindcss-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/servers/tailwindcss.lua similarity index 100% rename from dotfiles/.config/nvim/lua/wax/lsp/tailwindcss-ls.lua rename to dotfiles/.config/nvim/lua/wax/lsp/servers/tailwindcss.lua diff --git a/dotfiles/.config/nvim/lua/wax/lsp/tsserver-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/servers/tsserver.lua similarity index 100% rename from dotfiles/.config/nvim/lua/wax/lsp/tsserver-ls.lua rename to dotfiles/.config/nvim/lua/wax/lsp/servers/tsserver.lua diff --git a/dotfiles/.config/nvim/lua/wax/lsp/volar-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/servers/volar.lua similarity index 100% rename from dotfiles/.config/nvim/lua/wax/lsp/volar-ls.lua rename to dotfiles/.config/nvim/lua/wax/lsp/servers/volar.lua diff --git a/dotfiles/.config/nvim/lua/wax/lsp/yamlls-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/servers/yamlls.lua similarity index 100% rename from dotfiles/.config/nvim/lua/wax/lsp/yamlls-ls.lua rename to dotfiles/.config/nvim/lua/wax/lsp/servers/yamlls.lua diff --git a/dotfiles/.config/nvim/lua/wax/lsp/typescript-ls.lua b/dotfiles/.config/nvim/lua/wax/lsp/typescript-ls.lua deleted file mode 100644 index f993616b..00000000 --- a/dotfiles/.config/nvim/lua/wax/lsp/typescript-ls.lua +++ /dev/null @@ -1,7 +0,0 @@ -return { - settings = { documentFormatting = false }, - on_attach = function(client, _) - -- tsserver, stop messing with prettier da fuck! - client.server_capabilities.document_formatting = false - end, -} diff --git a/dotfiles/.config/nvim/lua/wax/plugcfg/fzf.lua b/dotfiles/.config/nvim/lua/wax/plugcfg/fzf.lua index fc88ea27..27794ea8 100644 --- a/dotfiles/.config/nvim/lua/wax/plugcfg/fzf.lua +++ b/dotfiles/.config/nvim/lua/wax/plugcfg/fzf.lua @@ -296,7 +296,7 @@ kmap("n", "fw", function() ".zshrc", "src/waxcraft/dotfiles", "src/nvim-treesitter", - ".local/share/nvim/site/pack/packer", + ".local/share/nvim/lazy", } local home = vim.env.HOME local abs_paths = vim.tbl_map(function(path) diff --git a/dotfiles/.config/nvim/lua/wax/plugcfg/luasnip.lua b/dotfiles/.config/nvim/lua/wax/plugcfg/luasnip.lua index d10382a4..c1bf9f3c 100644 --- a/dotfiles/.config/nvim/lua/wax/plugcfg/luasnip.lua +++ b/dotfiles/.config/nvim/lua/wax/plugcfg/luasnip.lua @@ -37,7 +37,7 @@ ls.config.set_config({ enable_autosnippets = false, }) -local snippets_path = vim.env.waxCraft_PATH .. "/dotfiles/.config/nvim/lua/wax/snippets" +local snippets_path = lua_waxdir .. "/snippets" load_from_lua({ paths = snippets_path }) diff --git a/dotfiles/.config/nvim/lua/wax/plugins.lua b/dotfiles/.config/nvim/lua/wax/plugins.lua index f5f8306f..d5c43208 100644 --- a/dotfiles/.config/nvim/lua/wax/plugins.lua +++ b/dotfiles/.config/nvim/lua/wax/plugins.lua @@ -165,6 +165,13 @@ return { require("wax.plugcfg.treesitter") end, }, + { -- hlslens + "kevinhwang91/nvim-hlslens", + event = "VeryLazy", + config = function() + require("wax.plugcfg.hlslens") + end, + }, --------- Deemed Necessary --------- { "nvim-lua/plenary.nvim", lazy = true }, @@ -274,6 +281,7 @@ return { }, { -- mason "williamboman/mason.nvim", + config = true, init = function() vim.keymap.set({ "n" }, "fm", function() require("mason.ui").open() @@ -293,7 +301,13 @@ return { }, }, }, - { "williamboman/mason-lspconfig.nvim", config = true }, + { -- mason-lspconfig.nvim + "williamboman/mason-lspconfig.nvim", + opts = { + ensure_installed = {}, + automatic_installation = false, + }, + }, { "nvim-lua/lsp-status.nvim" }, { "b0o/schemastore.nvim", ft = "json" }, -- json schemas for jsonls }, diff --git a/dotfiles/.config/nvim/lua/wax/scratch.lua b/dotfiles/.config/nvim/lua/wax/scratch.lua index a20d343a..67f63c71 100644 --- a/dotfiles/.config/nvim/lua/wax/scratch.lua +++ b/dotfiles/.config/nvim/lua/wax/scratch.lua @@ -76,7 +76,7 @@ function M.float_win(opts) end) end local aucmd_autoclose = - vim.api.nvim_create_autocmd("WinLeave", { callback = close, buffer = bufnr }) + vim.api.nvim_create_autocmd("WinLeave", { callback = close, buffer = bufnr }) local open_vertical_split = function() vim.api.nvim_del_autocmd(aucmd_autoclose) diff --git a/dotfiles/.config/nvim/lua/wax/utils.lua b/dotfiles/.config/nvim/lua/wax/utils.lua index bb13fd19..23db9873 100644 --- a/dotfiles/.config/nvim/lua/wax/utils.lua +++ b/dotfiles/.config/nvim/lua/wax/utils.lua @@ -101,6 +101,15 @@ function _G.safe_require(name) end end +-------- FilePaths -------- + +-- debug.getinfo to get the filepath of the current lua script +-- then get its parent directory + +---@type string +_G.lua_waxdir = vim.fn.fnamemodify(debug.getinfo(1, "S").short_src, ":p:h") +-- "$HOME/.config/nvim/lua/wax" + -------- Logs -------- _G.log = require("wax.logs").new({