Compare commits
	
		
			No commits in common. "3ffd03cba9029a7976ad1d316e0e09961a7f8f1d" and "6f5951689e8c9bafa235a9f2c502172f4dcc574b" have entirely different histories.
		
	
	
		
			3ffd03cba9
			...
			6f5951689e
		
	
		|  | @ -1,39 +1,39 @@ | ||||||
| { | { | ||||||
|   "LuaSnip": { "branch": "master", "commit": "0f7bbce41ea152a94d12aea286f2ce98e63c0f58" }, |   "Comment.nvim": { "branch": "master", "commit": "0236521ea582747b58869cb72f70ccfa967d2e89" }, | ||||||
|   "autoclose.nvim": { "branch": "main", "commit": "b2077aa2c83df7ebc19b2a20a3a0654b24ae9c8f" }, |   "LuaSnip": { "branch": "master", "commit": "2b6860d15aaab01d3fb90859c0ba97f20ad7bc5f" }, | ||||||
|  |   "autoclose.nvim": { "branch": "main", "commit": "dc42806540dcf448ecb2bad6b67204410cfbe629" }, | ||||||
|  |   "catppuccin": { "branch": "main", "commit": "5215ea59df6d0a7e27da9a5cd1165e06d1b04cbe" }, | ||||||
|   "cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" }, |   "cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" }, | ||||||
|   "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, |   "cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" }, | ||||||
|   "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, |   "coc.nvim": { "branch": "release", "commit": "f0ce9ae23d6ce9d0cbabe73bdb738e45accc6f08" }, | ||||||
|   "conform.nvim": { "branch": "master", "commit": "f1125f8eace158255cf55772ce039aaf178a6b42" }, |   "eslint.nvim": { "branch": "main", "commit": "158f2289907d377018752fcfe0d61b746dc11767" }, | ||||||
|   "fidget.nvim": { "branch": "main", "commit": "e2a175c2abe2d4f65357da1c98c59a5cfb2b543f" }, |   "fidget.nvim": { "branch": "main", "commit": "ef99df04a1c53a453602421bc0f756997edc8289" }, | ||||||
|   "gitsigns.nvim": { "branch": "main", "commit": "ac5aba6dce8c06ea22bea2c9016f51a2dbf90dc7" }, |   "friendly-snippets": { "branch": "main", "commit": "e11b09bf10706bb74e16e4c3d11b2274d62e687f" }, | ||||||
|   "lazy.nvim": { "branch": "main", "commit": "56ead98e05bb37a4ec28930a54d836d033cf00f2" }, |   "gitsigns.nvim": { "branch": "main", "commit": "e31d2149d9f3fb056bfd5b3416b2e818be10aabe" }, | ||||||
|   "lazydev.nvim": { "branch": "main", "commit": "d5800897d9180cea800023f2429bce0a94ed6064" }, |   "harpoon": { "branch": "harpoon2", "commit": "0378a6c428a0bed6a2781d459d7943843f374bce" }, | ||||||
|   "lua-async-await": { "branch": "main", "commit": "652d94df34e97abe2d4a689edbc4270e7ead1a98" }, |   "indent-blankline.nvim": { "branch": "master", "commit": "d98f537c3492e87b6dc6c2e3f66ac517528f406f" }, | ||||||
|   "luvit-meta": { "branch": "main", "commit": "57d464c4acb5c2e66bd4145060f5dc9e96a7bbb7" }, |   "lazy.nvim": { "branch": "main", "commit": "0fc34a0cf5f5f6f998a0897119a7d846b47eaa9d" }, | ||||||
|   "mason-lspconfig.nvim": { "branch": "main", "commit": "43894adcf10bb1190c2184bd7c1750e8ea2b3dce" }, |   "lualine.nvim": { "branch": "master", "commit": "0a5a66803c7407767b799067986b4dc3036e1983" }, | ||||||
|   "mason-tool-installer.nvim": { "branch": "main", "commit": "c5e07b8ff54187716334d585db34282e46fa2932" }, |   "mason-lspconfig.nvim": { "branch": "main", "commit": "a4caa0d083aab56f6cd5acf2d42331b74614a585" }, | ||||||
|   "mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" }, |   "mason.nvim": { "branch": "main", "commit": "0950b15060067f752fde13a779a994f59516ce3d" }, | ||||||
|   "mini.nvim": { "branch": "main", "commit": "6714e738555b1cfbef646a23af29aa113f91f4fe" }, |   "neodev.nvim": { "branch": "main", "commit": "02893eeb9d6e8503817bd52385e111cba9a90500" }, | ||||||
|   "nui.nvim": { "branch": "main", "commit": "b58e2bfda5cea347c9d58b7f11cf3012c7b3953f" }, |   "null-ls.nvim": { "branch": "main", "commit": "0010ea927ab7c09ef0ce9bf28c2b573fc302f5a7" }, | ||||||
|   "nvim-cmp": { "branch": "main", "commit": "40a03dc225383c4f6256596c2cdf27e03b8119b5" }, |   "nvim-cmp": { "branch": "main", "commit": "5260e5e8ecadaf13e6b82cf867a909f54e15fd07" }, | ||||||
|   "nvim-dap": { "branch": "master", "commit": "cc92b054720a96170eca6bd9bdedd43d2b0a7a8a" }, |   "nvim-lspconfig": { "branch": "master", "commit": "d1ab6b6051976b04948e127b0f302a465b1394d6" }, | ||||||
|   "nvim-java": { "branch": "main", "commit": "905013eb83c58bda992724b3ecbe20f60b58513f" }, |   "nvim-tree.lua": { "branch": "master", "commit": "2bc725a3ebc23f0172fb0ab4d1134b81bcc13812" }, | ||||||
|   "nvim-java-core": { "branch": "main", "commit": "5b03dca22fee76524a89e1c2dc1d73a9f0b1a3bb" }, |   "nvim-treesitter": { "branch": "master", "commit": "49e4e2b4b62360677568c47b6467f31c809b391c" }, | ||||||
|   "nvim-java-dap": { "branch": "main", "commit": "55f239532f7a3789d21ea68d1e795abc77484974" }, |   "nvim-treesitter-textobjects": { "branch": "master", "commit": "fd41b7ccc5490a3a99c734d1ee418b68d06c48a9" }, | ||||||
|   "nvim-java-refactor": { "branch": "main", "commit": "ea1420fed5463c9cc976c2b4175f434b3646f0f7" }, |   "nvim-web-devicons": { "branch": "master", "commit": "b77921fdc44833c994fdb389d658ccbce5490c16" }, | ||||||
|   "nvim-java-test": { "branch": "main", "commit": "7f0f40e9c5b7eab5096d8bec6ac04251c6e81468" }, |   "plenary.nvim": { "branch": "master", "commit": "a3e3bc82a3f95c5ed0d7201546d5d2c19b20d683" }, | ||||||
|   "nvim-lspconfig": { "branch": "master", "commit": "f012c1b176f0e3c71f40eb309bdec0316689462e" }, |   "supermaven-nvim": { "branch": "main", "commit": "ef3bd1a6b6f722857f2f88d929dd4ac875655611" }, | ||||||
|   "nvim-tree.lua": { "branch": "master", "commit": "c7639482a1598f4756798df1b2d72f79fe5bb34f" }, |   "telescope-fzf-native.nvim": { "branch": "main", "commit": "9ef21b2e6bb6ebeaf349a0781745549bbb870d27" }, | ||||||
|   "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" }, |   "telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }, | ||||||
|   "todo-comments.nvim": { "branch": "main", "commit": "ae0a2afb47cf7395dc400e5dc4e05274bf4fb9e0" }, |   "templ.vim": { "branch": "main", "commit": "5cc48b93a4538adca0003c4bc27af844bb16ba24" }, | ||||||
|   "tokyonight.nvim": { "branch": "main", "commit": "c2725eb6d086c8c9624456d734bd365194660017" }, |   "undotree": { "branch": "master", "commit": "56c684a805fe948936cda0d1b19505b84ad7e065" }, | ||||||
|   "vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" }, |   "vim-devicons": { "branch": "master", "commit": "71f239af28b7214eebb60d4ea5bd040291fb7e33" }, | ||||||
|   "which-key.nvim": { "branch": "main", "commit": "68e37e12913a66b60073906f5d3f14dee0de19f2" } |   "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" } | ||||||
| } | } | ||||||
|  | @ -1,110 +0,0 @@ | ||||||
| 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') |  | ||||||
|  | @ -0,0 +1,49 @@ | ||||||
|  | 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" | ||||||
|  | @ -0,0 +1,50 @@ | ||||||
|  | -- [[ 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" }, | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  | @ -0,0 +1,186 @@ | ||||||
|  | -- 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) | ||||||
|  | @ -0,0 +1,24 @@ | ||||||
|  | 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` | ||||||
|  |   }, | ||||||
|  | }) | ||||||
|  | @ -0,0 +1,17 @@ | ||||||
|  | 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,5 +1,12 @@ | ||||||
| require("lorenz.basic") | require("lorenz.remap") | ||||||
| require("lorenz.lazy") | require("lorenz.set") | ||||||
| require("lorenz.tree") | require("lorenz.kickstart") | ||||||
|  | require("lorenz.nvim-tree") | ||||||
|  | require("lorenz.lsp") | ||||||
| require("lorenz.autoclose") | require("lorenz.autoclose") | ||||||
| require("lorenz.kickstarter") | require("lorenz.cmp") | ||||||
|  | require("lorenz.catppuccin") | ||||||
|  | require("lorenz.harpoon") | ||||||
|  | require("lorenz.lualine") | ||||||
|  | require("lorenz.coc") | ||||||
|  | require("lorenz.eslint") | ||||||
|  |  | ||||||
|  | @ -0,0 +1,517 @@ | ||||||
|  | -- 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, | ||||||
|  | } | ||||||
|  | @ -1,4 +0,0 @@ | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| -- The line beneath this is called `modeline`. See `:help modeline` |  | ||||||
| -- vim: ts=2 sts=2 sw=2 et |  | ||||||
|  | @ -1,735 +0,0 @@ | ||||||
| -- [[ 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 = "💤 ", |  | ||||||
| 		}, |  | ||||||
| 	}, |  | ||||||
| }) |  | ||||||
|  | @ -0,0 +1,47 @@ | ||||||
|  | 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"} | ||||||
|  | } | ||||||
|  | @ -0,0 +1,66 @@ | ||||||
|  | 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 = {} | ||||||
|  | } | ||||||
|  | @ -0,0 +1,24 @@ | ||||||
|  | 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, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  | @ -0,0 +1,33 @@ | ||||||
|  | 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>") | ||||||
|  | @ -0,0 +1,52 @@ | ||||||
|  | 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 | ||||||
|  | @ -1,37 +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")) |  | ||||||
| 	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, |  | ||||||
| 	}, |  | ||||||
| }) |  | ||||||
|  | @ -0,0 +1,12 @@ | ||||||
|  | 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