2023-02-17 16:31:57 -05:00
--[[
=====================================================================
==================== READ THIS BEFORE CONTINUING ====================
=====================================================================
2024-02-26 10:03:53 -05:00
======== . -----. ========
======== . ----------------------. | === | ========
======== | . - " " " " " " " " " " " " " " " " " " - . | |-----| ========
======== || || | === | ========
======== || KICKSTART.NVIM || |-----| ========
======== || || | === | ========
======== || || |-----| ========
======== || : Tutor || | :: :: : | ========
======== | ' -..................- ' | | ____o | ========
======== ` " " ) ----------------(""` ___________ ========
======== / :: :: :: :: :: | | :: :: :: :: :: \ \ no mouse \ ========
======== / :: : = = = = = = = = | | = = hjkl = = :: : \ \ required \ ========
======== ' """""""""""" ' ' """""""""""" ' ' """""""""" ' ========
======== ========
=====================================================================
=====================================================================
2023-02-17 16:31:57 -05:00
2024-02-26 10:03:53 -05:00
What is Kickstart ?
2023-02-17 16:31:57 -05:00
2024-02-26 10:03:53 -05:00
Kickstart.nvim is * not * a distribution .
2023-02-17 16:31:57 -05:00
2024-02-26 10:03:53 -05:00
Kickstart.nvim is a starting point for your own configuration .
The goal is that you can read every line of code , top - to - bottom , understand
what your configuration is doing , and modify it to suit your needs .
2023-02-17 16:31:57 -05:00
2024-02-26 10:03:53 -05:00
Once you ' ve done that, you can start exploring, configuring and tinkering to
2024-03-18 18:35:53 +01:00
make Neovim your own ! That might mean leaving Kickstart just the way it is for a while
2024-02-26 10:03:53 -05:00
or immediately breaking it into modular pieces . It ' s up to you!
2023-08-10 15:00:15 -04:00
2024-02-26 10:03:53 -05:00
If you don ' t know anything about Lua, I recommend taking some time to read through
a guide . One possible example which will only take 10 - 15 minutes :
- https : // learnxinyminutes.com / docs / lua /
2023-02-17 16:31:57 -05:00
2024-02-26 10:03:53 -05:00
After understanding a bit more about Lua , you can use ` : help lua - guide ` as a
reference for how Neovim integrates Lua .
- : help lua - guide
- ( or HTML version ) : https : // neovim.io / doc / user / lua - guide.html
2023-02-17 16:31:57 -05:00
Kickstart Guide :
2024-02-26 10:03:53 -05:00
TODO : The very first thing you should do is to run the command ` : Tutor ` in Neovim .
If you don ' t know what this means, type the following:
- < escape key >
- :
- Tutor
- < enter key >
2024-03-18 18:35:53 +01:00
( If you already know the Neovim basics , you can skip this step . )
2024-02-26 10:03:53 -05:00
Once you ' ve completed that, you can continue working through **AND READING** the rest
2024-03-18 18:35:53 +01:00
of the kickstart init.lua .
2024-02-26 10:03:53 -05:00
Next , run AND READ ` : help ` .
This will open up a help window with some basic information
about reading , navigating and searching the builtin help documentation .
This should be the first place you go to look when you ' re stuck or confused
2024-03-18 18:35:53 +01:00
with something . It ' s one of my favorite Neovim features.
2023-02-17 16:31:57 -05:00
2024-02-26 10:03:53 -05:00
MOST IMPORTANTLY , we provide a keymap " <space>sh " to [ s ] earch the [ h ] elp documentation ,
2024-03-18 18:35:53 +01:00
which is very useful when you ' re not exactly sure of what you ' re looking for .
2024-02-26 10:03:53 -05:00
I have left several ` : help X ` comments throughout the init.lua
These are hints about where to find more information about the relevant settings ,
2024-03-18 18:35:53 +01:00
plugins or Neovim features used in Kickstart .
2024-02-26 10:03:53 -05:00
NOTE : Look for lines like this
2024-03-18 18:35:53 +01:00
Throughout the file . These are for you , the reader , to help you understand what is happening .
2024-02-26 10:03:53 -05:00
Feel free to delete them once you know what you ' re doing, but they should serve as a guide
2024-03-18 18:35:53 +01:00
for when you are first encountering a few different constructs in your Neovim config .
2024-02-26 10:03:53 -05:00
2024-03-18 18:35:53 +01:00
If you experience any errors while trying to install kickstart , run ` : checkhealth ` for more info .
2023-02-17 16:31:57 -05:00
I hope you enjoy your Neovim journey ,
- TJ
2024-02-26 10:03:53 -05:00
P.S . You can delete this when you ' re done too. It ' s your config now ! : )
2023-02-17 16:31:57 -05:00
--]]
2023-11-07 11:27:14 +01:00
2023-02-17 16:31:57 -05:00
-- Set <space> as the leader key
-- See `:help mapleader`
2024-02-26 10:03:53 -05:00
-- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used)
2023-02-17 16:31:57 -05:00
vim.g . mapleader = ' '
vim.g . maplocalleader = ' '
2024-04-17 15:59:14 +02:00
-- Set to true if you have a Nerd Font installed and selected in the terminal
2024-03-06 17:49:44 +01:00
vim.g . have_nerd_font = false
2024-02-26 10:03:53 -05:00
-- [[ Setting options ]]
-- See `:help vim.opt`
-- NOTE: You can change these options as you wish!
-- For more options, you can see `:help option-list`
-- Make line numbers default
vim.opt . number = true
2024-03-18 18:35:53 +01:00
-- You can also add relative line numbers, to help with jumping.
2024-02-26 10:03:53 -05:00
-- Experiment for yourself to see if you like it!
-- vim.opt.relativenumber = true
-- Enable mouse mode, can be useful for resizing splits for example!
vim.opt . mouse = ' a '
2024-03-18 18:35:53 +01:00
-- Don't show the mode, since it's already in the status line
2024-02-26 10:03:53 -05:00
vim.opt . showmode = false
-- Sync clipboard between OS and Neovim.
2024-07-28 21:41:34 +00:00
-- Schedule the setting after `UiEnter` because it can increase startup-time.
2024-02-26 10:03:53 -05:00
-- Remove this option if you want your OS clipboard to remain independent.
-- See `:help 'clipboard'`
2024-07-28 21:41:34 +00:00
vim.schedule ( function ( )
vim.opt . clipboard = ' unnamedplus '
end )
2024-02-26 10:03:53 -05:00
-- Enable break indent
vim.opt . breakindent = true
-- Save undo history
vim.opt . undofile = true
2024-03-18 18:35:53 +01:00
-- Case-insensitive searching UNLESS \C or one or more capital letters in the search term
2024-02-26 10:03:53 -05:00
vim.opt . ignorecase = true
vim.opt . smartcase = true
-- Keep signcolumn on by default
vim.opt . signcolumn = ' yes '
-- Decrease update time
vim.opt . updatetime = 250
2024-03-15 17:24:49 +03:30
-- Decrease mapped sequence wait time
2024-02-26 10:03:53 -05:00
vim.opt . timeoutlen = 300
-- Configure how new splits should be opened
vim.opt . splitright = true
vim.opt . splitbelow = true
2024-03-18 18:35:53 +01:00
-- Sets how neovim will display certain whitespace characters in the editor.
2024-03-02 04:07:34 +07:00
-- See `:help 'list'`
-- and `:help 'listchars'`
2024-02-26 10:03:53 -05:00
vim.opt . list = true
vim.opt . listchars = { tab = ' » ' , trail = ' · ' , nbsp = ' ␣ ' }
-- Preview substitutions live, as you type!
vim.opt . inccommand = ' split '
-- Show which line your cursor is on
vim.opt . cursorline = true
-- Minimal number of screen lines to keep above and below the cursor.
vim.opt . scrolloff = 10
2025-03-12 17:24:44 -04:00
-- if performing an operation that would fail due to unsaved changes in the buffer (like `:q`),
-- instead raise a dialog asking if you wish to save the current file(s)
-- See `:help 'confirm'`
vim.opt . confirm = true
2024-02-26 10:03:53 -05:00
-- [[ Basic Keymaps ]]
-- See `:help vim.keymap.set()`
2024-07-29 00:39:54 +08:00
-- Clear highlights on search when pressing <Esc> in normal mode
-- See `:help hlsearch`
2024-02-26 10:03:53 -05:00
vim.keymap . set ( ' n ' , ' <Esc> ' , ' <cmd>nohlsearch<CR> ' )
-- Diagnostic keymaps
vim.keymap . set ( ' n ' , ' <leader>q ' , vim.diagnostic . setloclist , { desc = ' Open diagnostic [Q]uickfix list ' } )
-- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier
-- for people to discover. Otherwise, you normally need to press <C-\><C-n>, which
-- is not what someone will guess without a bit more experience.
--
-- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping
-- or just use <C-\><C-n> to exit terminal mode
vim.keymap . set ( ' t ' , ' <Esc><Esc> ' , ' <C- \\ ><C-n> ' , { desc = ' Exit terminal mode ' } )
-- TIP: Disable arrow keys in normal mode
-- vim.keymap.set('n', '<left>', '<cmd>echo "Use h to move!!"<CR>')
-- vim.keymap.set('n', '<right>', '<cmd>echo "Use l to move!!"<CR>')
-- vim.keymap.set('n', '<up>', '<cmd>echo "Use k to move!!"<CR>')
-- vim.keymap.set('n', '<down>', '<cmd>echo "Use j to move!!"<CR>')
-- Keybinds to make split navigation easier.
-- Use CTRL+<hjkl> to switch between windows
--
-- See `:help wincmd` for a list of all window commands
vim.keymap . set ( ' n ' , ' <C-h> ' , ' <C-w><C-h> ' , { desc = ' Move focus to the left window ' } )
vim.keymap . set ( ' n ' , ' <C-l> ' , ' <C-w><C-l> ' , { desc = ' Move focus to the right window ' } )
vim.keymap . set ( ' n ' , ' <C-j> ' , ' <C-w><C-j> ' , { desc = ' Move focus to the lower window ' } )
vim.keymap . set ( ' n ' , ' <C-k> ' , ' <C-w><C-k> ' , { desc = ' Move focus to the upper window ' } )
2025-04-09 16:39:17 +02:00
-- NOTE: Some terminals have colliding keymaps or are not able to send distinct keycodes
2025-03-24 20:34:57 +01:00
-- vim.keymap.set("n", "<C-S-h>", "<C-w>H", { desc = "Move window to the left" })
-- vim.keymap.set("n", "<C-S-l>", "<C-w>L", { desc = "Move window to the right" })
-- vim.keymap.set("n", "<C-S-j>", "<C-w>J", { desc = "Move window to the lower" })
-- vim.keymap.set("n", "<C-S-k>", "<C-w>K", { desc = "Move window to the upper" })
2024-02-26 10:45:32 -05:00
-- [[ Basic Autocommands ]]
2024-03-02 04:07:34 +07:00
-- See `:help lua-guide-autocommands`
2024-02-26 10:45:32 -05:00
2024-02-26 10:03:53 -05:00
-- Highlight when yanking (copying) text
-- Try it with `yap` in normal mode
-- See `:help vim.highlight.on_yank()`
vim.api . nvim_create_autocmd ( ' TextYankPost ' , {
2024-02-26 10:45:32 -05:00
desc = ' Highlight when yanking (copying) text ' ,
2024-02-26 10:03:53 -05:00
group = vim.api . nvim_create_augroup ( ' kickstart-highlight-yank ' , { clear = true } ) ,
callback = function ( )
vim.highlight . on_yank ( )
end ,
} )
2023-11-07 11:27:14 +01:00
-- [[ Install `lazy.nvim` plugin manager ]]
2024-02-26 10:03:53 -05:00
-- See `:help lazy.nvim.txt` or https://github.com/folke/lazy.nvim for more info
2023-02-17 16:31:57 -05:00
local lazypath = vim.fn . stdpath ' data ' .. ' /lazy/lazy.nvim '
2024-08-22 22:56:33 +02:00
if not ( vim.uv or vim.loop ) . fs_stat ( lazypath ) then
2024-02-26 10:03:53 -05:00
local lazyrepo = ' https://github.com/folke/lazy.nvim.git '
2024-07-16 18:06:47 +02:00
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
2024-02-26 10:03:53 -05:00
end ---@diagnostic disable-next-line: undefined-field
2023-02-17 16:31:57 -05:00
vim.opt . rtp : prepend ( lazypath )
2022-06-23 23:35:53 -04:00
2024-02-26 10:03:53 -05:00
-- [[ Configure and install plugins ]]
--
-- To check the current status of your plugins, run
-- :Lazy
2023-02-17 16:31:57 -05:00
--
2024-02-26 10:03:53 -05:00
-- You can press `?` in this menu for help. Use `:q` to close the window
--
2024-03-18 18:35:53 +01:00
-- To update plugins you can run
2024-02-26 10:03:53 -05:00
-- :Lazy update
--
-- NOTE: Here is where you install your plugins.
2024-03-06 17:49:44 +01:00
require ( ' lazy ' ) . setup ( {
2024-02-26 10:03:53 -05:00
-- NOTE: Plugins can be added with a link (or for a github repo: 'owner/repo' link).
' tpope/vim-sleuth ' , -- Detect tabstop and shiftwidth automatically
2023-02-17 16:31:57 -05:00
2024-02-26 10:03:53 -05:00
-- NOTE: Plugins can also be added by using a table,
-- with the first argument being the link and the following
-- keys can be used to configure plugin behavior/loading/etc.
--
2025-02-15 05:32:50 +02:00
-- Use `opts = {}` to automatically pass options to a plugin's `setup()` function, forcing the plugin to be loaded.
2024-02-26 10:03:53 -05:00
--
2025-02-15 05:32:50 +02:00
-- 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,
-- }
--
2024-02-26 10:03:53 -05:00
-- Here is a more advanced example where we pass configuration
2025-02-15 05:32:50 +02:00
-- options to `gitsigns.nvim`.
2024-02-26 10:03:53 -05:00
--
-- 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 = ' ~ ' } ,
} ,
} ,
} ,
2024-03-18 18:35:53 +01:00
-- NOTE: Plugins can also be configured to run Lua code when they are loaded.
2024-02-26 10:03:53 -05:00
--
-- 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:
2024-03-03 02:07:58 +00:00
-- event = 'VimEnter'
2024-02-26 10:03:53 -05:00
--
2024-03-03 02:07:58 +00:00
-- which loads which-key before all the UI elements are loaded. Events can be
2024-03-02 04:07:34 +07:00
-- normal autocommands events (`:help autocmd-events`).
2024-02-26 10:03:53 -05:00
--
2024-12-12 22:26:20 +01:00
-- Then, because we use the `opts` key (recommended), the configuration runs
2024-12-12 16:50:55 +01:00
-- after the plugin has been loaded as `require(MODULE).setup(opts)`.
2024-02-26 10:03:53 -05:00
2025-04-17 17:22:08 +02:00
{ -- Useful plugin to show you pending keybinds.
2024-02-26 10:03:53 -05:00
' folke/which-key.nvim ' ,
2024-03-03 02:07:58 +00:00
event = ' VimEnter ' , -- Sets the loading event to 'VimEnter'
2024-08-26 12:17:22 -04:00
opts = {
2024-12-29 11:04:10 -06:00
-- delay between pressing a key and opening which-key (milliseconds)
-- this setting is independent of vim.opt.timeoutlen
delay = 0 ,
2024-08-26 12:17:22 -04:00
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
2024-11-20 14:41:50 +01:00
-- default which-key.nvim defined Nerd Font icons, otherwise define a string table
2024-08-26 12:17:22 -04:00
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> ' ,
} ,
2024-08-26 22:43:59 +02:00
} ,
2024-08-26 12:17:22 -04:00
2024-08-26 22:43:59 +02:00
-- Document existing key chains
spec = {
{ ' <leader>s ' , group = ' [S]earch ' } ,
{ ' <leader>t ' , group = ' [T]oggle ' } ,
{ ' <leader>h ' , group = ' Git [H]unk ' , mode = { ' n ' , ' v ' } } ,
2024-08-26 12:17:22 -04:00
} ,
} ,
2024-02-26 10:03:53 -05:00
} ,
-- NOTE: Plugins can specify dependencies.
--
-- The dependencies are proper plugin specifications as well - anything
-- you do for a plugin at the top level, you can do for a dependency.
--
-- Use the `dependencies` key to specify the dependencies of a particular plugin
{ -- Fuzzy Finder (files, lsp, etc)
' nvim-telescope/telescope.nvim ' ,
2024-03-03 02:07:58 +00:00
event = ' VimEnter ' ,
2024-02-26 10:03:53 -05:00
dependencies = {
' nvim-lua/plenary.nvim ' ,
2024-03-18 18:35:53 +01:00
{ -- If encountering errors, see telescope-fzf-native README for installation instructions
2024-02-26 10:03:53 -05:00
' 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 ' } ,
2024-03-06 17:49:44 +01:00
-- Useful for getting pretty icons, but requires a Nerd Font.
2025-04-17 17:22:08 +02:00
{ ' nvim-tree/nvim-web-devicons ' , enabled = vim.g . have_nerd_font } ,
2024-02-26 10:03:53 -05:00
} ,
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!
--
2024-03-18 18:35:53 +01:00
-- The easiest way to use Telescope, is to start by doing something like:
2024-02-26 10:03:53 -05:00
-- :Telescope help_tags
--
-- After running this command, a window will open up and you're able to
2024-03-18 18:35:53 +01:00
-- type in the prompt window. You'll see a list of `help_tags` options and
2024-02-26 10:03:53 -05:00
-- a corresponding preview of the help.
--
2024-03-18 18:35:53 +01:00
-- Two important keymaps to use while in Telescope are:
2024-02-26 10:03:53 -05:00
-- - Insert mode: <c-/>
-- - Normal mode: ?
--
-- This opens a window that shows you all of the keymaps for the current
2024-03-18 18:35:53 +01:00
-- Telescope picker. This is really useful to discover what Telescope can
2024-02-26 10:03:53 -05:00
-- 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
-- All the info you're looking for is in `:help telescope.setup()`
--
-- defaults = {
-- mappings = {
-- i = { ['<c-enter>'] = 'to_fuzzy_refine' },
-- },
-- },
-- pickers = {}
extensions = {
[ ' ui-select ' ] = {
require ( ' telescope.themes ' ) . get_dropdown ( ) ,
} ,
} ,
}
2024-03-18 18:35:53 +01:00
-- Enable Telescope extensions if they are installed
2024-02-26 10:03:53 -05:00
pcall ( require ( ' telescope ' ) . load_extension , ' fzf ' )
pcall ( require ( ' telescope ' ) . load_extension , ' ui-select ' )
-- See `:help 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>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>ss ' , builtin.builtin , { desc = ' [S]earch [S]elect Telescope ' } )
vim.keymap . set ( ' n ' , ' <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>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>s. ' , builtin.oldfiles , { desc = ' [S]earch Recent Files ("." for repeat) ' } )
vim.keymap . set ( ' n ' , ' <leader><leader> ' , builtin.buffers , { desc = ' [ ] Find existing buffers ' } )
-- Slightly advanced example of overriding default behavior and theme
vim.keymap . set ( ' n ' , ' <leader>/ ' , function ( )
2024-03-18 18:35:53 +01:00
-- You can pass additional configuration to Telescope to change the theme, layout, etc.
2024-02-26 10:03:53 -05:00
builtin.current_buffer_fuzzy_find ( require ( ' telescope.themes ' ) . get_dropdown {
winblend = 10 ,
previewer = false ,
} )
end , { desc = ' [/] Fuzzily search in current buffer ' } )
2024-03-18 18:35:53 +01:00
-- It's also possible to pass additional configuration options.
2024-02-26 10:03:53 -05:00
-- See `:help telescope.builtin.live_grep()` for information about particular keys
vim.keymap . set ( ' n ' , ' <leader>s/ ' , function ( )
builtin.live_grep {
grep_open_files = true ,
prompt_title = ' Live Grep in Open Files ' ,
}
end , { desc = ' [S]earch [/] in Open Files ' } )
2024-03-18 18:35:53 +01:00
-- Shortcut for searching your Neovim configuration files
2024-02-26 10:03:53 -05:00
vim.keymap . set ( ' n ' , ' <leader>sn ' , function ( )
builtin.find_files { cwd = vim.fn . stdpath ' config ' }
end , { desc = ' [S]earch [N]eovim files ' } )
end ,
} ,
2024-07-28 17:39:34 -04:00
-- 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
2025-01-15 11:38:26 -08:00
{ path = ' ${3rd}/luv/library ' , words = { ' vim%.uv ' } } ,
2024-07-28 17:39:34 -04:00
} ,
} ,
} ,
{
-- Main LSP Configuration
2022-11-18 21:04:04 -05:00
' neovim/nvim-lspconfig ' ,
2023-02-17 16:31:57 -05:00
dependencies = {
2024-03-18 18:35:53 +01:00
-- Automatically install LSPs and related tools to stdpath for Neovim
2025-01-07 09:44:29 -06:00
-- 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({})`
2025-05-11 15:18:53 +02:00
{ ' williamboman/mason.nvim ' , opts = { } } ,
{ ' williamboman/mason-lspconfig.nvim ' , opts = { } } ,
2024-02-26 10:03:53 -05:00
' WhoIsSethDaniel/mason-tool-installer.nvim ' ,
2022-11-18 21:04:04 -05:00
2024-02-26 10:03:53 -05:00
-- Useful status updates for LSP.
2025-04-17 17:22:08 +02:00
{ ' j-hui/fidget.nvim ' , opts = { } } ,
2024-07-29 20:02:37 -04:00
2025-04-09 17:25:57 -04:00
-- Allows extra capabilities provided by blink.cmp
' saghen/blink.cmp ' ,
2024-02-26 10:03:53 -05:00
} ,
config = function ( )
2024-03-18 18:35:53 +01:00
-- Brief aside: **What is LSP?**
2024-02-26 10:03:53 -05:00
--
2024-03-18 18:35:53 +01:00
-- LSP is an initialism you've probably heard, but might not understand what it is.
2024-02-26 10:03:53 -05:00
--
-- 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
2024-03-18 18:35:53 +01:00
-- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers
2024-02-26 10:03:53 -05:00
-- (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
2024-03-02 04:07:34 +07:00
-- and elegantly composed help section, `:help lsp-vs-treesitter`
2024-02-26 10:03:53 -05:00
-- 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 )
2024-03-18 18:35:53 +01:00
-- 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.
2024-02-26 10:03:53 -05:00
--
-- 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.
2024-08-25 00:31:43 +03:00
local map = function ( keys , func , desc , mode )
mode = mode or ' n '
vim.keymap . set ( mode , keys , func , { buffer = event.buf , desc = ' LSP: ' .. desc } )
2024-02-26 10:03:53 -05:00
end
2025-04-09 11:01:57 -04:00
-- 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 ' } )
2024-02-26 10:03:53 -05:00
-- Find references for the word under your cursor.
2025-04-09 11:01:57 -04:00
map ( ' grr ' , require ( ' telescope.builtin ' ) . lsp_references , ' [G]oto [R]eferences ' )
2024-02-26 10:03:53 -05:00
-- Jump to the implementation of the word under your cursor.
-- Useful when your language has ways of declaring types without an actual implementation.
2025-04-09 11:01:57 -04:00
map ( ' gri ' , require ( ' telescope.builtin ' ) . lsp_implementations , ' [G]oto [I]mplementation ' )
2024-02-26 10:03:53 -05:00
2025-04-09 11:01:57 -04:00
-- 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 <C-t>.
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 ' )
2024-02-26 10:03:53 -05:00
-- Fuzzy find all the symbols in your current document.
-- Symbols are things like variables, functions, types, etc.
2025-04-09 11:01:57 -04:00
map ( ' gO ' , require ( ' telescope.builtin ' ) . lsp_document_symbols , ' Open Document Symbols ' )
2024-02-26 10:03:53 -05:00
2024-03-18 18:35:53 +01:00
-- Fuzzy find all the symbols in your current workspace.
-- Similar to document symbols, except searches over your entire project.
2025-04-09 11:01:57 -04:00
map ( ' gW ' , require ( ' telescope.builtin ' ) . lsp_dynamic_workspace_symbols , ' Open Workspace Symbols ' )
2024-02-26 10:03:53 -05:00
2025-04-09 11:01:57 -04:00
-- 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 ' )
2024-02-26 10:03:53 -05:00
2025-02-18 17:15:13 +01:00
-- 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
2024-02-26 10:03:53 -05:00
-- 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 )
2025-02-18 17:15:13 +01:00
if client and client_supports_method ( client , vim.lsp . protocol.Methods . textDocument_documentHighlight , event.buf ) then
2024-04-22 15:53:45 -04:00
local highlight_augroup = vim.api . nvim_create_augroup ( ' kickstart-lsp-highlight ' , { clear = false } )
2024-02-26 10:03:53 -05:00
vim.api . nvim_create_autocmd ( { ' CursorHold ' , ' CursorHoldI ' } , {
buffer = event.buf ,
2024-04-22 11:43:10 -04:00
group = highlight_augroup ,
2024-02-26 10:03:53 -05:00
callback = vim.lsp . buf.document_highlight ,
} )
vim.api . nvim_create_autocmd ( { ' CursorMoved ' , ' CursorMovedI ' } , {
buffer = event.buf ,
2024-04-22 11:43:10 -04:00
group = highlight_augroup ,
2024-02-26 10:03:53 -05:00
callback = vim.lsp . buf.clear_references ,
} )
2024-05-02 22:53:07 +02:00
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 ,
} )
2024-02-26 10:03:53 -05:00
end
2024-04-17 20:04:55 +02:00
2024-07-22 10:00:35 -07:00
-- The following code creates a keymap to toggle inlay hints in your
2024-04-17 20:04:55 +02:00
-- code, if the language server you are using supports them
--
-- This may be unwanted, since they displace some of your code
2025-02-18 17:15:13 +01:00
if client and client_supports_method ( client , vim.lsp . protocol.Methods . textDocument_inlayHint , event.buf ) then
2024-04-17 20:04:55 +02:00
map ( ' <leader>th ' , function ( )
2024-07-22 02:35:07 +02:00
vim.lsp . inlay_hint.enable ( not vim.lsp . inlay_hint.is_enabled { bufnr = event.buf } )
2024-04-17 20:04:55 +02:00
end , ' [T]oggle Inlay [H]ints ' )
end
2024-02-26 10:03:53 -05:00
end ,
} )
2025-02-18 02:01:07 +08:00
-- 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 ,
} ,
}
2024-10-30 15:50:27 +00:00
2024-02-26 10:03:53 -05:00
-- 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
--
2024-09-10 15:27:24 -05:00
-- But for many setups, the LSP (`ts_ls`) will work just fine
-- ts_ls = {},
2024-02-26 10:03:53 -05:00
--
lua_ls = {
2024-12-12 18:51:58 +03:00
-- cmd = { ... },
-- filetypes = { ... },
2024-02-26 10:03:53 -05:00
-- capabilities = {},
settings = {
Lua = {
2024-02-29 18:14:36 +00:00
completion = {
callSnippet = ' Replace ' ,
} ,
2024-02-26 10:03:53 -05:00
-- 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
2025-01-07 09:44:29 -06:00
--
-- To check the current status of installed tools and/or manually install
-- other tools, you can run
2024-02-26 10:03:53 -05:00
-- :Mason
--
2025-01-07 09:44:29 -06:00
-- 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.
--
2024-02-26 10:03:53 -05:00
-- 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 , {
2024-03-18 18:35:53 +01:00
' stylua ' , -- Used to format Lua code
2024-02-26 10:03:53 -05:00
} )
require ( ' mason-tool-installer ' ) . setup { ensure_installed = ensure_installed }
2025-05-11 15:18:53 +02:00
-- Installed LSPs are configured and enabled automatically with mason-lspconfig
-- The loop below is for overriding the default configuration of LSPs with the ones in the servers table
for server_name , config in pairs ( servers ) do
vim.lsp . config ( server_name , config )
end
-- NOTE: Some servers may require an old setup until they are updated. For the full list refer here: https://github.com/neovim/nvim-lspconfig/issues/3705
-- These servers will have to be manually set up with require("lspconfig").server_name.setup{}
2024-02-26 10:03:53 -05:00
end ,
} ,
2022-12-20 22:12:39 -05:00
2024-02-26 10:03:53 -05:00
{ -- Autoformat
' stevearc/conform.nvim ' ,
2024-07-21 22:34:17 +02:00
event = { ' BufWritePre ' } ,
cmd = { ' ConformInfo ' } ,
2024-03-31 19:36:43 +02:00
keys = {
{
' <leader>f ' ,
function ( )
2024-08-25 23:28:26 -04:00
require ( ' conform ' ) . format { async = true , lsp_format = ' fallback ' }
2024-03-31 19:36:43 +02:00
end ,
mode = ' ' ,
desc = ' [F]ormat buffer ' ,
} ,
} ,
2024-02-26 10:03:53 -05:00
opts = {
notify_on_error = false ,
2024-03-15 21:53:33 +01:00
format_on_save = function ( bufnr )
-- Disable "format_on_save lsp_fallback" for languages that don't
-- 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 }
2024-08-25 23:28:26 -04:00
if disable_filetypes [ vim.bo [ bufnr ] . filetype ] then
2025-03-24 15:33:53 -04:00
return nil
2024-08-25 23:28:26 -04:00
else
2025-03-24 15:33:53 -04:00
return {
timeout_ms = 500 ,
lsp_format = ' fallback ' ,
}
2024-08-25 23:28:26 -04:00
end
2024-03-15 21:53:33 +01:00
end ,
2024-02-26 10:03:53 -05:00
formatters_by_ft = {
lua = { ' stylua ' } ,
-- Conform can also run multiple formatters sequentially
-- python = { "isort", "black" },
--
2024-07-28 12:43:08 -04:00
-- You can use 'stop_after_first' to run the first available formatter from the list
-- javascript = { "prettierd", "prettier", stop_after_first = true },
2024-02-26 10:03:53 -05:00
} ,
2022-11-18 21:04:04 -05:00
} ,
2023-02-17 16:31:57 -05:00
} ,
2022-11-18 21:04:04 -05:00
2024-02-26 10:03:53 -05:00
{ -- Autocompletion
2025-04-09 17:25:57 -04:00
' saghen/blink.cmp ' ,
event = ' VimEnter ' ,
version = ' 1.* ' ,
2023-05-21 23:46:09 -07:00
dependencies = {
2025-04-09 17:25:57 -04:00
-- Snippet Engine
2024-02-05 13:49:19 -05:00
{
' L3MON4D3/LuaSnip ' ,
2025-04-09 17:25:57 -04:00
version = ' 2.* ' ,
2024-02-05 13:49:19 -05:00
build = ( function ( )
2024-03-18 18:35:53 +01:00
-- Build Step is needed for regex support in snippets.
-- This step is not supported in many windows environments.
-- Remove the below condition to re-enable on windows.
2024-02-26 10:03:53 -05:00
if vim.fn . has ' win32 ' == 1 or vim.fn . executable ' make ' == 0 then
2024-02-05 13:49:19 -05:00
return
end
return ' make install_jsregexp '
end ) ( ) ,
2024-03-15 15:35:42 +01:00
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,
-- },
} ,
2025-04-09 17:25:57 -04:00
opts = { } ,
2024-02-05 13:49:19 -05:00
} ,
2025-04-09 17:25:57 -04:00
' folke/lazydev.nvim ' ,
2023-02-17 16:31:57 -05:00
} ,
2025-04-09 17:25:57 -04:00
--- @module 'blink.cmp'
--- @type blink.cmp.Config
opts = {
keymap = {
-- 'default' (recommended) for mappings similar to built-in completions
-- <c-y> to accept ([y]es) the completion.
-- This will auto-import if your LSP supports it.
-- This will expand snippets if the LSP sent a snippet.
-- 'super-tab' for tab to accept
-- 'enter' for enter to accept
-- 'none' for no mappings
--
-- For an understanding of why the 'default' preset is recommended,
-- you will need to read `:help ins-completion`
2024-02-26 10:03:53 -05:00
--
-- No, but seriously. Please read `:help ins-completion`, it is really good!
2025-04-09 17:25:57 -04:00
--
-- All presets have the following mappings:
-- <tab>/<s-tab>: move to right/left of your snippet expansion
-- <c-space>: Open menu or open docs if already open
-- <c-n>/<c-p> or <up>/<down>: Select next/previous item
-- <c-e>: Hide menu
-- <c-k>: Toggle signature help
--
-- See :h blink-cmp-config-keymap for defining your own keymap
preset = ' default ' ,
2024-03-15 11:18:43 -04:00
2025-04-09 17:25:57 -04:00
-- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see:
-- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps
} ,
appearance = {
-- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font'
-- Adjusts spacing to ensure icons are aligned
nerd_font_variant = ' mono ' ,
} ,
completion = {
-- By default, you may press `<c-space>` to show the documentation.
-- Optionally, set `auto_show = true` to show the documentation after a delay.
documentation = { auto_show = false , auto_show_delay_ms = 500 } ,
} ,
sources = {
default = { ' lsp ' , ' path ' , ' snippets ' , ' lazydev ' } ,
providers = {
lazydev = { module = ' lazydev.integrations.blink ' , score_offset = 100 } ,
2024-02-26 10:03:53 -05:00
} ,
2025-04-09 17:25:57 -04:00
} ,
snippets = { preset = ' luasnip ' } ,
-- Blink.cmp includes an optional, recommended rust fuzzy matcher,
-- which automatically downloads a prebuilt binary when enabled.
--
-- By default, we use the Lua implementation instead, but you may enable
-- the rust implementation via `'prefer_rust_with_warning'`
--
-- See :h blink-cmp-config-fuzzy for more information
fuzzy = { implementation = ' lua ' } ,
-- Shows a signature help window while you type arguments for a function
signature = { enabled = true } ,
} ,
2023-06-04 16:10:59 +00:00
} ,
2022-11-18 21:04:04 -05:00
2024-02-26 10:03:53 -05:00
{ -- You can easily change to a different colorscheme.
-- Change the name of the colorscheme plugin below, and then
2024-03-18 18:35:53 +01:00
-- change the command in the config to whatever the name of that colorscheme is.
2024-02-26 10:03:53 -05:00
--
2024-03-18 18:35:53 +01:00
-- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`.
2024-02-26 10:03:53 -05:00
' folke/tokyonight.nvim ' ,
2024-03-18 18:35:53 +01:00
priority = 1000 , -- Make sure to load this before all the other start plugins.
2025-02-18 01:10:48 +01:00
config = function ( )
---@diagnostic disable-next-line: missing-fields
require ( ' tokyonight ' ) . setup {
styles = {
comments = { italic = false } , -- Disable italics in comments
} ,
}
2024-03-05 21:19:06 -04:00
-- 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'.
2024-02-26 10:03:53 -05:00
vim.cmd . colorscheme ' tokyonight-night '
end ,
2023-02-17 16:31:57 -05:00
} ,
2022-11-18 21:04:04 -05:00
2024-02-26 10:03:53 -05:00
-- Highlight todo, notes, etc in comments
2024-03-03 02:07:58 +00:00
{ ' folke/todo-comments.nvim ' , event = ' VimEnter ' , dependencies = { ' nvim-lua/plenary.nvim ' } , opts = { signs = false } } ,
2022-08-24 11:48:08 +03:00
2024-02-26 10:03:53 -05:00
{ -- Collection of various small independent plugins/modules
' echasnovski/mini.nvim ' ,
config = function ( )
-- Better Around/Inside textobjects
--
-- Examples:
2024-03-02 04:07:34 +07:00
-- - va) - [V]isually select [A]round [)]paren
2024-07-21 13:34:51 -07:00
-- - yinq - [Y]ank [I]nside [N]ext [Q]uote
2024-02-26 10:03:53 -05:00
-- - ci' - [C]hange [I]nside [']quote
require ( ' mini.ai ' ) . setup { n_lines = 500 }
-- Add/delete/replace surroundings (brackets, quotes, etc.)
--
-- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
-- - sd' - [S]urround [D]elete [']quotes
-- - sr)' - [S]urround [R]eplace [)] [']
require ( ' mini.surround ' ) . setup ( )
-- Simple and easy statusline.
-- You could remove this setup call if you don't like it,
-- and try some other statusline plugin
2024-02-29 12:08:01 -05:00
local statusline = require ' mini.statusline '
2024-03-06 17:49:44 +01:00
-- set use_icons to true if you have a Nerd Font
statusline.setup { use_icons = vim.g . have_nerd_font }
2024-02-29 12:08:01 -05:00
2024-03-02 04:07:34 +07:00
-- You can configure sections in the statusline by overriding their
2024-03-04 14:16:50 +01:00
-- default behavior. For example, here we set the section for
-- cursor location to LINE:COLUMN
2024-02-29 12:08:01 -05:00
---@diagnostic disable-next-line: duplicate-set-field
statusline.section_location = function ( )
2024-03-04 14:16:50 +01:00
return ' %2l:%-2v '
2024-02-28 19:23:13 +01:00
end
2024-02-26 10:03:53 -05:00
-- ... and there is more!
-- Check out: https://github.com/echasnovski/mini.nvim
end ,
2023-02-17 16:31:57 -05:00
} ,
2024-02-26 10:03:53 -05:00
{ -- Highlight, edit, and navigate code
2023-02-17 16:31:57 -05:00
' nvim-treesitter/nvim-treesitter ' ,
2023-05-16 12:38:56 -07:00
build = ' :TSUpdate ' ,
2024-08-22 21:00:39 -04:00
main = ' nvim-treesitter.configs ' , -- Sets main module to use for opts
-- [[ Configure Treesitter ]] See `:help nvim-treesitter`
2024-03-11 19:18:45 -04:00
opts = {
2024-07-17 21:37:31 -04:00
ensure_installed = { ' bash ' , ' c ' , ' diff ' , ' html ' , ' lua ' , ' luadoc ' , ' markdown ' , ' markdown_inline ' , ' query ' , ' vim ' , ' vimdoc ' } ,
2024-03-11 19:18:45 -04:00
-- Autoinstall languages that are not installed
auto_install = true ,
2024-03-15 11:35:07 -04:00
highlight = {
enable = true ,
-- Some languages depend on vim's regex highlighting system (such as Ruby) for indent rules.
-- If you are experiencing weird indenting issues, add the language to
-- the list of additional_vim_regex_highlighting and disabled languages for indent.
additional_vim_regex_highlighting = { ' ruby ' } ,
} ,
indent = { enable = true , disable = { ' ruby ' } } ,
2024-03-11 19:18:45 -04:00
} ,
2024-08-22 21:00:39 -04:00
-- 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
2023-02-17 16:31:57 -05:00
} ,
2022-11-21 06:47:24 -06:00
2024-10-30 14:58:52 -04:00
-- The following comments only work if you have downloaded the kickstart repo, not just copy pasted the
2024-02-26 10:03:53 -05:00
-- init.lua. If you want these files, they are in the repository, so you can just download them and
2024-03-18 18:35:53 +01:00
-- place them in the correct locations.
2024-02-26 10:03:53 -05:00
2024-03-18 18:35:53 +01:00
-- NOTE: Next step on your Neovim journey: Add/Configure additional plugins for Kickstart
2024-02-26 10:03:53 -05:00
--
2024-03-18 18:35:53 +01:00
-- Here are some example plugins that I've included in the Kickstart repository.
2024-02-26 10:03:53 -05:00
-- Uncomment any of the lines below to enable them (you will need to restart nvim).
--
2023-02-17 16:31:57 -05:00
-- require 'kickstart.plugins.debug',
2024-02-26 10:03:53 -05:00
-- require 'kickstart.plugins.indent_line',
2024-03-18 15:00:48 +01:00
-- require 'kickstart.plugins.lint',
2024-04-17 21:25:54 +02:00
-- require 'kickstart.plugins.autopairs',
-- require 'kickstart.plugins.neo-tree',
2024-04-18 03:00:39 +02:00
-- require 'kickstart.plugins.gitsigns', -- adds gitsigns recommend keymaps
2022-06-23 23:35:53 -04:00
2023-07-01 12:34:20 -04:00
-- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua`
2024-02-26 10:03:53 -05:00
-- This is the easiest way to modularize your config.
2023-02-17 16:31:57 -05:00
--
2024-02-26 10:03:53 -05:00
-- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going.
2023-07-01 12:34:20 -04:00
-- { import = 'custom.plugins' },
2024-10-30 21:19:16 +05:30
--
-- 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
2024-03-06 17:49:44 +01:00
} , {
ui = {
2024-03-18 18:35:53 +01:00
-- 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
2024-03-06 17:49:44 +01:00
icons = vim.g . have_nerd_font and { } or {
cmd = ' ⌘ ' ,
config = ' 🛠 ' ,
event = ' 📅 ' ,
ft = ' 📂 ' ,
init = ' ⚙ ' ,
keys = ' 🗝 ' ,
plugin = ' 🔌 ' ,
runtime = ' 💻 ' ,
require = ' 🌙 ' ,
source = ' 📄 ' ,
start = ' 🚀 ' ,
task = ' 📌 ' ,
lazy = ' 💤 ' ,
} ,
} ,
} )
2022-06-23 23:35:53 -04:00
-- The line beneath this is called `modeline`. See `:help modeline`
-- vim: ts=2 sts=2 sw=2 et