diff --git a/README.md b/README.md
index 41139505..64e7c358 100644
--- a/README.md
+++ b/README.md
@@ -74,7 +74,7 @@ too - it's ignored in the kickstart repo to make maintenance easier, but it's
Linux and Mac
```sh
-git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim
+git clone https://github.com/shahzod-davlatov/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim
```
diff --git a/init.lua b/init.lua
index b98ffc61..158642a9 100644
--- a/init.lua
+++ b/init.lua
@@ -91,7 +91,7 @@ vim.g.mapleader = ' '
vim.g.maplocalleader = ' '
-- Set to true if you have a Nerd Font installed and selected in the terminal
-vim.g.have_nerd_font = false
+vim.g.have_nerd_font = true
-- [[ Setting options ]]
-- See `:help vim.o`
@@ -269,20 +269,6 @@ require('lazy').setup({
--
-- Here is a more advanced example where we pass configuration
-- options to `gitsigns.nvim`.
- --
- -- See `:help gitsigns` to understand what the configuration keys do
- { -- Adds git related signs to the gutter, as well as utilities for managing changes
- 'lewis6991/gitsigns.nvim',
- opts = {
- signs = {
- add = { text = '+' },
- change = { text = '~' },
- delete = { text = '_' },
- topdelete = { text = '‾' },
- changedelete = { text = '~' },
- },
- },
- },
-- NOTE: Plugins can also be configured to run Lua code when they are loaded.
--
@@ -475,266 +461,6 @@ require('lazy').setup({
},
},
},
- {
- -- Main LSP Configuration
- 'neovim/nvim-lspconfig',
- dependencies = {
- -- Automatically install LSPs and related tools to stdpath for Neovim
- -- Mason must be loaded before its dependents so we need to set it up here.
- -- NOTE: `opts = {}` is the same as calling `require('mason').setup({})`
- { 'mason-org/mason.nvim', opts = {} },
- 'mason-org/mason-lspconfig.nvim',
- 'WhoIsSethDaniel/mason-tool-installer.nvim',
-
- -- Useful status updates for LSP.
- { 'j-hui/fidget.nvim', opts = {} },
-
- -- Allows extra capabilities provided by blink.cmp
- 'saghen/blink.cmp',
- },
- config = function()
- -- Brief aside: **What is LSP?**
- --
- -- LSP is an initialism you've probably heard, but might not understand what it is.
- --
- -- LSP stands for Language Server Protocol. It's a protocol that helps editors
- -- and language tooling communicate in a standardized fashion.
- --
- -- In general, you have a "server" which is some tool built to understand a particular
- -- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers
- -- (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone
- -- processes that communicate with some "client" - in this case, Neovim!
- --
- -- LSP provides Neovim with features like:
- -- - Go to definition
- -- - Find references
- -- - Autocompletion
- -- - Symbol Search
- -- - and more!
- --
- -- Thus, Language Servers are external tools that must be installed separately from
- -- Neovim. This is where `mason` and related plugins come into play.
- --
- -- If you're wondering about lsp vs treesitter, you can check out the wonderfully
- -- and elegantly composed help section, `:help lsp-vs-treesitter`
-
- -- This function gets run when an LSP attaches to a particular buffer.
- -- That is to say, every time a new file is opened that is associated with
- -- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this
- -- function will be executed to configure the current buffer
- vim.api.nvim_create_autocmd('LspAttach', {
- group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }),
- callback = function(event)
- -- NOTE: Remember that Lua is a real programming language, and as such it is possible
- -- to define small helper and utility functions so you don't have to repeat yourself.
- --
- -- In this case, we create a function that lets us more easily define mappings specific
- -- for LSP related items. It sets the mode, buffer and description for us each time.
- local map = function(keys, func, desc, mode)
- mode = mode or 'n'
- vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc })
- end
-
- -- Rename the variable under your cursor.
- -- Most Language Servers support renaming across files, etc.
- map('grn', vim.lsp.buf.rename, '[R]e[n]ame')
-
- -- Execute a code action, usually your cursor needs to be on top of an error
- -- or a suggestion from your LSP for this to activate.
- map('gra', vim.lsp.buf.code_action, '[G]oto Code [A]ction', { 'n', 'x' })
-
- -- Find references for the word under your cursor.
- map('grr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
-
- -- Jump to the implementation of the word under your cursor.
- -- Useful when your language has ways of declaring types without an actual implementation.
- map('gri', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
-
- -- Jump to the definition of the word under your cursor.
- -- This is where a variable was first declared, or where a function is defined, etc.
- -- To jump back, press .
- map('grd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition')
-
- -- WARN: This is not Goto Definition, this is Goto Declaration.
- -- For example, in C this would take you to the header.
- map('grD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
-
- -- Fuzzy find all the symbols in your current document.
- -- Symbols are things like variables, functions, types, etc.
- map('gO', require('telescope.builtin').lsp_document_symbols, 'Open Document Symbols')
-
- -- Fuzzy find all the symbols in your current workspace.
- -- Similar to document symbols, except searches over your entire project.
- map('gW', require('telescope.builtin').lsp_dynamic_workspace_symbols, 'Open Workspace Symbols')
-
- -- Jump to the type of the word under your cursor.
- -- Useful when you're not sure what type a variable is and you want to see
- -- the definition of its *type*, not where it was *defined*.
- map('grt', require('telescope.builtin').lsp_type_definitions, '[G]oto [T]ype Definition')
-
- -- This function resolves a difference between neovim nightly (version 0.11) and stable (version 0.10)
- ---@param client vim.lsp.Client
- ---@param method vim.lsp.protocol.Method
- ---@param bufnr? integer some lsp support methods only in specific files
- ---@return boolean
- local function client_supports_method(client, method, bufnr)
- if vim.fn.has 'nvim-0.11' == 1 then
- return client:supports_method(method, bufnr)
- else
- return client.supports_method(method, { bufnr = bufnr })
- end
- end
-
- -- The following two autocommands are used to highlight references of the
- -- word under your cursor when your cursor rests there for a little while.
- -- See `:help CursorHold` for information about when this is executed
- --
- -- When you move your cursor, the highlights will be cleared (the second autocommand).
- local client = vim.lsp.get_client_by_id(event.data.client_id)
- if client and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_documentHighlight, event.buf) then
- local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false })
- vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
- buffer = event.buf,
- group = highlight_augroup,
- callback = vim.lsp.buf.document_highlight,
- })
-
- vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
- buffer = event.buf,
- group = highlight_augroup,
- callback = vim.lsp.buf.clear_references,
- })
-
- vim.api.nvim_create_autocmd('LspDetach', {
- group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }),
- callback = function(event2)
- vim.lsp.buf.clear_references()
- vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf }
- end,
- })
- end
-
- -- The following code creates a keymap to toggle inlay hints in your
- -- code, if the language server you are using supports them
- --
- -- This may be unwanted, since they displace some of your code
- if client and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_inlayHint, event.buf) then
- map('th', function()
- vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf })
- end, '[T]oggle Inlay [H]ints')
- end
- end,
- })
-
- -- Diagnostic Config
- -- See :help vim.diagnostic.Opts
- vim.diagnostic.config {
- severity_sort = true,
- float = { border = 'rounded', source = 'if_many' },
- underline = { severity = vim.diagnostic.severity.ERROR },
- signs = vim.g.have_nerd_font and {
- text = {
- [vim.diagnostic.severity.ERROR] = ' ',
- [vim.diagnostic.severity.WARN] = ' ',
- [vim.diagnostic.severity.INFO] = ' ',
- [vim.diagnostic.severity.HINT] = ' ',
- },
- } or {},
- virtual_text = {
- source = 'if_many',
- spacing = 2,
- format = function(diagnostic)
- local diagnostic_message = {
- [vim.diagnostic.severity.ERROR] = diagnostic.message,
- [vim.diagnostic.severity.WARN] = diagnostic.message,
- [vim.diagnostic.severity.INFO] = diagnostic.message,
- [vim.diagnostic.severity.HINT] = diagnostic.message,
- }
- return diagnostic_message[diagnostic.severity]
- end,
- },
- }
-
- -- LSP servers and clients are able to communicate to each other what features they support.
- -- By default, Neovim doesn't support everything that is in the LSP specification.
- -- When you add blink.cmp, luasnip, etc. Neovim now has *more* capabilities.
- -- So, we create new capabilities with blink.cmp, and then broadcast that to the servers.
- local capabilities = require('blink.cmp').get_lsp_capabilities()
-
- -- Enable the following language servers
- -- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
- --
- -- Add any additional override configuration in the following tables. Available keys are:
- -- - cmd (table): Override the default command used to start the server
- -- - filetypes (table): Override the default list of associated filetypes for the server
- -- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features.
- -- - settings (table): Override the default settings passed when initializing the server.
- -- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/
- local servers = {
- -- clangd = {},
- -- gopls = {},
- -- pyright = {},
- -- rust_analyzer = {},
- -- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs
- --
- -- Some languages (like typescript) have entire language plugins that can be useful:
- -- https://github.com/pmizio/typescript-tools.nvim
- --
- -- But for many setups, the LSP (`ts_ls`) will work just fine
- -- ts_ls = {},
- --
-
- lua_ls = {
- -- cmd = { ... },
- -- filetypes = { ... },
- -- capabilities = {},
- settings = {
- Lua = {
- completion = {
- callSnippet = 'Replace',
- },
- -- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings
- -- diagnostics = { disable = { 'missing-fields' } },
- },
- },
- },
- }
-
- -- Ensure the servers and tools above are installed
- --
- -- To check the current status of installed tools and/or manually install
- -- other tools, you can run
- -- :Mason
- --
- -- You can press `g?` for help in this menu.
- --
- -- `mason` had to be setup earlier: to configure its options see the
- -- `dependencies` table for `nvim-lspconfig` above.
- --
- -- You can add other tools here that you want Mason to install
- -- for you, so that they are available from within Neovim.
- local ensure_installed = vim.tbl_keys(servers or {})
- vim.list_extend(ensure_installed, {
- 'stylua', -- Used to format Lua code
- })
- require('mason-tool-installer').setup { ensure_installed = ensure_installed }
-
- require('mason-lspconfig').setup {
- ensure_installed = {}, -- explicitly set to an empty table (Kickstart populates installs via mason-tool-installer)
- automatic_installation = false,
- handlers = {
- function(server_name)
- local server = servers[server_name] or {}
- -- This handles overriding only values explicitly passed
- -- by the server configuration above. Useful when disabling
- -- certain features of an LSP (for example, turning off formatting for ts_ls)
- server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {})
- require('lspconfig')[server_name].setup(server)
- end,
- },
- }
- end,
- },
{ -- Autoformat
'stevearc/conform.nvim',
@@ -768,6 +494,12 @@ require('lazy').setup({
end,
formatters_by_ft = {
lua = { 'stylua' },
+ javascript = { 'prettierd' },
+ typescript = { 'prettierd' },
+ vue = { 'prettierd' },
+ json = { 'prettierd' },
+ html = { 'prettierd' },
+ rust = { 'rustfmt' },
-- Conform can also run multiple formatters sequentially
-- python = { "isort", "black" },
--
@@ -876,28 +608,6 @@ require('lazy').setup({
},
},
- { -- You can easily change to a different colorscheme.
- -- Change the name of the colorscheme plugin below, and then
- -- change the command in the config to whatever the name of that colorscheme is.
- --
- -- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`.
- 'folke/tokyonight.nvim',
- priority = 1000, -- Make sure to load this before all the other start plugins.
- config = function()
- ---@diagnostic disable-next-line: missing-fields
- require('tokyonight').setup {
- styles = {
- comments = { italic = false }, -- Disable italics in comments
- },
- }
-
- -- Load the colorscheme here.
- -- Like many other themes, this one has different styles, and you could load
- -- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'.
- vim.cmd.colorscheme 'tokyonight-night'
- end,
- },
-
-- Highlight todo, notes, etc in comments
{ 'folke/todo-comments.nvim', event = 'VimEnter', dependencies = { 'nvim-lua/plenary.nvim' }, opts = { signs = false } },
@@ -944,7 +654,24 @@ require('lazy').setup({
main = 'nvim-treesitter.configs', -- Sets main module to use for opts
-- [[ Configure Treesitter ]] See `:help nvim-treesitter`
opts = {
- ensure_installed = { 'bash', 'c', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'markdown_inline', 'query', 'vim', 'vimdoc' },
+ ensure_installed = {
+ 'bash',
+ 'c',
+ 'diff',
+ 'html',
+ 'lua',
+ 'luadoc',
+ 'markdown',
+ 'markdown_inline',
+ 'query',
+ 'vim',
+ 'vimdoc',
+ 'vue',
+ 'javascript',
+ 'json',
+ 'typescript',
+ 'rust',
+ },
-- Autoinstall languages that are not installed
auto_install = true,
highlight = {
@@ -973,18 +700,21 @@ require('lazy').setup({
-- Here are some example plugins that I've included in the Kickstart repository.
-- Uncomment any of the lines below to enable them (you will need to restart nvim).
--
- -- require 'kickstart.plugins.debug',
- -- require 'kickstart.plugins.indent_line',
- -- require 'kickstart.plugins.lint',
- -- require 'kickstart.plugins.autopairs',
- -- require 'kickstart.plugins.neo-tree',
- -- require 'kickstart.plugins.gitsigns', -- adds gitsigns recommend keymaps
+ require 'kickstart.plugins.debug',
+ require 'kickstart.plugins.indent_line',
+ require 'kickstart.plugins.lint',
+ require 'kickstart.plugins.autopairs',
+ require 'kickstart.plugins.neo-tree',
+ require 'kickstart.plugins.gitsigns', -- adds gitsigns recommend keymaps
+
+ require 'custom.plugins.lsp',
-- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua`
-- This is the easiest way to modularize your config.
--
-- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going.
- -- { import = 'custom.plugins' },
+ { import = 'custom.plugins' },
+ { import = 'custom.keymaps' },
--
-- For additional information with loading, sourcing and examples see `:help lazy.nvim-🔌-plugin-spec`
-- Or use telescope!
diff --git a/lua/custom/keymaps/init.lua b/lua/custom/keymaps/init.lua
new file mode 100644
index 00000000..6533b206
--- /dev/null
+++ b/lua/custom/keymaps/init.lua
@@ -0,0 +1,7 @@
+-- vim.keymap.set('n', 'cf', 'EslintFixAll | w', { desc = 'ESLint Fix All', silent = true })
+vim.keymap.set('n', 'cf', 'mF:%!eslint_d --stdin --fix-to-stdout --stdin-filename %`F | w', { desc = 'ESLint Fix All', silent = true })
+
+vim.keymap.set('n', 'tg', 'Neogit', { silent = true, desc = 'Neogit' })
+
+vim.keymap.set('n', 'grs', ':vsplit | lua vim.lsp.buf.definition()', { silent = true, desc = '[G]oto [D]efinition [V]ertical [S]plit' })
+vim.keymap.set('n', 'grS', ':split | lua vim.lsp.buf.definition()', { silent = true, desc = '[G]oto [D]efinition [H]orizontal [S]plit' })
diff --git a/lua/custom/plugins/init.lua b/lua/custom/plugins/init.lua
index be0eb9d8..8b0c013d 100644
--- a/lua/custom/plugins/init.lua
+++ b/lua/custom/plugins/init.lua
@@ -2,4 +2,172 @@
-- I promise not to create any merge conflicts in this directory :)
--
-- See the kickstart.nvim README for more information
-return {}
+return {
+ {
+ 'mrcjkb/rustaceanvim',
+ },
+ { -- You can easily change to a different colorscheme.
+ -- Change the name of the colorscheme plugin below, and then
+ -- change the command in the config to whatever the name of that colorscheme is.
+ --
+ -- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`.
+ 'catppuccin/nvim',
+ name = 'catppuccin',
+ priority = 1000, -- Make sure to load this before all the other start plugins.
+ opts = {
+ no_italic = true,
+ no_bold = true,
+ transparent_background = true,
+ integrations = {
+ noice = true,
+ dashboard = true,
+ diffview = true,
+ mason = true,
+ neotree = true,
+ neogit = true,
+ telescope = true,
+ which_key = true,
+ },
+ },
+ init = function()
+ -- Load the colorscheme here.
+ -- Like many other themes, this one has different styles, and you could load
+ -- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'.
+ vim.cmd.colorscheme 'catppuccin-mocha'
+ -- You can configure highlights by doing something like:
+ vim.cmd.hi 'Comment gui=none'
+ end,
+ },
+ {
+ 'NeogitOrg/neogit',
+ dependencies = {
+ 'nvim-lua/plenary.nvim', -- required
+ 'sindrets/diffview.nvim', -- optional - Diff integration
+ 'nvim-telescope/telescope.nvim', -- optional
+ },
+ config = true,
+ },
+ {
+ 'folke/noice.nvim',
+ dependencies = {
+ 'MunifTanjim/nui.nvim',
+ },
+ event = 'VeryLazy',
+ opts = {
+ views = {
+ cmdline_popup = {
+ position = {
+ row = '30%',
+ col = '50%',
+ },
+ size = {
+ width = 60,
+ height = 'auto',
+ },
+ },
+ popupmenu = {
+ relative = 'editor',
+ position = {
+ row = '41%',
+ col = '50%',
+ },
+ size = {
+ width = 60,
+ height = 10,
+ },
+ border = {
+ style = 'rounded',
+ padding = { 0, 1 },
+ },
+ win_options = {
+ winhighlight = { Normal = 'Normal', FloatBorder = 'DiagnosticInfo' },
+ },
+ },
+ },
+ },
+ },
+ {
+ 'windwp/nvim-ts-autotag',
+ opts = {
+ enable = true,
+ filetypes = { 'vue', 'html', 'tsx', 'jsx' },
+ },
+ },
+ {
+ 'folke/zen-mode.nvim',
+ },
+ {
+ 'rmagatti/goto-preview',
+ opts = {
+ default_mappings = true,
+ },
+ },
+ {
+ 'akinsho/toggleterm.nvim',
+ version = '*',
+ config = true,
+ lazy = false,
+ opts = {
+ direction = 'float',
+ },
+ keys = {
+ { 'tt', 'ToggleTerm', desc = '[T]oggle [T]erm' },
+ },
+ },
+ {
+ 'nvimdev/dashboard-nvim',
+ event = 'VimEnter',
+ opts = {
+ theme = 'hyper',
+ config = {
+ week_header = {
+ enable = true,
+ },
+ shortcut = {
+ { desc = ' Update', group = 'Number', action = 'Lazy update', key = 'u' },
+ {
+ icon = ' ',
+ icon_hl = '@variable',
+ desc = 'Files',
+ group = 'Label',
+ action = 'Telescope find_files',
+ key = 'f',
+ },
+ },
+ },
+ },
+ },
+ {
+ 'folke/trouble.nvim',
+ opts = {},
+ cmd = 'Trouble',
+ keys = {
+ {
+ 'tx',
+ 'Trouble diagnostics toggle',
+ desc = 'Diagnostics (Trouble)',
+ },
+ },
+ },
+ {
+ 'nvim-lualine/lualine.nvim',
+ dependencies = { 'nvim-tree/nvim-web-devicons' },
+ opts = {
+ theme = 'catppuccin',
+ },
+ },
+ {
+ 'David-Kunz/cmp-npm',
+ dependencies = { 'nvim-lua/plenary.nvim' },
+ ft = 'json',
+ config = function()
+ require('cmp-npm').setup {}
+ end,
+ },
+ {
+ 'johmsalas/text-case.nvim',
+ opts = {
+ default_keymappings_enabled = true,
+ },
+ },
+}
diff --git a/lua/custom/plugins/lsp.lua b/lua/custom/plugins/lsp.lua
new file mode 100644
index 00000000..f1819691
--- /dev/null
+++ b/lua/custom/plugins/lsp.lua
@@ -0,0 +1,314 @@
+return {
+ -- Main LSP Configuration
+ 'neovim/nvim-lspconfig',
+ dependencies = {
+ -- Automatically install LSPs and related tools to stdpath for Neovim
+ -- Mason must be loaded before its dependents so we need to set it up here.
+ -- NOTE: `opts = {}` is the same as calling `require('mason').setup({})`
+ { 'mason-org/mason.nvim', opts = {} },
+ 'mason-org/mason-lspconfig.nvim',
+ 'WhoIsSethDaniel/mason-tool-installer.nvim',
+
+ -- Useful status updates for LSP.
+ { 'j-hui/fidget.nvim', opts = {} },
+
+ -- Allows extra capabilities provided by blink.cmp
+ 'saghen/blink.cmp',
+ },
+ config = function()
+ -- Brief aside: **What is LSP?**
+ --
+ -- LSP is an initialism you've probably heard, but might not understand what it is.
+ --
+ -- LSP stands for Language Server Protocol. It's a protocol that helps editors
+ -- and language tooling communicate in a standardized fashion.
+ --
+ -- In general, you have a "server" which is some tool built to understand a particular
+ -- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers
+ -- (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone
+ -- processes that communicate with some "client" - in this case, Neovim!
+ --
+ -- LSP provides Neovim with features like:
+ -- - Go to definition
+ -- - Find references
+ -- - Autocompletion
+ -- - Symbol Search
+ -- - and more!
+ --
+ -- Thus, Language Servers are external tools that must be installed separately from
+ -- Neovim. This is where `mason` and related plugins come into play.
+ --
+ -- If you're wondering about lsp vs treesitter, you can check out the wonderfully
+ -- and elegantly composed help section, `:help lsp-vs-treesitter`
+
+ -- This function gets run when an LSP attaches to a particular buffer.
+ -- That is to say, every time a new file is opened that is associated with
+ -- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this
+ -- function will be executed to configure the current buffer
+ vim.api.nvim_create_autocmd('LspAttach', {
+ group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }),
+ callback = function(event)
+ -- NOTE: Remember that Lua is a real programming language, and as such it is possible
+ -- to define small helper and utility functions so you don't have to repeat yourself.
+ --
+ -- In this case, we create a function that lets us more easily define mappings specific
+ -- for LSP related items. It sets the mode, buffer and description for us each time.
+ local map = function(keys, func, desc, mode)
+ mode = mode or 'n'
+ vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc })
+ end
+
+ -- Rename the variable under your cursor.
+ -- Most Language Servers support renaming across files, etc.
+ map('grn', vim.lsp.buf.rename, '[R]e[n]ame')
+
+ -- Execute a code action, usually your cursor needs to be on top of an error
+ -- or a suggestion from your LSP for this to activate.
+ map('gra', vim.lsp.buf.code_action, '[G]oto Code [A]ction', { 'n', 'x' })
+
+ -- Find references for the word under your cursor.
+ map('grr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
+
+ -- Jump to the implementation of the word under your cursor.
+ -- Useful when your language has ways of declaring types without an actual implementation.
+ map('gri', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
+
+ -- Jump to the definition of the word under your cursor.
+ -- This is where a variable was first declared, or where a function is defined, etc.
+ -- To jump back, press .
+ map('grd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition')
+
+ -- WARN: This is not Goto Definition, this is Goto Declaration.
+ -- For example, in C this would take you to the header.
+ map('grD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
+
+ -- Fuzzy find all the symbols in your current document.
+ -- Symbols are things like variables, functions, types, etc.
+ map('gO', require('telescope.builtin').lsp_document_symbols, 'Open Document Symbols')
+
+ -- Fuzzy find all the symbols in your current workspace.
+ -- Similar to document symbols, except searches over your entire project.
+ map('gW', require('telescope.builtin').lsp_dynamic_workspace_symbols, 'Open Workspace Symbols')
+
+ -- Jump to the type of the word under your cursor.
+ -- Useful when you're not sure what type a variable is and you want to see
+ -- the definition of its *type*, not where it was *defined*.
+ map('grt', require('telescope.builtin').lsp_type_definitions, '[G]oto [T]ype Definition')
+
+ -- This function resolves a difference between neovim nightly (version 0.11) and stable (version 0.10)
+ ---@param client vim.lsp.Client
+ ---@param method vim.lsp.protocol.Method
+ ---@param bufnr? integer some lsp support methods only in specific files
+ ---@return boolean
+ local function client_supports_method(client, method, bufnr)
+ if vim.fn.has 'nvim-0.11' == 1 then
+ return client:supports_method(method, bufnr)
+ else
+ return client.supports_method(method, { bufnr = bufnr })
+ end
+ end
+
+ -- The following two autocommands are used to highlight references of the
+ -- word under your cursor when your cursor rests there for a little while.
+ -- See `:help CursorHold` for information about when this is executed
+ --
+ -- When you move your cursor, the highlights will be cleared (the second autocommand).
+ local client = vim.lsp.get_client_by_id(event.data.client_id)
+ if client and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_documentHighlight, event.buf) then
+ local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false })
+ vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
+ buffer = event.buf,
+ group = highlight_augroup,
+ callback = vim.lsp.buf.document_highlight,
+ })
+
+ vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
+ buffer = event.buf,
+ group = highlight_augroup,
+ callback = vim.lsp.buf.clear_references,
+ })
+
+ vim.api.nvim_create_autocmd('LspDetach', {
+ group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }),
+ callback = function(event2)
+ vim.lsp.buf.clear_references()
+ vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf }
+ end,
+ })
+ end
+
+ -- The following code creates a keymap to toggle inlay hints in your
+ -- code, if the language server you are using supports them
+ --
+ -- This may be unwanted, since they displace some of your code
+ if client and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_inlayHint, event.buf) then
+ map('th', function()
+ vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf })
+ end, '[T]oggle Inlay [H]ints')
+ end
+ end,
+ })
+
+ -- Diagnostic Config
+ -- See :help vim.diagnostic.Opts
+ vim.diagnostic.config {
+ severity_sort = true,
+ float = { border = 'rounded', source = 'if_many' },
+ underline = { severity = vim.diagnostic.severity.ERROR },
+ signs = vim.g.have_nerd_font and {
+ text = {
+ [vim.diagnostic.severity.ERROR] = ' ',
+ [vim.diagnostic.severity.WARN] = ' ',
+ [vim.diagnostic.severity.INFO] = ' ',
+ [vim.diagnostic.severity.HINT] = ' ',
+ },
+ } or {},
+ virtual_text = {
+ source = 'if_many',
+ spacing = 2,
+ format = function(diagnostic)
+ local diagnostic_message = {
+ [vim.diagnostic.severity.ERROR] = diagnostic.message,
+ [vim.diagnostic.severity.WARN] = diagnostic.message,
+ [vim.diagnostic.severity.INFO] = diagnostic.message,
+ [vim.diagnostic.severity.HINT] = diagnostic.message,
+ }
+ return diagnostic_message[diagnostic.severity]
+ end,
+ },
+ }
+
+ -- LSP servers and clients are able to communicate to each other what features they support.
+ -- By default, Neovim doesn't support everything that is in the LSP specification.
+ -- When you add blink.cmp, luasnip, etc. Neovim now has *more* capabilities.
+ -- So, we create new capabilities with blink.cmp, and then broadcast that to the servers.
+ local capabilities = require('blink.cmp').get_lsp_capabilities()
+
+ local vue_language_server_path = vim.fn.expand '$MASON/packages' .. '/vue-language-server' .. '/node_modules/@vue/language-server'
+
+ -- Enable the following language servers
+ -- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
+ --
+ -- Add any additional override configuration in the following tables. Available keys are:
+ -- - cmd (table): Override the default command used to start the server
+ -- - filetypes (table): Override the default list of associated filetypes for the server
+ -- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features.
+ -- - settings (table): Override the default settings passed when initializing the server.
+ -- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/
+ local servers = {
+ -- clangd = {},
+ -- gopls = {},
+ -- pyright = {},
+ -- rust_analyzer = {},
+ -- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs
+ --
+ -- Some languages (like typescript) have entire language plugins that can be useful:
+ -- https://github.com/pmizio/typescript-tools.nvim
+ --
+ -- But for many setups, the LSP (`ts_ls`) will work just fine
+ -- ts_ls = {},
+ --
+
+ -- ts_ls = {
+ -- init_options = {
+ -- plugins = {
+ -- {
+ -- name = '@vue/typescript-plugin',
+ -- location = vue_language_server_path,
+ -- languages = { 'vue' },
+ -- },
+ -- },
+ -- },
+ -- filetypes = { 'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue' },
+ -- },
+ vtsls = {
+ filetypes = { 'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue' },
+ settings = {
+ vtsls = {
+ tsserver = {
+ globalPlugins = {
+ {
+ name = '@vue/typescript-plugin',
+ location = vue_language_server_path,
+ languages = { 'vue' },
+ configNamespace = 'typescript',
+ enableForWorkspaceTypeScriptVersions = true,
+ },
+ },
+ },
+ },
+ },
+ },
+ volar = {
+ init_options = {
+ vue = {
+ complete = {
+ casing = {
+ tags = 'autoPascal',
+ props = 'autoKebab',
+ },
+ },
+ },
+ },
+ },
+ tailwindcss = {},
+ rust_analyzer = {
+ checkOnSave = {
+ command = 'clippy',
+ },
+ },
+ lua_ls = {
+ -- cmd = { ... },
+ -- filetypes = { ... },
+ -- capabilities = {},
+ settings = {
+ Lua = {
+ completion = {
+ callSnippet = 'Replace',
+ },
+ -- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings
+ -- diagnostics = { disable = { 'missing-fields' } },
+ },
+ },
+ },
+ }
+
+ -- Ensure the servers and tools above are installed
+ --
+ -- To check the current status of installed tools and/or manually install
+ -- other tools, you can run
+ -- :Mason
+ --
+ -- You can press `g?` for help in this menu.
+ --
+ -- `mason` had to be setup earlier: to configure its options see the
+ -- `dependencies` table for `nvim-lspconfig` above.
+ --
+ -- You can add other tools here that you want Mason to install
+ -- for you, so that they are available from within Neovim.
+ local ensure_installed = vim.tbl_keys(servers or {})
+ vim.list_extend(ensure_installed, {
+ 'stylua', -- Used to format Lua code,
+ 'prettierd',
+ 'stylelint',
+ 'eslint_d',
+ 'oxlint',
+ 'jsonls',
+ 'marksman',
+ })
+
+ for serverKey in pairs(servers or {}) do
+ local server = servers[serverKey]
+
+ server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {})
+ vim.lsp.config(serverKey, server)
+ end
+
+ require('mason-tool-installer').setup { ensure_installed = ensure_installed }
+
+ require('mason-lspconfig').setup {
+ ensure_installed = {}, -- explicitly set to an empty table (Kickstart populates installs via mason-tool-installer)
+ automatic_installation = false,
+ }
+ end,
+}
diff --git a/lua/kickstart/plugins/lint.lua b/lua/kickstart/plugins/lint.lua
index dec42f09..c273f2d1 100644
--- a/lua/kickstart/plugins/lint.lua
+++ b/lua/kickstart/plugins/lint.lua
@@ -7,6 +7,10 @@ return {
local lint = require 'lint'
lint.linters_by_ft = {
markdown = { 'markdownlint' },
+ javascript = { 'eslint_d' },
+ typescript = { 'eslint_d' },
+ vue = { 'eslint_d' },
+ json = { 'jsonlint' },
}
-- To allow other plugins to add linters to require('lint').linters_by_ft,
diff --git a/lua/kickstart/plugins/neo-tree.lua b/lua/kickstart/plugins/neo-tree.lua
index c7067891..a9138f99 100644
--- a/lua/kickstart/plugins/neo-tree.lua
+++ b/lua/kickstart/plugins/neo-tree.lua
@@ -11,9 +11,19 @@ return {
},
lazy = false,
keys = {
- { '\\', ':Neotree reveal', desc = 'NeoTree reveal', silent = true },
+ { 'e', ':Neotree reveal toggle', desc = 'Toggle Neotree', silent = true },
},
opts = {
+ sources = { 'filesystem', 'buffers', 'git_status', 'document_symbols' },
+ source_selector = {
+ winbar = true,
+ sources = {
+ { source = 'filesystem', display_name = ' Files' },
+ { source = 'buffers', display_name = ' Bufs' },
+ { source = 'git_status', display_name = ' Git' },
+ { source = 'document_symbols', display_name = ' Symbols' },
+ },
+ },
filesystem = {
window = {
mappings = {