add nvim
This commit is contained in:
		
						commit
						3a9bbfef9e
					
				
					 26 changed files with 2170 additions and 0 deletions
				
			
		
							
								
								
									
										21
									
								
								nvim/init.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								nvim/init.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
-- Core
 | 
			
		||||
require("_options")
 | 
			
		||||
require("_keymaps")
 | 
			
		||||
require("_plugins")
 | 
			
		||||
 | 
			
		||||
-- Editing
 | 
			
		||||
require("_lsp")
 | 
			
		||||
require("_cmp")
 | 
			
		||||
require("_autopairs")
 | 
			
		||||
 | 
			
		||||
-- Navigation
 | 
			
		||||
require("_telescope")
 | 
			
		||||
require("_nvim_tree")
 | 
			
		||||
 | 
			
		||||
-- Aesthetics
 | 
			
		||||
require("_alpha")
 | 
			
		||||
require("_lualine")
 | 
			
		||||
require("_gitsigns")
 | 
			
		||||
require("_indentline")
 | 
			
		||||
require("_treesitter")
 | 
			
		||||
require("_gruvbox")
 | 
			
		||||
							
								
								
									
										152
									
								
								nvim/lsp/clangd.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								nvim/lsp/clangd.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,152 @@
 | 
			
		|||
local function lsp_highlight_document(client)
 | 
			
		||||
    if client.server_capabilities.document_highlight then
 | 
			
		||||
        vim.api.nvim_exec(
 | 
			
		||||
            [[
 | 
			
		||||
            augroup lsp_document_highlight
 | 
			
		||||
                autocmd! * <buffer>
 | 
			
		||||
                autocmd CursorHold <buffer> lua vim.lsp.buf.document_highlight()
 | 
			
		||||
                autocmd CursorMoved <buffer> lua vim.lsp.buf.clear_references()
 | 
			
		||||
            augroup END
 | 
			
		||||
        ]],
 | 
			
		||||
            false
 | 
			
		||||
        )
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function lsp_keymaps(bufnr)
 | 
			
		||||
    local opts = { noremap = true, silent = true }
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({border="rounded"})<CR>', opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({border="rounded"})<CR>', opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(
 | 
			
		||||
        bufnr,
 | 
			
		||||
        "n",
 | 
			
		||||
        "<leader>td",
 | 
			
		||||
        "<cmd>lua require 'telescope.builtin'.diagnostics()<cr>",
 | 
			
		||||
        opts
 | 
			
		||||
    )
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(
 | 
			
		||||
        bufnr,
 | 
			
		||||
        "n",
 | 
			
		||||
        "<leader>tr",
 | 
			
		||||
        "<cmd>lua require 'telescope.builtin'.lsp_references()<CR>",
 | 
			
		||||
        opts
 | 
			
		||||
    )
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
 | 
			
		||||
if not status_ok then
 | 
			
		||||
    print("Failed to require cmp_nvim_lsp")
 | 
			
		||||
    return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
 | 
			
		||||
local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities)
 | 
			
		||||
capabilities.offsetEncoding = { "utf-8", "utf-16" }
 | 
			
		||||
capabilities.textDocument.completion.editsNearCursor = true
 | 
			
		||||
 | 
			
		||||
---@brief
 | 
			
		||||
---
 | 
			
		||||
--- https://clangd.llvm.org/installation.html
 | 
			
		||||
---
 | 
			
		||||
--- - **NOTE:** Clang >= 11 is recommended! See [#23](https://github.com/neovim/nvim-lspconfig/issues/23).
 | 
			
		||||
--- - If `compile_commands.json` lives in a build directory, you should
 | 
			
		||||
---   symlink it to the root of your source tree.
 | 
			
		||||
---   ```
 | 
			
		||||
---   ln -s /path/to/myproject/build/compile_commands.json /path/to/myproject/
 | 
			
		||||
---   ```
 | 
			
		||||
--- - clangd relies on a [JSON compilation database](https://clang.llvm.org/docs/JSONCompilationDatabase.html)
 | 
			
		||||
---   specified as compile_commands.json, see https://clangd.llvm.org/installation#compile_commandsjson
 | 
			
		||||
 | 
			
		||||
-- https://clangd.llvm.org/extensions.html#switch-between-sourceheader
 | 
			
		||||
local function switch_source_header(bufnr)
 | 
			
		||||
    local method_name = 'textDocument/switchSourceHeader'
 | 
			
		||||
    local client = vim.lsp.get_clients({ bufnr = bufnr, name = 'clangd' })[1]
 | 
			
		||||
    if not client then
 | 
			
		||||
        return vim.notify(('method %s is not supported by any servers active on the current buffer'):format(method_name))
 | 
			
		||||
    end
 | 
			
		||||
    local params = vim.lsp.util.make_text_document_params(bufnr)
 | 
			
		||||
    client.request(method_name, params, function(err, result)
 | 
			
		||||
        if err then
 | 
			
		||||
            error(tostring(err))
 | 
			
		||||
        end
 | 
			
		||||
        if not result then
 | 
			
		||||
            vim.notify('corresponding file cannot be determined')
 | 
			
		||||
            return
 | 
			
		||||
        end
 | 
			
		||||
        vim.cmd.edit(vim.uri_to_fname(result))
 | 
			
		||||
    end, bufnr)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function symbol_info()
 | 
			
		||||
    local bufnr = vim.api.nvim_get_current_buf()
 | 
			
		||||
    local clangd_client = vim.lsp.get_clients({ bufnr = bufnr, name = 'clangd' })[1]
 | 
			
		||||
    if not clangd_client or not clangd_client.supports_method 'textDocument/symbolInfo' then
 | 
			
		||||
        return vim.notify('Clangd client not found', vim.log.levels.ERROR)
 | 
			
		||||
    end
 | 
			
		||||
    local win = vim.api.nvim_get_current_win()
 | 
			
		||||
    local params = vim.lsp.util.make_position_params(win, clangd_client.offset_encoding)
 | 
			
		||||
    clangd_client.request('textDocument/symbolInfo', params, function(err, res)
 | 
			
		||||
        if err or #res == 0 then
 | 
			
		||||
            -- Clangd always returns an error, there is not reason to parse it
 | 
			
		||||
            return
 | 
			
		||||
        end
 | 
			
		||||
        local container = string.format('container: %s', res[1].containerName) ---@type string
 | 
			
		||||
        local name = string.format('name: %s', res[1].name) ---@type string
 | 
			
		||||
        vim.lsp.util.open_floating_preview({ name, container }, '', {
 | 
			
		||||
            height = 2,
 | 
			
		||||
            width = math.max(string.len(name), string.len(container)),
 | 
			
		||||
            focusable = false,
 | 
			
		||||
            focus = false,
 | 
			
		||||
            border = 'single',
 | 
			
		||||
            title = 'Symbol Info',
 | 
			
		||||
        })
 | 
			
		||||
    end, bufnr)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
return {
 | 
			
		||||
    cmd = { 'clangd' },
 | 
			
		||||
    filetypes = { 'c', 'cpp', 'objc', 'objcpp', 'cuda', 'proto' },
 | 
			
		||||
    root_markers = {
 | 
			
		||||
        '.clangd',
 | 
			
		||||
        '.clang-tidy',
 | 
			
		||||
        '.clang-format',
 | 
			
		||||
        'compile_commands.json',
 | 
			
		||||
        'compile_flags.txt',
 | 
			
		||||
        'configure.ac', -- AutoTools
 | 
			
		||||
        '.git',
 | 
			
		||||
    },
 | 
			
		||||
    capabilities = capabilities,
 | 
			
		||||
    on_attach = function(client, bufnr)
 | 
			
		||||
        lsp_keymaps(bufnr)
 | 
			
		||||
        lsp_highlight_document(client)
 | 
			
		||||
 | 
			
		||||
            vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
 | 
			
		||||
            vim.api.nvim_create_autocmd("BufWritePre", {
 | 
			
		||||
                group = augroup,
 | 
			
		||||
                buffer = bufnr,
 | 
			
		||||
                callback = function()
 | 
			
		||||
                    vim.lsp.buf.format({ async = false })
 | 
			
		||||
                end,
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_buf_create_user_command(0, 'LspClangdSwitchSourceHeader', function()
 | 
			
		||||
            switch_source_header(0)
 | 
			
		||||
        end, { desc = 'Switch between source/header' })
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_buf_create_user_command(0, 'LspClangdShowSymbolInfo', function()
 | 
			
		||||
            symbol_info()
 | 
			
		||||
        end, { desc = 'Show symbol info' })
 | 
			
		||||
    end,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										112
									
								
								nvim/lsp/cssls.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								nvim/lsp/cssls.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,112 @@
 | 
			
		|||
local function lsp_highlight_document(client)
 | 
			
		||||
    if client.server_capabilities.document_highlight then
 | 
			
		||||
        vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_create_autocmd("CursorHold", {
 | 
			
		||||
            group = "lsp_document_highlight",
 | 
			
		||||
            buffer = 0,
 | 
			
		||||
            callback = function()
 | 
			
		||||
                vim.lsp.buf.document_highlight()
 | 
			
		||||
            end,
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_create_autocmd("CursorMoved", {
 | 
			
		||||
            group = "lsp_document_highlight",
 | 
			
		||||
            buffer = 0,
 | 
			
		||||
            callback = function()
 | 
			
		||||
                vim.lsp.buf.clear_references()
 | 
			
		||||
            end,
 | 
			
		||||
        })
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function lsp_keymaps(bufnr)
 | 
			
		||||
    local opts = { noremap = true, silent = true }
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({border="rounded"})<CR>', opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({border="rounded"})<CR>', opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(
 | 
			
		||||
        bufnr,
 | 
			
		||||
        "n",
 | 
			
		||||
        "<leader>td",
 | 
			
		||||
        "<cmd>lua require 'telescope.builtin'.diagnostics()<cr>",
 | 
			
		||||
        opts
 | 
			
		||||
    )
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(
 | 
			
		||||
        bufnr,
 | 
			
		||||
        "n",
 | 
			
		||||
        "<leader>tr",
 | 
			
		||||
        "<cmd>lua require 'telescope.builtin'.lsp_references()<CR>",
 | 
			
		||||
        opts
 | 
			
		||||
    )
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
 | 
			
		||||
if not status_ok then
 | 
			
		||||
    print("Failed to require cmp_nvim_lsp")
 | 
			
		||||
    return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
 | 
			
		||||
local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities)
 | 
			
		||||
capabilities.offsetEncoding = { "utf-8", "utf-16" }
 | 
			
		||||
 | 
			
		||||
---@brief
 | 
			
		||||
---
 | 
			
		||||
--- https://github.com/hrsh7th/vscode-langservers-extracted
 | 
			
		||||
---
 | 
			
		||||
--- `css-languageserver` can be installed via `npm`:
 | 
			
		||||
---
 | 
			
		||||
--- ```sh
 | 
			
		||||
--- npm i -g vscode-langservers-extracted
 | 
			
		||||
--- ```
 | 
			
		||||
---
 | 
			
		||||
--- Neovim does not currently include built-in snippets. `vscode-css-language-server` only provides completions when snippet support is enabled. To enable completion, install a snippet plugin and add the following override to your language client capabilities during setup.
 | 
			
		||||
---
 | 
			
		||||
--- ```lua
 | 
			
		||||
--- --Enable (broadcasting) snippet capability for completion
 | 
			
		||||
--- local capabilities = vim.lsp.protocol.make_client_capabilities()
 | 
			
		||||
--- capabilities.textDocument.completion.completionItem.snippetSupport = true
 | 
			
		||||
---
 | 
			
		||||
--- vim.lsp.config('cssls', {
 | 
			
		||||
---   capabilities = capabilities,
 | 
			
		||||
--- })
 | 
			
		||||
--- ```
 | 
			
		||||
return {
 | 
			
		||||
    cmd = { 'vscode-css-language-server', '--stdio' },
 | 
			
		||||
    filetypes = { 'css', 'scss', 'less' },
 | 
			
		||||
    init_options = { provideFormatter = true }, -- needed to enable formatting capabilities
 | 
			
		||||
    root_markers = { 'package.json', '.git' },
 | 
			
		||||
    settings = {
 | 
			
		||||
        css = { validate = true },
 | 
			
		||||
        scss = { validate = true },
 | 
			
		||||
        less = { validate = true },
 | 
			
		||||
    },
 | 
			
		||||
    capabilities = capabilities,
 | 
			
		||||
    on_attach = function(client, bufnr)
 | 
			
		||||
        lsp_keymaps(bufnr)
 | 
			
		||||
        lsp_highlight_document(client)
 | 
			
		||||
 | 
			
		||||
        if client.supports_method("textDocument/formatting") then
 | 
			
		||||
            vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
 | 
			
		||||
            vim.api.nvim_create_autocmd("BufWritePre", {
 | 
			
		||||
                group = augroup,
 | 
			
		||||
                buffer = bufnr,
 | 
			
		||||
                callback = function()
 | 
			
		||||
                    vim.lsp.buf.format()
 | 
			
		||||
                end,
 | 
			
		||||
            })
 | 
			
		||||
        end
 | 
			
		||||
    end,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										256
									
								
								nvim/lsp/eslint.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										256
									
								
								nvim/lsp/eslint.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,256 @@
 | 
			
		|||
local function lsp_highlight_document(client)
 | 
			
		||||
    if client.server_capabilities.document_highlight then
 | 
			
		||||
        vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_create_autocmd("CursorHold", {
 | 
			
		||||
            group = "lsp_document_highlight",
 | 
			
		||||
            buffer = 0,
 | 
			
		||||
            callback = function()
 | 
			
		||||
                vim.lsp.buf.document_highlight()
 | 
			
		||||
            end,
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_create_autocmd("CursorMoved", {
 | 
			
		||||
            group = "lsp_document_highlight",
 | 
			
		||||
            buffer = 0,
 | 
			
		||||
            callback = function()
 | 
			
		||||
                vim.lsp.buf.clear_references()
 | 
			
		||||
            end,
 | 
			
		||||
        })
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function lsp_keymaps(bufnr)
 | 
			
		||||
    local opts = { noremap = true, silent = true }
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({border="rounded"})<CR>', opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({border="rounded"})<CR>', opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(
 | 
			
		||||
        bufnr,
 | 
			
		||||
        "n",
 | 
			
		||||
        "<leader>td",
 | 
			
		||||
        "<cmd>lua require 'telescope.builtin'.diagnostics()<cr>",
 | 
			
		||||
        opts
 | 
			
		||||
    )
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(
 | 
			
		||||
        bufnr,
 | 
			
		||||
        "n",
 | 
			
		||||
        "<leader>tr",
 | 
			
		||||
        "<cmd>lua require 'telescope.builtin'.lsp_references()<CR>",
 | 
			
		||||
        opts
 | 
			
		||||
    )
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
 | 
			
		||||
if not status_ok then
 | 
			
		||||
    print("Failed to require cmp_nvim_lsp")
 | 
			
		||||
    return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
 | 
			
		||||
local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities)
 | 
			
		||||
capabilities.offsetEncoding = { "utf-8", "utf-16" }
 | 
			
		||||
 | 
			
		||||
--- @brief
 | 
			
		||||
---
 | 
			
		||||
--- https://github.com/hrsh7th/vscode-langservers-extracted
 | 
			
		||||
---
 | 
			
		||||
--- `vscode-eslint-language-server` is a linting engine for JavaScript / Typescript.
 | 
			
		||||
--- It can be installed via `npm`:
 | 
			
		||||
---
 | 
			
		||||
--- ```sh
 | 
			
		||||
--- npm i -g vscode-langservers-extracted
 | 
			
		||||
--- ```
 | 
			
		||||
---
 | 
			
		||||
--- `vscode-eslint-language-server` provides an `EslintFixAll` command that can be used to format a document on save:
 | 
			
		||||
--- ```lua
 | 
			
		||||
--- vim.lsp.config('eslint', {
 | 
			
		||||
---   --- ...
 | 
			
		||||
---   on_attach = function(client, bufnr)
 | 
			
		||||
---     vim.api.nvim_create_autocmd("BufWritePre", {
 | 
			
		||||
---       buffer = bufnr,
 | 
			
		||||
---       command = "EslintFixAll",
 | 
			
		||||
---     })
 | 
			
		||||
---   end,
 | 
			
		||||
--- })
 | 
			
		||||
--- ```
 | 
			
		||||
---
 | 
			
		||||
--- See [vscode-eslint](https://github.com/microsoft/vscode-eslint/blob/55871979d7af184bf09af491b6ea35ebd56822cf/server/src/eslintServer.ts#L216-L229) for configuration options.
 | 
			
		||||
---
 | 
			
		||||
--- Messages handled in lspconfig: `eslint/openDoc`, `eslint/confirmESLintExecution`, `eslint/probeFailed`, `eslint/noLibrary`
 | 
			
		||||
---
 | 
			
		||||
--- Additional messages you can handle: `eslint/noConfig`
 | 
			
		||||
 | 
			
		||||
local lsp = vim.lsp
 | 
			
		||||
 | 
			
		||||
return {
 | 
			
		||||
    cmd = { 'vscode-eslint-language-server', '--stdio' },
 | 
			
		||||
    filetypes = {
 | 
			
		||||
        'javascript',
 | 
			
		||||
        'javascriptreact',
 | 
			
		||||
        'javascript.jsx',
 | 
			
		||||
        'typescript',
 | 
			
		||||
        'typescriptreact',
 | 
			
		||||
        'typescript.tsx',
 | 
			
		||||
        'vue',
 | 
			
		||||
        'svelte',
 | 
			
		||||
        'astro',
 | 
			
		||||
    },
 | 
			
		||||
    on_attach = function(client, bufnr)
 | 
			
		||||
        lsp_keymaps(bufnr)
 | 
			
		||||
        lsp_highlight_document(client)
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_buf_create_user_command(0, 'LspEslintFixAll', function()
 | 
			
		||||
            local bufnr = vim.api.nvim_get_current_buf()
 | 
			
		||||
 | 
			
		||||
            client:exec_cmd({
 | 
			
		||||
                title = 'Fix all Eslint errors for current buffer',
 | 
			
		||||
                command = 'eslint.applyAllFixes',
 | 
			
		||||
                arguments = {
 | 
			
		||||
                    {
 | 
			
		||||
                        uri = vim.uri_from_bufnr(bufnr),
 | 
			
		||||
                        version = lsp.util.buf_versions[bufnr],
 | 
			
		||||
                    },
 | 
			
		||||
                },
 | 
			
		||||
            }, { bufnr = bufnr })
 | 
			
		||||
        end, {})
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_create_autocmd("BufWritePre", {
 | 
			
		||||
            buffer = bufnr,
 | 
			
		||||
            command = "LspEslintFixAll",
 | 
			
		||||
        })
 | 
			
		||||
    end,
 | 
			
		||||
    -- https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats
 | 
			
		||||
    root_dir = function(bufnr, on_dir)
 | 
			
		||||
        local root_file_patterns = {
 | 
			
		||||
            '.eslintrc',
 | 
			
		||||
            '.eslintrc.js',
 | 
			
		||||
            '.eslintrc.cjs',
 | 
			
		||||
            '.eslintrc.yaml',
 | 
			
		||||
            '.eslintrc.yml',
 | 
			
		||||
            '.eslintrc.json',
 | 
			
		||||
            'eslint.config.js',
 | 
			
		||||
            'eslint.config.mjs',
 | 
			
		||||
            'eslint.config.cjs',
 | 
			
		||||
            'eslint.config.ts',
 | 
			
		||||
            'eslint.config.mts',
 | 
			
		||||
            'eslint.config.cts',
 | 
			
		||||
            '.git',
 | 
			
		||||
            'package.json',
 | 
			
		||||
            'package-lock.json',
 | 
			
		||||
            '.prettierrc',
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        local fname = vim.api.nvim_buf_get_name(bufnr)
 | 
			
		||||
        local root_dir = vim.fs.dirname(vim.fs.find(root_file_patterns, { path = fname, upward = true })[1])
 | 
			
		||||
        on_dir(root_dir)
 | 
			
		||||
    end,
 | 
			
		||||
    -- Refer to https://github.com/Microsoft/vscode-eslint#settings-options for documentation.
 | 
			
		||||
    settings = {
 | 
			
		||||
        validate = 'on',
 | 
			
		||||
        packageManager = nil,
 | 
			
		||||
        useESLintClass = false,
 | 
			
		||||
        experimental = {
 | 
			
		||||
            useFlatConfig = false,
 | 
			
		||||
        },
 | 
			
		||||
        codeActionOnSave = {
 | 
			
		||||
            enable = false,
 | 
			
		||||
            mode = 'all',
 | 
			
		||||
        },
 | 
			
		||||
        format = true,
 | 
			
		||||
        quiet = false,
 | 
			
		||||
        onIgnoredFiles = 'off',
 | 
			
		||||
        rulesCustomizations = {},
 | 
			
		||||
        run = 'onType',
 | 
			
		||||
        problems = {
 | 
			
		||||
            shortenToSingleLine = false,
 | 
			
		||||
        },
 | 
			
		||||
        -- nodePath configures the directory in which the eslint server should start its node_modules resolution.
 | 
			
		||||
        -- This path is relative to the workspace folder (root dir) of the server instance.
 | 
			
		||||
        nodePath = '',
 | 
			
		||||
        -- use the workspace folder location or the file location (if no workspace folder is open) as the working directory
 | 
			
		||||
        workingDirectory = { mode = 'location' },
 | 
			
		||||
        codeAction = {
 | 
			
		||||
            disableRuleComment = {
 | 
			
		||||
                enable = true,
 | 
			
		||||
                location = 'separateLine',
 | 
			
		||||
            },
 | 
			
		||||
            showDocumentation = {
 | 
			
		||||
                enable = true,
 | 
			
		||||
            },
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
    before_init = function(_, config)
 | 
			
		||||
        -- The "workspaceFolder" is a VSCode concept. It limits how far the
 | 
			
		||||
        -- server will traverse the file system when locating the ESLint config
 | 
			
		||||
        -- file (e.g., .eslintrc).
 | 
			
		||||
        local root_dir = config.root_dir
 | 
			
		||||
 | 
			
		||||
        if root_dir then
 | 
			
		||||
            config.settings = config.settings or {}
 | 
			
		||||
            config.settings.workspaceFolder = {
 | 
			
		||||
                uri = root_dir,
 | 
			
		||||
                name = vim.fn.fnamemodify(root_dir, ':t'),
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            -- Support flat config
 | 
			
		||||
            local flat_config_files = {
 | 
			
		||||
                'eslint.config.js',
 | 
			
		||||
                'eslint.config.mjs',
 | 
			
		||||
                'eslint.config.cjs',
 | 
			
		||||
                'eslint.config.ts',
 | 
			
		||||
                'eslint.config.mts',
 | 
			
		||||
                'eslint.config.cts',
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            for _, file in ipairs(flat_config_files) do
 | 
			
		||||
                if vim.fn.filereadable(root_dir .. '/' .. file) == 1 then
 | 
			
		||||
                    config.settings.experimental = config.settings.experimental or {}
 | 
			
		||||
                    config.settings.experimental.useFlatConfig = true
 | 
			
		||||
                    break
 | 
			
		||||
                end
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            -- Support Yarn2 (PnP) projects
 | 
			
		||||
            local pnp_cjs = root_dir .. '/.pnp.cjs'
 | 
			
		||||
            local pnp_js = root_dir .. '/.pnp.js'
 | 
			
		||||
            if vim.uv.fs_stat(pnp_cjs) or vim.uv.fs_stat(pnp_js) then
 | 
			
		||||
                local cmd = config.cmd
 | 
			
		||||
                config.cmd = vim.list_extend({ 'yarn', 'exec' }, cmd)
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
    end,
 | 
			
		||||
    handlers = {
 | 
			
		||||
        ['eslint/openDoc'] = function(_, result)
 | 
			
		||||
            if result then
 | 
			
		||||
                vim.ui.open(result.url)
 | 
			
		||||
            end
 | 
			
		||||
            return {}
 | 
			
		||||
        end,
 | 
			
		||||
        ['eslint/confirmESLintExecution'] = function(_, result)
 | 
			
		||||
            if not result then
 | 
			
		||||
                return
 | 
			
		||||
            end
 | 
			
		||||
            return 4 -- approved
 | 
			
		||||
        end,
 | 
			
		||||
        ['eslint/probeFailed'] = function()
 | 
			
		||||
            vim.notify('[lspconfig] ESLint probe failed.', vim.log.levels.WARN)
 | 
			
		||||
            return {}
 | 
			
		||||
        end,
 | 
			
		||||
        ['eslint/noLibrary'] = function()
 | 
			
		||||
            vim.notify('[lspconfig] Unable to find ESLint library.', vim.log.levels.WARN)
 | 
			
		||||
            return {}
 | 
			
		||||
        end,
 | 
			
		||||
    },
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										176
									
								
								nvim/lsp/lua_ls.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										176
									
								
								nvim/lsp/lua_ls.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,176 @@
 | 
			
		|||
local function lsp_highlight_document(client)
 | 
			
		||||
    if client.server_capabilities.document_highlight then
 | 
			
		||||
        vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_create_autocmd("CursorHold", {
 | 
			
		||||
            group = "lsp_document_highlight",
 | 
			
		||||
            buffer = 0,
 | 
			
		||||
            callback = function()
 | 
			
		||||
                vim.lsp.buf.document_highlight()
 | 
			
		||||
            end,
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_create_autocmd("CursorMoved", {
 | 
			
		||||
            group = "lsp_document_highlight",
 | 
			
		||||
            buffer = 0,
 | 
			
		||||
            callback = function()
 | 
			
		||||
                vim.lsp.buf.clear_references()
 | 
			
		||||
            end,
 | 
			
		||||
        })
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function lsp_keymaps(bufnr)
 | 
			
		||||
    local opts = { noremap = true, silent = true }
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({border="rounded"})<CR>', opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({border="rounded"})<CR>', opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(
 | 
			
		||||
        bufnr,
 | 
			
		||||
        "n",
 | 
			
		||||
        "<leader>td",
 | 
			
		||||
        "<cmd>lua require 'telescope.builtin'.diagnostics()<cr>",
 | 
			
		||||
        opts
 | 
			
		||||
    )
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(
 | 
			
		||||
        bufnr,
 | 
			
		||||
        "n",
 | 
			
		||||
        "<leader>tr",
 | 
			
		||||
        "<cmd>lua require 'telescope.builtin'.lsp_references()<CR>",
 | 
			
		||||
        opts
 | 
			
		||||
    )
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
 | 
			
		||||
if not status_ok then
 | 
			
		||||
    print("Failed to require cmp_nvim_lsp")
 | 
			
		||||
    return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
 | 
			
		||||
local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities)
 | 
			
		||||
capabilities.offsetEncoding = { "utf-8", "utf-16" }
 | 
			
		||||
capabilities.textDocument.completion.editsNearCursor = true
 | 
			
		||||
 | 
			
		||||
---@brief
 | 
			
		||||
---
 | 
			
		||||
--- https://github.com/luals/lua-language-server
 | 
			
		||||
---
 | 
			
		||||
--- Lua language server.
 | 
			
		||||
---
 | 
			
		||||
--- `lua-language-server` can be installed by following the instructions [here](https://luals.github.io/#neovim-install).
 | 
			
		||||
---
 | 
			
		||||
--- The default `cmd` assumes that the `lua-language-server` binary can be found in `$PATH`.
 | 
			
		||||
---
 | 
			
		||||
--- If you primarily use `lua-language-server` for Neovim, and want to provide completions,
 | 
			
		||||
--- analysis, and location handling for plugins on runtime path, you can use the following
 | 
			
		||||
--- settings.
 | 
			
		||||
---
 | 
			
		||||
--- ```lua
 | 
			
		||||
--- vim.lsp.config('lua_ls', {
 | 
			
		||||
---   on_init = function(client)
 | 
			
		||||
---     if client.workspace_folders then
 | 
			
		||||
---       local path = client.workspace_folders[1].name
 | 
			
		||||
---       if path ~= vim.fn.stdpath('config') and (vim.uv.fs_stat(path..'/.luarc.json') or vim.uv.fs_stat(path..'/.luarc.jsonc')) then
 | 
			
		||||
---         return
 | 
			
		||||
---       end
 | 
			
		||||
---     end
 | 
			
		||||
---
 | 
			
		||||
---     client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, {
 | 
			
		||||
---       runtime = {
 | 
			
		||||
---         -- Tell the language server which version of Lua you're using
 | 
			
		||||
---         -- (most likely LuaJIT in the case of Neovim)
 | 
			
		||||
---         version = 'LuaJIT'
 | 
			
		||||
---       },
 | 
			
		||||
---       -- Make the server aware of Neovim runtime files
 | 
			
		||||
---       workspace = {
 | 
			
		||||
---         checkThirdParty = false,
 | 
			
		||||
---         library = {
 | 
			
		||||
---           vim.env.VIMRUNTIME
 | 
			
		||||
---           -- Depending on the usage, you might want to add additional paths here.
 | 
			
		||||
---           -- "${3rd}/luv/library"
 | 
			
		||||
---           -- "${3rd}/busted/library",
 | 
			
		||||
---         }
 | 
			
		||||
---         -- or pull in all of 'runtimepath'. NOTE: this is a lot slower and will cause issues when working on your own configuration (see https://github.com/neovim/nvim-lspconfig/issues/3189)
 | 
			
		||||
---         -- library = vim.api.nvim_get_runtime_file("", true)
 | 
			
		||||
---       }
 | 
			
		||||
---     })
 | 
			
		||||
---   end,
 | 
			
		||||
---   settings = {
 | 
			
		||||
---     Lua = {}
 | 
			
		||||
---   }
 | 
			
		||||
--- })
 | 
			
		||||
--- ```
 | 
			
		||||
---
 | 
			
		||||
--- See `lua-language-server`'s [documentation](https://luals.github.io/wiki/settings/) for an explanation of the above fields:
 | 
			
		||||
--- * [Lua.runtime.path](https://luals.github.io/wiki/settings/#runtimepath)
 | 
			
		||||
--- * [Lua.workspace.library](https://luals.github.io/wiki/settings/#workspacelibrary)
 | 
			
		||||
---
 | 
			
		||||
return {
 | 
			
		||||
    cmd = { 'lua-language-server' },
 | 
			
		||||
    filetypes = { 'lua' },
 | 
			
		||||
    root_markers = {
 | 
			
		||||
        '.luarc.json',
 | 
			
		||||
        '.luarc.jsonc',
 | 
			
		||||
        '.luacheckrc',
 | 
			
		||||
        '.stylua.toml',
 | 
			
		||||
        'stylua.toml',
 | 
			
		||||
        'selene.toml',
 | 
			
		||||
        'selene.yml',
 | 
			
		||||
        '.git',
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    settings = {
 | 
			
		||||
        Lua = {
 | 
			
		||||
            runtime = {
 | 
			
		||||
                -- Tell the language server which version of Lua you're using
 | 
			
		||||
                -- (most likely LuaJIT in the case of Neovim)
 | 
			
		||||
                version = 'LuaJIT'
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            diagnostics = {
 | 
			
		||||
                -- Get the language server to recognize the `vim` global
 | 
			
		||||
                globals = { "vim" },
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            -- Make the server aware of Neovim runtime files
 | 
			
		||||
            workspace = {
 | 
			
		||||
                checkThirdParty = false,
 | 
			
		||||
                library = vim.api.nvim_get_runtime_file("", true)
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            -- Do not send telemetry data containing a randomized but unique identifier
 | 
			
		||||
            telemetry = {
 | 
			
		||||
                enable = false,
 | 
			
		||||
            },
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    capabilities = capabilities,
 | 
			
		||||
    on_attach = function(client, bufnr)
 | 
			
		||||
        lsp_keymaps(bufnr)
 | 
			
		||||
        lsp_highlight_document(client)
 | 
			
		||||
 | 
			
		||||
        if client.supports_method("textDocument/formatting") then
 | 
			
		||||
            vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
 | 
			
		||||
            vim.api.nvim_create_autocmd("BufWritePre", {
 | 
			
		||||
                group = augroup,
 | 
			
		||||
                buffer = bufnr,
 | 
			
		||||
                callback = function()
 | 
			
		||||
                    vim.lsp.buf.format()
 | 
			
		||||
                end,
 | 
			
		||||
            })
 | 
			
		||||
        end
 | 
			
		||||
    end,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										90
									
								
								nvim/lsp/mdx_analyzer.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								nvim/lsp/mdx_analyzer.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,90 @@
 | 
			
		|||
local function lsp_highlight_document(client)
 | 
			
		||||
    if client.server_capabilities.document_highlight then
 | 
			
		||||
        vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_create_autocmd("CursorHold", {
 | 
			
		||||
            group = "lsp_document_highlight",
 | 
			
		||||
            buffer = 0,
 | 
			
		||||
            callback = function()
 | 
			
		||||
                vim.lsp.buf.document_highlight()
 | 
			
		||||
            end,
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_create_autocmd("CursorMoved", {
 | 
			
		||||
            group = "lsp_document_highlight",
 | 
			
		||||
            buffer = 0,
 | 
			
		||||
            callback = function()
 | 
			
		||||
                vim.lsp.buf.clear_references()
 | 
			
		||||
            end,
 | 
			
		||||
        })
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function lsp_keymaps(bufnr)
 | 
			
		||||
    local opts = { noremap = true, silent = true }
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({border="rounded"})<CR>', opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({border="rounded"})<CR>', opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(
 | 
			
		||||
        bufnr,
 | 
			
		||||
        "n",
 | 
			
		||||
        "<leader>td",
 | 
			
		||||
        "<cmd>lua require 'telescope.builtin'.diagnostics()<cr>",
 | 
			
		||||
        opts
 | 
			
		||||
    )
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(
 | 
			
		||||
        bufnr,
 | 
			
		||||
        "n",
 | 
			
		||||
        "<leader>tr",
 | 
			
		||||
        "<cmd>lua require 'telescope.builtin'.lsp_references()<CR>",
 | 
			
		||||
        opts
 | 
			
		||||
    )
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
 | 
			
		||||
if not status_ok then
 | 
			
		||||
    print("Failed to require cmp_nvim_lsp")
 | 
			
		||||
    return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
 | 
			
		||||
local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities)
 | 
			
		||||
capabilities.offsetEncoding = { "utf-8", "utf-16" }
 | 
			
		||||
 | 
			
		||||
local util = require 'lspconfig.util'
 | 
			
		||||
return {
 | 
			
		||||
  default_config = {
 | 
			
		||||
    cmd = { 'mdx-language-server', '--stdio' },
 | 
			
		||||
    filetypes = { 'mdx', 'markdown', 'svx' },
 | 
			
		||||
    root_dir = util.root_pattern 'package.json',
 | 
			
		||||
    single_file_support = true,
 | 
			
		||||
    settings = {},
 | 
			
		||||
    init_options = {
 | 
			
		||||
      typescript = {},
 | 
			
		||||
    },
 | 
			
		||||
    on_new_config = function(new_config, new_root_dir)
 | 
			
		||||
      if vim.tbl_get(new_config.init_options, 'typescript') and not new_config.init_options.typescript.tsdk then
 | 
			
		||||
        new_config.init_options.typescript.tsdk = util.get_typescript_server_path(new_root_dir)
 | 
			
		||||
      end
 | 
			
		||||
    end,
 | 
			
		||||
  },
 | 
			
		||||
  commands = {},
 | 
			
		||||
  docs = {
 | 
			
		||||
    description = [[
 | 
			
		||||
https://github.com/mdx-js/mdx-analyzer
 | 
			
		||||
 | 
			
		||||
`mdx-analyzer`, a language server for MDX
 | 
			
		||||
]],
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										93
									
								
								nvim/lsp/svelte.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								nvim/lsp/svelte.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,93 @@
 | 
			
		|||
local function lsp_highlight_document(client)
 | 
			
		||||
    if client.server_capabilities.document_highlight then
 | 
			
		||||
        vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_create_autocmd("CursorHold", {
 | 
			
		||||
            group = "lsp_document_highlight",
 | 
			
		||||
            buffer = 0,
 | 
			
		||||
            callback = function()
 | 
			
		||||
                vim.lsp.buf.document_highlight()
 | 
			
		||||
            end,
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_create_autocmd("CursorMoved", {
 | 
			
		||||
            group = "lsp_document_highlight",
 | 
			
		||||
            buffer = 0,
 | 
			
		||||
            callback = function()
 | 
			
		||||
                vim.lsp.buf.clear_references()
 | 
			
		||||
            end,
 | 
			
		||||
        })
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function lsp_keymaps(bufnr)
 | 
			
		||||
    local opts = { noremap = true, silent = true }
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({border="rounded"})<CR>', opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({border="rounded"})<CR>', opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(
 | 
			
		||||
        bufnr,
 | 
			
		||||
        "n",
 | 
			
		||||
        "<leader>td",
 | 
			
		||||
        "<cmd>lua require 'telescope.builtin'.diagnostics()<cr>",
 | 
			
		||||
        opts
 | 
			
		||||
    )
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(
 | 
			
		||||
        bufnr,
 | 
			
		||||
        "n",
 | 
			
		||||
        "<leader>tr",
 | 
			
		||||
        "<cmd>lua require 'telescope.builtin'.lsp_references()<CR>",
 | 
			
		||||
        opts
 | 
			
		||||
    )
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
 | 
			
		||||
if not status_ok then
 | 
			
		||||
    print("Failed to require cmp_nvim_lsp")
 | 
			
		||||
    return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
 | 
			
		||||
local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities)
 | 
			
		||||
capabilities.offsetEncoding = { "utf-8", "utf-16" }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
---@brief
 | 
			
		||||
---
 | 
			
		||||
--- https://github.com/sveltejs/language-tools/tree/master/packages/language-server
 | 
			
		||||
---
 | 
			
		||||
--- Note: assuming that [ts_ls](#ts_ls) is setup, full JavaScript/TypeScript support (find references, rename, etc of symbols in Svelte files when working in JS/TS files) requires per-project installation and configuration of [typescript-svelte-plugin](https://github.com/sveltejs/language-tools/tree/master/packages/typescript-plugin#usage).
 | 
			
		||||
---
 | 
			
		||||
--- `svelte-language-server` can be installed via `npm`:
 | 
			
		||||
--- ```sh
 | 
			
		||||
--- npm install -g svelte-language-server
 | 
			
		||||
--- ```
 | 
			
		||||
 | 
			
		||||
return {
 | 
			
		||||
    cmd = { 'svelteserver', '--stdio' },
 | 
			
		||||
    filetypes = { 'svelte' },
 | 
			
		||||
    root_markers = { 'package.json', '.git' },
 | 
			
		||||
    capabilities = capabilities,
 | 
			
		||||
    on_attach = function(client, bufnr)
 | 
			
		||||
        lsp_keymaps(bufnr)
 | 
			
		||||
        lsp_highlight_document(client)
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_buf_create_user_command(bufnr, 'LspMigrateToSvelte5', function()
 | 
			
		||||
            client:exec_cmd({
 | 
			
		||||
                command = 'migrate_to_svelte_5',
 | 
			
		||||
                arguments = { vim.uri_from_bufnr(bufnr) },
 | 
			
		||||
            })
 | 
			
		||||
        end, { desc = 'Migrate Component to Svelte 5 Syntax' })
 | 
			
		||||
    end,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										192
									
								
								nvim/lsp/tailwindcss.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										192
									
								
								nvim/lsp/tailwindcss.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,192 @@
 | 
			
		|||
local function lsp_highlight_document(client)
 | 
			
		||||
    if client.server_capabilities.document_highlight then
 | 
			
		||||
        vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_create_autocmd("CursorHold", {
 | 
			
		||||
            group = "lsp_document_highlight",
 | 
			
		||||
            buffer = 0,
 | 
			
		||||
            callback = function()
 | 
			
		||||
                vim.lsp.buf.document_highlight()
 | 
			
		||||
            end,
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_create_autocmd("CursorMoved", {
 | 
			
		||||
            group = "lsp_document_highlight",
 | 
			
		||||
            buffer = 0,
 | 
			
		||||
            callback = function()
 | 
			
		||||
                vim.lsp.buf.clear_references()
 | 
			
		||||
            end,
 | 
			
		||||
        })
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function lsp_keymaps(bufnr)
 | 
			
		||||
    local opts = { noremap = true, silent = true }
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({border="rounded"})<CR>', opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({border="rounded"})<CR>', opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(
 | 
			
		||||
        bufnr,
 | 
			
		||||
        "n",
 | 
			
		||||
        "<leader>td",
 | 
			
		||||
        "<cmd>lua require 'telescope.builtin'.diagnostics()<cr>",
 | 
			
		||||
        opts
 | 
			
		||||
    )
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(
 | 
			
		||||
        bufnr,
 | 
			
		||||
        "n",
 | 
			
		||||
        "<leader>tr",
 | 
			
		||||
        "<cmd>lua require 'telescope.builtin'.lsp_references()<CR>",
 | 
			
		||||
        opts
 | 
			
		||||
    )
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
 | 
			
		||||
if not status_ok then
 | 
			
		||||
    print("Failed to require cmp_nvim_lsp")
 | 
			
		||||
    return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
 | 
			
		||||
local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities)
 | 
			
		||||
capabilities.offsetEncoding = { "utf-8", "utf-16" }
 | 
			
		||||
 | 
			
		||||
---@brief
 | 
			
		||||
--- https://github.com/tailwindlabs/tailwindcss-intellisense
 | 
			
		||||
---
 | 
			
		||||
--- Tailwind CSS Language Server can be installed via npm:
 | 
			
		||||
---
 | 
			
		||||
--- npm install -g @tailwindcss/language-server
 | 
			
		||||
 | 
			
		||||
return {
 | 
			
		||||
    cmd = { 'tailwindcss-language-server', '--stdio' },
 | 
			
		||||
    -- filetypes copied and adjusted from tailwindcss-intellisense
 | 
			
		||||
    filetypes = {
 | 
			
		||||
        -- html
 | 
			
		||||
        'aspnetcorerazor',
 | 
			
		||||
        'astro',
 | 
			
		||||
        'astro-markdown',
 | 
			
		||||
        'blade',
 | 
			
		||||
        'clojure',
 | 
			
		||||
        'django-html',
 | 
			
		||||
        'htmldjango',
 | 
			
		||||
        'edge',
 | 
			
		||||
        'eelixir', -- vim ft
 | 
			
		||||
        'elixir',
 | 
			
		||||
        'ejs',
 | 
			
		||||
        'erb',
 | 
			
		||||
        'eruby', -- vim ft
 | 
			
		||||
        'gohtml',
 | 
			
		||||
        'gohtmltmpl',
 | 
			
		||||
        'haml',
 | 
			
		||||
        'handlebars',
 | 
			
		||||
        'hbs',
 | 
			
		||||
        'html',
 | 
			
		||||
        'htmlangular',
 | 
			
		||||
        'html-eex',
 | 
			
		||||
        'heex',
 | 
			
		||||
        'jade',
 | 
			
		||||
        'leaf',
 | 
			
		||||
        'liquid',
 | 
			
		||||
        'markdown',
 | 
			
		||||
        'mdx',
 | 
			
		||||
        'mustache',
 | 
			
		||||
        'njk',
 | 
			
		||||
        'nunjucks',
 | 
			
		||||
        'php',
 | 
			
		||||
        'razor',
 | 
			
		||||
        'slim',
 | 
			
		||||
        'twig',
 | 
			
		||||
        -- css
 | 
			
		||||
        'css',
 | 
			
		||||
        'less',
 | 
			
		||||
        'postcss',
 | 
			
		||||
        'sass',
 | 
			
		||||
        'scss',
 | 
			
		||||
        'stylus',
 | 
			
		||||
        'sugarss',
 | 
			
		||||
        -- js
 | 
			
		||||
        'javascript',
 | 
			
		||||
        'javascriptreact',
 | 
			
		||||
        'reason',
 | 
			
		||||
        'rescript',
 | 
			
		||||
        'typescript',
 | 
			
		||||
        'typescriptreact',
 | 
			
		||||
        -- mixed
 | 
			
		||||
        'vue',
 | 
			
		||||
        'svelte',
 | 
			
		||||
        'templ',
 | 
			
		||||
    },
 | 
			
		||||
    settings = {
 | 
			
		||||
        tailwindCSS = {
 | 
			
		||||
            validate = true,
 | 
			
		||||
            lint = {
 | 
			
		||||
                cssConflict = 'warning',
 | 
			
		||||
                invalidApply = 'error',
 | 
			
		||||
                invalidScreen = 'error',
 | 
			
		||||
                invalidVariant = 'error',
 | 
			
		||||
                invalidConfigPath = 'error',
 | 
			
		||||
                invalidTailwindDirective = 'error',
 | 
			
		||||
                recommendedVariantOrder = 'warning',
 | 
			
		||||
            },
 | 
			
		||||
            classAttributes = {
 | 
			
		||||
                'class',
 | 
			
		||||
                'className',
 | 
			
		||||
                'class:list',
 | 
			
		||||
                'classList',
 | 
			
		||||
                'ngClass',
 | 
			
		||||
            },
 | 
			
		||||
            includeLanguages = {
 | 
			
		||||
                eelixir = 'html-eex',
 | 
			
		||||
                eruby = 'erb',
 | 
			
		||||
                templ = 'html',
 | 
			
		||||
                htmlangular = 'html',
 | 
			
		||||
            },
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
    before_init = function(_, config)
 | 
			
		||||
        if not config.settings then
 | 
			
		||||
            config.settings = {}
 | 
			
		||||
        end
 | 
			
		||||
        if not config.settings.editor then
 | 
			
		||||
            config.settings.editor = {}
 | 
			
		||||
        end
 | 
			
		||||
        if not config.settings.editor.tabSize then
 | 
			
		||||
            config.settings.editor.tabSize = vim.lsp.util.get_effective_tabstop()
 | 
			
		||||
        end
 | 
			
		||||
    end,
 | 
			
		||||
    workspace_required = true,
 | 
			
		||||
    root_dir = function(bufnr, on_dir)
 | 
			
		||||
        local root_files = {
 | 
			
		||||
            'tailwind.config.js',
 | 
			
		||||
            'tailwind.config.cjs',
 | 
			
		||||
            'tailwind.config.mjs',
 | 
			
		||||
            'tailwind.config.ts',
 | 
			
		||||
            'postcss.config.js',
 | 
			
		||||
            'postcss.config.cjs',
 | 
			
		||||
            'postcss.config.mjs',
 | 
			
		||||
            'postcss.config.ts',
 | 
			
		||||
            'package.json',
 | 
			
		||||
        }
 | 
			
		||||
        local fname = vim.api.nvim_buf_get_name(bufnr)
 | 
			
		||||
        on_dir(vim.fs.dirname(vim.fs.find(root_files, { path = fname, upward = true })[1]))
 | 
			
		||||
    end,
 | 
			
		||||
 | 
			
		||||
    capabilities = capabilities,
 | 
			
		||||
 | 
			
		||||
    on_attach = function(client, bufnr)
 | 
			
		||||
        lsp_keymaps(bufnr)
 | 
			
		||||
        lsp_highlight_document(client)
 | 
			
		||||
    end,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										149
									
								
								nvim/lsp/ts_ls.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								nvim/lsp/ts_ls.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,149 @@
 | 
			
		|||
local function lsp_highlight_document(client)
 | 
			
		||||
    if client.server_capabilities.document_highlight then
 | 
			
		||||
        vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_create_autocmd("CursorHold", {
 | 
			
		||||
            group = "lsp_document_highlight",
 | 
			
		||||
            buffer = 0,
 | 
			
		||||
            callback = function()
 | 
			
		||||
                vim.lsp.buf.document_highlight()
 | 
			
		||||
            end,
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
        vim.api.nvim_create_autocmd("CursorMoved", {
 | 
			
		||||
            group = "lsp_document_highlight",
 | 
			
		||||
            buffer = 0,
 | 
			
		||||
            callback = function()
 | 
			
		||||
                vim.lsp.buf.clear_references()
 | 
			
		||||
            end,
 | 
			
		||||
        })
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function lsp_keymaps(bufnr)
 | 
			
		||||
    local opts = { noremap = true, silent = true }
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({border="rounded"})<CR>', opts)
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({border="rounded"})<CR>', opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
 | 
			
		||||
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(
 | 
			
		||||
        bufnr,
 | 
			
		||||
        "n",
 | 
			
		||||
        "<leader>td",
 | 
			
		||||
        "<cmd>lua require 'telescope.builtin'.diagnostics()<cr>",
 | 
			
		||||
        opts
 | 
			
		||||
    )
 | 
			
		||||
    vim.api.nvim_buf_set_keymap(
 | 
			
		||||
        bufnr,
 | 
			
		||||
        "n",
 | 
			
		||||
        "<leader>tr",
 | 
			
		||||
        "<cmd>lua require 'telescope.builtin'.lsp_references()<CR>",
 | 
			
		||||
        opts
 | 
			
		||||
    )
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
 | 
			
		||||
if not status_ok then
 | 
			
		||||
    print("Failed to require cmp_nvim_lsp")
 | 
			
		||||
    return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
 | 
			
		||||
local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities)
 | 
			
		||||
capabilities.offsetEncoding = { "utf-8", "utf-16" }
 | 
			
		||||
---@brief
 | 
			
		||||
---
 | 
			
		||||
--- https://github.com/typescript-language-server/typescript-language-server
 | 
			
		||||
---
 | 
			
		||||
--- `ts_ls`, aka `typescript-language-server`, is a Language Server Protocol implementation for TypeScript wrapping `tsserver`. Note that `ts_ls` is not `tsserver`.
 | 
			
		||||
---
 | 
			
		||||
--- `typescript-language-server` depends on `typescript`. Both packages can be installed via `npm`:
 | 
			
		||||
--- ```sh
 | 
			
		||||
--- npm install -g typescript typescript-language-server
 | 
			
		||||
--- ```
 | 
			
		||||
---
 | 
			
		||||
--- To configure typescript language server, add a
 | 
			
		||||
--- [`tsconfig.json`](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) or
 | 
			
		||||
--- [`jsconfig.json`](https://code.visualstudio.com/docs/languages/jsconfig) to the root of your
 | 
			
		||||
--- project.
 | 
			
		||||
---
 | 
			
		||||
--- Here's an example that disables type checking in JavaScript files.
 | 
			
		||||
---
 | 
			
		||||
--- ```json
 | 
			
		||||
--- {
 | 
			
		||||
---   "compilerOptions": {
 | 
			
		||||
---     "module": "commonjs",
 | 
			
		||||
---     "target": "es6",
 | 
			
		||||
---     "checkJs": false
 | 
			
		||||
---   },
 | 
			
		||||
---   "exclude": [
 | 
			
		||||
---     "node_modules"
 | 
			
		||||
---   ]
 | 
			
		||||
--- }
 | 
			
		||||
--- ```
 | 
			
		||||
---
 | 
			
		||||
--- ### Vue support
 | 
			
		||||
---
 | 
			
		||||
--- As of 2.0.0, Volar no longer supports TypeScript itself. Instead, a plugin
 | 
			
		||||
--- adds Vue support to this language server.
 | 
			
		||||
---
 | 
			
		||||
--- *IMPORTANT*: It is crucial to ensure that `@vue/typescript-plugin` and `volar `are of identical versions.
 | 
			
		||||
---
 | 
			
		||||
--- ```lua
 | 
			
		||||
--- vim.lsp.config('ts_ls', {
 | 
			
		||||
---   init_options = {
 | 
			
		||||
---     plugins = {
 | 
			
		||||
---       {
 | 
			
		||||
---         name = "@vue/typescript-plugin",
 | 
			
		||||
---         location = "/usr/local/lib/node_modules/@vue/typescript-plugin",
 | 
			
		||||
---         languages = {"javascript", "typescript", "vue"},
 | 
			
		||||
---       },
 | 
			
		||||
---     },
 | 
			
		||||
---   },
 | 
			
		||||
---   filetypes = {
 | 
			
		||||
---     "javascript",
 | 
			
		||||
---     "typescript",
 | 
			
		||||
---     "vue",
 | 
			
		||||
---   },
 | 
			
		||||
--- })
 | 
			
		||||
---
 | 
			
		||||
--- -- You must make sure volar is setup
 | 
			
		||||
--- -- e.g. require'lspconfig'.volar.setup{}
 | 
			
		||||
--- -- See volar's section for more information
 | 
			
		||||
--- ```
 | 
			
		||||
---
 | 
			
		||||
--- `location` MUST be defined. If the plugin is installed in `node_modules`,
 | 
			
		||||
--- `location` can have any value.
 | 
			
		||||
---
 | 
			
		||||
--- `languages` must include `vue` even if it is listed in `filetypes`.
 | 
			
		||||
---
 | 
			
		||||
--- `filetypes` is extended here to include Vue SFC.
 | 
			
		||||
 | 
			
		||||
return {
 | 
			
		||||
    init_options = { hostInfo = 'neovim' },
 | 
			
		||||
    cmd = { 'typescript-language-server', '--stdio' },
 | 
			
		||||
    filetypes = {
 | 
			
		||||
        'javascript',
 | 
			
		||||
        'javascriptreact',
 | 
			
		||||
        'javascript.jsx',
 | 
			
		||||
        'typescript',
 | 
			
		||||
        'typescriptreact',
 | 
			
		||||
        'typescript.tsx',
 | 
			
		||||
    },
 | 
			
		||||
    root_markers = { 'tsconfig.json', 'jsconfig.json', 'package.json', '.git' },
 | 
			
		||||
    capabilities = capabilities,
 | 
			
		||||
    on_attach = function(client, bufnr)
 | 
			
		||||
        lsp_keymaps(bufnr)
 | 
			
		||||
        lsp_highlight_document(client)
 | 
			
		||||
    end,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										12
									
								
								nvim/lua/_alpha.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								nvim/lua/_alpha.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
local status_ok, alpha = pcall(require, "alpha")
 | 
			
		||||
if not status_ok then
 | 
			
		||||
    return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local dashboard = require("alpha.themes.dashboard")
 | 
			
		||||
dashboard.section.header.val = {}
 | 
			
		||||
dashboard.section.buttons.val = {}
 | 
			
		||||
dashboard.section.footer.val = "An idiot admires complexity, a genius admires simplicity. -- Terry A. Davis"
 | 
			
		||||
dashboard.opts.opts.noautocmd = true
 | 
			
		||||
 | 
			
		||||
alpha.setup(dashboard.opts)
 | 
			
		||||
							
								
								
									
										36
									
								
								nvim/lua/_autopairs.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								nvim/lua/_autopairs.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
local status_ok, npairs = pcall(require, "nvim-autopairs")
 | 
			
		||||
if not status_ok then
 | 
			
		||||
  return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
npairs.setup {
 | 
			
		||||
    check_ts = true,
 | 
			
		||||
    ts_config = {
 | 
			
		||||
        lua = { "string", "source" },
 | 
			
		||||
        javascript = { "string","template_string"},
 | 
			
		||||
        java = false,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    disable_filetype = { "TelescopePrompt", "spectre_panel" },
 | 
			
		||||
    fast_wrap = {
 | 
			
		||||
        map = "<M-e>",
 | 
			
		||||
        chars = { "{", "[", "(", '"', "'" },
 | 
			
		||||
        pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], "%s+", ""),
 | 
			
		||||
        offset = 0, -- Offset from pattern match
 | 
			
		||||
        end_key = "$",
 | 
			
		||||
        keys = "qwertyuiopzxcvbnmasdfghjkl",
 | 
			
		||||
        check_comma = true,
 | 
			
		||||
        highlight = "PmenuSel",
 | 
			
		||||
        highlight_grey = "LineNr",
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local cmp_autopairs = require("nvim-autopairs.completion.cmp")
 | 
			
		||||
local cmp_status_ok, cmp = pcall(require, "cmp")
 | 
			
		||||
 | 
			
		||||
if not cmp_status_ok then
 | 
			
		||||
  return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done() )
 | 
			
		||||
							
								
								
									
										133
									
								
								nvim/lua/_cmp.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								nvim/lua/_cmp.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,133 @@
 | 
			
		|||
local cmp = require 'cmp'
 | 
			
		||||
 | 
			
		||||
local snip_status_ok, luasnip = pcall(require, "luasnip")
 | 
			
		||||
if not snip_status_ok then
 | 
			
		||||
    return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
require("luasnip/loaders/from_vscode").lazy_load()
 | 
			
		||||
 | 
			
		||||
local check_backspace = function()
 | 
			
		||||
    local col = vim.fn.col "." - 1
 | 
			
		||||
    return col == 0 or vim.fn.getline("."):sub(col, col):match "%s"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local kind_icons = {
 | 
			
		||||
    Text = "",
 | 
			
		||||
    Method = "",
 | 
			
		||||
    Function = "",
 | 
			
		||||
    Constructor = "",
 | 
			
		||||
    Field = "",
 | 
			
		||||
    Variable = "",
 | 
			
		||||
    Class = "",
 | 
			
		||||
    Interface = "",
 | 
			
		||||
    Module = "",
 | 
			
		||||
    Property = "",
 | 
			
		||||
    Unit = "",
 | 
			
		||||
    Value = "",
 | 
			
		||||
    Enum = "",
 | 
			
		||||
    Keyword = "",
 | 
			
		||||
    Snippet = "",
 | 
			
		||||
    Color = "",
 | 
			
		||||
    File = "",
 | 
			
		||||
    Reference = "",
 | 
			
		||||
    Folder = "",
 | 
			
		||||
    EnumMember = "",
 | 
			
		||||
    Constant = "",
 | 
			
		||||
    Struct = "",
 | 
			
		||||
    Event = "",
 | 
			
		||||
    Operator = "",
 | 
			
		||||
    TypeParameter = "",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
-- find more here: https://www.nerdfonts.com/cheat-sheet
 | 
			
		||||
--
 | 
			
		||||
cmp.setup {
 | 
			
		||||
    snippet = {
 | 
			
		||||
        expand = function(args)
 | 
			
		||||
            luasnip.lsp_expand(args.body) -- For `luasnip` users.
 | 
			
		||||
        end,
 | 
			
		||||
    },
 | 
			
		||||
    mapping = {
 | 
			
		||||
        ["<C-k>"] = cmp.mapping.select_prev_item(),
 | 
			
		||||
        ["<C-j>"] = cmp.mapping.select_next_item(),
 | 
			
		||||
        ["<C-b>"] = cmp.mapping(cmp.mapping.scroll_docs(-1), { "i", "c" }),
 | 
			
		||||
        ["<C-f>"] = cmp.mapping(cmp.mapping.scroll_docs(1), { "i", "c" }),
 | 
			
		||||
        ["<C-Space>"] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }),
 | 
			
		||||
        ["<C-y>"] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `<C-y>` mapping.
 | 
			
		||||
        ["<C-e>"] = cmp.mapping {
 | 
			
		||||
            i = cmp.mapping.abort(),
 | 
			
		||||
            c = cmp.mapping.close(),
 | 
			
		||||
        },
 | 
			
		||||
        -- Accept currently selected item. If none selected, `select` first item.
 | 
			
		||||
        -- Set `select` to `false` to only confirm explicitly selected items.
 | 
			
		||||
        ["<CR>"] = cmp.mapping.confirm { select = false },
 | 
			
		||||
        ["<Tab>"] = cmp.mapping(function(fallback)
 | 
			
		||||
            if cmp.visible() then
 | 
			
		||||
                cmp.select_next_item()
 | 
			
		||||
            elseif luasnip.expandable() then
 | 
			
		||||
                luasnip.expand()
 | 
			
		||||
            elseif luasnip.expand_or_jumpable() then
 | 
			
		||||
                luasnip.expand_or_jump()
 | 
			
		||||
            elseif check_backspace() then
 | 
			
		||||
                fallback()
 | 
			
		||||
            else
 | 
			
		||||
                fallback()
 | 
			
		||||
            end
 | 
			
		||||
        end, {
 | 
			
		||||
            "i",
 | 
			
		||||
            "s",
 | 
			
		||||
        }),
 | 
			
		||||
        ["<S-Tab>"] = cmp.mapping(function(fallback)
 | 
			
		||||
            if cmp.visible() then
 | 
			
		||||
                cmp.select_prev_item()
 | 
			
		||||
            elseif luasnip.jumpable(-1) then
 | 
			
		||||
                luasnip.jump(-1)
 | 
			
		||||
            else
 | 
			
		||||
                fallback()
 | 
			
		||||
            end
 | 
			
		||||
        end, {
 | 
			
		||||
            "i",
 | 
			
		||||
            "s",
 | 
			
		||||
        }),
 | 
			
		||||
    },
 | 
			
		||||
    formatting = {
 | 
			
		||||
        fields = { "kind", "abbr", "menu" },
 | 
			
		||||
        format = function(entry, vim_item)
 | 
			
		||||
            -- Kind icons
 | 
			
		||||
            -- vim_item.kind = string.format("%s", kind_icons[vim_item.kind] or vim_item.kind)
 | 
			
		||||
            vim_item.kind = string.format('%s', kind_icons[vim_item.kind] or vim_item.kind)
 | 
			
		||||
            vim_item.menu = ({
 | 
			
		||||
                nvim_lsp = "[LSP]",
 | 
			
		||||
                nvim_lua = "[NVIM_LUA]",
 | 
			
		||||
                luasnip = "[Snippet]",
 | 
			
		||||
                buffer = "[Buffer]",
 | 
			
		||||
                path = "[Path]",
 | 
			
		||||
            })[entry.source.name]
 | 
			
		||||
            return vim_item
 | 
			
		||||
        end,
 | 
			
		||||
    },
 | 
			
		||||
    sources = {
 | 
			
		||||
        { name = "nvim_lsp" },
 | 
			
		||||
        { name = "nvim_lua" },
 | 
			
		||||
        { name = "luasnip" },
 | 
			
		||||
        { name = "buffer" },
 | 
			
		||||
        { name = "path" },
 | 
			
		||||
    },
 | 
			
		||||
    confirm_opts = {
 | 
			
		||||
        behavior = cmp.ConfirmBehavior.Replace,
 | 
			
		||||
        select = false,
 | 
			
		||||
    },
 | 
			
		||||
    window = {
 | 
			
		||||
        documentation = cmp.config.window.bordered(),
 | 
			
		||||
        completion = cmp.config.window.bordered(),
 | 
			
		||||
    },
 | 
			
		||||
    experimental = {
 | 
			
		||||
        ghost_text = true,
 | 
			
		||||
        native_menu = false,
 | 
			
		||||
    },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local cmp_autopairs = require('nvim-autopairs.completion.cmp')
 | 
			
		||||
 | 
			
		||||
cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done())
 | 
			
		||||
							
								
								
									
										55
									
								
								nvim/lua/_gitsigns.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								nvim/lua/_gitsigns.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,55 @@
 | 
			
		|||
local status_ok, gitsigns = pcall(require, "gitsigns")
 | 
			
		||||
if not status_ok then
 | 
			
		||||
    return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
gitsigns.setup {
 | 
			
		||||
  signs = {
 | 
			
		||||
    add          = { text = '┃' },
 | 
			
		||||
    change       = { text = '┃' },
 | 
			
		||||
    delete       = { text = '_' },
 | 
			
		||||
    topdelete    = { text = '‾' },
 | 
			
		||||
    changedelete = { text = '~' },
 | 
			
		||||
    untracked    = { text = '┆' },
 | 
			
		||||
  },
 | 
			
		||||
  signs_staged = {
 | 
			
		||||
    add          = { text = '┃' },
 | 
			
		||||
    change       = { text = '┃' },
 | 
			
		||||
    delete       = { text = '_' },
 | 
			
		||||
    topdelete    = { text = '‾' },
 | 
			
		||||
    changedelete = { text = '~' },
 | 
			
		||||
    untracked    = { text = '┆' },
 | 
			
		||||
  },
 | 
			
		||||
  signs_staged_enable = true,
 | 
			
		||||
  signcolumn = true,  -- Toggle with `:Gitsigns toggle_signs`
 | 
			
		||||
  numhl      = false, -- Toggle with `:Gitsigns toggle_numhl`
 | 
			
		||||
  linehl     = false, -- Toggle with `:Gitsigns toggle_linehl`
 | 
			
		||||
  word_diff  = false, -- Toggle with `:Gitsigns toggle_word_diff`
 | 
			
		||||
  watch_gitdir = {
 | 
			
		||||
    follow_files = true
 | 
			
		||||
  },
 | 
			
		||||
  auto_attach = true,
 | 
			
		||||
  attach_to_untracked = false,
 | 
			
		||||
  current_line_blame = true, -- Toggle with `:Gitsigns toggle_current_line_blame`
 | 
			
		||||
  current_line_blame_opts = {
 | 
			
		||||
    virt_text = true,
 | 
			
		||||
    virt_text_pos = 'eol', -- 'eol' | 'overlay' | 'right_align'
 | 
			
		||||
    delay = 1000,
 | 
			
		||||
    ignore_whitespace = false,
 | 
			
		||||
    virt_text_priority = 100,
 | 
			
		||||
    use_focus = true,
 | 
			
		||||
  },
 | 
			
		||||
  current_line_blame_formatter = '<author>, <author_time:%R> - <summary>',
 | 
			
		||||
  sign_priority = 6,
 | 
			
		||||
  update_debounce = 100,
 | 
			
		||||
  status_formatter = nil, -- Use default
 | 
			
		||||
  max_file_length = 40000, -- Disable if file is longer than this (in lines)
 | 
			
		||||
  preview_config = {
 | 
			
		||||
    -- Options passed to nvim_open_win
 | 
			
		||||
    border = 'single',
 | 
			
		||||
    style = 'minimal',
 | 
			
		||||
    relative = 'cursor',
 | 
			
		||||
    row = 0,
 | 
			
		||||
    col = 1
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										8
									
								
								nvim/lua/_gruvbox.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								nvim/lua/_gruvbox.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
require("gruvbox").setup({
 | 
			
		||||
    overrides = {
 | 
			
		||||
        SignColumn = { bg = "#282828" }
 | 
			
		||||
    },
 | 
			
		||||
    transparent_mode = false,
 | 
			
		||||
})
 | 
			
		||||
vim.o.background = "dark"
 | 
			
		||||
vim.cmd([[colorscheme gruvbox]])
 | 
			
		||||
							
								
								
									
										3
									
								
								nvim/lua/_indentline.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								nvim/lua/_indentline.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
local hooks = require "ibl.hooks"
 | 
			
		||||
hooks.register(hooks.type.WHITESPACE, hooks.builtin.hide_first_space_indent_level)
 | 
			
		||||
require("ibl").setup()
 | 
			
		||||
							
								
								
									
										142
									
								
								nvim/lua/_keymaps.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								nvim/lua/_keymaps.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,142 @@
 | 
			
		|||
local opts = { noremap = true, silent = true }
 | 
			
		||||
local term_opts = { silent = true }
 | 
			
		||||
local keymap = vim.api.nvim_set_keymap
 | 
			
		||||
 | 
			
		||||
-- Set leader to space
 | 
			
		||||
keymap("", "<Space>", "<Nop>", opts)
 | 
			
		||||
vim.g.mapleader = " "
 | 
			
		||||
vim.g.maplocalleader = " "
 | 
			
		||||
 | 
			
		||||
keymap("n", "<leader>e", "<cmd>NvimTreeToggle<cr>", opts)
 | 
			
		||||
 | 
			
		||||
-- Old config...
 | 
			
		||||
 | 
			
		||||
ZenActive = true
 | 
			
		||||
 | 
			
		||||
local function toggle_zen()
 | 
			
		||||
    if not ZenActive then
 | 
			
		||||
        ZenActive = true
 | 
			
		||||
 | 
			
		||||
        vim.cmd("set nonumber")
 | 
			
		||||
        vim.cmd("set norelativenumber")
 | 
			
		||||
        vim.lsp.inlay_hint.enable(false)
 | 
			
		||||
    else
 | 
			
		||||
        ZenActive = false
 | 
			
		||||
 | 
			
		||||
        vim.cmd("set relativenumber")
 | 
			
		||||
        vim.cmd("set number")
 | 
			
		||||
        vim.lsp.inlay_hint.enable(true)
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
vim.api.nvim_create_user_command("ToggleZen", toggle_zen, {})
 | 
			
		||||
 | 
			
		||||
keymap("n", "<C-q>", "<cmd>ToggleZen<cr>", opts)
 | 
			
		||||
keymap("n", "<leader>h", "<cmd>nohl<cr>", opts)
 | 
			
		||||
 | 
			
		||||
local function format_with_prettier()
 | 
			
		||||
    vim.fn.system('pnpm exec prettier --write ' .. vim.fn.expand('%:p'))
 | 
			
		||||
    vim.cmd('edit') -- Reload the buffer after formatting
 | 
			
		||||
end
 | 
			
		||||
vim.api.nvim_create_user_command("FormatWithPrettier", format_with_prettier, {})
 | 
			
		||||
keymap("n", "<leader>pr", "<cmd>write<cr><cmd>FormatWithPrettier<cr>", opts)
 | 
			
		||||
 | 
			
		||||
-- Modes
 | 
			
		||||
--   normal_mode = "n",
 | 
			
		||||
--   insert_mode = "i",
 | 
			
		||||
--   visual_mode = "v",
 | 
			
		||||
--   visual_block_mode = "x",
 | 
			
		||||
--   term_mode = "t",
 | 
			
		||||
--   command_mode = "c",
 | 
			
		||||
 | 
			
		||||
keymap("n", "<C-h>", "<C-w>h", opts)
 | 
			
		||||
keymap("n", "<C-j>", "<C-w>j", opts)
 | 
			
		||||
keymap("n", "<C-k>", "<C-w>k", opts)
 | 
			
		||||
keymap("n", "<C-l>", "<C-w>l", opts)
 | 
			
		||||
keymap("n", "<C-c>", "<CMD>%bd|e#|bd#<CR>", opts)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
keymap("n", "<C-Up>", ":resize +2<CR>", opts)
 | 
			
		||||
keymap("n", "<C-Down>", ":resize -2<CR>", opts)
 | 
			
		||||
keymap("n", "<C-Left>", ":vertical resize -2<CR>", opts)
 | 
			
		||||
keymap("n", "<C-Right>", ":vertical resize +2<CR>", opts)
 | 
			
		||||
 | 
			
		||||
-- Navigate buffers
 | 
			
		||||
keymap("n", "<S-l>", ":bnext<CR>", opts)
 | 
			
		||||
keymap("n", "<S-h>", ":bprevious<CR>", opts)
 | 
			
		||||
 | 
			
		||||
-- Visual --
 | 
			
		||||
-- Stay in indent mode
 | 
			
		||||
keymap("v", "<", "<gv", opts)
 | 
			
		||||
keymap("v", ">", ">gv", opts)
 | 
			
		||||
keymap("v", "p", '"_dP', opts)
 | 
			
		||||
 | 
			
		||||
-- Move text up and down
 | 
			
		||||
keymap("x", "<C-j>", ":move '>+1<CR>gv-gv", opts)
 | 
			
		||||
keymap("x", "<C-k>", ":move '<-2<CR>gv-gv", opts)
 | 
			
		||||
 | 
			
		||||
keymap(
 | 
			
		||||
    "n",
 | 
			
		||||
    "<leader>tm",
 | 
			
		||||
    "<cmd>lua require 'telescope.builtin'.lsp_document_symbols({ symbols = { 'method', 'function' } })<cr>",
 | 
			
		||||
    opts
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
keymap(
 | 
			
		||||
    "n",
 | 
			
		||||
    "<leader>f",
 | 
			
		||||
    "<cmd>lua require'telescope.builtin'.find_files(require('telescope.themes').get_dropdown({ previewer = false }))<cr>",
 | 
			
		||||
    opts
 | 
			
		||||
)
 | 
			
		||||
keymap("n", "<leader>tg", "<cmd>Telescope live_grep<cr>", opts)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
keymap("n", "<leader>w", "<cmd>lua vim.lsp.buf.format({async = false})<cr><cmd>w<cr>", opts)
 | 
			
		||||
keymap("n", "<leader>c", "<cmd>bdelete<cr>", opts)
 | 
			
		||||
 | 
			
		||||
keymap(
 | 
			
		||||
    "n",
 | 
			
		||||
    "<A-]>",
 | 
			
		||||
    [[<cmd>set so=999<cr> <cmd>/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<cr>jjj^0 <cmd>nohl<cr> <cmd>set so=6<cr>]],
 | 
			
		||||
    opts
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
keymap(
 | 
			
		||||
    "n",
 | 
			
		||||
    "<A-[>",
 | 
			
		||||
    [[<cmd>set so=999<cr> <cmd>?\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<cr>nnjjj^0 <cmd>nohl<cr> <cmd>set so=6<cr>]],
 | 
			
		||||
    opts
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
vim.g.font_size = 10
 | 
			
		||||
vim.o.guifont = "JetbrainsMono Nerd Font:h" .. vim.g.font_size
 | 
			
		||||
 | 
			
		||||
keymap("n", "<C-e>", "5<C-e>", opts)
 | 
			
		||||
 | 
			
		||||
vim.keymap.set(
 | 
			
		||||
    "n",
 | 
			
		||||
    "<C-_>",
 | 
			
		||||
    [[<cmd>lua vim.g.font_size = vim.g.font_size - 1<CR><cmd>lua vim.o.guifont='JetbrainsMono Nerd Font:h'..vim.g.font_size<CR>]]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
vim.keymap.set(
 | 
			
		||||
    "n",
 | 
			
		||||
    "<C-+>",
 | 
			
		||||
    [[<cmd>lua vim.g.font_size = vim.g.font_size + 1<CR><cmd>lua vim.o.guifont='JetbrainsMono Nerd Font:h'..vim.g.font_size<CR>]]
 | 
			
		||||
)
 | 
			
		||||
keymap("n", "\\", "<cmd>ToggleTerm<cr>", opts)
 | 
			
		||||
keymap("t", "<leader>\\", "<cmd>ToggleTerm<cr>", opts)
 | 
			
		||||
 | 
			
		||||
vim.api.nvim_set_keymap(
 | 
			
		||||
    "v",
 | 
			
		||||
    "<leader>re",
 | 
			
		||||
    [[ <Esc><Cmd>lua require('refactoring').refactor('Extract Function')<CR>]],
 | 
			
		||||
    { noremap = true, silent = true, expr = false }
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
vim.api.nvim_set_keymap(
 | 
			
		||||
    "v",
 | 
			
		||||
    "<leader>rf",
 | 
			
		||||
    [[ <Esc><Cmd>lua require('refactoring').refactor('Extract Function To File')<CR>]],
 | 
			
		||||
    { noremap = true, silent = true, expr = false }
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										120
									
								
								nvim/lua/_lsp.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								nvim/lua/_lsp.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,120 @@
 | 
			
		|||
local function supported_by_prettier(filetype)
 | 
			
		||||
    local filetypes = {
 | 
			
		||||
        'javascript',
 | 
			
		||||
        'javascriptreact',
 | 
			
		||||
        'javascript.jsx',
 | 
			
		||||
        'typescript',
 | 
			
		||||
        'typescriptreact',
 | 
			
		||||
        'typescript.tsx',
 | 
			
		||||
        'vue',
 | 
			
		||||
        'svelte',
 | 
			
		||||
        'astro',
 | 
			
		||||
        -- html
 | 
			
		||||
        'aspnetcorerazor',
 | 
			
		||||
        'astro',
 | 
			
		||||
        'astro-markdown',
 | 
			
		||||
        'blade',
 | 
			
		||||
        'clojure',
 | 
			
		||||
        'django-html',
 | 
			
		||||
        'htmldjango',
 | 
			
		||||
        'edge',
 | 
			
		||||
        'eelixir', -- vim ft
 | 
			
		||||
        'elixir',
 | 
			
		||||
        'ejs',
 | 
			
		||||
        'erb',
 | 
			
		||||
        'eruby', -- vim ft
 | 
			
		||||
        'gohtml',
 | 
			
		||||
        'gohtmltmpl',
 | 
			
		||||
        'haml',
 | 
			
		||||
        'handlebars',
 | 
			
		||||
        'hbs',
 | 
			
		||||
        'html',
 | 
			
		||||
        'htmlangular',
 | 
			
		||||
        'html-eex',
 | 
			
		||||
        'heex',
 | 
			
		||||
        'jade',
 | 
			
		||||
        'leaf',
 | 
			
		||||
        'liquid',
 | 
			
		||||
        'markdown',
 | 
			
		||||
        'mdx',
 | 
			
		||||
        'mustache',
 | 
			
		||||
        'njk',
 | 
			
		||||
        'nunjucks',
 | 
			
		||||
        'php',
 | 
			
		||||
        'razor',
 | 
			
		||||
        'slim',
 | 
			
		||||
        'twig',
 | 
			
		||||
        -- css
 | 
			
		||||
        'css',
 | 
			
		||||
        'less',
 | 
			
		||||
        'postcss',
 | 
			
		||||
        'sass',
 | 
			
		||||
        'scss',
 | 
			
		||||
        'stylus',
 | 
			
		||||
        'sugarss',
 | 
			
		||||
        -- js
 | 
			
		||||
        'javascript',
 | 
			
		||||
        'javascriptreact',
 | 
			
		||||
        'reason',
 | 
			
		||||
        'rescript',
 | 
			
		||||
        'typescript',
 | 
			
		||||
        'typescriptreact',
 | 
			
		||||
        -- mixed
 | 
			
		||||
        'vue',
 | 
			
		||||
        'svelte',
 | 
			
		||||
        'templ',
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for _, v in ipairs(filetypes) do
 | 
			
		||||
        if v == filetype then
 | 
			
		||||
            return true
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
    return false
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local config = {
 | 
			
		||||
    virtual_text = true,
 | 
			
		||||
    signs = {
 | 
			
		||||
        text = {
 | 
			
		||||
            [vim.diagnostic.severity.ERROR] = '',
 | 
			
		||||
            [vim.diagnostic.severity.WARN] = '',
 | 
			
		||||
            [vim.diagnostic.severity.INFO] = '',
 | 
			
		||||
            [vim.diagnostic.severity.HINT] = '',
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    update_in_insert = true,
 | 
			
		||||
    underline = true,
 | 
			
		||||
    severity_sort = true,
 | 
			
		||||
    float = {
 | 
			
		||||
        focusable = false,
 | 
			
		||||
        style = "normal",
 | 
			
		||||
        border = "rounded",
 | 
			
		||||
        source = "always",
 | 
			
		||||
        header = "",
 | 
			
		||||
        prefix = "",
 | 
			
		||||
    },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
vim.filetype.add({
 | 
			
		||||
    extension = {
 | 
			
		||||
        svx = "markdown",
 | 
			
		||||
    }
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
vim.diagnostic.config(config)
 | 
			
		||||
 | 
			
		||||
vim.lsp.buf.hover({ border = "rounded" })
 | 
			
		||||
vim.lsp.buf.signature_help({ border = "rounded" })
 | 
			
		||||
vim.lsp.enable({
 | 
			
		||||
    'clangd',
 | 
			
		||||
    'luals',
 | 
			
		||||
 | 
			
		||||
    'svelte',
 | 
			
		||||
    'tailwindcss',
 | 
			
		||||
    "ts_ls",
 | 
			
		||||
    "cssls",
 | 
			
		||||
    "eslint",
 | 
			
		||||
    "mdx_analyzer",
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										103
									
								
								nvim/lua/_lualine.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								nvim/lua/_lualine.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,103 @@
 | 
			
		|||
local status_ok, lualine = pcall(require, "lualine")
 | 
			
		||||
if not status_ok then
 | 
			
		||||
    return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local branch = {
 | 
			
		||||
    "branch",
 | 
			
		||||
    icons_enabled = true,
 | 
			
		||||
    icon = "",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local diff = {
 | 
			
		||||
    "diff",
 | 
			
		||||
    colored = false,
 | 
			
		||||
    symbols = { added = " ", modified = " ", removed = " " }, -- changes diff symbols
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local location = {
 | 
			
		||||
    "location",
 | 
			
		||||
    padding = 0,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local colors = {
 | 
			
		||||
    blue = "#458588",
 | 
			
		||||
    green = "#98971a",
 | 
			
		||||
    purple = "#b16286",
 | 
			
		||||
    cyan = "#83a598",
 | 
			
		||||
    red1 = "#cc241d",
 | 
			
		||||
    yellow = "#d79921",
 | 
			
		||||
    fg = "#ebdbb2",
 | 
			
		||||
    bg = "#282828",
 | 
			
		||||
    gray1 = "#928374",
 | 
			
		||||
    gray2 = "#7c6f64",
 | 
			
		||||
    gray3 = "#665c54",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local gruvbox = {
 | 
			
		||||
    normal = {
 | 
			
		||||
        a = { fg = colors.bg, bg = colors.blue, gui = "bold" },
 | 
			
		||||
        c = { fg = colors.bg, bg = colors.blue, gui = "bold" },
 | 
			
		||||
        z = { fg = colors.bg, bg = colors.blue, gui = "bold" },
 | 
			
		||||
    },
 | 
			
		||||
    command = {
 | 
			
		||||
        a = { fg = colors.bg, bg = colors.yellow, gui = "bold" },
 | 
			
		||||
        c = { fg = colors.bg, bg = colors.yellow, gui = "bold" },
 | 
			
		||||
        z = { fg = colors.bg, bg = colors.yellow, gui = "bold" },
 | 
			
		||||
    },
 | 
			
		||||
    insert = {
 | 
			
		||||
        a = { fg = colors.bg, bg = colors.green, gui = "bold" },
 | 
			
		||||
        c = { fg = colors.bg, bg = colors.green, gui = "bold" },
 | 
			
		||||
        z = { fg = colors.bg, bg = colors.green, gui = "bold" },
 | 
			
		||||
    },
 | 
			
		||||
    visual = {
 | 
			
		||||
        a = { fg = colors.bg, bg = colors.purple, gui = "bold" },
 | 
			
		||||
        c = { fg = colors.bg, bg = colors.purple, gui = "bold" },
 | 
			
		||||
        z = { fg = colors.bg, bg = colors.purple, gui = "bold" },
 | 
			
		||||
    },
 | 
			
		||||
    terminal = {
 | 
			
		||||
        a = { fg = colors.bg, bg = colors.cyan, gui = "bold" },
 | 
			
		||||
        c = { fg = colors.bg, bg = colors.cyan, gui = "bold" },
 | 
			
		||||
        z = { fg = colors.bg, bg = colors.cyan, gui = "bold" },
 | 
			
		||||
    },
 | 
			
		||||
    replace = {
 | 
			
		||||
        a = { fg = colors.bg, bg = colors.red1, gui = "bold" },
 | 
			
		||||
        c = { fg = colors.bg, bg = colors.red1, gui = "bold" },
 | 
			
		||||
        z = { fg = colors.bg, bg = colors.red1, gui = "bold" },
 | 
			
		||||
    },
 | 
			
		||||
    inactive = {
 | 
			
		||||
        a = { fg = colors.gray1, bg = colors.bg, gui = "bold" },
 | 
			
		||||
        c = { fg = colors.gray1, bg = colors.bg, gui = "bold" },
 | 
			
		||||
        z = { fg = colors.gray1, bg = colors.bg, gui = "bold" },
 | 
			
		||||
    },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
lualine.setup({
 | 
			
		||||
    options = {
 | 
			
		||||
        icons_enabled = true,
 | 
			
		||||
        theme = gruvbox,
 | 
			
		||||
        component_separators = { left = "", right = "" },
 | 
			
		||||
        section_separators = { left = "", right = "" },
 | 
			
		||||
        disabled_filetypes = { "dashboard", "NvimTree", "Outline" },
 | 
			
		||||
        always_divide_middle = true,
 | 
			
		||||
    },
 | 
			
		||||
    sections = {
 | 
			
		||||
        lualine_a = { "filename" },
 | 
			
		||||
        lualine_b = { { "diagnostics", colored = false }},
 | 
			
		||||
        lualine_c = {},
 | 
			
		||||
        lualine_x = {branch, diff},
 | 
			
		||||
        lualine_y = { },
 | 
			
		||||
        lualine_z = {  },
 | 
			
		||||
    },
 | 
			
		||||
    inactive_sections = {
 | 
			
		||||
        lualine_a = { "filename" },
 | 
			
		||||
        lualine_b = {},
 | 
			
		||||
        lualine_c = {},
 | 
			
		||||
        lualine_x = {},
 | 
			
		||||
        lualine_y = {},
 | 
			
		||||
        lualine_z = {},
 | 
			
		||||
    },
 | 
			
		||||
    tabline = {},
 | 
			
		||||
    extensions = {},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										75
									
								
								nvim/lua/_nvim_tree.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								nvim/lua/_nvim_tree.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,75 @@
 | 
			
		|||
local status_ok, nvim_tree = pcall(require, "nvim-tree")
 | 
			
		||||
if not status_ok then
 | 
			
		||||
    return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function my_on_attach(bufnr)
 | 
			
		||||
    local api = require "nvim-tree.api"
 | 
			
		||||
 | 
			
		||||
    local function opts(desc)
 | 
			
		||||
        return { desc = "nvim-tree: " .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    -- default mappings
 | 
			
		||||
    api.config.mappings.default_on_attach(bufnr)
 | 
			
		||||
 | 
			
		||||
    -- custom mappings
 | 
			
		||||
    vim.keymap.set('n', '<C-t>', api.tree.change_root_to_parent, opts('Up'))
 | 
			
		||||
    vim.keymap.set('n', '?', api.tree.toggle_help, opts('Help'))
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
nvim_tree.setup({
 | 
			
		||||
    on_attach = my_on_attach,
 | 
			
		||||
    actions = {
 | 
			
		||||
        open_file = {
 | 
			
		||||
            quit_on_open = true,
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    update_focused_file = {
 | 
			
		||||
        enable = true,
 | 
			
		||||
        update_cwd = false,
 | 
			
		||||
    },
 | 
			
		||||
    renderer = {
 | 
			
		||||
        root_folder_modifier = ":t",
 | 
			
		||||
        icons = {
 | 
			
		||||
            glyphs = {
 | 
			
		||||
                default = "",
 | 
			
		||||
                symlink = "",
 | 
			
		||||
                folder = {
 | 
			
		||||
                    arrow_open = "",
 | 
			
		||||
                    arrow_closed = "",
 | 
			
		||||
                    default = "",
 | 
			
		||||
                    open = "",
 | 
			
		||||
                    empty = "",
 | 
			
		||||
                    empty_open = "",
 | 
			
		||||
                    symlink = "",
 | 
			
		||||
                    symlink_open = "",
 | 
			
		||||
                },
 | 
			
		||||
                git = {
 | 
			
		||||
                    unstaged = "",
 | 
			
		||||
                    staged = "S",
 | 
			
		||||
                    unmerged = "",
 | 
			
		||||
                    renamed = "➜",
 | 
			
		||||
                    untracked = "U",
 | 
			
		||||
                    deleted = "",
 | 
			
		||||
                    ignored = "◌",
 | 
			
		||||
                },
 | 
			
		||||
            },
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
    diagnostics = {
 | 
			
		||||
        enable = false,
 | 
			
		||||
        show_on_dirs = true,
 | 
			
		||||
        icons = {
 | 
			
		||||
            hint = "",
 | 
			
		||||
            info = "",
 | 
			
		||||
            warning = "",
 | 
			
		||||
            error = "",
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
    view = {
 | 
			
		||||
        width = 36,
 | 
			
		||||
        side = "right",
 | 
			
		||||
    },
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										41
									
								
								nvim/lua/_options.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								nvim/lua/_options.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
vim.g.loaded_netrw = 1
 | 
			
		||||
vim.g.loaded_netrwPlugin = 1
 | 
			
		||||
vim.opt.clipboard = "unnamedplus"
 | 
			
		||||
vim.opt.completeopt = "menuone,noselect"
 | 
			
		||||
vim.opt.fileencoding = "utf-32"
 | 
			
		||||
vim.opt.ignorecase = true
 | 
			
		||||
vim.opt.pumheight = 12
 | 
			
		||||
vim.opt.splitbelow = true
 | 
			
		||||
vim.opt.splitright = true
 | 
			
		||||
vim.opt.swapfile = false
 | 
			
		||||
vim.opt.termguicolors = true
 | 
			
		||||
vim.opt.undofile = true
 | 
			
		||||
vim.opt.updatetime = 300
 | 
			
		||||
vim.opt.signcolumn = "yes"
 | 
			
		||||
vim.opt.wrap = false
 | 
			
		||||
vim.opt.scrolloff = 6
 | 
			
		||||
vim.opt.sidescrolloff = 6
 | 
			
		||||
vim.opt.showmode = false
 | 
			
		||||
vim.opt.colorcolumn = "100"
 | 
			
		||||
vim.opt.expandtab = true
 | 
			
		||||
vim.opt.shiftwidth = 4
 | 
			
		||||
vim.opt.tabstop = 4
 | 
			
		||||
vim.opt.autoindent = true
 | 
			
		||||
vim.opt.showtabline = 0
 | 
			
		||||
vim.opt.cursorline = false
 | 
			
		||||
vim.opt.numberwidth = 4
 | 
			
		||||
vim.opt.shortmess:append("c")
 | 
			
		||||
vim.opt.laststatus = 1
 | 
			
		||||
vim.cmd('let g:neovide_cursor_vfx_mode = "pixiedust"')
 | 
			
		||||
vim.cmd("let g:neovide_cursor_vfx_particle_density = 32.0")
 | 
			
		||||
 | 
			
		||||
-- lastplace
 | 
			
		||||
vim.api.nvim_create_autocmd('BufReadPost', {
 | 
			
		||||
    callback = function()
 | 
			
		||||
        local mark = vim.api.nvim_buf_get_mark(0, '"')
 | 
			
		||||
        local lcount = vim.api.nvim_buf_line_count(0)
 | 
			
		||||
        if mark[1] > 0 and mark[1] <= lcount then
 | 
			
		||||
            vim.api.nvim_win_set_cursor(0, mark)
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										38
									
								
								nvim/lua/_plugins.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								nvim/lua/_plugins.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
require("_plugins_bootstrap")
 | 
			
		||||
require("lazy").setup({
 | 
			
		||||
    spec = {
 | 
			
		||||
        -- Core
 | 
			
		||||
        { 'nvim-lua/plenary.nvim' },
 | 
			
		||||
 | 
			
		||||
        -- Navigation
 | 
			
		||||
        { "kyazdani42/nvim-tree.lua" },
 | 
			
		||||
        { 'nvim-telescope/telescope.nvim' },
 | 
			
		||||
        { "slarwise/telescope-args.nvim" },
 | 
			
		||||
 | 
			
		||||
        -- Aesthetics
 | 
			
		||||
        { "lukas-reineke/indent-blankline.nvim" },
 | 
			
		||||
        { "nvim-treesitter/nvim-treesitter", },
 | 
			
		||||
        { "kyazdani42/nvim-web-devicons" },
 | 
			
		||||
        { "nvim-lualine/lualine.nvim" },
 | 
			
		||||
        { "ellisonleao/gruvbox.nvim" },
 | 
			
		||||
        { "lewis6991/gitsigns.nvim" },
 | 
			
		||||
        { "goolord/alpha-nvim" },
 | 
			
		||||
        { "xiyaowong/transparent.nvim" },
 | 
			
		||||
 | 
			
		||||
        -- Auto-complete
 | 
			
		||||
        { "hrsh7th/nvim-cmp" },
 | 
			
		||||
        { "hrsh7th/cmp-nvim-lsp" },
 | 
			
		||||
        { "hrsh7th/cmp-nvim-lua" },
 | 
			
		||||
        { "hrsh7th/cmp-buffer" },
 | 
			
		||||
        { "hrsh7th/cmp-path" },
 | 
			
		||||
        { "hrsh7th/cmp-cmdline" },
 | 
			
		||||
        { "saadparwaiz1/cmp_luasnip" },
 | 
			
		||||
        { "windwp/nvim-autopairs" },
 | 
			
		||||
        { "L3MON4D3/LuaSnip" },
 | 
			
		||||
 | 
			
		||||
        -- Lsp
 | 
			
		||||
        { "neovim/nvim-lspconfig" },
 | 
			
		||||
    },
 | 
			
		||||
    install = { colorscheme = { "gruvbox" } },
 | 
			
		||||
    checker = { enabled = true },
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										17
									
								
								nvim/lua/_plugins_bootstrap.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								nvim/lua/_plugins_bootstrap.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
 | 
			
		||||
if not (vim.uv or vim.loop).fs_stat(lazypath) then
 | 
			
		||||
    local lazyrepo = "https://github.com/folke/lazy.nvim.git"
 | 
			
		||||
    local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
 | 
			
		||||
    if vim.v.shell_error ~= 0 then
 | 
			
		||||
        vim.api.nvim_echo({
 | 
			
		||||
            { "Failed to clone lazy.nvim:\n", "ErrorMsg" },
 | 
			
		||||
            { out,                            "WarningMsg" },
 | 
			
		||||
            { "\nPress any key to exit..." },
 | 
			
		||||
        }, true, {})
 | 
			
		||||
        vim.fn.getchar()
 | 
			
		||||
        os.exit(1)
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
vim.opt.rtp:prepend(lazypath)
 | 
			
		||||
vim.g.mapleader = " "
 | 
			
		||||
vim.g.maplocalleader = "\\"
 | 
			
		||||
							
								
								
									
										98
									
								
								nvim/lua/_telescope.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								nvim/lua/_telescope.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,98 @@
 | 
			
		|||
local status_ok, telescope = pcall(require, "telescope")
 | 
			
		||||
if not status_ok then
 | 
			
		||||
    return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
telescope.load_extension("args")
 | 
			
		||||
local actions = require("telescope.actions")
 | 
			
		||||
 | 
			
		||||
telescope.setup({
 | 
			
		||||
    defaults = {
 | 
			
		||||
 | 
			
		||||
        file_ignore_patterns = { "doxygen", "^build", "^tests/assets", ".*\\.png$" },
 | 
			
		||||
        prompt_prefix = " ",
 | 
			
		||||
        selection_caret = " ",
 | 
			
		||||
        path_display = { "truncate" },
 | 
			
		||||
 | 
			
		||||
        mappings = {
 | 
			
		||||
            i = {
 | 
			
		||||
                ["<C-n>"] = actions.cycle_history_next,
 | 
			
		||||
                ["<C-p>"] = actions.cycle_history_prev,
 | 
			
		||||
 | 
			
		||||
                ["<C-j>"] = actions.move_selection_next,
 | 
			
		||||
                ["<C-k>"] = actions.move_selection_previous,
 | 
			
		||||
 | 
			
		||||
                ["<C-c>"] = actions.close,
 | 
			
		||||
 | 
			
		||||
                ["<Down>"] = actions.move_selection_next,
 | 
			
		||||
                ["<Up>"] = actions.move_selection_previous,
 | 
			
		||||
 | 
			
		||||
                ["<CR>"] = actions.select_default,
 | 
			
		||||
                ["<C-x>"] = actions.select_horizontal,
 | 
			
		||||
                ["<C-v>"] = actions.select_vertical,
 | 
			
		||||
                ["<C-t>"] = actions.select_tab,
 | 
			
		||||
 | 
			
		||||
                ["<C-u>"] = actions.preview_scrolling_up,
 | 
			
		||||
                ["<C-d>"] = actions.preview_scrolling_down,
 | 
			
		||||
 | 
			
		||||
                ["<PageUp>"] = actions.results_scrolling_up,
 | 
			
		||||
                ["<PageDown>"] = actions.results_scrolling_down,
 | 
			
		||||
 | 
			
		||||
                ["<Tab>"] = actions.toggle_selection + actions.move_selection_worse,
 | 
			
		||||
                ["<S-Tab>"] = actions.toggle_selection + actions.move_selection_better,
 | 
			
		||||
                ["<C-q>"] = actions.send_to_qflist + actions.open_qflist,
 | 
			
		||||
                ["<M-q>"] = actions.send_selected_to_qflist + actions.open_qflist,
 | 
			
		||||
                ["<C-l>"] = actions.complete_tag,
 | 
			
		||||
                ["<C-_>"] = actions.which_key, -- keys from pressing <C-/>
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            n = {
 | 
			
		||||
                ["<esc>"] = actions.close,
 | 
			
		||||
                ["<CR>"] = actions.select_default,
 | 
			
		||||
                ["<C-x>"] = actions.select_horizontal,
 | 
			
		||||
                ["<C-v>"] = actions.select_vertical,
 | 
			
		||||
                ["<C-t>"] = actions.select_tab,
 | 
			
		||||
 | 
			
		||||
                ["<Tab>"] = actions.toggle_selection + actions.move_selection_worse,
 | 
			
		||||
                ["<S-Tab>"] = actions.toggle_selection + actions.move_selection_better,
 | 
			
		||||
                ["<C-q>"] = actions.send_to_qflist + actions.open_qflist,
 | 
			
		||||
                ["<M-q>"] = actions.send_selected_to_qflist + actions.open_qflist,
 | 
			
		||||
 | 
			
		||||
                ["j"] = actions.move_selection_next,
 | 
			
		||||
                ["k"] = actions.move_selection_previous,
 | 
			
		||||
                ["H"] = actions.move_to_top,
 | 
			
		||||
                ["M"] = actions.move_to_middle,
 | 
			
		||||
                ["L"] = actions.move_to_bottom,
 | 
			
		||||
 | 
			
		||||
                ["<Down>"] = actions.move_selection_next,
 | 
			
		||||
                ["<Up>"] = actions.move_selection_previous,
 | 
			
		||||
                ["gg"] = actions.move_to_top,
 | 
			
		||||
                ["G"] = actions.move_to_bottom,
 | 
			
		||||
 | 
			
		||||
                ["<C-u>"] = actions.preview_scrolling_up,
 | 
			
		||||
                ["<C-d>"] = actions.preview_scrolling_down,
 | 
			
		||||
 | 
			
		||||
                ["<PageUp>"] = actions.results_scrolling_up,
 | 
			
		||||
                ["<PageDown>"] = actions.results_scrolling_down,
 | 
			
		||||
 | 
			
		||||
                ["?"] = actions.which_key,
 | 
			
		||||
            },
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
    pickers = {
 | 
			
		||||
        -- Default configuration for builtin pickers goes here:
 | 
			
		||||
        -- picker_name = {
 | 
			
		||||
        --   picker_config_key = value,
 | 
			
		||||
        --   ...
 | 
			
		||||
        -- }
 | 
			
		||||
        -- Now the picker_config_key will be applied every time you call this
 | 
			
		||||
        -- builtin picker
 | 
			
		||||
    },
 | 
			
		||||
    extensions = {
 | 
			
		||||
        -- Your extension configuration goes here:
 | 
			
		||||
        -- extension_name = {
 | 
			
		||||
        --   extension_config_key = value,
 | 
			
		||||
        -- }
 | 
			
		||||
        -- please take a look at the readme of the extension you want to configure
 | 
			
		||||
    },
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										20
									
								
								nvim/lua/_treesitter.lua
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								nvim/lua/_treesitter.lua
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
local configs = require("nvim-treesitter.configs")
 | 
			
		||||
 | 
			
		||||
configs.setup({
 | 
			
		||||
	ensure_installed = "all",
 | 
			
		||||
	sync_install = false,
 | 
			
		||||
	ignore_install = { "" },
 | 
			
		||||
	autopairs = {
 | 
			
		||||
		enable = true,
 | 
			
		||||
	},
 | 
			
		||||
	context_commenting = {
 | 
			
		||||
		enable = true,
 | 
			
		||||
		enable_autocmd = false,
 | 
			
		||||
	},
 | 
			
		||||
	highlight = {
 | 
			
		||||
		enable = true,
 | 
			
		||||
		disable = { "" },
 | 
			
		||||
		additional_vim_regex_highlighting = true,
 | 
			
		||||
	},
 | 
			
		||||
	-- indent = { enable = true, disable = { "yaml" } },
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										28
									
								
								nvim/spell/en.utf-8.add
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								nvim/spell/en.utf-8.add
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
intranquility
 | 
			
		||||
uv
 | 
			
		||||
shader
 | 
			
		||||
rasterizer
 | 
			
		||||
rasterization
 | 
			
		||||
applesthepi
 | 
			
		||||
rasterize
 | 
			
		||||
#OLINR
 | 
			
		||||
NOLINT
 | 
			
		||||
NOLINR/!
 | 
			
		||||
glm
 | 
			
		||||
mat4
 | 
			
		||||
skybox
 | 
			
		||||
TransformComponent
 | 
			
		||||
param
 | 
			
		||||
swapchain
 | 
			
		||||
struct
 | 
			
		||||
readonly
 | 
			
		||||
writeonly
 | 
			
		||||
samplerCueb
 | 
			
		||||
samplerCube
 | 
			
		||||
Vulkan
 | 
			
		||||
accessor
 | 
			
		||||
const
 | 
			
		||||
cmd
 | 
			
		||||
str
 | 
			
		||||
RDB
 | 
			
		||||
Rasterized
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								nvim/spell/en.utf-8.add.spl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								nvim/spell/en.utf-8.add.spl
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	Add table
		
		Reference in a new issue