(neovim) switch to own configuration

This commit is contained in:
Bartek Stalewski 2025-06-28 14:33:33 +02:00
parent 957ec52ca8
commit 977453fa05
No known key found for this signature in database
51 changed files with 1145 additions and 358 deletions

View file

@ -1,175 +0,0 @@
-- disable netrw
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
-- install 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)
-- define plugins
require("lazy").setup({
"jdhao/whitespace.nvim",
"lewis6991/gitsigns.nvim",
"lukas-reineke/indent-blankline.nvim",
"numToStr/Comment.nvim",
"NvChad/nvim-colorizer.lua",
"nvim-lualine/lualine.nvim",
"nvim-treesitter/nvim-treesitter",
"tanvirtin/monokai.nvim",
{ "nvim-telescope/telescope.nvim",
dependencies = { 'nvim-lua/plenary.nvim' }
},
{ "nvim-neo-tree/neo-tree.nvim",
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-tree/nvim-web-devicons",
"MunifTanjim/nui.nvim"
},
},
{
"folke/which-key.nvim",
config = function()
vim.o.timeout = true
vim.o.timeoutlen = 300
require("which-key").setup({
})
end,
},
})
-- start & setup plugins
-- colorscheme has to be first
require("monokai").setup()
require("gitsigns").setup({
signs = {
add = { text = "" },
change = { text = "" },
delete = { text = "" },
topdelete = { text = "" },
changedelete = { text = "" },
untracked = { text = "" },
},
})
require("indent_blankline").setup()
require("Comment").setup()
require("colorizer").setup()
require("lualine").setup({
options = {
component_separators = '',
icons_enabled = true,
section_separators = '',
theme = "molokai",
},
sections = {
lualine_a = { "mode" },
lualine_b = { { "filename", file_status = true, path = 1 } },
lualine_c = { "branch" },
lualine_x = { "filetype" },
lualine_y = { "progress" },
lualine_z = { "location" },
},
tabline = {
lualine_a = { "buffers" },
},
})
require("nvim-treesitter.configs").setup({
build = ":TSUpdate",
ensure_installed = { "bash", "python", "terraform", "vim", "yaml" },
highlight = {
enable = true,
use_languagetree = true,
},
})
require("neo-tree").setup({
close_if_last_window = false,
sort_case_insensitive = true,
window = {
position = "left",
auto_expand_width = true,
-- width = 100,
mappings = {
["s"] = "open_split",
["v"] = "open_vsplit",
},
},
nesting_rules = {},
filesystem = {
filtered_items = {
visible = true,
hide_dotfiles = false,
hide_gitignored = true,
},
},
})
-- modify colorcheme
vim.api.nvim_set_hl(0, "ColorColumn", { bg = "#770000" })
vim.api.nvim_set_hl(0, "DiffChange", { bg = NONE, fg = "#e7c547" })
vim.api.nvim_set_hl(0, "DiffText", { bg = NONE, fg = "#ff8700" })
vim.api.nvim_set_hl(0, "LineNr", { bg = NONE, fg = "#465457" })
vim.api.nvim_set_hl(0, "NonText", { bg = NONE })
vim.api.nvim_set_hl(0, "Normal", { bg = NONE })
vim.api.nvim_set_hl(0, "SignColumn", { bg = NONE })
vim.api.nvim_set_hl(0, "SpellBad", { bg = "#770000", fg = "#ffffff" })
vim.api.nvim_set_hl(0, "Visual", { bg = "#005577", fg = "#ffffff" })
-- global options
vim.opt.list = true
vim.opt.cursorline = true
vim.opt.expandtab = true
vim.opt.gdefault = true
vim.opt.hlsearch = false
vim.opt.ignorecase = true
vim.opt.number = true
vim.opt.shiftround = true
vim.opt.showmode = false
vim.opt.smartcase = true
vim.opt.splitbelow = true
vim.opt.splitright = true
vim.opt.termguicolors = true
vim.opt.writebackup = false
vim.opt.clipboard = ""
vim.opt.mouse = ""
vim.opt.tabstop = 2
vim.opt.scrolloff = 5
vim.opt.updatetime = 100
vim.opt.shiftwidth = 2
vim.opt.showtabline = 2
vim.opt.softtabstop = 2
-- configure mappings
vim.g.mapleader = " "
vim.keymap.set("i", "<C-a>", "<esc>I", { silent = true })
vim.keymap.set("i", "<C-e>", "<esc>A", { silent = true })
vim.keymap.set("n", "<esc><cr>", "<esc><cmd>wq!<cr>", { silent = true })
vim.keymap.set("n", "<leader>/", "<esc><cmd>lua require('Comment.api').toggle.linewise.count(vim.v.count > 0 and vim.v.count or 1)<cr>", { silent = true, desc = "toggle comment" })
vim.keymap.set("n", "<leader>c", '<cmd>execute "set colorcolumn=" . (&colorcolumn == "" ? "80,120" : "")<cr>', { silent = true, desc = "toggle column" })
vim.keymap.set("n", "<leader>fb", require("telescope.builtin").buffers, { desc = "find buffer" })
vim.keymap.set("n", "<leader>ff", require("telescope.builtin").find_files, { desc = "find file" })
vim.keymap.set("n", "<leader>fg", require("telescope.builtin").live_grep, { desc = "find text" })
vim.keymap.set("n", "<leader>h", "<cmd>set hlsearch!<cr>", { silent = true, desc = "toggle hlsearch" })
vim.keymap.set("n", "<leader>j", "<cmd>bprevious<cr>", { silent = true, desc = "previous buffer" })
vim.keymap.set("n", "<leader>k", "<cmd>bnext<cr>", { silent = true, desc = "next buffer" })
vim.keymap.set("n", "<leader>n", "<cmd>set nonumber!<cr><cmd>Gitsigns toggle_signs<cr><cmd>IndentBlanklineToggle<cr>", { silent = true, desc = "toggle decorations" })
vim.keymap.set("n", "<leader>s", "<cmd>set spell!<cr>", { silent = true, desc = "toggle spell" })
vim.keymap.set("n", "<leader>t", "<cmd>Neotree toggle<cr>", { silent = true, desc = "toggle tree" })
vim.keymap.set("n", "<leader>x", "<cmd>bd<cr>", { silent = true, desc = "close buffer" })
vim.keymap.set("n", "<tab>", "<C-w>w", { silent = true })
vim.keymap.set("v", "<leader>/", "<esc><cmd>lua require('Comment.api').toggle.linewise(vim.fn.visualmode())<cr>", { silent = true, desc = "toggle comment" })
-- autocmd
vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, {
pattern = {"*.gotmpl"},
callback = function() vim.bo.filetype = "yaml" end,
})

View file

@ -0,0 +1,2 @@
-- bootstrap lazy.nvim, LazyVim and your plugins
require("config.lazy")

View file

@ -0,0 +1,25 @@
-- Autocmds are automatically loaded on the VeryLazy event
-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
--
-- Add any additional autocmds here
-- with `vim.api.nvim_create_autocmd`
--
-- Or remove existing autocmds by their group name (which is prefixed with `lazyvim_` for the defaults)
-- e.g. vim.api.nvim_del_augroup_by_name("lazyvim_wrap_spell")
vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, {
pattern = { "helmfile.y?ml", "*.gotmpl" },
callback = function()
vim.cmd("set filetype=helm")
end,
})
vim.api.nvim_create_autocmd({ "BufReadPre" }, {
callback = function()
vim.api.nvim_set_hl(0, "ColorColumn", { bg = "#770000" })
vim.api.nvim_set_hl(0, "DiffChange", { bg = "NONE", fg = "#e7c547" })
vim.api.nvim_set_hl(0, "DiffText", { bg = "NONE", fg = "#ff8700" })
vim.api.nvim_set_hl(0, "SpellBad", { bg = "#770000", fg = "#ffffff" })
vim.api.nvim_set_hl(0, "Visual", { bg = "#0094d8", fg = "#ffffff" })
end,
})

View file

@ -0,0 +1,67 @@
-- Keymaps are automatically loaded on the VeryLazy event
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
-- Add any additional keymaps here
local map = vim.keymap.set
local nomap = vim.keymap.del
nomap("n", "<leader><space>")
nomap("n", "<leader>,")
nomap("n", "<leader>.")
nomap("n", "<leader>?")
nomap("n", "<leader>K")
nomap("n", "<leader>l")
nomap("n", "<leader>L")
nomap("n", "<leader>S")
nomap("n", "<leader>`")
nomap("n", "<leader>bb")
nomap("n", "<leader>bD")
nomap("n", "<leader>bo")
nomap("n", "<leader>E")
nomap("n", "<leader>fB")
nomap("n", "<leader>fe")
nomap("n", "<leader>fE")
nomap("n", "<leader>fn")
nomap("n", "<leader>fp")
nomap("n", "<leader>fR")
nomap("n", "<leader>ft")
nomap("n", "<leader>fT")
nomap("n", "<leader>gY")
nomap("n", "<leader>gS")
nomap("n", "<leader>qq")
nomap("n", "<leader>xl")
nomap("n", "<leader>xq")
map("i", "<C-a>", "<esc>I")
map("i", "<C-e>", "<esc>A")
map("n", "<esc><cr>", "<esc><cmd>wq!<cr>", { desc = "Save and Exit", remap = true })
map("n", "<tab>", "<C-w>w", { desc = "Switch Pane", remap = true })
map("n", "<leader>-", "<C-W>s", { desc = "Split Horizontally", remap = true })
map("n", "<leader>/", "gcc", { desc = "Toggle Comments", remap = true })
map("n", "<leader>|", "<C-W>v", { desc = "Split Vertically", remap = true })
map("n", "<leader>bl", function()
Snacks.picker.buffers()
end, { desc = "Buffer List", remap = true })
map("n", "<leader>b[", "<cmd>bprevious<CR>", { desc = "Previous Buffer", remap = true })
map("n", "<leader>b]", "<cmd>bnext<CR>", { desc = "Next Buffer", remap = true })
map("n", "<leader>bn", "<cmd>enew<CR>", { desc = "New Buffer", remap = true })
map("n", "<leader>h", "<cmd>set hlsearch!<cr>", { desc = "Toggle hlsearch", remap = true })
map(
"n",
"<leader>m",
'<cmd>execute "set colorcolumn=" . (&colorcolumn == "" ? "80,120" : "")<cr>',
{ desc = "Toggle Columns", remap = true }
)
map("n", "<leader>T", function()
Snacks.terminal()
end, { desc = "Terminal", remap = true })
map("v", "<leader>/", "gc", { desc = "Toggle Comments", remap = true })

View file

@ -0,0 +1,40 @@
return {
"nvim-lualine/lualine.nvim",
opts = {
options = {
theme = "powerline",
section_separators = "",
component_separators = "",
globalstatus = false,
},
sections = {
lualine_c = {
{
"diagnostics",
symbols = {
error = LazyVim.config.icons.diagnostics.Error,
warn = LazyVim.config.icons.diagnostics.Warn,
info = LazyVim.config.icons.diagnostics.Info,
hint = LazyVim.config.icons.diagnostics.Hint,
},
},
{ "filetype", icon_only = true, separator = "", padding = { left = 1, right = 0 } },
{ "filename", file_status = true, path = 1 },
},
lualine_x = {
{
"diff",
symbols = {
added = LazyVim.config.icons.git.added,
modified = LazyVim.config.icons.git.modified,
removed = LazyVim.config.icons.git.removed,
},
},
},
lualine_z = {},
},
tabline = {
lualine_a = { "buffers" },
},
},
}

View file

@ -0,0 +1,15 @@
return {
{
"loctvl842/monokai-pro.nvim",
priority = 1000,
opts = {
filter = "classic",
},
},
{
"LazyVim/LazyVim",
opts = {
colorscheme = "monokai-pro",
},
},
}

View file

@ -0,0 +1,28 @@
return {
"folke/snacks.nvim",
opts = {
dashboard = { enabled = false },
},
keys = {
{
"<leader>n",
function()
vim.cmd("set number!")
vim.cmd('execute "set signcolumn=" . (&signcolumn == "yes" ? "no" : "yes")')
if Snacks.indent.enabled then
Snacks.indent.disable()
else
Snacks.indent.enable()
end
end,
desc = "Toggle Decorations",
},
{
"<leader>e",
function()
Snacks.explorer()
end,
desc = "File Explorer",
},
},
}

View file

@ -0,0 +1,18 @@
return {
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = {
"bash",
"diff",
"gotmpl",
"helm",
"json",
"lua",
"markdown",
"markdown_inline",
"python",
"terraform",
"vim",
},
},
}

View file

@ -0,0 +1,35 @@
return {
"folke/which-key.nvim",
event = "VeryLazy",
opts_extend = { "spec" },
opts = {
preset = "helix",
icons = {
mappings = false,
},
defaults = {},
spec = {
{
mode = { "n", "v" },
{
"<leader>b",
group = "buffer",
expand = function()
return require("which-key.extras").expand.buf()
end,
},
{ "<leader><tab>", group = "tabs", hidden = true },
{ "<leader>d", group = "debug", hidden = true },
{ "<leader>dp", group = "profiler", hidden = true },
{ "<leader>gh", group = "hunks", hidden = true },
{ "<leader>q", group = "quit/session", hidden = true },
{ "<leader>s", group = "search", hidden = true },
{ "<leader>t", hidden = true },
{ "<leader>u", group = "ui", hidden = true },
{ "<leader>w", hidden = true },
{ "<leader>x", group = "diagnostics/quickfix", hidden = true },
{ "gx", desc = "Open with system app", hidden = true },
},
},
},
}

View file

@ -0,0 +1,3 @@
indent_type = "Spaces"
indent_width = 2
column_width = 120

View file

@ -1,2 +1,2 @@
-- bootstrap lazy.nvim, LazyVim and your plugins
require("config.lazy")
require("config")
require("core")

View file

@ -0,0 +1,20 @@
return {
cmd = { "lua-language-server" },
filetypes = { "lua" },
settings = {
Lua = {
diagnostics = {
globals = {
"vim",
"Snacks",
},
},
},
},
capabilities = vim.tbl_deep_extend("force", {}, vim.lsp.protocol.make_client_capabilities(), {
fileOperations = {
didRename = true,
willRename = true,
},
}),
}

View file

@ -0,0 +1,5 @@
return {
cmd = { "terraform-ls", "serve" },
filetypes = { "terraform", "hcl" },
root_markers = { ".terraform", ".git" },
}

View file

@ -1,25 +1,100 @@
-- Autocmds are automatically loaded on the VeryLazy event
-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
--
-- Add any additional autocmds here
-- with `vim.api.nvim_create_autocmd`
--
-- Or remove existing autocmds by their group name (which is prefixed with `lazyvim_` for the defaults)
-- e.g. vim.api.nvim_del_augroup_by_name("lazyvim_wrap_spell")
-- don't auto comment new line
vim.api.nvim_create_autocmd("BufEnter", { command = [[set formatoptions-=cro]] })
vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, {
pattern = { "helmfile.y?ml", "*.gotmpl" },
-- resize neovim split when terminal is resized
vim.api.nvim_command("autocmd VimResized * wincmd =")
-- enable spell for text files
vim.api.nvim_create_autocmd("FileType", {
group = vim.api.nvim_create_augroup("spell", { clear = true }),
pattern = { "text", "plaintex", "typst", "gitcommit", "markdown" },
callback = function()
vim.cmd("set filetype=helm")
vim.api.nvim_set_hl(0, "SpellBad", { bg = "#770000", fg = "#ffffff" })
vim.opt_local.spell = true
end,
})
-- set some colors
vim.api.nvim_create_autocmd({ "BufReadPre" }, {
callback = function()
vim.api.nvim_set_hl(0, "ColorColumn", { bg = "#770000" })
vim.api.nvim_set_hl(0, "DiffChange", { bg = "NONE", fg = "#e7c547" })
vim.api.nvim_set_hl(0, "DiffText", { bg = "NONE", fg = "#ff8700" })
vim.api.nvim_set_hl(0, "SpellBad", { bg = "#770000", fg = "#ffffff" })
vim.api.nvim_set_hl(0, "Visual", { bg = "#0094d8", fg = "#ffffff" })
end,
})
-- fix dimmed elements in Snacks.picker
vim.api.nvim_create_autocmd("User", {
pattern = "VeryLazy",
callback = function()
Snacks.util.set_hl({
PickerDir = { link = "Text" },
PickerPathHidden = { link = "Text" },
PickerPathIgnored = { link = "Comment" },
PickerGitStatusUntracked = { link = "Special" },
}, { prefix = "Snacks" })
end,
})
-- remember last location
vim.api.nvim_create_autocmd("BufReadPost", {
group = vim.api.nvim_create_augroup("last-loc", { clear = true }),
callback = function(event)
local exclude = { "gitcommit" }
local buf = event.buf
if vim.tbl_contains(exclude, vim.bo[buf].filetype) or vim.b[buf].my_last_loc then
return
end
vim.b[buf].my_last_loc = true
local mark = vim.api.nvim_buf_get_mark(buf, '"')
local lcount = vim.api.nvim_buf_line_count(buf)
if mark[1] > 0 and mark[1] <= lcount then
pcall(vim.api.nvim_win_set_cursor, 0, mark)
end
end,
})
-- lsp
vim.api.nvim_create_autocmd("LspAttach", {
group = vim.api.nvim_create_augroup("lsp-attach", { clear = true }),
callback = function(event)
local map = function(keys, func, desc)
vim.keymap.set("n", keys, func, { buffer = event.buf, desc = desc })
end
map("<leader>cd", vim.diagnostic.open_float, "diagnostic (float)")
map("<leader>ch", vim.lsp.buf.hover, "help")
map("<leader>ca", vim.lsp.buf.code_action, "actions")
map("<leader>cf", vim.lsp.buf.format, "format file")
local function client_supports_method(client, method, bufnr)
if vim.fn.has("nvim-0.11") == 1 then
return client:supports_method(method, bufnr)
else
return client.supports_method(method, { bufnr = bufnr })
end
end
local client = vim.lsp.get_client_by_id(event.data.client_id)
if
client and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_documentHighlight, event.buf)
then
local highlight_augroup = vim.api.nvim_create_augroup("lsp-highlight", { clear = false })
vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, {
buffer = event.buf,
group = highlight_augroup,
callback = vim.lsp.buf.document_highlight,
})
vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, {
buffer = event.buf,
group = highlight_augroup,
callback = vim.lsp.buf.clear_references,
})
vim.api.nvim_create_autocmd("LspDetach", {
group = vim.api.nvim_create_augroup("lsp-detach", { clear = true }),
callback = function(event2)
vim.lsp.buf.clear_references()
vim.api.nvim_clear_autocmds({ group = "lsp-highlight", buffer = event2.buf })
end,
})
end
end,
})

View file

@ -0,0 +1,3 @@
require("config.settings")
require("config.keymaps")
require("config.autocmds")

View file

@ -1,67 +1,74 @@
-- Keymaps are automatically loaded on the VeryLazy event
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
-- Add any additional keymaps here
vim.g.mapleader = " "
vim.g.maplocalleader = "\\"
local map = vim.keymap.set
local nomap = vim.keymap.del
nomap("n", "<leader><space>")
nomap("n", "<leader>,")
nomap("n", "<leader>.")
nomap("n", "<leader>?")
nomap("n", "<leader>K")
nomap("n", "<leader>l")
nomap("n", "<leader>L")
nomap("n", "<leader>S")
nomap("n", "<leader>`")
nomap("n", "<leader>bb")
nomap("n", "<leader>bD")
nomap("n", "<leader>bo")
nomap("n", "<leader>E")
nomap("n", "<leader>fB")
nomap("n", "<leader>fe")
nomap("n", "<leader>fE")
nomap("n", "<leader>fn")
nomap("n", "<leader>fp")
nomap("n", "<leader>fR")
nomap("n", "<leader>ft")
nomap("n", "<leader>fT")
nomap("n", "<leader>gY")
nomap("n", "<leader>gS")
nomap("n", "<leader>qq")
nomap("n", "<leader>xl")
nomap("n", "<leader>xq")
map("i", "<C-a>", "<esc>I")
map("i", "<C-e>", "<esc>A")
map("n", "<esc><cr>", "<esc><cmd>wq!<cr>", { desc = "Save and Exit", remap = true })
map("n", "<tab>", "<C-w>w", { desc = "Switch Pane", remap = true })
map("v", "<leader>/", "gc", { desc = "toggle comments", remap = true })
map("n", "<leader>-", "<C-W>s", { desc = "Split Horizontally", remap = true })
map("n", "<leader>/", "gcc", { desc = "Toggle Comments", remap = true })
map("n", "<leader>|", "<C-W>v", { desc = "Split Vertically", remap = true })
map("n", "<esc><cr>", "<cmd>wqa<cr>", { desc = "save and exit", remap = true })
map("n", "<esc><esc><cr>", "<cmd>wqa<cr>", { desc = "save and exit", remap = true })
map("n", "<tab>", "<C-w>w", { desc = "switch pane", remap = true })
map("n", "+", ":vertical resize +5<CR>")
map("n", "_", ":vertical resize -5<CR>")
map("n", "=", ":resize +5<CR>")
map("n", "-", ":resize -5<CR>")
map("n", "<leader>-", "<C-W>s", { desc = "split horizontally", remap = true })
map("n", "<leader>/", "gcc", { desc = "toggle comments", remap = true })
map("n", "<leader>|", "<C-W>v", { desc = "split vertically", remap = true })
map("n", "<leader>b[", "<cmd>bprevious<CR>", { desc = "buffer previous", remap = true })
map("n", "<leader>b]", "<cmd>bnext<CR>", { desc = "buffer next", remap = true })
map("n", "<leader>bd", function()
Snacks.bufdelete()
end, { desc = "buffer delete", remap = true })
map("n", "<leader>bl", function()
Snacks.picker.buffers()
end, { desc = "Buffer List", remap = true })
map("n", "<leader>b[", "<cmd>bprevious<CR>", { desc = "Previous Buffer", remap = true })
map("n", "<leader>b]", "<cmd>bnext<CR>", { desc = "Next Buffer", remap = true })
map("n", "<leader>bn", "<cmd>enew<CR>", { desc = "New Buffer", remap = true })
map("n", "<leader>h", "<cmd>set hlsearch!<cr>", { desc = "Toggle hlsearch", remap = true })
end, { desc = "buffer list", remap = true })
map("n", "<leader>bn", "<cmd>enew<CR>", { desc = "buffer create", remap = true })
map("n", "<leader>e", function()
Snacks.explorer()
end, { desc = "explorer", remap = true })
map("n", "<leader>s", "<cmd>set hlsearch!<cr>", { desc = "toggle hlsearch", remap = true })
map("n", "<leader>ff", function()
Snacks.picker.files()
end, { desc = "files", remap = true })
map("n", "<leader>fg", function()
Snacks.picker.grep()
end, { desc = "grep", remap = true })
map("n", "<leader>hc", function()
Snacks.picker.command_history()
end, { desc = "commands", remap = true })
map("n", "<leader>hn", "<cmd>Noice<CR>", { desc = "notifications", remap = true })
map("n", "<leader>hs", function()
Snacks.picker.search_history()
end, { desc = "search", remap = true })
map(
"n",
"<leader>m",
'<cmd>execute "set colorcolumn=" . (&colorcolumn == "" ? "80,120" : "")<cr>',
{ desc = "Toggle Columns", remap = true }
{ desc = "toggle columns" }
)
map("n", "<leader>T", function()
map("n", "<leader>n", function()
vim.cmd("set number!")
vim.cmd('execute "set signcolumn=" . (&signcolumn == "yes" ? "no" : "yes")')
if Snacks.indent.enabled then
Snacks.indent.disable()
else
Snacks.indent.enable()
end
end, { desc = "toggle decorations", remap = true })
map("n", "<leader>t", function()
Snacks.terminal()
end, { desc = "Terminal", remap = true })
end, { desc = "terminal", remap = true })
map("v", "<leader>/", "gc", { desc = "Toggle Comments", remap = true })
map("n", "<leader>us", "<cmd>set spell!<cr>", { desc = "toggle spell", remap = true })
map("n", "<leader>uw", "<cmd>set wrap!<cr>", { desc = "toggle wrap", remap = true })

View file

@ -0,0 +1,44 @@
vim.filetype.add({
pattern = {
["helmfile.y.ml"] = "helm",
[".*.gotmpl"] = "helm",
},
})
vim.o.backup = false
vim.o.breakindent = true
vim.o.confirm = true
vim.o.cursorline = true
vim.o.expandtab = true
vim.o.gdefault = true
vim.o.hlsearch = true
vim.o.inccommand = "split"
vim.o.number = true
vim.o.relativenumber = false
vim.o.shiftround = true
vim.o.showcmd = false
vim.o.showmode = false
vim.o.smartcase = true
vim.o.smartindent = true
vim.o.splitbelow = true
vim.o.splitright = true
vim.o.termguicolors = true
vim.o.undofile = true
vim.o.wrap = true
vim.o.writebackup = false
vim.o.clipboard = ""
vim.o.conceallevel = 0
vim.o.fileencoding = "utf-8"
vim.o.foldcolumn = "0"
vim.o.mouse = ""
vim.o.shiftwidth = 2
vim.o.signcolumn = "yes"
vim.o.softtabstop = 2
vim.o.spelllang = "en_us,pl"
vim.o.statuscolumn = ""
vim.o.tabstop = 2
vim.o.updatetime = 100
vim.o.whichwrap = ""
vim.opt.shortmess:append({ W = true, I = true, c = true, C = true, S = false })

View file

@ -0,0 +1,3 @@
require("core.lazy")
require("core.lsp")
require("core.mason-path")

View file

@ -0,0 +1,43 @@
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
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)
require("lazy").setup({ import = "plugins" }, {
install = {
missing = true,
},
checker = {
enabled = true,
notify = false,
},
change_detection = {
enabled = true,
notify = false,
},
ui = {
-- border = "rounded"
},
performance = {
rtp = {
disabled_plugins = {
"gzip",
"tarPlugin",
"tohtml",
"tutor",
"zipPlugin",
},
},
},
})

View file

@ -0,0 +1,274 @@
vim.lsp.enable({
"lua",
"terraform",
})
vim.diagnostic.config({
virtual_lines = true,
-- virtual_text = true,
underline = false,
update_in_insert = false,
severity_sort = true,
float = {
border = "rounded",
source = false,
},
signs = {
text = {
[vim.diagnostic.severity.ERROR] = "",
[vim.diagnostic.severity.WARN] = "",
[vim.diagnostic.severity.INFO] = "",
[vim.diagnostic.severity.HINT] = "",
},
numhl = {
[vim.diagnostic.severity.ERROR] = "ErrorMsg",
[vim.diagnostic.severity.WARN] = "WarningMsg",
},
},
})
-- Extras
local function restart_lsp(bufnr)
bufnr = bufnr or vim.api.nvim_get_current_buf()
local clients = vim.lsp.get_clients({ bufnr = bufnr })
for _, client in ipairs(clients) do
vim.lsp.stop_client(client.id)
end
vim.defer_fn(function()
vim.cmd("edit")
end, 100)
end
vim.api.nvim_create_user_command("LspRestart", function()
restart_lsp()
end, {})
local function lsp_status()
local bufnr = vim.api.nvim_get_current_buf()
local clients = vim.lsp.get_clients({ bufnr = bufnr })
if #clients == 0 then
print("󰅚 No LSP clients attached")
return
end
print("󰒋 LSP Status for buffer " .. bufnr .. ":")
print("─────────────────────────────────")
for i, client in ipairs(clients) do
print(string.format("󰌘 Client %d: %s (ID: %d)", i, client.name, client.id))
print(" Root: " .. (client.config.root_dir or "N/A"))
print(" Filetypes: " .. table.concat(client.config.filetypes or {}, ", "))
-- Check capabilities
local caps = client.server_capabilities
local features = {}
if caps.completionProvider then
table.insert(features, "completion")
end
if caps.hoverProvider then
table.insert(features, "hover")
end
if caps.definitionProvider then
table.insert(features, "definition")
end
if caps.referencesProvider then
table.insert(features, "references")
end
if caps.renameProvider then
table.insert(features, "rename")
end
if caps.codeActionProvider then
table.insert(features, "code_action")
end
if caps.documentFormattingProvider then
table.insert(features, "formatting")
end
print(" Features: " .. table.concat(features, ", "))
print("")
end
end
vim.api.nvim_create_user_command("LspStatus", lsp_status, { desc = "Show detailed LSP status" })
local function check_lsp_capabilities()
local bufnr = vim.api.nvim_get_current_buf()
local clients = vim.lsp.get_clients({ bufnr = bufnr })
if #clients == 0 then
print("No LSP clients attached")
return
end
for _, client in ipairs(clients) do
print("Capabilities for " .. client.name .. ":")
local caps = client.server_capabilities
local capability_list = {
{ "Completion", caps.completionProvider },
{ "Hover", caps.hoverProvider },
{ "Signature Help", caps.signatureHelpProvider },
{ "Go to Definition", caps.definitionProvider },
{ "Go to Declaration", caps.declarationProvider },
{ "Go to Implementation", caps.implementationProvider },
{ "Go to Type Definition", caps.typeDefinitionProvider },
{ "Find References", caps.referencesProvider },
{ "Document Highlight", caps.documentHighlightProvider },
{ "Document Symbol", caps.documentSymbolProvider },
{ "Workspace Symbol", caps.workspaceSymbolProvider },
{ "Code Action", caps.codeActionProvider },
{ "Code Lens", caps.codeLensProvider },
{ "Document Formatting", caps.documentFormattingProvider },
{ "Document Range Formatting", caps.documentRangeFormattingProvider },
{ "Rename", caps.renameProvider },
{ "Folding Range", caps.foldingRangeProvider },
{ "Selection Range", caps.selectionRangeProvider },
}
for _, cap in ipairs(capability_list) do
local status = cap[2] and "" or ""
print(string.format(" %s %s", status, cap[1]))
end
print("")
end
end
vim.api.nvim_create_user_command("LspCapabilities", check_lsp_capabilities, { desc = "Show LSP capabilities" })
local function lsp_diagnostics_info()
local bufnr = vim.api.nvim_get_current_buf()
local diagnostics = vim.diagnostic.get(bufnr)
local counts = { ERROR = 0, WARN = 0, INFO = 0, HINT = 0 }
for _, diagnostic in ipairs(diagnostics) do
local severity = vim.diagnostic.severity[diagnostic.severity]
counts[severity] = counts[severity] + 1
end
print("󰒡 Diagnostics for current buffer:")
print(" Errors: " .. counts.ERROR)
print(" Warnings: " .. counts.WARN)
print(" Info: " .. counts.INFO)
print(" Hints: " .. counts.HINT)
print(" Total: " .. #diagnostics)
end
vim.api.nvim_create_user_command("LspDiagnostics", lsp_diagnostics_info, { desc = "Show LSP diagnostics count" })
local function lsp_info()
local bufnr = vim.api.nvim_get_current_buf()
local clients = vim.lsp.get_clients({ bufnr = bufnr })
print("═══════════════════════════════════")
print(" LSP INFORMATION ")
print("═══════════════════════════════════")
print("")
-- Basic info
print("󰈙 Language client log: " .. vim.lsp.get_log_path())
print("󰈔 Detected filetype: " .. vim.bo.filetype)
print("󰈮 Buffer: " .. bufnr)
print("󰈔 Root directory: " .. (vim.fn.getcwd() or "N/A"))
print("")
if #clients == 0 then
print("󰅚 No LSP clients attached to buffer " .. bufnr)
print("")
print("Possible reasons:")
print(" • No language server installed for " .. vim.bo.filetype)
print(" • Language server not configured")
print(" • Not in a project root directory")
print(" • File type not recognized")
return
end
print("󰒋 LSP clients attached to buffer " .. bufnr .. ":")
print("─────────────────────────────────")
for i, client in ipairs(clients) do
print(string.format("󰌘 Client %d: %s", i, client.name))
print(" ID: " .. client.id)
print(" Root dir: " .. (client.config.root_dir or "Not set"))
print(" Command: " .. table.concat(client.config.cmd or {}, " "))
print(" Filetypes: " .. table.concat(client.config.filetypes or {}, ", "))
-- Server status
if client.is_stopped() then
print(" Status: 󰅚 Stopped")
else
print(" Status: 󰄬 Running")
end
-- Workspace folders
if client.workspace_folders and #client.workspace_folders > 0 then
print(" Workspace folders:")
for _, folder in ipairs(client.workspace_folders) do
print("" .. folder.name)
end
end
-- Attached buffers count
local attached_buffers = {}
for buf, _ in pairs(client.attached_buffers or {}) do
table.insert(attached_buffers, buf)
end
print(" Attached buffers: " .. #attached_buffers)
-- Key capabilities
local caps = client.server_capabilities
local key_features = {}
if caps.completionProvider then
table.insert(key_features, "completion")
end
if caps.hoverProvider then
table.insert(key_features, "hover")
end
if caps.definitionProvider then
table.insert(key_features, "definition")
end
if caps.documentFormattingProvider then
table.insert(key_features, "formatting")
end
if caps.codeActionProvider then
table.insert(key_features, "code_action")
end
if #key_features > 0 then
print(" Key features: " .. table.concat(key_features, ", "))
end
print("")
end
-- Diagnostics summary
local diagnostics = vim.diagnostic.get(bufnr)
if #diagnostics > 0 then
print("󰒡 Diagnostics Summary:")
local counts = { ERROR = 0, WARN = 0, INFO = 0, HINT = 0 }
for _, diagnostic in ipairs(diagnostics) do
local severity = vim.diagnostic.severity[diagnostic.severity]
counts[severity] = counts[severity] + 1
end
print(" 󰅚 Errors: " .. counts.ERROR)
print(" 󰀪 Warnings: " .. counts.WARN)
print(" 󰋽 Info: " .. counts.INFO)
print(" 󰌶 Hints: " .. counts.HINT)
print(" Total: " .. #diagnostics)
else
print("󰄬 No diagnostics")
end
print("")
print("Use :LspLog to view detailed logs")
print("Use :LspCapabilities for full capability list")
end
-- Create command
vim.api.nvim_create_user_command("LspInfo", lsp_info, { desc = "Show comprehensive LSP information" })

View file

@ -0,0 +1,25 @@
local mason_bin = vim.fn.stdpath("data") .. "/mason/bin"
local current_path = vim.env.PATH or ""
-- Remove any existing Mason bin entries to prevent duplicates
local path_entries = vim.split(current_path, ":")
local clean_path_entries = {}
local seen = {}
for _, entry in ipairs(path_entries) do
-- Skip Mason bin entries and duplicates
if entry ~= mason_bin and entry ~= "" and not seen[entry] then
seen[entry] = true
table.insert(clean_path_entries, entry)
end
end
-- Add Mason bin directory at the beginning
local new_path = mason_bin .. ":" .. table.concat(clean_path_entries, ":")
vim.env.PATH = new_path
-- Verify Mason bin directory exists
if vim.fn.isdirectory(mason_bin) == 0 then
-- Mason not installed yet, create placeholder
vim.fn.mkdir(mason_bin, "p")
end

View file

@ -0,0 +1,64 @@
return {
{ "L3MON4D3/LuaSnip", keys = {} },
{
"saghen/blink.cmp",
dependencies = {
"rafamadriz/friendly-snippets",
},
version = "*",
config = function()
require("blink.cmp").setup({
snippets = { preset = "luasnip" },
signature = { enabled = true },
appearance = {
use_nvim_cmp_as_default = false,
nerd_font_variant = "normal",
},
sources = {
default = { "lsp", "path", "snippets", "buffer" },
providers = {
cmdline = {
min_keyword_length = 2,
},
},
},
keymap = {
["<Tab>"] = { "accept", "fallback" },
},
cmdline = {
enabled = false,
completion = { menu = { auto_show = true } },
keymap = {
["<Tab>"] = { "accept_and_enter", "fallback" },
},
},
completion = {
menu = {
border = nil,
scrolloff = 1,
scrollbar = false,
draw = {
columns = {
{ "kind_icon" },
{ "label", "label_description", gap = 1 },
{ "kind" },
{ "source_name" },
},
},
},
documentation = {
window = {
border = nil,
scrollbar = false,
winhighlight = "Normal:BlinkCmpDoc,FloatBorder:BlinkCmpDocBorder,EndOfBuffer:BlinkCmpDoc",
},
auto_show = true,
auto_show_delay_ms = 500,
},
},
})
require("luasnip.loaders.from_vscode").lazy_load()
end,
},
}

View file

@ -0,0 +1,18 @@
return {
"stevearc/conform.nvim",
opts = {},
config = function()
require("conform").setup({
formatters_by_ft = {
lua = { "stylua" },
terraform = { "terraform_fmt" },
tf = { "terraform_fmt" },
["terraform-vars"] = { "terraform_fmt" },
},
format_on_save = {
lsp_fallback = true,
async = false,
},
})
end,
}

View file

@ -0,0 +1,22 @@
return {
"lewis6991/gitsigns.nvim",
config = function()
require("gitsigns").setup({
signs = {
add = { text = "" },
change = { text = "" },
delete = { text = "" },
topdelete = { text = "" },
changedelete = { text = "" },
untracked = { text = "" },
},
signs_staged = {
add = { text = "" },
change = { text = "" },
delete = { text = "" },
topdelete = { text = "" },
changedelete = { text = "" },
},
})
end,
}

View file

@ -1,40 +1,60 @@
return {
"nvim-lualine/lualine.nvim",
opts = {
options = {
theme = "powerline",
section_separators = "",
component_separators = "",
globalstatus = false,
},
sections = {
lualine_c = {
{
"diagnostics",
symbols = {
error = LazyVim.config.icons.diagnostics.Error,
warn = LazyVim.config.icons.diagnostics.Warn,
info = LazyVim.config.icons.diagnostics.Info,
hint = LazyVim.config.icons.diagnostics.Hint,
},
},
{ "filetype", icon_only = true, separator = "", padding = { left = 1, right = 0 } },
{ "filename", file_status = true, path = 1 },
},
lualine_x = {
{
"diff",
symbols = {
added = LazyVim.config.icons.git.added,
modified = LazyVim.config.icons.git.modified,
removed = LazyVim.config.icons.git.removed,
},
},
},
lualine_z = {},
},
tabline = {
lualine_a = { "buffers" },
},
dependencies = {
"nvim-tree/nvim-web-devicons",
},
config = function()
require("lualine").setup({
options = {
theme = "monokai-pro",
section_separators = "",
component_separators = "",
globalstatus = false,
},
sections = {
lualine_a = { "mode" },
lualine_b = { "branch" },
lualine_c = {
{
"diff",
symbols = {
added = "",
modified = "",
removed = "",
},
},
{
"diagnostics",
symbols = {
error = "",
warn = "",
info = "",
hint = "",
},
},
{ "filetype", icon_only = true, separator = "", padding = { left = 1, right = 0 } },
{ "filename", file_status = true, path = 1 },
},
lualine_x = {
{
"lsp_status",
symbols = {
spinner = { "", "", "", "", "", "", "", "", "", "" },
done = "",
separator = " ",
},
},
},
lualine_y = {
{ "searchcount" },
{ "progress", separator = " ", padding = { left = 1, right = 0 } },
{ "location", padding = { left = 0, right = 1 } },
},
lualine_z = {},
},
tabline = {
lualine_a = { "buffers" },
},
})
end,
}

View file

@ -0,0 +1,45 @@
return {
{
"williamboman/mason.nvim",
lazy = false,
cmd = "Mason",
keys = { { "<leader>cm", "<cmd>Mason<cr>", desc = "Mason" } },
build = ":MasonUpdate",
opts = {
ensure_installed = {
"lua-language-server",
"terraform-ls",
"stylua",
},
},
config = function(_, opts)
require("mason").setup(opts)
local mr = require("mason-registry")
local function ensure_installed()
for _, tool in ipairs(opts.ensure_installed) do
if mr.has_package(tool) then
local p = mr.get_package(tool)
if not p:is_installed() then
vim.notify("Mason: Installing " .. tool .. "...", vim.log.levels.INFO)
p:install():once("closed", function()
if p:is_installed() then
vim.notify("Mason: Successfully installed " .. tool, vim.log.levels.INFO)
else
vim.notify("Mason: Failed to install " .. tool, vim.log.levels.ERROR)
end
end)
end
else
vim.notify("Mason: Package '" .. tool .. "' not found", vim.log.levels.WARN)
end
end
end
if mr.refresh then
mr.refresh(ensure_installed)
else
ensure_installed()
end
end,
},
}

View file

@ -0,0 +1,12 @@
return {
"echasnovski/mini.pairs",
config = function()
require("mini.pairs").setup({
modes = { insert = true, command = true, terminal = false },
skip_next = [=[[%w%%%'%[%"%.%`%$]]=],
skip_ts = { "string" },
skip_unbalanced = true,
markdown = true,
})
end,
}

View file

@ -1,15 +1,10 @@
return {
{
"loctvl842/monokai-pro.nvim",
priority = 1000,
opts = {
"loctvl842/monokai-pro.nvim",
priority = 10000,
config = function()
require("monokai-pro").setup({
filter = "classic",
},
},
{
"LazyVim/LazyVim",
opts = {
colorscheme = "monokai-pro",
},
},
})
vim.cmd.colorscheme("monokai-pro")
end,
}

View file

@ -0,0 +1,27 @@
return {
"folke/noice.nvim",
event = "VeryLazy",
dependencies = {
"MunifTanjim/nui.nvim",
},
config = function()
require("noice").setup({
lsp = {
override = {
["vim.lsp.util.convert_input_to_markdown_lines"] = true,
["vim.lsp.util.stylize_markdown"] = true,
["cmp.entry.get_documentation"] = true,
},
},
messages = {
view_search = false,
},
presets = {
bottom_search = true,
command_palette = true,
long_message_to_split = true,
lsp_doc_border = true,
},
})
end,
}

View file

@ -1,28 +1,47 @@
return {
"folke/snacks.nvim",
opts = {
dashboard = { enabled = false },
},
keys = {
{
"<leader>n",
function()
vim.cmd("set number!")
vim.cmd('execute "set signcolumn=" . (&signcolumn == "yes" ? "no" : "yes")')
if Snacks.indent.enabled then
Snacks.indent.disable()
else
Snacks.indent.enable()
end
end,
desc = "Toggle Decorations",
},
{
"<leader>e",
function()
Snacks.explorer()
end,
desc = "File Explorer",
},
},
priority = 1000,
lazy = false,
config = function()
require("snacks").setup({
animate = { enabled = false },
bigfile = { enabled = false },
bufdelete = { enabled = true },
dashboard = { enabled = false },
debug = { enabled = false },
dim = { enabled = false },
explorer = { enabled = true, replace_netrw = true },
git = { enabled = false },
gitbrowse = { enabled = false },
image = { enabled = false },
indent = { enabled = true },
input = { enabled = true },
layout = { enabled = false },
lazygit = { enabled = false },
notifier = { enabled = true },
notify = { enabled = true },
picker = {
enabled = true,
files = {
hidden = true,
ignored = true,
},
hidden = true,
ignored = true,
},
profiler = { enabled = false },
quickfile = { enabled = true },
rename = { enabled = false },
scope = { enabled = true },
scratch = { enabled = false },
scroll = { enabled = true },
statuscolumn = { enabled = false },
terminal = { enabled = true },
toggle = { enabled = false },
util = { enabled = true },
win = { enabled = false },
words = { enabled = false },
zen = { enabled = false },
})
end,
}

View file

@ -1,18 +1,25 @@
return {
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = {
"bash",
"diff",
"gotmpl",
"helm",
"json",
"lua",
"markdown",
"markdown_inline",
"python",
"terraform",
"vim",
},
},
build = ":TSUpdate",
config = function()
require("nvim-treesitter.configs").setup({
ensure_installed = {
"bash",
"diff",
"gotmpl",
"hcl",
"helm",
"json",
"lua",
"markdown",
"markdown_inline",
"python",
"regex",
"terraform",
"vim",
},
highlight = { enable = true },
indent = { enable = true },
})
end,
}

View file

@ -1,35 +1,36 @@
return {
"folke/which-key.nvim",
event = "VeryLazy",
opts_extend = { "spec" },
opts = {
preset = "helix",
icons = {
mappings = false,
},
defaults = {},
spec = {
{
mode = { "n", "v" },
{
"<leader>b",
group = "buffer",
expand = function()
return require("which-key.extras").expand.buf()
end,
},
{ "<leader><tab>", group = "tabs", hidden = true },
{ "<leader>d", group = "debug", hidden = true },
{ "<leader>dp", group = "profiler", hidden = true },
{ "<leader>gh", group = "hunks", hidden = true },
{ "<leader>q", group = "quit/session", hidden = true },
{ "<leader>s", group = "search", hidden = true },
{ "<leader>t", hidden = true },
{ "<leader>u", group = "ui", hidden = true },
{ "<leader>w", hidden = true },
{ "<leader>x", group = "diagnostics/quickfix", hidden = true },
{ "gx", desc = "Open with system app", hidden = true },
config = function()
require("which-key").setup({
preset = "helix",
delay = 300,
icons = {
rules = false,
breadcrumb = "",
separator = "󱦰 ",
group = "󰹍 ",
},
},
},
plugins = {
spelling = {
enabled = false,
},
},
win = {
height = {
max = math.huge,
},
},
spec = {
{
mode = { "n", "v" },
{ "<leader>b", group = "buffer" },
{ "<leader>c", group = "code" },
{ "<leader>f", group = "find" },
{ "<leader>h", group = "history" },
{ "<leader>u", group = "ui" },
},
},
})
end,
}