Compare commits
	
		
			2 Commits
		
	
	
		
			6f5951689e
			...
			3ffd03cba9
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | 3ffd03cba9 | |
|  | 45ba7555e5 | 
|  | @ -1,39 +1,39 @@ | |||
| { | ||||
|   "Comment.nvim": { "branch": "master", "commit": "0236521ea582747b58869cb72f70ccfa967d2e89" }, | ||||
|   "LuaSnip": { "branch": "master", "commit": "2b6860d15aaab01d3fb90859c0ba97f20ad7bc5f" }, | ||||
|   "autoclose.nvim": { "branch": "main", "commit": "dc42806540dcf448ecb2bad6b67204410cfbe629" }, | ||||
|   "catppuccin": { "branch": "main", "commit": "5215ea59df6d0a7e27da9a5cd1165e06d1b04cbe" }, | ||||
|   "LuaSnip": { "branch": "master", "commit": "0f7bbce41ea152a94d12aea286f2ce98e63c0f58" }, | ||||
|   "autoclose.nvim": { "branch": "main", "commit": "b2077aa2c83df7ebc19b2a20a3a0654b24ae9c8f" }, | ||||
|   "cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" }, | ||||
|   "cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" }, | ||||
|   "coc.nvim": { "branch": "release", "commit": "f0ce9ae23d6ce9d0cbabe73bdb738e45accc6f08" }, | ||||
|   "eslint.nvim": { "branch": "main", "commit": "158f2289907d377018752fcfe0d61b746dc11767" }, | ||||
|   "fidget.nvim": { "branch": "main", "commit": "ef99df04a1c53a453602421bc0f756997edc8289" }, | ||||
|   "friendly-snippets": { "branch": "main", "commit": "e11b09bf10706bb74e16e4c3d11b2274d62e687f" }, | ||||
|   "gitsigns.nvim": { "branch": "main", "commit": "e31d2149d9f3fb056bfd5b3416b2e818be10aabe" }, | ||||
|   "harpoon": { "branch": "harpoon2", "commit": "0378a6c428a0bed6a2781d459d7943843f374bce" }, | ||||
|   "indent-blankline.nvim": { "branch": "master", "commit": "d98f537c3492e87b6dc6c2e3f66ac517528f406f" }, | ||||
|   "lazy.nvim": { "branch": "main", "commit": "0fc34a0cf5f5f6f998a0897119a7d846b47eaa9d" }, | ||||
|   "lualine.nvim": { "branch": "master", "commit": "0a5a66803c7407767b799067986b4dc3036e1983" }, | ||||
|   "mason-lspconfig.nvim": { "branch": "main", "commit": "a4caa0d083aab56f6cd5acf2d42331b74614a585" }, | ||||
|   "mason.nvim": { "branch": "main", "commit": "0950b15060067f752fde13a779a994f59516ce3d" }, | ||||
|   "neodev.nvim": { "branch": "main", "commit": "02893eeb9d6e8503817bd52385e111cba9a90500" }, | ||||
|   "null-ls.nvim": { "branch": "main", "commit": "0010ea927ab7c09ef0ce9bf28c2b573fc302f5a7" }, | ||||
|   "nvim-cmp": { "branch": "main", "commit": "5260e5e8ecadaf13e6b82cf867a909f54e15fd07" }, | ||||
|   "nvim-lspconfig": { "branch": "master", "commit": "d1ab6b6051976b04948e127b0f302a465b1394d6" }, | ||||
|   "nvim-tree.lua": { "branch": "master", "commit": "2bc725a3ebc23f0172fb0ab4d1134b81bcc13812" }, | ||||
|   "nvim-treesitter": { "branch": "master", "commit": "49e4e2b4b62360677568c47b6467f31c809b391c" }, | ||||
|   "nvim-treesitter-textobjects": { "branch": "master", "commit": "fd41b7ccc5490a3a99c734d1ee418b68d06c48a9" }, | ||||
|   "nvim-web-devicons": { "branch": "master", "commit": "b77921fdc44833c994fdb389d658ccbce5490c16" }, | ||||
|   "plenary.nvim": { "branch": "master", "commit": "a3e3bc82a3f95c5ed0d7201546d5d2c19b20d683" }, | ||||
|   "supermaven-nvim": { "branch": "main", "commit": "ef3bd1a6b6f722857f2f88d929dd4ac875655611" }, | ||||
|   "telescope-fzf-native.nvim": { "branch": "main", "commit": "9ef21b2e6bb6ebeaf349a0781745549bbb870d27" }, | ||||
|   "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, | ||||
|   "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, | ||||
|   "conform.nvim": { "branch": "master", "commit": "f1125f8eace158255cf55772ce039aaf178a6b42" }, | ||||
|   "fidget.nvim": { "branch": "main", "commit": "e2a175c2abe2d4f65357da1c98c59a5cfb2b543f" }, | ||||
|   "gitsigns.nvim": { "branch": "main", "commit": "ac5aba6dce8c06ea22bea2c9016f51a2dbf90dc7" }, | ||||
|   "lazy.nvim": { "branch": "main", "commit": "56ead98e05bb37a4ec28930a54d836d033cf00f2" }, | ||||
|   "lazydev.nvim": { "branch": "main", "commit": "d5800897d9180cea800023f2429bce0a94ed6064" }, | ||||
|   "lua-async-await": { "branch": "main", "commit": "652d94df34e97abe2d4a689edbc4270e7ead1a98" }, | ||||
|   "luvit-meta": { "branch": "main", "commit": "57d464c4acb5c2e66bd4145060f5dc9e96a7bbb7" }, | ||||
|   "mason-lspconfig.nvim": { "branch": "main", "commit": "43894adcf10bb1190c2184bd7c1750e8ea2b3dce" }, | ||||
|   "mason-tool-installer.nvim": { "branch": "main", "commit": "c5e07b8ff54187716334d585db34282e46fa2932" }, | ||||
|   "mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" }, | ||||
|   "mini.nvim": { "branch": "main", "commit": "6714e738555b1cfbef646a23af29aa113f91f4fe" }, | ||||
|   "nui.nvim": { "branch": "main", "commit": "b58e2bfda5cea347c9d58b7f11cf3012c7b3953f" }, | ||||
|   "nvim-cmp": { "branch": "main", "commit": "40a03dc225383c4f6256596c2cdf27e03b8119b5" }, | ||||
|   "nvim-dap": { "branch": "master", "commit": "cc92b054720a96170eca6bd9bdedd43d2b0a7a8a" }, | ||||
|   "nvim-java": { "branch": "main", "commit": "905013eb83c58bda992724b3ecbe20f60b58513f" }, | ||||
|   "nvim-java-core": { "branch": "main", "commit": "5b03dca22fee76524a89e1c2dc1d73a9f0b1a3bb" }, | ||||
|   "nvim-java-dap": { "branch": "main", "commit": "55f239532f7a3789d21ea68d1e795abc77484974" }, | ||||
|   "nvim-java-refactor": { "branch": "main", "commit": "ea1420fed5463c9cc976c2b4175f434b3646f0f7" }, | ||||
|   "nvim-java-test": { "branch": "main", "commit": "7f0f40e9c5b7eab5096d8bec6ac04251c6e81468" }, | ||||
|   "nvim-lspconfig": { "branch": "master", "commit": "f012c1b176f0e3c71f40eb309bdec0316689462e" }, | ||||
|   "nvim-tree.lua": { "branch": "master", "commit": "c7639482a1598f4756798df1b2d72f79fe5bb34f" }, | ||||
|   "nvim-treesitter": { "branch": "master", "commit": "a3a732107f8b529f97bf4921b3e1af5dcc756bb6" }, | ||||
|   "nvim-web-devicons": { "branch": "master", "commit": "e87554285f581047b1bf236794b0eb812b444b87" }, | ||||
|   "plenary.nvim": { "branch": "master", "commit": "2d9b06177a975543726ce5c73fca176cedbffe9d" }, | ||||
|   "spring-boot.nvim": { "branch": "main", "commit": "218c0c26c14d99feca778e4d13f5ec3e8b1b60f0" }, | ||||
|   "telescope-fzf-native.nvim": { "branch": "main", "commit": "cf48d4dfce44e0b9a2e19a008d6ec6ea6f01a83b" }, | ||||
|   "telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" }, | ||||
|   "telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }, | ||||
|   "templ.vim": { "branch": "main", "commit": "5cc48b93a4538adca0003c4bc27af844bb16ba24" }, | ||||
|   "undotree": { "branch": "master", "commit": "56c684a805fe948936cda0d1b19505b84ad7e065" }, | ||||
|   "vim-devicons": { "branch": "master", "commit": "71f239af28b7214eebb60d4ea5bd040291fb7e33" }, | ||||
|   "vim-fugitive": { "branch": "master", "commit": "4f59455d2388e113bd510e85b310d15b9228ca0d" }, | ||||
|   "vim-rhubarb": { "branch": "master", "commit": "ee69335de176d9325267b0fd2597a22901d927b1" }, | ||||
|   "vim-sleuth": { "branch": "master", "commit": "1cc4557420f215d02c4d2645a748a816c220e99b" }, | ||||
|   "vim-tmux-navigator": { "branch": "master", "commit": "5b3c701686fb4e6629c100ed32e827edf8dad01e" }, | ||||
|   "which-key.nvim": { "branch": "main", "commit": "4b7167f8fb2dba3d01980735e3509e172c024c29" } | ||||
|   "todo-comments.nvim": { "branch": "main", "commit": "ae0a2afb47cf7395dc400e5dc4e05274bf4fb9e0" }, | ||||
|   "tokyonight.nvim": { "branch": "main", "commit": "c2725eb6d086c8c9624456d734bd365194660017" }, | ||||
|   "vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" }, | ||||
|   "which-key.nvim": { "branch": "main", "commit": "68e37e12913a66b60073906f5d3f14dee0de19f2" } | ||||
| } | ||||
|  | @ -1,6 +1,6 @@ | |||
| require("autoclose").setup({ | ||||
|    keys = { | ||||
|      ["("] = { escape = false, close = true, pair = "()", disabled_filetypes = {} }, | ||||
|      ["{"] = { escape = false, close = true, pair = "{}", disabled_filetypes = {} }, | ||||
|    }, | ||||
| 	keys = { | ||||
| 		["("] = { escape = false, close = true, pair = "()", disabled_filetypes = {} }, | ||||
| 		["{"] = { escape = false, close = true, pair = "{}", disabled_filetypes = {} }, | ||||
| 	}, | ||||
| }) | ||||
|  |  | |||
|  | @ -0,0 +1,110 @@ | |||
| vim.g.mapleader = " " | ||||
| vim.g.maplocalleader = " " | ||||
| 
 | ||||
| vim.opt["tabstop"] = 2 | ||||
| vim.opt["shiftwidth"] = 2 | ||||
| 
 | ||||
| vim.opt.wrap = false | ||||
| 
 | ||||
| -- optionally enable 24-bit colour | ||||
| vim.opt.termguicolors = true | ||||
| 
 | ||||
| vim.g.have_nerd_font = true | ||||
| 
 | ||||
| -- Make line numbers default | ||||
| vim.opt.number = true | ||||
| vim.opt.relativenumber = true | ||||
| 
 | ||||
| -- Enable mouse mode, can be useful for resizing splits for example! | ||||
| vim.opt.mouse = "a" | ||||
| 
 | ||||
| -- Don't show the mode, since it's already in the status line | ||||
| vim.opt.showmode = false | ||||
| 
 | ||||
| -- Enable break indent | ||||
| vim.opt.breakindent = true | ||||
| 
 | ||||
| -- Save undo history | ||||
| vim.opt.undofile = true | ||||
| 
 | ||||
| -- Case-insensitive searching UNLESS \C or one or more capital letters in the search term | ||||
| vim.opt.ignorecase = true | ||||
| vim.opt.smartcase = true | ||||
| 
 | ||||
| -- Keep signcolumn on by default | ||||
| vim.opt.signcolumn = "yes" | ||||
| 
 | ||||
| -- Decrease update time | ||||
| 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 | ||||
| vim.opt.splitright = true | ||||
| vim.opt.splitbelow = true | ||||
| 
 | ||||
| -- Sets how neovim will display certain whitespace characters in the editor. | ||||
| vim.opt.list = false | ||||
| 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 | ||||
| 
 | ||||
| vim.g.loaded_netrw = 1 | ||||
| vim.g.loaded_netrwPlugin = 1 | ||||
| 
 | ||||
| -- [[ Basic Keymaps ]] | ||||
| 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" }) | ||||
| 
 | ||||
| -- [[ Basic Autocommands ]] | ||||
| --  See `:help lua-guide-autocommands` | ||||
| 
 | ||||
| -- Highlight when yanking (copying) text | ||||
| --  Try it with `yap` in normal mode | ||||
| --  See `:help vim.highlight.on_yank()` | ||||
| vim.api.nvim_create_autocmd("TextYankPost", { | ||||
| 	desc = "Highlight when yanking (copying) text", | ||||
| 	group = vim.api.nvim_create_augroup("kickstart-highlight-yank", { clear = true }), | ||||
| 	callback = function() | ||||
| 		vim.highlight.on_yank() | ||||
| 	end, | ||||
| }) | ||||
| 
 | ||||
| vim.keymap.set("n", "<leader>y", '"+y') | ||||
| vim.keymap.set("n", "<leader>Y", '"+Y') | ||||
| vim.keymap.set("v", "<leader>y", '"+y') | ||||
| vim.keymap.set("v", "<leader>Y", '"+Y') | ||||
|  | @ -1,49 +0,0 @@ | |||
| require("catppuccin").setup({ | ||||
|     flavour = "mocha", -- latte, frappe, macchiato, mocha | ||||
|     background = { -- :h background | ||||
|         light = "latte", | ||||
|         dark = "mocha", | ||||
|     }, | ||||
|     transparent_background = false, -- disables setting the background color. | ||||
|     show_end_of_buffer = false, -- shows the '~' characters after the end of buffers | ||||
|     term_colors = false, -- sets terminal colors (e.g. `g:terminal_color_0`) | ||||
|     dim_inactive = { | ||||
|         enabled = false, -- dims the background color of inactive window | ||||
|         shade = "dark", | ||||
|         percentage = 0.15, -- percentage of the shade to apply to the inactive window | ||||
|     }, | ||||
|     no_italic = false, -- Force no italic | ||||
|     no_bold = false, -- Force no bold | ||||
|     no_underline = false, -- Force no underline | ||||
|     styles = { -- Handles the styles of general hi groups (see `:h highlight-args`): | ||||
|         comments = { "italic" }, -- Change the style of comments | ||||
|         conditionals = { "italic" }, | ||||
|         loops = {}, | ||||
|         functions = {}, | ||||
|         keywords = {}, | ||||
|         strings = {}, | ||||
|         variables = {}, | ||||
|         numbers = {}, | ||||
|         booleans = {}, | ||||
|         properties = {}, | ||||
|         types = {}, | ||||
|         operators = {}, | ||||
|     }, | ||||
|     color_overrides = {}, | ||||
|     custom_highlights = {}, | ||||
|     integrations = { | ||||
|         cmp = true, | ||||
|         gitsigns = true, | ||||
|         nvimtree = true, | ||||
|         treesitter = true, | ||||
|         notify = false, | ||||
|         mini = { | ||||
|             enabled = true, | ||||
|             indentscope_color = "", | ||||
|         }, | ||||
|         -- For more plugins integrations please scroll down (https://github.com/catppuccin/nvim#integrations) | ||||
|     }, | ||||
| }) | ||||
| 
 | ||||
| -- setup must be called before loading | ||||
| vim.cmd.colorscheme "catppuccin" | ||||
|  | @ -1,50 +0,0 @@ | |||
| -- [[ Configure nvim-cmp ]] | ||||
| -- See `:help cmp` | ||||
| local cmp = require 'cmp' | ||||
| local luasnip = require 'luasnip' | ||||
| require('luasnip.loaders.from_vscode').lazy_load() | ||||
| luasnip.config.setup {} | ||||
| 
 | ||||
| cmp.setup { | ||||
|   snippet = { | ||||
|     expand = function(args) | ||||
|       luasnip.lsp_expand(args.body) | ||||
|     end, | ||||
|   }, | ||||
|   completion = { | ||||
|     completeopt = 'menu,menuone,noinsert', | ||||
|   }, | ||||
|   mapping = cmp.mapping.preset.insert { | ||||
|     ['<C-n>'] = cmp.mapping.select_next_item(), | ||||
|     ['<C-p>'] = cmp.mapping.select_prev_item(), | ||||
|     ['<C-d>'] = cmp.mapping.scroll_docs(-4), | ||||
|     ['<C-f>'] = cmp.mapping.scroll_docs(4), | ||||
|     ['<C-Space>'] = cmp.mapping.complete {}, | ||||
|     ['<CR>'] = cmp.mapping.confirm { | ||||
|       behavior = cmp.ConfirmBehavior.Replace, | ||||
|       select = true, | ||||
|     }, | ||||
|     ['<Tab>'] = cmp.mapping(function(fallback) | ||||
|       if cmp.visible() then | ||||
|         cmp.select_next_item() | ||||
|       elseif luasnip.expand_or_locally_jumpable() then | ||||
|         luasnip.expand_or_jump() | ||||
|       else | ||||
|         fallback() | ||||
|       end | ||||
|     end, { 'i', 's' }), | ||||
|     ['<S-Tab>'] = cmp.mapping(function(fallback) | ||||
|       if cmp.visible() then | ||||
|         cmp.select_prev_item() | ||||
|       elseif luasnip.locally_jumpable(-1) then | ||||
|         luasnip.jump(-1) | ||||
|       else | ||||
|         fallback() | ||||
|       end | ||||
|     end, { 'i', 's' }), | ||||
|   }, | ||||
|   sources = { | ||||
|     { name = 'nvim_lsp' }, | ||||
|     { name = "supermaven" }, | ||||
|   }, | ||||
| } | ||||
|  | @ -1,186 +0,0 @@ | |||
| -- https://raw.githubusercontent.com/neoclide/coc.nvim/master/doc/coc-example-config.lua | ||||
| 
 | ||||
| -- Some servers have issues with backup files, see #649 | ||||
| vim.opt.backup = false | ||||
| vim.opt.writebackup = false | ||||
| 
 | ||||
| -- Having longer updatetime (default is 4000 ms = 4s) leads to noticeable | ||||
| -- delays and poor user experience | ||||
| vim.opt.updatetime = 300 | ||||
| 
 | ||||
| -- Always show the signcolumn, otherwise it would shift the text each time | ||||
| -- diagnostics appeared/became resolved | ||||
| vim.opt.signcolumn = "yes" | ||||
| 
 | ||||
| local keyset = vim.keymap.set | ||||
| -- Autocomplete | ||||
| function _G.check_back_space() | ||||
|     local col = vim.fn.col('.') - 1 | ||||
|     return col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') ~= nil | ||||
| end | ||||
| 
 | ||||
| -- Use Tab for trigger completion with characters ahead and navigate | ||||
| -- NOTE: There's always a completion item selected by default, you may want to enable | ||||
| -- no select by setting `"suggest.noselect": true` in your configuration file | ||||
| -- NOTE: Use command ':verbose imap <tab>' to make sure Tab is not mapped by | ||||
| -- other plugins before putting this into your config | ||||
| local opts = {silent = true, noremap = true, expr = true, replace_keycodes = false} | ||||
| keyset("i", "<TAB>", 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "<TAB>" : coc#refresh()', opts) | ||||
| keyset("i", "<S-TAB>", [[coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"]], opts) | ||||
| 
 | ||||
| -- Make <CR> to accept selected completion item or notify coc.nvim to format | ||||
| -- <C-g>u breaks current undo, please make your own choice | ||||
| keyset("i", "<cr>", [[coc#pum#visible() ? coc#pum#confirm() : "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"]], opts) | ||||
| 
 | ||||
| -- Use <c-j> to trigger snippets | ||||
| keyset("i", "<c-j>", "<Plug>(coc-snippets-expand-jump)") | ||||
| -- Use <c-space> to trigger completion | ||||
| keyset("i", "<c-space>", "coc#refresh()", {silent = true, expr = true}) | ||||
| 
 | ||||
| -- Use `[g` and `]g` to navigate diagnostics | ||||
| -- Use `:CocDiagnostics` to get all diagnostics of current buffer in location list | ||||
| keyset("n", "[g", "<Plug>(coc-diagnostic-prev)", {silent = true}) | ||||
| keyset("n", "]g", "<Plug>(coc-diagnostic-next)", {silent = true}) | ||||
| 
 | ||||
| -- GoTo code navigation | ||||
| keyset("n", "gd", "<Plug>(coc-definition)", {silent = true}) | ||||
| keyset("n", "gy", "<Plug>(coc-type-definition)", {silent = true}) | ||||
| keyset("n", "gi", "<Plug>(coc-implementation)", {silent = true}) | ||||
| keyset("n", "gr", "<Plug>(coc-references)", {silent = true}) | ||||
| 
 | ||||
| 
 | ||||
| -- Use K to show documentation in preview window | ||||
| function _G.show_docs() | ||||
|     local cw = vim.fn.expand('<cword>') | ||||
|     if vim.fn.index({'vim', 'help'}, vim.bo.filetype) >= 0 then | ||||
|         vim.api.nvim_command('h ' .. cw) | ||||
|     elseif vim.api.nvim_eval('coc#rpc#ready()') then | ||||
|         vim.fn.CocActionAsync('doHover') | ||||
|     else | ||||
|         vim.api.nvim_command('!' .. vim.o.keywordprg .. ' ' .. cw) | ||||
|     end | ||||
| end | ||||
| keyset("n", "K", '<CMD>lua _G.show_docs()<CR>', {silent = true}) | ||||
| 
 | ||||
| 
 | ||||
| -- Highlight the symbol and its references on a CursorHold event(cursor is idle) | ||||
| vim.api.nvim_create_augroup("CocGroup", {}) | ||||
| vim.api.nvim_create_autocmd("CursorHold", { | ||||
|     group = "CocGroup", | ||||
|     command = "silent call CocActionAsync('highlight')", | ||||
|     desc = "Highlight symbol under cursor on CursorHold" | ||||
| }) | ||||
| 
 | ||||
| 
 | ||||
| -- Symbol renaming | ||||
| keyset("n", "<leader>rn", "<Plug>(coc-rename)", {silent = true}) | ||||
| 
 | ||||
| 
 | ||||
| -- Formatting selected code | ||||
| keyset("x", "<leader>f", "<Plug>(coc-format-selected)", {silent = true}) | ||||
| keyset("n", "<leader>f", "<Plug>(coc-format-selected)", {silent = true}) | ||||
| 
 | ||||
| 
 | ||||
| -- Setup formatexpr specified filetype(s) | ||||
| vim.api.nvim_create_autocmd("FileType", { | ||||
|     group = "CocGroup", | ||||
|     pattern = "typescript,json", | ||||
|     command = "setl formatexpr=CocAction('formatSelected')", | ||||
|     desc = "Setup formatexpr specified filetype(s)." | ||||
| }) | ||||
| 
 | ||||
| -- Update signature help on jump placeholder | ||||
| vim.api.nvim_create_autocmd("User", { | ||||
|     group = "CocGroup", | ||||
|     pattern = "CocJumpPlaceholder", | ||||
|     command = "call CocActionAsync('showSignatureHelp')", | ||||
|     desc = "Update signature help on jump placeholder" | ||||
| }) | ||||
| 
 | ||||
| -- Apply codeAction to the selected region | ||||
| -- Example: `<leader>aap` for current paragraph | ||||
| local opts = {silent = true, nowait = true} | ||||
| keyset("x", "<leader>a", "<Plug>(coc-codeaction-selected)", opts) | ||||
| keyset("n", "<leader>a", "<Plug>(coc-codeaction-selected)", opts) | ||||
| 
 | ||||
| -- Remap keys for apply code actions at the cursor position. | ||||
| keyset("n", "<leader>ac", "<Plug>(coc-codeaction-cursor)", opts) | ||||
| -- Remap keys for apply source code actions for current file. | ||||
| keyset("n", "<leader>as", "<Plug>(coc-codeaction-source)", opts) | ||||
| -- Apply the most preferred quickfix action on the current line. | ||||
| keyset("n", "<leader>qf", "<Plug>(coc-fix-current)", opts) | ||||
| 
 | ||||
| -- Remap keys for apply refactor code actions. | ||||
| keyset("n", "<leader>re", "<Plug>(coc-codeaction-refactor)", { silent = true }) | ||||
| keyset("x", "<leader>r", "<Plug>(coc-codeaction-refactor-selected)", { silent = true }) | ||||
| keyset("n", "<leader>r", "<Plug>(coc-codeaction-refactor-selected)", { silent = true }) | ||||
| 
 | ||||
| -- Run the Code Lens actions on the current line | ||||
| keyset("n", "<leader>cl", "<Plug>(coc-codelens-action)", opts) | ||||
| 
 | ||||
| 
 | ||||
| -- Map function and class text objects | ||||
| -- NOTE: Requires 'textDocument.documentSymbol' support from the language server | ||||
| keyset("x", "if", "<Plug>(coc-funcobj-i)", opts) | ||||
| keyset("o", "if", "<Plug>(coc-funcobj-i)", opts) | ||||
| keyset("x", "af", "<Plug>(coc-funcobj-a)", opts) | ||||
| keyset("o", "af", "<Plug>(coc-funcobj-a)", opts) | ||||
| keyset("x", "ic", "<Plug>(coc-classobj-i)", opts) | ||||
| keyset("o", "ic", "<Plug>(coc-classobj-i)", opts) | ||||
| keyset("x", "ac", "<Plug>(coc-classobj-a)", opts) | ||||
| keyset("o", "ac", "<Plug>(coc-classobj-a)", opts) | ||||
| 
 | ||||
| 
 | ||||
| -- Remap <C-f> and <C-b> to scroll float windows/popups | ||||
| ---@diagnostic disable-next-line: redefined-local | ||||
| local opts = {silent = true, nowait = true, expr = true} | ||||
| keyset("n", "<C-f>", 'coc#float#has_scroll() ? coc#float#scroll(1) : "<C-f>"', opts) | ||||
| keyset("n", "<C-b>", 'coc#float#has_scroll() ? coc#float#scroll(0) : "<C-b>"', opts) | ||||
| keyset("i", "<C-f>", | ||||
|        'coc#float#has_scroll() ? "<c-r>=coc#float#scroll(1)<cr>" : "<Right>"', opts) | ||||
| keyset("i", "<C-b>", | ||||
|        'coc#float#has_scroll() ? "<c-r>=coc#float#scroll(0)<cr>" : "<Left>"', opts) | ||||
| keyset("v", "<C-f>", 'coc#float#has_scroll() ? coc#float#scroll(1) : "<C-f>"', opts) | ||||
| keyset("v", "<C-b>", 'coc#float#has_scroll() ? coc#float#scroll(0) : "<C-b>"', opts) | ||||
| 
 | ||||
| 
 | ||||
| -- Use CTRL-S for selections ranges | ||||
| -- Requires 'textDocument/selectionRange' support of language server | ||||
| keyset("n", "<C-s>", "<Plug>(coc-range-select)", {silent = true}) | ||||
| keyset("x", "<C-s>", "<Plug>(coc-range-select)", {silent = true}) | ||||
| 
 | ||||
| 
 | ||||
| -- Add `:Format` command to format current buffer | ||||
| vim.api.nvim_create_user_command("Format", "call CocAction('format')", {}) | ||||
| 
 | ||||
| -- " Add `:Fold` command to fold current buffer | ||||
| vim.api.nvim_create_user_command("Fold", "call CocAction('fold', <f-args>)", {nargs = '?'}) | ||||
| 
 | ||||
| -- Add `:OR` command for organize imports of the current buffer | ||||
| vim.api.nvim_create_user_command("OR", "call CocActionAsync('runCommand', 'editor.action.organizeImport')", {}) | ||||
| 
 | ||||
| -- Add (Neo)Vim's native statusline support | ||||
| -- NOTE: Please see `:h coc-status` for integrations with external plugins that | ||||
| -- provide custom statusline: lightline.vim, vim-airline | ||||
| vim.opt.statusline:prepend("%{coc#status()}%{get(b:,'coc_current_function','')}") | ||||
| 
 | ||||
| -- Mappings for CoCList | ||||
| -- code actions and coc stuff | ||||
| ---@diagnostic disable-next-line: redefined-local | ||||
| local opts = {silent = true, nowait = true} | ||||
| -- Show all diagnostics | ||||
| keyset("n", "<space>a", ":<C-u>CocList diagnostics<cr>", opts) | ||||
| -- Manage extensions | ||||
| keyset("n", "<space>e", ":<C-u>CocList extensions<cr>", opts) | ||||
| -- Show commands | ||||
| keyset("n", "<space>c", ":<C-u>CocList commands<cr>", opts) | ||||
| -- Find symbol of current document | ||||
| keyset("n", "<space>o", ":<C-u>CocList outline<cr>", opts) | ||||
| -- Search workspace symbols | ||||
| keyset("n", "<space>s", ":<C-u>CocList -I symbols<cr>", opts) | ||||
| -- Do default action for next item | ||||
| keyset("n", "<space>j", ":<C-u>CocNext<cr>", opts) | ||||
| -- Do default action for previous item | ||||
| keyset("n", "<space>k", ":<C-u>CocPrev<cr>", opts) | ||||
| -- Resume latest coc list | ||||
| keyset("n", "<space>p", ":<C-u>CocListResume<cr>", opts) | ||||
|  | @ -1,24 +0,0 @@ | |||
| local null_ls = require("null-ls") | ||||
| local eslint = require("eslint") | ||||
| 
 | ||||
| null_ls.setup() | ||||
| 
 | ||||
| eslint.setup({ | ||||
|   bin = 'eslint', -- or `eslint_d` | ||||
|   code_actions = { | ||||
|     enable = true, | ||||
|     apply_on_save = { | ||||
|       enable = true, | ||||
|       types = { "directive", "problem", "suggestion", "layout" }, | ||||
|     }, | ||||
|     disable_rule_comment = { | ||||
|       enable = true, | ||||
|       location = "separate_line", -- or `same_line` | ||||
|     }, | ||||
|   }, | ||||
|   diagnostics = { | ||||
|     enable = true, | ||||
|     report_unused_disable_directives = false, | ||||
|     run_on = "type", -- or `save` | ||||
|   }, | ||||
| }) | ||||
|  | @ -1,17 +0,0 @@ | |||
| local harpoon = require("harpoon") | ||||
| 
 | ||||
| -- REQUIRED | ||||
| harpoon:setup() | ||||
| -- REQUIRED | ||||
| 
 | ||||
| vim.keymap.set("n", "<leader>h", function() harpoon:list():append() end) | ||||
| vim.keymap.set("n", "<C-e>", function() harpoon.ui:toggle_quick_menu(harpoon:list()) end) | ||||
| 
 | ||||
| vim.keymap.set("n", "<C-hj>", function() harpoon:list():select(1) end) | ||||
| vim.keymap.set("n", "<C-hk>", function() harpoon:list():select(2) end) | ||||
| vim.keymap.set("n", "<C-hl>", function() harpoon:list():select(3) end) | ||||
| vim.keymap.set("n", "<C-hö>", function() harpoon:list():select(4) end) | ||||
| 
 | ||||
| -- Toggle previous & next buffers stored within Harpoon list | ||||
| vim.keymap.set("n", "<C-hp>", function() harpoon:list():prev() end) | ||||
| vim.keymap.set("n", "<C-hn>", function() harpoon:list():next() end) | ||||
|  | @ -1,12 +1,5 @@ | |||
| require("lorenz.remap") | ||||
| require("lorenz.set") | ||||
| require("lorenz.kickstart") | ||||
| require("lorenz.nvim-tree") | ||||
| require("lorenz.lsp") | ||||
| require("lorenz.basic") | ||||
| require("lorenz.lazy") | ||||
| require("lorenz.tree") | ||||
| require("lorenz.autoclose") | ||||
| require("lorenz.cmp") | ||||
| require("lorenz.catppuccin") | ||||
| require("lorenz.harpoon") | ||||
| require("lorenz.lualine") | ||||
| require("lorenz.coc") | ||||
| require("lorenz.eslint") | ||||
| require("lorenz.kickstarter") | ||||
|  |  | |||
|  | @ -1,517 +0,0 @@ | |||
| -- Set <space> as the leader key | ||||
| -- See `:help mapleader` | ||||
| --  NOTE: Must happen before plugins are required (otherwise wrong leader will be used) | ||||
| vim.g.mapleader = ' ' | ||||
| vim.g.maplocalleader = ' ' | ||||
| 
 | ||||
| -- [[ Install `lazy.nvim` plugin manager ]] | ||||
| --    https://github.com/folke/lazy.nvim | ||||
| --    `:help lazy.nvim.txt` for more info | ||||
| local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim' | ||||
| if not vim.loop.fs_stat(lazypath) then | ||||
|   vim.fn.system { | ||||
|     'git', | ||||
|     'clone', | ||||
|     '--filter=blob:none', | ||||
|     'https://github.com/folke/lazy.nvim.git', | ||||
|     '--branch=stable', -- latest stable release | ||||
|     lazypath, | ||||
|   } | ||||
| end | ||||
| vim.opt.rtp:prepend(lazypath) | ||||
| 
 | ||||
| -- [[ Configure plugins ]] | ||||
| require('lazy').setup({ | ||||
|   "supermaven-inc/supermaven-nvim", | ||||
|   'neovim/nvim-lspconfig', | ||||
|   'jose-elias-alvarez/null-ls.nvim', | ||||
|   'MunifTanjim/eslint.nvim', | ||||
| 
 | ||||
|   { | ||||
|     'neoclide/coc.nvim', | ||||
|     branch = 'release' | ||||
|   }, | ||||
|   -- autoclose | ||||
|   'm4xshen/autoclose.nvim', | ||||
| 
 | ||||
|   -- Git related plugins | ||||
|   'tpope/vim-fugitive', | ||||
|   'tpope/vim-rhubarb', | ||||
| 
 | ||||
|   --templ | ||||
|   'joerdav/templ.vim', | ||||
| 
 | ||||
|   -- vim font | ||||
|   'ryanoasis/vim-devicons', | ||||
| 
 | ||||
|   -- Git Plugin | ||||
|   { | ||||
|     "tpope/vim-fugitive", | ||||
|     cmd = "Git" | ||||
|   }, | ||||
| 
 | ||||
|   -- Detect tabstop and shiftwidth automatically | ||||
|   'tpope/vim-sleuth', | ||||
| 
 | ||||
|   -- NOTE: This is where your plugins related to LSP can be installed. | ||||
|   --  The configuration is done below. Search for lspconfig to find it below. | ||||
|   { | ||||
|     -- LSP Configuration & Plugins | ||||
|     'neovim/nvim-lspconfig', | ||||
|     dependencies = { | ||||
|       -- Automatically install LSPs to stdpath for neovim | ||||
|       'williamboman/mason.nvim', | ||||
|       'williamboman/mason-lspconfig.nvim', | ||||
| 
 | ||||
|       -- Useful status updates for LSP | ||||
|       -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})` | ||||
|       { 'j-hui/fidget.nvim', opts = {} }, | ||||
| 
 | ||||
|       -- Additional lua configuration, makes nvim stuff amazing! | ||||
|       'folke/neodev.nvim', | ||||
|     }, | ||||
|   }, | ||||
| 
 | ||||
|   { | ||||
|     -- Autocompletion | ||||
|     'hrsh7th/nvim-cmp', | ||||
|     dependencies = { | ||||
|       -- Snippet Engine & its associated nvim-cmp source | ||||
|       'L3MON4D3/LuaSnip', | ||||
|       'saadparwaiz1/cmp_luasnip', | ||||
| 
 | ||||
|       -- Adds LSP completion capabilities | ||||
|       'hrsh7th/cmp-nvim-lsp', | ||||
| 
 | ||||
|       -- Adds a number of user-friendly snippets | ||||
|       'rafamadriz/friendly-snippets', | ||||
|     }, | ||||
|   }, | ||||
| 
 | ||||
|   -- Useful plugin to show you pending keybinds. | ||||
|   { 'folke/which-key.nvim',  opts = {} }, | ||||
| 
 | ||||
|   -- Tmux | ||||
|   { | ||||
|     "christoomey/vim-tmux-navigator", | ||||
|     cmd = { | ||||
|       "TmuxNavigateLeft", | ||||
|       "TmuxNavigateDown", | ||||
|       "TmuxNavigateUp", | ||||
|       "TmuxNavigateRight", | ||||
|       "TmuxNavigatePrevious", | ||||
|     }, | ||||
|     keys = { | ||||
|       { "<c-h>",  "<cmd><C-U>TmuxNavigateLeft<cr>" }, | ||||
|       { "<c-j>",  "<cmd><C-U>TmuxNavigateDown<cr>" }, | ||||
|       { "<c-k>",  "<cmd><C-U>TmuxNavigateUp<cr>" }, | ||||
|       { "<c-l>",  "<cmd><C-U>TmuxNavigateRight<cr>" }, | ||||
|       { "<c-\\>", "<cmd><C-U>TmuxNavigatePrevious<cr>" }, | ||||
|     }, | ||||
|   }, | ||||
|   { | ||||
|     -- Adds git related signs to the gutter, as well as utilities for managing changes | ||||
|     'lewis6991/gitsigns.nvim', | ||||
|     opts = { | ||||
|       -- See `:help gitsigns.txt` | ||||
|       signs = { | ||||
|         add = { text = '+' }, | ||||
|         change = { text = '~' }, | ||||
|         delete = { text = '_' }, | ||||
|         topdelete = { text = '‾' }, | ||||
|         changedelete = { text = '~' }, | ||||
|       }, | ||||
|       on_attach = function(bufnr) | ||||
|         vim.keymap.set('n', '<leader>hp', require('gitsigns').preview_hunk, { buffer = bufnr, desc = 'Preview git hunk' }) | ||||
| 
 | ||||
|         -- don't override the built-in and fugitive keymaps | ||||
|         local gs = package.loaded.gitsigns | ||||
|         vim.keymap.set({ 'n', 'v' }, ']c', function() | ||||
|           if vim.wo.diff then | ||||
|             return ']c' | ||||
|           end | ||||
|           vim.schedule(function() | ||||
|             gs.next_hunk() | ||||
|           end) | ||||
|           return '<Ignore>' | ||||
|         end, { expr = true, buffer = bufnr, desc = 'Jump to next hunk' }) | ||||
|         vim.keymap.set({ 'n', 'v' }, '[c', function() | ||||
|           if vim.wo.diff then | ||||
|             return '[c' | ||||
|           end | ||||
|           vim.schedule(function() | ||||
|             gs.prev_hunk() | ||||
|           end) | ||||
|           return '<Ignore>' | ||||
|         end, { expr = true, buffer = bufnr, desc = 'Jump to previous hunk' }) | ||||
|       end, | ||||
|     }, | ||||
|   }, | ||||
| 
 | ||||
|   { | ||||
|     'catppuccin/nvim', | ||||
|     name = 'catppuccin', | ||||
|     priority = 1000, | ||||
|     config = function() | ||||
|       vim.cmd.colorscheme 'catppuccin' | ||||
|     end, | ||||
|   }, | ||||
| 
 | ||||
|   { | ||||
|     "ThePrimeagen/harpoon", | ||||
|     branch = "harpoon2", | ||||
|     dependencies = { "nvim-lua/plenary.nvim" } | ||||
|   }, | ||||
| 
 | ||||
|   -- Set lualine as statusline | ||||
|   'nvim-lualine/lualine.nvim', | ||||
|   -- See `:help lualine.txt` | ||||
| 
 | ||||
|   { | ||||
|     -- Add indentation guides even on blank lines | ||||
|     'lukas-reineke/indent-blankline.nvim', | ||||
|     -- Enable `lukas-reineke/indent-blankline.nvim` | ||||
|     -- See `:help ibl` | ||||
|     main = 'ibl', | ||||
|     opts = {}, | ||||
|   }, | ||||
| 
 | ||||
|   -- "gc" to comment visual regions/lines | ||||
|   { 'numToStr/Comment.nvim', opts = {} }, | ||||
| 
 | ||||
|   -- Fuzzy Finder (files, lsp, etc) | ||||
|   { | ||||
|     'nvim-telescope/telescope.nvim', | ||||
|     branch = '0.1.x', | ||||
|     dependencies = { | ||||
|       'nvim-lua/plenary.nvim', | ||||
|       -- Fuzzy Finder Algorithm which requires local dependencies to be built. | ||||
|       -- Only load if `make` is available. Make sure you have the system | ||||
|       -- requirements installed. | ||||
|       { | ||||
|         'nvim-telescope/telescope-fzf-native.nvim', | ||||
|         -- NOTE: If you are having trouble with this installation, | ||||
|         --       refer to the README for telescope-fzf-native for more instructions. | ||||
|         build = 'make', | ||||
|         cond = function() | ||||
|           return vim.fn.executable 'make' == 1 | ||||
|         end, | ||||
|       }, | ||||
|     }, | ||||
|   }, | ||||
| 
 | ||||
|   { | ||||
|     -- Highlight, edit, and navigate code | ||||
|     'nvim-treesitter/nvim-treesitter', | ||||
|     dependencies = { | ||||
|       'nvim-treesitter/nvim-treesitter-textobjects', | ||||
|     }, | ||||
|     build = ':TSUpdate', | ||||
|   }, | ||||
| 
 | ||||
|   -- NOTE: Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart | ||||
|   --       These are some example plugins that I've included in the kickstart repository. | ||||
|   --       Uncomment any of the lines below to enable them. | ||||
|   -- require 'kickstart.plugins.autoformat', | ||||
|   -- require 'kickstart.plugins.debug', | ||||
| 
 | ||||
|   -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua` | ||||
|   --    You can use this folder to prevent any conflicts with this init.lua if you're interested in keeping | ||||
|   --    up-to-date with whatever is in the kickstart repo. | ||||
|   --    Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going. | ||||
|   -- | ||||
|   --    For additional information see: https://github.com/folke/lazy.nvim#-structuring-your-plugins | ||||
|   -- { import = 'custom.plugins' }, | ||||
| 
 | ||||
|   { | ||||
|     "nvim-tree/nvim-tree.lua", | ||||
|     version = "*", | ||||
|     lazy = false, | ||||
|     dependencies = { | ||||
|       "nvim-tree/nvim-web-devicons", | ||||
|     }, | ||||
|     config = function() | ||||
|     end, | ||||
|   }, | ||||
| 
 | ||||
|   { | ||||
|     "mbbill/undotree", | ||||
|     lazy = false | ||||
|   }, | ||||
| }, {}) | ||||
| 
 | ||||
| -- [[ Setting options ]] | ||||
| -- See `:help vim.o` | ||||
| -- NOTE: You can change these options as you wish! | ||||
| 
 | ||||
| 
 | ||||
| -- [[ Basic Keymaps ]] | ||||
| 
 | ||||
| -- Keymaps for better default experience | ||||
| -- See `:help vim.keymap.set()` | ||||
| 
 | ||||
| -- [[ Highlight on yank ]] | ||||
| -- See `:help vim.highlight.on_yank()` | ||||
| local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true }) | ||||
| vim.api.nvim_create_autocmd('TextYankPost', { | ||||
|   callback = function() | ||||
|     vim.highlight.on_yank() | ||||
|   end, | ||||
|   group = highlight_group, | ||||
|   pattern = '*', | ||||
| }) | ||||
| 
 | ||||
| -- [[ Configure Telescope ]] | ||||
| -- See `:help telescope` and `:help telescope.setup()` | ||||
| require('telescope').setup { | ||||
|   defaults = { | ||||
|     mappings = { | ||||
|       i = { | ||||
|         ['<C-u>'] = false, | ||||
|         ['<C-d>'] = false, | ||||
|       }, | ||||
|     }, | ||||
|   }, | ||||
| } | ||||
| 
 | ||||
| -- Enable telescope fzf native, if installed | ||||
| pcall(require('telescope').load_extension, 'fzf') | ||||
| 
 | ||||
| -- Telescope live_grep in git root | ||||
| -- Function to find the git root directory based on the current buffer's path | ||||
| local function find_git_root() | ||||
|   -- Use the current buffer's path as the starting point for the git search | ||||
|   local current_file = vim.api.nvim_buf_get_name(0) | ||||
|   local current_dir | ||||
|   local cwd = vim.fn.getcwd() | ||||
|   -- If the buffer is not associated with a file, return nil | ||||
|   if current_file == '' then | ||||
|     current_dir = cwd | ||||
|   else | ||||
|     -- Extract the directory from the current file's path | ||||
|     current_dir = vim.fn.fnamemodify(current_file, ':h') | ||||
|   end | ||||
| 
 | ||||
|   -- Find the Git root directory from the current file's path | ||||
|   local git_root = vim.fn.systemlist('git -C ' .. vim.fn.escape(current_dir, ' ') .. ' rev-parse --show-toplevel')[1] | ||||
|   if vim.v.shell_error ~= 0 then | ||||
|     print 'Not a git repository. Searching on current working directory' | ||||
|     return cwd | ||||
|   end | ||||
|   return git_root | ||||
| end | ||||
| 
 | ||||
| -- Custom live_grep function to search in git root | ||||
| local function live_grep_git_root() | ||||
|   local git_root = find_git_root() | ||||
|   if git_root then | ||||
|     require('telescope.builtin').live_grep { | ||||
|       search_dirs = { git_root }, | ||||
|     } | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| vim.api.nvim_create_user_command('LiveGrepGitRoot', live_grep_git_root, {}) | ||||
| 
 | ||||
| -- See `:help telescope.builtin` | ||||
| vim.keymap.set('n', '<leader>?', require('telescope.builtin').oldfiles, { desc = '[?] Find recently opened files' }) | ||||
| vim.keymap.set('n', '<leader><space>', require('telescope.builtin').buffers, { desc = '[ ] Find existing buffers' }) | ||||
| vim.keymap.set('n', '<leader>/', function() | ||||
|   -- You can pass additional configuration to telescope to change theme, layout, etc. | ||||
|   require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { | ||||
|     winblend = 10, | ||||
|     previewer = false, | ||||
|   }) | ||||
| end, { desc = '[/] Fuzzily search in current buffer' }) | ||||
| 
 | ||||
| vim.keymap.set('n', '<leader>gf', require('telescope.builtin').git_files, { desc = 'Search [G]it [F]iles' }) | ||||
| vim.keymap.set('n', '<leader>sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' }) | ||||
| vim.keymap.set('n', '<leader>sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' }) | ||||
| vim.keymap.set('n', '<leader>sw', require('telescope.builtin').grep_string, { desc = '[S]earch current [W]ord' }) | ||||
| vim.keymap.set('n', '<leader>sg', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' }) | ||||
| vim.keymap.set('n', '<leader>sG', ':LiveGrepGitRoot<cr>', { desc = '[S]earch by [G]rep on Git Root' }) | ||||
| vim.keymap.set('n', '<leader>sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' }) | ||||
| vim.keymap.set('n', '<leader>sr', require('telescope.builtin').resume, { desc = '[S]earch [R]esume' }) | ||||
| 
 | ||||
| -- [[ Configure Treesitter ]] | ||||
| -- See `:help nvim-treesitter` | ||||
| -- Defer Treesitter setup after first render to improve startup time of 'nvim {filename}' | ||||
| vim.defer_fn(function() | ||||
|   require('nvim-treesitter.configs').setup { | ||||
|     -- Add languages to be installed here that you want installed for treesitter | ||||
|     ensure_installed = { 'c', 'cpp', 'go', 'lua', 'python', 'rust', 'javascript', 'vimdoc', 'vim', 'bash' }, | ||||
| 
 | ||||
|     -- Autoinstall languages that are not installed. Defaults to false (but you can change for yourself!) | ||||
|     auto_install = true, | ||||
|     sync_install = false, | ||||
|     ignore_install = {}, | ||||
|     modules = {}, | ||||
| 
 | ||||
|     highlight = { enable = true }, | ||||
|     indent = { enable = true }, | ||||
|     incremental_selection = { | ||||
|       enable = true, | ||||
|       keymaps = { | ||||
|         init_selection = '<c-space>', | ||||
|         node_incremental = '<c-space>', | ||||
|         scope_incremental = '<c-s>', | ||||
|         node_decremental = '<M-space>', | ||||
|       }, | ||||
|     }, | ||||
|     textobjects = { | ||||
|       select = { | ||||
|         enable = true, | ||||
|         lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim | ||||
|         keymaps = { | ||||
|           -- You can use the capture groups defined in textobjects.scm | ||||
|           ['aa'] = '@parameter.outer', | ||||
|           ['ia'] = '@parameter.inner', | ||||
|           ['af'] = '@function.outer', | ||||
|           ['if'] = '@function.inner', | ||||
|           ['ac'] = '@class.outer', | ||||
|           ['ic'] = '@class.inner', | ||||
|         }, | ||||
|       }, | ||||
|       move = { | ||||
|         enable = true, | ||||
|         set_jumps = true, -- whether to set jumps in the jumplist | ||||
|         goto_next_start = { | ||||
|           [']m'] = '@function.outer', | ||||
|           [']]'] = '@class.outer', | ||||
|         }, | ||||
|         goto_next_end = { | ||||
|           [']M'] = '@function.outer', | ||||
|           [']['] = '@class.outer', | ||||
|         }, | ||||
|         goto_previous_start = { | ||||
|           ['[m'] = '@function.outer', | ||||
|           ['[['] = '@class.outer', | ||||
|         }, | ||||
|         goto_previous_end = { | ||||
|           ['[M'] = '@function.outer', | ||||
|           ['[]'] = '@class.outer', | ||||
|         }, | ||||
|       }, | ||||
|       swap = { | ||||
|         enable = true, | ||||
|         swap_next = { | ||||
|           ['<leader>a'] = '@parameter.inner', | ||||
|         }, | ||||
|         swap_previous = { | ||||
|           ['<leader>A'] = '@parameter.inner', | ||||
|         }, | ||||
|       }, | ||||
|     }, | ||||
|   } | ||||
| end, 0) | ||||
| -- [[ Configure LSP ]] | ||||
| --  This function gets run when an LSP connects to a particular buffer. | ||||
| local on_attach = function(_, bufnr) | ||||
|   -- 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 | ||||
|   -- many times. | ||||
|   -- | ||||
|   -- 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 nmap = function(keys, func, desc) | ||||
|     if desc then | ||||
|       desc = 'LSP: ' .. desc | ||||
|     end | ||||
| 
 | ||||
|     vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) | ||||
|   end | ||||
| 
 | ||||
|   nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame') | ||||
|   nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction') | ||||
| 
 | ||||
|   nmap('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition') | ||||
|   nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') | ||||
|   nmap('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation') | ||||
|   nmap('<leader>D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition') | ||||
|   nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') | ||||
|   nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') | ||||
| 
 | ||||
|   -- See `:help K` for why this keymap | ||||
|   nmap('K', vim.lsp.buf.hover, 'Hover Documentation') | ||||
|   nmap('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation') | ||||
| 
 | ||||
|   -- Lesser used LSP functionality | ||||
|   nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') | ||||
|   nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') | ||||
|   nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') | ||||
|   nmap('<leader>wl', function() | ||||
|     print(vim.inspect(vim.lsp.buf.list_workspace_folders())) | ||||
|   end, '[W]orkspace [L]ist Folders') | ||||
| 
 | ||||
|   -- Create a command `:Format` local to the LSP buffer | ||||
|   vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) | ||||
|     vim.lsp.buf.format() | ||||
|   end, { desc = 'Format current buffer with LSP' }) | ||||
| end | ||||
| 
 | ||||
| -- document existing key chains | ||||
| require('which-key').register { | ||||
|   ['<leader>c'] = { name = '[C]ode', _ = 'which_key_ignore' }, | ||||
|   ['<leader>d'] = { name = '[D]ocument', _ = 'which_key_ignore' }, | ||||
|   ['<leader>g'] = { name = '[G]it', _ = 'which_key_ignore' }, | ||||
|   ['<leader>h'] = { name = 'More git', _ = 'which_key_ignore' }, | ||||
|   ['<leader>r'] = { name = '[R]ename', _ = 'which_key_ignore' }, | ||||
|   ['<leader>s'] = { name = '[S]earch', _ = 'which_key_ignore' }, | ||||
|   ['<leader>w'] = { name = '[W]orkspace', _ = 'which_key_ignore' }, | ||||
| } | ||||
| 
 | ||||
| -- mason-lspconfig requires that these setup functions are called in this order | ||||
| -- before setting up the servers. | ||||
| require('mason').setup() | ||||
| require('mason-lspconfig').setup() | ||||
| 
 | ||||
| -- 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. They will be passed to | ||||
| --  the `settings` field of the server config. You must look up that documentation yourself. | ||||
| -- | ||||
| --  If you want to override the default filetypes that your language server will attach to you can | ||||
| --  define the property 'filetypes' to the map in question. | ||||
| local servers = { | ||||
|   -- clangd = {}, | ||||
|   -- gopls = {}, | ||||
|   -- pyright = {}, | ||||
|   -- rust_analyzer = {}, | ||||
|   -- tsserver = {}, | ||||
|   -- html = { filetypes = { 'html', 'twig', 'hbs'} }, | ||||
| 
 | ||||
|   lua_ls = { | ||||
|     Lua = { | ||||
|       workspace = { checkThirdParty = false }, | ||||
|       telemetry = { enable = false }, | ||||
|       -- NOTE: toggle below to ignore Lua_LS's noisy `missing-fields` warnings | ||||
|       -- diagnostics = { disable = { 'missing-fields' } }, | ||||
|     }, | ||||
|   }, | ||||
| } | ||||
| 
 | ||||
| -- Setup neovim lua configuration | ||||
| require('neodev').setup() | ||||
| 
 | ||||
| -- nvim-cmp supports additional completion capabilities, so broadcast that to servers | ||||
| local capabilities = vim.lsp.protocol.make_client_capabilities() | ||||
| capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) | ||||
| 
 | ||||
| -- Ensure the servers above are installed | ||||
| local mason_lspconfig = require 'mason-lspconfig' | ||||
| 
 | ||||
| mason_lspconfig.setup { | ||||
|   ensure_installed = vim.tbl_keys(servers), | ||||
| } | ||||
| 
 | ||||
| mason_lspconfig.setup_handlers { | ||||
|   function(server_name) | ||||
|     require('lspconfig')[server_name].setup { | ||||
|       capabilities = capabilities, | ||||
|       on_attach = on_attach, | ||||
|       settings = servers[server_name], | ||||
|       filetypes = (servers[server_name] or {}).filetypes, | ||||
|     } | ||||
|   end, | ||||
| } | ||||
|  | @ -0,0 +1,4 @@ | |||
| 
 | ||||
| 
 | ||||
| -- The line beneath this is called `modeline`. See `:help modeline` | ||||
| -- vim: ts=2 sts=2 sw=2 et | ||||
|  | @ -0,0 +1,735 @@ | |||
| -- [[ 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 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 ---@diagnostic disable-next-line: undefined-field | ||||
| vim.opt.rtp:prepend(lazypath) | ||||
| 
 | ||||
| require("lazy").setup({ | ||||
| 
 | ||||
| 	"m4xshen/autoclose.nvim", | ||||
| 
 | ||||
| 	{ | ||||
| 		"nvim-tree/nvim-tree.lua", | ||||
| 		version = "*", | ||||
| 		lazy = false, | ||||
| 		dependencies = { | ||||
| 			"nvim-tree/nvim-web-devicons", | ||||
| 		}, | ||||
| 	}, | ||||
| 
 | ||||
| 	"tpope/vim-sleuth", -- Detect tabstop and shiftwidth automatically | ||||
| 
 | ||||
| 	{ -- 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 = "~" }, | ||||
| 			}, | ||||
| 		}, | ||||
| 	}, | ||||
| 
 | ||||
| 	{ -- Useful plugin to show you pending keybinds. | ||||
| 		"folke/which-key.nvim", | ||||
| 		event = "VimEnter", -- Sets the loading event to 'VimEnter' | ||||
| 		opts = { | ||||
| 			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 whick-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 | ||||
| 			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" } }, | ||||
| 			}, | ||||
| 		}, | ||||
| 	}, | ||||
| 
 | ||||
| 	{ -- Fuzzy Finder (files, lsp, etc) | ||||
| 		"nvim-telescope/telescope.nvim", | ||||
| 		event = "VimEnter", | ||||
| 		branch = "0.1.x", | ||||
| 		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 | ||||
| 				--  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(), | ||||
| 					}, | ||||
| 				}, | ||||
| 			}) | ||||
| 
 | ||||
| 			-- Enable Telescope extensions if they are installed | ||||
| 			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() | ||||
| 				-- You can pass additional configuration to Telescope to change the theme, layout, etc. | ||||
| 				builtin.current_buffer_fuzzy_find(require("telescope.themes").get_dropdown({ | ||||
| 					winblend = 10, | ||||
| 					previewer = false, | ||||
| 				})) | ||||
| 			end, { desc = "[/] Fuzzily search in current buffer" }) | ||||
| 
 | ||||
| 			-- It's also possible to pass additional configuration options. | ||||
| 			--  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" }) | ||||
| 
 | ||||
| 			-- 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" }) | ||||
| 		end, | ||||
| 	}, | ||||
| 
 | ||||
| 	-- 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 = "luvit-meta/library", words = { "vim%.uv" } }, | ||||
| 			}, | ||||
| 		}, | ||||
| 	}, | ||||
| 	{ "Bilal2453/luvit-meta", lazy = true }, | ||||
| 	{ | ||||
| 		-- Main LSP Configuration | ||||
| 		"neovim/nvim-lspconfig", | ||||
| 		dependencies = { | ||||
| 			-- Automatically install LSPs and related tools to stdpath for Neovim | ||||
| 			{ "williamboman/mason.nvim", config = true }, -- NOTE: Must be loaded before dependants | ||||
| 			"williamboman/mason-lspconfig.nvim", | ||||
| 			"WhoIsSethDaniel/mason-tool-installer.nvim", | ||||
| 
 | ||||
| 			-- Useful status updates for LSP. | ||||
| 			-- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})` | ||||
| 			{ "j-hui/fidget.nvim", opts = {} }, | ||||
| 
 | ||||
| 			-- Allows extra capabilities provided by nvim-cmp | ||||
| 			"hrsh7th/cmp-nvim-lsp", | ||||
| 		}, | ||||
| 		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. | ||||
| 			--    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) | ||||
| 					-- 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. | ||||
| 					-- | ||||
| 					-- 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, 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. | ||||
| 					--  This is where a variable was first declared, or where a function is defined, etc. | ||||
| 					--  To jump back, press <C-t>. | ||||
| 					map("gd", require("telescope.builtin").lsp_definitions, "[G]oto [D]efinition") | ||||
| 
 | ||||
| 					-- Find references for the word under your cursor. | ||||
| 					map("gr", require("telescope.builtin").lsp_references, "[G]oto [R]eferences") | ||||
| 
 | ||||
| 					-- Jump to the implementation of the word under your cursor. | ||||
| 					--  Useful when your language has ways of declaring types without an actual implementation. | ||||
| 					map("gI", require("telescope.builtin").lsp_implementations, "[G]oto [I]mplementation") | ||||
| 
 | ||||
| 					-- 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("<leader>D", require("telescope.builtin").lsp_type_definitions, "Type [D]efinition") | ||||
| 
 | ||||
| 					-- Fuzzy find all the symbols in your current document. | ||||
| 					--  Symbols are things like variables, functions, types, etc. | ||||
| 					map("<leader>ds", require("telescope.builtin").lsp_document_symbols, "[D]ocument [S]ymbols") | ||||
| 
 | ||||
| 					-- Fuzzy find all the symbols in your current workspace. | ||||
| 					--  Similar to document symbols, except searches over your entire project. | ||||
| 					map( | ||||
| 						"<leader>ws", | ||||
| 						require("telescope.builtin").lsp_dynamic_workspace_symbols, | ||||
| 						"[W]orkspace [S]ymbols" | ||||
| 					) | ||||
| 
 | ||||
| 					-- Rename the variable under your cursor. | ||||
| 					--  Most Language Servers support renaming across files, etc. | ||||
| 					map("<leader>rn", 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("<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. | ||||
| 					map("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration") | ||||
| 
 | ||||
| 					-- The following two autocommands are used to highlight references of the | ||||
| 					-- word under your cursor when your cursor rests there for a little while. | ||||
| 					--    See `:help CursorHold` for information about when this is executed | ||||
| 					-- | ||||
| 					-- When you move your cursor, the highlights will be cleared (the second autocommand). | ||||
| 					local client = vim.lsp.get_client_by_id(event.data.client_id) | ||||
| 					if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_documentHighlight) then | ||||
| 						local highlight_augroup = | ||||
| 							vim.api.nvim_create_augroup("kickstart-lsp-highlight", { clear = false }) | ||||
| 						vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { | ||||
| 							buffer = event.buf, | ||||
| 							group = highlight_augroup, | ||||
| 							callback = vim.lsp.buf.document_highlight, | ||||
| 						}) | ||||
| 
 | ||||
| 						vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, { | ||||
| 							buffer = event.buf, | ||||
| 							group = highlight_augroup, | ||||
| 							callback = vim.lsp.buf.clear_references, | ||||
| 						}) | ||||
| 
 | ||||
| 						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, | ||||
| 						}) | ||||
| 					end | ||||
| 
 | ||||
| 					-- The following code creates a keymap to toggle inlay hints in your | ||||
| 					-- code, if the language server you are using supports them | ||||
| 					-- | ||||
| 					-- This may be unwanted, since they displace some of your code | ||||
| 					if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then | ||||
| 						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, | ||||
| 			}) | ||||
| 
 | ||||
| 			-- 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. | ||||
| 			--  So, we create new capabilities with nvim cmp, and then broadcast that to the servers. | ||||
| 			local capabilities = vim.lsp.protocol.make_client_capabilities() | ||||
| 			capabilities = vim.tbl_deep_extend("force", capabilities, require("cmp_nvim_lsp").default_capabilities()) | ||||
| 
 | ||||
| 			-- 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 | ||||
| 				-- | ||||
| 				-- But for many setups, the LSP (`ts_ls`) will work just fine | ||||
| 				-- ts_ls = {}, | ||||
| 				-- | ||||
| 
 | ||||
| 				lua_ls = { | ||||
| 					-- cmd = {...}, | ||||
| 					-- filetypes = { ...}, | ||||
| 					-- capabilities = {}, | ||||
| 					settings = { | ||||
| 						Lua = { | ||||
| 							completion = { | ||||
| 								callSnippet = "Replace", | ||||
| 							}, | ||||
| 							-- 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 | ||||
| 			--  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 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, { | ||||
| 				"stylua", -- Used to format Lua code | ||||
| 			}) | ||||
| 			require("mason-tool-installer").setup({ ensure_installed = ensure_installed }) | ||||
| 
 | ||||
| 			require("mason-lspconfig").setup({ | ||||
| 				handlers = { | ||||
| 					function(server_name) | ||||
| 						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_ls) | ||||
| 						server.capabilities = vim.tbl_deep_extend("force", {}, capabilities, server.capabilities or {}) | ||||
| 						require("lspconfig")[server_name].setup(server) | ||||
| 					end, | ||||
| 				}, | ||||
| 			}) | ||||
| 		end, | ||||
| 	}, | ||||
| 
 | ||||
| 	{ -- Autoformat | ||||
| 		"stevearc/conform.nvim", | ||||
| 		event = { "BufWritePre" }, | ||||
| 		cmd = { "ConformInfo" }, | ||||
| 		keys = { | ||||
| 			{ | ||||
| 				"<leader>f", | ||||
| 				function() | ||||
| 					require("conform").format({ async = true, lsp_format = "fallback" }) | ||||
| 				end, | ||||
| 				mode = "", | ||||
| 				desc = "[F]ormat buffer", | ||||
| 			}, | ||||
| 		}, | ||||
| 		opts = { | ||||
| 			notify_on_error = false, | ||||
| 			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 } | ||||
| 				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_format = lsp_format_opt, | ||||
| 				} | ||||
| 			end, | ||||
| 			formatters_by_ft = { | ||||
| 				lua = { "stylua" }, | ||||
| 				-- Conform can also run multiple formatters sequentially | ||||
| 				-- python = { "isort", "black" }, | ||||
| 				-- | ||||
| 				-- You can use 'stop_after_first' to run the first available formatter from the list | ||||
| 				-- javascript = { "prettierd", "prettier", stop_after_first = true }, | ||||
| 			}, | ||||
| 		}, | ||||
| 	}, | ||||
| 
 | ||||
| 	{ -- Autocompletion | ||||
| 		"hrsh7th/nvim-cmp", | ||||
| 		event = "InsertEnter", | ||||
| 		dependencies = { | ||||
| 			-- Snippet Engine & its associated nvim-cmp source | ||||
| 			{ | ||||
| 				"L3MON4D3/LuaSnip", | ||||
| 				build = (function() | ||||
| 					-- 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. | ||||
| 					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, | ||||
| 					-- }, | ||||
| 				}, | ||||
| 			}, | ||||
| 			"saadparwaiz1/cmp_luasnip", | ||||
| 
 | ||||
| 			-- Adds other completion capabilities. | ||||
| 			--  nvim-cmp does not ship with all sources by default. They are split | ||||
| 			--  into multiple repos for maintenance purposes. | ||||
| 			"hrsh7th/cmp-nvim-lsp", | ||||
| 			"hrsh7th/cmp-path", | ||||
| 		}, | ||||
| 		config = function() | ||||
| 			-- See `:help cmp` | ||||
| 			local cmp = require("cmp") | ||||
| 			local luasnip = require("luasnip") | ||||
| 			luasnip.config.setup({}) | ||||
| 
 | ||||
| 			cmp.setup({ | ||||
| 				snippet = { | ||||
| 					expand = function(args) | ||||
| 						luasnip.lsp_expand(args.body) | ||||
| 					end, | ||||
| 				}, | ||||
| 				completion = { completeopt = "menu,menuone,noinsert" }, | ||||
| 
 | ||||
| 				-- For an understanding of why these mappings were | ||||
| 				-- chosen, you will need to read `:help ins-completion` | ||||
| 				-- | ||||
| 				-- No, but seriously. Please read `:help ins-completion`, it is really good! | ||||
| 				mapping = cmp.mapping.preset.insert({ | ||||
| 					-- Select the [n]ext item | ||||
| 					["<C-n>"] = cmp.mapping.select_next_item(), | ||||
| 					-- Select the [p]revious item | ||||
| 					["<C-p>"] = cmp.mapping.select_prev_item(), | ||||
| 
 | ||||
| 					-- Scroll the documentation window [b]ack / [f]orward | ||||
| 					["<C-b>"] = cmp.mapping.scroll_docs(-4), | ||||
| 					["<C-f>"] = cmp.mapping.scroll_docs(4), | ||||
| 
 | ||||
| 					-- Accept ([y]es) the completion. | ||||
| 					--  This will auto-import if your LSP supports it. | ||||
| 					--  This will expand snippets if the LSP sent a snippet. | ||||
| 					["<CR>"] = cmp.mapping.confirm({ select = true }), | ||||
| 
 | ||||
| 					-- If you prefer more traditional completion keymaps, | ||||
| 					-- you can uncomment the following lines | ||||
| 					--['<CR>'] = cmp.mapping.confirm { select = true }, | ||||
| 					--['<Tab>'] = cmp.mapping.select_next_item(), | ||||
| 					--['<S-Tab>'] = cmp.mapping.select_prev_item(), | ||||
| 
 | ||||
| 					-- Manually trigger a completion from nvim-cmp. | ||||
| 					--  Generally you don't need this, because nvim-cmp will display | ||||
| 					--  completions whenever it has completion options available. | ||||
| 					["<C-Space>"] = cmp.mapping.complete({}), | ||||
| 
 | ||||
| 					-- Think of <c-l> as moving to the right of your snippet expansion. | ||||
| 					--  So if you have a snippet that's like: | ||||
| 					--  function $name($args) | ||||
| 					--    $body | ||||
| 					--  end | ||||
| 					-- | ||||
| 					-- <c-l> will move you to the right of each of the expansion locations. | ||||
| 					-- <c-h> is similar, except moving you backwards. | ||||
| 					["<C-l>"] = cmp.mapping(function() | ||||
| 						if luasnip.expand_or_locally_jumpable() then | ||||
| 							luasnip.expand_or_jump() | ||||
| 						end | ||||
| 					end, { "i", "s" }), | ||||
| 					["<C-h>"] = cmp.mapping(function() | ||||
| 						if luasnip.locally_jumpable(-1) then | ||||
| 							luasnip.jump(-1) | ||||
| 						end | ||||
| 					end, { "i", "s" }), | ||||
| 
 | ||||
| 					-- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see: | ||||
| 					--    https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps | ||||
| 				}), | ||||
| 				sources = { | ||||
| 					{ | ||||
| 						name = "lazydev", | ||||
| 						-- set group index to 0 to skip loading LuaLS completions as lazydev recommends it | ||||
| 						group_index = 0, | ||||
| 					}, | ||||
| 					{ name = "nvim_lsp" }, | ||||
| 					{ name = "luasnip" }, | ||||
| 					{ name = "path" }, | ||||
| 				}, | ||||
| 			}) | ||||
| 		end, | ||||
| 	}, | ||||
| 
 | ||||
| 	{ -- You can easily change to a different colorscheme. | ||||
| 		-- Change the name of the colorscheme plugin below, and then | ||||
| 		-- 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`. | ||||
| 		"folke/tokyonight.nvim", | ||||
| 		priority = 1000, -- Make sure to load this before all the other start plugins. | ||||
| 		init = function() | ||||
| 			-- Load the colorscheme here. | ||||
| 			-- Like many other themes, this one has different styles, and you could load | ||||
| 			-- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'. | ||||
| 			vim.cmd.colorscheme("tokyonight-night") | ||||
| 
 | ||||
| 			-- You can configure highlights by doing something like: | ||||
| 			vim.cmd.hi("Comment gui=none") | ||||
| 		end, | ||||
| 	}, | ||||
| 
 | ||||
| 	-- Highlight todo, notes, etc in comments | ||||
| 	{ | ||||
| 		"folke/todo-comments.nvim", | ||||
| 		event = "VimEnter", | ||||
| 		dependencies = { "nvim-lua/plenary.nvim" }, | ||||
| 		opts = { signs = false }, | ||||
| 	}, | ||||
| 
 | ||||
| 	{ -- Collection of various small independent plugins/modules | ||||
| 		"echasnovski/mini.nvim", | ||||
| 		config = function() | ||||
| 			-- Better Around/Inside textobjects | ||||
| 			-- | ||||
| 			-- Examples: | ||||
| 			--  - va)  - [V]isually select [A]round [)]paren | ||||
| 			--  - yinq - [Y]ank [I]nside [N]ext [Q]uote | ||||
| 			--  - 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 | ||||
| 			local statusline = require("mini.statusline") | ||||
| 			-- set use_icons to true if you have a Nerd Font | ||||
| 			statusline.setup({ use_icons = vim.g.have_nerd_font }) | ||||
| 
 | ||||
| 			-- You can configure sections in the statusline by overriding their | ||||
| 			-- default behavior. For example, here we set the section for | ||||
| 			-- cursor location to LINE:COLUMN | ||||
| 			---@diagnostic disable-next-line: duplicate-set-field | ||||
| 			statusline.section_location = function() | ||||
| 				return "%2l:%-2v" | ||||
| 			end | ||||
| 
 | ||||
| 			-- ... and there is more! | ||||
| 			--  Check out: https://github.com/echasnovski/mini.nvim | ||||
| 		end, | ||||
| 	}, | ||||
| 	{ -- 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", | ||||
| 			}, | ||||
| 			-- Autoinstall languages that are not installed | ||||
| 			auto_install = true, | ||||
| 			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" } }, | ||||
| 		}, | ||||
| 		-- 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 | ||||
| 	-- 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 recommend 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. | ||||
| 	--    For additional information, see `:help lazy.nvim-lazy.nvim-structuring-your-plugins` | ||||
| 	-- { import = 'custom.plugins' }, | ||||
| }, { | ||||
| 	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 = "💤 ", | ||||
| 		}, | ||||
| 	}, | ||||
| }) | ||||
|  | @ -1,47 +0,0 @@ | |||
| local lspconfig = require('lspconfig') | ||||
| local lastRootPath = nil | ||||
| local gomodpath = vim.trim(vim.fn.system("go env GOPATH")) .. "/pkg/mod" | ||||
| 
 | ||||
| lspconfig.gopls.setup({ | ||||
|   root_dir = function(fname) | ||||
|     local fullpath = vim.fn.expand(fname, ":p") | ||||
|     if string.find(fullpath, gomodpath) and lastRootPath ~= nil then | ||||
|         return lastRootPath | ||||
|     end | ||||
|     local root = lspconfig.util.root_pattern("go.mod", ".git")(fname) | ||||
|     if root ~= nil then | ||||
|         lastRootPath = root | ||||
|     end | ||||
|     return root | ||||
|   end, | ||||
| }) | ||||
| 
 | ||||
| lspconfig.templ.setup{ | ||||
|   on_attach = on_attach, | ||||
|   capabilities = capabilities, | ||||
| } | ||||
| 
 | ||||
| lspconfig.tailwindcss.setup({ | ||||
|   on_attach = on_attach, | ||||
|   capabilities = capabilities, | ||||
|   filetypes = { "templ", "astro", "javascript", "typescript", "react" }, | ||||
|   init_options = { userLanguages = { templ = "html" } }, | ||||
| }) | ||||
| 
 | ||||
| lspconfig.html.setup({ | ||||
|   on_attach = on_attach, | ||||
|   capabilities = capabilities, | ||||
|   filetypes = { "html", "templ" }, | ||||
| }) | ||||
| 
 | ||||
| lspconfig.htmx.setup({ | ||||
|   on_attach = on_attach, | ||||
|   capabilities = capabilities, | ||||
|   filetypes = { "html", "templ" }, | ||||
| }) | ||||
| 
 | ||||
| lspconfig.unocss.setup{ | ||||
|   on_attach = on_attach, | ||||
|   capabilities = capabilities, | ||||
|   filetypes = { "html", "javascriptreact", "rescript", "typescriptreact", "vue", "svelte", "templ"} | ||||
| } | ||||
|  | @ -1,66 +0,0 @@ | |||
| local modes = { | ||||
|   ["n"] = "NORMAL", | ||||
|   ["no"] = "NORMAL", | ||||
|   ["v"] = "VISUAL", | ||||
|   ["V"] = "VISUAL LINE", | ||||
|   ["s"] = "SELECT", | ||||
|   ["S"] = "SELECT LINE", | ||||
|   ["i"] = "INSERT", | ||||
|   ["ic"] = "INSERT", | ||||
|   ["R"] = "REPLACE", | ||||
|   ["Rv"] = "VISUAL REPLACE", | ||||
|   ["c"] = "COMMAND", | ||||
|   ["cv"] = "VIM EX", | ||||
|   ["ce"] = "EX", | ||||
|   ["r"] = "PROMPT", | ||||
|   ["rm"] = "MOAR", | ||||
|   ["r?"] = "CONFIRM", | ||||
|   ["!"] = "SHELL", | ||||
|   ["t"] = "TERMINAL", | ||||
| } | ||||
| 
 | ||||
| local function mode() | ||||
|   local current_mode = vim.api.nvim_get_mode().mode | ||||
|   return string.format(" %s", modes[current_mode]):upper() | ||||
| end | ||||
| 
 | ||||
| require('lualine').setup { | ||||
|   options = { | ||||
|     icons_enabled = true, | ||||
|     theme = 'onedark', | ||||
|     component_separators = { left = '/', right = '|'}, | ||||
|     section_separators = { left = '', right = ''}, | ||||
|     disabled_filetypes = { | ||||
|       statusline = {}, | ||||
|       winbar = {}, | ||||
|     }, | ||||
|     ignore_focus = {}, | ||||
|     always_divide_middle = true, | ||||
|     globalstatus = false, | ||||
|     refresh = { | ||||
|       statusline = 1000, | ||||
|       tabline = 1000, | ||||
|       winbar = 1000, | ||||
|     } | ||||
|   }, | ||||
|   sections = { | ||||
|     lualine_a = { mode,  }, | ||||
|     lualine_b = {'branch', 'diff', 'diagnostics'}, | ||||
|     lualine_c = {'filename'}, | ||||
|     lualine_x = {'encoding', 'fileformat', 'filetype'}, | ||||
|     lualine_y = {'progress'}, | ||||
|     lualine_z = {'location'} | ||||
|   }, | ||||
|   inactive_sections = { | ||||
|     lualine_a = {}, | ||||
|     lualine_b = {}, | ||||
|     lualine_c = {'filename'}, | ||||
|     lualine_x = {'location'}, | ||||
|     lualine_y = {}, | ||||
|     lualine_z = {} | ||||
|   }, | ||||
|   tabline = {}, | ||||
|   winbar = {}, | ||||
|   inactive_winbar = {}, | ||||
|   extensions = {} | ||||
| } | ||||
|  | @ -1,24 +0,0 @@ | |||
| local function my_on_attach(bufnr) | ||||
|   local api = require "nvim-tree.api" | ||||
| 
 | ||||
|   local function opts(desc) | ||||
|     return { desc = "nvim-tree: " .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true } | ||||
|   end | ||||
| 
 | ||||
|   -- default mappings | ||||
|   api.config.mappings.default_on_attach(bufnr) | ||||
| 
 | ||||
|   -- custom mappings | ||||
|   vim.keymap.set('n', '<C-t>', api.tree.change_root_to_parent,        opts('Up')) | ||||
|   vim.keymap.set('n', '?',     api.tree.toggle_help,                  opts('Help')) | ||||
| end | ||||
| 
 | ||||
| 
 | ||||
| require("nvim-tree").setup { | ||||
|   on_attach = my_on_attach, | ||||
|     actions = { | ||||
|     open_file = { | ||||
|       quit_on_open = true, | ||||
|     }, | ||||
|   }, | ||||
| } | ||||
|  | @ -1,33 +0,0 @@ | |||
| vim.g.mapleader = " " | ||||
| 
 | ||||
| vim.keymap.set('n', '<leader>t', '<cmd>NvimTreeOpen<CR>') | ||||
| vim.keymap.set('n', '<leader>qt', '<cmd>NvimTreeToggle<CR>') | ||||
| 
 | ||||
| vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv") | ||||
| vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv") | ||||
| 
 | ||||
| vim.keymap.set("n", "n", "nzzzv") | ||||
| vim.keymap.set("n", "N", "Nzzzv") | ||||
| 
 | ||||
| vim.keymap.set("n", "<leader>y", "\"+y") | ||||
| vim.keymap.set("v", "<leader>y", "\"+y") | ||||
| vim.keymap.set("n", "<leader>Y", "\"+Y") | ||||
| 
 | ||||
| vim.keymap.set("n", "<leader>u", vim.cmd.UndotreeToggle) | ||||
| 
 | ||||
| vim.keymap.set("n", "ö", "$") | ||||
| vim.keymap.set("v", "ö", "$") | ||||
| 
 | ||||
| vim.keymap.set({ 'n', 'v' }, '<Space>', '<Nop>', { silent = true }) | ||||
| 
 | ||||
| -- Remap for dealing with word wrap | ||||
| vim.keymap.set('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) | ||||
| vim.keymap.set('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) | ||||
| 
 | ||||
| -- Diagnostic keymaps | ||||
| vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' }) | ||||
| vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' }) | ||||
| vim.keymap.set('n', '<leader>e', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' }) | ||||
| vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostics list' }) | ||||
| 
 | ||||
| vim.keymap.set('n', '<leader>F', ":Format<CR>") | ||||
|  | @ -1,52 +0,0 @@ | |||
| vim.opt.nu = true | ||||
| vim.opt.relativenumber = true | ||||
| 
 | ||||
| vim.opt.smartindent = true | ||||
| 
 | ||||
| -- set termguicolors to enable highlight groups | ||||
| vim.opt.termguicolors = true | ||||
| vim.wo.wrap = false | ||||
| vim.opt.tabstop = 2 | ||||
| vim.opt.shiftwidth = 2 | ||||
| vim.opt.softtabstop = 2 | ||||
| 
 | ||||
| --scroll | ||||
| vim.opt.scrolloff = 8 | ||||
| 
 | ||||
| vim.opt.updatetime = 50 | ||||
| 
 | ||||
| -- Set highlight on search | ||||
| vim.o.hlsearch = false | ||||
| 
 | ||||
| -- Make line numbers default | ||||
| vim.wo.number = true | ||||
| 
 | ||||
| -- Enable mouse mode | ||||
| vim.o.mouse = 'a' | ||||
| 
 | ||||
| -- Enable break indent | ||||
| vim.o.breakindent = true | ||||
| 
 | ||||
| -- Save undo history | ||||
| vim.o.undofile = true | ||||
| 
 | ||||
| -- Case-insensitive searching UNLESS \C or capital in search | ||||
| vim.o.ignorecase = true | ||||
| vim.o.smartcase = true | ||||
| 
 | ||||
| -- Keep signcolumn on by default | ||||
| vim.wo.signcolumn = 'yes' | ||||
| 
 | ||||
| -- Decrease update time | ||||
| vim.o.updatetime = 250 | ||||
| vim.o.timeoutlen = 300 | ||||
| 
 | ||||
| -- Set completeopt to have a better completion experience | ||||
| vim.o.completeopt = 'menuone,noselect' | ||||
| 
 | ||||
| -- NOTE: You should make sure your terminal supports this | ||||
| vim.o.termguicolors = true | ||||
| 
 | ||||
| vim.o.errorbells = false | ||||
| vim.o.visualbell = true | ||||
| vim.o.timeoutlen = 500 | ||||
|  | @ -0,0 +1,37 @@ | |||
| local function my_on_attach(bufnr) | ||||
| 	local api = require("nvim-tree.api") | ||||
| 
 | ||||
| 	local function opts(desc) | ||||
| 		return { desc = "nvim-tree: " .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true } | ||||
| 	end | ||||
| 
 | ||||
| 	-- default mappings | ||||
| 	api.config.mappings.default_on_attach(bufnr) | ||||
| 
 | ||||
| 	-- custom mappings | ||||
| 	vim.keymap.set("n", "<C-t>", api.tree.change_root_to_parent, opts("Up")) | ||||
| 	vim.keymap.set("n", "?", api.tree.toggle_help, opts("Help")) | ||||
| 	vim.keymap.set("n", "<leader>t", "<cmd>NvimTreeOpen<CR>") | ||||
| end | ||||
| 
 | ||||
| -- pass to setup along with your other options | ||||
| require("nvim-tree").setup({ | ||||
| 	on_attach = my_on_attach, | ||||
| 	actions = { | ||||
| 		open_file = { | ||||
| 			quit_on_open = true, | ||||
| 		}, | ||||
| 	}, | ||||
| 	sort = { | ||||
| 		sorter = "case_sensitive", | ||||
| 	}, | ||||
| 	view = { | ||||
| 		width = 30, | ||||
| 	}, | ||||
| 	renderer = { | ||||
| 		group_empty = true, | ||||
| 	}, | ||||
| 	filters = { | ||||
| 		dotfiles = false, | ||||
| 	}, | ||||
| }) | ||||
|  | @ -1,12 +0,0 @@ | |||
| if has("persistent_undo") | ||||
|    let target_path = expand('~/.undodir') | ||||
| 
 | ||||
|     " create the directory and any parent directories | ||||
|     " if the location does not exist. | ||||
|     if !isdirectory(target_path) | ||||
|         call mkdir(target_path, "p", 0700) | ||||
|     endif | ||||
| 
 | ||||
|     let &undodir=target_path | ||||
|     set undofile | ||||
| endif | ||||
		Loading…
	
		Reference in New Issue