From 8bb513a86e8bea07fdb8cea71d254d46ffc7806b Mon Sep 17 00:00:00 2001 From: Polesznyák Márk Date: Sat, 4 Apr 2026 03:16:27 +0200 Subject: feat!: migrate to vim.pack --- .gitignore | 2 +- after/ftplugin/rust.lua | 2 +- ftplugin/hare.lua | 6 ++ ftplugin/java.lua | 3 +- ftplugin/json.lua | 1 + ftplugin/rust.lua | 4 + ftplugin/tex.lua | 2 + init.lua | 21 ++++- lsp/gopls.lua | 10 --- lua/pml68/configs/mason.lua | 46 ---------- lua/pml68/lazy.lua | 47 ----------- lua/pml68/lsp.lua | 38 --------- lua/pml68/plugins/colors.lua | 31 ------- lua/pml68/plugins/completion.lua | 35 -------- lua/pml68/plugins/git.lua | 22 ----- lua/pml68/plugins/guard.lua | 25 ------ lua/pml68/plugins/lang-specific.lua | 62 -------------- lua/pml68/plugins/lsp.lua | 22 ----- lua/pml68/plugins/misc.lua | 19 ----- lua/pml68/plugins/oil.lua | 29 ------- lua/pml68/plugins/other.lua | 26 ------ lua/pml68/plugins/telescope.lua | 17 ---- lua/pml68/plugins/treesitter.lua | 68 --------------- lua/pml68/remap.lua | 128 ---------------------------- lua/pml68/settings.lua | 118 -------------------------- plugin/00-settings.lua | 140 +++++++++++++++++++++++++++++++ plugin/10-remap.lua | 162 ++++++++++++++++++++++++++++++++++++ plugin/20-colors.lua | 27 ++++++ plugin/30-lspconfig.lua | 58 +++++++++++++ plugin/40-completion.lua | 36 ++++++++ plugin/40-git.lua | 18 ++++ plugin/40-guard.lua | 14 ++++ plugin/40-lsp.lua | 61 ++++++++++++++ plugin/40-misc.lua | 17 ++++ plugin/40-oil.lua | 24 ++++++ plugin/40-treesitter.lua | 58 +++++++++++++ 36 files changed, 649 insertions(+), 750 deletions(-) create mode 100644 ftplugin/hare.lua create mode 100644 ftplugin/json.lua create mode 100644 ftplugin/rust.lua create mode 100644 ftplugin/tex.lua delete mode 100644 lsp/gopls.lua delete mode 100644 lua/pml68/configs/mason.lua delete mode 100644 lua/pml68/lazy.lua delete mode 100644 lua/pml68/lsp.lua delete mode 100644 lua/pml68/plugins/colors.lua delete mode 100644 lua/pml68/plugins/completion.lua delete mode 100644 lua/pml68/plugins/git.lua delete mode 100644 lua/pml68/plugins/guard.lua delete mode 100644 lua/pml68/plugins/lang-specific.lua delete mode 100644 lua/pml68/plugins/lsp.lua delete mode 100644 lua/pml68/plugins/misc.lua delete mode 100644 lua/pml68/plugins/oil.lua delete mode 100644 lua/pml68/plugins/other.lua delete mode 100644 lua/pml68/plugins/telescope.lua delete mode 100644 lua/pml68/plugins/treesitter.lua delete mode 100644 lua/pml68/remap.lua delete mode 100644 lua/pml68/settings.lua create mode 100644 plugin/00-settings.lua create mode 100644 plugin/10-remap.lua create mode 100644 plugin/20-colors.lua create mode 100644 plugin/30-lspconfig.lua create mode 100644 plugin/40-completion.lua create mode 100644 plugin/40-git.lua create mode 100644 plugin/40-guard.lua create mode 100644 plugin/40-lsp.lua create mode 100644 plugin/40-misc.lua create mode 100644 plugin/40-oil.lua create mode 100644 plugin/40-treesitter.lua diff --git a/.gitignore b/.gitignore index e033bc6..92a49de 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -lazy-lock.json +nvim-pack-lock.json diff --git a/after/ftplugin/rust.lua b/after/ftplugin/rust.lua index 2821b78..5247399 100644 --- a/after/ftplugin/rust.lua +++ b/after/ftplugin/rust.lua @@ -1 +1 @@ -vim.cmd [[set commentstring=//\ %s]] +vim.cmd("set commentstring=// %s") diff --git a/ftplugin/hare.lua b/ftplugin/hare.lua new file mode 100644 index 0000000..c3c0c45 --- /dev/null +++ b/ftplugin/hare.lua @@ -0,0 +1,6 @@ +vim.pack.add({ "git://git.pml68.dev/vim-haredoc" }) + +vim.bo.keywordprg = "haredoc" + +vim.keymap.set("n", "K", ":call Haredoc('.')", { buf = 0 }) +vim.keymap.set("n", "gd", ":call Haredoc(';')", { buf = 0 }) diff --git a/ftplugin/java.lua b/ftplugin/java.lua index ccec910..5f20b17 100644 --- a/ftplugin/java.lua +++ b/ftplugin/java.lua @@ -1,3 +1,5 @@ +vim.pack.add({ "https://github.com/mfussenegger/nvim-jdtls" }) + local home = vim.env.HOME local jdtls = require("jdtls") @@ -98,7 +100,6 @@ local config = { }, }, }, - capabilities = require("cmp_nvim_lsp").default_capabilities(), flags = { allow_incremental_sync = true, }, diff --git a/ftplugin/json.lua b/ftplugin/json.lua new file mode 100644 index 0000000..83a11b6 --- /dev/null +++ b/ftplugin/json.lua @@ -0,0 +1 @@ +vim.pack.add({ "https://github.com/b0o/schemastore.nvim" }) diff --git a/ftplugin/rust.lua b/ftplugin/rust.lua new file mode 100644 index 0000000..1926f6f --- /dev/null +++ b/ftplugin/rust.lua @@ -0,0 +1,4 @@ +vim.pack.add({ "https://github.com/rust-lang/rust.vim" }) + +vim.keymap.set("n", "rts", "RustTest") +vim.keymap.set("n", "rta", "RustTest!") diff --git a/ftplugin/tex.lua b/ftplugin/tex.lua new file mode 100644 index 0000000..3310443 --- /dev/null +++ b/ftplugin/tex.lua @@ -0,0 +1,2 @@ +vim.pack.add({ "https://github.com/micangl/cmp-vimtex" }) +vim.pack.add({ "https://github.com/lervag/vimtex" }) diff --git a/init.lua b/init.lua index 164a954..7bbf57e 100644 --- a/init.lua +++ b/init.lua @@ -1,4 +1,17 @@ -require("pml68.settings") -require("pml68.remap") -require("pml68.lsp") -require("pml68.lazy") +vim.loader.enable() + +vim.api.nvim_create_autocmd("PackChanged", { + callback = function(ev) + local name, kind = ev.data.spec.name, ev.data.kind + + if name == "nvim-treesitter" and kind == "update" then + if not ev.data.active then vim.cmd.packadd("nvim-treesitter") end + vim.cmd("TSUpdate") + end + + if name == "mason.nvim" and kind == "update" then + if not ev.data.active then vim.cmd.packadd("mason.nvim") end + vim.cmd("MasonInstallAll") + end + end +}) diff --git a/lsp/gopls.lua b/lsp/gopls.lua deleted file mode 100644 index a2b5212..0000000 --- a/lsp/gopls.lua +++ /dev/null @@ -1,10 +0,0 @@ -return { - settings = { - gopls = { - completeUnimported = true, - analyses = { - unusedparams = true, - }, - }, - }, -} diff --git a/lua/pml68/configs/mason.lua b/lua/pml68/configs/mason.lua deleted file mode 100644 index 8635109..0000000 --- a/lua/pml68/configs/mason.lua +++ /dev/null @@ -1,46 +0,0 @@ -return { - ensure_installed = { - -- "asm-lsp", - "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", - "gopls", - "gofumpt", - "golines", - "unocss-language-server", - }, - PATH = "skip", - ui = { - icons = { - package_pending = " ", - package_installed = "󰄳 ", - package_uninstalled = " 󰚌", - }, - keymaps = { - toggle_server_expand = "", - install_server = "i", - update_server = "u", - check_server_version = "c", - update_all_servers = "U", - check_outdated_servers = "C", - uninstall_server = "X", - cancel_installation = "", - }, - }, - max_concurrent_installers = 10, -} diff --git a/lua/pml68/lazy.lua b/lua/pml68/lazy.lua deleted file mode 100644 index 32500fa..0000000 --- a/lua/pml68/lazy.lua +++ /dev/null @@ -1,47 +0,0 @@ -local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" -if not (vim.uv or vim.loop).fs_stat(lazypath) then - local out = vim.fn.system({ - "git", - "clone", - "--filter=blob:none", - "https://github.com/folke/lazy.nvim.git", - "--branch=stable", -- latest stable release - 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("pml68.plugins", { - defaults = { lazy = true }, - change_detection = { - notify = false, - }, - performance = { - cache = { - enabled = true, - }, - rtp = { - disabled_plugins = { - "gzip", - "tarPlugin", - "tohtml", - "tutor", - "zipPlugin", - "osc52", - "netrwPlugin", - }, - }, - }, - ui = { - border = "rounded" - }, -}) diff --git a/lua/pml68/lsp.lua b/lua/pml68/lsp.lua deleted file mode 100644 index 6736e26..0000000 --- a/lua/pml68/lsp.lua +++ /dev/null @@ -1,38 +0,0 @@ -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", - "gopls", - "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.lsp.config('*', { - on_attach = function(client, bufnr) - require("workspace-diagnostics").populate_workspace_diagnostics(client, bufnr) - end -}) - -vim.lsp.enable(servers) diff --git a/lua/pml68/plugins/colors.lua b/lua/pml68/plugins/colors.lua deleted file mode 100644 index 17a1ca1..0000000 --- a/lua/pml68/plugins/colors.lua +++ /dev/null @@ -1,31 +0,0 @@ -return { - { - "uga-rosa/ccc.nvim", - event = { "BufReadPost", "BufNewFile" }, - opts = { - highlighter = { - auto_enable = true, - lsp = true, - }, - }, - }, - { - "pml68/rosepine-tmuxed", - name = "rose-pine", - priority = 1000, - lazy = false, - config = function() - 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") - end - }, -} diff --git a/lua/pml68/plugins/completion.lua b/lua/pml68/plugins/completion.lua deleted file mode 100644 index 596b1af..0000000 --- a/lua/pml68/plugins/completion.lua +++ /dev/null @@ -1,35 +0,0 @@ -return { - { - "saghen/blink.compat", - version = "2.*", - opts = {} - }, - { - "saghen/blink.cmp", - lazy = false, - version = "1.*", - opts = { - 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/lua/pml68/plugins/git.lua b/lua/pml68/plugins/git.lua deleted file mode 100644 index e94c230..0000000 --- a/lua/pml68/plugins/git.lua +++ /dev/null @@ -1,22 +0,0 @@ -return { - "lewis6991/gitsigns.nvim", - event = { "BufReadPost", "BufNewFile" }, - config = function() - 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", "gb", gs.blame_line, { buffer = bufnr }) - vim.keymap.set("n", "gr", gs.reset_hunk, { buffer = bufnr }) - end, - }) - end -} diff --git a/lua/pml68/plugins/guard.lua b/lua/pml68/plugins/guard.lua deleted file mode 100644 index 7f609de..0000000 --- a/lua/pml68/plugins/guard.lua +++ /dev/null @@ -1,25 +0,0 @@ -return { - "nvimdev/guard.nvim", - dependencies = { - "nvimdev/guard-collection" - }, - ft = { "c", "cpp", "h", "toml", "json", "go", "lua" }, - config = function() - local ft = require("guard.filetype") - - ft("c,cpp,h"):fmt("clang-format") - ft("toml"):fmt("taplo") - ft("json"):fmt("jq") - - ft("go"):fmt({ - cmd = "golines", - args = { "--max-len=80", "--base-formatter=gofumpt" }, - stdin = true, - }) - - vim.g.guard_config = { - fmt_on_save = true, - lsp_as_default_formatter = true, - } - end -} diff --git a/lua/pml68/plugins/lang-specific.lua b/lua/pml68/plugins/lang-specific.lua deleted file mode 100644 index b1eff88..0000000 --- a/lua/pml68/plugins/lang-specific.lua +++ /dev/null @@ -1,62 +0,0 @@ -return { - -- JSON - { - "b0o/schemastore.nvim", - lazy = false, - }, - -- Java - { - "mfussenegger/nvim-jdtls" - }, - -- Go - { - "olexsmir/gopher.nvim", - ft = "go", - build = ":GoInstallDeps", - }, - -- Rust - { - "rust-lang/rust.vim", - ft = "rust", - init = function() - vim.g.rustfmt_autosave = 1 - end, - config = function() - vim.keymap.set("n", "rts", "RustTest") - vim.keymap.set("n", "rta", "RustTest!") - end - }, - { - "saecki/crates.nvim", - event = { "BufRead Cargo.toml", "BufWrite Cargo.toml" }, - config = function() - local crates = require("crates") - crates.setup({ - lsp = { - enabled = true, - actions = true, - completion = true, - hover = true, - }, - }) - - vim.keymap.set("n", "rcu", function() - crates.upgrade_all_crates() - end) - end - }, - -- LaTeX - { - "lervag/vimtex", - dependencies = "micangl/cmp-vimtex", - ft = "tex", - init = function() - vim.g.vimtex_view_method = 'mupdf' - end, - }, - -- Hare - { - url = "git://git.pml68.dev/vim-haredoc", - ft = "hare", - }, -} diff --git a/lua/pml68/plugins/lsp.lua b/lua/pml68/plugins/lsp.lua deleted file mode 100644 index 999320e..0000000 --- a/lua/pml68/plugins/lsp.lua +++ /dev/null @@ -1,22 +0,0 @@ -return { - { - "neovim/nvim-lspconfig", - event = { "BufReadPost", "BufNewFile" }, - }, - { - "mason-org/mason.nvim", - cmd = { "Mason", "MasonInstall", "MasonInstallAll", "MasonUninstall", "MasonUninstallAll", "MasonUpdate", "MasonLog" }, - opts = function() - return require("pml68.configs.mason") - end, - config = function(_, opts) - require("mason").setup(opts) - 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, {}) - end, - build = ":MasonInstallAll", - }, -} diff --git a/lua/pml68/plugins/misc.lua b/lua/pml68/plugins/misc.lua deleted file mode 100644 index 1e0aec3..0000000 --- a/lua/pml68/plugins/misc.lua +++ /dev/null @@ -1,19 +0,0 @@ -return { - { - "andweeb/presence.nvim", - event = { "BufReadPost", "BufNewFile" }, - opts = { - main_image = "file", - }, - }, - { - "NStefan002/screenkey.nvim", - cmd = "Screenkey", - version = "*", - config = true - }, - { - "eandrju/cellular-automaton.nvim", - cmd = "CellularAutomaton", - }, -} diff --git a/lua/pml68/plugins/oil.lua b/lua/pml68/plugins/oil.lua deleted file mode 100644 index 974f94f..0000000 --- a/lua/pml68/plugins/oil.lua +++ /dev/null @@ -1,29 +0,0 @@ -return { - "stevearc/oil.nvim", - cmd = "Oil", - config = function() - require("oil").setup({ - keymaps = { - [""] = false, - }, - view_options = { - show_hidden = true, - natural_order = true, - is_always_hidden = function(name, _) - return name == '.git' or 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, - }) - end -} diff --git a/lua/pml68/plugins/other.lua b/lua/pml68/plugins/other.lua deleted file mode 100644 index d415f0b..0000000 --- a/lua/pml68/plugins/other.lua +++ /dev/null @@ -1,26 +0,0 @@ -return { - { - "NStefan002/visual-surround.nvim", - event = { "BufReadPost", "BufNewFile" }, - config = true, - }, - { - "christoomey/vim-tmux-navigator", - lazy = false, - }, - { - "artemave/workspace-diagnostics.nvim", - }, - { - "lukas-reineke/indent-blankline.nvim", - main = "ibl", - event = { "BufReadPost", "BufNewFile" }, - config = function() - require("ibl").setup() - end - }, - { - "stevearc/dressing.nvim", - event = "VeryLazy", - }, -} diff --git a/lua/pml68/plugins/telescope.lua b/lua/pml68/plugins/telescope.lua deleted file mode 100644 index ccc0488..0000000 --- a/lua/pml68/plugins/telescope.lua +++ /dev/null @@ -1,17 +0,0 @@ -return { - "nvim-telescope/telescope.nvim", - tag = "v0.2.1", - cmd = "Telescope", - dependencies = { - "nvim-lua/plenary.nvim", - "nvim-telescope/telescope-fzf-native.nvim", - }, - opts = { - pickers = { - find_files = { - hidden = true, - find_command = { "rg", "--files", "--hidden", "--glob", "!**/.git/**" }, - }, - }, - }, -} diff --git a/lua/pml68/plugins/treesitter.lua b/lua/pml68/plugins/treesitter.lua deleted file mode 100644 index 6416f1f..0000000 --- a/lua/pml68/plugins/treesitter.lua +++ /dev/null @@ -1,68 +0,0 @@ -return { - "nvim-treesitter/nvim-treesitter", - lazy = false, - build = ":TSUpdate", - config = function() - local ts = require("nvim-treesitter") - - local ensure_installed = { - "asm", - "bash", - "c", - "c_sharp", - "cpp", - "css", - "git_config", - "gitattributes", - "gitcommit", - "gitignore", - "glsl", - "go", - "gomod", - "gosum", - "gotmpl", - "gowork", - "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 - }) - end -} diff --git a/lua/pml68/remap.lua b/lua/pml68/remap.lua deleted file mode 100644 index 0af8323..0000000 --- a/lua/pml68/remap.lua +++ /dev/null @@ -1,128 +0,0 @@ -vim.g.mapleader = " " -vim.keymap.set("n", "e", "Oil --float") -vim.keymap.set("n", "n", "set nu!") -vim.keymap.set("n", "rn", "set rnu!") -vim.keymap.set("n", "", "nohl") -vim.keymap.set("n", "x", "bw") -vim.keymap.set("n", "n", "bn") -vim.keymap.set("n", "p", "bp") -vim.keymap.set("n", "fb", "=ap") -vim.keymap.set("n", "m", "make") -vim.keymap.set("n", "", "!chmod 755 %", { silent = true }) -vim.keymap.set("n", "", ":m .+1==") -vim.keymap.set("n", "", ":m .-2==") -vim.keymap.set("v", "J", ":m '>+1gv=gv") -vim.keymap.set("v", "K", ":m '<-2gv=gv") -vim.keymap.set("n", "", "") -vim.keymap.set("n", "", "") -vim.keymap.set("v", ">", ">gv") -vim.keymap.set("v", "<", "sl", "exec \"normal i\".nr2char(getchar()).\"\\e\"") -vim.keymap.set("n", "sc", "exec \"normal a\".nr2char(getchar()).\"\\e\"") - --- u/soer9459 -vim.keymap.set('n', ',', - 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", "", "h") -vim.keymap.set("n", "", "l") -vim.keymap.set("n", "", "j") -vim.keymap.set("n", "", "k") -vim.keymap.set("n", "v", ":vsp") -vim.keymap.set("n", "-", ":sp") - --- Switch between panes -vim.keymap.set("n", "", "TmuxNavigateLeft") -vim.keymap.set("n", "", "TmuxNavigateRight") -vim.keymap.set("n", "", "TmuxNavigateDown") -vim.keymap.set("n", "", "TmuxNavigateUp") - --- Cellular Automaton -vim.keymap.set("n", "gol", "CellularAutomaton game_of_life") - --- Color picker -vim.keymap.set("n", "cc", "CccPick") - --- VimTex -vim.keymap.set("n", "ll", "VimtexCompile") -vim.keymap.set("n", "vl", "VimtexView") - --- Go -vim.keymap.set("n", "gj", "GoTagAdd json") -vim.keymap.set("n", "gy", "GoTagAdd yaml") -vim.keymap.set("n", "ge", "GoIfErr") -vim.keymap.set("n", "gt", "GoMod tidy") - --- Screenkey -vim.keymap.set("n", "sk", "Screenkey") - --- Undotree -vim.cmd("packadd nvim.undotree") -vim.keymap.set("n", "u", require("undotree").open) - --- Telescope -vim.keymap.set('n', 'ff', "Telescope find_files", {}) -vim.keymap.set('n', 'fw', "Telescope live_grep", {}) -vim.keymap.set('n', 'fo', "Telescope buffers", {}) -vim.keymap.set('n', 'fh', "Telescope help_tags", {}) -vim.keymap.set('n', 'fz', "Telescope current_buffer_fuzzy_find", {}) -vim.keymap.set('n', 'fg', "Telescope git_files", {}) -vim.keymap.set('n', 'fd', "Telescope diagnostics", {}) -vim.keymap.set('n', 'ft', function() - local telescope = require("telescope.builtin") - local handle = io.popen("rg 'TODO'") - 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}'") - 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', 'lua vim.diagnostic.open_float()') -vim.keymap.set('n', 'gp', 'lua vim.diagnostic.goto_prev()') -vim.keymap.set('n', 'gn', 'lua vim.diagnostic.goto_next()') - -vim.api.nvim_create_autocmd('LspAttach', { - desc = 'LSP actions', - callback = function(event) - local opts = { buffer = event.buf } - - vim.keymap.set('n', 'gd', 'lua vim.lsp.buf.definition()', opts) - vim.keymap.set('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) - vim.keymap.set('n', 'go', 'lua vim.lsp.buf.type_definition()', opts) - vim.keymap.set('n', 'gs', 'lua vim.lsp.buf.signature_help()', opts) - vim.keymap.set({ 'n', 'x' }, '', 'lua vim.lsp.buf.format({async = true})', opts) - -- u/Blan_11 - vim.keymap.set('n', 'lh', function() - vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled()) - end, { silent = true, buffer = event.buf }) - end -}) diff --git a/lua/pml68/settings.lua b/lua/pml68/settings.lua deleted file mode 100644 index 071d139..0000000 --- a/lua/pml68/settings.lua +++ /dev/null @@ -1,118 +0,0 @@ -vim.o.rnu = true -vim.o.nu = true - -vim.o.conceallevel = 2 - -vim.o.laststatus = 3 - -vim.o.winborder = "rounded" - -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.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_autocmd({ "FileType", "BufEnter", "FocusGained" }, { - callback = function() - vim.b.branch_name = branch_name() - end -}) - -vim.api.nvim_create_user_command("LspLog", function(_) - vim.cmd("edit " .. vim.fn.stdpath("state") .. "/lsp.log") -end, { - desc = "Show LSP log", -}) - -require("vim._core.ui2").enable({ - enable = true, -}) - -function Status_Line() - return " " - .. "%<" - .. " %f " - .. vim.b.branch_name - .. " %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.fn.stdpath "data" .. "/mason/bin" .. ":" .. vim.env.PATH 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", "e", "Oil --float") +vim.keymap.set("n", "n", "set nu!") +vim.keymap.set("n", "rn", "set rnu!") +vim.keymap.set("n", "", "nohl") +vim.keymap.set("n", "x", "bw") +vim.keymap.set("n", "n", "bn") +vim.keymap.set("n", "p", "bp") +vim.keymap.set("n", "fb", "=ap") +vim.keymap.set("n", "m", "make") +vim.keymap.set("n", "", "!chmod 755 %", { silent = true }) +vim.keymap.set("n", "", ":m .+1==") +vim.keymap.set("n", "", ":m .-2==") +vim.keymap.set("v", "J", ":m '>+1gv=gv") +vim.keymap.set("v", "K", ":m '<-2gv=gv") +vim.keymap.set("n", "", "") +vim.keymap.set("n", "", "") +vim.keymap.set("v", ">", ">gv") +vim.keymap.set("v", "<", "sl", "exec \"normal i\".nr2char(getchar()).\"\\e\"") +vim.keymap.set("n", "sc", "exec \"normal a\".nr2char(getchar()).\"\\e\"") + +-- u/soer9459 +vim.keymap.set("n", ",", + 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", "", "h") +vim.keymap.set("n", "", "l") +vim.keymap.set("n", "", "j") +vim.keymap.set("n", "", "k") +vim.keymap.set("n", "v", ":vsp") +vim.keymap.set("n", "-", ":sp") + +-- Switch between panes +vim.keymap.set("n", "", "TmuxNavigateLeft") +vim.keymap.set("n", "", "TmuxNavigateRight") +vim.keymap.set("n", "", "TmuxNavigateDown") +vim.keymap.set("n", "", "TmuxNavigateUp") + +-- Color picker +vim.keymap.set("n", "cc", "CccPick") + +-- VimTex +vim.keymap.set("n", "ll", "VimtexCompile") +vim.keymap.set("n", "vl", "VimtexView") + +-- Screenkey +vim.keymap.set("n", "sk", "Screenkey") + +-- Undotree +vim.cmd("packadd nvim.undotree") +vim.keymap.set("n", "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", "ff", function() + lazy_telescope() + vim.cmd("Telescope find_files") +end, {}) +vim.keymap.set("n", "fw", function() + lazy_telescope() + vim.cmd("Telescope live_grep") +end, {}) +vim.keymap.set("n", "fo", function() + lazy_telescope() + vim.cmd("Telescope buffers") +end, {}) +vim.keymap.set("n", "fh", function() + lazy_telescope() + vim.cmd("Telescope help_tags") +end, {}) +vim.keymap.set("n", "fz", function() + lazy_telescope() + vim.cmd("Telescope current_buffer_fuzzy_find") +end, {}) +vim.keymap.set("n", "fg", function() + lazy_telescope() + vim.cmd("Telescope git_files") +end, {}) +vim.keymap.set("n", "fd", function() + lazy_telescope() + vim.cmd("Telescope diagnostics") +end, {}) +vim.keymap.set("n", "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", "lua vim.diagnostic.open_float()") +vim.keymap.set("n", "gp", "lua vim.diagnostic.jump({ count = -1 })") +vim.keymap.set("n", "gn", "lua vim.diagnostic.jump({ count = 1 })") + +vim.api.nvim_create_autocmd("LspAttach", { + desc = "LSP actions", + callback = function(event) + local opts = { buffer = event.buf } + + vim.keymap.set("n", "gd", "lua vim.lsp.buf.definition()", opts) + vim.keymap.set("n", "gD", "lua vim.lsp.buf.declaration()", opts) + vim.keymap.set("n", "go", "lua vim.lsp.buf.type_definition()", opts) + vim.keymap.set("n", "gs", "lua vim.lsp.buf.signature_help()", opts) + vim.keymap.set({ "n", "x" }, "", "lua vim.lsp.buf.format({async = true})", opts) + -- u/Blan_11 + vim.keymap.set("n", "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", "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", "gb", gs.blame_line, { buffer = bufnr }) + vim.keymap.set("n", "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 = "", + install_server = "i", + update_server = "u", + check_server_version = "c", + update_all_servers = "U", + check_outdated_servers = "C", + uninstall_server = "X", + cancel_installation = "", + }, + }, + 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 = { + [""] = 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 +}) -- cgit v1.2.3