Compare commits

...

2 Commits

Author SHA1 Message Date
ITQ 1273a6cd74 feat(nvim): some devops stuff, additions and optimizations for nvim 2026-05-15 20:48:46 +03:00
ITQ b4e15131d1 yabai meow 2026-05-01 14:36:01 +03:00
17 changed files with 334 additions and 182 deletions
-1
View File
@@ -3,4 +3,3 @@ require("config.keymaps")
require("config.autocmds") require("config.autocmds")
require("config.diagnostics") require("config.diagnostics")
require("config.lazy") require("config.lazy")
-1
View File
@@ -9,4 +9,3 @@ vim.api.nvim_create_autocmd("TextYankPost", {
}) })
-- optional: auto format on save (handled by conform too, but this is a safe place for extra logic later) -- optional: auto format on save (handled by conform too, but this is a safe place for extra logic later)
-1
View File
@@ -18,4 +18,3 @@ vim.diagnostic.config({
severity_sort = true, severity_sort = true,
float = { border = "rounded", source = "if_many" }, float = { border = "rounded", source = "if_many" },
}) })
+10
View File
@@ -20,3 +20,13 @@ map("n", "<leader>fg", "<cmd>Telescope live_grep<cr>", { desc = "Live grep" })
map("n", "<leader>fb", "<cmd>Telescope buffers<cr>", { desc = "Buffers" }) map("n", "<leader>fb", "<cmd>Telescope buffers<cr>", { desc = "Buffers" })
map("n", "<leader>fh", "<cmd>Telescope help_tags<cr>", { desc = "Help" }) map("n", "<leader>fh", "<cmd>Telescope help_tags<cr>", { desc = "Help" })
-- file tree
map("n", "<leader>tt", "<cmd>Neotree toggle<cr>", { desc = "Toggle file tree" })
map("n", "<leader>tf", "<cmd>Neotree reveal<cr>", { desc = "Reveal file in tree" })
-- Git
map("n", "<leader>gs", "<cmd>Git<cr>", { desc = "Git status" })
map("n", "<leader>gg", "<cmd>LazyGit<cr>", { desc = "LazyGit" })
map("n", "<leader>gd", "<cmd>DiffviewOpen<cr>", { desc = "Diffview open" })
map("n", "<leader>gD", "<cmd>DiffviewClose<cr>", { desc = "Diffview close" })
map("n", "<leader>gh", "<cmd>DiffviewFileHistory<cr>", { desc = "Diffview file history" })
-1
View File
@@ -19,4 +19,3 @@ require("lazy").setup({
checker = { enabled = true }, checker = { enabled = true },
ui = { border = "rounded" }, ui = { border = "rounded" },
}) })
+6 -1
View File
@@ -1,6 +1,12 @@
vim.g.mapleader = " " vim.g.mapleader = " "
vim.g.maplocalleader = " " vim.g.maplocalleader = " "
local mason_bin = vim.fn.stdpath("data") .. "/mason/bin"
local path = vim.env.PATH or ""
if not string.find(path, mason_bin, 1, true) then
vim.env.PATH = mason_bin .. ":" .. path
end
local opt = vim.opt local opt = vim.opt
opt.number = true opt.number = true
opt.relativenumber = true opt.relativenumber = true
@@ -28,4 +34,3 @@ opt.timeoutlen = 400
opt.clipboard = "unnamedplus" opt.clipboard = "unnamedplus"
opt.undofile = true opt.undofile = true
-1
View File
@@ -65,4 +65,3 @@ return {
end, end,
}, },
} }
+6 -8
View File
@@ -1,15 +1,13 @@
return { return {
{ "nvim-lua/plenary.nvim", lazy = true }, { "nvim-lua/plenary.nvim", lazy = true },
{ "folke/which-key.nvim", event = "VeryLazy", opts = {} }, { "folke/which-key.nvim", event = "VeryLazy", opts = {} },
{ "numToStr/Comment.nvim", event = "VeryLazy", opts = {} }, { "numToStr/Comment.nvim", event = "VeryLazy", opts = {} },
{ "kylechui/nvim-surround", event = "VeryLazy", opts = {} }, { "kylechui/nvim-surround", event = "VeryLazy", opts = {} },
{ "windwp/nvim-autopairs", event = "InsertEnter", opts = {} }, { "windwp/nvim-autopairs", event = "InsertEnter", opts = {} },
{ "lewis6991/gitsigns.nvim", event = "VeryLazy", opts = {} }, { "wakatime/vim-wakatime", lazy = false },
{ 'wakatime/vim-wakatime', lazy = false },
} }
+22
View File
@@ -0,0 +1,22 @@
return {
{
"towolf/vim-helm",
lazy = false,
},
{
"hashivim/vim-terraform",
ft = { "terraform", "hcl" },
},
{
"ekalinin/Dockerfile.vim",
ft = { "dockerfile" },
},
{
"pearofducks/ansible-vim",
lazy = false,
},
{
"b0o/schemastore.nvim",
lazy = true,
},
}
+22
View File
@@ -0,0 +1,22 @@
return {
{
"nvim-neo-tree/neo-tree.nvim",
branch = "v3.x",
cmd = "Neotree",
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-tree/nvim-web-devicons",
"MunifTanjim/nui.nvim",
},
opts = {
sources = { "filesystem", "buffers", "git_status" },
close_if_last_window = true,
filesystem = {
follow_current_file = { enabled = true },
hijack_netrw_behavior = "open_default",
use_libuv_file_watcher = true,
},
window = { width = 32 },
},
},
}
+48
View File
@@ -0,0 +1,48 @@
return {
{
"lewis6991/gitsigns.nvim",
event = { "BufReadPre", "BufNewFile" },
opts = {
on_attach = function(bufnr)
local gs = package.loaded.gitsigns
local map = function(mode, lhs, rhs, desc)
vim.keymap.set(mode, lhs, rhs, { buffer = bufnr, desc = desc })
end
map("n", "]h", gs.next_hunk, "Next hunk")
map("n", "[h", gs.prev_hunk, "Prev hunk")
map("n", "<leader>hs", gs.stage_hunk, "Stage hunk")
map("n", "<leader>hS", gs.stage_buffer, "Stage buffer")
map("n", "<leader>hr", gs.reset_hunk, "Reset hunk")
map("n", "<leader>hR", gs.reset_buffer, "Reset buffer")
map("n", "<leader>hp", gs.preview_hunk, "Preview hunk")
map("n", "<leader>hb", gs.blame_line, "Blame line")
map("n", "<leader>hd", gs.diffthis, "Diff this")
map("n", "<leader>hD", function() gs.diffthis("~") end, "Diff this ~")
map("n", "<leader>ht", gs.toggle_current_line_blame, "Toggle line blame")
end,
},
},
{
"tpope/vim-fugitive",
cmd = { "Git", "G", "Gdiffsplit", "Gvdiffsplit", "Gedit" },
},
{
"sindrets/diffview.nvim",
cmd = { "DiffviewOpen", "DiffviewClose", "DiffviewFileHistory" },
},
{
"kdheepak/lazygit.nvim",
cmd = {
"LazyGit",
"LazyGitConfig",
"LazyGitCurrentFile",
"LazyGitFilter",
"LazyGitFilterCurrentFile",
},
dependencies = { "nvim-lua/plenary.nvim" },
},
}
+156 -63
View File
@@ -1,79 +1,172 @@
local function lsp_keymaps(ev) local function lsp_keymaps(ev)
local buf = ev.buf local buf = ev.buf
local map = function(mode, lhs, rhs, desc) local map = function(mode, lhs, rhs, desc)
vim.keymap.set(mode, lhs, rhs, { buffer = buf, desc = desc }) vim.keymap.set(mode, lhs, rhs, { buffer = buf, desc = desc })
end end
map("n", "K", vim.lsp.buf.hover, "Hover") map("n", "K", vim.lsp.buf.hover, "Hover")
map("n", "gd", vim.lsp.buf.definition, "Go to definition") map("n", "gd", vim.lsp.buf.definition, "Go to definition")
map("n", "gD", vim.lsp.buf.declaration, "Go to declaration") map("n", "gD", vim.lsp.buf.declaration, "Go to declaration")
map("n", "gr", vim.lsp.buf.references, "References") map("n", "gr", vim.lsp.buf.references, "References")
map("n", "gi", vim.lsp.buf.implementation, "Implementation") map("n", "gi", vim.lsp.buf.implementation, "Implementation")
map("n", "<leader>rn", vim.lsp.buf.rename, "Rename") map("n", "<leader>rn", vim.lsp.buf.rename, "Rename")
map("n", "<leader>ca", vim.lsp.buf.code_action, "Code action") map("n", "<leader>ca", vim.lsp.buf.code_action, "Code action")
if vim.lsp.inlay_hint then if vim.lsp.inlay_hint then
pcall(vim.lsp.inlay_hint.enable, true, { bufnr = buf }) pcall(vim.lsp.inlay_hint.enable, true, { bufnr = buf })
end end
end end
return { return {
{ "williamboman/mason.nvim", cmd = "Mason", opts = {} }, { "williamboman/mason.nvim", cmd = "Mason", opts = {} },
{ {
"williamboman/mason-lspconfig.nvim", "williamboman/mason-lspconfig.nvim",
event = "VeryLazy", event = "VeryLazy",
dependencies = { "mason.nvim" }, dependencies = { "mason.nvim" },
opts = { opts = {
ensure_installed = { "clangd", "gopls", "pyright", "lua_ls" }, ensure_installed = {
automatic_installation = true, "clangd",
"gopls",
"pyright",
"lua_ls",
"rust_analyzer",
"asm_lsp",
"terraformls",
"ansiblels",
"dockerls",
"yamlls",
"jsonls",
"helm_ls",
},
automatic_installation = true,
},
}, },
},
-- Keep nvim-lspconfig installed (it provides server definitions), -- Keep nvim-lspconfig installed (it provides server definitions),
-- but DO NOT call require("lspconfig") anymore. -- but DO NOT call require("lspconfig") anymore.
{ {
"neovim/nvim-lspconfig", "neovim/nvim-lspconfig",
event = { "BufReadPre", "BufNewFile" }, event = { "BufReadPre", "BufNewFile" },
dependencies = { "hrsh7th/cmp-nvim-lsp" }, dependencies = { "hrsh7th/cmp-nvim-lsp", "b0o/schemastore.nvim" },
config = function() config = function()
vim.api.nvim_create_autocmd("LspAttach", { callback = lsp_keymaps }) vim.api.nvim_create_autocmd("LspAttach", { callback = lsp_keymaps })
local caps = vim.lsp.protocol.make_client_capabilities() local caps = vim.lsp.protocol.make_client_capabilities()
local ok, cmp_lsp = pcall(require, "cmp_nvim_lsp") local ok, cmp_lsp = pcall(require, "cmp_nvim_lsp")
if ok then if ok then
caps = cmp_lsp.default_capabilities(caps) caps = cmp_lsp.default_capabilities(caps)
end end
vim.lsp.config("clangd", { vim.lsp.config("clangd", {
capabilities = caps, capabilities = caps,
cmd = { "clangd", "--background-index", "--clang-tidy", "--header-insertion=iwyu" }, cmd = { "clangd", "--background-index", "--clang-tidy", "--header-insertion=iwyu" },
}) })
vim.lsp.config("gopls", { vim.lsp.config("gopls", {
capabilities = caps, capabilities = caps,
settings = { settings = {
gopls = { gopls = {
staticcheck = true, staticcheck = true,
analyses = { unusedparams = true, nilness = true, shadow = true }, analyses = { unusedparams = true, nilness = true, shadow = true },
}, },
}, },
}) })
vim.lsp.config("pyright", { capabilities = caps }) vim.lsp.config("pyright", { capabilities = caps })
vim.lsp.config("lua_ls", { vim.lsp.config("lua_ls", {
capabilities = caps, capabilities = caps,
settings = { settings = {
Lua = { Lua = {
diagnostics = { globals = { "vim" } }, diagnostics = { globals = { "vim" } },
workspace = { checkThirdParty = false }, workspace = { checkThirdParty = false },
}, },
}, },
}) })
vim.lsp.enable({ "clangd", "gopls", "pyright", "lua_ls" }) vim.lsp.config("rust_analyzer", {
end, capabilities = caps,
}, settings = {
["rust-analyzer"] = {
cargo = { allFeatures = true },
checkOnSave = { command = "clippy" },
},
},
})
vim.lsp.config("asm_lsp", {
capabilities = caps,
filetypes = { "asm", "nasm" },
})
vim.lsp.config("terraformls", { capabilities = caps })
vim.lsp.config("ansiblels", { capabilities = caps })
vim.lsp.config("dockerls", { capabilities = caps })
local k8s_schema = "https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/v1.27.0-standalone-strict/all.json"
local schemastore_ok, schemastore = pcall(require, "schemastore")
local yaml_schemas = {}
local json_schemas = {}
if schemastore_ok then
yaml_schemas = schemastore.yaml.schemas()
json_schemas = schemastore.json.schemas()
end
yaml_schemas[k8s_schema] = {
"k8s/**/*.yaml",
"k8s/**/*.yml",
"kubernetes/**/*.yaml",
"kubernetes/**/*.yml",
"*.k8s.yaml",
"*.k8s.yml",
}
yaml_schemas["https://json.schemastore.org/kustomization.json"] = {
"kustomization.yaml",
"kustomization.yml",
}
vim.lsp.config("yamlls", {
capabilities = caps,
settings = {
yaml = {
validate = true,
format = { enable = true },
schemaStore = { enable = false, url = "" },
schemas = yaml_schemas,
},
},
})
vim.lsp.config("jsonls", {
capabilities = caps,
settings = {
json = {
validate = { enable = true },
schemaStore = { enable = false, url = "" },
schemas = json_schemas,
},
},
})
vim.lsp.config("helm_ls", { capabilities = caps })
vim.lsp.enable({
"clangd",
"gopls",
"pyright",
"lua_ls",
"rust_analyzer",
"asm_lsp",
"terraformls",
"ansiblels",
"dockerls",
"yamlls",
"jsonls",
"helm_ls",
})
end,
},
} }
+44 -43
View File
@@ -1,46 +1,47 @@
return { return {
-- formatting -- formatting
{ {
"stevearc/conform.nvim", "stevearc/conform.nvim",
event = { "BufReadPre", "BufNewFile" }, event = { "BufReadPre", "BufNewFile" },
opts = { opts = {
format_on_save = { timeout_ms = 1500, lsp_fallback = true }, format_on_save = { timeout_ms = 1500, lsp_fallback = true },
formatters_by_ft = { formatters_by_ft = {
c = { "clang_format" }, c = { "clang_format" },
cpp = { "clang_format" }, cpp = { "clang_format" },
go = { "gofmt", "goimports" }, go = { "gofmt", "goimports" },
python = { "isort", "black" }, terraform = { "terraform_fmt" },
lua = { "stylua" }, rust = { "rustfmt" },
json = { "prettier" }, python = { "isort", "black" },
yaml = { "prettier" }, lua = { "stylua" },
markdown = { "prettier" }, json = { "prettier" },
}, yaml = { "prettier" },
}, markdown = { "prettier" },
config = function(_, opts) },
require("conform").setup(opts) },
vim.keymap.set("n", "<leader>f", function() config = function(_, opts)
require("conform").format({ lsp_fallback = true }) require("conform").setup(opts)
end, { desc = "Format buffer" }) vim.keymap.set("n", "<leader>f", function()
end, require("conform").format({ lsp_fallback = true })
}, end, { desc = "Format buffer" })
-- linting (optional but nice)
{
"mfussenegger/nvim-lint",
event = { "BufReadPost", "BufNewFile" },
config = function()
local lint = require("lint")
lint.linters_by_ft = {
python = { "flake8" },
go = { "golangcilint" },
}
vim.api.nvim_create_autocmd({ "BufWritePost", "InsertLeave" }, {
callback = function()
lint.try_lint()
end, end,
}) },
end,
},
}
-- linting (optional but nice)
{
"mfussenegger/nvim-lint",
event = { "BufReadPost", "BufNewFile" },
config = function()
local lint = require("lint")
lint.linters_by_ft = {
python = { "flake8" },
go = { "golangcilint" },
}
vim.api.nvim_create_autocmd({ "BufWritePost", "InsertLeave" }, {
callback = function()
lint.try_lint()
end,
})
end,
},
}
+20 -20
View File
@@ -1,23 +1,23 @@
return { return {
{ {
"nvim-treesitter/nvim-treesitter", "nvim-treesitter/nvim-treesitter",
build = ":TSUpdate", build = ":TSUpdate",
event = { "BufReadPost", "BufNewFile" }, event = { "BufReadPost", "BufNewFile" },
opts = { opts = {
ensure_installed = { ensure_installed = {
"c", "cpp", "go", "python", "lua", "c", "cpp", "go", "rust", "python", "lua", "asm", "nasm",
"bash", "json", "yaml", "toml", "terraform", "hcl", "dockerfile",
"markdown", "markdown_inline", "bash", "json", "yaml", "toml",
"regex", "vim", "vimdoc", "markdown", "markdown_inline",
}, "regex", "vim", "vimdoc",
auto_install = true, },
sync_install = false, auto_install = true,
highlight = { enable = true }, sync_install = false,
indent = { enable = true }, highlight = { enable = true },
indent = { enable = true },
},
config = function(_, opts)
require("nvim-treesitter").setup(opts)
end,
}, },
config = function(_, opts)
require("nvim-treesitter").setup(opts)
end,
},
} }
-1
View File
@@ -38,4 +38,3 @@ return {
}, },
}, },
} }
-1
View File
@@ -1 +0,0 @@
/Users/itq/dotfiles/.config/nvim
-40
View File
@@ -74,45 +74,5 @@ yabai -m rule --add app="^V2BOX$" manage=off
yabai -m rule --add app="^Raycast$" manage=off yabai -m rule --add app="^Raycast$" manage=off
yabai -m rule --add app="^Archive Utility$" manage=off yabai -m rule --add app="^Archive Utility$" manage=off
# focus window
alt - j : yabai -m window --focus west
alt - k : yabai -m window --focus south
alt - i : yabai -m window --focus north
alt - l : yabai -m window --focus east
# swap managed window
shift + alt - i : yabai -m window --swap north
shift + alt - k : yabai -m window --swap south
shift + alt - j : yabai -m window --swap west
shift + alt - l : yabai -m window --swap east
# move managed window
shift + cmd - j : yabai -m window --warp west
shift + cmd - i : yabai -m window --warp north
shift + cmd - k : yabai -m window --warp south
shift + cmd - l : yabai -m window --warp east
# balance size of windows
shift + alt - 0 : yabai -m space --balance
# focus monitor
ctrl + alt - z : yabai -m display --focus next
ctrl + alt - x : yabai -m display --focus prev
ctrl + alt - 1 : yabai -m display --focus 1
ctrl + alt - 2 : yabai -m display --focus 2
ctrl + alt - 3 : yabai -m display --focus 3
ctrl + alt - 4 : yabai -m display --focus 4
# increase window size
shift + alt - a : yabai -m window --resize left:-20:0
shift + alt - d : yabai -m window --resize right:-20:0
shift + alt - w : yabai -m window --resize top:0:-20
shift + alt - s : yabai -m window --resize bottom:0:20
# decrease window size
shift + cmd - s : yabai -m window --resize bottom:0:-20
shift + cmd - w : yabai -m window --resize top:0:20
shift + cmd - a : yabai -m window --resize left:20:0
shift + cmd - d : yabai -m window --resize right:20:0
# toggle window split type
alt - e : yabai -m window --toggle split
# float / unfloat window and center on screen
alt - t : yabai -m window --toggle float --grid 4:4:1:1:2:2
echo "yabai configuration loaded.." echo "yabai configuration loaded.."