aboutsummaryrefslogtreecommitdiff
path: root/plugin
diff options
context:
space:
mode:
authorPolesznyák Márk <contact@pml68.dev>2026-04-04 03:16:27 +0200
committerPolesznyák Márk <contact@pml68.dev>2026-04-04 10:12:16 +0200
commit8bb513a86e8bea07fdb8cea71d254d46ffc7806b (patch)
tree745bd411d173e4da9355b214dc74edde08f42692 /plugin
parentfeat: enable ui2, add back LspLog command (diff)
downloadnvim-8bb513a86e8bea07fdb8cea71d254d46ffc7806b.tar.gz
feat!: migrate to vim.pack
Diffstat (limited to 'plugin')
-rw-r--r--plugin/00-settings.lua140
-rw-r--r--plugin/10-remap.lua162
-rw-r--r--plugin/20-colors.lua27
-rw-r--r--plugin/30-lspconfig.lua58
-rw-r--r--plugin/40-completion.lua36
-rw-r--r--plugin/40-git.lua18
-rw-r--r--plugin/40-guard.lua14
-rw-r--r--plugin/40-lsp.lua61
-rw-r--r--plugin/40-misc.lua17
-rw-r--r--plugin/40-oil.lua24
-rw-r--r--plugin/40-treesitter.lua58
11 files changed, 615 insertions, 0 deletions
diff --git a/plugin/00-settings.lua b/plugin/00-settings.lua
new file mode 100644
index 0000000..fba8771
--- /dev/null
+++ b/plugin/00-settings.lua
@@ -0,0 +1,140 @@
+vim.o.rnu = true
+vim.o.nu = true
+
+vim.o.conceallevel = 2
+
+vim.o.laststatus = 3
+
+vim.o.winborder = "rounded"
+
+-- Plugin specific
+vim.g.rustfmt_autosave = 1
+vim.g.vimtex_view_method = 'mupdf'
+vim.g.guard_config = {
+ fmt_on_save = true,
+ lsp_as_default_formatter = true,
+}
+
+vim.g.mason_path = vim.fn.stdpath("data") .. "/mason/bin"
+
+vim.diagnostic.config({ virtual_lines = true })
+
+local function diagnostics()
+ local warns = vim.diagnostic.get(nil, { severity = vim.diagnostic.severity.WARN })
+ local errors = vim.diagnostic.get(nil, { severity = vim.diagnostic.severity.ERROR })
+ return string.format(" %d |  %d", #warns, #errors)
+end
+
+local function get_attached_clients()
+ local buf_clients = vim.lsp.get_clients({ bufnr = 0 })
+ if #buf_clients == 0 then
+ return "LSP Inactive"
+ end
+
+ local buf_client_names = {}
+
+ for _, client in pairs(buf_clients) do
+ table.insert(buf_client_names, client.name)
+ end
+
+ local unique_client_names = {}
+ for _, client_name_target in ipairs(buf_client_names) do
+ local is_duplicate = false
+ for _, client_name_compare in ipairs(unique_client_names) do
+ if client_name_target == client_name_compare then
+ is_duplicate = true
+ end
+ end
+ if not is_duplicate then
+ table.insert(unique_client_names, client_name_target)
+ end
+ end
+
+ local client_names_str = table.concat(unique_client_names, ", ")
+ local language_servers = string.format("[%s]", client_names_str)
+
+ return language_servers
+end
+
+vim.api.nvim_create_user_command("LspLog", function(_)
+ vim.cmd("edit " .. vim.fn.stdpath("state") .. "/lsp.log")
+end, {
+ desc = "Show LSP log",
+})
+
+vim.api.nvim_create_user_command("PackUpdate", function(_)
+ vim.pack.update()
+end, {
+ desc = "Update vim.pack plugins",
+})
+
+vim.api.nvim_create_user_command("PackList", function(_)
+ vim.pack.update(nil, { offline = true })
+end, {
+ desc = "List vim.pack plugins",
+})
+
+require("vim._core.ui2").enable({
+ enable = true,
+})
+
+local function branch_name()
+ local branch = vim.fn.system("git branch --show-current 2> /dev/null | tr -d '\n'")
+ if branch ~= "" then
+ return " " .. branch
+ else
+ return ""
+ end
+end
+
+vim.api.nvim_create_autocmd({ "FileType", "BufEnter", "FocusGained" }, {
+ callback = function()
+ vim.b.branch_name = branch_name()
+ end
+})
+
+function Status_Line()
+ return " "
+ .. "%<"
+ .. " %f "
+ .. (vim.b.branch_name or "")
+ .. " %m"
+ .. " %= "
+ .. diagnostics()
+ .. " "
+ .. get_attached_clients()
+ .. " [%{&filetype}]"
+ .. " %l:%c "
+end
+
+vim.opt.statusline = "%{%v:lua.Status_Line()%}"
+
+vim.o.shiftwidth = 2
+vim.o.tabstop = 2
+vim.o.softtabstop = 2
+vim.o.expandtab = true
+
+vim.o.mouse = ""
+
+vim.o.smartindent = true
+
+vim.o.swapfile = false
+vim.o.backup = false
+
+vim.o.scrolloff = 10
+vim.o.cursorline = false
+
+vim.o.hlsearch = true
+vim.o.incsearch = true
+vim.o.splitbelow = true
+vim.o.splitright = true
+
+vim.o.clipboard = "unnamedplus"
+
+vim.opt.whichwrap:append "<>[]hl"
+
+vim.o.foldmethod = "expr"
+vim.o.foldenable = false
+vim.o.foldexpr = "v:lua.vim.treesitter.foldexpr()"
+
+vim.env.PATH = vim.g.mason_path .. ":" .. vim.env.PATH
diff --git a/plugin/10-remap.lua b/plugin/10-remap.lua
new file mode 100644
index 0000000..a30d6a8
--- /dev/null
+++ b/plugin/10-remap.lua
@@ -0,0 +1,162 @@
+vim.g.mapleader = " "
+vim.keymap.set("n", "<leader>e", "<cmd>Oil --float<CR>")
+vim.keymap.set("n", "<leader>n", "<cmd>set nu!<CR>")
+vim.keymap.set("n", "<leader>rn", "<cmd>set rnu!<CR>")
+vim.keymap.set("n", "<CR>", "<cmd>nohl<CR>")
+vim.keymap.set("n", "<leader>x", "<cmd>bw<CR>")
+vim.keymap.set("n", "<leader>n", "<cmd>bn<CR>")
+vim.keymap.set("n", "<leader>p", "<cmd>bp<CR>")
+vim.keymap.set("n", "<leader>fb", "=ap")
+vim.keymap.set("n", "<leader>m", "<cmd>make<CR>")
+vim.keymap.set("n", "<leader><leader>", "<cmd>!chmod 755 %<CR>", { silent = true })
+vim.keymap.set("n", "<A-J>", ":m .+1<CR>==")
+vim.keymap.set("n", "<A-K>", ":m .-2<CR>==")
+vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv")
+vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")
+vim.keymap.set("n", "<A-a>", "<C-a>")
+vim.keymap.set("n", "<A-x>", "<C-x>")
+vim.keymap.set("v", ">", ">gv")
+vim.keymap.set("v", "<", "<gv")
+vim.keymap.set("n", "<leader>sl", "<cmd>exec \"normal i\".nr2char(getchar()).\"\\e\"<CR>")
+vim.keymap.set("n", "<leader>sc", "<cmd>exec \"normal a\".nr2char(getchar()).\"\\e\"<CR>")
+
+-- u/soer9459
+vim.keymap.set("n", "<leader>,",
+ function()
+ local cursor = vim.api.nvim_win_get_cursor(0)
+ vim.cmd("norm A;")
+ vim.api.nvim_win_set_cursor(0, cursor)
+ end,
+ { noremap = true, silent = true })
+
+-- Switch between windows
+vim.keymap.set("n", "<C-h>", "<C-w>h")
+vim.keymap.set("n", "<C-l>", "<C-w>l")
+vim.keymap.set("n", "<C-j>", "<C-w>j")
+vim.keymap.set("n", "<C-k>", "<C-w>k")
+vim.keymap.set("n", "<C-a>v", ":vsp<CR>")
+vim.keymap.set("n", "<C-a>-", ":sp<CR>")
+
+-- Switch between panes
+vim.keymap.set("n", "<C-h>", "<cmd>TmuxNavigateLeft<CR>")
+vim.keymap.set("n", "<C-l>", "<cmd>TmuxNavigateRight<CR>")
+vim.keymap.set("n", "<C-j>", "<cmd>TmuxNavigateDown<CR>")
+vim.keymap.set("n", "<C-k>", "<cmd>TmuxNavigateUp<CR>")
+
+-- Color picker
+vim.keymap.set("n", "<leader>cc", "<cmd>CccPick<CR>")
+
+-- VimTex
+vim.keymap.set("n", "<leader>ll", "<cmd>VimtexCompile<CR>")
+vim.keymap.set("n", "<leader>vl", "<cmd>VimtexView<CR>")
+
+-- Screenkey
+vim.keymap.set("n", "<leader>sk", "<cmd>Screenkey<CR>")
+
+-- Undotree
+vim.cmd("packadd nvim.undotree")
+vim.keymap.set("n", "<leader>u", require("undotree").open)
+
+-- Telescope
+local lazy_telescope = function()
+ vim.pack.add({
+ "https://github.com/nvim-lua/plenary.nvim",
+ {
+ src = "https://github.com/nvim-telescope/telescope.nvim",
+ version = "v0.2.2"
+ },
+ })
+
+ require("telescope").setup({
+ pickers = {
+ find_files = {
+ hidden = true,
+ find_command = { "rg", "--files", "--hidden", "--glob", "!**/.git/**" },
+ },
+ },
+ })
+end
+
+vim.keymap.set("n", "<leader>ff", function()
+ lazy_telescope()
+ vim.cmd("Telescope find_files")
+end, {})
+vim.keymap.set("n", "<leader>fw", function()
+ lazy_telescope()
+ vim.cmd("Telescope live_grep")
+end, {})
+vim.keymap.set("n", "<leader>fo", function()
+ lazy_telescope()
+ vim.cmd("Telescope buffers")
+end, {})
+vim.keymap.set("n", "<leader>fh", function()
+ lazy_telescope()
+ vim.cmd("Telescope help_tags")
+end, {})
+vim.keymap.set("n", "<leader>fz", function()
+ lazy_telescope()
+ vim.cmd("Telescope current_buffer_fuzzy_find")
+end, {})
+vim.keymap.set("n", "<leader>fg", function()
+ lazy_telescope()
+ vim.cmd("Telescope git_files")
+end, {})
+vim.keymap.set("n", "<leader>fd", function()
+ lazy_telescope()
+ vim.cmd("Telescope diagnostics")
+end, {})
+vim.keymap.set("n", "<leader>ft", function()
+ lazy_telescope()
+ local telescope = require("telescope.builtin")
+ local handle = io.popen("rg 'TODO'")
+ if handle == nil then return end
+ local result = handle:read("*a")
+ handle:close()
+
+ if result:match("[^\r\n]+") == nil then
+ local todo_files = {}
+
+ local files_handle = io.popen("rg --files -g 'TODO.{md,txt}'")
+ if files_handle == nil then return end
+ local files_result = files_handle:read("*a")
+ files_handle:close()
+
+ for file in files_result:gmatch("[^\r\n]+") do
+ table.insert(todo_files, file)
+ end
+
+ if #todo_files > 0 then
+ telescope.find_files({
+ prompt_title = "Choose TODO file",
+ cwd = vim.fn.getcwd(),
+ search_dirs = todo_files
+ })
+ else
+ vim.api.nvim_echo({ { "Failed to find any to-dos", "WarningMsg" } }, true, {})
+ end
+ else
+ telescope.grep_string({ search = "TODO" })
+ end
+end, { noremap = true, silent = true })
+
+-- Diagnostics, LSP
+vim.keymap.set("n", "gl", "<cmd>lua vim.diagnostic.open_float()<CR>")
+vim.keymap.set("n", "gp", "<cmd>lua vim.diagnostic.jump({ count = -1 })<CR>")
+vim.keymap.set("n", "gn", "<cmd>lua vim.diagnostic.jump({ count = 1 })<CR>")
+
+vim.api.nvim_create_autocmd("LspAttach", {
+ desc = "LSP actions",
+ callback = function(event)
+ local opts = { buffer = event.buf }
+
+ vim.keymap.set("n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
+ vim.keymap.set("n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
+ vim.keymap.set("n", "go", "<cmd>lua vim.lsp.buf.type_definition()<CR>", opts)
+ vim.keymap.set("n", "gs", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
+ vim.keymap.set({ "n", "x" }, "<S-f>", "<cmd>lua vim.lsp.buf.format({async = true})<CR>", opts)
+ -- u/Blan_11
+ vim.keymap.set("n", "<leader>lh", function()
+ vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
+ end, { silent = true, buffer = event.buf })
+ end
+})
diff --git a/plugin/20-colors.lua b/plugin/20-colors.lua
new file mode 100644
index 0000000..dcab6d5
--- /dev/null
+++ b/plugin/20-colors.lua
@@ -0,0 +1,27 @@
+vim.pack.add({
+ "https://github.com/uga-rosa/ccc.nvim",
+ {
+ src = "https://github.com/pml68/rosepine-tmuxed",
+ name = "rose-pine",
+ },
+})
+
+require("ccc").setup({
+ highlighter = {
+ auto_enable = true,
+ lsp = true,
+ },
+})
+
+require("rose-pine").setup({
+ styles = {
+ transparency = true,
+ italic = false,
+ },
+ highlight_groups = {
+ StatusLine = { fg = "iris", bg = "iris", blend = 25 },
+ StatusLineNC = { fg = "subtle", bg = "surface" },
+ },
+})
+
+vim.cmd.colorscheme("rose-pine")
diff --git a/plugin/30-lspconfig.lua b/plugin/30-lspconfig.lua
new file mode 100644
index 0000000..d8a9cfc
--- /dev/null
+++ b/plugin/30-lspconfig.lua
@@ -0,0 +1,58 @@
+local servers = {
+ -- "asm_lsp",
+ "html",
+ "ts_ls",
+ "cssls",
+ "svelte",
+ "bashls",
+ "clangd",
+ "pyright",
+ "emmet_language_server",
+ "jsonls",
+ "rust_analyzer",
+ "kotlin_lsp",
+ "lua_ls",
+ "glsl_analyzer",
+ "csharp_ls",
+ "unocss",
+}
+
+vim.api.nvim_create_autocmd({ "BufEnter" }, {
+ pattern = { "build.sh", "*.subpackage.sh", "PKGBUILD", "*.install",
+ "makepkg.conf", "*.ebuild", "*.eclass", "color.map", "make.conf" },
+ callback = function()
+ vim.lsp.start({
+ name = "termux",
+ cmd = { "termux-language-server" }
+ })
+ end,
+})
+
+vim.api.nvim_create_autocmd({ "BufEnter" }, {
+ once = true,
+ pattern = { "Cargo.toml" },
+ callback = function()
+ vim.pack.add({ "https://github.com/saecki/crates.nvim" })
+ require("crates").setup({
+ lsp = {
+ enabled = true,
+ actions = true,
+ completion = true,
+ hover = true,
+ },
+ })
+
+ vim.keymap.set("n", "<leader>rcu", function()
+ require("crates").upgrade_all_crates()
+ end)
+ end,
+})
+
+vim.lsp.config('*', {
+ on_attach = function(client, bufnr)
+ vim.pack.add({ "https://github.com/artemave/workspace-diagnostics.nvim" })
+ require("workspace-diagnostics").populate_workspace_diagnostics(client, bufnr)
+ end
+})
+
+vim.lsp.enable(servers)
diff --git a/plugin/40-completion.lua b/plugin/40-completion.lua
new file mode 100644
index 0000000..597a426
--- /dev/null
+++ b/plugin/40-completion.lua
@@ -0,0 +1,36 @@
+vim.pack.add({
+ {
+ src = "https://github.com/saghen/blink.compat",
+ version = vim.version.range("2.x"),
+ },
+ {
+ src = "https://github.com/saghen/blink.cmp",
+ version = vim.version.range("1.x"),
+ },
+})
+
+require("blink.compat").setup({})
+
+require("blink.cmp").setup({
+ keymap = { preset = "default" },
+ appearance = {
+ nerd_font_variant = "normal",
+ },
+ completion = {
+ documentation = {
+ auto_show = true,
+ auto_show_delay_ms = 150,
+ },
+ },
+ sources = {
+ default = { "lsp", "path", "vimtex", "buffer" },
+ providers = {
+ vimtex = {
+ name = "vimtex",
+ module = "blink.compat.source",
+ },
+ },
+ },
+ cmdline = { enabled = false },
+ signature = { enabled = true },
+})
diff --git a/plugin/40-git.lua b/plugin/40-git.lua
new file mode 100644
index 0000000..eaf67b4
--- /dev/null
+++ b/plugin/40-git.lua
@@ -0,0 +1,18 @@
+vim.pack.add({ "https://github.com/lewis6991/gitsigns.nvim" })
+
+require("gitsigns").setup({
+ signs = {
+ add = { text = "│" },
+ change = { text = "│" },
+ delete = { text = "󰍵" },
+ topdelete = { text = "‾" },
+ changedelete = { text = "~" },
+ untracked = { text = "│" },
+ },
+ on_attach = function(bufnr)
+ local gs = package.loaded.gitsigns
+
+ vim.keymap.set("n", "<leader>gb", gs.blame_line, { buffer = bufnr })
+ vim.keymap.set("n", "<leader>gr", gs.reset_hunk, { buffer = bufnr })
+ end,
+})
diff --git a/plugin/40-guard.lua b/plugin/40-guard.lua
new file mode 100644
index 0000000..ffdd82a
--- /dev/null
+++ b/plugin/40-guard.lua
@@ -0,0 +1,14 @@
+vim.api.nvim_create_autocmd({ "BufEnter" }, {
+ once = true,
+ pattern = { "*.c", "*.cpp", "*.cc", "*.h", "*.hpp", "*.toml", "*.json", "*.lua" },
+ callback = function()
+ vim.pack.add({ "https://github.com/nvimdev/guard-collection" })
+ vim.pack.add({ "https://github.com/nvimdev/guard.nvim" })
+
+ local ft = require("guard.filetype")
+
+ ft("c,cpp,h"):fmt("clang-format")
+ ft("toml"):fmt("taplo")
+ ft("json"):fmt("jq")
+ end,
+})
diff --git a/plugin/40-lsp.lua b/plugin/40-lsp.lua
new file mode 100644
index 0000000..af95c47
--- /dev/null
+++ b/plugin/40-lsp.lua
@@ -0,0 +1,61 @@
+local opts = {
+ ensure_installed = {
+ "bash-language-server",
+ "termux-language-server",
+ "lua-language-server",
+ "clangd",
+ "clang-format",
+ "taplo",
+ "jq",
+ "json-lsp",
+ "svelte-language-server",
+ "emmet-language-server",
+ "html-lsp",
+ "css-lsp",
+ "typescript-language-server",
+ "pyright",
+ "glsl_analyzer",
+ "kotlin-lsp",
+ "jdtls",
+ "csharp-language-server",
+ "unocss-language-server",
+ },
+ PATH = "skip",
+ ui = {
+ icons = {
+ package_pending = " ",
+ package_installed = "󰄳 ",
+ package_uninstalled = " 󰚌",
+ },
+ keymaps = {
+ toggle_server_expand = "<CR>",
+ install_server = "i",
+ update_server = "u",
+ check_server_version = "c",
+ update_all_servers = "U",
+ check_outdated_servers = "C",
+ uninstall_server = "X",
+ cancel_installation = "<C-c>",
+ },
+ },
+ max_concurrent_installers = 10,
+}
+
+vim.api.nvim_create_user_command("MasonInstallAll", function ()
+ if opts.ensure_installed and #opts.ensure_installed > 0 then
+ vim.cmd("MasonInstall " .. table.concat(opts.ensure_installed, " "))
+ end
+end, {
+ desc = "Install all required mason packages",
+})
+
+vim.pack.add({
+ "https://github.com/neovim/nvim-lspconfig",
+ "https://github.com/mason-org/mason.nvim",
+})
+
+require("mason").setup(opts)
+
+if not (vim.uv or vim.loop).fs_stat(vim.g.mason_path) then
+ vim.cmd("MasonInstallAll")
+end
diff --git a/plugin/40-misc.lua b/plugin/40-misc.lua
new file mode 100644
index 0000000..94e46e0
--- /dev/null
+++ b/plugin/40-misc.lua
@@ -0,0 +1,17 @@
+vim.schedule(function()
+ vim.pack.add({
+ "https://github.com/andweeb/presence.nvim",
+ "https://github.com/NStefan002/screenkey.nvim",
+ "https://github.com/NStefan002/visual-surround.nvim",
+ "https://github.com/christoomey/vim-tmux-navigator",
+ "https://github.com/artemave/workspace-diagnostics.nvim",
+ "https://github.com/lukas-reineke/indent-blankline.nvim",
+ })
+
+ require("presence").setup({
+ main_image = "file",
+ })
+ require("screenkey").setup({})
+ require("visual-surround").setup({})
+ require("ibl").setup()
+end)
diff --git a/plugin/40-oil.lua b/plugin/40-oil.lua
new file mode 100644
index 0000000..34b4a90
--- /dev/null
+++ b/plugin/40-oil.lua
@@ -0,0 +1,24 @@
+vim.pack.add({ "https://github.com/stevearc/oil.nvim" })
+require("oil").setup({
+ keymaps = {
+ ["<C-h>"] = false,
+ },
+ view_options = {
+ show_hidden = true,
+ natural_order = true,
+ is_always_hidden = function(name, _)
+ return name == "node_modules" or name == "target"
+ end
+ },
+ float = {
+ padding = 2,
+ max_width = 50,
+ max_height = 0,
+ border = "single",
+ win_options = {
+ winblend = 0,
+ },
+ },
+ skip_confirm_for_simple_edits = true,
+ default_file_explorer = true,
+})
diff --git a/plugin/40-treesitter.lua b/plugin/40-treesitter.lua
new file mode 100644
index 0000000..a9ff45b
--- /dev/null
+++ b/plugin/40-treesitter.lua
@@ -0,0 +1,58 @@
+vim.pack.add({ "https://github.com/nvim-treesitter/nvim-treesitter" })
+
+local ts = require("nvim-treesitter")
+
+local ensure_installed = {
+ "asm",
+ "bash",
+ "c",
+ "c_sharp",
+ "cpp",
+ "css",
+ "git_config",
+ "gitattributes",
+ "gitcommit",
+ "gitignore",
+ "glsl",
+ "hare",
+ "html",
+ "java",
+ "javascript",
+ "json",
+ "kotlin",
+ "lua",
+ "make",
+ "markdown",
+ "markdown_inline",
+ "python",
+ "rust",
+ "scss",
+ "svelte",
+ "typescript",
+ "vim",
+ "vimdoc",
+ "yaml",
+}
+
+ts.install(ensure_installed, {
+ max_jobs = 12,
+ summary = false,
+})
+
+local ignore = {
+ "checkhealth",
+ "lazy",
+ "mason",
+ "TelescopePrompt",
+}
+
+vim.api.nvim_create_autocmd("FileType", {
+ group = vim.api.nvim_create_augroup("EnableTreesitterHighlighting", { clear = true }),
+ callback = function(event)
+ if vim.tbl_contains(ignore, event.match) then
+ return
+ end
+
+ pcall(function() vim.treesitter.start(event.buf) end)
+ end
+})