@ -230,56 +230,89 @@ vim.api.nvim_create_autocmd('TextYankPost', {
callback = function ( ) vim.hl . on_yank ( ) end ,
callback = function ( ) vim.hl . on_yank ( ) end ,
} )
} )
-- [[ Install `lazy.nvim` plugin manager ]]
-- [[ Configure and install plugins with `vim.pack` ]]
-- See `:help lazy.nvim.txt` or https://github.com/folke/lazy.nvim for more info
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 error ( ' Error cloning lazy.nvim: \n ' .. out ) end
end
---@type vim.Option
local rtp = vim.opt . rtp
rtp : prepend ( lazypath )
-- [[ Configure and install plugins ]]
--
--
-- To check the current status of your plugin s, run
-- To inspect plugin state and pending updates, run
-- : Lazy
-- :lua vim.pack.update(nil, { offline = true })
--
--
-- You can press `?` in this menu for help. Use `:q` to close the window
-- To update plugins, run
--
-- :lua vim.pack.update()
-- To update plugins you can run
-- :Lazy update
--
--
-- NOTE: Here is where you install your plugins.
-- NOTE: Here is where you install your plugins.
require ( ' lazy ' ) . setup ( {
local gh = function ( repo ) return ' https://github.com/ ' .. repo end
-- NOTE: Plugins can be added via a link or github org/name. To run setup automatically, use `opts = {}`
{ ' NMAC427/guess-indent.nvim ' , opts = { } } ,
-- Alternatively, use `config = function() ... end` for full control over the configuration.
local run_build = function ( name , cmd , cwd )
-- If you prefer to call `setup` explicitly, use:
local result = vim.system ( cmd , { cwd = cwd } ) : wait ( )
-- {
if result.code ~= 0 then
-- 'lewis6991/gitsigns.nvim',
local stderr = result.stderr or ' '
-- config = function()
local stdout = result.stdout or ' '
-- require('gitsigns').setup({
local output = stderr ~= ' ' and stderr or stdout
-- -- Your gitsigns configuration here
if output == ' ' then output = ' No output from build command. ' end
-- })
vim.notify ( ( ' Build failed for %s: \n %s ' ) : format ( name , output ) , vim.log . levels.ERROR )
-- end,
end
-- }
end
--
-- Here is a more advanced example where we pass configuration
vim.api . nvim_create_autocmd ( ' PackChanged ' , {
-- options to `gitsigns.nvim`.
callback = function ( ev )
--
local name = ev.data . spec.name
-- See `:help gitsigns` to understand what the configuration keys do
local kind = ev.data . kind
-- Adds git related signs to the gutter, as well as utilities for managing changes
if kind ~= ' install ' and kind ~= ' update ' then return end
{
' lewis6991/gitsigns.nvim ' ,
if name == ' telescope-fzf-native.nvim ' and vim.fn . executable ' make ' == 1 then
---@module 'gitsigns'
run_build ( name , { ' make ' } , ev.data . path )
---@type Gitsigns.Config
return
---@diagnostic disable-next-line: missing-fields
end
opts = {
if name == ' LuaSnip ' then
if vim.fn . has ' win32 ' ~= 1 and vim.fn . executable ' make ' == 1 then run_build ( name , { ' make ' , ' install_jsregexp ' } , ev.data . path ) end
return
end
if name == ' nvim-treesitter ' then
if not ev.data . active then vim.cmd . packadd ' nvim-treesitter ' end
vim.cmd ' TSUpdate '
return
end
end ,
} )
---@type (string|vim.pack.Spec)[]
local plugins = {
gh ' NMAC427/guess-indent.nvim ' ,
gh ' lewis6991/gitsigns.nvim ' ,
gh ' folke/which-key.nvim ' ,
gh ' nvim-lua/plenary.nvim ' ,
gh ' nvim-telescope/telescope.nvim ' ,
gh ' nvim-telescope/telescope-ui-select.nvim ' ,
gh ' neovim/nvim-lspconfig ' ,
gh ' mason-org/mason.nvim ' ,
gh ' mason-org/mason-lspconfig.nvim ' ,
gh ' WhoIsSethDaniel/mason-tool-installer.nvim ' ,
gh ' j-hui/fidget.nvim ' ,
gh ' stevearc/conform.nvim ' ,
{ src = gh ' saghen/blink.cmp ' , version = vim.version . range ' 1.x ' } ,
{ src = gh ' L3MON4D3/LuaSnip ' , version = vim.version . range ' 2.x ' } ,
gh ' folke/tokyonight.nvim ' ,
gh ' folke/todo-comments.nvim ' ,
gh ' nvim-mini/mini.nvim ' ,
{ src = gh ' nvim-treesitter/nvim-treesitter ' , version = ' main ' } ,
}
if vim.fn . executable ' make ' == 1 then table.insert ( plugins , gh ' nvim-telescope/telescope-fzf-native.nvim ' ) end
-- Useful for getting pretty icons, but requires a Nerd Font.
if vim.g . have_nerd_font then table.insert ( plugins , gh ' nvim-tree/nvim-web-devicons ' ) end
vim.pack . add ( plugins )
require ( ' guess-indent ' ) . 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
require ( ' gitsigns ' ) . setup {
signs = {
signs = {
add = { text = ' + ' } , ---@diagnostic disable-line: missing-fields
add = { text = ' + ' } , ---@diagnostic disable-line: missing-fields
change = { text = ' ~ ' } , ---@diagnostic disable-line: missing-fields
change = { text = ' ~ ' } , ---@diagnostic disable-line: missing-fields
@ -287,35 +320,13 @@ require('lazy').setup({
topdelete = { text = ' ‾ ' } , ---@diagnostic disable-line: missing-fields
topdelete = { text = ' ‾ ' } , ---@diagnostic disable-line: missing-fields
changedelete = { text = ' ~ ' } , ---@diagnostic disable-line: missing-fields
changedelete = { text = ' ~ ' } , ---@diagnostic disable-line: missing-fields
} ,
} ,
} ,
}
} ,
-- NOTE: Plugins can also be configured to run Lua code when they are loaded.
-- Useful plugin to show you pending keybinds.
--
require ( ' which-key ' ) . setup {
-- This is often very useful to both group configuration, as well as handle
-- lazy loading plugins that don't need to be loaded immediately at startup.
--
-- For example, in the following configuration, we use:
-- event = 'VimEnter'
--
-- 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 `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 ' ,
---@module 'which-key'
---@type wk.Opts
---@diagnostic disable-next-line: missing-fields
opts = {
-- delay between pressing a key and opening which-key (milliseconds)
-- delay between pressing a key and opening which-key (milliseconds)
delay = 0 ,
delay = 0 ,
icons = { mappings = vim.g . have_nerd_font } ,
icons = { mappings = vim.g . have_nerd_font } ,
-- Document existing key chains
-- Document existing key chains
spec = {
spec = {
{ ' <leader>s ' , group = ' [S]earch ' , mode = { ' n ' , ' v ' } } ,
{ ' <leader>s ' , group = ' [S]earch ' , mode = { ' n ' , ' v ' } } ,
@ -323,72 +334,43 @@ require('lazy').setup({
{ ' <leader>h ' , group = ' Git [H]unk ' , mode = { ' n ' , ' v ' } } , -- Enable gitsigns recommended keymaps first
{ ' <leader>h ' , group = ' Git [H]unk ' , mode = { ' n ' , ' v ' } } , -- Enable gitsigns recommended keymaps first
{ ' gr ' , group = ' LSP Actions ' , mode = { ' n ' } } ,
{ ' gr ' , group = ' LSP Actions ' , mode = { ' n ' } } ,
} ,
} ,
} ,
}
} ,
-- Fuzzy Finder (files, lsp, etc)
--
-- By default, Telescope is included and acts as your picker for everything.
-- NOTE: Plugins can specify dependencies.
-- # TODO: Rework this docstring
--
--
-- The dependencies are proper plugin specifications as well - anything
-- If you would like to switch to a different picker (like snacks, or fzf-lua)
-- you do for a plugin at the top level, you can do for a dependency.
-- you can disable the Telescope plugin by setting enabled to false and enable
--
-- your replacement picker by requiring it explicitly (e.g. 'custom.plugins.snacks')
-- Use the `dependencies` key to specify the dependencies of a particular plugin
--
-- Fuzzy Finder (files, lsp, etc)
{
' nvim-telescope/telescope.nvim ' ,
-- By default, Telescope is included and acts as your picker for everything.
-- If you would like to switch to a different picker (like snacks, or fzf-lua)
-- Note: If you customize your config for yourself,
-- you can disable the Telescope plugin by setting enabled to false and enable
-- it’ s best to remove the Telescope plugin config entirely
-- your replacement picker by requiring it explicitly (e.g. 'custom.plugins.snacks')
-- instead of just disabling it here, to keep your config clean.
--
-- Telescope is a fuzzy finder that comes with a lot of different things that
-- it can fuzzy find! It's more than just a "file finder", it can search
-- many different aspects of Neovim, your workspace, LSP, and more!
--
-- The easiest way to use Telescope, is to start by doing something like:
-- :Telescope help_tags
--
-- After running this command, a window will open up and you're able to
-- type in the prompt window. You'll see a list of `help_tags` options and
-- a corresponding preview of the help.
--
-- Two important keymaps to use while in Telescope are:
-- - Insert mode: <c-/>
-- - Normal mode: ?
--
-- This opens a window that shows you all of the keymaps for the current
-- Telescope picker. This is really useful to discover what Telescope can
-- do as well as how to actually do it!
-- Note: If you customize your config for yourself,
-- [[ Configure Telescope ]]
-- it’ s best to remove the Telescope plugin config entirely
-- See `:help telescope` and `:help telescope.setup()`
-- instead of just disabling it here, to keep your config clean.
require ( ' telescope ' ) . setup {
enabled = true ,
event = ' VimEnter ' ,
dependencies = {
' nvim-lua/plenary.nvim ' ,
-- If encountering errors, see telescope-fzf-native README for installation instructions
{
' nvim-telescope/telescope-fzf-native.nvim ' ,
-- `build` is used to run some command when the plugin is installed/updated.
-- This is only run then, not every time Neovim starts up.
build = ' make ' ,
-- `cond` is a condition used to determine whether this plugin should be
-- installed and loaded.
cond = function ( ) return vim.fn . executable ' make ' == 1 end ,
} ,
{ ' nvim-telescope/telescope-ui-select.nvim ' } ,
-- Useful for getting pretty icons, but requires a Nerd Font.
{ ' nvim-tree/nvim-web-devicons ' , enabled = vim.g . have_nerd_font } ,
} ,
config = function ( )
-- Telescope is a fuzzy finder that comes with a lot of different things that
-- it can fuzzy find! It's more than just a "file finder", it can search
-- many different aspects of Neovim, your workspace, LSP, and more!
--
-- The easiest way to use Telescope, is to start by doing something like:
-- :Telescope help_tags
--
-- After running this command, a window will open up and you're able to
-- type in the prompt window. You'll see a list of `help_tags` options and
-- a corresponding preview of the help.
--
-- Two important keymaps to use while in Telescope are:
-- - Insert mode: <c-/>
-- - Normal mode: ?
--
-- This opens a window that shows you all of the keymaps for the current
-- Telescope picker. This is really useful to discover what Telescope can
-- do as well as how to actually do it!
-- [[ Configure Telescope ]]
-- See `:help telescope` and `:help telescope.setup()`
require ( ' telescope ' ) . setup {
-- You can put your default mappings / updates / etc. in here
-- You can put your default mappings / updates / etc. in here
-- All the info you're looking for is in `:help telescope.setup()`
-- All the info you're looking for is in `:help telescope.setup()`
--
--
@ -401,29 +383,29 @@ require('lazy').setup({
extensions = {
extensions = {
[ ' ui-select ' ] = { require ( ' telescope.themes ' ) . get_dropdown ( ) } ,
[ ' ui-select ' ] = { require ( ' telescope.themes ' ) . get_dropdown ( ) } ,
} ,
} ,
}
}
-- Enable Telescope extensions if they are installed
-- Enable Telescope extensions if they are installed
pcall ( require ( ' telescope ' ) . load_extension , ' fzf ' )
pcall ( require ( ' telescope ' ) . load_extension , ' fzf ' )
pcall ( require ( ' telescope ' ) . load_extension , ' ui-select ' )
pcall ( require ( ' telescope ' ) . load_extension , ' ui-select ' )
-- See `:help telescope.builtin`
-- See `:help telescope.builtin`
local builtin = require ' telescope.builtin '
local builtin = require ' telescope.builtin '
vim.keymap . set ( ' n ' , ' <leader>sh ' , builtin.help_tags , { desc = ' [S]earch [H]elp ' } )
vim.keymap . set ( ' n ' , ' <leader>sh ' , builtin.help_tags , { desc = ' [S]earch [H]elp ' } )
vim.keymap . set ( ' n ' , ' <leader>sk ' , builtin.keymaps , { desc = ' [S]earch [K]eymaps ' } )
vim.keymap . set ( ' n ' , ' <leader>sk ' , builtin.keymaps , { desc = ' [S]earch [K]eymaps ' } )
vim.keymap . set ( ' n ' , ' <leader>sf ' , builtin.find_files , { desc = ' [S]earch [F]iles ' } )
vim.keymap . set ( ' n ' , ' <leader>sf ' , builtin.find_files , { desc = ' [S]earch [F]iles ' } )
vim.keymap . set ( ' n ' , ' <leader>ss ' , builtin.builtin , { desc = ' [S]earch [S]elect Telescope ' } )
vim.keymap . set ( ' n ' , ' <leader>ss ' , builtin.builtin , { desc = ' [S]earch [S]elect Telescope ' } )
vim.keymap . set ( { ' n ' , ' v ' } , ' <leader>sw ' , builtin.grep_string , { desc = ' [S]earch current [W]ord ' } )
vim.keymap . set ( { ' n ' , ' v ' } , ' <leader>sw ' , builtin.grep_string , { desc = ' [S]earch current [W]ord ' } )
vim.keymap . set ( ' n ' , ' <leader>sg ' , builtin.live_grep , { desc = ' [S]earch by [G]rep ' } )
vim.keymap . set ( ' n ' , ' <leader>sg ' , builtin.live_grep , { desc = ' [S]earch by [G]rep ' } )
vim.keymap . set ( ' n ' , ' <leader>sd ' , builtin.diagnostics , { desc = ' [S]earch [D]iagnostics ' } )
vim.keymap . set ( ' n ' , ' <leader>sd ' , builtin.diagnostics , { desc = ' [S]earch [D]iagnostics ' } )
vim.keymap . set ( ' n ' , ' <leader>sr ' , builtin.resume , { desc = ' [S]earch [R]esume ' } )
vim.keymap . set ( ' n ' , ' <leader>sr ' , builtin.resume , { desc = ' [S]earch [R]esume ' } )
vim.keymap . set ( ' n ' , ' <leader>s. ' , builtin.oldfiles , { desc = ' [S]earch Recent Files ("." for repeat) ' } )
vim.keymap . set ( ' n ' , ' <leader>s. ' , builtin.oldfiles , { desc = ' [S]earch Recent Files ("." for repeat) ' } )
vim.keymap . set ( ' n ' , ' <leader>sc ' , builtin.commands , { desc = ' [S]earch [C]ommands ' } )
vim.keymap . set ( ' n ' , ' <leader>sc ' , builtin.commands , { desc = ' [S]earch [C]ommands ' } )
vim.keymap . set ( ' n ' , ' <leader><leader> ' , builtin.buffers , { desc = ' [ ] Find existing buffers ' } )
vim.keymap . set ( ' n ' , ' <leader><leader> ' , builtin.buffers , { desc = ' [ ] Find existing buffers ' } )
-- This runs on LSP attach per buffer (see main LSP attach function in 'neovim/nvim-lspconfig' config for more info,
-- This runs on LSP attach per buffer (see main LSP attach function in 'neovim/nvim-lspconfig' config for more info,
-- it is better explained there). This allows easily switching between pickers if you prefer using something else!
-- it is better explained there). This allows easily switching between pickers if you prefer using something else!
vim.api . nvim_create_autocmd ( ' LspAttach ' , {
vim.api . nvim_create_autocmd ( ' LspAttach ' , {
group = vim.api . nvim_create_augroup ( ' telescope-lsp-attach ' , { clear = true } ) ,
group = vim.api . nvim_create_augroup ( ' telescope-lsp-attach ' , { clear = true } ) ,
callback = function ( event )
callback = function ( event )
local buf = event.buf
local buf = event.buf
@ -453,20 +435,20 @@ require('lazy').setup({
-- the definition of its *type*, not where it was *defined*.
-- the definition of its *type*, not where it was *defined*.
vim.keymap . set ( ' n ' , ' grt ' , builtin.lsp_type_definitions , { buffer = buf , desc = ' [G]oto [T]ype Definition ' } )
vim.keymap . set ( ' n ' , ' grt ' , builtin.lsp_type_definitions , { buffer = buf , desc = ' [G]oto [T]ype Definition ' } )
end ,
end ,
} )
} )
-- Override default behavior and theme when searching
-- Override default behavior and theme when searching
vim.keymap . set ( ' n ' , ' <leader>/ ' , function ( )
vim.keymap . set ( ' n ' , ' <leader>/ ' , function ( )
-- You can pass additional configuration to Telescope to change the theme, layout, etc.
-- You can pass additional configuration to Telescope to change the theme, layout, etc.
builtin.current_buffer_fuzzy_find ( require ( ' telescope.themes ' ) . get_dropdown {
builtin.current_buffer_fuzzy_find ( require ( ' telescope.themes ' ) . get_dropdown {
winblend = 10 ,
winblend = 10 ,
previewer = false ,
previewer = false ,
} )
} )
end , { desc = ' [/] Fuzzily search in current buffer ' } )
end , { desc = ' [/] Fuzzily search in current buffer ' } )
-- It's also possible to pass additional configuration options.
-- It's also possible to pass additional configuration options.
-- See `:help telescope.builtin.live_grep()` for information about particular keys
-- See `:help telescope.builtin.live_grep()` for information about particular keys
vim.keymap . set (
vim.keymap . set (
' n ' ,
' n ' ,
' <leader>s/ ' ,
' <leader>s/ ' ,
function ( )
function ( )
@ -476,66 +458,50 @@ require('lazy').setup({
}
}
end ,
end ,
{ desc = ' [S]earch [/] in Open Files ' }
{ desc = ' [S]earch [/] in Open Files ' }
)
)
-- Shortcut for searching your Neovim configuration files
-- Shortcut for searching your Neovim configuration files
vim.keymap . set ( ' n ' , ' <leader>sn ' , function ( ) builtin.find_files { cwd = vim.fn . stdpath ' config ' } end , { desc = ' [S]earch [N]eovim files ' } )
vim.keymap . set ( ' n ' , ' <leader>sn ' , function ( ) builtin.find_files { cwd = vim.fn . stdpath ' config ' } end , { desc = ' [S]earch [N]eovim files ' } )
end ,
} ,
-- LSP Plugins
-- LSP Plugins
{
-- 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 ' ,
---@module 'mason.settings'
---@type MasonSettings
---@diagnostic disable-next-line: missing-fields
opts = { } ,
} ,
-- Maps LSP server names between nvim-lspconfig and Mason package names.
' mason-org/mason-lspconfig.nvim ' ,
' WhoIsSethDaniel/mason-tool-installer.nvim ' ,
-- Useful status updates for LSP.
-- Automatically install LSPs and related tools to stdpath for Neovim
{ ' j-hui/fidget.nvim ' , opts = { } } ,
-- Mason must be loaded before its dependents so we need to set it up here.
} ,
require ( ' mason ' ) . setup { }
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.
-- Useful status updates for LSP.
-- That is to say, every time a new file is opened that is associated with
require ( ' fidget ' ) . setup { }
-- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this
-- function will be executed to configure the current buffer
-- Brief aside: **What is LSP?**
vim.api . nvim_create_autocmd ( ' LspAttach ' , {
--
-- 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 } ) ,
group = vim.api . nvim_create_augroup ( ' kickstart-lsp-attach ' , { clear = true } ) ,
callback = function ( event )
callback = function ( event )
-- NOTE: Remember that Lua is a real programming language, and as such it is possible
-- NOTE: Remember that Lua is a real programming language, and as such it is possible
@ -597,13 +563,13 @@ require('lazy').setup({
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 ' )
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 ' )
end
end
end ,
end ,
} )
} )
-- Enable the following language servers
-- Enable the following language servers
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
-- See `:help lsp-config` for information about keys and how to configure
-- See `:help lsp-config` for information about keys and how to configure
---@type table<string, vim.lsp.Config>
---@type table<string, vim.lsp.Config>
local servers = {
local servers = {
-- clangd = {},
-- clangd = {},
-- gopls = {},
-- gopls = {},
-- pyright = {},
-- pyright = {},
@ -650,45 +616,29 @@ require('lazy').setup({
} ,
} ,
} ,
} ,
} ,
} ,
}
}
-- Ensure the servers and tools above are installed
-- Ensure the servers and tools above are installed
--
--
-- To check the current status of installed tools and/or manually install
-- To check the current status of installed tools and/or manually install
-- other tools, you can run
-- other tools, you can run
-- :Mason
-- :Mason
--
--
-- You can press `g?` for help in this menu.
-- You can press `g?` for help in this menu.
local ensure_installed = vim.tbl_keys ( servers or { } )
local ensure_installed = vim.tbl_keys ( servers or { } )
vim.list_extend ( ensure_installed , {
vim.list_extend ( ensure_installed , {
-- You can add other tools here that you want Mason to install
-- You can add other tools here that you want Mason to install
} )
} )
require ( ' mason-tool-installer ' ) . setup { ensure_installed = ensure_installed }
require ( ' mason-tool-installer ' ) . setup { ensure_installed = ensure_installed }
for name , server in pairs ( servers ) do
for name , server in pairs ( servers ) do
vim.lsp . config ( name , server )
vim.lsp . config ( name , server )
vim.lsp . enable ( name )
vim.lsp . enable ( name )
end
end
end ,
} ,
-- Autoformat
-- Autoformat
{
require ( ' conform ' ) . setup {
' stevearc/conform.nvim ' ,
event = { ' BufWritePre ' } ,
cmd = { ' ConformInfo ' } ,
keys = {
{
' <leader>f ' ,
function ( ) require ( ' conform ' ) . format { async = true } end ,
mode = ' ' ,
desc = ' [F]ormat buffer ' ,
} ,
} ,
---@module 'conform'
---@type conform.setupOpts
opts = {
notify_on_error = false ,
notify_on_error = false ,
format_on_save = function ( bufnr )
format_on_save = function ( bufnr )
-- You can specify filetypes to autoformat on save here:
-- You can specify filetypes to autoformat on save here:
@ -714,43 +664,22 @@ require('lazy').setup({
-- You can use 'stop_after_first' to run the first available formatter from the list
-- You can use 'stop_after_first' to run the first available formatter from the list
-- javascript = { "prettierd", "prettier", stop_after_first = true },
-- javascript = { "prettierd", "prettier", stop_after_first = true },
} ,
} ,
} ,
}
} ,
-- Autocompletion
vim.keymap . set ( { ' n ' , ' v ' } , ' <leader>f ' , function ( ) require ( ' conform ' ) . format { async = true } end , { desc = ' [F]ormat buffer ' } )
{
' saghen/blink.cmp ' ,
-- Snippet Engine
event = ' VimEnter ' ,
--
version = ' 1.* ' ,
-- `friendly-snippets` contains a variety of premade snippets.
dependencies = {
-- See the README about individual language/framework/plugin snippets:
-- Snippet Engine
-- https://github.com/rafamadriz/friendly-snippets
{
--
' L3MON4D3/LuaSnip ' ,
-- vim.pack.add(gh 'rafamadriz/friendly-snippets')
version = ' 2.* ' ,
-- require('luasnip.loaders.from_vscode').lazy_load()
build = ( function ( )
require ( ' luasnip ' ) . setup { }
-- Build Step is needed for regex support in snippets.
-- This step is not supported in many windows environments.
-- Autocompletion
-- Remove the below condition to re-enable on windows.
require ( ' blink.cmp ' ) . setup {
if vim.fn . has ' win32 ' == 1 or vim.fn . executable ' make ' == 0 then return end
return ' make install_jsregexp '
end ) ( ) ,
dependencies = {
-- `friendly-snippets` contains a variety of premade snippets.
-- See the README about individual language/framework/plugin snippets:
-- https://github.com/rafamadriz/friendly-snippets
-- {
-- 'rafamadriz/friendly-snippets',
-- config = function()
-- require('luasnip.loaders.from_vscode').lazy_load()
-- end,
-- },
} ,
opts = { } ,
} ,
} ,
---@module 'blink.cmp'
---@type blink.cmp.Config
opts = {
keymap = {
keymap = {
-- 'default' (recommended) for mappings similar to built-in completions
-- 'default' (recommended) for mappings similar to built-in completions
-- <c-y> to accept ([y]es) the completion.
-- <c-y> to accept ([y]es) the completion.
@ -808,102 +737,78 @@ require('lazy').setup({
-- Shows a signature help window while you type arguments for a function
-- Shows a signature help window while you type arguments for a function
signature = { enabled = true } ,
signature = { enabled = true } ,
} ,
}
} ,
{
-- You can easily change to a different colorscheme.
-- You can easily change to a different colorscheme.
-- Change the name of the colorscheme plugin below, and then
-- Change the name of the colorscheme plugin below, and then
-- change the command in the config to whatever the name of that colorscheme is.
-- 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`.
-- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`.
---@diagnostic disable-next-line: missing-fields
' folke/tokyonight.nvim ' ,
require ( ' tokyonight ' ) . setup {
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 = {
styles = {
comments = { italic = false } , -- Disable italics in comments
comments = { italic = false } , -- Disable italics in comments
} ,
} ,
}
}
-- Load the colorscheme here.
-- Load the colorscheme here.
-- Like many other themes, this one has different styles, and you could load
-- Like many other themes, this one has different styles, and you could load
-- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'.
-- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'.
vim.cmd . colorscheme ' tokyonight-night '
vim.cmd . colorscheme ' tokyonight-night '
end ,
} ,
-- Highlight todo, notes, etc in comments
-- Highlight todo, notes, etc in comments
{
require ( ' todo-comments ' ) . setup { signs = false }
' folke/todo-comments.nvim ' ,
event = ' VimEnter ' ,
dependencies = { ' nvim-lua/plenary.nvim ' } ,
---@module 'todo-comments'
---@type TodoOptions
---@diagnostic disable-next-line: missing-fields
opts = { signs = false } ,
} ,
-- Collection of various small independent plugins/modules
-- Collection of various small independent plugins/modules
{
' nvim-mini/mini.nvim ' ,
-- Better Around/Inside textobjects
config = function ( )
--
-- Better Around/Inside textobjects
-- Examples:
--
-- - va) - [V]isually select [A]round [)]paren
-- Examples:
-- - yinq - [Y]ank [I]nside [I]next [Q]uote
-- - va) - [V]isually select [A]round [)]paren
-- - ci' - [C]hange [I]nside [']quote
-- - yinq - [Y]ank [I]nside [I]next [Q]uote
require ( ' mini.ai ' ) . setup {
-- - ci' - [C]hange [I]nside [']quote
require ( ' mini.ai ' ) . setup {
-- NOTE: Avoid conflicts with the built-in incremental selection mappings on Neovim>=0.12 (see `:help treesitter-incremental-selection`)
-- NOTE: Avoid conflicts with the built-in incremental selection mappings on Neovim>=0.12 (see `:help treesitter-incremental-selection`)
mappings = {
mappings = {
around_next = ' aa ' ,
around_next = ' aa ' ,
inside_next = ' ii ' ,
inside_next = ' ii ' ,
} ,
} ,
n_lines = 500 ,
n_lines = 500 ,
}
}
-- Add/delete/replace surroundings (brackets, quotes, etc.)
-- Add/delete/replace surroundings (brackets, quotes, etc.)
--
--
-- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
-- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
-- - sd' - [S]urround [D]elete [']quotes
-- - sd' - [S]urround [D]elete [']quotes
-- - sr)' - [S]urround [R]eplace [)] [']
-- - sr)' - [S]urround [R]eplace [)] [']
require ( ' mini.surround ' ) . setup ( )
require ( ' mini.surround ' ) . setup ( )
-- Simple and easy statusline.
-- Simple and easy statusline.
-- You could remove this setup call if you don't like it,
-- You could remove this setup call if you don't like it,
-- and try some other statusline plugin
-- and try some other statusline plugin
local statusline = require ' mini.statusline '
local statusline = require ' mini.statusline '
-- set use_icons to true if you have a Nerd Font
-- set use_icons to true if you have a Nerd Font
statusline.setup { use_icons = vim.g . have_nerd_font }
statusline.setup { use_icons = vim.g . have_nerd_font }
-- You can configure sections in the statusline by overriding their
-- You can configure sections in the statusline by overriding their
-- default behavior. For example, here we set the section for
-- default behavior. For example, here we set the section for
-- cursor location to LINE:COLUMN
-- cursor location to LINE:COLUMN
---@diagnostic disable-next-line: duplicate-set-field
---@diagnostic disable-next-line: duplicate-set-field
statusline.section_location = function ( ) return ' %2l:%-2v ' end
statusline.section_location = function ( ) return ' %2l:%-2v ' end
-- ... and there is more!
-- ... and there is more!
-- Check out: https://github.com/nvim-mini/mini.nvim
-- Check out: https://github.com/nvim-mini/mini.nvim
end ,
} ,
-- Highlight, edit, and navigate code
-- Highlight, edit, and navigate code
{
' nvim-treesitter/nvim-treesitter ' ,
lazy = false ,
build = ' :TSUpdate ' ,
branch = ' main ' ,
-- [[ Configure Treesitter ]] See `:help nvim-treesitter-intro`
config = function ( )
-- ensure basic parser are installed
local parsers = { ' bash ' , ' c ' , ' diff ' , ' html ' , ' lua ' , ' luadoc ' , ' markdown ' , ' markdown_inline ' , ' query ' , ' vim ' , ' vimdoc ' }
require ( ' nvim-treesitter ' ) . install ( parsers )
---@param buf integer
-- [[ Configure Treesitter ]] See `:help nvim-treesitter-intro`
---@param language string
-- ensure basic parser are installed
local function treesitter_try_attach ( buf , language )
local parsers = { ' bash ' , ' c ' , ' diff ' , ' html ' , ' lua ' , ' luadoc ' , ' markdown ' , ' markdown_inline ' , ' query ' , ' vim ' , ' vimdoc ' }
require ( ' nvim-treesitter ' ) . install ( parsers )
---@param buf integer
---@param language string
local function treesitter_try_attach ( buf , language )
-- check if parser exists and load it
-- check if parser exists and load it
if not vim.treesitter . language.add ( language ) then return end
if not vim.treesitter . language.add ( language ) then return end
-- enables syntax highlighting and other treesitter features
-- enables syntax highlighting and other treesitter features
@ -920,10 +825,10 @@ require('lazy').setup({
-- enables treesitter based indentation
-- enables treesitter based indentation
if has_indent_query then vim.bo . indentexpr = " v:lua.require'nvim-treesitter'.indentexpr() " end
if has_indent_query then vim.bo . indentexpr = " v:lua.require'nvim-treesitter'.indentexpr() " end
end
end
local available_parsers = require ( ' nvim-treesitter ' ) . get_available ( )
local available_parsers = require ( ' nvim-treesitter ' ) . get_available ( )
vim.api . nvim_create_autocmd ( ' FileType ' , {
vim.api . nvim_create_autocmd ( ' FileType ' , {
callback = function ( args )
callback = function ( args )
local buf , filetype = args.buf , args.match
local buf , filetype = args.buf , args.match
@ -943,57 +848,31 @@ require('lazy').setup({
treesitter_try_attach ( buf , language )
treesitter_try_attach ( buf , language )
end
end
end ,
end ,
} )
end ,
} ,
-- 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.
-- NOTE: Next step on your Neovim journey: Add/Configure additional plugins for Kickstart
--
-- 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 recommended keymaps
-- 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' },
--
-- 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
} , { ---@diagnostic disable-line: missing-fields
ui = {
-- If you are using a Nerd Font: set icons to an empty table which will use the
-- default lazy.nvim defined Nerd Font icons, otherwise define a unicode icons table
icons = vim.g . have_nerd_font and { } or {
cmd = ' ⌘ ' ,
config = ' 🛠 ' ,
event = ' 📅 ' ,
ft = ' 📂 ' ,
init = ' ⚙ ' ,
keys = ' 🗝 ' ,
plugin = ' 🔌 ' ,
runtime = ' 💻 ' ,
require = ' 🌙 ' ,
source = ' 📄 ' ,
start = ' 🚀 ' ,
task = ' 📌 ' ,
lazy = ' 💤 ' ,
} ,
} ,
} )
} )
-- 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.
-- NOTE: Next step on your Neovim journey: Add/Configure additional plugins for Kickstart
--
-- 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 recommended keymaps
-- NOTE: You can add your own plugins, configuration, etc from `lua/custom/plugins/*.lua`
--
-- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going.
-- require('custom.plugins')()
--
-- For additional information with loading, sourcing and examples see `:help vim.pack`
-- and `:help vim.pack-examples`
-- The line beneath this is called `modeline`. See `:help modeline`
-- The line beneath this is called `modeline`. See `:help modeline`
-- vim: ts=2 sts=2 sw=2 et
-- vim: ts=2 sts=2 sw=2 et