diff options
Diffstat (limited to 'store/config/nvim/lua')
-rw-r--r-- | store/config/nvim/lua/plugins.lua | 35 | ||||
-rw-r--r-- | store/config/nvim/lua/setup/init.lua | 46 | ||||
-rw-r--r-- | store/config/nvim/lua/setup/lsp.lua | 67 | ||||
-rw-r--r-- | store/config/nvim/lua/setup/plugins/cmp.lua | 30 | ||||
-rw-r--r-- | store/config/nvim/lua/setup/plugins/gitsigns.lua | 40 | ||||
-rw-r--r-- | store/config/nvim/lua/setup/plugins/init.lua | 16 | ||||
-rw-r--r-- | store/config/nvim/lua/setup/plugins/lint.lua | 98 | ||||
-rw-r--r-- | store/config/nvim/lua/setup/plugins/telescope.lua | 28 | ||||
-rw-r--r-- | store/config/nvim/lua/setup/plugins/tree-sitter.lua | 11 | ||||
-rw-r--r-- | store/config/nvim/lua/setup/win.lua | 16 |
10 files changed, 387 insertions, 0 deletions
diff --git a/store/config/nvim/lua/plugins.lua b/store/config/nvim/lua/plugins.lua new file mode 100644 index 0000000..480ea8f --- /dev/null +++ b/store/config/nvim/lua/plugins.lua @@ -0,0 +1,35 @@ +-- spellchecker: disable +return { + { "catppuccin/nvim", name = "catppuccin", priority = 1000 }, + "neovim/nvim-lspconfig", + "hrsh7th/nvim-cmp", + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + { + "nvim-treesitter/nvim-treesitter", + build = ":TSUpdate" + }, + { + "nvim-neo-tree/neo-tree.nvim", + branch = "v3.x", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-tree/nvim-web-devicons", -- not strictly required, but recommended + "MunifTanjim/nui.nvim", + -- {"3rd/image.nvim", opts = {}}, -- Optional image support in preview window: See `# Preview Mode` for more information + }, + lazy = false, -- neo-tree will lazily load itself + }, + { + "nvim-lualine/lualine.nvim", + dependencies = { 'nvim-tree/nvim-web-devicons' } + }, + { + "nvim-telescope/telescope.nvim", + dependencies = { 'nvim-lua/plenary.nvim' } + }, + "windwp/nvim-autopairs", + "mfussenegger/nvim-lint", + "lewis6991/gitsigns.nvim", +} diff --git a/store/config/nvim/lua/setup/init.lua b/store/config/nvim/lua/setup/init.lua new file mode 100644 index 0000000..df3eb3d --- /dev/null +++ b/store/config/nvim/lua/setup/init.lua @@ -0,0 +1,46 @@ +local function close_float() + local wins = vim.api.nvim_list_wins() + for _, v in ipairs(wins) do + if vim.api.nvim_win_get_config(v).relative ~= '' then + vim.api.nvim_win_close(v, false) + end + end +end + +local function setup() + if vim.fn.has("win32") ~= 0 then + require("setup.win").setup() + end + + -- spellchecker: ignore termguicolors + vim.opt.termguicolors = true; + vim.opt.fileformats = "unix,dos"; + vim.opt.number = true; + + vim.g.load_doxygen_syntax = true; + vim.g.doxygen_javadoc_autobrief = false; + + vim.keymap.set("n", "<c-tab>", "<cmd>bnext<cr>") + vim.keymap.set("n", "<c-s-tab>", "<cmd>bNext<cr>") + vim.keymap.set("n", "<esc>", close_float) + vim.keymap.set('t', '<A-n>', '<C-\\><C-n>') + vim.keymap.set('t', '<A-p>', function() + local register = vim.fn.input("Enter register: ") + if register == "" then + register = '"' + end + return '<C-\\><C-N>"' .. register .. 'pi' + end, { expr = true }) + + vim.cmd("autocmd FileType gitcommit,gitrebase,gitconfig set bufhidden=delete") + + vim.diagnostic.config({ virtual_text = true }) + vim.keymap.set("n", "grl", vim.diagnostic.open_float) + + require("setup.lsp").setup() + require("setup.plugins").setup() +end + +return { + setup = setup +} diff --git a/store/config/nvim/lua/setup/lsp.lua b/store/config/nvim/lua/setup/lsp.lua new file mode 100644 index 0000000..15deacd --- /dev/null +++ b/store/config/nvim/lua/setup/lsp.lua @@ -0,0 +1,67 @@ +-- spellchecker: words denols luals + +vim.lsp.config("*", { + capabilities = vim.tbl_extend("force", + vim.lsp.protocol.make_client_capabilities(), + require("cmp_nvim_lsp").default_capabilities() + ) +}) + +local function setup_clangd() + local clangd = "clangd" + local brew_clangd_path = "/usr/local/opt/llvm/bin/clangd" + + if vim.uv.fs_stat(brew_clangd_path) ~= nil then + clangd = brew_clangd_path + end + + vim.lsp.config("clangd", { + cmd = { clangd } + }) + local old_on_attach = vim.lsp.config.clangd.on_attach + vim.lsp.config.clangd.on_attach = function(client, bufnr) + if old_on_attach then old_on_attach(client, bufnr) end + vim.keymap.set('n', 'grs', "<cmd>ClangdSwitchSourceHeader<cr>", { + buffer = bufnr + }) + end +end + +local function setup_luals() + vim.lsp.config("lua_ls", { + settings = { + Lua = { + runtime = { + version = "LuaJIT" + }, + diagnostics = { + globals = { "vim" }, + }, + workspace = { + library = { + [vim.fn.expand "$VIMRUNTIME/lua"] = true, + [vim.fn.expand "$VIMRUNTIME/lua/vim/lsp"] = true, + [vim.fn.stdpath "data" .. "/lazy/lazy.nvim/lua/lazy"] = true, + }, + maxPreload = 100000, + preloadFileSize = 10000, + }, + }, + }, + }) +end + +local function setup() + vim.lsp.enable('denols') + vim.lsp.enable('cmake') + vim.lsp.enable('bashls') + vim.lsp.enable('html') + vim.lsp.enable('cssls') + setup_clangd() + setup_luals() +end + + +return { + setup = setup +} diff --git a/store/config/nvim/lua/setup/plugins/cmp.lua b/store/config/nvim/lua/setup/plugins/cmp.lua new file mode 100644 index 0000000..be9f8ea --- /dev/null +++ b/store/config/nvim/lua/setup/plugins/cmp.lua @@ -0,0 +1,30 @@ +local function setup() + local cmp = require("cmp") + + cmp.setup { + snippet = { + expand = function(args) + vim.snippet.expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + ['<C-b>'] = cmp.mapping.scroll_docs(-4), + ['<C-f>'] = cmp.mapping.scroll_docs(4), + ['<C-j>'] = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Select }), + ['<C-k>'] = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Select }), + ['<C-e>'] = cmp.mapping.abort(), + ['<C-y>'] = cmp.mapping.confirm({ select = true }), + ['<CR>'] = cmp.mapping.confirm({ select = true }), + }), + sources = cmp.config.sources({ + { name = 'nvim_lsp' }, + { name = 'path' }, + }, { + { name = 'buffer' }, + }) + } +end + +return { + setup = setup +} diff --git a/store/config/nvim/lua/setup/plugins/gitsigns.lua b/store/config/nvim/lua/setup/plugins/gitsigns.lua new file mode 100644 index 0000000..957c661 --- /dev/null +++ b/store/config/nvim/lua/setup/plugins/gitsigns.lua @@ -0,0 +1,40 @@ +local function setup() + local gitsigns = require('gitsigns') + + gitsigns.setup { + on_attach = function(bufnr) + local function map(mode, l, r, opts) + opts = opts or {} + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) + end + + -- Navigation + map('n', ']c', function() + if vim.wo.diff then + vim.cmd.normal({ ']c', bang = true }) + else + gitsigns.nav_hunk('next') + end + end) + + map('n', '[c', function() + if vim.wo.diff then + vim.cmd.normal({ '[c', bang = true }) + else + gitsigns.nav_hunk('prev') + end + end) + + -- Actions + map('n', '<leader>gc', gitsigns.preview_hunk) + map('n', '<leader>gt', gitsigns.toggle_deleted) + map('n', '<leader>gd', gitsigns.diffthis) + map('n', '<leader>gb', function() gitsigns.blame_line { full = true } end) + end + } +end + +return { + setup = setup +} diff --git a/store/config/nvim/lua/setup/plugins/init.lua b/store/config/nvim/lua/setup/plugins/init.lua new file mode 100644 index 0000000..5bcc219 --- /dev/null +++ b/store/config/nvim/lua/setup/plugins/init.lua @@ -0,0 +1,16 @@ +local function setup() + require("neo-tree").setup {} + require('lualine').setup {} + + require("setup.plugins.telescope").setup() + require("setup.plugins.gitsigns").setup() + + require("setup.plugins.tree-sitter").setup() + require("setup.plugins.lint").setup() + require("setup.plugins.cmp").setup() + require("nvim-autopairs").setup {} +end + +return { + setup = setup +} diff --git a/store/config/nvim/lua/setup/plugins/lint.lua b/store/config/nvim/lua/setup/plugins/lint.lua new file mode 100644 index 0000000..928841d --- /dev/null +++ b/store/config/nvim/lua/setup/plugins/lint.lua @@ -0,0 +1,98 @@ +local lint = require("lint") + +local cspell = { + name = "cspell", + config_patterns = { + ".cspell.json", + "cspell.json", + ".cSpell.json", + "cSpell.json", + "cspell.config.js", + "cspell.config.cjs", + "cspell.config.json", + "cspell.config.yaml", + "cspell.config.yml", + "cspell.yaml", + "cspell.yml", + }, + fast = true, +} + +local markdownlint = { + name = "markdownlint", + config_patterns = { + ".markdownlint.jsonc", + ".markdownlint.json", + ".markdownlint.yaml", + ".markdownlint.yml", + ".markdownlintrc", + }, + filetypes = { "markdown" }, + fast = true, +} + +local linters = { cspell, markdownlint } + +local linter_names = vim.tbl_map(function(l) return l.name end, linters) + +local function cru_lint(linter, opt) + opt = opt or {} + + local buf = opt.buf or 0 + + if linter.filetypes then + local filetype = vim.api.nvim_get_option_value("filetype", { buf = buf }) + if not vim.list_contains(linter.filetypes, filetype) then + return + end + end + + if 0 ~= #vim.fs.find(linter.config_patterns, { + path = vim.api.nvim_buf_get_name(opt.buf), upward = true }) then + lint.try_lint(linter.name) + end +end + +local function cru_lint_one(name, opt) + for _, linter in ipairs(linters) do + if linter.name == name then + cru_lint(linter, opt) + return + end + end + vim.notify("No linter named " .. name .. " is configured.", vim.log.levels.ERROR, {}) +end + +local function cru_lint_all(opt, fast) + for _, linter in ipairs(linters) do + if not fast or linter.fast then + cru_lint(linter, opt) + end + end +end + +local function cru_lint_all_fast(opt) + local buf = opt.buf + if vim.api.nvim_get_option_value("buftype", { buf = buf }) == "" then + cru_lint_all(opt, true) + end +end + +local function setup() + vim.api.nvim_create_autocmd({ "BufReadPost", "InsertLeave", "TextChanged" }, { callback = cru_lint_all_fast }) + + local function cru_lint_cmd(opt) + if #opt.args == 0 then + cru_lint_all(opt, false) + else + cru_lint_one(opt.args, opt) + end + end + + vim.api.nvim_create_user_command("CruLint", cru_lint_cmd, + { nargs = '?', complete = function() return linter_names end }) +end + +return { + setup = setup, +} diff --git a/store/config/nvim/lua/setup/plugins/telescope.lua b/store/config/nvim/lua/setup/plugins/telescope.lua new file mode 100644 index 0000000..69a69c0 --- /dev/null +++ b/store/config/nvim/lua/setup/plugins/telescope.lua @@ -0,0 +1,28 @@ +local function setup() + local builtin = require('telescope.builtin') + vim.keymap.set('n', '<leader>/', builtin.live_grep, {}) + vim.keymap.set('n', '<leader>fg', builtin.live_grep, {}) + vim.keymap.set('n', '<leader>ff', builtin.find_files, {}) + vim.keymap.set('n', '<leader>fb', builtin.buffers, {}) + vim.keymap.set('n', '<leader>fh', builtin.help_tags, {}) + vim.keymap.set('n', '<leader>fr', builtin.registers, {}) + vim.keymap.set('n', '<leader>fq', builtin.quickfixhistory, {}) + vim.keymap.set('n', '<leader>fm', builtin.marks, {}) + vim.keymap.set('n', '<leader>fd', builtin.diagnostics, {}) + vim.keymap.set('n', '<leader>fs', builtin.lsp_workspace_symbols, {}) + + local function all_files(opts) + opts = vim.tbl_extend('force', { + hidden = true, + no_ignore = true, + no_ignore_parent = true, + }, opts or {}) + builtin.find_files(opts) + end + + vim.keymap.set('n', '<leader>fa', all_files, {}) +end + +return { + setup = setup +} diff --git a/store/config/nvim/lua/setup/plugins/tree-sitter.lua b/store/config/nvim/lua/setup/plugins/tree-sitter.lua new file mode 100644 index 0000000..043f425 --- /dev/null +++ b/store/config/nvim/lua/setup/plugins/tree-sitter.lua @@ -0,0 +1,11 @@ +local function setup() + require'nvim-treesitter.configs'.setup { + highlight = { enable = true }, + incremental_selection = { enable = true }, + textobjects = { enable = true }, + } +end + +return { + setup = setup +} diff --git a/store/config/nvim/lua/setup/win.lua b/store/config/nvim/lua/setup/win.lua new file mode 100644 index 0000000..90e168a --- /dev/null +++ b/store/config/nvim/lua/setup/win.lua @@ -0,0 +1,16 @@ +-- spellchecker: words pwsh +-- spellchecker: ignore shellcmdflag shellredir shellpipe shellquote shellxquote +local function setup() + vim.cmd([[ + let &shell = executable('pwsh') ? 'pwsh' : 'powershell' + let &shellcmdflag = '-NoLogo -ExecutionPolicy RemoteSigned -Command [Console]::InputEncoding=[Console]::OutputEncoding=[System.Text.UTF8Encoding]::new();$PSDefaultParameterValues[''Out-File:Encoding'']=''utf8'';Remove-Alias -Force -ErrorAction SilentlyContinue tee;' + let &shellredir = '2>&1 | %%{ "$_" } | Out-File %s; exit $LastExitCode' + let &shellpipe = '2>&1 | %%{ "$_" } | tee %s; exit $LastExitCode' + set shellquote= shellxquote= + ]]) + vim.opt.completeslash = 'slash' +end + +return { + setup = setup +} |