Full Code of bcampolo/nvim-starter-kit for AI

main 67f971123a13 cached
32 files
48.0 KB
15.2k tokens
1 requests
Download .txt
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", "<leader>wq", ":wq<CR>") -- save and quit
keymap.set("n", "<leader>qq", ":q!<CR>") -- quit without saving
keymap.set("n", "<leader>ww", ":w<CR>") -- save
keymap.set("n", "gx", ":!open <c-r><c-a><CR>") -- open URL under cursor

-- Split window management
keymap.set("n", "<leader>sv", "<C-w>v") -- split window vertically
keymap.set("n", "<leader>sh", "<C-w>s") -- split window horizontally
keymap.set("n", "<leader>se", "<C-w>=") -- make split windows equal width
keymap.set("n", "<leader>sx", ":close<CR>") -- close split window
keymap.set("n", "<leader>sj", "<C-w>-") -- make split window height shorter
keymap.set("n", "<leader>sk", "<C-w>+") -- make split windows height taller
keymap.set("n", "<leader>sl", "<C-w>>5") -- make split windows width bigger 
keymap.set("n", "<leader>sh", "<C-w><5") -- make split windows width smaller

-- Tab management
keymap.set("n", "<leader>to", ":tabnew<CR>") -- open a new tab
keymap.set("n", "<leader>tx", ":tabclose<CR>") -- close a tab
keymap.set("n", "<leader>tn", ":tabn<CR>") -- next tab
keymap.set("n", "<leader>tp", ":tabp<CR>") -- previous tab

-- Diff keymaps
keymap.set("n", "<leader>cc", ":diffput<CR>") -- put diff from current to other during diff
keymap.set("n", "<leader>cj", ":diffget 1<CR>") -- get diff from left (local) during merge
keymap.set("n", "<leader>ck", ":diffget 3<CR>") -- get diff from right (remote) during merge
keymap.set("n", "<leader>cn", "]c") -- next diff hunk
keymap.set("n", "<leader>cp", "[c") -- previous diff hunk

-- Quickfix keymaps
keymap.set("n", "<leader>qo", ":copen<CR>") -- open quickfix list
keymap.set("n", "<leader>qf", ":cfirst<CR>") -- jump to first quickfix list item
keymap.set("n", "<leader>qn", ":cnext<CR>") -- jump to next quickfix list item
keymap.set("n", "<leader>qp", ":cprev<CR>") -- jump to prev quickfix list item
keymap.set("n", "<leader>ql", ":clast<CR>") -- jump to last quickfix list item
keymap.set("n", "<leader>qc", ":cclose<CR>") -- close quickfix list

-- Vim-maximizer
keymap.set("n", "<leader>sm", ":MaximizerToggle<CR>") -- toggle maximize tab

-- Nvim-tree
keymap.set("n", "<leader>ee", ":NvimTreeToggle<CR>") -- toggle file explorer
keymap.set("n", "<leader>er", ":NvimTreeFocus<CR>") -- toggle focus to file explorer
keymap.set("n", "<leader>ef", ":NvimTreeFindFile<CR>") -- find file in file explorer

-- Telescope
keymap.set('n', '<leader>ff', require('telescope.builtin').find_files, {}) -- fuzzy find files in project
keymap.set('n', '<leader>fg', require('telescope.builtin').live_grep, {}) -- grep file contents in project
keymap.set('n', '<leader>fb', require('telescope.builtin').buffers, {}) -- fuzzy find open buffers
keymap.set('n', '<leader>fh', require('telescope.builtin').help_tags, {}) -- fuzzy find help tags
keymap.set('n', '<leader>fs', require('telescope.builtin').current_buffer_fuzzy_find, {}) -- fuzzy find in current file buffer
keymap.set('n', '<leader>fo', require('telescope.builtin').lsp_document_symbols, {}) -- fuzzy find LSP/class symbols
keymap.set('n', '<leader>fi', require('telescope.builtin').lsp_incoming_calls, {}) -- fuzzy find LSP/incoming calls
-- keymap.set('n', '<leader>fm', function() require('telescope.builtin').treesitter({default_text=":method:"}) end) -- fuzzy find methods in current class
keymap.set('n', '<leader>fm', function() require('telescope.builtin').treesitter({symbols={'function', 'method'}}) end) -- fuzzy find methods in current class
keymap.set('n', '<leader>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", "<leader>gb", ":GitBlameToggle<CR>") -- toggle git blame

-- Harpoon
keymap.set("n", "<leader>ha", require("harpoon.mark").add_file)
keymap.set("n", "<leader>hh", require("harpoon.ui").toggle_quick_menu)
keymap.set("n", "<leader>h1", function() require("harpoon.ui").nav_file(1) end)
keymap.set("n", "<leader>h2", function() require("harpoon.ui").nav_file(2) end)
keymap.set("n", "<leader>h3", function() require("harpoon.ui").nav_file(3) end)
keymap.set("n", "<leader>h4", function() require("harpoon.ui").nav_file(4) end)
keymap.set("n", "<leader>h5", function() require("harpoon.ui").nav_file(5) end)
keymap.set("n", "<leader>h6", function() require("harpoon.ui").nav_file(6) end)
keymap.set("n", "<leader>h7", function() require("harpoon.ui").nav_file(7) end)
keymap.set("n", "<leader>h8", function() require("harpoon.ui").nav_file(8) end)
keymap.set("n", "<leader>h9", function() require("harpoon.ui").nav_file(9) end)

-- Vim REST Console
keymap.set("n", "<leader>xr", ":call VrcQuery()<CR>") -- Run REST query

-- LSP
keymap.set('n', '<leader>gg', '<cmd>lua vim.lsp.buf.hover()<CR>')
keymap.set('n', '<leader>gd', '<cmd>lua vim.lsp.buf.definition()<CR>')
keymap.set('n', '<leader>gD', '<cmd>lua vim.lsp.buf.declaration()<CR>')
keymap.set('n', '<leader>gi', '<cmd>lua vim.lsp.buf.implementation()<CR>')
keymap.set('n', '<leader>gt', '<cmd>lua vim.lsp.buf.type_definition()<CR>')
keymap.set('n', '<leader>gr', '<cmd>lua vim.lsp.buf.references()<CR>')
keymap.set('n', '<leader>gs', '<cmd>lua vim.lsp.buf.signature_help()<CR>')
keymap.set('n', '<leader>rr', '<cmd>lua vim.lsp.buf.rename()<CR>')
keymap.set('n', '<leader>gf', '<cmd>lua vim.lsp.buf.format({async = true})<CR>')
keymap.set('v', '<leader>gf', '<cmd>lua vim.lsp.buf.format({async = true})<CR>')
keymap.set('n', '<leader>ga', '<cmd>lua vim.lsp.buf.code_action()<CR>')
keymap.set('n', '<leader>gl', '<cmd>lua vim.diagnostic.open_float()<CR>')
keymap.set('n', '<leader>gp', '<cmd>lua vim.diagnostic.goto_prev()<CR>')
keymap.set('n', '<leader>gn', '<cmd>lua vim.diagnostic.goto_next()<CR>')
keymap.set('n', '<leader>tr', '<cmd>lua vim.lsp.buf.document_symbol()<CR>')
keymap.set('i', '<C-Space>', '<cmd>lua vim.lsp.buf.completion()<CR>')

-- Debugging
keymap.set("n", "<leader>bb", "<cmd>lua require'dap'.toggle_breakpoint()<cr>")
keymap.set("n", "<leader>bc", "<cmd>lua require'dap'.set_breakpoint(vim.fn.input('Breakpoint condition: '))<cr>")
keymap.set("n", "<leader>bl", "<cmd>lua require'dap'.set_breakpoint(nil, nil, vim.fn.input('Log point message: '))<cr>")
keymap.set("n", '<leader>br', "<cmd>lua require'dap'.clear_breakpoints()<cr>")
keymap.set("n", '<leader>ba', '<cmd>Telescope dap list_breakpoints<cr>')
keymap.set("n", "<leader>dc", "<cmd>lua require'dap'.continue()<cr>")
keymap.set("n", "<leader>dj", "<cmd>lua require'dap'.step_over()<cr>")
keymap.set("n", "<leader>dk", "<cmd>lua require'dap'.step_into()<cr>")
keymap.set("n", "<leader>do", "<cmd>lua require'dap'.step_out()<cr>")
keymap.set("n", '<leader>dd', function() require('dap').disconnect(); require('dapui').close(); end)
keymap.set("n", '<leader>dt', function() require('dap').terminate(); require('dapui').close(); end)
keymap.set("n", "<leader>dr", "<cmd>lua require'dap'.repl.toggle()<cr>")
keymap.set("n", "<leader>dl", "<cmd>lua require'dap'.run_last()<cr>")
keymap.set("n", '<leader>di', function() require "dap.ui.widgets".hover() end)
keymap.set("n", '<leader>d?', function() local widgets = require "dap.ui.widgets"; widgets.centered_float(widgets.scopes) end)
keymap.set("n", '<leader>df', '<cmd>Telescope dap frames<cr>')
keymap.set("n", '<leader>dh', '<cmd>Telescope dap commands<cr>')
keymap.set("n", '<leader>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 {
        ['<C-j>'] = cmp.mapping.select_next_item(), -- next suggestion
        ['<C-k>'] = cmp.mapping.select_prev_item(), -- previous suggestion
        ['<C-b>'] = cmp.mapping.scroll_docs(-4), -- scroll backward
        ['<C-f>'] = cmp.mapping.scroll_docs(4), -- scroll forward
        ['<C-Space>'] = cmp.mapping.complete {}, -- show completion suggestions
        ['<CR>'] = cmp.mapping.confirm {
          behavior = cmp.ConfirmBehavior.Replace,
          select = true,
        },
	-- Tab through suggestions or when a snippet is active, tab to the next argument
        ['<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' }),
	-- Tab backwards through suggestions or when a snippet is active, tab to the next argument
        ['<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 = 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", "<Esc>" }
      }
    },
    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 = { "<CR>", "<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-)

Download .txt
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
Condensed preview — 32 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (54K chars).
[
  {
    "path": ".config/nvim/ftplugin/markdown.lua",
    "chars": 345,
    "preview": "-- Markdown specific settings\nvim.opt.wrap = true -- Wrap text\nvim.opt.breakindent = true -- Match indent on line break\n"
  },
  {
    "path": ".config/nvim/init.lua",
    "chars": 801,
    "preview": "-- Bootstrap lazy\nlocal lazypath = vim.fn.stdpath(\"data\") .. \"/lazy/lazy.nvim\"\nif not vim.loop.fs_stat(lazypath) then\n  "
  },
  {
    "path": ".config/nvim/lazy-lock.json",
    "chars": 3967,
    "preview": "{\n  \"LuaSnip\": { \"branch\": \"master\", \"commit\": \"1f4ad8bb72bdeb60975e98652636b991a9b7475d\" },\n  \"barbecue\": { \"branch\": \""
  },
  {
    "path": ".config/nvim/lua/core/keymaps.lua",
    "chars": 7634,
    "preview": "-- Set leader key to space\nvim.g.mapleader = \" \"\n\nlocal keymap = vim.keymap\n\n-- General keymaps\nkeymap.set(\"n\", \"<leader"
  },
  {
    "path": ".config/nvim/lua/core/options.lua",
    "chars": 1066,
    "preview": "local opt = vim.opt\n\n-- Session Management\nopt.sessionoptions=\"blank,buffers,curdir,folds,help,tabpages,winsize,winpos,t"
  },
  {
    "path": ".config/nvim/lua/plugins/barbecue-nvim.lua",
    "chars": 406,
    "preview": "-- Display LSP-based breadcrumbs\nreturn {\n  -- https://github.com/utilyre/barbecue.nvim\n  \"utilyre/barbecue.nvim\",\n  nam"
  },
  {
    "path": ".config/nvim/lua/plugins/bigfile-nvim.lua",
    "chars": 332,
    "preview": "-- Improve performance of editing big files\nreturn {\n  -- https://github.com/LunarVim/bigfile.nvim\n  'LunarVim/bigfile.n"
  },
  {
    "path": ".config/nvim/lua/plugins/colorscheme.lua",
    "chars": 6297,
    "preview": "-- Theme/Colorscheme (uncomment section for whichever theme you prefer or use your own)\n-- Kanagawa Theme (Custom Palett"
  },
  {
    "path": ".config/nvim/lua/plugins/git-blame-nvim.lua",
    "chars": 273,
    "preview": "-- Git Blame\nreturn {\n  -- https://github.com/f-person/git-blame.nvim\n  'f-person/git-blame.nvim',\n  event = 'VeryLazy',"
  },
  {
    "path": ".config/nvim/lua/plugins/harpoon.lua",
    "chars": 324,
    "preview": "-- List of favorite files/marks per project\nreturn {\n  -- https://github.com/ThePrimeagen/harpoon\n  'ThePrimeagen/harpoo"
  },
  {
    "path": ".config/nvim/lua/plugins/indent-blankline-nvim.lua",
    "chars": 248,
    "preview": "-- Indentation guides\nreturn {\n  -- https://github.com/lukas-reineke/indent-blankline.nvim\n  \"lukas-reineke/indent-blank"
  },
  {
    "path": ".config/nvim/lua/plugins/lualine-nvim.lua",
    "chars": 1494,
    "preview": "-- Status line\nreturn {\n  -- https://github.com/nvim-lualine/lualine.nvim\n  'nvim-lualine/lualine.nvim',\n  dependencies "
  },
  {
    "path": ".config/nvim/lua/plugins/nvim-autopairs.lua",
    "chars": 405,
    "preview": "-- Auto-completion of bracket/paren/quote pairs\nreturn {\n  -- https://github.com/windwp/nvim-autopairs\n  'windwp/nvim-au"
  },
  {
    "path": ".config/nvim/lua/plugins/nvim-cmp.lua",
    "chars": 2906,
    "preview": "-- Auto-completion / Snippets\nreturn {\n  -- https://github.com/hrsh7th/nvim-cmp\n  'hrsh7th/nvim-cmp',\n  event = 'InsertE"
  },
  {
    "path": ".config/nvim/lua/plugins/nvim-dap-ui.lua",
    "chars": 3584,
    "preview": "-- Debugging Support\nreturn {\n  -- https://github.com/rcarriga/nvim-dap-ui\n  'rcarriga/nvim-dap-ui',\n  event = 'VeryLazy"
  },
  {
    "path": ".config/nvim/lua/plugins/nvim-dap-virtual-text.lua",
    "chars": 494,
    "preview": "-- Inline Debug Text\nreturn {\n  -- https://github.com/theHamsta/nvim-dap-virtual-text\n  'theHamsta/nvim-dap-virtual-text"
  },
  {
    "path": ".config/nvim/lua/plugins/nvim-lspconfig.lua",
    "chars": 2365,
    "preview": "-- LSP Support\nreturn {\n  -- LSP Configuration\n  -- https://github.com/neovim/nvim-lspconfig\n  'neovim/nvim-lspconfig',\n"
  },
  {
    "path": ".config/nvim/lua/plugins/nvim-surround.lua",
    "chars": 260,
    "preview": "-- Add, Change, Delete Surrounding Chars ([\"''\"])\nreturn {\n  -- https://github.com/kylechui/nvim-surround\n  'kylechui/nv"
  },
  {
    "path": ".config/nvim/lua/plugins/nvim-tree.lua",
    "chars": 577,
    "preview": "-- File Explorer / Tree\nreturn {\n  -- https://github.com/nvim-tree/nvim-tree.lua\n  'nvim-tree/nvim-tree.lua',\n  dependen"
  },
  {
    "path": ".config/nvim/lua/plugins/nvim-treesitter.lua",
    "chars": 692,
    "preview": "-- Code Tree Support / Syntax Highlighting\nreturn {\n  -- https://github.com/nvim-treesitter/nvim-treesitter\n  'nvim-tree"
  },
  {
    "path": ".config/nvim/lua/plugins/quickfixdd.lua",
    "chars": 165,
    "preview": "-- Adds delete functionality to quickfix list (keymap dd)\nreturn {\n  -- https://github.com/TamaMcGlinn/quickfixdd\n  'Tam"
  },
  {
    "path": ".config/nvim/lua/plugins/telescope-nvim.lua",
    "chars": 701,
    "preview": "-- Fuzzy finder\nreturn {\n  -- https://github.com/nvim-telescope/telescope.nvim\n  'nvim-telescope/telescope.nvim',\n  lazy"
  },
  {
    "path": ".config/nvim/lua/plugins/vim-commentary.lua",
    "chars": 141,
    "preview": "-- Comment/Uncomment Lines of Code\nreturn {\n  -- https://github.com/tpope/vim-commentary\n  'tpope/vim-commentary',\n  eve"
  },
  {
    "path": ".config/nvim/lua/plugins/vim-maximizer.lua",
    "chars": 138,
    "preview": "-- Maximize and Restore Current Window\nreturn {\n  -- https://github.com/szw/vim-maximizer\n  'szw/vim-maximizer',\n  event"
  },
  {
    "path": ".config/nvim/lua/plugins/vim-rest-console.lua",
    "chars": 604,
    "preview": "-- REST Client\nreturn {\n  -- https://github.com/diepm/vim-rest-console\n  'diepm/vim-rest-console',\n  event = 'VeryLazy',"
  },
  {
    "path": ".config/nvim/lua/plugins/vim-tmux-navigator.lua",
    "chars": 311,
    "preview": "-- Navigate nvim and tmux windows/panels with vim bindings\nreturn {\n  -- https://github.com/christoomey/vim-tmux-navigat"
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 949,
    "preview": "# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.\n#\n# You c"
  },
  {
    "path": ".gitignore",
    "chars": 324,
    "preview": "# Compiled Lua sources\nluac.out\n\n# luarocks build files\n*.src.rock\n*.zip\n*.tar.gz\n\n# Object files\n*.o\n*.os\n*.ko\n*.obj\n*."
  },
  {
    "path": ".mime.types",
    "chars": 82,
    "preview": "# Treat markdown files as plain text in Firefox browser\ntext/plain    md markdown\n"
  },
  {
    "path": ".tmux.conf",
    "chars": 3328,
    "preview": "# Remap default action prefix\nset -g prefix C-a\nunbind C-b\nbind-key C-a send-prefix\n\n# Quick refresh of tmux config\nunbi"
  },
  {
    "path": "LICENSE",
    "chars": 1065,
    "preview": "MIT License\n\nCopyright (c) 2023 bcampolo\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\no"
  },
  {
    "path": "README.md",
    "chars": 6851,
    "preview": "# Neovim Starter Kit 🕹⚡🤖 #\n\nThis is my personalized Neovim Starter Kit.  IMO it is a very well structured, clean configu"
  }
]

About this extraction

This page contains the full source code of the bcampolo/nvim-starter-kit GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 32 files (48.0 KB), approximately 15.2k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!