Repository: bcampolo/nvim-starter-kit Branch: main Commit: 67f971123a13 Files: 32 Total size: 48.0 KB Directory structure: gitextract_tuj3rfx7/ ├── .config/ │ └── nvim/ │ ├── ftplugin/ │ │ └── markdown.lua │ ├── init.lua │ ├── lazy-lock.json │ └── lua/ │ ├── core/ │ │ ├── keymaps.lua │ │ └── options.lua │ └── plugins/ │ ├── barbecue-nvim.lua │ ├── bigfile-nvim.lua │ ├── colorscheme.lua │ ├── git-blame-nvim.lua │ ├── harpoon.lua │ ├── indent-blankline-nvim.lua │ ├── lualine-nvim.lua │ ├── nvim-autopairs.lua │ ├── nvim-cmp.lua │ ├── nvim-dap-ui.lua │ ├── nvim-dap-virtual-text.lua │ ├── nvim-lspconfig.lua │ ├── nvim-surround.lua │ ├── nvim-tree.lua │ ├── nvim-treesitter.lua │ ├── quickfixdd.lua │ ├── telescope-nvim.lua │ ├── vim-commentary.lua │ ├── vim-maximizer.lua │ ├── vim-rest-console.lua │ └── vim-tmux-navigator.lua ├── .github/ │ └── workflows/ │ └── stale.yml ├── .gitignore ├── .mime.types ├── .tmux.conf ├── LICENSE └── README.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .config/nvim/ftplugin/markdown.lua ================================================ -- Markdown specific settings vim.opt.wrap = true -- Wrap text vim.opt.breakindent = true -- Match indent on line break vim.opt.linebreak = true -- Line break on whole words -- Allow j/k when navigating wrapped lines vim.keymap.set("n", "j", "gj") vim.keymap.set("n", "k", "gk") -- Spell check vim.opt.spelllang = 'en_us' vim.opt.spell = true ================================================ FILE: .config/nvim/init.lua ================================================ -- Bootstrap lazy 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) -- This has to be set before initializing lazy vim.g.mapleader = " " -- Initialize lazy with dynamic loading of anything in the plugins directory require("lazy").setup("plugins", { change_detection = { enabled = true, -- automatically check for config file changes and reload the ui notify = false, -- turn off notifications whenever plugin changes are made }, }) -- These modules are not loaded by lazy require("core.options") require("core.keymaps") ================================================ FILE: .config/nvim/lazy-lock.json ================================================ { "LuaSnip": { "branch": "master", "commit": "1f4ad8bb72bdeb60975e98652636b991a9b7475d" }, "barbecue": { "branch": "main", "commit": "cd7e7da622d68136e13721865b4d919efd6325ed" }, "bigfile.nvim": { "branch": "main", "commit": "33eb067e3d7029ac77e081cfe7c45361887a311a" }, "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, "cmp-cmdline": { "branch": "main", "commit": "8ee981b4a91f536f52add291594e89fb6645e451" }, "cmp-nvim-lsp": { "branch": "main", "commit": "44b16d11215dce86f253ce0c30949813c0a90765" }, "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, "cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" }, "fidget.nvim": { "branch": "main", "commit": "b7027a059710fe1ae5726ef7725c2a6020a3d968" }, "friendly-snippets": { "branch": "main", "commit": "43727c2ff84240e55d4069ec3e6158d74cb534b6" }, "git-blame.nvim": { "branch": "master", "commit": "f07e913b7143f19edd6787229f2d51759b478600" }, "harpoon": { "branch": "master", "commit": "867e212ac153e793f95b316d1731f3ca1894625e" }, "indent-blankline.nvim": { "branch": "master", "commit": "29be0919b91fb59eca9e90690d76014233392bef" }, "kanagawa.nvim": { "branch": "master", "commit": "c19b9023842697ec92caf72cd3599f7dd7be4456" }, "lazy.nvim": { "branch": "main", "commit": "96584866b9c5e998cbae300594d0ccfd0c464627" }, "lsp-progress.nvim": { "branch": "main", "commit": "670cd71586f3464f2e341627ea434498fa0de7d2" }, "lualine.nvim": { "branch": "master", "commit": "2248ef254d0a1488a72041cfb45ca9caada6d994" }, "mason-lspconfig.nvim": { "branch": "main", "commit": "ab640b38ca9fa50d25d2d249b6606b9456b628d5" }, "mason.nvim": { "branch": "main", "commit": "41e75af1f578e55ba050c863587cffde3556ffa6" }, "neodev.nvim": { "branch": "main", "commit": "b2881eeb395d2b268de5fe9b5e201a8f1816beb8" }, "nvim-autopairs": { "branch": "master", "commit": "0f04d78619cce9a5af4f355968040f7d675854a1" }, "nvim-cmp": { "branch": "main", "commit": "0b751f6beef40fd47375eaf53d3057e0bfa317e4" }, "nvim-dap": { "branch": "master", "commit": "e154fdb6d70b3765d71f296e718b29d8b7026a63" }, "nvim-dap-ui": { "branch": "master", "commit": "34160a7ce6072ef332f350ae1d4a6a501daf0159" }, "nvim-dap-virtual-text": { "branch": "master", "commit": "57f1dbd0458dd84a286b27768c142e1567f3ce3b" }, "nvim-lspconfig": { "branch": "master", "commit": "48347089666d5b77d054088aa72e4e0b58026e6e" }, "nvim-navic": { "branch": "master", "commit": "8649f694d3e76ee10c19255dece6411c29206a54" }, "nvim-surround": { "branch": "main", "commit": "703ec63aa798e5e07d309b35e42def34bebe0174" }, "nvim-tree.lua": { "branch": "master", "commit": "80cfeadf179d5cba76f0f502c71dbcff1b515cd8" }, "nvim-treesitter": { "branch": "master", "commit": "8f16c39f5b439bd9540336c4d5da705d180e34b9" }, "nvim-treesitter-textobjects": { "branch": "master", "commit": "dbcd9388e3b119a87c785e10a00d62876077d23d" }, "nvim-web-devicons": { "branch": "master", "commit": "3523d6e6d40ab11fd66c1b2732b3d6b60affa951" }, "plenary.nvim": { "branch": "master", "commit": "50012918b2fc8357b87cff2a7f7f0446e47da174" }, "quickfixdd": { "branch": "master", "commit": "cc1adb7e7e9f4827cd655f6b1c05fadedaa87f45" }, "telescope-dap.nvim": { "branch": "master", "commit": "4e2d5efb92062f0b865fe59b200b5ed7793833bf" }, "telescope-fzf-native.nvim": { "branch": "main", "commit": "6c921ca12321edaa773e324ef64ea301a1d0da62" }, "telescope.nvim": { "branch": "master", "commit": "0c12735d5aff6a48ffd8111bf144dc2ff44e5975" }, "vim-commentary": { "branch": "master", "commit": "e87cd90dc09c2a203e13af9704bd0ef79303d755" }, "vim-maximizer": { "branch": "master", "commit": "2e54952fe91e140a2e69f35f22131219fcd9c5f1" }, "vim-rest-console": { "branch": "master", "commit": "7b407f47185468d1b57a8bd71cdd66c9a99359b2" }, "vim-tmux-navigator": { "branch": "master", "commit": "7db70e08ea03b3e4d91f63713d76134512e28d7e" } } ================================================ FILE: .config/nvim/lua/core/keymaps.lua ================================================ -- Set leader key to space vim.g.mapleader = " " local keymap = vim.keymap -- General keymaps keymap.set("n", "wq", ":wq") -- save and quit keymap.set("n", "qq", ":q!") -- quit without saving keymap.set("n", "ww", ":w") -- save keymap.set("n", "gx", ":!open ") -- open URL under cursor -- Split window management keymap.set("n", "sv", "v") -- split window vertically keymap.set("n", "sh", "s") -- split window horizontally keymap.set("n", "se", "=") -- make split windows equal width keymap.set("n", "sx", ":close") -- close split window keymap.set("n", "sj", "-") -- make split window height shorter keymap.set("n", "sk", "+") -- make split windows height taller keymap.set("n", "sl", ">5") -- make split windows width bigger keymap.set("n", "sh", "<5") -- make split windows width smaller -- Tab management keymap.set("n", "to", ":tabnew") -- open a new tab keymap.set("n", "tx", ":tabclose") -- close a tab keymap.set("n", "tn", ":tabn") -- next tab keymap.set("n", "tp", ":tabp") -- previous tab -- Diff keymaps keymap.set("n", "cc", ":diffput") -- put diff from current to other during diff keymap.set("n", "cj", ":diffget 1") -- get diff from left (local) during merge keymap.set("n", "ck", ":diffget 3") -- get diff from right (remote) during merge keymap.set("n", "cn", "]c") -- next diff hunk keymap.set("n", "cp", "[c") -- previous diff hunk -- Quickfix keymaps keymap.set("n", "qo", ":copen") -- open quickfix list keymap.set("n", "qf", ":cfirst") -- jump to first quickfix list item keymap.set("n", "qn", ":cnext") -- jump to next quickfix list item keymap.set("n", "qp", ":cprev") -- jump to prev quickfix list item keymap.set("n", "ql", ":clast") -- jump to last quickfix list item keymap.set("n", "qc", ":cclose") -- close quickfix list -- Vim-maximizer keymap.set("n", "sm", ":MaximizerToggle") -- toggle maximize tab -- Nvim-tree keymap.set("n", "ee", ":NvimTreeToggle") -- toggle file explorer keymap.set("n", "er", ":NvimTreeFocus") -- toggle focus to file explorer keymap.set("n", "ef", ":NvimTreeFindFile") -- find file in file explorer -- Telescope keymap.set('n', 'ff', require('telescope.builtin').find_files, {}) -- fuzzy find files in project keymap.set('n', 'fg', require('telescope.builtin').live_grep, {}) -- grep file contents in project keymap.set('n', 'fb', require('telescope.builtin').buffers, {}) -- fuzzy find open buffers keymap.set('n', 'fh', require('telescope.builtin').help_tags, {}) -- fuzzy find help tags keymap.set('n', 'fs', require('telescope.builtin').current_buffer_fuzzy_find, {}) -- fuzzy find in current file buffer keymap.set('n', 'fo', require('telescope.builtin').lsp_document_symbols, {}) -- fuzzy find LSP/class symbols keymap.set('n', 'fi', require('telescope.builtin').lsp_incoming_calls, {}) -- fuzzy find LSP/incoming calls -- keymap.set('n', 'fm', function() require('telescope.builtin').treesitter({default_text=":method:"}) end) -- fuzzy find methods in current class keymap.set('n', 'fm', function() require('telescope.builtin').treesitter({symbols={'function', 'method'}}) end) -- fuzzy find methods in current class keymap.set('n', 'ft', function() -- grep file contents in current nvim-tree node local success, node = pcall(function() return require('nvim-tree.lib').get_node_at_cursor() end) if not success or not node then return end; require('telescope.builtin').live_grep({search_dirs = {node.absolute_path}}) end) -- Git-blame keymap.set("n", "gb", ":GitBlameToggle") -- toggle git blame -- Harpoon keymap.set("n", "ha", require("harpoon.mark").add_file) keymap.set("n", "hh", require("harpoon.ui").toggle_quick_menu) keymap.set("n", "h1", function() require("harpoon.ui").nav_file(1) end) keymap.set("n", "h2", function() require("harpoon.ui").nav_file(2) end) keymap.set("n", "h3", function() require("harpoon.ui").nav_file(3) end) keymap.set("n", "h4", function() require("harpoon.ui").nav_file(4) end) keymap.set("n", "h5", function() require("harpoon.ui").nav_file(5) end) keymap.set("n", "h6", function() require("harpoon.ui").nav_file(6) end) keymap.set("n", "h7", function() require("harpoon.ui").nav_file(7) end) keymap.set("n", "h8", function() require("harpoon.ui").nav_file(8) end) keymap.set("n", "h9", function() require("harpoon.ui").nav_file(9) end) -- Vim REST Console keymap.set("n", "xr", ":call VrcQuery()") -- Run REST query -- LSP keymap.set('n', 'gg', 'lua vim.lsp.buf.hover()') keymap.set('n', 'gd', 'lua vim.lsp.buf.definition()') keymap.set('n', 'gD', 'lua vim.lsp.buf.declaration()') keymap.set('n', 'gi', 'lua vim.lsp.buf.implementation()') keymap.set('n', 'gt', 'lua vim.lsp.buf.type_definition()') keymap.set('n', 'gr', 'lua vim.lsp.buf.references()') keymap.set('n', 'gs', 'lua vim.lsp.buf.signature_help()') keymap.set('n', 'rr', 'lua vim.lsp.buf.rename()') keymap.set('n', 'gf', 'lua vim.lsp.buf.format({async = true})') keymap.set('v', 'gf', 'lua vim.lsp.buf.format({async = true})') keymap.set('n', 'ga', 'lua vim.lsp.buf.code_action()') keymap.set('n', 'gl', 'lua vim.diagnostic.open_float()') keymap.set('n', 'gp', 'lua vim.diagnostic.goto_prev()') keymap.set('n', 'gn', 'lua vim.diagnostic.goto_next()') keymap.set('n', 'tr', 'lua vim.lsp.buf.document_symbol()') keymap.set('i', '', 'lua vim.lsp.buf.completion()') -- Debugging keymap.set("n", "bb", "lua require'dap'.toggle_breakpoint()") keymap.set("n", "bc", "lua require'dap'.set_breakpoint(vim.fn.input('Breakpoint condition: '))") keymap.set("n", "bl", "lua require'dap'.set_breakpoint(nil, nil, vim.fn.input('Log point message: '))") keymap.set("n", 'br', "lua require'dap'.clear_breakpoints()") keymap.set("n", 'ba', 'Telescope dap list_breakpoints') keymap.set("n", "dc", "lua require'dap'.continue()") keymap.set("n", "dj", "lua require'dap'.step_over()") keymap.set("n", "dk", "lua require'dap'.step_into()") keymap.set("n", "do", "lua require'dap'.step_out()") keymap.set("n", 'dd', function() require('dap').disconnect(); require('dapui').close(); end) keymap.set("n", 'dt', function() require('dap').terminate(); require('dapui').close(); end) keymap.set("n", "dr", "lua require'dap'.repl.toggle()") keymap.set("n", "dl", "lua require'dap'.run_last()") keymap.set("n", 'di', function() require "dap.ui.widgets".hover() end) keymap.set("n", 'd?', function() local widgets = require "dap.ui.widgets"; widgets.centered_float(widgets.scopes) end) keymap.set("n", 'df', 'Telescope dap frames') keymap.set("n", 'dh', 'Telescope dap commands') keymap.set("n", 'de', function() require('telescope.builtin').diagnostics({default_text=":E:"}) end) ================================================ FILE: .config/nvim/lua/core/options.lua ================================================ local opt = vim.opt -- Session Management opt.sessionoptions="blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions" -- Line Numbers opt.relativenumber = true opt.number = true -- Tabs & Indentation opt.tabstop = 2 opt.shiftwidth = 2 opt.expandtab = true opt.autoindent = true vim.bo.softtabstop = 2 -- Line Wrapping opt.wrap = false -- Search Settings opt.ignorecase = true opt.smartcase = true -- Cursor Line opt.cursorline = true -- Appearance opt.termguicolors = true opt.background = "dark" opt.signcolumn = "yes" opt.showmode = false vim.diagnostic.config { float = { border = "rounded" }, -- add border to diagnostic popups } -- Backspace opt.backspace = "indent,eol,start" -- Clipboard opt.clipboard:append("unnamedplus") -- Split Windows opt.splitright = true opt.splitbelow = true -- Consider - as part of keyword opt.iskeyword:append("-") -- Disable the mouse while in nvim opt.mouse = "" -- Folding opt.foldlevel = 20 opt.foldmethod = "expr" opt.foldexpr = "nvim_treesitter#foldexpr()" -- Utilize Treesitter folds ================================================ FILE: .config/nvim/lua/plugins/barbecue-nvim.lua ================================================ -- Display LSP-based breadcrumbs return { -- https://github.com/utilyre/barbecue.nvim "utilyre/barbecue.nvim", name = "barbecue", version = "*", dependencies = { -- https://github.com/SmiteshP/nvim-navic "SmiteshP/nvim-navic", -- https://github.com/nvim-tree/nvim-web-devicons "nvim-tree/nvim-web-devicons", -- optional dependency }, opts = { -- configurations go here }, } ================================================ FILE: .config/nvim/lua/plugins/bigfile-nvim.lua ================================================ -- Improve performance of editing big files return { -- https://github.com/LunarVim/bigfile.nvim 'LunarVim/bigfile.nvim', event = 'BufReadPre', opts = { filesize = 2, -- size of the file in MiB, the plugin round file sizes to the closest MiB }, config = function (_, opts) require('bigfile').setup(opts) end } ================================================ FILE: .config/nvim/lua/plugins/colorscheme.lua ================================================ -- Theme/Colorscheme (uncomment section for whichever theme you prefer or use your own) -- Kanagawa Theme (Custom Palette) return { -- https://github.com/rebelot/kanagawa.nvim 'rebelot/kanagawa.nvim', -- You can replace this with your favorite colorscheme lazy = false, -- We want the colorscheme to load immediately when starting Neovim priority = 1000, -- Load the colorscheme before other non-lazy-loaded plugins opts = { -- Replace this with your scheme-specific settings or remove to use the defaults -- transparent = true, background = { -- light = "lotus", dark = "wave", -- "wave, dragon" }, colors = { palette = { -- Background colors sumiInk0 = "#161616", -- modified sumiInk1 = "#181818", -- modified sumiInk2 = "#1a1a1a", -- modified sumiInk3 = "#1F1F1F", -- modified sumiInk4 = "#2A2A2A", -- modified sumiInk5 = "#363636", -- modified sumiInk6 = "#545454", -- modified -- Popup and Floats waveBlue1 = "#322C47", -- modified waveBlue2 = "#4c4464", -- modified -- Diff and Git winterGreen = "#2B3328", winterYellow = "#49443C", winterRed = "#43242B", winterBlue = "#252535", autumnGreen = "#76A56A", -- modified autumnRed = "#C34043", autumnYellow = "#DCA561", -- Diag samuraiRed = "#E82424", roninYellow = "#FF9E3B", waveAqua1 = "#7E9CD8", -- modified dragonBlue = "#7FB4CA", -- modified -- Foreground and Comments oldWhite = "#C8C093", fujiWhite = "#F9E7C0", -- modified fujiGray = "#727169", oniViolet = "#BFA3E6", -- modified oniViolet2 = "#BCACDB", -- modified crystalBlue = "#8CABFF", -- modified springViolet1 = "#938AA9", springViolet2 = "#9CABCA", springBlue = "#7FC4EF", -- modified waveAqua2 = "#77BBDD", -- modified springGreen = "#98BB6C", boatYellow1 = "#938056", boatYellow2 = "#C0A36E", carpYellow = "#FFEE99", -- modified sakuraPink = "#D27E99", waveRed = "#E46876", peachRed = "#FF5D62", surimiOrange = "#FFAA44", -- modified katanaGray = "#717C7C", }, }, }, config = function(_, opts) require('kanagawa').setup(opts) -- Replace this with your favorite colorscheme vim.cmd("colorscheme kanagawa") -- Replace this with your favorite colorscheme -- Custom diff colors vim.cmd([[ autocmd VimEnter * hi DiffAdd guifg=#00FF00 guibg=#005500 autocmd VimEnter * hi DiffDelete guifg=#FF0000 guibg=#550000 autocmd VimEnter * hi DiffChange guifg=#CCCCCC guibg=#555555 autocmd VimEnter * hi DiffText guifg=#00FF00 guibg=#005500 ]]) -- Custom border colors vim.cmd([[ autocmd ColorScheme * hi NormalFloat guifg=#F9E7C0 guibg=#1F1F1F autocmd ColorScheme * hi FloatBorder guifg=#F9E7C0 guibg=#1F1F1F ]]) end } -- Kanagawa Theme (Original) -- return { -- -- https://github.com/rebelot/kanagawa.nvim -- 'rebelot/kanagawa.nvim', -- You can replace this with your favorite colorscheme -- lazy = false, -- We want the colorscheme to load immediately when starting Neovim -- priority = 1000, -- Load the colorscheme before other non-lazy-loaded plugins -- opts = { -- -- Replace this with your scheme-specific settings or remove to use the defaults -- -- transparent = true, -- background = { -- -- light = "lotus", -- dark = "wave", -- "wave, dragon" -- }, -- }, -- config = function(_, opts) -- require('kanagawa').setup(opts) -- Replace this with your favorite colorscheme -- vim.cmd("colorscheme kanagawa") -- Replace this with your favorite colorscheme -- end -- } -- Tokyo Night Theme -- return { -- -- https://github.com/folke/tokyonight.nvim -- 'folke/tokyonight.nvim', -- You can replace this with your favorite colorscheme -- lazy = false, -- We want the colorscheme to load immediately when starting Neovim -- priority = 1000, -- Load the colorscheme before other non-lazy-loaded plugins -- opts = { -- -- Replace this with your scheme-specific settings or remove to use the defaults -- -- transparent = true, -- style = "night", -- other variations "storm, night, moon, day" -- }, -- config = function(_, opts) -- require('tokyonight').setup(opts) -- Replace this with your favorite colorscheme -- vim.cmd("colorscheme tokyonight") -- Replace this with your favorite colorscheme -- end -- } -- Catppuccin Theme -- return { -- -- https://github.com/catppuccin/nvim -- 'catppuccin/nvim', -- name = "catppuccin", -- name is needed otherwise plugin shows up as "nvim" due to github URI -- lazy = false, -- We want the colorscheme to load immediately when starting Neovim -- priority = 1000, -- Load the colorscheme before other non-lazy-loaded plugins -- opts = { -- -- -- Replace this with your scheme-specific settings or remove to use the defaults -- -- transparent = true, -- flavour = "mocha", -- "latte, frappe, macchiato, mocha" -- }, -- config = function(_, opts) -- require('catppuccin').setup(opts) -- Replace this with your favorite colorscheme -- vim.cmd("colorscheme catppuccin") -- Replace this with your favorite colorscheme -- end -- } -- Sonokai Theme -- return { -- -- https://github.com/sainnhe/sonokai -- 'sainnhe/sonokai', -- lazy = false, -- We want the colorscheme to load immediately when starting Neovim -- priority = 1000, -- Load the colorscheme before other non-lazy-loaded plugins -- config = function(_, opts) -- vim.g.sonokai_style = "default" -- "default, atlantis, andromeda, shusia, maia, espresso" -- vim.cmd("colorscheme sonokai") -- Replace this with your favorite colorscheme -- end -- } -- One Nord Theme -- return { -- -- https://github.com/rmehri01/onenord.nvim -- 'rmehri01/onenord.nvim', -- lazy = false, -- We want the colorscheme to load immediately when starting Neovim -- priority = 1000, -- Load the colorscheme before other non-lazy-loaded plugins -- config = function(_, opts) -- vim.cmd("colorscheme onenord") -- Replace this with your favorite colorscheme -- end -- } ================================================ FILE: .config/nvim/lua/plugins/git-blame-nvim.lua ================================================ -- Git Blame return { -- https://github.com/f-person/git-blame.nvim 'f-person/git-blame.nvim', event = 'VeryLazy', opts = { enabled = false, -- disable by default, enabled only on keymap date_format = '%m/%d/%y %H:%M:%S', -- more concise date format } } ================================================ FILE: .config/nvim/lua/plugins/harpoon.lua ================================================ -- List of favorite files/marks per project return { -- https://github.com/ThePrimeagen/harpoon 'ThePrimeagen/harpoon', branch = 'master', event = 'VeryLazy', dependencies = { -- https://github.com/nvim-lua/plenary.nvim 'nvim-lua/plenary.nvim', }, opts = { menu = { width = 120 } }, } ================================================ FILE: .config/nvim/lua/plugins/indent-blankline-nvim.lua ================================================ -- Indentation guides return { -- https://github.com/lukas-reineke/indent-blankline.nvim "lukas-reineke/indent-blankline.nvim", event = 'VeryLazy', main = "ibl", opts = { enabled = true, indent = { char = '|', }, }, } ================================================ FILE: .config/nvim/lua/plugins/lualine-nvim.lua ================================================ -- Status line return { -- https://github.com/nvim-lualine/lualine.nvim 'nvim-lualine/lualine.nvim', dependencies = { -- https://github.com/nvim-tree/nvim-web-devicons 'nvim-tree/nvim-web-devicons', -- fancy icons -- https://github.com/linrongbin16/lsp-progress.nvim 'linrongbin16/lsp-progress.nvim', -- LSP loading progress }, opts = { options = { -- For more themes, see https://github.com/nvim-lualine/lualine.nvim/blob/master/THEMES.md theme = "codedark", -- "auto, tokyonight, catppuccin, codedark, nord" }, sections = { lualine_c = { { -- Customize the filename part of lualine to be parent/filename 'filename', file_status = true, -- Displays file status (readonly status, modified status) newfile_status = false, -- Display new file status (new file means no write after created) path = 4, -- 0: Just the filename -- 1: Relative path -- 2: Absolute path -- 3: Absolute path, with tilde as the home directory -- 4: Filename and parent dir, with tilde as the home directory symbols = { modified = '[+]', -- Text to show when the file is modified. readonly = '[-]', -- Text to show when the file is non-modifiable or readonly. } } } } } } ================================================ FILE: .config/nvim/lua/plugins/nvim-autopairs.lua ================================================ -- Auto-completion of bracket/paren/quote pairs return { -- https://github.com/windwp/nvim-autopairs 'windwp/nvim-autopairs', event = "InsertEnter", opts = { check_ts = true, -- enable treesitter ts_config = { lua = { "string" }, -- don't add pairs in lua string treesitter nodes javascript = { "template_string" }, -- don't add pairs in javascript template_string } } } ================================================ FILE: .config/nvim/lua/plugins/nvim-cmp.lua ================================================ -- Auto-completion / Snippets return { -- https://github.com/hrsh7th/nvim-cmp 'hrsh7th/nvim-cmp', event = 'InsertEnter', dependencies = { -- Snippet engine & associated nvim-cmp source -- https://github.com/L3MON4D3/LuaSnip 'L3MON4D3/LuaSnip', -- https://github.com/saadparwaiz1/cmp_luasnip 'saadparwaiz1/cmp_luasnip', -- LSP completion capabilities -- https://github.com/hrsh7th/cmp-nvim-lsp 'hrsh7th/cmp-nvim-lsp', -- Additional user-friendly snippets -- https://github.com/rafamadriz/friendly-snippets 'rafamadriz/friendly-snippets', -- https://github.com/hrsh7th/cmp-buffer 'hrsh7th/cmp-buffer', -- https://github.com/hrsh7th/cmp-path 'hrsh7th/cmp-path', -- https://github.com/hrsh7th/cmp-cmdline 'hrsh7th/cmp-cmdline', }, config = function() 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 { [''] = cmp.mapping.select_next_item(), -- next suggestion [''] = cmp.mapping.select_prev_item(), -- previous suggestion [''] = cmp.mapping.scroll_docs(-4), -- scroll backward [''] = cmp.mapping.scroll_docs(4), -- scroll forward [''] = cmp.mapping.complete {}, -- show completion suggestions [''] = cmp.mapping.confirm { behavior = cmp.ConfirmBehavior.Replace, select = true, }, -- Tab through suggestions or when a snippet is active, tab to the next argument [''] = 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' }), -- Tab backwards through suggestions or when a snippet is active, tab to the next argument [''] = 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 = cmp.config.sources({ { name = "nvim_lsp" }, -- lsp { name = "luasnip" }, -- snippets { name = "buffer" }, -- text within current buffer { name = "path" }, -- file system paths }), window = { -- Add borders to completions popups completion = cmp.config.window.bordered(), documentation = cmp.config.window.bordered(), }, }) end, } ================================================ FILE: .config/nvim/lua/plugins/nvim-dap-ui.lua ================================================ -- Debugging Support return { -- https://github.com/rcarriga/nvim-dap-ui 'rcarriga/nvim-dap-ui', event = 'VeryLazy', dependencies = { -- https://github.com/mfussenegger/nvim-dap 'mfussenegger/nvim-dap', -- https://github.com/nvim-neotest/nvim-nio 'nvim-neotest/nvim-nio', -- https://github.com/theHamsta/nvim-dap-virtual-text 'theHamsta/nvim-dap-virtual-text', -- inline variable text while debugging -- https://github.com/nvim-telescope/telescope-dap.nvim 'nvim-telescope/telescope-dap.nvim', -- telescope integration with dap }, opts = { controls = { element = "repl", enabled = false, icons = { disconnect = "", pause = "", play = "", run_last = "", step_back = "", step_into = "", step_out = "", step_over = "", terminate = "" } }, element_mappings = {}, expand_lines = true, floating = { border = "single", mappings = { close = { "q", "" } } }, force_buffers = true, icons = { collapsed = "", current_frame = "", expanded = "" }, layouts = { { elements = { { id = "scopes", size = 0.50 }, { id = "stacks", size = 0.30 }, { id = "watches", size = 0.10 }, { id = "breakpoints", size = 0.10 } }, size = 40, position = "left", -- Can be "left" or "right" }, { elements = { "repl", "console", }, size = 10, position = "bottom", -- Can be "bottom" or "top" } }, mappings = { edit = "e", expand = { "", "<2-LeftMouse>" }, open = "o", remove = "d", repl = "r", toggle = "t" }, render = { indent = 1, max_value_lines = 100 } }, config = function (_, opts) local dap = require('dap') require('dapui').setup(opts) -- Customize breakpoint signs vim.api.nvim_set_hl(0, "DapStoppedHl", { fg = "#98BB6C", bg = "#2A2A2A", bold = true }) vim.api.nvim_set_hl(0, "DapStoppedLineHl", { bg = "#204028", bold = true }) vim.fn.sign_define('DapStopped', { text='', texthl='DapStoppedHl', linehl='DapStoppedLineHl', numhl= '' }) vim.fn.sign_define('DapBreakpoint', { text='', texthl='DiagnosticSignError', linehl='', numhl='' }) vim.fn.sign_define('DapBreakpointCondition', { text='', texthl='DiagnosticSignWarn', linehl='', numhl='' }) vim.fn.sign_define('DapBreakpointRejected', { text='', texthl='DiagnosticSignError', linehl='', numhl= '' }) vim.fn.sign_define('DapLogPoint', { text='', texthl='DiagnosticSignInfo', linehl='', numhl= '' }) dap.listeners.after.event_initialized["dapui_config"] = function() require('dapui').open() end dap.listeners.before.event_terminated["dapui_config"] = function() -- Commented to prevent DAP UI from closing when unit tests finish -- require('dapui').close() end dap.listeners.before.event_exited["dapui_config"] = function() -- Commented to prevent DAP UI from closing when unit tests finish -- require('dapui').close() end -- Add dap configurations based on your language/adapter settings -- https://github.com/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation -- dap.configurations.xxxxxxxxxx = { -- { -- }, -- } end } ================================================ FILE: .config/nvim/lua/plugins/nvim-dap-virtual-text.lua ================================================ -- Inline Debug Text return { -- https://github.com/theHamsta/nvim-dap-virtual-text 'theHamsta/nvim-dap-virtual-text', lazy = true, opts = { -- Display debug text as a comment commented = true, -- Customize virtual text display_callback = function(variable, buf, stackframe, node, options) if options.virt_text_pos == 'inline' then return ' = ' .. variable.value else return variable.name .. ' = ' .. variable.value end end, } } ================================================ FILE: .config/nvim/lua/plugins/nvim-lspconfig.lua ================================================ -- LSP Support return { -- LSP Configuration -- https://github.com/neovim/nvim-lspconfig 'neovim/nvim-lspconfig', event = 'VeryLazy', dependencies = { -- LSP Management -- https://github.com/williamboman/mason.nvim { 'williamboman/mason.nvim' }, -- https://github.com/williamboman/mason-lspconfig.nvim { 'williamboman/mason-lspconfig.nvim' }, -- Useful status updates for LSP -- https://github.com/j-hui/fidget.nvim { 'j-hui/fidget.nvim', opts = {} }, -- Additional lua configuration, makes nvim stuff amazing! -- https://github.com/folke/neodev.nvim { 'folke/neodev.nvim', opts = {} }, }, config = function () require('mason').setup() require('mason-lspconfig').setup({ -- Install these LSPs automatically ensure_installed = { -- 'bashls', -- requires npm to be installed -- 'cssls', -- requires npm to be installed -- 'html', -- requires npm to be installed 'lua_ls', -- 'jsonls', -- requires npm to be installed 'lemminx', 'marksman', 'quick_lint_js', -- 'tsserver', -- requires npm to be installed -- 'yamlls', -- requires npm to be installed } }) local lspconfig = require('lspconfig') local lsp_capabilities = require('cmp_nvim_lsp').default_capabilities() local lsp_attach = function(client, bufnr) -- Create your keybindings here... end -- Call setup on each LSP server require('mason-lspconfig').setup_handlers({ function(server_name) lspconfig[server_name].setup({ on_attach = lsp_attach, capabilities = lsp_capabilities, }) end }) -- Lua LSP settings lspconfig.lua_ls.setup { settings = { Lua = { diagnostics = { -- Get the language server to recognize the `vim` global globals = {'vim'}, }, }, }, } -- Globally configure all LSP floating preview popups (like hover, signature help, etc) local open_floating_preview = vim.lsp.util.open_floating_preview function vim.lsp.util.open_floating_preview(contents, syntax, opts, ...) opts = opts or {} opts.border = opts.border or "rounded" -- Set border to rounded return open_floating_preview(contents, syntax, opts, ...) end end } ================================================ FILE: .config/nvim/lua/plugins/nvim-surround.lua ================================================ -- Add, Change, Delete Surrounding Chars (["''"]) return { -- https://github.com/kylechui/nvim-surround 'kylechui/nvim-surround', version = "*", -- Use for stability; omit to use `main` branch for the latest features event = "VeryLazy", opts = {} } ================================================ FILE: .config/nvim/lua/plugins/nvim-tree.lua ================================================ -- File Explorer / Tree return { -- https://github.com/nvim-tree/nvim-tree.lua 'nvim-tree/nvim-tree.lua', dependencies = { -- https://github.com/nvim-tree/nvim-web-devicons 'nvim-tree/nvim-web-devicons', -- Fancy icon support }, opts = { actions = { open_file = { window_picker = { enable = false }, } }, }, config = function (_, opts) -- Recommended settings to disable default netrw file explorer vim.g.loaded_netrw = 1 vim.g.loaded_netrwPlugin = 1 require("nvim-tree").setup(opts) end } ================================================ FILE: .config/nvim/lua/plugins/nvim-treesitter.lua ================================================ -- Code Tree Support / Syntax Highlighting return { -- https://github.com/nvim-treesitter/nvim-treesitter 'nvim-treesitter/nvim-treesitter', event = 'VeryLazy', dependencies = { -- https://github.com/nvim-treesitter/nvim-treesitter-textobjects 'nvim-treesitter/nvim-treesitter-textobjects', }, build = ':TSUpdate', opts = { highlight = { enable = true, }, indent = { enable = true }, auto_install = true, -- automatically install syntax support when entering new file type buffer ensure_installed = { 'lua', }, }, config = function (_, opts) local configs = require("nvim-treesitter.configs") configs.setup(opts) end } ================================================ FILE: .config/nvim/lua/plugins/quickfixdd.lua ================================================ -- Adds delete functionality to quickfix list (keymap dd) return { -- https://github.com/TamaMcGlinn/quickfixdd 'TamaMcGlinn/quickfixdd', event = 'VeryLazy' } ================================================ FILE: .config/nvim/lua/plugins/telescope-nvim.lua ================================================ -- Fuzzy finder return { -- https://github.com/nvim-telescope/telescope.nvim 'nvim-telescope/telescope.nvim', lazy = true, dependencies = { -- https://github.com/nvim-lua/plenary.nvim { 'nvim-lua/plenary.nvim' }, { -- https://github.com/nvim-telescope/telescope-fzf-native.nvim 'nvim-telescope/telescope-fzf-native.nvim', build = 'make', cond = function() return vim.fn.executable 'make' == 1 end, }, }, opts = { defaults = { layout_config = { vertical = { width = 0.75 } }, path_display = { filename_first = { reverse_directories = true } }, } } } ================================================ FILE: .config/nvim/lua/plugins/vim-commentary.lua ================================================ -- Comment/Uncomment Lines of Code return { -- https://github.com/tpope/vim-commentary 'tpope/vim-commentary', event = 'VeryLazy', } ================================================ FILE: .config/nvim/lua/plugins/vim-maximizer.lua ================================================ -- Maximize and Restore Current Window return { -- https://github.com/szw/vim-maximizer 'szw/vim-maximizer', event = 'VeryLazy', } ================================================ FILE: .config/nvim/lua/plugins/vim-rest-console.lua ================================================ -- REST Client return { -- https://github.com/diepm/vim-rest-console 'diepm/vim-rest-console', event = 'VeryLazy', config = function () -- Turn off the default key binding vim.g.vrc_set_default_mapping = 0 -- Set the default response content type to JSON vim.g.vrc_response_default_content_type = 'application/json' -- Set the output buffer name (.json extension to utilize syntax hilighting) vim.g.vrc_output_buffer_name = '_OUTPUT.json' -- Run a format command on the response buffer vim.g.vrc_auto_format_response_patterns = { json = 'jq', } end } ================================================ FILE: .config/nvim/lua/plugins/vim-tmux-navigator.lua ================================================ -- Navigate nvim and tmux windows/panels with vim bindings return { -- https://github.com/christoomey/vim-tmux-navigator 'christoomey/vim-tmux-navigator', -- Only load this plugin if tmux is being used event = function() if vim.fn.exists("$TMUX") == 1 then return "VeryLazy" end end, } ================================================ FILE: .github/workflows/stale.yml ================================================ # This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time. # # You can adjust the behavior by modifying this file. # For more information, see: # https://github.com/actions/stale name: Mark stale issues and pull requests on: schedule: - cron: '41 14 * * *' jobs: stale: runs-on: ubuntu-latest permissions: issues: write pull-requests: write steps: - uses: actions/stale@v5 with: repo-token: ${{ secrets.GITHUB_TOKEN }} days-before-stale: 60 days-before-close: 30 stale-issue-message: 'This issue has been inactive for 60 days. In 30 days it will be closed unless you reply or make a change.' stale-pr-message: 'This PR has been inactive for 60 days. In 30 days it will be closed unless you add a comment or make a change.' stale-issue-label: 'no-issue-activity' stale-pr-label: 'no-pr-activity' ================================================ FILE: .gitignore ================================================ # Compiled Lua sources luac.out # luarocks build files *.src.rock *.zip *.tar.gz # Object files *.o *.os *.ko *.obj *.elf # Precompiled Headers *.gch *.pch # Libraries *.lib *.a *.la *.lo *.def *.exp # Shared objects (inc. Windows DLLs) *.dll *.so *.so.* *.dylib # Executables *.exe *.out *.app *.i*86 *.x86_64 *.hex ================================================ FILE: .mime.types ================================================ # Treat markdown files as plain text in Firefox browser text/plain md markdown ================================================ FILE: .tmux.conf ================================================ # Remap default action prefix set -g prefix C-a unbind C-b bind-key C-a send-prefix # Quick refresh of tmux config unbind r bind r source-file ~/.tmux.conf # Truecolor support set -g default-terminal 'tmux-256color' set-option -sa terminal-overrides ",xterm*:Tc" # Session management bindings bind 1 switchc -t 'My Session 1' # prefix + 1 switches to a named session bind 2 switchc -t 'My Session 2' # prefix + 2 switches to a named session bind a switch-client -l # switch to last active session # Split window bindings unbind % bind | split-window -h # vertical split unbind '"' bind - split-window -v # horizontal split bind -r j resize-pane -D 5 bind -r k resize-pane -U 5 bind -r l resize-pane -R 5 bind -r h resize-pane -L 5 bind -r m resize-pane -Z # maximize/unmaximize pane bind-key h select-pane -L # select pane on left bind-key j select-pane -D # select pane on bottom bind-key k select-pane -U # select pane on top bind-key l select-pane -R # select pane on right # Act like vim set-window-option -g mode-keys vi bind-key -T copy-mode-vi 'v' send -X begin-selection bind-key -T copy-mode-vi 'y' send -X copy-selection unbind -T copy-mode-vi MouseDragEnd1Pane # Mouse support set -g mouse on # List of plugins set -g @plugin 'tmux-plugins/tpm' # plugin manager set -g @plugin 'tmux-plugins/tmux-sensible' # nice set of standard options set -g @plugin 'christoomey/vim-tmux-navigator' # navigate tmux and vim in the same way set -g @plugin 'tmux-plugins/tmux-yank' # yank support set -g @plugin 'tmux-plugins/tmux-resurrect' # persist tmux sessions after reboot set -g @resurrect-capture-pane-contents 'on' # capture pane contents when saving sessions set -g @resurrect-strategy-vim 'session' # resurrect nvim session as well as tmux set -g @resurrect-strategy-nvim 'session' # resurrect nvim session as well as tmux set -g @plugin 'tmux-plugins/tmux-continuum' # auto save sessions every 15 min set -g @continuum-restore 'on' # turn on resurrect restore # TMUX Theme (uncomment section for whichever theme you prefer or use your own) # TMUX Power Theme set -g @plugin 'wfxr/tmux-power' set -g @tmux_power_theme 'gold' # gold, everforest, moon, coral, snow, forest, violet, redwine, #HEXCODE set -g @tmux_power_date_format '%m/%d/%Y' set -g @tmux_power_time_format '%-I:%M %p' set -g @tmux_power_date_icon ' ' # set it to a blank will disable the icon set -g @tmux_power_time_icon ' ' # set it to a blank will disable the icon # Tokyo Night Theme # set -g @plugin 'fabioluciano/tmux-tokyo-night' # set -g @theme_variation 'night' # storm, night, moon, day # set -g @theme_plugin_datetime_format '%m/%d/%Y %-I:%M %p' # Catppuccin Theme # set -g @plugin 'catppuccin/tmux' # set -g @catppuccin_flavour 'mocha' # latte, frappe, macchiato, mocha # set -g @catppuccin_window_number_position "none" # set -g @catppuccin_status_modules_left "session application" # set -g @catppuccin_status_modules_right "date_time" # set -g @catppuccin_status_left_separator "" # set -g @catppuccin_status_right_separator "" # set -g @catppuccin_status_right_separIator_inverse "no" # set -g @catppuccin_status_fill "all" # set -g @catppuccin_status_connect_separator "no" # set -g @catppuccin_date_time_text "%m/%d/%Y %-I:%M %p" # Initialize tmux plugin manager (keep this line at the bottom) run '~/.tmux/plugins/tpm/tpm' ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2023 bcampolo Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # Neovim Starter Kit 🕹⚡🤖 # This is my personalized Neovim Starter Kit. IMO it is a very well structured, clean configuration for getting started with Neovim. It uses the [lazy.nvim](https://github.com/folke/lazy.nvim) package manager, which allows plugins to be added simply by dropping a plugin spec file into your plugins folder. Each plugin file in my configuration is well commented and you can remove any plugin file that you don't need or want. A lot of Neovim users recommend kickstart.nvim, which I agree is a great resource due to its simplicity, but I believe this Starter Kit directory structure is much easier to maintain in the long run. > **DISCLAIMER:** > These configurations are based on my personal dev setup and may not be right for everyone. > I take no responsibility for the endless hours of Neovim configuration you are about to embark on and the unhealthy bond that you will form with your editor. > Proceed at your own risk! ******************************************************************************** ## YouTube Guide ## [YouTube Guide](https://www.youtube.com/watch?v=33NLeHvFKxU) for this Starter Kit ******************************************************************************** ## Prerequisites ## - [True Color Terminal](https://gist.github.com/kurahaupo/6ce0eaefe5e730841f03cb82b061daa2#now-supporting-true-color) - Make Neovim look pretty - [Neovim](https://neovim.io/) - Version 0.9.1 or later - [Nerd Font](https://www.nerdfonts.com/) - Needed to see nice icons in Neovim - [ripgrep](https://github.com/BurntSushi/ripgrep) - Needed for Telescope Fuzzy Finder - [xclip](https://linuxconfig.org/how-to-use-xclip-on-linux) - Needed for system clipboard support - [npm/node](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) - Needed for some LSP servers (see commented lines in [nvim-lspconfig.lua](.config/nvim/lua/plugins/nvim-lspconfig.lua)) ## Optional ## - **TMUX** - TMUX is a way to organize multiple terminal sessions, windows and panels and works very nicely in conjunction with Neovim. - I've included my TMUX configuration file in this repo as well [.tmux.conf](.tmux.conf) - **SHELL SETTINGS** - This will set your terminal to use vim motions. You can put it in your ~/.bashrc or similar file: `set -o vi` ******************************************************************************** > **NOTE:** > I do all of my development on a Debian/Ubuntu based Linux distro, so while most of this README will still work on other operating systems, it is geared towards my own dev environment. > If you are using a Mac, your mileage may vary (you Kool-Aid-drinking, hipster Apple fanboi). > If you are using Windows, I'll see you in Hell! ******************************************************************************** ## Setting up Neovim using this Starter Kit ## After installing all of the prerequisites, you can start Neovim by running `nvim` to make sure it works. This will be the ugly vanilla configuration before adding any themes/plugins. If you are new to vim/nvim and got yourself trapped, you can quit with `:q` ### Instructions - If you are **NOT** starting from scratch and want to replace your current Neovim configuration, make a backup first: ```sh # Backup your existing Neovim configuration mv ~/.config/nvim{,.bak} # Backup your existing Neovim cache/state (optional but recommended) mv ~/.local/share/nvim{,.bak} mv ~/.local/state/nvim{,.bak} mv ~/.cache/nvim{,.bak} ``` - Clone the Starter Kit (if you didn't make a backup, this will replace your existing Neovim config) ```sh # Make git subdirectory in your home directory mkdir ~/git cd ~/git # Clone Starter Kit into your git directory git clone https://github.com/bcampolo/nvim-starter-kit # Make the Neovim configuration directory mkdir -p ~/.config/nvim # Copy the Starter Kit Neovim configuration to your Neovim configuration cp -r ~/git/nvim-starter-kit/.config/nvim/* ~/.config/nvim/ ``` - Start Neovim 🚀 ```sh nvim ``` - Once Neovim is started, you may see a number of messages from Lazy, Mason and Treesitter installing plugins, LSP servers, and syntax highlighting. You may see some initial errors. There may be plugins that are still installing. Press enter if instructed to. Wait a bit for everything to finish installing. Press q to close the Lazy UI. Once everything is done installing, quit and restart Neovim one more time. - Now everything should be setup, but it is possible that some plugins are not working correctly. Run `:checkhealth` from within Neovim and investigate any errors that you encounter. ## Starter Kit Structure ## ```sh ├── .config │ └── nvim │ ├── ftplugin │ │ ├── markdown.lua # Add files here in the form filetype.lua │ │ └── ... # to change options based on file type (not extension) │ ├── lua │ │ ├── core │ │ │ ├── keymaps.lua # This configures all of your key bindings │ │ │ └── options.lua # This configures all of your global Neovim options │ │ └── plugins │ │ ├── autopairs.lua # Plugins can be added / removed from Neovim by │ │ ├── ... # adding / removing plugin files to this directory │ │ └── vim-tmux-navigator.lua │ ├── init.lua # This is the main Neovim configuration file │ └── lazy-lock.json # This locks your plugins to specific versions/commits ├── .mime.types # Fixes a Linux/Firefox issue to view local markdown (optional) └── .tmux.conf # This is my tmux configuration (optional) ``` ******************************************************************************** ## Additional Resources ## - [My Neovim YouTube Playlist](https://youtube.com/playlist?list=PLD3V7KEd2M-tUghtES9iyl_ERa7sc1-HF&si=sLuFUeU_IjGr0S2I) 🔥🔥🔥 ## Suggestions / Pull Requests ## If you run into any issues or have any suggestions for plugins that you feel should be part of the Starter Kit, open a PR that includes the updates and I'll review/merge it as soon as I can. ## Starter Kit Variants ## - [Neovim Starter Kit](https://github.com/bcampolo/nvim-starter-kit) - [Neovim Starter Kit for Python](https://github.com/bcampolo/nvim-starter-kit/blob/python/README.md#neovim-starter-kit-for-python-) - [Neovim Starter Kit for Java](https://github.com/bcampolo/nvim-starter-kit/blob/java/README.md#neovim-starter-kit-for-java-) - [Neovim Starter Kit with Games](https://github.com/bcampolo/nvim-starter-kit/blob/games/README.md#neovim-starter-kit-with-games-)