aboutsummaryrefslogtreecommitdiff
path: root/store/config/nvim/lua
diff options
context:
space:
mode:
Diffstat (limited to 'store/config/nvim/lua')
-rw-r--r--store/config/nvim/lua/plugins.lua35
-rw-r--r--store/config/nvim/lua/setup/init.lua46
-rw-r--r--store/config/nvim/lua/setup/lsp.lua67
-rw-r--r--store/config/nvim/lua/setup/plugins/cmp.lua30
-rw-r--r--store/config/nvim/lua/setup/plugins/gitsigns.lua40
-rw-r--r--store/config/nvim/lua/setup/plugins/init.lua16
-rw-r--r--store/config/nvim/lua/setup/plugins/lint.lua98
-rw-r--r--store/config/nvim/lua/setup/plugins/telescope.lua28
-rw-r--r--store/config/nvim/lua/setup/plugins/tree-sitter.lua11
-rw-r--r--store/config/nvim/lua/setup/win.lua16
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
+}