1- --[[
2-
3- =====================================================================
4- ==================== READ THIS BEFORE CONTINUING ====================
5- =====================================================================
6- ======== .-----. ========
7- ======== .----------------------. | === | ========
8- ======== |.-""""""""""""""""""-.| |-----| ========
9- ======== || || | === | ========
10- ======== || KICKSTART.NVIM || |-----| ========
11- ======== || || | === | ========
12- ======== || || |-----| ========
13- ======== ||:Tutor || |:::::| ========
14- ======== |'-..................-'| |____o| ========
15- ======== `"")----------------(""` ___________ ========
16- ======== /::::::::::| |::::::::::\ \ no mouse \ ========
17- ======== /:::========| |==hjkl==:::\ \ required \ ========
18- ======== '""""""""""""' '""""""""""""' '""""""""""' ========
19- ======== ========
20- =====================================================================
21- =====================================================================
22-
23- What is Kickstart?
24-
25- Kickstart.nvim is *not* a distribution.
26-
27- Kickstart.nvim is a starting point for your own configuration.
28- The goal is that you can read every line of code, top-to-bottom, understand
29- what your configuration is doing, and modify it to suit your needs.
30-
31- Once you've done that, you can start exploring, configuring and tinkering to
32- make Neovim your own! That might mean leaving Kickstart just the way it is for a while
33- or immediately breaking it into modular pieces. It's up to you!
34-
35- If you don't know anything about Lua, I recommend taking some time to read through
36- a guide. One possible example which will only take 10-15 minutes:
37- - https://learnxinyminutes.com/docs/lua/
38-
39- After understanding a bit more about Lua, you can use `:help lua-guide` as a
40- reference for how Neovim integrates Lua.
41- - :help lua-guide
42- - (or HTML version): https://neovim.io/doc/user/lua-guide.html
43-
44- Kickstart Guide:
45-
46- TODO: The very first thing you should do is to run the command `:Tutor` in Neovim.
47-
48- If you don't know what this means, type the following:
49- - <escape key>
50- - :
51- - Tutor
52- - <enter key>
53-
54- (If you already know the Neovim basics, you can skip this step.)
55-
56- Once you've completed that, you can continue working through **AND READING** the rest
57- of the kickstart init.lua.
58-
59- Next, run AND READ `:help`.
60- This will open up a help window with some basic information
61- about reading, navigating and searching the builtin help documentation.
62-
63- This should be the first place you go to look when you're stuck or confused
64- with something. It's one of my favorite Neovim features.
65-
66- MOST IMPORTANTLY, we provide a keymap "<space>sh" to [s]earch the [h]elp documentation,
67- which is very useful when you're not exactly sure of what you're looking for.
68-
69- I have left several `:help X` comments throughout the init.lua
70- These are hints about where to find more information about the relevant settings,
71- plugins or Neovim features used in Kickstart.
72-
73- NOTE: Look for lines like this
74-
75- Throughout the file. These are for you, the reader, to help you understand what is happening.
76- Feel free to delete them once you know what you're doing, but they should serve as a guide
77- for when you are first encountering a few different constructs in your Neovim config.
78-
79- If you experience any errors while trying to install kickstart, run `:checkhealth` for more info.
80-
81- I hope you enjoy your Neovim journey,
82- - TJ
83-
84- P.S. You can delete this when you're done too. It's your config now! :)
85- --]]
86-
871-- Set <space> as the leader key
882-- See `:help mapleader`
893-- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used)
904vim .g .mapleader = ' '
915vim .g .maplocalleader = ' '
926
937-- Set to true if you have a Nerd Font installed and selected in the terminal
94- vim .g .have_nerd_font = false
8+ vim .g .have_nerd_font = true
959
9610-- [[ Setting options ]]
9711-- See `:help vim.opt`
@@ -102,7 +16,7 @@ vim.g.have_nerd_font = false
10216vim .opt .number = true
10317-- You can also add relative line numbers, to help with jumping.
10418-- Experiment for yourself to see if you like it!
105- -- vim.opt.relativenumber = true
19+ vim .opt .relativenumber = true
10620
10721-- Enable mouse mode, can be useful for resizing splits for example!
10822vim .opt .mouse = ' a'
@@ -113,7 +27,7 @@ vim.opt.showmode = false
11327-- Sync clipboard between OS and Neovim.
11428-- Remove this option if you want your OS clipboard to remain independent.
11529-- See `:help 'clipboard'`
116- vim .opt .clipboard = ' unnamedplus'
30+ -- vim.opt.clipboard = 'unnamedplus'
11731
11832-- Enable break indent
11933vim .opt .breakindent = true
@@ -176,10 +90,10 @@ vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagn
17690vim .keymap .set (' t' , ' <Esc><Esc>' , ' <C-\\ ><C-n>' , { desc = ' Exit terminal mode' })
17791
17892-- TIP: Disable arrow keys in normal mode
179- -- vim.keymap.set('n', '<left>', '<cmd>echo "Use h to move!!"<CR>')
180- -- vim.keymap.set('n', '<right>', '<cmd>echo "Use l to move!!"<CR>')
181- -- vim.keymap.set('n', '<up>', '<cmd>echo "Use k to move!!"<CR>')
182- -- vim.keymap.set('n', '<down>', '<cmd>echo "Use j to move!!"<CR>')
93+ vim .keymap .set (' n' , ' <left>' , ' <cmd>echo "Use h to move!!"<CR>' )
94+ vim .keymap .set (' n' , ' <right>' , ' <cmd>echo "Use l to move!!"<CR>' )
95+ vim .keymap .set (' n' , ' <up>' , ' <cmd>echo "Use k to move!!"<CR>' )
96+ vim .keymap .set (' n' , ' <down>' , ' <cmd>echo "Use j to move!!"<CR>' )
18397
18498-- Keybinds to make split navigation easier.
18599-- Use CTRL+<hjkl> to switch between windows
@@ -190,6 +104,9 @@ vim.keymap.set('n', '<C-l>', '<C-w><C-l>', { desc = 'Move focus to the right win
190104vim .keymap .set (' n' , ' <C-j>' , ' <C-w><C-j>' , { desc = ' Move focus to the lower window' })
191105vim .keymap .set (' n' , ' <C-k>' , ' <C-w><C-k>' , { desc = ' Move focus to the upper window' })
192106
107+ vim .keymap .set (' n' , ' <C-u>' , ' <C-u>zz' , { noremap = true , desc = ' Map C-u to C-uzz' })
108+ vim .keymap .set (' n' , ' <C-d>' , ' <C-d>zz' , { noremap = true , desc = ' Map C-d to C-dzz' })
109+
193110-- [[ Basic Autocommands ]]
194111-- See `:help lua-guide-autocommands`
195112
@@ -228,9 +145,96 @@ require('lazy').setup({
228145 -- NOTE: Plugins can be added with a link (or for a github repo: 'owner/repo' link).
229146 ' tpope/vim-sleuth' , -- Detect tabstop and shiftwidth automatically
230147
148+ {
149+ ' ThePrimeagen/harpoon' ,
150+ requires = { ' nvim-lua/plenary.nvim' }, -- Harpoon requires plenary
151+ config = function ()
152+ require (' harpoon' ).setup {
153+ -- Configuration options go here
154+ -- For example, set the menu to open with a specific size
155+ menu = {
156+ width = vim .api .nvim_win_get_width (0 ) - 4 ,
157+ height = 10 ,
158+ },
159+ }
160+
161+ -- Keybindings for Harpoon
162+ vim .keymap .set (' n' , ' <leader>a' , require (' harpoon.mark' ).add_file , { desc = ' Add file to Harpoon' })
163+ vim .keymap .set (' n' , ' <leader>h' , require (' harpoon.ui' ).toggle_quick_menu , { desc = ' Toggle Harpoon menu' })
164+ vim .keymap .set (' n' , ' <leader>j' , function ()
165+ require (' harpoon.ui' ).nav_file (1 )
166+ end , { desc = ' Harpoon: go to mark 1' })
167+ vim .keymap .set (' n' , ' <leader>k' , function ()
168+ require (' harpoon.ui' ).nav_file (2 )
169+ end , { desc = ' Harpoon: go to mark 2' })
170+ vim .keymap .set (' n' , ' <leader>l' , function ()
171+ require (' harpoon.ui' ).nav_file (3 )
172+ end , { desc = ' Harpoon: go to mark 3' })
173+ vim .keymap .set (' n' , ' <leader>;' , function ()
174+ require (' harpoon.ui' ).nav_file (4 )
175+ end , { desc = ' Harpoon: go to mark 4' })
176+ end ,
177+ },
178+
179+ {
180+ ' tpope/vim-fugitive' ,
181+ vim .keymap .set (' n' , ' <leader>gs' , ' :Git<CR>' , { desc = ' Git status' }),
182+ vim .keymap .set (' n' , ' <leader>gc' , ' :Git commit<CR>' , { desc = ' Git commit' }),
183+ vim .keymap .set (' n' , ' <leader>gp' , ' :Git push<CR>' , { desc = ' Git push' }),
184+ vim .keymap .set (' n' , ' <leader>gpl' , ' :Git pull<CR>' , { desc = ' Git pull' }),
185+ vim .keymap .set (' n' , ' <leader>gd' , ' :Gvdiffsplit<CR>' , { desc = ' Git diff' }),
186+ vim .keymap .set (' n' , ' <leader>gb' , ' :Git blame<CR>' , { desc = ' Git blame' }),
187+ vim .keymap .set (' n' , ' <leader>gl' , ' :Git log<CR>' , { desc = ' Git log' }),
188+ vim .keymap .set (' n' , ' <leader>gr' , ' :Gread<CR>' , { desc = ' Git read (checkout file)' }),
189+ vim .keymap .set (' n' , ' <leader>gw' , ' :Gwrite<CR>' , { desc = ' Git write (stage file)' }),
190+ vim .keymap .set (' n' , ' <leader>gsh' , ' :G! push<CR>' , { desc = ' Git push (force)' }),
191+ vim .keymap .set (' n' , ' <leader>gf' , ' :Git fetch<CR>' , { desc = ' Git fetch' }),
192+ vim .keymap .set (' n' , ' <leader>gm' , ' :Git mergetool<CR>' , { desc = ' Git mergetool' }),
193+ },
194+
195+ {
196+ ' mbbill/undotree' ,
197+ lazy = false ,
198+ -- keys = { '<leader>u', ':UndotreeToggle<CR>' }, -- Correct key binding
199+ vim .keymap .set (' n' , ' <leader>u' , ' :UndotreeToggle<CR>' , { noremap = true , desc = ' UndotreeToggle' }),
200+ -- keys = { '<leader>u', 'vim.cmd.UndotreeToggle' },
201+ config = function ()
202+ -- Configuration settings for undotree
203+ vim .g .undotree_WindowLayout = 2
204+ vim .g .undotree_SetFocusWhenToggle = 1
205+ end ,
206+ },
207+
208+ { -- Treesitter with added nvim-treesitter-context
209+ ' nvim-treesitter/nvim-treesitter' ,
210+ build = ' :TSUpdate' ,
211+ opts = {
212+ ensure_installed = { ' bash' , ' c' , ' html' , ' lua' , ' luadoc' , ' markdown' , ' vim' , ' vimdoc' },
213+ auto_install = true ,
214+ highlight = {
215+ enable = true ,
216+ additional_vim_regex_highlighting = { ' ruby' },
217+ },
218+ indent = { enable = true , disable = { ' ruby' } },
219+ },
220+ dependencies = {
221+ { ' nvim-treesitter/nvim-treesitter-context' },
222+ -- any other dependencies if needed
223+ },
224+ config = function (_ , opts )
225+ require (' nvim-treesitter.configs' ).setup (opts )
226+ require (' treesitter-context' ).setup {
227+ enable = true , -- Enable this plugin (Can be enabled/disabled later via commands)
228+ -- further configuration options
229+ }
230+ end ,
231+ },
232+
231233 -- NOTE: Plugins can also be added by using a table,
232234 -- with the first argument being the link and the following
233235 -- keys can be used to configure plugin behavior/loading/etc.
236+
237+ --
234238 --
235239 -- Use `opts = {}` to force a plugin to be loaded.
236240 --
@@ -555,8 +559,17 @@ require('lazy').setup({
555559 -- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/
556560 local servers = {
557561 -- clangd = {},
558- -- gopls = {},
559- -- pyright = {},
562+ bashls = {},
563+ -- clojure_lsp = {},
564+ dockerls = {},
565+ gopls = {},
566+ helm_ls = {},
567+ marksman = {},
568+ -- nushell = {},
569+ -- postgres_lsp = {},
570+ pyright = {},
571+ ruff_lsp = {},
572+ terraformls = {},
560573 -- rust_analyzer = {},
561574 -- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs
562575 --
@@ -581,6 +594,9 @@ require('lazy').setup({
581594 },
582595 },
583596 },
597+
598+ --
599+ -- ruff_lsp = {},
584600 }
585601
586602 -- Ensure the servers and tools above are installed
@@ -852,6 +868,19 @@ require('lazy').setup({
852868 -- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects
853869 end ,
854870 },
871+ -- {
872+ -- 'sourcegraph/sg.nvim',
873+ -- dependencies = { 'nvim-lua/plenary.nvim' },
874+ -- config = function()
875+ -- require('sg').setup {
876+ -- -- Pass your own custom attach function
877+ -- -- If you do not pass your own attach function, then the following maps are provide:
878+ -- -- - gd -> goto definition
879+ -- -- - gr -> goto references
880+ -- -- on_attach = your_custom_lsp_attach_function,
881+ -- }
882+ -- end,
883+ -- },
855884
856885 -- The following two comments only work if you have downloaded the kickstart repo, not just copy pasted the
857886 -- init.lua. If you want these files, they are in the repository, so you can just download them and
0 commit comments