feat: Initial configuration setup for Neovim
• Add .pre-commit-config.yaml for gitleaks. • Initialize Neovim configuration structure in nvim/init.lua. • Define core settings, autocommands, keybinds, icons, and LSP configurations. • Set up plugin loading via lazy.nvim and configure various plugins.
This commit is contained in:
6
.pre-commit-config.yaml
Normal file
6
.pre-commit-config.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
repos:
|
||||
- repo: https://github.com/gitleaks/gitleaks
|
||||
rev: v8.30.0
|
||||
hooks:
|
||||
- id: gitleaks
|
||||
9
nvim/init.lua
Executable file
9
nvim/init.lua
Executable file
@@ -0,0 +1,9 @@
|
||||
require("config.plugins.lazy")
|
||||
|
||||
require("config.nvim_options")
|
||||
require("config.autocommands")
|
||||
|
||||
-- Override configs after loading from lspconfig
|
||||
-- Ideally I would use the lsp/ folder, but some LSPs do not respect these overrides
|
||||
-- e.g.: html, jinja_lsp and others
|
||||
require("config.lsp")
|
||||
41
nvim/lazy-lock.json
Executable file
41
nvim/lazy-lock.json
Executable file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
|
||||
"LuaSnip": { "branch": "master", "commit": "5a1e39223db9a0498024a77b8441169d260c8c25" },
|
||||
"auto-save.nvim": { "branch": "main", "commit": "5fbcaac0a2698c87a9a1bd2083cb6949505cca12" },
|
||||
"auto-session": { "branch": "main", "commit": "292492ab7af4bd8b9e37e28508bc8ce995722fd5" },
|
||||
"better-escape.nvim": { "branch": "master", "commit": "19a38aab94961016430905ebec30d272a01e9742" },
|
||||
"blink.cmp": { "branch": "main", "commit": "b19413d214068f316c78978b08264ed1c41830ec" },
|
||||
"blink.compat": { "branch": "main", "commit": "2ed6d9a28b07fa6f3bface818470605f8896408c" },
|
||||
"cmp-git": { "branch": "main", "commit": "b24309c386c9666c549a1abaedd4956541676d06" },
|
||||
"cmp-nvim-lua": { "branch": "main", "commit": "e3a22cb071eb9d6508a156306b102c45cd2d573d" },
|
||||
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
|
||||
"friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
|
||||
"hardtime.nvim": { "branch": "main", "commit": "b4e431934af1fe224a3a801f632c008278cb7628" },
|
||||
"inc-rename.nvim": { "branch": "main", "commit": "2597bccb57d1b570fbdbd4adf88b955f7ade715b" },
|
||||
"lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" },
|
||||
"lsp-progress.nvim": { "branch": "main", "commit": "ae52979ad412371ea6dc39ff70c8dfc681fb42b8" },
|
||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "0b9bb925c000ae649ff7e7149c8cd00031f4b539" },
|
||||
"mason-null-ls.nvim": { "branch": "main", "commit": "8e7806acaa87fae64f0bfde25bb4b87c18bd19b4" },
|
||||
"mason-tool-installer.nvim": { "branch": "main", "commit": "517ef5994ef9d6b738322664d5fdd948f0fdeb46" },
|
||||
"mason.nvim": { "branch": "main", "commit": "57e5a8addb8c71fb063ee4acda466c7cf6ad2800" },
|
||||
"noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" },
|
||||
"none-ls.nvim": { "branch": "main", "commit": "9a5d95cdf9f440683f248f6f0e97f8643804c91b" },
|
||||
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
|
||||
"nvim-autopairs": { "branch": "master", "commit": "7a2c97cccd60abc559344042fefb1d5a85b3e33b" },
|
||||
"nvim-hlslens": { "branch": "main", "commit": "425405475300d64de07dec3af60b1f1d31d49230" },
|
||||
"nvim-html-css": { "branch": "main", "commit": "9d5fe0b9a4180b960ef92a2cfe8534f3e2c4f957" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "7757d54716b26280b1b1785d89364a016a29c445" },
|
||||
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
|
||||
"nvim-treesitter-context": { "branch": "master", "commit": "660861b1849256398f70450afdf93908d28dc945" },
|
||||
"nvim-treesitter-textobjects": { "branch": "master", "commit": "5ca4aaa6efdcc59be46b95a3e876300cfead05ef" },
|
||||
"nvim-ts-autotag": { "branch": "main", "commit": "c4ca798ab95b316a768d51eaaaee48f64a4a46bc" },
|
||||
"nvim-web-devicons": { "branch": "master", "commit": "8dcb311b0c92d460fac00eac706abd43d94d68af" },
|
||||
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
|
||||
"snacks.nvim": { "branch": "main", "commit": "fe7cfe9800a182274d0f868a74b7263b8c0c020b" },
|
||||
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
|
||||
"telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
|
||||
"tiny-inline-diagnostic.nvim": { "branch": "main", "commit": "38b06435305c30966b7ceb0a43e460dc43acaada" },
|
||||
"tokyonight.nvim": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" },
|
||||
"vim-tmux-navigator": { "branch": "master", "commit": "c45243dc1f32ac6bcf6068e5300f3b2b237e576a" },
|
||||
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }
|
||||
}
|
||||
49
nvim/lua/config/autocommands.lua
Normal file
49
nvim/lua/config/autocommands.lua
Normal file
@@ -0,0 +1,49 @@
|
||||
local augroup = vim.api.nvim_create_augroup("UserConfig", {})
|
||||
|
||||
vim.api.nvim_create_autocmd("TextYankPost", {
|
||||
group = augroup,
|
||||
callback = function()
|
||||
vim.highlight.on_yank()
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
-- Return to last edit position when opening files
|
||||
vim.api.nvim_create_autocmd("BufReadPost", {
|
||||
group = augroup,
|
||||
callback = function()
|
||||
local mark = vim.api.nvim_buf_get_mark(0, '"')
|
||||
local lcount = vim.api.nvim_buf_line_count(0)
|
||||
if mark[1] > 0 and mark[1] <= lcount then
|
||||
pcall(vim.api.nvim_win_set_cursor, 0, mark)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Auto-resize splits when window is resized
|
||||
vim.api.nvim_create_autocmd("VimResized", {
|
||||
group = augroup,
|
||||
callback = function()
|
||||
vim.cmd("tabdo wincmd =")
|
||||
end,
|
||||
})
|
||||
|
||||
-- Create directories when saving files
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
group = augroup,
|
||||
callback = function()
|
||||
local dir = vim.fn.expand('<afile>:p:h')
|
||||
if vim.fn.isdirectory(dir) == 0 then
|
||||
vim.fn.mkdir(dir, 'p')
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Copy to clipboard on focus lost
|
||||
-- https://www.reddit.com/r/neovim/comments/1l4tubm/copy_last_yanked_text_to_clipboard_on_focuslost/
|
||||
vim.api.nvim_create_autocmd('FocusLost', {
|
||||
desc = "Copy to clipboard on FocusLost",
|
||||
callback = function()
|
||||
vim.fn.setreg("+", vim.fn.getreg("0"))
|
||||
end,
|
||||
})
|
||||
18
nvim/lua/config/core.lua
Normal file
18
nvim/lua/config/core.lua
Normal file
@@ -0,0 +1,18 @@
|
||||
local m = {}
|
||||
|
||||
m.leader = " "
|
||||
m.local_leader = "\\"
|
||||
m.lsp_log_Level = vim.log.levels.OFF
|
||||
m.buf_type_disable_folding = { 'neo-tree', 'prompt' }
|
||||
m.buf_type_disable_statuscol = { 'neo-tree', 'prompt' }
|
||||
|
||||
|
||||
m.lsp = {}
|
||||
m.lsp_ensure_installed = { "clangd", "clang-format", "pylsp", "ruff", "lua-language-server" }
|
||||
|
||||
m.treesitter = {}
|
||||
m.treesitter.ensure_installed = { "lua", "vim", "vimdoc", "markdown", "markdown_inline", "html", "css", "bash", "regex" }
|
||||
|
||||
m.color_scheme = "tokyonight-night"
|
||||
|
||||
return m
|
||||
138
nvim/lua/config/icons.lua
Normal file
138
nvim/lua/config/icons.lua
Normal file
@@ -0,0 +1,138 @@
|
||||
local icons = {
|
||||
-- Mason icons
|
||||
installed = " ",
|
||||
pending = " ",
|
||||
uninstalled = " ",
|
||||
|
||||
-- LSP Kind types
|
||||
kind = {
|
||||
text = " ",
|
||||
method = " ",
|
||||
func = " ",
|
||||
static_func = " ",
|
||||
constructor = " ",
|
||||
field = " ",
|
||||
variable = " ",
|
||||
class = " ",
|
||||
interface = " ",
|
||||
module = " ",
|
||||
property = " ",
|
||||
unit = " ",
|
||||
value = " ",
|
||||
enum = " ",
|
||||
enummember = " ",
|
||||
keyword = " ",
|
||||
snippet = " ",
|
||||
color = " ",
|
||||
file = " ",
|
||||
reference = " ",
|
||||
constant = " ",
|
||||
struct = " ",
|
||||
event = " ",
|
||||
operator = " ",
|
||||
typeparameter = " ",
|
||||
namespace = " ",
|
||||
string = " ",
|
||||
number = " ",
|
||||
array = " ",
|
||||
object = " ",
|
||||
boolean = " ",
|
||||
package = " ",
|
||||
null = " ",
|
||||
},
|
||||
|
||||
-- LSP Code Actions
|
||||
actions = " ",
|
||||
replace = " ",
|
||||
replace_all = " ",
|
||||
outline = " ",
|
||||
card_hover = " ",
|
||||
terminal = " ",
|
||||
signature = " ",
|
||||
format = " ",
|
||||
|
||||
-- Neotree Icons
|
||||
folder = "",
|
||||
folder_open = "",
|
||||
folder_empty = "",
|
||||
|
||||
-- HSLens icons
|
||||
arrow_up = "",
|
||||
arrow_down = "",
|
||||
|
||||
ellipsis = " ",
|
||||
fold = "",
|
||||
|
||||
diagnostic = {
|
||||
error = " ",
|
||||
warning = " ",
|
||||
info = " ",
|
||||
hint = " ",
|
||||
trace = " ",
|
||||
},
|
||||
|
||||
indent = {
|
||||
tab = " ",
|
||||
char = " ",
|
||||
scope = "▎",
|
||||
},
|
||||
|
||||
git = {
|
||||
add = " ",
|
||||
delete = " ",
|
||||
modified = " ",
|
||||
renamed = " ",
|
||||
untracked = " ",
|
||||
ignored = " ",
|
||||
unstagged = " ",
|
||||
stagged = " ",
|
||||
conflict = "",
|
||||
},
|
||||
|
||||
debug = {
|
||||
debug = "",
|
||||
breakpoint = "",
|
||||
condition = "",
|
||||
stopped = "",
|
||||
rejected = "",
|
||||
log = "",
|
||||
|
||||
disconnect = "",
|
||||
pause = "",
|
||||
play = "",
|
||||
run_last = "",
|
||||
step_back = "",
|
||||
step_into = "",
|
||||
step_out = "",
|
||||
step_over = "",
|
||||
terminate = "",
|
||||
},
|
||||
|
||||
borders = {
|
||||
inner = {
|
||||
all = { " ", "▁", " ", "▏", " ", "▔", " ", "▕" },
|
||||
top_bottom = { " ", "▁", " ", " ", " ", "▔", " ", " " },
|
||||
},
|
||||
outer = {
|
||||
all = { "🭽", "▔", "🭾", "▕", "🭿", "▁", "🭼", "▏" },
|
||||
-- all = { "", "", "", "", "", "", "", "" },
|
||||
-- all = { " ", " ", " ", " ", " ", " ", " ", " " },
|
||||
},
|
||||
none = { "", "", "", "", "", "", "", "" },
|
||||
left_right = { "", "", " ", "", "", "", "", " " },
|
||||
empty = { " ", " ", " ", " ", " ", " ", " ", " " },
|
||||
},
|
||||
}
|
||||
|
||||
function icons:get_diagnostic(severity)
|
||||
severity = vim.diagnostic.severity[severity]
|
||||
if severity then
|
||||
local icon = self.diagnostics[severity:lower()]
|
||||
if icon then
|
||||
return icon
|
||||
end
|
||||
end
|
||||
return "!"
|
||||
end
|
||||
|
||||
return icons
|
||||
21
nvim/lua/config/keybinds.lua
Normal file
21
nvim/lua/config/keybinds.lua
Normal file
@@ -0,0 +1,21 @@
|
||||
-- Disable unpopular mappings
|
||||
pcall(vim.keymap.del, "n", "gra")
|
||||
pcall(vim.keymap.del, "n", "gri")
|
||||
pcall(vim.keymap.del, "n", "grn")
|
||||
pcall(vim.keymap.del, "n", "grr")
|
||||
|
||||
return {
|
||||
mode = "nixo",
|
||||
{
|
||||
"<leader>r",
|
||||
function()
|
||||
local word = vim.fn.expand("<cword>") -- Get the word under the cursor
|
||||
vim.ui.input({ prompt = "Replace '" .. word .. "' with: " }, function(value)
|
||||
if value and value ~= "" then
|
||||
vim.cmd(":%s/\\<" .. word .. "\\>/" .. value .. "/gI")
|
||||
end
|
||||
end)
|
||||
end,
|
||||
desc = "Replace all occurrences of the selected word with a prompt",
|
||||
}
|
||||
}
|
||||
8
nvim/lua/config/lsp/clangd.lua
Normal file
8
nvim/lua/config/lsp/clangd.lua
Normal file
@@ -0,0 +1,8 @@
|
||||
# https://github.com/edr3x/nvim/blob/main/lsp/clangd.lua
|
||||
|
||||
return {
|
||||
on_attach = function(client)
|
||||
client.server_capabilities.documentFormattingProvider = false
|
||||
client.server_capabilities.documentRangeFormattingProvider = false
|
||||
end,
|
||||
}
|
||||
3
nvim/lua/config/lsp/html.lua
Normal file
3
nvim/lua/config/lsp/html.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
return {
|
||||
filetypes = { 'html', 'jinja2' },
|
||||
}
|
||||
13
nvim/lua/config/lsp/init.lua
Normal file
13
nvim/lua/config/lsp/init.lua
Normal file
@@ -0,0 +1,13 @@
|
||||
-- lsp/init.lua
|
||||
|
||||
local path = debug.getinfo(1, "S").source:match("@?(.*/)")
|
||||
for _, file in ipairs(vim.fn.readdir(path)) do
|
||||
if file:match("%.lua$") and file ~= "init.lua" then
|
||||
local lsp_name = file:gsub("%.lua$", "")
|
||||
local mod = "config.lsp." .. lsp_name
|
||||
local ok, config = pcall(require, mod)
|
||||
if ok and type(config) == "table" then
|
||||
vim.lsp.config(lsp_name, config)
|
||||
end
|
||||
end
|
||||
end
|
||||
10
nvim/lua/config/lsp/jinja_lsp.lua
Normal file
10
nvim/lua/config/lsp/jinja_lsp.lua
Normal file
@@ -0,0 +1,10 @@
|
||||
vim.filetype.add {
|
||||
extension = {
|
||||
jinja2 = 'jinja2',
|
||||
j2 = 'jinja2',
|
||||
},
|
||||
}
|
||||
|
||||
return {
|
||||
filetypes = { 'jinja2' },
|
||||
}
|
||||
9
nvim/lua/config/lsp/lua_ls.lua
Normal file
9
nvim/lua/config/lsp/lua_ls.lua
Normal file
@@ -0,0 +1,9 @@
|
||||
return {
|
||||
settings = {
|
||||
Lua = {
|
||||
completion = {
|
||||
callSnippet = "Replace",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
33
nvim/lua/config/lsp/pylsp.lua
Normal file
33
nvim/lua/config/lsp/pylsp.lua
Normal file
@@ -0,0 +1,33 @@
|
||||
local mypy_config = { enabled = true }
|
||||
local venv = os.getenv("VIRTUAL_ENV")
|
||||
if venv ~= nil then
|
||||
mypy_config = { enabled = true, overrides = { true, "--python-executable", venv .. "/bin/python" } }
|
||||
end
|
||||
|
||||
return {
|
||||
settings = {
|
||||
pylsp = {
|
||||
plugins = {
|
||||
black = { enabled = false },
|
||||
autopep8 = { enabled = false },
|
||||
yapf = { enabled = false },
|
||||
-- linter options
|
||||
flake8 = { enabled = false },
|
||||
pyflakes = { enabled = false },
|
||||
pycodestyle = { enabled = false },
|
||||
-- type checker
|
||||
pylsp_mypy = mypy_config,
|
||||
-- auto-completion options
|
||||
jedi_completion = { enabled = true, fuzzy = true },
|
||||
-- import sorting
|
||||
pyls_isort = { enabled = false },
|
||||
ruff = {
|
||||
enabled = true,
|
||||
},
|
||||
jedi = {
|
||||
enabled = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
236
nvim/lua/config/nvim_options.lua
Normal file
236
nvim/lua/config/nvim_options.lua
Normal file
@@ -0,0 +1,236 @@
|
||||
local opt = vim.opt
|
||||
local g = vim.g
|
||||
|
||||
-- Disable the use of per-directory .exrc files
|
||||
vim.o.exrc = false
|
||||
|
||||
-- Enables transparent background if supported by the colorscheme
|
||||
g.transparent_enabled = true
|
||||
|
||||
-- Prevent default plugin keymaps from being loaded
|
||||
g.no_plugin_maps = true
|
||||
|
||||
-- Limit completion menu width
|
||||
g.cmp_completion_max_width = 30
|
||||
|
||||
-- Limit virtual text width for diagnostics
|
||||
g.max_width_diagnostic_virtual_text = 50
|
||||
|
||||
-- Disable markdown style enforcement
|
||||
g.markdown_recommended_style = 0
|
||||
|
||||
-- Automatically change the current working directory to the file's directory
|
||||
g.autochdir = true
|
||||
|
||||
-- Set default maximum text width
|
||||
g.textwidth = 128
|
||||
|
||||
-- Use zsh as the default shell
|
||||
opt.shell = "/bin/zsh"
|
||||
|
||||
-- Enable 24-bit RGB colors
|
||||
opt.termguicolors = true
|
||||
|
||||
-- Replace end-of-buffer '~' with spaces
|
||||
opt.fillchars = { eob = " " }
|
||||
|
||||
-- Show the window title in the titlebar
|
||||
opt.title = true
|
||||
|
||||
-- Automatically save changes when switching buffers
|
||||
opt.autowrite = true
|
||||
|
||||
-- Height of the command line (lower = more space)
|
||||
opt.cmdheight = 1
|
||||
|
||||
-- Completion options: show menu even for a single match, don't auto select
|
||||
opt.completeopt = "menuone,noselect,noinsert"
|
||||
|
||||
-- Highlight the current line
|
||||
opt.cursorline = true
|
||||
|
||||
-- Hide markdown formatting symbols (like * and _)
|
||||
opt.conceallevel = 2
|
||||
|
||||
-- Ask for confirmation when closing modified buffers
|
||||
opt.confirm = true
|
||||
|
||||
-- Use spaces instead of tabs
|
||||
opt.expandtab = true
|
||||
|
||||
-- Format for grep results
|
||||
opt.grepformat = "%f:%l:%c:%m"
|
||||
|
||||
-- Use ripgrep as the grep program
|
||||
opt.grepprg = "rg --vimgrep"
|
||||
|
||||
-- Keep modified buffers in the background
|
||||
opt.hidden = true
|
||||
|
||||
-- Case-insensitive search...
|
||||
opt.ignorecase = true
|
||||
|
||||
-- ...unless uppercase is used in the query
|
||||
opt.smartcase = true
|
||||
|
||||
-- Live preview of `:substitute` commands
|
||||
opt.inccommand = "nosplit"
|
||||
|
||||
-- Don't add two spaces after sentences when joining lines
|
||||
opt.joinspaces = false
|
||||
|
||||
-- Hide the statusline (0 = never show)
|
||||
opt.laststatus = 0
|
||||
|
||||
-- Enable mouse support
|
||||
opt.mouse = "a"
|
||||
|
||||
-- Show absolute line numbers...
|
||||
opt.number = true
|
||||
|
||||
-- ...and relative line numbers
|
||||
opt.relativenumber = true
|
||||
|
||||
-- Disable popup menu transparency
|
||||
opt.pumblend = nil
|
||||
|
||||
-- Max number of items in the completion menu
|
||||
opt.pumheight = 10
|
||||
|
||||
-- Minimum number of lines above/below the cursor
|
||||
opt.scrolloff = 4
|
||||
|
||||
-- Align indentation to a multiple of `shiftwidth`
|
||||
opt.shiftround = true
|
||||
|
||||
-- Indentation width for autoindent
|
||||
opt.shiftwidth = 2
|
||||
|
||||
-- Minimum number of columns to left/right of cursor
|
||||
opt.sidescrolloff = 4
|
||||
|
||||
-- Always show the sign column (e.g., for Git or diagnostics)
|
||||
opt.signcolumn = "yes"
|
||||
|
||||
-- Smart auto-indenting on new lines
|
||||
opt.smartindent = true
|
||||
|
||||
-- Open vertical splits to the right
|
||||
opt.splitright = true
|
||||
|
||||
-- Open horizontal splits below
|
||||
opt.splitbelow = true
|
||||
|
||||
-- Number of spaces that a <Tab> counts for
|
||||
opt.tabstop = 2
|
||||
|
||||
-- Number of spaces inserted for a <Tab>
|
||||
opt.softtabstop = 2
|
||||
|
||||
-- Enable smart tab behavior (tab aligns to indent level)
|
||||
opt.smarttab = true
|
||||
|
||||
-- Timeout length for mapped sequences
|
||||
opt.timeoutlen = 300
|
||||
|
||||
-- Maximum number of undo levels
|
||||
opt.undolevels = 10000
|
||||
|
||||
-- Delay (in ms) before the swap file is written
|
||||
opt.updatetime = 200
|
||||
|
||||
-- Completion mode on command-line: first longest match, then full list
|
||||
opt.wildmode = "longest:full,full"
|
||||
|
||||
-- Minimum window width when resizing splits
|
||||
opt.winminwidth = 5
|
||||
|
||||
-- Wrap lines at word boundaries
|
||||
opt.linebreak = true
|
||||
|
||||
-- Preserve scroll position when splitting
|
||||
opt.splitkeep = "screen"
|
||||
|
||||
-- Reduce command-line messages
|
||||
opt.shortmess:append({ C = true })
|
||||
|
||||
-- Show invisible characters
|
||||
opt.list = true
|
||||
|
||||
-- Wrap long lines
|
||||
opt.wrap = true
|
||||
|
||||
-- Enable line numbering
|
||||
opt.nu = true
|
||||
|
||||
-- Disable swap files
|
||||
opt.swapfile = false
|
||||
|
||||
-- Disable backup files
|
||||
opt.backup = false
|
||||
|
||||
-- Set undo file directory
|
||||
opt.undodir = os.getenv("HOME") .. "/.undodir"
|
||||
|
||||
-- Persist undo history to file
|
||||
opt.undofile = true
|
||||
|
||||
-- Highlight search results
|
||||
opt.hlsearch = true
|
||||
|
||||
-- Show search matches as you type
|
||||
opt.incsearch = true
|
||||
|
||||
-- Keep the cursor vertically centered (scrolloff = 9999)
|
||||
opt.scrolloff = 9999
|
||||
|
||||
-- Enable EditorConfig plugin
|
||||
g.editorconfig = true
|
||||
|
||||
-- From https://github.com/rmagatti/auto-session
|
||||
vim.o.sessionoptions = "blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions"
|
||||
|
||||
-- Folding configuration based on Tree-sitter expressions
|
||||
vim.o.foldenable = true -- Enable folding
|
||||
vim.o.foldlevel = 99 -- Open all folds by default
|
||||
vim.o.foldmethod = "expr" -- Use expression to determine folds
|
||||
vim.o.foldexpr = "v:lua.vim.treesitter.foldexpr()" -- Use Tree-sitter for folding
|
||||
vim.o.foldtext = "" -- Empty fold text (customize if needed)
|
||||
vim.opt.foldcolumn = "0" -- Disable fold column
|
||||
vim.opt.fillchars:append({
|
||||
fold = " ",
|
||||
foldclose = "", -- Icon when fold is closed
|
||||
foldopen = " ", -- No icon when open
|
||||
})
|
||||
|
||||
-- Disable unnecessary built-in plugins
|
||||
local disabled_built_ins = {
|
||||
"netrw",
|
||||
"netrwPlugin",
|
||||
"netrwSettings",
|
||||
"netrwFileHandlers",
|
||||
"gzip",
|
||||
"zip",
|
||||
"zipPlugin",
|
||||
"tar",
|
||||
"tarPlugin",
|
||||
"getscript",
|
||||
"getscriptPlugin",
|
||||
"vimball",
|
||||
"vimballPlugin",
|
||||
"2html_plugin",
|
||||
"logipat",
|
||||
"rrhelper",
|
||||
"spellfile_plugin",
|
||||
"matchit"
|
||||
}
|
||||
for _, plugin in pairs(disabled_built_ins) do
|
||||
g["loaded_" .. plugin] = 1
|
||||
end
|
||||
|
||||
-- Diagnostic sign icons from a custom icon config
|
||||
local icons = require("config.icons")
|
||||
vim.fn.sign_define("DiagnosticSignError", { text = icons.diagnostic.error, texthl = "DiagnosticSignError" })
|
||||
vim.fn.sign_define("DiagnosticSignWarn", { text = icons.diagnostic.warning, texthl = "DiagnosticSignWarn" })
|
||||
vim.fn.sign_define("DiagnosticSignInfo", { text = icons.diagnostic.info, texthl = "DiagnosticSignInfo" })
|
||||
vim.fn.sign_define("DiagnosticSignHint", { text = icons.diagnostic.hint, texthl = "DiagnosticSignHint" })
|
||||
35
nvim/lua/config/plugins/auto-save.lua
Normal file
35
nvim/lua/config/plugins/auto-save.lua
Normal file
@@ -0,0 +1,35 @@
|
||||
local M = {}
|
||||
|
||||
local excluded_filetypes = {
|
||||
-- this one is especially useful if you use neovim as a commit message editor
|
||||
"gitcommit",
|
||||
-- most of these are usually set to non-modifiable, which prevents autosaving
|
||||
-- by default, but it doesn't hurt to be extra safe.
|
||||
"NvimTree",
|
||||
"Outline",
|
||||
"TelescopePrompt",
|
||||
"alpha",
|
||||
"dashboard",
|
||||
"lazygit",
|
||||
"neo-tree",
|
||||
"oil",
|
||||
"prompt",
|
||||
"toggleterm",
|
||||
}
|
||||
|
||||
local function save_condition(buf)
|
||||
if vim.tbl_contains(excluded_filetypes, vim.fn.getbufvar(buf, "&filetype"))
|
||||
then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
M.configure_auto_save = function()
|
||||
local as = require("auto-save")
|
||||
as.setup({
|
||||
condition = save_condition
|
||||
})
|
||||
end
|
||||
|
||||
return M
|
||||
39
nvim/lua/config/plugins/auto-session.lua
Normal file
39
nvim/lua/config/plugins/auto-session.lua
Normal file
@@ -0,0 +1,39 @@
|
||||
local M = {}
|
||||
|
||||
local excluded_filetypes = {
|
||||
-- this one is especially useful if you use neovim as a commit message editor
|
||||
"gitcommit",
|
||||
-- most of these are usually set to non-modifiable, which prevents autosaving
|
||||
-- by default, but it doesn't hurt to be extra safe.
|
||||
"NvimTree",
|
||||
"Outline",
|
||||
"TelescopePrompt",
|
||||
"alpha",
|
||||
"dashboard",
|
||||
"lazygit",
|
||||
"neo-tree",
|
||||
"oil",
|
||||
"prompt",
|
||||
"toggleterm",
|
||||
}
|
||||
|
||||
M.configure_auto_session = function()
|
||||
local as = require("auto-session")
|
||||
as.setup({
|
||||
bypass_save_filetypes = excluded_filetypes,
|
||||
cwd_change_handling = true,
|
||||
git_use_branch_name = true,
|
||||
git_auto_restore_on_branch_change = true,
|
||||
lsp_stop_on_restore = true,
|
||||
suppressed_dirs = { "~/Downloads/", "~/", "~/Documents/", "/" },
|
||||
auto_create = function()
|
||||
local cmd = "git rev-parse --is-inside-work-tree"
|
||||
return vim.fn.system(cmd) == "true\n"
|
||||
end,
|
||||
session_lens = {
|
||||
picker = "snacks"
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
return M
|
||||
83
nvim/lua/config/plugins/blink_cmp.lua
Normal file
83
nvim/lua/config/plugins/blink_cmp.lua
Normal file
@@ -0,0 +1,83 @@
|
||||
-- Heavily based on https://github.com/SwayKh/dotfiles/blob/main/nvim/lua/plugins/blink.lua
|
||||
local M = {}
|
||||
|
||||
local function configure_blink_cmp()
|
||||
local icons = require("config.icons")
|
||||
require("blink.cmp").setup({
|
||||
fuzzy = {
|
||||
prebuilt_binaries = {
|
||||
download = true,
|
||||
},
|
||||
},
|
||||
appearance = {
|
||||
kind_icons = icons.kind,
|
||||
use_nvim_cmp_as_default = true,
|
||||
nerd_font_variant = 'normal',
|
||||
},
|
||||
keymap = {
|
||||
preset = "super-tab",
|
||||
},
|
||||
completion = {
|
||||
list = {
|
||||
selection = { preselect = true, auto_insert = true },
|
||||
},
|
||||
accept = { auto_brackets = { enabled = false } },
|
||||
ghost_text = { enabled = false},
|
||||
menu = {
|
||||
min_width = 35,
|
||||
border = vim.g.border_style,
|
||||
scrolloff = 2,
|
||||
scrollbar = false,
|
||||
draw = {
|
||||
columns = { { "kind_icon" }, { "label", "kind", "source_name", gap = 5 } },
|
||||
align_to = "none",
|
||||
components = {
|
||||
label = { width = { min = 20, fill = true } }, -- default is true
|
||||
label_description = { width = { fill = true } },
|
||||
kind = {
|
||||
width = { fill = true },
|
||||
text = function(ctx)
|
||||
return "" .. ctx.kind .. ""
|
||||
end,
|
||||
},
|
||||
source_name = {
|
||||
width = { fill = true },
|
||||
text = function(ctx)
|
||||
return "[" .. ctx.source_name .. "]"
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
snippets = {
|
||||
preset = "luasnip",
|
||||
},
|
||||
cmdline = {
|
||||
enabled = true
|
||||
},
|
||||
sources = {
|
||||
default = function()
|
||||
local success, node = pcall(vim.treesitter.get_node)
|
||||
if success and node and vim.tbl_contains({ 'comment', 'line_comment', 'block_comment' }, node:type()) then
|
||||
return { 'buffer' }
|
||||
else
|
||||
return { 'lsp', 'path', 'snippets', 'buffer', 'lazydev' }
|
||||
end
|
||||
end,
|
||||
providers = {
|
||||
lazydev = {
|
||||
name = "LazyDev",
|
||||
module = "lazydev.integrations.blink",
|
||||
score_offset = 100,
|
||||
},
|
||||
},
|
||||
per_filetype = {
|
||||
codecompanion = { "codecompanion" },
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
M.configure_blink_cmp = configure_blink_cmp
|
||||
return M
|
||||
82
nvim/lua/config/plugins/hlslens.lua
Normal file
82
nvim/lua/config/plugins/hlslens.lua
Normal file
@@ -0,0 +1,82 @@
|
||||
local M = {}
|
||||
|
||||
M.hlslens_configure = function()
|
||||
require('hlslens').setup(
|
||||
{
|
||||
enable_incsearch = true,
|
||||
calm_down = true,
|
||||
nearest_only = false,
|
||||
override_lens = function(render, posList, nearest, idx, relIdx)
|
||||
local sfw = vim.v.searchforward == 1
|
||||
local indicator, text, chunks
|
||||
local absRelIdx = math.abs(relIdx)
|
||||
if absRelIdx > 1 then
|
||||
indicator = ('%d%s'):format(absRelIdx, sfw ~= (relIdx > 1) and '▲' or '▼')
|
||||
elseif absRelIdx == 1 then
|
||||
indicator = sfw ~= (relIdx == 1) and '▲' or '▼'
|
||||
else
|
||||
indicator = ''
|
||||
end
|
||||
|
||||
local lnum, col = unpack(posList[idx])
|
||||
if nearest then
|
||||
local cnt = #posList
|
||||
if indicator ~= '' then
|
||||
text = ('[%s %d of %d]'):format(indicator, idx, cnt)
|
||||
else
|
||||
text = ('[%d of %d]'):format(idx, cnt)
|
||||
end
|
||||
chunks = { { ' ' }, { text, 'HlSearchLensNear' } }
|
||||
else
|
||||
text = ('[%s %d]'):format(indicator, idx)
|
||||
chunks = { { ' ' }, { text, 'HlSearchLens' } }
|
||||
end
|
||||
render.setVirt(0, lnum - 1, col - 1, chunks, nearest)
|
||||
end
|
||||
}
|
||||
)
|
||||
end
|
||||
|
||||
M.hlslens_keybind = function()
|
||||
return {
|
||||
mode = { "n", "v", "x", "o" },
|
||||
{
|
||||
"n",
|
||||
"<Cmd>execute('normal! ' .. v:count1 .. 'n')<CR><Cmd>lua require('hlslens').start()<CR>",
|
||||
desc = "Next search result",
|
||||
},
|
||||
{
|
||||
"N",
|
||||
"<Cmd>execute('normal! ' .. v:count1 .. 'N')<CR><Cmd>lua require('hlslens').start()<CR>",
|
||||
desc = "Previous search result",
|
||||
},
|
||||
{
|
||||
"*",
|
||||
"*<Cmd>lua require('hlslens').start()<CR>",
|
||||
desc = "Search forward",
|
||||
},
|
||||
{
|
||||
"#",
|
||||
"#<Cmd>lua require('hlslens').start()<CR>",
|
||||
desc = "Search backward",
|
||||
},
|
||||
{
|
||||
"g*",
|
||||
"g*<Cmd>lua require('hlslens').start()<CR>",
|
||||
desc = "Search forward (whole word)",
|
||||
},
|
||||
{
|
||||
"g#",
|
||||
"g#<Cmd>lua require('hlslens').start()<CR>",
|
||||
desc = "Search backward (whole word)",
|
||||
},
|
||||
{
|
||||
"<leader>l",
|
||||
"<Cmd>noh<CR>",
|
||||
desc = "Clear search highlight",
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
return M;
|
||||
37
nvim/lua/config/plugins/lazy.lua
Normal file
37
nvim/lua/config/plugins/lazy.lua
Normal file
@@ -0,0 +1,37 @@
|
||||
local lazypath = vim.fn.stdpath("data") .. "/v3/lazy/lazy.nvim"
|
||||
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
||||
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
|
||||
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
|
||||
if vim.v.shell_error ~= 0 then
|
||||
vim.api.nvim_echo({
|
||||
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
|
||||
{ out, "WarningMsg" },
|
||||
{ "\nPress any key to exit..." },
|
||||
}, true, {})
|
||||
vim.fn.getchar()
|
||||
os.exit(1)
|
||||
end
|
||||
end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
|
||||
local config = require("config.core")
|
||||
require("config.nvim_options")
|
||||
require("config.autocommands")
|
||||
|
||||
vim.g.mapleader = config.leader
|
||||
vim.g.maplocalleader = config.local_leader
|
||||
vim.lsp.set_log_level(config.lsp_log_Level)
|
||||
|
||||
require("lazy").setup({
|
||||
spec = {
|
||||
{ import = "plugins" },
|
||||
},
|
||||
install = { colorscheme = { config.color_scheme } },
|
||||
checker = { enabled = false },
|
||||
rocks = {
|
||||
hererocks = false,
|
||||
enabled = false,
|
||||
}
|
||||
})
|
||||
|
||||
vim.cmd("colorscheme " .. config.color_scheme)
|
||||
213
nvim/lua/config/plugins/mason.lua
Normal file
213
nvim/lua/config/plugins/mason.lua
Normal file
@@ -0,0 +1,213 @@
|
||||
local M = {}
|
||||
|
||||
-- Format buffer preferring LSP attached client over NullLS
|
||||
local function format(buf)
|
||||
local methods = require("null-ls.methods")
|
||||
local null_ls_sources = require("null-ls.sources")
|
||||
local ft = vim.bo[buf].filetype
|
||||
|
||||
local has_null_ls = #null_ls_sources.get_available(ft, methods.internal.FORMATTING) > 0
|
||||
local has_null_ls = false
|
||||
local formatters = vim.lsp.get_clients({
|
||||
bufnr = buf,
|
||||
method = "textDocument/formatting",
|
||||
})
|
||||
|
||||
local first_lsp_client = next(formatters)
|
||||
local client_name = ""
|
||||
if first_lsp_client then
|
||||
client_name = formatters[first_lsp_client].name
|
||||
elseif has_null_ls then
|
||||
client_name = "null-ls"
|
||||
else
|
||||
vim.notify("No formatter client is available for the current buffer", vim.log.levels.WARN)
|
||||
return
|
||||
end
|
||||
vim.notify("Formatting using LSP " .. client_name, vim.log.levels.INFO)
|
||||
vim.lsp.buf.format({
|
||||
bufnr = buf,
|
||||
})
|
||||
end
|
||||
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
|
||||
group = vim.api.nvim_create_augroup("UserLspConfig", {}),
|
||||
callback = function(ev)
|
||||
vim.bo[ev.buf].omnifunc = "v:lua.vim.lsp.omnifunc"
|
||||
local wk = require("which-key")
|
||||
|
||||
wk.add({
|
||||
mode = { "n", "v", "x", "o" },
|
||||
{
|
||||
"gD",
|
||||
function()
|
||||
Snacks.picker.lsp_declarations()
|
||||
end,
|
||||
desc = "Open declarations",
|
||||
},
|
||||
{
|
||||
"gd",
|
||||
function()
|
||||
Snacks.picker.lsp_definitions()
|
||||
end,
|
||||
desc = "Open definitions",
|
||||
},
|
||||
{
|
||||
"gt",
|
||||
function()
|
||||
Snacks.picker.lsp_type_definitions()
|
||||
end,
|
||||
desc = "Open type definitions",
|
||||
},
|
||||
{
|
||||
"gf",
|
||||
function()
|
||||
Snacks.picker.lsp_references()
|
||||
end,
|
||||
desc = "Open references",
|
||||
},
|
||||
{
|
||||
"<leader>a",
|
||||
function()
|
||||
vim.lsp.buf.code_action()
|
||||
end,
|
||||
desc = "Show code actions",
|
||||
},
|
||||
{
|
||||
"<leader>r",
|
||||
function()
|
||||
return ":IncRename " .. vim.fn.expand("<cword>")
|
||||
end,
|
||||
expr = true,
|
||||
noremap = true,
|
||||
desc = "Rename symbol",
|
||||
},
|
||||
{
|
||||
"gs",
|
||||
function()
|
||||
Snacks.picker.lsp_symbols()
|
||||
end,
|
||||
desc = "Open LSP symbols",
|
||||
},
|
||||
{
|
||||
"gS",
|
||||
function()
|
||||
Snacks.picker.lsp_workspace_symbols()
|
||||
end,
|
||||
desc = "Open LSP symbols at workspace level",
|
||||
},
|
||||
{
|
||||
"<leader-d>",
|
||||
function()
|
||||
vim.lsp.buf.hover()
|
||||
end,
|
||||
desc = "Show hover doc",
|
||||
},
|
||||
{
|
||||
"ga",
|
||||
function()
|
||||
format(ev.buf)
|
||||
end,
|
||||
desc = "Format",
|
||||
mode = { "n", "v", "x", "o", "i" },
|
||||
},
|
||||
})
|
||||
end,
|
||||
})
|
||||
|
||||
local function configure_mason()
|
||||
local icons = require("config.icons")
|
||||
local configs = require("config.core")
|
||||
|
||||
|
||||
local mason = require("mason")
|
||||
mason.setup({
|
||||
ui = {
|
||||
icons = {
|
||||
package_installed = icons.installed,
|
||||
package_pending = icons.pending,
|
||||
package_uninstalled = icons.uninstalled,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
local mason_lspconfig = require("mason-lspconfig")
|
||||
mason_lspconfig.setup()
|
||||
|
||||
require("mason-null-ls").setup({
|
||||
ensure_installed = configs.lsp_ensure_installed,
|
||||
automatic_installation = false,
|
||||
handlers = {},
|
||||
})
|
||||
|
||||
local null_ls = require("null-ls")
|
||||
null_ls.setup()
|
||||
end
|
||||
|
||||
local function configure_lsp_progress()
|
||||
require("lsp-progress").setup({
|
||||
decay = 1200,
|
||||
series_format = function(title, message, percentage, done)
|
||||
local builder = {}
|
||||
local has_title = false
|
||||
local has_message = false
|
||||
if type(title) == "string" and string.len(title) > 0 then
|
||||
table.insert(builder, title)
|
||||
has_title = true
|
||||
end
|
||||
if type(message) == "string" and string.len(message) > 0 then
|
||||
table.insert(builder, message)
|
||||
has_message = true
|
||||
end
|
||||
if percentage and (has_title or has_message) then
|
||||
table.insert(builder, string.format("(%.0f%%)", percentage))
|
||||
end
|
||||
return { msg = table.concat(builder, " "), done = done }
|
||||
end,
|
||||
client_format = function(client_name, spinner, series_messages)
|
||||
if #series_messages == 0 then
|
||||
return nil
|
||||
end
|
||||
local builder = {}
|
||||
local done = true
|
||||
for _, series in ipairs(series_messages) do
|
||||
if not series.done then
|
||||
done = false
|
||||
end
|
||||
table.insert(builder, series.msg)
|
||||
end
|
||||
if done then
|
||||
spinner = require("config.icons").installed
|
||||
end
|
||||
return "[" .. client_name .. "] " .. spinner .. " " .. table.concat(builder, ", ")
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
local function configure_tiny_diagnostic()
|
||||
require('tiny-inline-diagnostic').setup({
|
||||
preset = "simple",
|
||||
options = {
|
||||
use_icons_from_diagnostic = false,
|
||||
show_source = {
|
||||
enabled = true,
|
||||
},
|
||||
multilines = {
|
||||
enabled = true,
|
||||
always_show = false,
|
||||
},
|
||||
show_all_diags_on_cursorline = true,
|
||||
break_line = {
|
||||
enabled = true,
|
||||
after = 80,
|
||||
},
|
||||
},
|
||||
})
|
||||
vim.diagnostic.config({ virtual_text = false })
|
||||
end
|
||||
|
||||
M.configure_mason = configure_mason
|
||||
M.configure_lsp_progress = configure_lsp_progress
|
||||
M.configure_tiny_diagnostic = configure_tiny_diagnostic
|
||||
|
||||
return M
|
||||
23
nvim/lua/config/plugins/noice.lua
Normal file
23
nvim/lua/config/plugins/noice.lua
Normal file
@@ -0,0 +1,23 @@
|
||||
local M = {}
|
||||
|
||||
M.configure_noice = function()
|
||||
require("noice").setup({
|
||||
lsp = {
|
||||
-- override markdown rendering so that **cmp** and other plugins use **Treesitter**
|
||||
override = {
|
||||
["vim.lsp.util.convert_input_to_markdown_lines"] = true,
|
||||
["vim.lsp.util.stylize_markdown"] = true,
|
||||
["cmp.entry.get_documentation"] = true, -- requires hrsh7th/nvim-cmp
|
||||
},
|
||||
},
|
||||
presets = {
|
||||
bottom_search = true, -- use a classic bottom cmdline for search
|
||||
command_palette = false, -- position the cmdline and popupmenu together
|
||||
long_message_to_split = true, -- long messages will be sent to a split
|
||||
inc_rename = true, -- enables an input dialog for inc-rename.nvim
|
||||
lsp_doc_border = true, -- add a border to hover docs and signature help
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
return M
|
||||
160
nvim/lua/config/plugins/snacks.lua
Normal file
160
nvim/lua/config/plugins/snacks.lua
Normal file
@@ -0,0 +1,160 @@
|
||||
local M = {}
|
||||
|
||||
local animate_config = {
|
||||
animate = {
|
||||
enabled = vim.fn.has("nvim-0.10") == 1,
|
||||
easing = "outCirc",
|
||||
duration = {
|
||||
step = 10, -- ms per step
|
||||
total = 600, -- maximum duration
|
||||
},
|
||||
fps = 60,
|
||||
},
|
||||
}
|
||||
|
||||
M.configure_snacks = function()
|
||||
local snacks = require("snacks")
|
||||
snacks.setup({
|
||||
animate = animate_config,
|
||||
bigfile = { enabled = true },
|
||||
dim = {
|
||||
enabled = true,
|
||||
animate = animate_config,
|
||||
filter = function(buf)
|
||||
return vim.g.snacks_dim ~= false and vim.b[buf].snacks_dim ~= false and vim.bo[buf].buftype == ""
|
||||
end,
|
||||
},
|
||||
explorer = { enabled = true },
|
||||
indent = {
|
||||
enabled = true,
|
||||
indent = {
|
||||
char = "|",
|
||||
only_scope = true,
|
||||
only_current = true,
|
||||
},
|
||||
animate = animate_config
|
||||
},
|
||||
input = { enabled = true },
|
||||
picker = {
|
||||
enabled = true,
|
||||
sources = {
|
||||
explorer = {
|
||||
cycle = true,
|
||||
auto_close = true,
|
||||
layout = { layout = { position = "right" } },
|
||||
},
|
||||
files = {
|
||||
hidden = true,
|
||||
ignored = true,
|
||||
},
|
||||
buffers = {
|
||||
enabled = true,
|
||||
sort = { fields = { "name" } },
|
||||
win = {
|
||||
input = {
|
||||
keys = {
|
||||
["<c-d>"] = { "bufdelete", mode = { "n", "i" } },
|
||||
},
|
||||
},
|
||||
list = { keys = { ["dd"] = "bufdelete" } },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
lazygit = {
|
||||
configure = true,
|
||||
},
|
||||
notifier = {
|
||||
enabled = true,
|
||||
style = "fancy",
|
||||
top_down = false,
|
||||
},
|
||||
quickfile = { enabled = true },
|
||||
scope = { enabled = true },
|
||||
scroll = { enabled = true },
|
||||
statuscolumn = {
|
||||
enabled = true,
|
||||
statuscolumn = {
|
||||
enabled = true,
|
||||
left = { 'mark', 'sign' },
|
||||
right = { 'fold', 'git' },
|
||||
folds = {
|
||||
open = false,
|
||||
git_hl = false,
|
||||
},
|
||||
git = {
|
||||
patterns = { 'GitSign', 'MiniDiffSign' },
|
||||
},
|
||||
refresh = 50,
|
||||
},
|
||||
},
|
||||
toggle = {
|
||||
enable = true,
|
||||
name = "Toggler",
|
||||
},
|
||||
words = { enabled = true },
|
||||
zen = {
|
||||
enabled = false,
|
||||
toggles = {
|
||||
dim = true,
|
||||
git_signs = false,
|
||||
mini_diff_signs = false,
|
||||
diagnostics = true,
|
||||
inlay_hints = true,
|
||||
},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
M.snacks_keybinds = function()
|
||||
return {
|
||||
{
|
||||
"<leader>e",
|
||||
"<cmd>:lua Snacks.explorer()<cr>",
|
||||
desc = "Open file explorer",
|
||||
},
|
||||
{
|
||||
"<leader>ff",
|
||||
"<cmd>:lua Snacks.picker.files()<cr>",
|
||||
desc = "Find files",
|
||||
},
|
||||
{
|
||||
"<leader>fg",
|
||||
"<cmd>:lua Snacks.picker.grep()<cr>",
|
||||
desc = "Find string in files",
|
||||
},
|
||||
{
|
||||
"<leader>fd",
|
||||
"<cmd>:lua Snacks.picker.diagnostics()<cr>",
|
||||
desc = "Show buffers",
|
||||
},
|
||||
{
|
||||
"<leader>fm",
|
||||
"<cmd>:lua Snacks.picker.man()<cr>",
|
||||
desc = "Show man page",
|
||||
},
|
||||
{
|
||||
"<leader>b",
|
||||
"<cmd>:lua Snacks.picker.buffers()<cr>",
|
||||
desc = "Show buffers",
|
||||
},
|
||||
{
|
||||
"<leader>g",
|
||||
"<cmd>:lua Snacks.lazygit()<cr>",
|
||||
desc = "Show lazygit",
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
M.snacks_toggle_keybinds = function()
|
||||
Snacks.toggle.option("wrap", { name = "Wrap" }):map("<leader>uw")
|
||||
Snacks.toggle.option("relativenumber", { name = "Relative Number" }):map("<leader>uL")
|
||||
Snacks.toggle.line_number():map("<leader>ul")
|
||||
Snacks.toggle.diagnostics():map("<leader>uD")
|
||||
Snacks.toggle.dim():map("<leader>ud")
|
||||
Snacks.toggle.treesitter():map("<leader>ut")
|
||||
Snacks.toggle.inlay_hints():map("<leader>uh")
|
||||
Snacks.toggle.indent():map("<leader>ug")
|
||||
end
|
||||
|
||||
return M
|
||||
24
nvim/lua/config/plugins/telescope.lua
Normal file
24
nvim/lua/config/plugins/telescope.lua
Normal file
@@ -0,0 +1,24 @@
|
||||
local M = {}
|
||||
|
||||
local function telescope_configure()
|
||||
local telescope = require("telescope")
|
||||
|
||||
telescope.setup({
|
||||
defaults = {
|
||||
theme = "center",
|
||||
sorting_strategy = "ascending",
|
||||
layout_config = {
|
||||
horizontal = {
|
||||
prompt_position = "top",
|
||||
preview_width = 0.3,
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
telescope.load_extension("noice")
|
||||
telescope.load_extension("ui-select")
|
||||
end
|
||||
|
||||
M.telescope_configure = telescope_configure
|
||||
return M
|
||||
74
nvim/lua/config/plugins/treesitter.lua
Normal file
74
nvim/lua/config/plugins/treesitter.lua
Normal file
@@ -0,0 +1,74 @@
|
||||
local M = {}
|
||||
local function is_buf_too_large(buf)
|
||||
local max_filesize = 100 * 1024 -- 100 KB
|
||||
local ok, stats = pcall(vim.uv.fs_stat, vim.api.nvim_buf_get_name(buf))
|
||||
if ok and stats and stats.size > max_filesize then
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function configure_treesitter()
|
||||
local treesitter = require("nvim-treesitter.configs")
|
||||
local core_configs = require("config.core").treesitter
|
||||
|
||||
treesitter.setup({
|
||||
modules = {},
|
||||
autotag = { enable = true },
|
||||
context_commentstring = { enable = true, enable_autocmd = false },
|
||||
highlight = {
|
||||
enable = true,
|
||||
disable = function(_, buf)
|
||||
is_buf_too_large(buf)
|
||||
end,
|
||||
additional_vim_regex_highlighting = false,
|
||||
},
|
||||
autopairs = { enable = true },
|
||||
indent = { enable = true },
|
||||
ensure_installed = core_configs.ensure_installed,
|
||||
ignore_install = {},
|
||||
sync_install = true,
|
||||
auto_install = false,
|
||||
incremental_selection = {
|
||||
enable = true,
|
||||
keymaps = {
|
||||
init_selection = "<Leader>ss",
|
||||
node_incremental = "<Leader>si",
|
||||
scope_incremental = "<Leader>sc",
|
||||
node_decremental = "<Leader>sd",
|
||||
},
|
||||
},
|
||||
refactor = {
|
||||
highlight_definitions = {
|
||||
enable = true,
|
||||
clear_on_cursor_move = true,
|
||||
},
|
||||
highlight_current_scope = { enable = true },
|
||||
},
|
||||
textobjects = {
|
||||
select = {
|
||||
enable = true,
|
||||
lookahead = true,
|
||||
keymaps = {
|
||||
["af"] = "@function.outer",
|
||||
["if"] = "@function.inner",
|
||||
["ac"] = "@class.outer",
|
||||
["ic"] = { query = "@class.inner", desc = "Select inner part of a class region" },
|
||||
["as"] = { query = "@local.scope", query_group = "locals", desc = "Select language scope" },
|
||||
},
|
||||
selection_modes = {
|
||||
["@parameter.outer"] = "v", -- charwise
|
||||
["@function.outer"] = "V", -- linewise
|
||||
["@class.outer"] = "<c-v>", -- blockwise
|
||||
},
|
||||
include_surrounding_whitespace = true,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
end
|
||||
|
||||
M.is_buf_too_large = is_buf_too_large
|
||||
M.configure_treesitter = configure_treesitter
|
||||
|
||||
return M
|
||||
35
nvim/lua/config/plugins/vim_tmux_navigator.lua
Normal file
35
nvim/lua/config/plugins/vim_tmux_navigator.lua
Normal file
@@ -0,0 +1,35 @@
|
||||
local M = {}
|
||||
|
||||
local function vim_tmux_navigator_keybinds()
|
||||
local wk = require("which-key")
|
||||
wk.add({
|
||||
{
|
||||
"<c-h>",
|
||||
"<cmd><C-U>TmuxNavigateLeft<cr>",
|
||||
desc = "Go to tmux left panel",
|
||||
},
|
||||
{
|
||||
"<c-l>",
|
||||
"<cmd><C-U>TmuxNavigateRight<cr>",
|
||||
desc = "Go to tmux right panel",
|
||||
},
|
||||
{
|
||||
"<c-j>",
|
||||
"<cmd><C-U>TmuxNavigateDown<cr>",
|
||||
desc = "Go to tmux down panel",
|
||||
},
|
||||
{
|
||||
"<c-k>",
|
||||
"<cmd><C-U>TmuxNavigateUp<cr>",
|
||||
desc = "Go to tmux up panel",
|
||||
},
|
||||
{
|
||||
"<c-\\>",
|
||||
"<cmd><C-U>TmuxNavigatePrevious<cr>",
|
||||
desc = "Go to tmux previous panel",
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
M.vim_tmux_navigator_keybinds = vim_tmux_navigator_keybinds
|
||||
return M
|
||||
54
nvim/lua/config/utilities/commands.lua
Normal file
54
nvim/lua/config/utilities/commands.lua
Normal file
@@ -0,0 +1,54 @@
|
||||
vim.api.nvim_create_user_command('ShowBufType', function()
|
||||
print(vim.bo.buftype)
|
||||
end, {})
|
||||
|
||||
vim.api.nvim_create_user_command('ShowFileType', function()
|
||||
print(vim.bo.filetype)
|
||||
end, {})
|
||||
|
||||
-- From https://www.reddit.com/r/neovim/comments/1jmqd7t/comment/mkdswfc/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button
|
||||
vim.api.nvim_create_autocmd('LspAttach', {
|
||||
group = vim.api.nvim_create_augroup("folding", {}),
|
||||
callback = function(args)
|
||||
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
||||
if client and client.supports_method('textDocument/foldingRange') then
|
||||
local win = vim.api.nvim_get_current_win()
|
||||
vim.wo[win][0].foldmethod = 'expr'
|
||||
vim.wo[win][0].foldexpr = 'v:lua.vim.lsp.foldexpr()'
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd('LspDetach', {
|
||||
group = vim.api.nvim_create_augroup("folding", {}),
|
||||
command = 'setl foldexpr<'
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd('BufEnter', {
|
||||
group = vim.api.nvim_create_augroup("snacks", {}),
|
||||
callback = function()
|
||||
Snacks.dim()
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_user_command('ShowImplementation', function()
|
||||
local get_function_implementation_treesitter = require("config.utilities.functions").get_function_implementation_treesitter
|
||||
local text = get_function_implementation_treesitter()
|
||||
if not text then
|
||||
vim.notify("No declaration found", vim.log.levels.INFO)
|
||||
return
|
||||
end
|
||||
|
||||
-- Create a new scratch buffer
|
||||
vim.cmd('vnew') -- or 'new' for horizontal split
|
||||
local buf = vim.api.nvim_get_current_buf()
|
||||
|
||||
-- Set buffer options
|
||||
vim.bo[buf].buftype = 'nofile'
|
||||
vim.bo[buf].bufhidden = 'wipe'
|
||||
vim.bo[buf].swapfile = false
|
||||
vim.bo[buf].modifiable = true
|
||||
|
||||
-- Set lines
|
||||
vim.api.nvim_buf_set_lines(buf, 0, -1, false, vim.split(text, '\n'))
|
||||
end, {})
|
||||
51
nvim/lua/config/utilities/functions.lua
Normal file
51
nvim/lua/config/utilities/functions.lua
Normal file
@@ -0,0 +1,51 @@
|
||||
local M = {}
|
||||
|
||||
M.get_function_implementation_treesitter = function()
|
||||
local params = vim.lsp.util.make_position_params()
|
||||
local ts = vim.treesitter
|
||||
local result_text = nil
|
||||
|
||||
vim.lsp.buf_request(0, 'textDocument/definition', params, function(_, result, _, _)
|
||||
if not result or vim.tbl_isempty(result) then
|
||||
vim.notify('No definition found', vim.log.levels.INFO)
|
||||
return
|
||||
end
|
||||
|
||||
local location = result[1]
|
||||
local uri = location.uri or location.targetUri
|
||||
local range = location.range or location.targetRange
|
||||
local bufnr = vim.uri_to_bufnr(uri)
|
||||
|
||||
if not vim.api.nvim_buf_is_loaded(bufnr) then
|
||||
vim.fn.bufload(bufnr)
|
||||
end
|
||||
|
||||
local parser = ts.get_parser(bufnr, 'c')
|
||||
local tree = parser:parse()[1]
|
||||
local root = tree:root()
|
||||
|
||||
local start_row = range.start.line
|
||||
local start_col = range.start.character
|
||||
|
||||
local function is_within(node)
|
||||
local sr, sc, er, ec = node:range()
|
||||
return (start_row > sr or (start_row == sr and start_col >= sc)) and
|
||||
(start_row < er or (start_row == er and start_col <= ec))
|
||||
end
|
||||
|
||||
for node in root:iter_children() do
|
||||
if node:type() == 'function_definition' and is_within(node) then
|
||||
local sr, _, er, _ = node:range()
|
||||
local lines = vim.api.nvim_buf_get_lines(bufnr, sr, er + 1, false)
|
||||
result_text = table.concat(lines, '\n')
|
||||
break
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
-- Wait for async response
|
||||
vim.wait(1000, function() return result_text ~= nil end, 10)
|
||||
return result_text
|
||||
end
|
||||
|
||||
return M
|
||||
8
nvim/lua/plugins/auto-save.lua
Normal file
8
nvim/lua/plugins/auto-save.lua
Normal file
@@ -0,0 +1,8 @@
|
||||
local configure_auto_save = require("config.plugins.auto-save").configure_auto_save
|
||||
return {
|
||||
"okuuva/auto-save.nvim",
|
||||
version = '^1.0.0', -- see https://devhints.io/semver, alternatively use '*' to use the latest tagged release
|
||||
cmd = "ASToggle", -- optional for lazy loading on command
|
||||
event = { "InsertLeave", "TextChanged" }, -- optional for lazy loading on trigger events
|
||||
config = configure_auto_save
|
||||
}
|
||||
7
nvim/lua/plugins/auto-session.lua
Normal file
7
nvim/lua/plugins/auto-session.lua
Normal file
@@ -0,0 +1,7 @@
|
||||
local as = require("config.plugins.auto-session")
|
||||
|
||||
return {
|
||||
"rmagatti/auto-session",
|
||||
lazy = false,
|
||||
config = as.configure_auto_session
|
||||
}
|
||||
5
nvim/lua/plugins/autopairs.lua
Normal file
5
nvim/lua/plugins/autopairs.lua
Normal file
@@ -0,0 +1,5 @@
|
||||
return {
|
||||
'windwp/nvim-autopairs',
|
||||
event = "InsertEnter",
|
||||
config = true
|
||||
}
|
||||
7
nvim/lua/plugins/better-scape.lua
Normal file
7
nvim/lua/plugins/better-scape.lua
Normal file
@@ -0,0 +1,7 @@
|
||||
return {
|
||||
"max397574/better-escape.nvim",
|
||||
config = function()
|
||||
require("better_escape").setup()
|
||||
end,
|
||||
event = "InsertEnter",
|
||||
}
|
||||
45
nvim/lua/plugins/blink_cmp.lua
Normal file
45
nvim/lua/plugins/blink_cmp.lua
Normal file
@@ -0,0 +1,45 @@
|
||||
local configure_blink_cmp = require("config.plugins.blink_cmp").configure_blink_cmp
|
||||
|
||||
local additional_sources = {
|
||||
-- Snippets
|
||||
{
|
||||
"L3MON4D3/LuaSnip",
|
||||
version = 'v2.*',
|
||||
dependencies = { "rafamadriz/friendly-snippets" },
|
||||
build = "make install_jsregexp",
|
||||
config = function()
|
||||
require("luasnip.loaders.from_vscode").lazy_load()
|
||||
end
|
||||
},
|
||||
{
|
||||
"folke/lazydev.nvim",
|
||||
ft = "lua",
|
||||
opts = {
|
||||
library = {
|
||||
{ path = "${3rd}/luv/library", words = { "vim%.uv" } },
|
||||
},
|
||||
},
|
||||
},
|
||||
"Jezda1337/nvim-html-css",
|
||||
"hrsh7th/cmp-nvim-lua",
|
||||
"saadparwaiz1/cmp_luasnip",
|
||||
"petertriho/cmp-git",
|
||||
}
|
||||
|
||||
return {
|
||||
{
|
||||
"saghen/blink.cmp",
|
||||
dependencies = {
|
||||
{
|
||||
'saghen/blink.compat',
|
||||
version = '*',
|
||||
lazy = true,
|
||||
opts = {},
|
||||
},
|
||||
additional_sources,
|
||||
},
|
||||
version = "v1.*",
|
||||
config = configure_blink_cmp,
|
||||
event = { 'InsertEnter' }
|
||||
},
|
||||
}
|
||||
8
nvim/lua/plugins/hardtime.lua
Normal file
8
nvim/lua/plugins/hardtime.lua
Normal file
@@ -0,0 +1,8 @@
|
||||
return {
|
||||
{
|
||||
"m4xshen/hardtime.nvim",
|
||||
lazy = false,
|
||||
dependencies = { "MunifTanjim/nui.nvim" },
|
||||
opts = {},
|
||||
},
|
||||
}
|
||||
9
nvim/lua/plugins/hlslens.lua
Normal file
9
nvim/lua/plugins/hlslens.lua
Normal file
@@ -0,0 +1,9 @@
|
||||
local hlslens_configure = require("config.plugins.hlslens").hlslens_configure
|
||||
local hlslens_keybind = require("config.plugins.hlslens").hlslens_keybind
|
||||
|
||||
return {
|
||||
'kevinhwang91/nvim-hlslens',
|
||||
config = hlslens_configure,
|
||||
keys = hlslens_keybind(),
|
||||
-- lazy = true,
|
||||
}
|
||||
44
nvim/lua/plugins/mason.lua
Normal file
44
nvim/lua/plugins/mason.lua
Normal file
@@ -0,0 +1,44 @@
|
||||
local configure_mason = require("config.plugins.mason").configure_mason
|
||||
local configure_lsp_progress = require("config.plugins.mason").configure_lsp_progress
|
||||
local configure_tiny_diagnostic = require("config.plugins.mason").configure_tiny_diagnostic
|
||||
|
||||
return {
|
||||
"mason-org/mason.nvim",
|
||||
dependencies = {
|
||||
{
|
||||
"mason-org/mason-lspconfig.nvim",
|
||||
},
|
||||
{
|
||||
"smjonas/inc-rename.nvim",
|
||||
opts = {}
|
||||
},
|
||||
"WhoIsSethDaniel/mason-tool-installer.nvim",
|
||||
"neovim/nvim-lspconfig",
|
||||
"nvimtools/none-ls.nvim",
|
||||
{
|
||||
"jay-babu/mason-null-ls.nvim",
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
-- dependencies = {
|
||||
-- "williamboman/mason.nvim",
|
||||
-- "nvimtools/none-ls.nvim",
|
||||
-- },
|
||||
},
|
||||
{
|
||||
"linrongbin16/lsp-progress.nvim",
|
||||
config = configure_lsp_progress
|
||||
},
|
||||
{
|
||||
"rachartier/tiny-inline-diagnostic.nvim",
|
||||
event = "VeryLazy",
|
||||
priority = 1000,
|
||||
config = configure_tiny_diagnostic
|
||||
},
|
||||
{
|
||||
'numToStr/Comment.nvim',
|
||||
opts = {}
|
||||
}
|
||||
},
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
cmd = "Mason",
|
||||
config = configure_mason,
|
||||
}
|
||||
12
nvim/lua/plugins/noice.lua
Normal file
12
nvim/lua/plugins/noice.lua
Normal file
@@ -0,0 +1,12 @@
|
||||
local configure_noice = require("config.plugins.noice").configure_noice
|
||||
|
||||
return {
|
||||
{
|
||||
"folke/noice.nvim",
|
||||
event = "VeryLazy",
|
||||
dependencies = {
|
||||
"MunifTanjim/nui.nvim",
|
||||
},
|
||||
config = configure_noice,
|
||||
}
|
||||
}
|
||||
7
nvim/lua/plugins/plenary.lua
Normal file
7
nvim/lua/plugins/plenary.lua
Normal file
@@ -0,0 +1,7 @@
|
||||
return {
|
||||
{
|
||||
'nvim-lua/plenary.nvim',
|
||||
lazy = true,
|
||||
priority = 900,
|
||||
}
|
||||
}
|
||||
17
nvim/lua/plugins/snacks.lua
Normal file
17
nvim/lua/plugins/snacks.lua
Normal file
@@ -0,0 +1,17 @@
|
||||
local configure_snacks = require("config.plugins.snacks").configure_snacks
|
||||
local snacks_keybinds = require("config.plugins.snacks").snacks_keybinds
|
||||
local snacks_toggle_keybinds = require("config.plugins.snacks").snacks_toggle_keybinds
|
||||
|
||||
return {
|
||||
"folke/snacks.nvim",
|
||||
priority = 1000,
|
||||
lazy = false,
|
||||
config = configure_snacks,
|
||||
keys = snacks_keybinds(),
|
||||
init = function()
|
||||
vim.api.nvim_create_autocmd("User", {
|
||||
pattern = "VeryLazy",
|
||||
callback = snacks_toggle_keybinds,
|
||||
})
|
||||
end,
|
||||
}
|
||||
15
nvim/lua/plugins/telescope.lua
Normal file
15
nvim/lua/plugins/telescope.lua
Normal file
@@ -0,0 +1,15 @@
|
||||
local telescope_configure = require("config.plugins.telescope").telescope_configure
|
||||
|
||||
return {
|
||||
{
|
||||
"nvim-telescope/telescope.nvim",
|
||||
branch = "0.1.x",
|
||||
dependencies = {
|
||||
"nvim-lua/plenary.nvim",
|
||||
'nvim-telescope/telescope-ui-select.nvim',
|
||||
},
|
||||
cmd = { "Telescope" },
|
||||
config = telescope_configure,
|
||||
priority = 800,
|
||||
}
|
||||
}
|
||||
48
nvim/lua/plugins/tokyo-night.lua
Normal file
48
nvim/lua/plugins/tokyo-night.lua
Normal file
@@ -0,0 +1,48 @@
|
||||
return {
|
||||
"folke/tokyonight.nvim",
|
||||
lazy = false,
|
||||
priority = 1000,
|
||||
opts = {
|
||||
on_highlights = function(hl, c)
|
||||
local prompt = "#2d3149"
|
||||
local active_color_line = "#cfc9b2"
|
||||
local color_line = "#b2b8cf"
|
||||
hl.LineNrAbove = {
|
||||
fg = color_line
|
||||
}
|
||||
hl.LineNrBelow = {
|
||||
fg = color_line
|
||||
}
|
||||
hl.CursorLineNr = {
|
||||
fg = active_color_line
|
||||
}
|
||||
hl.TelescopeNormal = {
|
||||
bg = c.bg_dark,
|
||||
fg = c.fg_dark,
|
||||
}
|
||||
hl.TelescopeBorder = {
|
||||
bg = c.bg_dark,
|
||||
fg = c.bg_dark,
|
||||
}
|
||||
hl.TelescopePromptNormal = {
|
||||
bg = prompt,
|
||||
}
|
||||
hl.TelescopePromptBorder = {
|
||||
bg = prompt,
|
||||
fg = prompt,
|
||||
}
|
||||
hl.TelescopePromptTitle = {
|
||||
bg = prompt,
|
||||
fg = prompt,
|
||||
}
|
||||
hl.TelescopePreviewTitle = {
|
||||
bg = c.bg_dark,
|
||||
fg = c.bg_dark,
|
||||
}
|
||||
hl.TelescopeResultsTitle = {
|
||||
bg = c.bg_dark,
|
||||
fg = c.bg_dark,
|
||||
}
|
||||
end,
|
||||
},
|
||||
}
|
||||
18
nvim/lua/plugins/treesitter.lua
Normal file
18
nvim/lua/plugins/treesitter.lua
Normal file
@@ -0,0 +1,18 @@
|
||||
local configure_treesitter = require("config.plugins.treesitter").configure_treesitter
|
||||
|
||||
return {
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
dependencies = {
|
||||
"nvim-treesitter/nvim-treesitter-context",
|
||||
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||
"windwp/nvim-ts-autotag",
|
||||
},
|
||||
priority = 999,
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
build = function()
|
||||
require("nvim-treesitter.install").update({ with_sync = true })
|
||||
end,
|
||||
config = configure_treesitter,
|
||||
},
|
||||
}
|
||||
15
nvim/lua/plugins/vim_tmux_navigator.lua
Normal file
15
nvim/lua/plugins/vim_tmux_navigator.lua
Normal file
@@ -0,0 +1,15 @@
|
||||
local vim_tmux_navigator_keybinds = require("config.plugins.vim_tmux_navigator").vim_tmux_navigator_keybinds
|
||||
|
||||
return {
|
||||
"christoomey/vim-tmux-navigator",
|
||||
init = vim_tmux_navigator_keybinds,
|
||||
lazy = false,
|
||||
cmd = {
|
||||
"TmuxNavigateLeft",
|
||||
"TmuxNavigateDown",
|
||||
"TmuxNavigateUp",
|
||||
"TmuxNavigateRight",
|
||||
"TmuxNavigatePrevious",
|
||||
"TmuxNavigatorProcessList",
|
||||
},
|
||||
}
|
||||
7
nvim/lua/plugins/webdevicons.lua
Normal file
7
nvim/lua/plugins/webdevicons.lua
Normal file
@@ -0,0 +1,7 @@
|
||||
return {
|
||||
{
|
||||
"nvim-tree/nvim-web-devicons",
|
||||
priority = 900,
|
||||
opts = {}
|
||||
},
|
||||
}
|
||||
19
nvim/lua/plugins/whichkey.lua
Normal file
19
nvim/lua/plugins/whichkey.lua
Normal file
@@ -0,0 +1,19 @@
|
||||
return {
|
||||
{
|
||||
"folke/which-key.nvim",
|
||||
event = "VeryLazy",
|
||||
init = function()
|
||||
vim.o.timeout = true
|
||||
vim.o.timeoutlen = 60
|
||||
end,
|
||||
config = function()
|
||||
require("which-key").setup({
|
||||
preset = "modern"
|
||||
})
|
||||
local wk = require("which-key")
|
||||
local keybinds = require("config.keybinds")
|
||||
wk.add(keybinds)
|
||||
end,
|
||||
priority = 900,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user