@ -25,9 +25,12 @@ vim.opt.mouse = 'a'
vim.opt . showmode = false
-- Sync clipboard between OS and Neovim.
-- Schedule the setting after `UiEnter` because it can increase startup-time.
-- Remove this option if you want your OS clipboard to remain independent.
-- See `:help 'clipboard'`
vim.opt . clipboard = ' unnamedplus '
vim.schedule ( function ( )
vim.opt . clipboard = ' unnamedplus '
end )
-- Enable break indent
vim.opt . breakindent = true
@ -46,7 +49,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
@ -71,8 +73,8 @@ vim.opt.scrolloff = 10
-- [[ Basic Keymaps ]]
-- See `:help vim.keymap.set()`
-- Set highlight on search, but clear o n pressing <Esc> in normal mode
vim.opt . hlsearch = true
-- Clear highlights on search whe n pressing <Esc> in normal mode
-- See `:help hlsearch`
vim.keymap . set ( ' n ' , ' <Esc> ' , ' <cmd>nohlsearch<CR> ' )
-- Diagnostic keymaps
@ -118,7 +120,7 @@ vim.api.nvim_create_autocmd('TextYankPost', {
-- [[ Install `lazy.nvim` plugin manager ]]
-- 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 . fs_stat ( lazypath ) then
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
@ -146,7 +148,7 @@ 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.
--
{
' supermaven-inc/supermaven-nvim ' ,
@ -180,6 +182,19 @@ require('lazy').setup({
-- Here is a more advanced example where we pass configuration
-- options to `gitsigns.nvim`. This is equivalent to the following Lua:
-- require('gitsigns').setup({ ... })
-- 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`.
--
-- See `:help gitsigns` to understand what the configuration keys do
{ -- Adds git related signs to the gutter, as well as utilities for managing changes
@ -223,27 +238,64 @@ 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'
config = function ( ) -- This is the function that runs, AFTER loading
require ( ' which-key ' ) . setup ( )
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 which-key.nvim defined Nerd Font icons, otherwise define a string table
keys = vim.g . have_nerd_font and { } or {
Up = ' <Up> ' ,
Down = ' <Down> ' ,
Left = ' <Left> ' ,
Right = ' <Right> ' ,
C = ' <C-…> ' ,
M = ' <M-…> ' ,
D = ' <D-…> ' ,
S = ' <S-…> ' ,
CR = ' <CR> ' ,
Esc = ' <Esc> ' ,
ScrollWheelDown = ' <ScrollWheelDown> ' ,
ScrollWheelUp = ' <ScrollWheelUp> ' ,
NL = ' <NL> ' ,
BS = ' <BS> ' ,
Space = ' <Space> ' ,
Tab = ' <Tab> ' ,
F1 = ' <F1> ' ,
F2 = ' <F2> ' ,
F3 = ' <F3> ' ,
F4 = ' <F4> ' ,
F5 = ' <F5> ' ,
F6 = ' <F6> ' ,
F7 = ' <F7> ' ,
F8 = ' <F8> ' ,
F9 = ' <F9> ' ,
F10 = ' <F10> ' ,
F11 = ' <F11> ' ,
F12 = ' <F12> ' ,
} ,
} ,
-- Document existing key chains
require ( ' which-key ' ) . add {
{ ' <leader>c ' , group = ' [C]ode ' } ,
spec = {
{ ' <leader>c ' , group = ' [C]ode ' , mode = { ' n ' , ' x ' } } ,
{ ' <leader>d ' , group = ' [D]ocument ' } ,
{ ' <leader>r ' , group = ' [R]ename ' } ,
{ ' <leader>s ' , group = ' [S]earch ' } ,
{ ' <leader>w ' , group = ' [W]orkspace ' } ,
{ ' <leader>t ' , group = ' [T]oggle ' } ,
{ ' <leader>h ' , group = ' Git [H]unk ' , mode = { ' n ' , ' v ' } } ,
}
end ,
} ,
} ,
} ,
-- NOTE: Plugins can specify dependencies.
@ -358,16 +410,31 @@ require('lazy').setup({
end ,
} ,
{ -- LSP Configuration & Plugins
-- LSP Plugins
{
-- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins
-- used for completion, annotations and signatures of Neovim apis
' folke/lazydev.nvim ' ,
ft = ' lua ' ,
opts = {
library = {
-- Load luvit types when the `vim.uv` word is found
{ path = ' ${3rd}/luv/library ' , words = { ' vim%.uv ' } } ,
} ,
} ,
} ,
{
-- 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 = { } } ,
-- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins
@ -384,6 +451,9 @@ require('lazy').setup({
} ,
} ,
{ ' Bilal2453/luvit-meta ' , lazy = true } ,
-- Allows extra capabilities provided by nvim-cmp
' hrsh7th/cmp-nvim-lsp ' ,
} ,
config = function ( )
-- Brief aside: **What is LSP?**
@ -423,8 +493,9 @@ require('lazy').setup({
--
-- 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 )
vim.keymap . set ( ' n ' , keys , func , { buffer = event.buf , desc = ' LSP: ' .. desc } )
local map = function ( keys , func , desc , mode )
mode = mode or ' n '
vim.keymap . set ( mode , keys , func , { buffer = event.buf , desc = ' LSP: ' .. desc } )
end
-- Jump to the definition of the word under your cursor.
@ -458,7 +529,7 @@ require('lazy').setup({
-- 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 ( ' <leader>ca ' , vim.lsp . buf.code_action , ' [C]ode [A]ction ' )
map ( ' <leader>ca ' , vim.lsp . buf.code_action , ' [C]ode [A]ction ' , { ' n ' , ' x ' } )
-- WARN: This is not Goto Definition, this is Goto Declaration.
-- For example, in C this would take you to the header.
@ -505,6 +576,16 @@ require('lazy').setup({
end ,
} )
-- Change diagnostic symbols in the sign column (gutter)
-- if vim.g.have_nerd_font then
-- local signs = { ERROR = '', WARN = '', INFO = '', HINT = '' }
-- local diagnostic_signs = {}
-- for type, icon in pairs(signs) do
-- diagnostic_signs[vim.diagnostic.severity[type]] = icon
-- end
-- vim.diagnostic.config { signs = { text = diagnostic_signs } }
-- 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.
@ -533,14 +614,15 @@ require('lazy').setup({
-- 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 (`tsserver`) will work just fine
tsserver = { } ,
-- But for many setups, the LSP (`ts_ls`) will work just fine
-- ts_ls = {},
--
html = { } ,
tailwindcss = { } ,
lua_ls = {
-- cmd = { ...},
-- filetypes = { ... },
-- cmd = { ... },
-- filetypes = { ... },
-- capabilities = {},
settings = {
Lua = {
@ -555,13 +637,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 { } )
@ -576,7 +661,7 @@ require('lazy').setup({
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 server )
-- certain features of an LSP (for example, turning off formatting for ts _l s)
server.capabilities = vim.tbl_deep_extend ( ' force ' , { } , capabilities , server.capabilities or { } )
require ( ' lspconfig ' ) [ server_name ] . setup ( server )
end ,
@ -593,7 +678,7 @@ require('lazy').setup({
{
' <leader>f ' ,
function ( )
require ( ' conform ' ) . format { async = true , lsp_f allback = true }
require ( ' conform ' ) . format { async = true , lsp_f ormat = ' fallback ' }
end ,
mode = ' ' ,
desc = ' [F]ormat buffer ' ,
@ -606,9 +691,15 @@ require('lazy').setup({
-- have a well standardized coding style. You can add additional
-- languages here or re-enable it for the disabled ones.
local disable_filetypes = { c = true , cpp = true }
local lsp_format_opt
if disable_filetypes [ vim.bo [ bufnr ] . filetype ] then
lsp_format_opt = ' never '
else
lsp_format_opt = ' fallback '
end
return {
timeout_ms = 500 ,
lsp_fallback = not disable_filetypes [ vim.bo [ bufnr ] . filetype ] ,
lsp_f ormat = lsp_format_opt ,
}
end ,
formatters_by_ft = {
@ -616,9 +707,8 @@ require('lazy').setup({
-- Conform can also run multiple formatters sequentially
-- python = { "isort", "black" },
--
-- You can use a sub-list to tell conform to run *until* a formatter
-- is found.
-- javascript = { { "prettierd", "prettier" } },
-- You can use 'stop_after_first' to run the first available formatter from the list
-- javascript = { "prettierd", "prettier", stop_after_first = true },
} ,
} ,
} ,
@ -809,6 +899,8 @@ require('lazy').setup({
{ -- Highlight, edit, and navigate code
' nvim-treesitter/nvim-treesitter ' ,
build = ' :TSUpdate ' ,
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 ' , ' go ' , ' python ' , ' templ ' } ,
-- Autoinstall languages that are not installed
@ -822,24 +914,15 @@ require('lazy').setup({
} ,
indent = { enable = true , disable = { ' ruby ' } } ,
} ,
config = function ( _ , opts )
-- [[ Configure Treesitter ]] See `:help nvim-treesitter`
-- Prefer git instead of curl in order to improve connectivity in some environments
require ( ' nvim-treesitter.install ' ) . prefer_git = true
---@diagnostic disable-next-line: missing-fields
require ( ' nvim-treesitter.configs ' ) . setup ( opts )
-- There are additional nvim-treesitter modules that you can use to interact
-- with nvim-treesitter. You should go explore a few and see what interests you:
--
-- - Incremental selection: Included, see `:help nvim-treesitter-incremental-selection-mod`
-- - Show your current context: https://github.com/nvim-treesitter/nvim-treesitter-context
-- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects
end ,
-- There are additional nvim-treesitter modules that you can use to interact
-- with nvim-treesitter. You should go explore a few and see what interests you:
--
-- - Incremental selection: Included, see `:help nvim-treesitter-incremental-selection-mod`
-- - Show your current context: https://github.com/nvim-treesitter/nvim-treesitter-context
-- - 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.
@ -860,8 +943,8 @@ require('lazy').setup({
--
-- 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`
{ ' LazyVim/LazyVim ' , import = ' lazyvim.plugins ' } ,
{ import = ' lazyvim.plugins.extras.coding.codeium ' } ,
-- { 'LazyVim/LazyVim', import = 'lazyvim.plugins' } ,
-- { import = 'lazyvim.plugins.extras.coding.codeium' } ,
-- { import = 'lazyvim.plugins.extras.coding.native_snippets' },
-- { import = 'lazyvim.plugins.extras' },
@ -870,6 +953,14 @@ require('lazy').setup({
-- { import = ''},
{ import = ' custom.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