@ -136,7 +136,6 @@ vim.opt.signcolumn = 'yes'
vim.opt . updatetime = 250
-- Decrease mapped sequence wait time
-- Displays which-key popup sooner
vim.opt . timeoutlen = 300
-- Configure how new splits should be opened
@ -236,12 +235,22 @@ require('lazy').setup({
-- with the first argument being the link and the following
-- keys can be used to configure plugin behavior/loading/etc.
--
-- Use `opts = {}` to force a plugin to be loaded.
-- Use `opts = {}` to automatically pass options to a plugin's `setup()` function, forcing the plugin to be loaded.
--
-- Alternatively, use `config = function() ... end` for full control over the configuration.
-- If you prefer to call `setup` explicitly, use:
-- {
-- 'lewis6991/gitsigns.nvim',
-- config = function()
-- require('gitsigns').setup({
-- -- Your gitsigns configuration here
-- })
-- end,
-- }
--
-- Here is a more advanced example where we pass configuration
-- options to `gitsigns.nvim`. This is equivalent to the following Lua:
-- require('gitsigns').setup({ ... })
-- 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
@ -268,19 +277,21 @@ require('lazy').setup({
-- which loads which-key before all the UI elements are loaded. Events can be
-- normal autocommands events (`:help autocmd-events`).
--
-- Then, because we use the `config` key, the configuration only runs
-- after the plugin has been loaded:
-- config = function() ... end
-- Then, because we use the `opts` key (recommended), the configuration runs
-- after the plugin has been loaded as `require(MODULE).setup(opts)`.
{ -- Useful plugin to show you pending keybinds.
' folke/which-key.nvim ' ,
event = ' VimEnter ' , -- Sets the loading event to 'VimEnter'
opts = {
-- delay between pressing a key and opening which-key (milliseconds)
-- this setting is independent of vim.opt.timeoutlen
delay = 0 ,
icons = {
-- set icon mappings to true if you have a Nerd Font
mappings = vim.g . have_nerd_font ,
-- If you are using a Nerd Font: set icons.keys to an empty table which will use the
-- default whic k -key.nvim defined Nerd Font icons, otherwise define a string table
-- default whic h -key.nvim defined Nerd Font icons, otherwise define a string table
keys = vim.g . have_nerd_font and { } or {
Up = ' <Up> ' ,
Down = ' <Down> ' ,
@ -454,22 +465,22 @@ require('lazy').setup({
opts = {
library = {
-- Load luvit types when the `vim.uv` word is found
{ path = ' luvit-meta /library' , words = { ' vim%.uv ' } } ,
{ path = ' ${3rd}/ luv/library' , words = { ' vim%.uv ' } } ,
} ,
} ,
} ,
{ ' Bilal2453/luvit-meta ' , lazy = true } ,
{
-- Main LSP Configuration
' neovim/nvim-lspconfig ' ,
dependencies = {
-- Automatically install LSPs and related tools to stdpath for Neovim
{ ' williamboman/mason.nvim ' , config = true } , -- NOTE: Must be loaded before dependants
-- 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({})`
{ ' williamboman/mason.nvim ' , opts = { } } ,
' williamboman/mason-lspconfig.nvim ' ,
' WhoIsSethDaniel/mason-tool-installer.nvim ' ,
-- Useful status updates for LSP.
-- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
{ ' j-hui/fidget.nvim ' , opts = { } } ,
-- Allows extra capabilities provided by nvim-cmp
@ -557,13 +568,27 @@ require('lazy').setup({
-- Show LSP message
map ( ' gM ' , vim.diagnostic . open_float , ' [G]oto [M]essage ' )
-- 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 ( vim.lsp . protocol.Methods . textDocument_documentHighlight ) then
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 ,
@ -590,7 +615,7 @@ require('lazy').setup({
-- 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( vim.lsp . protocol.Methods . textDocument_inlayHint ) then
if client and client _supports_method( client , vim.lsp . protocol.Methods . textDocument_inlayHint , event.buf ) then
map ( ' <leader>th ' , function ( )
vim.lsp . inlay_hint.enable ( not vim.lsp . inlay_hint.is_enabled { bufnr = event.buf } )
end , ' [T]oggle Inlay [H]ints ' )
@ -598,6 +623,35 @@ require('lazy').setup({
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 nvim-cmp, luasnip, etc. Neovim now has *more* capabilities.
@ -630,8 +684,8 @@ require('lazy').setup({
--
lua_ls = {
-- cmd = { ...},
-- filetypes = { ... },
-- cmd = { ... },
-- filetypes = { ... },
-- capabilities = {},
settings = {
Lua = {
@ -646,13 +700,16 @@ require('lazy').setup({
}
-- 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
--
-- 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.
require ( ' mason ' ) . setup ( )
-- 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 { } )
@ -662,6 +719,8 @@ require('lazy').setup({
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 { }
@ -754,6 +813,7 @@ require('lazy').setup({
-- into multiple repos for maintenance purposes.
' hrsh7th/cmp-nvim-lsp ' ,
' hrsh7th/cmp-path ' ,
' hrsh7th/cmp-nvim-lsp-signature-help ' ,
} ,
config = function ( )
-- See `:help cmp`
@ -830,6 +890,7 @@ require('lazy').setup({
{ name = ' nvim_lsp ' } ,
{ name = ' luasnip ' } ,
{ name = ' path ' } ,
{ name = ' nvim_lsp_signature_help ' } ,
} ,
}
end ,
@ -842,14 +903,18 @@ require('lazy').setup({
-- 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.
init = function ( )
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 '
-- You can configure highlights by doing something like:
vim.cmd . hi ' Comment gui=none '
end ,
} ,
@ -919,7 +984,7 @@ require('lazy').setup({
-- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects
} ,
-- The following two comments only work if you have downloaded the kickstart repo, not just copy pasted the
-- The following comments only work if you have downloaded the kickstart repo, not just copy pasted the
-- init.lua. If you want these files, they are in the repository, so you can just download them and
-- place them in the correct locations.
@ -939,8 +1004,12 @@ require('lazy').setup({
-- 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.
-- For additional information, see `:help lazy.nvim-lazy.nvim-structuring-your-plugins`
-- { import = 'custom.plugins' },
--
-- For additional information with loading, sourcing and examples see `:help lazy.nvim-🔌-plugin-spec`
-- Or use telescope!
-- In normal mode type `<space>sh` then write `lazy.nvim-plugin`
-- you can continue same window with `<space>sr` which resumes last telescope search
} , {
ui = {
-- If you are using a Nerd Font: set icons to an empty table which will use the