From 0721b537a8aa3be8b70c183b25951494df9dcd0e Mon Sep 17 00:00:00 2001 From: Matthew Lemon Date: Sun, 14 May 2023 09:10:26 +0100 Subject: Installs nvim config base-idea --- nvim-primeagen/.gitignore | 1 + nvim-primeagen/after/plugin/ale.lua | 41 ++++++ nvim-primeagen/after/plugin/colors.lua | 14 ++ nvim-primeagen/after/plugin/copilot.lua | 17 +++ nvim-primeagen/after/plugin/dap.lua | 30 ++++ nvim-primeagen/after/plugin/fugitive.lua | 1 + nvim-primeagen/after/plugin/harpoon.lua | 10 ++ nvim-primeagen/after/plugin/ledger.lua | 4 + nvim-primeagen/after/plugin/lsp.lua | 99 +++++++++++++ nvim-primeagen/after/plugin/luasnip.lua | 46 ++++++ nvim-primeagen/after/plugin/marksman.lua | 1 + nvim-primeagen/after/plugin/neotest-python.lua | 112 ++++++++++++++ nvim-primeagen/after/plugin/telescope.lua | 16 ++ nvim-primeagen/after/plugin/todo-txt.lua | 44 ++++++ nvim-primeagen/after/plugin/treesitter.lua | 23 +++ nvim-primeagen/after/plugin/trouble.lua | 3 + nvim-primeagen/after/plugin/undotree.lua | 2 + nvim-primeagen/after/plugin/zenmode.lua | 30 ++++ nvim-primeagen/init.lua | 1 + nvim-primeagen/lua/lemon/init.lua | 7 + nvim-primeagen/lua/lemon/packer.lua | 106 +++++++++++++ nvim-primeagen/lua/lemon/popup.lua | 58 ++++++++ nvim-primeagen/lua/lemon/remap.lua | 45 ++++++ nvim-primeagen/lua/lemon/set.lua | 44 ++++++ nvim/.gitignore | 1 - nvim/.stylua.toml | 6 + nvim/README.md | 196 +++++++++++++++++++++++++ nvim/after/plugin/ale.lua | 41 ------ nvim/after/plugin/colors.lua | 14 -- nvim/after/plugin/copilot.lua | 17 --- nvim/after/plugin/dap.lua | 30 ---- nvim/after/plugin/fugitive.lua | 1 - nvim/after/plugin/harpoon.lua | 10 -- nvim/after/plugin/ledger.lua | 4 - nvim/after/plugin/lsp.lua | 99 ------------- nvim/after/plugin/luasnip.lua | 46 ------ nvim/after/plugin/marksman.lua | 1 - nvim/after/plugin/neotest-python.lua | 112 -------------- nvim/after/plugin/telescope.lua | 16 -- nvim/after/plugin/todo-txt.lua | 44 ------ nvim/after/plugin/treesitter.lua | 23 --- nvim/after/plugin/trouble.lua | 3 - nvim/after/plugin/undotree.lua | 2 - nvim/after/plugin/zenmode.lua | 30 ---- nvim/init.lua | 5 +- nvim/lazy-lock.json | 39 +++++ nvim/lua/Lazy.lua | 38 +++++ nvim/lua/autocommands.lua | 53 +++++++ nvim/lua/keymaps.lua | 83 +++++++++++ nvim/lua/lemon/init.lua | 7 - nvim/lua/lemon/packer.lua | 106 ------------- nvim/lua/lemon/popup.lua | 58 -------- nvim/lua/lemon/remap.lua | 45 ------ nvim/lua/lemon/set.lua | 44 ------ nvim/lua/options.lua | 43 ++++++ nvim/lua/settings/lua_ls.lua | 18 +++ nvim/lua/settings/pyright.lua | 9 ++ nvim/lua/user/alpha.lua | 41 ++++++ nvim/lua/user/autopairs.lua | 45 ++++++ nvim/lua/user/bufferline.lua | 97 ++++++++++++ nvim/lua/user/cmp.lua | 167 +++++++++++++++++++++ nvim/lua/user/colorscheme.lua | 19 +++ nvim/lua/user/comment.lua | 39 +++++ nvim/lua/user/dap.lua | 67 +++++++++ nvim/lua/user/dapui.lua | 60 ++++++++ nvim/lua/user/gitsigns.lua | 43 ++++++ nvim/lua/user/illuminate.lua | 54 +++++++ nvim/lua/user/indentline.lua | 21 +++ nvim/lua/user/lsp.lua | 111 ++++++++++++++ nvim/lua/user/lualine.lua | 67 +++++++++ nvim/lua/user/mason.lua | 36 +++++ nvim/lua/user/neorg.lua | 33 +++++ nvim/lua/user/null-ls.lua | 37 +++++ nvim/lua/user/nvim-dev-icons.lua | 22 +++ nvim/lua/user/nvim-tree.lua | 65 ++++++++ nvim/lua/user/project.lua | 29 ++++ nvim/lua/user/telescope.lua | 33 +++++ nvim/lua/user/toggleterm.lua | 49 +++++++ nvim/lua/user/treesitter.lua | 44 ++++++ nvim/lua/user/which-key.lua | 11 ++ nvim/lua/utils/init.lua | 15 ++ 81 files changed, 2449 insertions(+), 755 deletions(-) create mode 100644 nvim-primeagen/.gitignore create mode 100644 nvim-primeagen/after/plugin/ale.lua create mode 100644 nvim-primeagen/after/plugin/colors.lua create mode 100644 nvim-primeagen/after/plugin/copilot.lua create mode 100644 nvim-primeagen/after/plugin/dap.lua create mode 100644 nvim-primeagen/after/plugin/fugitive.lua create mode 100644 nvim-primeagen/after/plugin/harpoon.lua create mode 100644 nvim-primeagen/after/plugin/ledger.lua create mode 100644 nvim-primeagen/after/plugin/lsp.lua create mode 100644 nvim-primeagen/after/plugin/luasnip.lua create mode 100644 nvim-primeagen/after/plugin/marksman.lua create mode 100644 nvim-primeagen/after/plugin/neotest-python.lua create mode 100644 nvim-primeagen/after/plugin/telescope.lua create mode 100644 nvim-primeagen/after/plugin/todo-txt.lua create mode 100644 nvim-primeagen/after/plugin/treesitter.lua create mode 100644 nvim-primeagen/after/plugin/trouble.lua create mode 100644 nvim-primeagen/after/plugin/undotree.lua create mode 100644 nvim-primeagen/after/plugin/zenmode.lua create mode 100644 nvim-primeagen/init.lua create mode 100644 nvim-primeagen/lua/lemon/init.lua create mode 100644 nvim-primeagen/lua/lemon/packer.lua create mode 100644 nvim-primeagen/lua/lemon/popup.lua create mode 100644 nvim-primeagen/lua/lemon/remap.lua create mode 100644 nvim-primeagen/lua/lemon/set.lua delete mode 100644 nvim/.gitignore create mode 100644 nvim/.stylua.toml create mode 100644 nvim/README.md delete mode 100644 nvim/after/plugin/ale.lua delete mode 100644 nvim/after/plugin/colors.lua delete mode 100644 nvim/after/plugin/copilot.lua delete mode 100644 nvim/after/plugin/dap.lua delete mode 100644 nvim/after/plugin/fugitive.lua delete mode 100644 nvim/after/plugin/harpoon.lua delete mode 100644 nvim/after/plugin/ledger.lua delete mode 100644 nvim/after/plugin/lsp.lua delete mode 100644 nvim/after/plugin/luasnip.lua delete mode 100644 nvim/after/plugin/marksman.lua delete mode 100644 nvim/after/plugin/neotest-python.lua delete mode 100644 nvim/after/plugin/telescope.lua delete mode 100644 nvim/after/plugin/todo-txt.lua delete mode 100644 nvim/after/plugin/treesitter.lua delete mode 100644 nvim/after/plugin/trouble.lua delete mode 100644 nvim/after/plugin/undotree.lua delete mode 100644 nvim/after/plugin/zenmode.lua create mode 100644 nvim/lazy-lock.json create mode 100644 nvim/lua/Lazy.lua create mode 100644 nvim/lua/autocommands.lua create mode 100644 nvim/lua/keymaps.lua delete mode 100644 nvim/lua/lemon/init.lua delete mode 100644 nvim/lua/lemon/packer.lua delete mode 100644 nvim/lua/lemon/popup.lua delete mode 100644 nvim/lua/lemon/remap.lua delete mode 100644 nvim/lua/lemon/set.lua create mode 100644 nvim/lua/options.lua create mode 100644 nvim/lua/settings/lua_ls.lua create mode 100644 nvim/lua/settings/pyright.lua create mode 100644 nvim/lua/user/alpha.lua create mode 100644 nvim/lua/user/autopairs.lua create mode 100644 nvim/lua/user/bufferline.lua create mode 100644 nvim/lua/user/cmp.lua create mode 100644 nvim/lua/user/colorscheme.lua create mode 100644 nvim/lua/user/comment.lua create mode 100644 nvim/lua/user/dap.lua create mode 100644 nvim/lua/user/dapui.lua create mode 100644 nvim/lua/user/gitsigns.lua create mode 100644 nvim/lua/user/illuminate.lua create mode 100644 nvim/lua/user/indentline.lua create mode 100644 nvim/lua/user/lsp.lua create mode 100644 nvim/lua/user/lualine.lua create mode 100644 nvim/lua/user/mason.lua create mode 100644 nvim/lua/user/neorg.lua create mode 100644 nvim/lua/user/null-ls.lua create mode 100644 nvim/lua/user/nvim-dev-icons.lua create mode 100644 nvim/lua/user/nvim-tree.lua create mode 100644 nvim/lua/user/project.lua create mode 100644 nvim/lua/user/telescope.lua create mode 100644 nvim/lua/user/toggleterm.lua create mode 100644 nvim/lua/user/treesitter.lua create mode 100644 nvim/lua/user/which-key.lua create mode 100644 nvim/lua/utils/init.lua diff --git a/nvim-primeagen/.gitignore b/nvim-primeagen/.gitignore new file mode 100644 index 0000000..c84aa4a --- /dev/null +++ b/nvim-primeagen/.gitignore @@ -0,0 +1 @@ +plugin/packer_compiled.lua diff --git a/nvim-primeagen/after/plugin/ale.lua b/nvim-primeagen/after/plugin/ale.lua new file mode 100644 index 0000000..da1415c --- /dev/null +++ b/nvim-primeagen/after/plugin/ale.lua @@ -0,0 +1,41 @@ +-- Set the configuration options for the plugin +local linters = { + python = {'ruff'}, + ocaml = {'merlin'}, + cpp = {'clang'}, + yaml = {'yamllint'}, + c = {'clang'}, + go = {'gopls', 'golint', 'gofmt'}, +} + +local fixers = { + python = {'ruff', 'isort', 'yapf', 'black'}, + go = {'gofmt'}, + rust = {'rustfmt'}, +} + +local pyright_config = { + useLibraryCodeForTypes = 1, + disableLanguageServices = 1, + autoImportCompletions = 1, +} + +vim.api.nvim_set_var('ale_linters', linters) +vim.api.nvim_set_var('ale_python_pyright_config', pyright_config) +vim.api.nvim_set_var('ale_fix_on_save', 1) +vim.api.nvim_set_var('ale_warn_about_trailing_whitespace', 1) +vim.api.nvim_set_var('ale_disable_lsp', 1) +vim.api.nvim_set_var('ale_use_neovim_diagnostics_api', 1) +vim.api.nvim_set_var('ale_set_quickfix', 1) +vim.api.nvim_set_var('ale_echo_cursor', 1) +vim.api.nvim_set_var('ale_echo_msg_error_str', 'Error') +vim.api.nvim_set_var('ale_echo_msg_form', '%linter% - %code: %%s') +vim.api.nvim_set_var('ale_loclist_msg_format', '%linter% - %code: %%s') +vim.api.nvim_set_var('ale_echo_msg_warning_s', 'Warning') +vim.api.nvim_set_var('ale_fixers', fixers) +vim.api.nvim_set_var('ale_python_mypy_ignore_invalid_syntax', 1) +vim.api.nvim_set_var('ale_python_mypy_executable', 'mypy') +vim.api.nvim_set_var('ale_python_mypy_options', '--config-file mypy.ini') +vim.api.nvim_set_var('g:ale_sign_error', '>>') +vim.api.nvim_set_var('ale_fix_on_save', 1) +vim.api.nvim_set_var('ale_linters_explicit', 0) diff --git a/nvim-primeagen/after/plugin/colors.lua b/nvim-primeagen/after/plugin/colors.lua new file mode 100644 index 0000000..fe97b1b --- /dev/null +++ b/nvim-primeagen/after/plugin/colors.lua @@ -0,0 +1,14 @@ +require('rose-pine').setup({ + disable_background = true +}) + +function ColorMyPencils(color) + color = color or "rose-pine" + vim.cmd.colorscheme(color) + + vim.api.nvim_set_hl(0, "Normal", { bg = "none" }) + vim.api.nvim_set_hl(0, "NormalFloat", { bg = "none" }) + +end + +ColorMyPencils() diff --git a/nvim-primeagen/after/plugin/copilot.lua b/nvim-primeagen/after/plugin/copilot.lua new file mode 100644 index 0000000..7ed6529 --- /dev/null +++ b/nvim-primeagen/after/plugin/copilot.lua @@ -0,0 +1,17 @@ +vim.g.copilot_no_tab_map = true +vim.api.nvim_set_keymap("i", "", 'copilot#Accept("")', { silent = true, expr = true }) +-- not working vim.g.copilot_assume_mapped = true + +vim.g.copilot_filetypes = { + ["*"] = false, + ["markdown"] = false, + ["javascript"] = false, + ["typescript"] = false, + ["lua"] = true, + ["rust"] = true, + ["c"] = true, + ["c#"] = true, + ["c++"] = true, + ["go"] = true, + ["python"] = true, +} diff --git a/nvim-primeagen/after/plugin/dap.lua b/nvim-primeagen/after/plugin/dap.lua new file mode 100644 index 0000000..495445f --- /dev/null +++ b/nvim-primeagen/after/plugin/dap.lua @@ -0,0 +1,30 @@ +local dap = require('dap') +dap.adapters.python = { + type = 'executable'; + command = '.venv/bin/python'; + args = { '-m', 'debugpy.adapter' }; +} + +vim.keymap.set('n', '', function() require('dap').continue() end) +vim.keymap.set('n', '', function() require('dap').step_over() end) +vim.keymap.set('n', '', function() require('dap').step_into() end) +vim.keymap.set('n', '', function() require('dap').step_out() end) +vim.keymap.set('n', '', function() require('dap').toggle_breakpoint() end) +vim.keymap.set('n', 'B', function() require('dap').set_breakpoint() end) +vim.keymap.set('n', 'lp', function() require('dap').set_breakpoint(nil, nil, vim.fn.input('Log point message: ')) end) +vim.keymap.set('n', 'dr', function() require('dap').repl.open() end) +vim.keymap.set('n', 'dl', function() require('dap').run_last() end) +vim.keymap.set({'n', 'v'}, 'dh', function() + require('dap.ui.widgets').hover() +end) +vim.keymap.set({'n', 'v'}, 'dp', function() + require('dap.ui.widgets').preview() +end) +vim.keymap.set('n', 'df', function() + local widgets = require('dap.ui.widgets') + widgets.centered_float(widgets.frames) +end) +vim.keymap.set('n', 'ds', function() + local widgets = require('dap.ui.widgets') + widgets.centered_float(widgets.scopes) +end) diff --git a/nvim-primeagen/after/plugin/fugitive.lua b/nvim-primeagen/after/plugin/fugitive.lua new file mode 100644 index 0000000..80c9070 --- /dev/null +++ b/nvim-primeagen/after/plugin/fugitive.lua @@ -0,0 +1 @@ +vim.keymap.set("n", "gs", vim.cmd.Git) diff --git a/nvim-primeagen/after/plugin/harpoon.lua b/nvim-primeagen/after/plugin/harpoon.lua new file mode 100644 index 0000000..4f57af5 --- /dev/null +++ b/nvim-primeagen/after/plugin/harpoon.lua @@ -0,0 +1,10 @@ +local mark = require("harpoon.mark") +local ui = require("harpoon.ui") + +vim.keymap.set("n", "a", mark.add_file) +vim.keymap.set("n", "bh", ui.toggle_quick_menu) + +vim.keymap.set("n", "", function() ui.nav_file(1) end) +vim.keymap.set("n", "", function() ui.nav_file(2) end) +vim.keymap.set("n", "", function() ui.nav_file(3) end) +vim.keymap.set("n", "", function() ui.nav_file(4) end) diff --git a/nvim-primeagen/after/plugin/ledger.lua b/nvim-primeagen/after/plugin/ledger.lua new file mode 100644 index 0000000..6a47935 --- /dev/null +++ b/nvim-primeagen/after/plugin/ledger.lua @@ -0,0 +1,4 @@ +-- easily make a transaction starred with - +vim.keymap.set("n", "-", "call ledger#transaction_state_set(line('.'), '*')") + +vim.api.nvim_set_var("ledger_detailed_first", 0) diff --git a/nvim-primeagen/after/plugin/lsp.lua b/nvim-primeagen/after/plugin/lsp.lua new file mode 100644 index 0000000..e6e2bda --- /dev/null +++ b/nvim-primeagen/after/plugin/lsp.lua @@ -0,0 +1,99 @@ +local lsp = require("lsp-zero") + +lsp.preset("recommended") + +lsp.ensure_installed({ + 'pyright', 'lua_ls' +}) + +-- Fix Undefined global 'vim' +lsp.configure('lua_ls', { + settings = { + Lua = { + diagnostics = { + globals = { 'vim' } + } + } + } +}) + + +-- local cmp = require('cmp') +-- local cmp_select = {behavior = cmp.SelectBehavior.Select} +-- local cmp_mappings = lsp.defaults.cmp_mappings({ +-- [''] = cmp.mapping.select_prev_item(cmp_select), +-- [''] = cmp.mapping.select_next_item(cmp_select), +-- [''] = cmp.mapping.confirm({ select = true }), +-- [""] = cmp.mapping.complete(), +-- }) + +-- cmp_mappings[''] = nil +-- cmp_mappings[''] = nil + +lsp.setup_nvim_cmp({ + mapping = cmp_mappings +}) + + +lsp.set_preferences({ + suggest_lsp_servers = false, + sign_icons = { + error = 'E', + warn = 'W', + hint = 'H', + info = 'I' + } +}) + +lsp.on_attach(function(client, bufnr) + local opts = {buffer = bufnr, remap = false} + + vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts) + vim.keymap.set("n", "K", function() vim.lsp.buf.hover() end, opts) + vim.keymap.set("n", "vws", function() vim.lsp.buf.workspace_symbol() end, opts) + vim.keymap.set("n", "vd", function() vim.diagnostic.open_float() end, opts) + vim.keymap.set("n", "[d", function() vim.diagnostic.goto_next() end, opts) + vim.keymap.set("n", "]d", function() vim.diagnostic.goto_prev() end, opts) + vim.keymap.set("n", "vca", function() vim.lsp.buf.code_action() end, opts) + vim.keymap.set("n", "vrr", function() vim.lsp.buf.references() end, opts) + vim.keymap.set("n", "vrn", function() vim.lsp.buf.rename() end, opts) + vim.keymap.set("i", "", function() vim.lsp.buf.signature_help() end, opts) +end) + +lsp.skip_server_setup({ + 'pylsp', +}) + +lsp.setup() + +vim.diagnostic.config({ + virtual_text = true +}) + +-- rnix config + +local lspconfig = require'lspconfig' +lspconfig.nil_ls.setup{ + autostart = true, + capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities()), + cmd = vim.env.NIL_LSP_PATH, + settings = { + rootMarkers = {".git/"}, + languages = { + nix = { + formatters = { + { + exe = "nixpkgs-fmt", + args = {} + } + }, + linters = { + { + exe = "nil_lsp", + args = {} + } + } + } + } + } +} diff --git a/nvim-primeagen/after/plugin/luasnip.lua b/nvim-primeagen/after/plugin/luasnip.lua new file mode 100644 index 0000000..6ff1131 --- /dev/null +++ b/nvim-primeagen/after/plugin/luasnip.lua @@ -0,0 +1,46 @@ +local has_words_before = function() + unpack = unpack or table.unpack + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil +end + +local luasnip = require("luasnip") +local cmp = require("cmp") + +cmp.setup({ + + -- ... Your other configuration ... + + mapping = { + + -- ... Your other mappings ... + + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + -- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable() + -- they way you will only jump inside the snippet region + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { "i", "s" }), + + -- ... Your other mappings ... + }, + + -- ... Your other configuration ... +}) diff --git a/nvim-primeagen/after/plugin/marksman.lua b/nvim-primeagen/after/plugin/marksman.lua new file mode 100644 index 0000000..63865ef --- /dev/null +++ b/nvim-primeagen/after/plugin/marksman.lua @@ -0,0 +1 @@ +require'lspconfig'.marksman.setup{} diff --git a/nvim-primeagen/after/plugin/neotest-python.lua b/nvim-primeagen/after/plugin/neotest-python.lua new file mode 100644 index 0000000..6637042 --- /dev/null +++ b/nvim-primeagen/after/plugin/neotest-python.lua @@ -0,0 +1,112 @@ +require("neotest").setup({ + quickfix = { + open = false, + enabled = false, + }, + status = { + enabled = true, + signs = true, -- Sign after function signature + virtual_text = false + }, + icons = { + child_indent = "│", + child_prefix = "├", + collapsed = "─", + expanded = "╮", + failed = "✘", + final_child_indent = " ", + final_child_prefix = "╰", + non_collapsible = "─", + passed = "✓", + running = "", + running_animated = { "/", "|", "\\", "-", "/", "|", "\\", "-" }, + skipped = "↓", + unknown = "" + }, + floating = { + border = "rounded", + max_height = 0.9, + max_width = 0.9, + options = {} + }, + summary = { + open = "botright vsplit | vertical resize 60" + }, + highlights = { + adapter_name = "NeotestAdapterName", + border = "NeotestBorder", + dir = "NeotestDir", + expand_marker = "NeotestExpandMarker", + failed = "NeotestFailed", + file = "NeotestFile", + focused = "NeotestFocused", + indent = "NeotestIndent", + marked = "NeotestMarked", + namespace = "NeotestNamespace", + passed = "NeotestPassed", + running = "NeotestRunning", + select_win = "NeotestWinSelect", + skipped = "NeotestSkipped", + target = "NeotestTarget", + test = "NeotestTest", + unknown = "NeotestUnknown" + }, + adapters = { + require("neotest-python")({ + -- Extra arguments for nvim-dap configuration + -- See https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings for values + dap = { justMyCode = false }, + -- Command line arguments for runner + -- Can also be a function to return dynamic values + args = {"--log-level", "DEBUG"}, + -- Runner to use. Will use pytest if available by default. + -- Can be a function to return dynamic value. + runner = "pytest", + -- Custom python path for the runner. + -- Can be a string or a list of strings. + -- Can also be a function to return dynamic value. + -- If not provided, the path will be inferred by checking for + -- virtual envs in the local directory and for Pipenev/Poetry configs + python = ".venv/bin/python", + -- Returns if a given file path is a test file. + -- NB: This function is called a lot so don't perform any heavy tasks within it. + }) + }, +}) + +require("neodev").setup({ + library = { plugins = { "neotest" }, types = true }, + ... +}) + +vim.keymap.set("n", "tn", function() + require("neotest").run.run() +end) + +vim.keymap.set("n", "tf", function() + require("neotest").run.run(vim.fn.expand("%")) +end) + +vim.keymap.set("n", "tr", function() + local neotest = require("neotest") + neotest.run.run() + neotest.summary.open() +end, +{ noremap = true, silent = true, nowait = true }) + +vim.keymap.set("n", "ta", function() + local neotest = require("neotest") + neotest.run.attach() +end) + +vim.keymap.set("n", "to", function() + local neotest = require("neotest") + neotest.output.open({ last_run = true, enter = true }) +end, +{ noremap = true, silent = true, nowait = true }) + +vim.keymap.set("n", "tt", function() + local neotest = require("neotest") + neotest.summary.toggle() +end, +{ noremap = true, silent = true, nowait = true }) diff --git a/nvim-primeagen/after/plugin/telescope.lua b/nvim-primeagen/after/plugin/telescope.lua new file mode 100644 index 0000000..a004f9d --- /dev/null +++ b/nvim-primeagen/after/plugin/telescope.lua @@ -0,0 +1,16 @@ +local builtin = require('telescope.builtin') +vim.keymap.set('n', 'ff', builtin.find_files, {}) +vim.keymap.set('n', 'fg', builtin.live_grep, {}) +vim.keymap.set('n', 'fb', builtin.buffers, {}) +vim.keymap.set('n', 'fh', builtin.help_tags, {}) +vim.keymap.set('n', 'fs', builtin.grep_string, {}) +vim.keymap.set('n', 'fc', builtin.command_history, {}) +vim.keymap.set('n', 'fk', builtin.keymaps, {}) +vim.keymap.set('n', 'fl', builtin.diagnostics, {}) +vim.keymap.set('n', 'fo', builtin.builtin, {}) + +vim.keymap.set('n', 'ps', function() + builtin.grep_string({ search = vim.fn.input("Grep > ") }) +end) + +require("telescope").load_extension("emoji") diff --git a/nvim-primeagen/after/plugin/todo-txt.lua b/nvim-primeagen/after/plugin/todo-txt.lua new file mode 100644 index 0000000..09be576 --- /dev/null +++ b/nvim-primeagen/after/plugin/todo-txt.lua @@ -0,0 +1,44 @@ +require('todotxt-nvim').setup({ + todo_file = "/home/lemon/Documents/Notes/todo/todo.txt", + capture = { + alternative_priority = { + A = "today", + B = "tomorrow", + C = "this week", + D = "next week", + E = "next month", + }, + }, + highlights = { + priorities = { + A = { + fg = "yellow", + bg = "NONE", + style = "bold", + }, + B = { + fg = "green", + bg = "NONE", + style = "bold", + }, + C = { + fg = "cyan", + bg = "NONE", + style = "bold", + }, + D = { + fg = "magenta", + bg = "NONE", + style = "bold", + }, + }, + }, + sidebar = { + width = 70, + position = "right", -- default: "right" + }, +}) + +-- Keyboard shortcuts for todotxt-nvim. +vim.keymap.set("n", "tp", "ToDoTxtTasksToggle") +vim.keymap.set("n", "ta", "ToDoTxtCapture") diff --git a/nvim-primeagen/after/plugin/treesitter.lua b/nvim-primeagen/after/plugin/treesitter.lua new file mode 100644 index 0000000..69adc98 --- /dev/null +++ b/nvim-primeagen/after/plugin/treesitter.lua @@ -0,0 +1,23 @@ +require'nvim-treesitter.configs'.setup { + -- A list of parser names, or "all" + ensure_installed = { "python", "bash", "javascript", "typescript", "c", "lua", "rust" }, + + -- Install parsers synchronously (only applied to `ensure_installed`) + sync_install = false, + + -- Automatically install missing parsers when entering buffer + -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally + auto_install = true, + + highlight = { + -- `false` will disable the whole extension + enable = true, + + -- Setting this to true will run `:h syntax` and tree-sitter at the same time. + -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). + -- Using this option may slow down your editor, and you may see some duplicate highlights. + -- Instead of true it can also be a list of languages + additional_vim_regex_highlighting = false, + }, +} + diff --git a/nvim-primeagen/after/plugin/trouble.lua b/nvim-primeagen/after/plugin/trouble.lua new file mode 100644 index 0000000..cf1256a --- /dev/null +++ b/nvim-primeagen/after/plugin/trouble.lua @@ -0,0 +1,3 @@ +vim.keymap.set("n", "xq", "TroubleToggle quickfix", + {silent = true, noremap = true} +) diff --git a/nvim-primeagen/after/plugin/undotree.lua b/nvim-primeagen/after/plugin/undotree.lua new file mode 100644 index 0000000..97bb7ab --- /dev/null +++ b/nvim-primeagen/after/plugin/undotree.lua @@ -0,0 +1,2 @@ +vim.keymap.set("n", "u", vim.cmd.UndotreeToggle) + diff --git a/nvim-primeagen/after/plugin/zenmode.lua b/nvim-primeagen/after/plugin/zenmode.lua new file mode 100644 index 0000000..753fbf8 --- /dev/null +++ b/nvim-primeagen/after/plugin/zenmode.lua @@ -0,0 +1,30 @@ + +vim.keymap.set("n", "zz", function() + require("zen-mode").setup { + window = { + width = 90, + options = { } + }, + } + require("zen-mode").toggle() + vim.wo.wrap = false + vim.wo.number = true + vim.wo.rnu = true + ColorMyPencils() +end) + + +vim.keymap.set("n", "zZ", function() + require("zen-mode").setup { + window = { + width = 80, + options = { } + }, + } + require("zen-mode").toggle() + vim.wo.wrap = false + vim.wo.number = false + vim.wo.rnu = false + vim.opt.colorcolumn = "0" + ColorMyPencils() +end) diff --git a/nvim-primeagen/init.lua b/nvim-primeagen/init.lua new file mode 100644 index 0000000..de6b0d9 --- /dev/null +++ b/nvim-primeagen/init.lua @@ -0,0 +1 @@ +require("lemon") diff --git a/nvim-primeagen/lua/lemon/init.lua b/nvim-primeagen/lua/lemon/init.lua new file mode 100644 index 0000000..e2266b2 --- /dev/null +++ b/nvim-primeagen/lua/lemon/init.lua @@ -0,0 +1,7 @@ +require("lemon.set") +require("lemon.remap") +require("lemon.packer") + +vim.g.netrw_browse_split = 0 +vim.g.netrw_banner = 0 +vim.g.netrw_winsize = 25 diff --git a/nvim-primeagen/lua/lemon/packer.lua b/nvim-primeagen/lua/lemon/packer.lua new file mode 100644 index 0000000..b9d8782 --- /dev/null +++ b/nvim-primeagen/lua/lemon/packer.lua @@ -0,0 +1,106 @@ +-- This file can be loaded by calling `lua require('plugins')` from your init.vim + +-- Only required if you have packer configured as `opt` +--vim.cmd.packadd('packer.nvim') + +local ensure_packer = function() + local fn = vim.fn + local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim' + if fn.empty(fn.glob(install_path)) > 0 then + fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path}) + vim.cmd [[packadd packer.nvim]] + return true + end + return false +end + +local packer_bootstrap = ensure_packer() + +return require('packer').startup(function(use) + -- Packer can manage itself + use 'wbthomason/packer.nvim' + use 'dense-analysis/ale' + use { + 'arnarg/todotxt.nvim', + requires = {'MunifTanjim/nui.nvim'}, + } + use("theprimeagen/harpoon") + use { + 'nvim-telescope/telescope.nvim', tag = '0.1.0', + -- or , branch = '0.1.x', + requires = { {'nvim-lua/plenary.nvim'} } + } + use('xiyaowong/telescope-emoji.nvim') + + use({ + 'rose-pine/neovim', + as = 'rose-pine', + config = function() + vim.cmd('colorscheme rose-pine') + end + }) + + use({ + "folke/trouble.nvim", + config = function() + require("trouble").setup { + icons = false, + -- your configuration comes here + -- or leave it empty to use the default settings + -- refer to the configuration section below + } + end + }) + + + use({"nvim-treesitter/nvim-treesitter", run = ":TSUpdate"}) + use("nvim-treesitter/playground") + use("mbbill/undotree") + use("ledger/vim-ledger") + use("tpope/vim-fugitive") + use("tpope/vim-commentary") + use("nvim-treesitter/nvim-treesitter-context"); + use('mfussenegger/nvim-dap') + + use { + 'VonHeikemen/lsp-zero.nvim', + branch = 'v1.x', + requires = { + -- LSP Support + {'neovim/nvim-lspconfig'}, + {'williamboman/mason.nvim'}, + {'williamboman/mason-lspconfig.nvim'}, + + -- Autocompletion + {'hrsh7th/nvim-cmp'}, + {'hrsh7th/cmp-buffer'}, + {'hrsh7th/cmp-path'}, + {'saadparwaiz1/cmp_luasnip'}, + {'hrsh7th/cmp-nvim-lsp'}, + {'hrsh7th/cmp-nvim-lua'}, + + -- Snippets + {'L3MON4D3/LuaSnip'}, + {'rafamadriz/friendly-snippets'}, + } + } + + use("folke/zen-mode.nvim") + use("github/copilot.vim") + use("eandrju/cellular-automaton.nvim") + -- use("laytan/cloak.nvim") + use("jlanzarotta/bufexplorer") + use { + "nvim-neotest/neotest", + requires = { + "nvim-neotest/neotest-python", + "nvim-neotest/neotest-plenary", + "folke/neodev.nvim", + "nvim-lua/plenary.nvim", + "nvim-treesitter/nvim-treesitter", + "antoinemadec/FixCursorHold.nvim" + } + } + +end) + diff --git a/nvim-primeagen/lua/lemon/popup.lua b/nvim-primeagen/lua/lemon/popup.lua new file mode 100644 index 0000000..b070603 --- /dev/null +++ b/nvim-primeagen/lua/lemon/popup.lua @@ -0,0 +1,58 @@ +-- Lemon_win_id = nil +-- Lemon_bufh = nil + +-- local function close_menu(force_save) +-- force_save = force_save or false + +-- vim.api.nvim_win_close(Lemon_win_id, true) + +-- Lemon_win_id = nil +-- Lemon_bufh = nil +-- end + +-- local function create_window() +-- local popup = require("plenary.popup") +-- local height = 10 +-- local width = 60 +-- local borderchars = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" } +-- local bufnr = vim.api.nvim_create_buf(false, true) +-- local Lemon_id, win = popup.create(bufnr, { +-- title = "Mesmeric!", +-- line = math.floor(((vim.o.lines - height) / 2) -1), +-- col = math.floor((vim.o.columns - width) / 2), +-- minwidth = width, +-- mineheight = height, +-- borderchars = borderchars, +-- }) +-- return { +-- bufnr = bufnr, +-- win_id = Lemon_win_id +-- } +-- end + +-- create_window() + +-- Create a new buffer and set its lines to the contents of myfile.txt +local buf = vim.api.nvim_create_buf(false, true) +local file = io.open('/home/lemon/Documents/Notes/Archive/Dr Haugh.md', 'r') +local height = 10 +local width = 60 +local lines = {} +for line in file:lines() do + table.insert(lines, line) +end +file:close() +vim.api.nvim_buf_set_lines(buf, 0, -1, true, lines) + +-- Create a new window and set its options to create a floating buffer +local win = vim.api.nvim_open_win(buf, true, { + relative='editor', + width=80, + title = "test title", + title_pos = "center", + height=10, + row=10, + col=10, + border={"╭", "─", "╮", "│", "╯", "─", "╰", "│" }, +}) + diff --git a/nvim-primeagen/lua/lemon/remap.lua b/nvim-primeagen/lua/lemon/remap.lua new file mode 100644 index 0000000..0d2f247 --- /dev/null +++ b/nvim-primeagen/lua/lemon/remap.lua @@ -0,0 +1,45 @@ +-- ThePrimeagent's stuff +vim.g.mapleader = " " +vim.keymap.set("n", "pv", vim.cmd.Ex) + +vim.keymap.set("v", "J", ":m '>+1gv=gv") +vim.keymap.set("v", "K", ":m '<-2gv=gv") + +vim.keymap.set("n", "J", "mzJ`z") +vim.keymap.set("n", "", "zz") +vim.keymap.set("n", "", "zz") +vim.keymap.set("n", "n", "nzzzv") +vim.keymap.set("n", "N", "Nzzzv") + +-- greatest remap ever +vim.keymap.set("x", "p", [["_dP]]) + +-- next greatest remap ever : asbjornHaland +vim.keymap.set({"n", "v"}, "y", [["+y]]) +vim.keymap.set("n", "Y", [["+Y]]) + +vim.keymap.set({"n", "v"}, "d", [["_d]]) + +-- This is going to get me cancelled +vim.keymap.set("i", "", "") + +vim.keymap.set("n", "Q", "") +--vim.keymap.set("n", "", "silent !tmux neww tmux-sessionizer") +-- vim.keymap.set("n", "f", vim.lsp.buf.format) + +vim.keymap.set("n", "", "cnextzz") +vim.keymap.set("n", "", "cprevzz") +vim.keymap.set("n", "k", "lnextzz") +vim.keymap.set("n", "j", "lprevzz") + +vim.keymap.set("n", "s", [[:%s/\<\>//gI]]) +vim.keymap.set("n", "x", "!chmod +x %", { silent = true }) + +vim.keymap.set("n", "ev", "e ~/dotfiles/nvim/lua/lemon/packer.lua"); +vim.keymap.set("n", "mr", "CellularAutomaton make_it_rain"); + +vim.keymap.set("n", "", function() + vim.cmd("so") +end) +-- end ThePrimeagent's stuff + diff --git a/nvim-primeagen/lua/lemon/set.lua b/nvim-primeagen/lua/lemon/set.lua new file mode 100644 index 0000000..3c662a9 --- /dev/null +++ b/nvim-primeagen/lua/lemon/set.lua @@ -0,0 +1,44 @@ +vim.opt.guicursor = "" + +vim.opt.nu = true +vim.opt.relativenumber = true + +vim.opt.tabstop = 4 +vim.opt.softtabstop = 4 +vim.opt.shiftwidth = 4 +vim.opt.expandtab = true +vim.opt.autoindent = true + +vim.opt.smartindent = true + +vim.opt.wrap = false + +vim.opt.swapfile = false +vim.opt.backup = false +vim.opt.undodir = os.getenv("HOME") .. "/.vim/undodir" +vim.opt.undofile = true + +vim.opt.hlsearch = false +vim.opt.incsearch = true + +vim.opt.termguicolors = true + +vim.opt.scrolloff = 8 +vim.opt.signcolumn = "yes" +vim.opt.isfname:append("@-@") + +vim.opt.updatetime = 50 + +vim.opt.colorcolumn = "" + +-- end ThePrimeagen stuff + +vim.opt.wildmenu = true +vim.opt.showmatch = true +vim.opt.splitbelow = true +vim.opt.splitright = true +vim.opt.hidden = true +vim.opt.path = "+=**" +vim.opt.more = true +vim.opt.equalalways = true +vim.opt.listchars="tab:»→,trail:␣" diff --git a/nvim/.gitignore b/nvim/.gitignore deleted file mode 100644 index c84aa4a..0000000 --- a/nvim/.gitignore +++ /dev/null @@ -1 +0,0 @@ -plugin/packer_compiled.lua diff --git a/nvim/.stylua.toml b/nvim/.stylua.toml new file mode 100644 index 0000000..df96b7b --- /dev/null +++ b/nvim/.stylua.toml @@ -0,0 +1,6 @@ +column_width = 120 +line_endings = "Unix" +indent_type = "Spaces" +indent_width = 2 +quote_style = "AutoPreferDouble" +no_call_parentheses = true diff --git a/nvim/README.md b/nvim/README.md new file mode 100644 index 0000000..f607a78 --- /dev/null +++ b/nvim/README.md @@ -0,0 +1,196 @@ +# A Basic Stable IDE config for Neovim + +> Why does this repo exist? + +This config attempts to provide a rock solid fully featured starting point for someone new to Neovim, or just tired of maintaining the basic IDE components of their config. + +> What makes it "rock solid"? + +All the included plugins are pinned to a version that ensures they are compatible and will not update potentially introducing errors into your config. For every Neovim release I will update this repo along with the community to keep it up to date with the newest versions. + +As I mentioned, this config is meant as a starting point for people new to Neovim who want a familiar IDE experience. The config has a very simple structure that makes it easy to add new plugins. + +### Migration guide to lazy from packer + +Now this config uses `lazy.nvim` as a plugin manager, so if you are migrating from packer you should probably remove +`$HOME/.local/share/nvim` and re-open nvim to re-install the plugins to not face any issues. + +## Install Neovim 0.9 + +You can install Neovim with your package manager e.g. brew, apt, pacman etc.. but remember that when you update your packages Neovim may be upgraded to a newer version. + +If you would like to make sure Neovim only updates when you want it to than I recommend installing from source: + +**NOTE** Verify the required [build prerequisites](https://github.com/neovim/neovim/wiki/Building-Neovim#build-prerequisites) for your system. + +```sh +git clone https://github.com/neovim/neovim.git +cd neovim +git checkout release-0.9 +make CMAKE_BUILD_TYPE=Release +sudo make install +``` + +## Install the config + +Make sure to remove or backup your current `nvim` directory + +```sh +git clone https://github.com/LunarVim/nvim-basic-ide.git ~/.config/nvim +``` + +Run `nvim` and wait for the plugins to be installed + +**NOTE** (You will notice treesitter pulling in a bunch of parsers the next time you open Neovim) + +**NOTE** Checkout this file for some predefined keymaps: [keymaps](https://github.com/LunarVim/nvim-basic-ide/tree/master/lua/keymaps.lua) + +## Get healthy + +Open `nvim` and enter the following: + +``` +:checkhealth +``` + +You'll probably notice you don't have support for copy/paste also that python and node haven't been setup + +So let's fix that + +First we'll fix copy/paste + +- On mac `pbcopy` should be builtin + +- On Ubuntu + + ```sh + sudo apt install xsel # for X11 + sudo apt install wl-clipboard # for wayland + ``` + +Next we need to install python support (node is optional) + +- Neovim python support + + ```sh + pip install pynvim + ``` + +- Neovim node support + + ```sh + npm i -g neovim + ``` + +We will also need `ripgrep` for Telescope to work: + +- Ripgrep + + ```sh + sudo apt install ripgrep + ``` + +--- + +**NOTE** make sure you have [node](https://nodejs.org/en/) installed, I recommend a node manager like [fnm](https://github.com/Schniz/fnm). + +## Fonts + +I recommend using the following repo to get a "Nerd Font" (Font that supports icons) + +[getnf](https://github.com/ronniedroid/getnf) + +## Configuration + +### LSP + +To add a new LSP + +First Enter: + +``` +:Mason +``` + +and press `i` on the Language Server you wish to install + +Next you will need to add the server to this list: [servers](https://github.com/LunarVim/nvim-basic-ide/tree/master/lua/utils/init.lua#L3) +Note: Builtin LSP doesn't contain all lsps from [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#terraform_lsp). + +If you want to install any from there, for example terraform_lsp(which adds more functionality than terraformls, like complete resource listing), + +1. You can add the lsp name in [mason lsp block](https://github.com/LunarVim/nvim-basic-ide/tree/master/user/utils/init.lua#L3-L13) + +```lua +-- lua/utils/init.lua +M.servers = { + "lua_ls", + "cssls", + "html", + "tsserver", + "pyright", + "bashls", + "jsonls", + "yamlls", + "terraform_lsp" -- New LSP +} +``` + +2. Manually install the binary of the lsp and put it in your path by downloading the binary or through your package manager. For terraform_lsp [example](https://github.com/juliosueiras/terraform-lsp/releases) + +### Formatters and linters + +Make sure the formatter or linter is installed and add it to this setup function: [null-ls](https://github.com/LunarVim/nvim-basic-ide/blob/e6b6c96280ca730a2564f2e36050df055acfb1a8/lua/user/null-ls.lua#L22) + +**NOTE** Some are already setup as examples, remove them if you want + +### Plugins + +### You can install new plugins here: [plugins](https://github.com/LunarVim/nvim-basic-ide/tree/master/lua/user) + +Heres the wiki for installing new plugins refer to this: [wiki](https://github.com/LunarVim/nvim-basic-ide/wiki/adding_new_plugins) + +## Plugins + +- [lazy](https://github.com/folke/lazy.nvim) +- [plenary](https://github.com/nvim-lua/plenary.nvim) +- [nvim-autopairs](https://github.com/windwp/nvim-autopairs) +- [Comment.nvim](https://github.com/numToStr/Comment.nvim) +- [nvim-ts-context-commentstring](https://github.com/JoosepAlviste/nvim-ts-context-commentstring) +- [nvim-web-devicons](https://github.com/nvim-tree/nvim-web-devicons) +- [nvim-tree.lua](https://github.com/kyazdani42/nvim-tree.lua) +- [bufferline.nvim](https://github.com/akinsho/bufferline.nvim) +- [bufdelete.nvim](https://github.com/famiu/bufdelete.nvim) +- [lualine.nvim](https://github.com/nvim-lualine/lualine.nvim) +- [toggleterm.nvim](https://github.com/akinsho/toggleterm.nvim) +- [project.nvim](https://github.com/ahmedkhalf/project.nvim) +- [impatient.nvim](https://github.com/lewis6991/impatient.nvim) +- [indent-blankline.nvim](https://github.com/lukas-reineke/indent-blankline.nvim) +- [alpha-nvim](https://github.com/goolord/alpha-nvim) +- [tokyonight.nvim](https://github.com/folke/tokyonight.nvim) +- [nvim-cmp](https://github.com/hrsh7th/nvim-cmp) +- [cmp-buffer](https://github.com/hrsh7th/cmp-buffer) +- [cmp-path](https://github.com/hrsh7th/cmp-path) +- [cmp_luasnip](https://github.com/saadparwaiz1/cmp_luasnip) +- [cmp-nvim-lsp](https://github.com/hrsh7th/cmp-nvim-lsp) +- [cmp-nvim-lua](https://github.com/hrsh7th/cmp-nvim-lua) +- [LuaSnip](https://github.com/L3MON4D3/LuaSnip) +- [friendly-snippets](https://github.com/rafamadriz/friendly-snippets) +- [mason.nvim](https://github.com/williamboman/mason.nvim) +- [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig) +- [mason-lspconfig.nvim](https://github.com/williamboman/mason-lspconfig.nvim) +- [null-ls.nvim](https://github.com/jose-elias-alvarez/null-ls.nvim) +- [vim-illuminate](https://github.com/RRethy/vim-illuminate) +- [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim) +- [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter) +- [gitsigns.nvim](https://github.com/lewis6991/gitsigns.nvim) +- [nvim-dap](https://github.com/mfussenegger/nvim-dap) +- [nvim-dap-ui](https://github.com/rcarriga/nvim-dap-ui) +- [DAPInstall.nvim](https://github.com/ravenxrz/DAPInstall.nvim) +- [which-key.nvim](https://github.com/folke/which-key.nvim) + +--- + +> The computing scientist's main challenge is not to get confused by the complexities of his own making. + +\- Edsger W. Dijkstra diff --git a/nvim/after/plugin/ale.lua b/nvim/after/plugin/ale.lua deleted file mode 100644 index da1415c..0000000 --- a/nvim/after/plugin/ale.lua +++ /dev/null @@ -1,41 +0,0 @@ --- Set the configuration options for the plugin -local linters = { - python = {'ruff'}, - ocaml = {'merlin'}, - cpp = {'clang'}, - yaml = {'yamllint'}, - c = {'clang'}, - go = {'gopls', 'golint', 'gofmt'}, -} - -local fixers = { - python = {'ruff', 'isort', 'yapf', 'black'}, - go = {'gofmt'}, - rust = {'rustfmt'}, -} - -local pyright_config = { - useLibraryCodeForTypes = 1, - disableLanguageServices = 1, - autoImportCompletions = 1, -} - -vim.api.nvim_set_var('ale_linters', linters) -vim.api.nvim_set_var('ale_python_pyright_config', pyright_config) -vim.api.nvim_set_var('ale_fix_on_save', 1) -vim.api.nvim_set_var('ale_warn_about_trailing_whitespace', 1) -vim.api.nvim_set_var('ale_disable_lsp', 1) -vim.api.nvim_set_var('ale_use_neovim_diagnostics_api', 1) -vim.api.nvim_set_var('ale_set_quickfix', 1) -vim.api.nvim_set_var('ale_echo_cursor', 1) -vim.api.nvim_set_var('ale_echo_msg_error_str', 'Error') -vim.api.nvim_set_var('ale_echo_msg_form', '%linter% - %code: %%s') -vim.api.nvim_set_var('ale_loclist_msg_format', '%linter% - %code: %%s') -vim.api.nvim_set_var('ale_echo_msg_warning_s', 'Warning') -vim.api.nvim_set_var('ale_fixers', fixers) -vim.api.nvim_set_var('ale_python_mypy_ignore_invalid_syntax', 1) -vim.api.nvim_set_var('ale_python_mypy_executable', 'mypy') -vim.api.nvim_set_var('ale_python_mypy_options', '--config-file mypy.ini') -vim.api.nvim_set_var('g:ale_sign_error', '>>') -vim.api.nvim_set_var('ale_fix_on_save', 1) -vim.api.nvim_set_var('ale_linters_explicit', 0) diff --git a/nvim/after/plugin/colors.lua b/nvim/after/plugin/colors.lua deleted file mode 100644 index fe97b1b..0000000 --- a/nvim/after/plugin/colors.lua +++ /dev/null @@ -1,14 +0,0 @@ -require('rose-pine').setup({ - disable_background = true -}) - -function ColorMyPencils(color) - color = color or "rose-pine" - vim.cmd.colorscheme(color) - - vim.api.nvim_set_hl(0, "Normal", { bg = "none" }) - vim.api.nvim_set_hl(0, "NormalFloat", { bg = "none" }) - -end - -ColorMyPencils() diff --git a/nvim/after/plugin/copilot.lua b/nvim/after/plugin/copilot.lua deleted file mode 100644 index 7ed6529..0000000 --- a/nvim/after/plugin/copilot.lua +++ /dev/null @@ -1,17 +0,0 @@ -vim.g.copilot_no_tab_map = true -vim.api.nvim_set_keymap("i", "", 'copilot#Accept("")', { silent = true, expr = true }) --- not working vim.g.copilot_assume_mapped = true - -vim.g.copilot_filetypes = { - ["*"] = false, - ["markdown"] = false, - ["javascript"] = false, - ["typescript"] = false, - ["lua"] = true, - ["rust"] = true, - ["c"] = true, - ["c#"] = true, - ["c++"] = true, - ["go"] = true, - ["python"] = true, -} diff --git a/nvim/after/plugin/dap.lua b/nvim/after/plugin/dap.lua deleted file mode 100644 index 495445f..0000000 --- a/nvim/after/plugin/dap.lua +++ /dev/null @@ -1,30 +0,0 @@ -local dap = require('dap') -dap.adapters.python = { - type = 'executable'; - command = '.venv/bin/python'; - args = { '-m', 'debugpy.adapter' }; -} - -vim.keymap.set('n', '', function() require('dap').continue() end) -vim.keymap.set('n', '', function() require('dap').step_over() end) -vim.keymap.set('n', '', function() require('dap').step_into() end) -vim.keymap.set('n', '', function() require('dap').step_out() end) -vim.keymap.set('n', '', function() require('dap').toggle_breakpoint() end) -vim.keymap.set('n', 'B', function() require('dap').set_breakpoint() end) -vim.keymap.set('n', 'lp', function() require('dap').set_breakpoint(nil, nil, vim.fn.input('Log point message: ')) end) -vim.keymap.set('n', 'dr', function() require('dap').repl.open() end) -vim.keymap.set('n', 'dl', function() require('dap').run_last() end) -vim.keymap.set({'n', 'v'}, 'dh', function() - require('dap.ui.widgets').hover() -end) -vim.keymap.set({'n', 'v'}, 'dp', function() - require('dap.ui.widgets').preview() -end) -vim.keymap.set('n', 'df', function() - local widgets = require('dap.ui.widgets') - widgets.centered_float(widgets.frames) -end) -vim.keymap.set('n', 'ds', function() - local widgets = require('dap.ui.widgets') - widgets.centered_float(widgets.scopes) -end) diff --git a/nvim/after/plugin/fugitive.lua b/nvim/after/plugin/fugitive.lua deleted file mode 100644 index 80c9070..0000000 --- a/nvim/after/plugin/fugitive.lua +++ /dev/null @@ -1 +0,0 @@ -vim.keymap.set("n", "gs", vim.cmd.Git) diff --git a/nvim/after/plugin/harpoon.lua b/nvim/after/plugin/harpoon.lua deleted file mode 100644 index 4f57af5..0000000 --- a/nvim/after/plugin/harpoon.lua +++ /dev/null @@ -1,10 +0,0 @@ -local mark = require("harpoon.mark") -local ui = require("harpoon.ui") - -vim.keymap.set("n", "a", mark.add_file) -vim.keymap.set("n", "bh", ui.toggle_quick_menu) - -vim.keymap.set("n", "", function() ui.nav_file(1) end) -vim.keymap.set("n", "", function() ui.nav_file(2) end) -vim.keymap.set("n", "", function() ui.nav_file(3) end) -vim.keymap.set("n", "", function() ui.nav_file(4) end) diff --git a/nvim/after/plugin/ledger.lua b/nvim/after/plugin/ledger.lua deleted file mode 100644 index 6a47935..0000000 --- a/nvim/after/plugin/ledger.lua +++ /dev/null @@ -1,4 +0,0 @@ --- easily make a transaction starred with - -vim.keymap.set("n", "-", "call ledger#transaction_state_set(line('.'), '*')") - -vim.api.nvim_set_var("ledger_detailed_first", 0) diff --git a/nvim/after/plugin/lsp.lua b/nvim/after/plugin/lsp.lua deleted file mode 100644 index e6e2bda..0000000 --- a/nvim/after/plugin/lsp.lua +++ /dev/null @@ -1,99 +0,0 @@ -local lsp = require("lsp-zero") - -lsp.preset("recommended") - -lsp.ensure_installed({ - 'pyright', 'lua_ls' -}) - --- Fix Undefined global 'vim' -lsp.configure('lua_ls', { - settings = { - Lua = { - diagnostics = { - globals = { 'vim' } - } - } - } -}) - - --- local cmp = require('cmp') --- local cmp_select = {behavior = cmp.SelectBehavior.Select} --- local cmp_mappings = lsp.defaults.cmp_mappings({ --- [''] = cmp.mapping.select_prev_item(cmp_select), --- [''] = cmp.mapping.select_next_item(cmp_select), --- [''] = cmp.mapping.confirm({ select = true }), --- [""] = cmp.mapping.complete(), --- }) - --- cmp_mappings[''] = nil --- cmp_mappings[''] = nil - -lsp.setup_nvim_cmp({ - mapping = cmp_mappings -}) - - -lsp.set_preferences({ - suggest_lsp_servers = false, - sign_icons = { - error = 'E', - warn = 'W', - hint = 'H', - info = 'I' - } -}) - -lsp.on_attach(function(client, bufnr) - local opts = {buffer = bufnr, remap = false} - - vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts) - vim.keymap.set("n", "K", function() vim.lsp.buf.hover() end, opts) - vim.keymap.set("n", "vws", function() vim.lsp.buf.workspace_symbol() end, opts) - vim.keymap.set("n", "vd", function() vim.diagnostic.open_float() end, opts) - vim.keymap.set("n", "[d", function() vim.diagnostic.goto_next() end, opts) - vim.keymap.set("n", "]d", function() vim.diagnostic.goto_prev() end, opts) - vim.keymap.set("n", "vca", function() vim.lsp.buf.code_action() end, opts) - vim.keymap.set("n", "vrr", function() vim.lsp.buf.references() end, opts) - vim.keymap.set("n", "vrn", function() vim.lsp.buf.rename() end, opts) - vim.keymap.set("i", "", function() vim.lsp.buf.signature_help() end, opts) -end) - -lsp.skip_server_setup({ - 'pylsp', -}) - -lsp.setup() - -vim.diagnostic.config({ - virtual_text = true -}) - --- rnix config - -local lspconfig = require'lspconfig' -lspconfig.nil_ls.setup{ - autostart = true, - capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities()), - cmd = vim.env.NIL_LSP_PATH, - settings = { - rootMarkers = {".git/"}, - languages = { - nix = { - formatters = { - { - exe = "nixpkgs-fmt", - args = {} - } - }, - linters = { - { - exe = "nil_lsp", - args = {} - } - } - } - } - } -} diff --git a/nvim/after/plugin/luasnip.lua b/nvim/after/plugin/luasnip.lua deleted file mode 100644 index 6ff1131..0000000 --- a/nvim/after/plugin/luasnip.lua +++ /dev/null @@ -1,46 +0,0 @@ -local has_words_before = function() - unpack = unpack or table.unpack - local line, col = unpack(vim.api.nvim_win_get_cursor(0)) - return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil -end - -local luasnip = require("luasnip") -local cmp = require("cmp") - -cmp.setup({ - - -- ... Your other configuration ... - - mapping = { - - -- ... Your other mappings ... - - [""] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_next_item() - -- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable() - -- they way you will only jump inside the snippet region - elseif luasnip.expand_or_jumpable() then - luasnip.expand_or_jump() - elseif has_words_before() then - cmp.complete() - else - fallback() - end - end, { "i", "s" }), - - [""] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_prev_item() - elseif luasnip.jumpable(-1) then - luasnip.jump(-1) - else - fallback() - end - end, { "i", "s" }), - - -- ... Your other mappings ... - }, - - -- ... Your other configuration ... -}) diff --git a/nvim/after/plugin/marksman.lua b/nvim/after/plugin/marksman.lua deleted file mode 100644 index 63865ef..0000000 --- a/nvim/after/plugin/marksman.lua +++ /dev/null @@ -1 +0,0 @@ -require'lspconfig'.marksman.setup{} diff --git a/nvim/after/plugin/neotest-python.lua b/nvim/after/plugin/neotest-python.lua deleted file mode 100644 index 6637042..0000000 --- a/nvim/after/plugin/neotest-python.lua +++ /dev/null @@ -1,112 +0,0 @@ -require("neotest").setup({ - quickfix = { - open = false, - enabled = false, - }, - status = { - enabled = true, - signs = true, -- Sign after function signature - virtual_text = false - }, - icons = { - child_indent = "│", - child_prefix = "├", - collapsed = "─", - expanded = "╮", - failed = "✘", - final_child_indent = " ", - final_child_prefix = "╰", - non_collapsible = "─", - passed = "✓", - running = "", - running_animated = { "/", "|", "\\", "-", "/", "|", "\\", "-" }, - skipped = "↓", - unknown = "" - }, - floating = { - border = "rounded", - max_height = 0.9, - max_width = 0.9, - options = {} - }, - summary = { - open = "botright vsplit | vertical resize 60" - }, - highlights = { - adapter_name = "NeotestAdapterName", - border = "NeotestBorder", - dir = "NeotestDir", - expand_marker = "NeotestExpandMarker", - failed = "NeotestFailed", - file = "NeotestFile", - focused = "NeotestFocused", - indent = "NeotestIndent", - marked = "NeotestMarked", - namespace = "NeotestNamespace", - passed = "NeotestPassed", - running = "NeotestRunning", - select_win = "NeotestWinSelect", - skipped = "NeotestSkipped", - target = "NeotestTarget", - test = "NeotestTest", - unknown = "NeotestUnknown" - }, - adapters = { - require("neotest-python")({ - -- Extra arguments for nvim-dap configuration - -- See https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings for values - dap = { justMyCode = false }, - -- Command line arguments for runner - -- Can also be a function to return dynamic values - args = {"--log-level", "DEBUG"}, - -- Runner to use. Will use pytest if available by default. - -- Can be a function to return dynamic value. - runner = "pytest", - -- Custom python path for the runner. - -- Can be a string or a list of strings. - -- Can also be a function to return dynamic value. - -- If not provided, the path will be inferred by checking for - -- virtual envs in the local directory and for Pipenev/Poetry configs - python = ".venv/bin/python", - -- Returns if a given file path is a test file. - -- NB: This function is called a lot so don't perform any heavy tasks within it. - }) - }, -}) - -require("neodev").setup({ - library = { plugins = { "neotest" }, types = true }, - ... -}) - -vim.keymap.set("n", "tn", function() - require("neotest").run.run() -end) - -vim.keymap.set("n", "tf", function() - require("neotest").run.run(vim.fn.expand("%")) -end) - -vim.keymap.set("n", "tr", function() - local neotest = require("neotest") - neotest.run.run() - neotest.summary.open() -end, -{ noremap = true, silent = true, nowait = true }) - -vim.keymap.set("n", "ta", function() - local neotest = require("neotest") - neotest.run.attach() -end) - -vim.keymap.set("n", "to", function() - local neotest = require("neotest") - neotest.output.open({ last_run = true, enter = true }) -end, -{ noremap = true, silent = true, nowait = true }) - -vim.keymap.set("n", "tt", function() - local neotest = require("neotest") - neotest.summary.toggle() -end, -{ noremap = true, silent = true, nowait = true }) diff --git a/nvim/after/plugin/telescope.lua b/nvim/after/plugin/telescope.lua deleted file mode 100644 index a004f9d..0000000 --- a/nvim/after/plugin/telescope.lua +++ /dev/null @@ -1,16 +0,0 @@ -local builtin = require('telescope.builtin') -vim.keymap.set('n', 'ff', builtin.find_files, {}) -vim.keymap.set('n', 'fg', builtin.live_grep, {}) -vim.keymap.set('n', 'fb', builtin.buffers, {}) -vim.keymap.set('n', 'fh', builtin.help_tags, {}) -vim.keymap.set('n', 'fs', builtin.grep_string, {}) -vim.keymap.set('n', 'fc', builtin.command_history, {}) -vim.keymap.set('n', 'fk', builtin.keymaps, {}) -vim.keymap.set('n', 'fl', builtin.diagnostics, {}) -vim.keymap.set('n', 'fo', builtin.builtin, {}) - -vim.keymap.set('n', 'ps', function() - builtin.grep_string({ search = vim.fn.input("Grep > ") }) -end) - -require("telescope").load_extension("emoji") diff --git a/nvim/after/plugin/todo-txt.lua b/nvim/after/plugin/todo-txt.lua deleted file mode 100644 index 09be576..0000000 --- a/nvim/after/plugin/todo-txt.lua +++ /dev/null @@ -1,44 +0,0 @@ -require('todotxt-nvim').setup({ - todo_file = "/home/lemon/Documents/Notes/todo/todo.txt", - capture = { - alternative_priority = { - A = "today", - B = "tomorrow", - C = "this week", - D = "next week", - E = "next month", - }, - }, - highlights = { - priorities = { - A = { - fg = "yellow", - bg = "NONE", - style = "bold", - }, - B = { - fg = "green", - bg = "NONE", - style = "bold", - }, - C = { - fg = "cyan", - bg = "NONE", - style = "bold", - }, - D = { - fg = "magenta", - bg = "NONE", - style = "bold", - }, - }, - }, - sidebar = { - width = 70, - position = "right", -- default: "right" - }, -}) - --- Keyboard shortcuts for todotxt-nvim. -vim.keymap.set("n", "tp", "ToDoTxtTasksToggle") -vim.keymap.set("n", "ta", "ToDoTxtCapture") diff --git a/nvim/after/plugin/treesitter.lua b/nvim/after/plugin/treesitter.lua deleted file mode 100644 index 69adc98..0000000 --- a/nvim/after/plugin/treesitter.lua +++ /dev/null @@ -1,23 +0,0 @@ -require'nvim-treesitter.configs'.setup { - -- A list of parser names, or "all" - ensure_installed = { "python", "bash", "javascript", "typescript", "c", "lua", "rust" }, - - -- Install parsers synchronously (only applied to `ensure_installed`) - sync_install = false, - - -- Automatically install missing parsers when entering buffer - -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally - auto_install = true, - - highlight = { - -- `false` will disable the whole extension - enable = true, - - -- Setting this to true will run `:h syntax` and tree-sitter at the same time. - -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). - -- Using this option may slow down your editor, and you may see some duplicate highlights. - -- Instead of true it can also be a list of languages - additional_vim_regex_highlighting = false, - }, -} - diff --git a/nvim/after/plugin/trouble.lua b/nvim/after/plugin/trouble.lua deleted file mode 100644 index cf1256a..0000000 --- a/nvim/after/plugin/trouble.lua +++ /dev/null @@ -1,3 +0,0 @@ -vim.keymap.set("n", "xq", "TroubleToggle quickfix", - {silent = true, noremap = true} -) diff --git a/nvim/after/plugin/undotree.lua b/nvim/after/plugin/undotree.lua deleted file mode 100644 index 97bb7ab..0000000 --- a/nvim/after/plugin/undotree.lua +++ /dev/null @@ -1,2 +0,0 @@ -vim.keymap.set("n", "u", vim.cmd.UndotreeToggle) - diff --git a/nvim/after/plugin/zenmode.lua b/nvim/after/plugin/zenmode.lua deleted file mode 100644 index 753fbf8..0000000 --- a/nvim/after/plugin/zenmode.lua +++ /dev/null @@ -1,30 +0,0 @@ - -vim.keymap.set("n", "zz", function() - require("zen-mode").setup { - window = { - width = 90, - options = { } - }, - } - require("zen-mode").toggle() - vim.wo.wrap = false - vim.wo.number = true - vim.wo.rnu = true - ColorMyPencils() -end) - - -vim.keymap.set("n", "zZ", function() - require("zen-mode").setup { - window = { - width = 80, - options = { } - }, - } - require("zen-mode").toggle() - vim.wo.wrap = false - vim.wo.number = false - vim.wo.rnu = false - vim.opt.colorcolumn = "0" - ColorMyPencils() -end) diff --git a/nvim/init.lua b/nvim/init.lua index de6b0d9..00f8fe5 100644 --- a/nvim/init.lua +++ b/nvim/init.lua @@ -1 +1,4 @@ -require("lemon") +require "options" +require "keymaps" +require "Lazy" +require "autocommands" diff --git a/nvim/lazy-lock.json b/nvim/lazy-lock.json new file mode 100644 index 0000000..8fac5bb --- /dev/null +++ b/nvim/lazy-lock.json @@ -0,0 +1,39 @@ +{ + "Comment.nvim": { "branch": "master", "commit": "eab2c83a0207369900e92783f56990808082eac2" }, + "DAPInstall.nvim": { "branch": "main", "commit": "8798b4c36d33723e7bba6ed6e2c202f84bb300de" }, + "LuaSnip": { "branch": "master", "commit": "9bff06b570df29434a88f9c6a9cea3b21ca17208" }, + "alpha-nvim": { "branch": "main", "commit": "dafa11a6218c2296df044e00f88d9187222ba6b0" }, + "bufdelete.nvim": { "branch": "master", "commit": "8933abc09df6c381d47dc271b1ee5d266541448e" }, + "bufferline.nvim": { "branch": "main", "commit": "c7492a76ce8218e3335f027af44930576b561013" }, + "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, + "cmp-cmdline": { "branch": "main", "commit": "23c51b2a3c00f6abc4e922dbd7c3b9aca6992063" }, + "cmp-nvim-lsp": { "branch": "main", "commit": "0e6b2ed705ddcff9738ec4ea838141654f12eeef" }, + "cmp-nvim-lua": { "branch": "main", "commit": "f3491638d123cfd2c8048aefaf66d246ff250ca6" }, + "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, + "cmp_luasnip": { "branch": "master", "commit": "18095520391186d634a0045dacaa346291096566" }, + "friendly-snippets": { "branch": "main", "commit": "a6f7a1609addb4e57daa6bedc300f77f8d225ab7" }, + "gitsigns.nvim": { "branch": "main", "commit": "ec4742a7eebf68bec663041d359b95637242b5c3" }, + "indent-blankline.nvim": { "branch": "master", "commit": "8299fe7703dfff4b1752aeed271c3b95281a952d" }, + "lazy.nvim": { "branch": "main", "commit": "aba872ec78ffe7f7367764ab0fff6f0170421fde" }, + "lualine.nvim": { "branch": "master", "commit": "0050b308552e45f7128f399886c86afefc3eb988" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "93e58e100f37ef4fb0f897deeed20599dae9d128" }, + "mason.nvim": { "branch": "main", "commit": "4546dec8b56bc56bc1d81e717e4a935bc7cd6477" }, + "neorg": { "branch": "main", "commit": "6aa9fd303c807ed1ca3fb15cdeab1e322d02fd31" }, + "null-ls.nvim": { "branch": "main", "commit": "60b4a7167c79c7d04d1ff48b55f2235bf58158a7" }, + "nvim-autopairs": { "branch": "master", "commit": "0e065d423f9cf649e1d92443c939a4b5073b6768" }, + "nvim-cmp": { "branch": "main", "commit": "cfafe0a1ca8933f7b7968a287d39904156f2c57d" }, + "nvim-dap": { "branch": "master", "commit": "6b12294a57001d994022df8acbe2ef7327d30587" }, + "nvim-dap-ui": { "branch": "master", "commit": "1cd4764221c91686dcf4d6b62d7a7b2d112e0b13" }, + "nvim-lspconfig": { "branch": "master", "commit": "649137cbc53a044bffde36294ce3160cb18f32c7" }, + "nvim-tree.lua": { "branch": "master", "commit": "59e65d88db177ad1e6a8cffaafd4738420ad20b6" }, + "nvim-treesitter": { "branch": "master", "commit": "226c1475a46a2ef6d840af9caa0117a439465500" }, + "nvim-ts-context-commentstring": { "branch": "main", "commit": "729d83ecb990dc2b30272833c213cc6d49ed5214" }, + "nvim-web-devicons": { "branch": "master", "commit": "0568104bf8d0c3ab16395433fcc5c1638efc25d4" }, + "plenary.nvim": { "branch": "master", "commit": "9a0d3bf7b832818c042aaf30f692b081ddd58bd9" }, + "project.nvim": { "branch": "main", "commit": "685bc8e3890d2feb07ccf919522c97f7d33b94e4" }, + "rose-pine": { "branch": "main", "commit": "2eace84d649d76d41dcd44a87a17f64c7c4a586d" }, + "telescope.nvim": { "branch": "master", "commit": "203bf5609137600d73e8ed82703d6b0e320a5f36" }, + "toggleterm.nvim": { "branch": "main", "commit": "19aad0f41f47affbba1274f05e3c067e6d718e1e" }, + "vim-illuminate": { "branch": "master", "commit": "d6ca7f77eeaf61b3e6ce9f0e5a978d606df44298" }, + "which-key.nvim": { "branch": "main", "commit": "5224c261825263f46f6771f1b644cae33cd06995" } +} \ No newline at end of file diff --git a/nvim/lua/Lazy.lua b/nvim/lua/Lazy.lua new file mode 100644 index 0000000..d854e81 --- /dev/null +++ b/nvim/lua/Lazy.lua @@ -0,0 +1,38 @@ +local lazypath = vim.fn.stdpath "data" .. "/lazy/lazy.nvim" +if not vim.loop.fs_stat(lazypath) then + vim.fn.system { + "git", + "clone", + "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", + "--branch=stable", -- latest stable release + lazypath, + } +end +vim.opt.rtp:prepend(lazypath) + +-- example using a list of specs with the default options +vim.g.mapleader = " " -- make sure to set `mapleader` before lazy so your mappings are correct + +-- load lazy +require("lazy").setup("user", { + install = { colorscheme = { require("user.colorscheme").name } }, + defaults = { lazy = true, version = "57cce98dfdb2f2dd05a0567d89811e6d0505e13b" }, + ui = { wrap = "true" }, + change_detection = { enabled = true }, + debug = false, + performance = { + rtp = { + disabled_plugins = { + -- "gzip", -- Plugin for editing compressed files. + -- "matchit", -- What is it? + -- "matchparen", -- Plugin for showing matching parens + -- "netrwPlugin", -- Handles file transfers and remote directory listing across a network + -- "tarPlugin", -- Plugin for browsing tar files + -- "tohtml", -- Converting a syntax highlighted file to HTML + -- "tutor", -- Teaching? + -- "zipPlugin", -- Handles browsing zipfiles + }, + }, + }, +}) diff --git a/nvim/lua/autocommands.lua b/nvim/lua/autocommands.lua new file mode 100644 index 0000000..ab612b0 --- /dev/null +++ b/nvim/lua/autocommands.lua @@ -0,0 +1,53 @@ +vim.api.nvim_create_autocmd({ "FileType" }, { + pattern = { "qf", "help", "man", "lspinfo", "spectre_panel" }, + callback = function() + vim.cmd [[ + nnoremap q :close + set nobuflisted + ]] + end, +}) + +vim.api.nvim_create_autocmd({ "FileType" }, { + pattern = { "gitcommit", "markdown" }, + callback = function() + vim.opt_local.wrap = true + vim.opt_local.spell = true + end, +}) +-- Automatically close tab/vim when nvim-tree is the last window in the tab +vim.cmd "autocmd BufEnter * ++nested if winnr('$') == 1 && bufname() == 'NvimTree_' . tabpagenr() | quit | endif" + +vim.api.nvim_create_autocmd({ "VimResized" }, { + callback = function() + vim.cmd "tabdo wincmd =" + end, +}) + +vim.api.nvim_create_autocmd({ "TextYankPost" }, { + callback = function() + vim.highlight.on_yank { higroup = "Visual", timeout = 200 } + end, +}) + +vim.api.nvim_create_autocmd({ "BufWritePost" }, { + pattern = { "*.java" }, + callback = function() + vim.lsp.codelens.refresh() + end, +}) + +vim.api.nvim_create_autocmd({ "VimEnter" }, { + callback = function() + vim.cmd "hi link illuminatedWord LspReferenceText" + end, +}) + +vim.api.nvim_create_autocmd({ "BufWinEnter" }, { + callback = function() + local line_count = vim.api.nvim_buf_line_count(0) + if line_count >= 5000 then + vim.cmd "IlluminatePauseBuf" + end + end, +}) diff --git a/nvim/lua/keymaps.lua b/nvim/lua/keymaps.lua new file mode 100644 index 0000000..726e591 --- /dev/null +++ b/nvim/lua/keymaps.lua @@ -0,0 +1,83 @@ +-- Shorten function name +local keymap = vim.keymap.set +-- Silent keymap option +local opts = { silent = true } + +--Remap space as leader key +keymap("", "", "", opts) +vim.g.mapleader = " " + +-- Modes +-- normal_mode = "n", +-- insert_mode = "i", +-- visual_mode = "v", +-- visual_block_mode = "x", +-- term_mode = "t", +-- command_mode = "c", + +-- Normal -- +-- Better window navigation +keymap("n", "", "h", opts) +keymap("n", "", "j", opts) +keymap("n", "", "k", opts) +keymap("n", "", "l", opts) + +-- Resize with arrows +keymap("n", "", ":resize -2", opts) +keymap("n", "", ":resize +2", opts) +keymap("n", "", ":vertical resize -2", opts) +keymap("n", "", ":vertical resize +2", opts) + +-- Navigate buffers +keymap("n", "", ":bnext", opts) +keymap("n", "", ":bprevious", opts) + +-- Clear highlights +keymap("n", "h", "nohlsearch", opts) + +-- Close buffers +keymap("n", "", "Bdelete!", opts) + +-- Better paste +keymap("v", "p", '"_dP', opts) + +-- Insert -- +-- Press jk fast to enter +keymap("i", "jk", "", opts) + +-- Visual -- +-- Stay in indent mode +keymap("v", "<", "", ">gv", opts) + +-- Plugins -- + +-- NvimTree +keymap("n", "e", ":NvimTreeToggle", opts) + +-- Telescope +keymap("n", "ff", ":Telescope find_files", opts) +keymap("n", "ft", ":Telescope live_grep", opts) +keymap("n", "fp", ":Telescope projects", opts) +keymap("n", "fb", ":Telescope buffers", opts) + +-- Git +keymap("n", "gg", "lua _LAZYGIT_TOGGLE()", opts) + +-- Comment +keymap("n", "/", "lua require('Comment.api').toggle.linewise.current()", opts) +keymap("x", "/", "lua require('Comment.api').toggle.linewise(vim.fn.visualmode())", opts) + +-- DAP +keymap("n", "db", "lua require'dap'.toggle_breakpoint()", opts) +keymap("n", "dc", "lua require'dap'.continue()", opts) +keymap("n", "di", "lua require'dap'.step_into()", opts) +keymap("n", "do", "lua require'dap'.step_over()", opts) +keymap("n", "dO", "lua require'dap'.step_out()", opts) +keymap("n", "dr", "lua require'dap'.repl.toggle()", opts) +keymap("n", "dl", "lua require'dap'.run_last()", opts) +keymap("n", "du", "lua require'dapui'.toggle()", opts) +keymap("n", "dt", "lua require'dap'.terminate()", opts) + +-- Lsp +keymap("n", "lf", "lua vim.lsp.buf.format{ async = true }", opts) diff --git a/nvim/lua/lemon/init.lua b/nvim/lua/lemon/init.lua deleted file mode 100644 index e2266b2..0000000 --- a/nvim/lua/lemon/init.lua +++ /dev/null @@ -1,7 +0,0 @@ -require("lemon.set") -require("lemon.remap") -require("lemon.packer") - -vim.g.netrw_browse_split = 0 -vim.g.netrw_banner = 0 -vim.g.netrw_winsize = 25 diff --git a/nvim/lua/lemon/packer.lua b/nvim/lua/lemon/packer.lua deleted file mode 100644 index b9d8782..0000000 --- a/nvim/lua/lemon/packer.lua +++ /dev/null @@ -1,106 +0,0 @@ --- This file can be loaded by calling `lua require('plugins')` from your init.vim - --- Only required if you have packer configured as `opt` ---vim.cmd.packadd('packer.nvim') - -local ensure_packer = function() - local fn = vim.fn - local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim' - if fn.empty(fn.glob(install_path)) > 0 then - fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path}) - vim.cmd [[packadd packer.nvim]] - return true - end - return false -end - -local packer_bootstrap = ensure_packer() - -return require('packer').startup(function(use) - -- Packer can manage itself - use 'wbthomason/packer.nvim' - use 'dense-analysis/ale' - use { - 'arnarg/todotxt.nvim', - requires = {'MunifTanjim/nui.nvim'}, - } - use("theprimeagen/harpoon") - use { - 'nvim-telescope/telescope.nvim', tag = '0.1.0', - -- or , branch = '0.1.x', - requires = { {'nvim-lua/plenary.nvim'} } - } - use('xiyaowong/telescope-emoji.nvim') - - use({ - 'rose-pine/neovim', - as = 'rose-pine', - config = function() - vim.cmd('colorscheme rose-pine') - end - }) - - use({ - "folke/trouble.nvim", - config = function() - require("trouble").setup { - icons = false, - -- your configuration comes here - -- or leave it empty to use the default settings - -- refer to the configuration section below - } - end - }) - - - use({"nvim-treesitter/nvim-treesitter", run = ":TSUpdate"}) - use("nvim-treesitter/playground") - use("mbbill/undotree") - use("ledger/vim-ledger") - use("tpope/vim-fugitive") - use("tpope/vim-commentary") - use("nvim-treesitter/nvim-treesitter-context"); - use('mfussenegger/nvim-dap') - - use { - 'VonHeikemen/lsp-zero.nvim', - branch = 'v1.x', - requires = { - -- LSP Support - {'neovim/nvim-lspconfig'}, - {'williamboman/mason.nvim'}, - {'williamboman/mason-lspconfig.nvim'}, - - -- Autocompletion - {'hrsh7th/nvim-cmp'}, - {'hrsh7th/cmp-buffer'}, - {'hrsh7th/cmp-path'}, - {'saadparwaiz1/cmp_luasnip'}, - {'hrsh7th/cmp-nvim-lsp'}, - {'hrsh7th/cmp-nvim-lua'}, - - -- Snippets - {'L3MON4D3/LuaSnip'}, - {'rafamadriz/friendly-snippets'}, - } - } - - use("folke/zen-mode.nvim") - use("github/copilot.vim") - use("eandrju/cellular-automaton.nvim") - -- use("laytan/cloak.nvim") - use("jlanzarotta/bufexplorer") - use { - "nvim-neotest/neotest", - requires = { - "nvim-neotest/neotest-python", - "nvim-neotest/neotest-plenary", - "folke/neodev.nvim", - "nvim-lua/plenary.nvim", - "nvim-treesitter/nvim-treesitter", - "antoinemadec/FixCursorHold.nvim" - } - } - -end) - diff --git a/nvim/lua/lemon/popup.lua b/nvim/lua/lemon/popup.lua deleted file mode 100644 index b070603..0000000 --- a/nvim/lua/lemon/popup.lua +++ /dev/null @@ -1,58 +0,0 @@ --- Lemon_win_id = nil --- Lemon_bufh = nil - --- local function close_menu(force_save) --- force_save = force_save or false - --- vim.api.nvim_win_close(Lemon_win_id, true) - --- Lemon_win_id = nil --- Lemon_bufh = nil --- end - --- local function create_window() --- local popup = require("plenary.popup") --- local height = 10 --- local width = 60 --- local borderchars = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" } --- local bufnr = vim.api.nvim_create_buf(false, true) --- local Lemon_id, win = popup.create(bufnr, { --- title = "Mesmeric!", --- line = math.floor(((vim.o.lines - height) / 2) -1), --- col = math.floor((vim.o.columns - width) / 2), --- minwidth = width, --- mineheight = height, --- borderchars = borderchars, --- }) --- return { --- bufnr = bufnr, --- win_id = Lemon_win_id --- } --- end - --- create_window() - --- Create a new buffer and set its lines to the contents of myfile.txt -local buf = vim.api.nvim_create_buf(false, true) -local file = io.open('/home/lemon/Documents/Notes/Archive/Dr Haugh.md', 'r') -local height = 10 -local width = 60 -local lines = {} -for line in file:lines() do - table.insert(lines, line) -end -file:close() -vim.api.nvim_buf_set_lines(buf, 0, -1, true, lines) - --- Create a new window and set its options to create a floating buffer -local win = vim.api.nvim_open_win(buf, true, { - relative='editor', - width=80, - title = "test title", - title_pos = "center", - height=10, - row=10, - col=10, - border={"╭", "─", "╮", "│", "╯", "─", "╰", "│" }, -}) - diff --git a/nvim/lua/lemon/remap.lua b/nvim/lua/lemon/remap.lua deleted file mode 100644 index 0d2f247..0000000 --- a/nvim/lua/lemon/remap.lua +++ /dev/null @@ -1,45 +0,0 @@ --- ThePrimeagent's stuff -vim.g.mapleader = " " -vim.keymap.set("n", "pv", vim.cmd.Ex) - -vim.keymap.set("v", "J", ":m '>+1gv=gv") -vim.keymap.set("v", "K", ":m '<-2gv=gv") - -vim.keymap.set("n", "J", "mzJ`z") -vim.keymap.set("n", "", "zz") -vim.keymap.set("n", "", "zz") -vim.keymap.set("n", "n", "nzzzv") -vim.keymap.set("n", "N", "Nzzzv") - --- greatest remap ever -vim.keymap.set("x", "p", [["_dP]]) - --- next greatest remap ever : asbjornHaland -vim.keymap.set({"n", "v"}, "y", [["+y]]) -vim.keymap.set("n", "Y", [["+Y]]) - -vim.keymap.set({"n", "v"}, "d", [["_d]]) - --- This is going to get me cancelled -vim.keymap.set("i", "", "") - -vim.keymap.set("n", "Q", "") ---vim.keymap.set("n", "", "silent !tmux neww tmux-sessionizer") --- vim.keymap.set("n", "f", vim.lsp.buf.format) - -vim.keymap.set("n", "", "cnextzz") -vim.keymap.set("n", "", "cprevzz") -vim.keymap.set("n", "k", "lnextzz") -vim.keymap.set("n", "j", "lprevzz") - -vim.keymap.set("n", "s", [[:%s/\<\>//gI]]) -vim.keymap.set("n", "x", "!chmod +x %", { silent = true }) - -vim.keymap.set("n", "ev", "e ~/dotfiles/nvim/lua/lemon/packer.lua"); -vim.keymap.set("n", "mr", "CellularAutomaton make_it_rain"); - -vim.keymap.set("n", "", function() - vim.cmd("so") -end) --- end ThePrimeagent's stuff - diff --git a/nvim/lua/lemon/set.lua b/nvim/lua/lemon/set.lua deleted file mode 100644 index 3c662a9..0000000 --- a/nvim/lua/lemon/set.lua +++ /dev/null @@ -1,44 +0,0 @@ -vim.opt.guicursor = "" - -vim.opt.nu = true -vim.opt.relativenumber = true - -vim.opt.tabstop = 4 -vim.opt.softtabstop = 4 -vim.opt.shiftwidth = 4 -vim.opt.expandtab = true -vim.opt.autoindent = true - -vim.opt.smartindent = true - -vim.opt.wrap = false - -vim.opt.swapfile = false -vim.opt.backup = false -vim.opt.undodir = os.getenv("HOME") .. "/.vim/undodir" -vim.opt.undofile = true - -vim.opt.hlsearch = false -vim.opt.incsearch = true - -vim.opt.termguicolors = true - -vim.opt.scrolloff = 8 -vim.opt.signcolumn = "yes" -vim.opt.isfname:append("@-@") - -vim.opt.updatetime = 50 - -vim.opt.colorcolumn = "" - --- end ThePrimeagen stuff - -vim.opt.wildmenu = true -vim.opt.showmatch = true -vim.opt.splitbelow = true -vim.opt.splitright = true -vim.opt.hidden = true -vim.opt.path = "+=**" -vim.opt.more = true -vim.opt.equalalways = true -vim.opt.listchars="tab:»→,trail:␣" diff --git a/nvim/lua/options.lua b/nvim/lua/options.lua new file mode 100644 index 0000000..00d1ec2 --- /dev/null +++ b/nvim/lua/options.lua @@ -0,0 +1,43 @@ +vim.opt.backup = false -- creates a backup file +vim.opt.clipboard = "unnamedplus" -- allows neovim to access the system clipboard +vim.opt.cmdheight = 1 -- more space in the neovim command line for displaying messages +vim.opt.completeopt = { "menuone", "noselect" } -- mostly just for cmp +vim.opt.conceallevel = 0 -- so that `` is visible in markdown files +vim.opt.fileencoding = "utf-8" -- the encoding written to a file +vim.opt.hlsearch = true -- highlight all matches on previous search pattern +vim.opt.ignorecase = true -- ignore case in search patterns +vim.opt.mouse = "a" -- allow the mouse to be used in neovim +vim.opt.pumheight = 10 -- pop up menu height +vim.opt.showmode = false -- we don't need to see things like -- INSERT -- anymore +vim.opt.showtabline = 0 -- always show tabs +vim.opt.smartcase = true -- smart case +vim.opt.smartindent = true -- make indenting smarter again +vim.opt.splitbelow = true -- force all horizontal splits to go below current window +vim.opt.splitright = true -- force all vertical splits to go to the right of current window +vim.opt.swapfile = false -- creates a swapfile +vim.opt.termguicolors = true -- set term gui colors (most terminals support this) +vim.opt.timeout = true +vim.opt.timeoutlen = 300 -- time to wait for a mapped sequence to complete (in milliseconds) +vim.opt.undofile = true -- enable persistent undo +vim.opt.updatetime = 300 -- faster completion (4000ms default) +vim.opt.writebackup = false -- if a file is being edited by another program (or was written to file while editing with another program), it is not allowed to be edited +vim.opt.expandtab = true -- convert tabs to spaces +vim.opt.shiftwidth = 2 -- the number of spaces inserted for each indentation +vim.opt.tabstop = 2 -- insert 2 spaces for a tab +vim.opt.cursorline = true -- highlight the current line +vim.opt.number = true -- set numbered lines +vim.opt.laststatus = 3 -- only the last window will always have a status line +vim.opt.showcmd = false -- hide (partial) command in the last line of the screen (for performance) +vim.opt.ruler = false -- hide the line and column number of the cursor position +vim.opt.numberwidth = 4 -- minimal number of columns to use for the line number {default 4} +vim.opt.signcolumn = "yes" -- always show the sign column, otherwise it would shift the text each time +vim.opt.wrap = false -- display lines as one long line +vim.opt.scrolloff = 8 -- minimal number of screen lines to keep above and below the cursor +vim.opt.sidescrolloff = 8 -- minimal number of screen columns to keep to the left and right of the cursor if wrap is `false` +vim.opt.guifont = "monospace:h17" -- the font used in graphical neovim applications +vim.opt.fillchars.eob = " " -- show empty lines at the end of a buffer as ` ` {default `~`} +vim.opt.shortmess:append "c" -- hide all the completion messages, e.g. "-- XXX completion (YYY)", "match 1 of 2", "The only match", "Pattern not found" +vim.opt.whichwrap:append "<,>,[,],h,l" -- keys allowed to move to the previous/next line when the beginning/end of line is reached +vim.opt.iskeyword:append "-" -- treats words with `-` as single words +vim.opt.formatoptions:remove { "c", "r", "o" } -- This is a sequence of letters which describes how automatic formatting is to be done +vim.opt.linebreak = true diff --git a/nvim/lua/settings/lua_ls.lua b/nvim/lua/settings/lua_ls.lua new file mode 100644 index 0000000..1154de2 --- /dev/null +++ b/nvim/lua/settings/lua_ls.lua @@ -0,0 +1,18 @@ +return { + settings = { + Lua = { + diagnostics = { + globals = { "vim" }, + }, + workspace = { + library = { + [vim.fn.expand "$VIMRUNTIME/lua"] = true, + [vim.fn.stdpath "config" .. "/lua"] = true, + }, + }, + telemetry = { + enable = false, + }, + }, + }, +} diff --git a/nvim/lua/settings/pyright.lua b/nvim/lua/settings/pyright.lua new file mode 100644 index 0000000..c2a518d --- /dev/null +++ b/nvim/lua/settings/pyright.lua @@ -0,0 +1,9 @@ +return { + settings = { + python = { + analysis = { + typeCheckingMode = "off", + }, + }, + }, +} diff --git a/nvim/lua/user/alpha.lua b/nvim/lua/user/alpha.lua new file mode 100644 index 0000000..80c88c1 --- /dev/null +++ b/nvim/lua/user/alpha.lua @@ -0,0 +1,41 @@ +local M = { + "goolord/alpha-nvim", + event = "VimEnter", + commit = "dafa11a6218c2296df044e00f88d9187222ba6b0", +} + +function M.config() + local alpha = require "alpha" + local dashboard = require "alpha.themes.dashboard" + dashboard.section.header.val = { + [[ __ ]], + [[ ___ ___ ___ __ __ /\_\ ___ ___ ]], + [[ / _ `\ / __`\ / __`\/\ \/\ \\/\ \ / __` __`\ ]], + [[/\ \/\ \/\ __//\ \_\ \ \ \_/ |\ \ \/\ \/\ \/\ \ ]], + [[\ \_\ \_\ \____\ \____/\ \___/ \ \_\ \_\ \_\ \_\]], + [[ \/_/\/_/\/____/\/___/ \/__/ \/_/\/_/\/_/\/_/]], + } + dashboard.section.buttons.val = { + dashboard.button("f", " " .. " Find file", ":Telescope find_files "), + dashboard.button("e", " " .. " New file", ":ene startinsert "), + dashboard.button("p", " " .. " Find project", ":lua require('telescope').extensions.projects.projects()"), + dashboard.button("r", " " .. " Recent files", ":Telescope oldfiles "), + dashboard.button("t", " " .. " Find text", ":Telescope live_grep "), + dashboard.button("c", " " .. " Config", ":e $MYVIMRC "), + dashboard.button("q", " " .. " Quit", ":qa"), + } + local function footer() + return "chrisatmachine.com" + end + + dashboard.section.footer.val = footer() + + dashboard.section.footer.opts.hl = "Type" + dashboard.section.header.opts.hl = "Include" + dashboard.section.buttons.opts.hl = "Keyword" + + dashboard.opts.opts.noautocmd = true + alpha.setup(dashboard.opts) +end + +return M diff --git a/nvim/lua/user/autopairs.lua b/nvim/lua/user/autopairs.lua new file mode 100644 index 0000000..1ce7ffe --- /dev/null +++ b/nvim/lua/user/autopairs.lua @@ -0,0 +1,45 @@ +local M = { + "windwp/nvim-autopairs", + commit = "0e065d423f9cf649e1d92443c939a4b5073b6768", + event = "InsertEnter", + dependencies = { + { + "hrsh7th/nvim-cmp", + commit = "cfafe0a1ca8933f7b7968a287d39904156f2c57d", + event = { + "InsertEnter", + "CmdlineEnter", + }, + }, + }, +} + +function M.config() + require("nvim-autopairs").setup { + check_ts = true, -- treesitter integration + disable_filetype = { "TelescopePrompt" }, + ts_config = { + lua = { "string", "source" }, + javascript = { "string", "template_string" }, + java = false, + }, + fast_wrap = { + map = "", + chars = { "{", "[", "(", '"', "'" }, + pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], "%s+", ""), + offset = 0, -- Offset from pattern match + end_key = "$", + keys = "qwertyuiopzxcvbnmasdfghjkl", + check_comma = true, + highlight = "PmenuSel", + highlight_grey = "LineNr", + }, + } + + local cmp_autopairs = require "nvim-autopairs.completion.cmp" + local cmp = require "cmp" + + cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done {}) +end + +return M diff --git a/nvim/lua/user/bufferline.lua b/nvim/lua/user/bufferline.lua new file mode 100644 index 0000000..a14785a --- /dev/null +++ b/nvim/lua/user/bufferline.lua @@ -0,0 +1,97 @@ +local M = { + "akinsho/bufferline.nvim", + commit = "c7492a76ce8218e3335f027af44930576b561013", + event = { "BufReadPre", "BufAdd", "BufNew", "BufReadPost" }, + dependencies = { + { + "famiu/bufdelete.nvim", + commit = "8933abc09df6c381d47dc271b1ee5d266541448e", + }, + }, +} +function M.config() + require("bufferline").setup { + options = { + close_command = "Bdelete! %d", -- can be a string | function, see "Mouse actions" + right_mouse_command = "Bdelete! %d", -- can be a string | function, see "Mouse actions" + offsets = { { filetype = "NvimTree", text = "", padding = 1 } }, + separator_style = "thin", -- | "thick" | "thin" | { 'any', 'any' }, + }, + highlights = { + fill = { + fg = { attribute = "fg", highlight = "#ff0000" }, + bg = { attribute = "bg", highlight = "TabLine" }, + }, + background = { + fg = { attribute = "fg", highlight = "TabLine" }, + bg = { attribute = "bg", highlight = "TabLine" }, + }, + buffer_visible = { + fg = { attribute = "fg", highlight = "TabLine" }, + bg = { attribute = "bg", highlight = "TabLine" }, + }, + close_button = { + fg = { attribute = "fg", highlight = "TabLine" }, + bg = { attribute = "bg", highlight = "TabLine" }, + }, + close_button_visible = { + fg = { attribute = "fg", highlight = "TabLine" }, + bg = { attribute = "bg", highlight = "TabLine" }, + }, + tab_selected = { + fg = { attribute = "fg", highlight = "Normal" }, + bg = { attribute = "bg", highlight = "Normal" }, + }, + tab = { + fg = { attribute = "fg", highlight = "TabLine" }, + bg = { attribute = "bg", highlight = "TabLine" }, + }, + tab_close = { + -- fg = {attribute='fg',highlight='LspDiagnosticsDefaultError'}, + fg = { attribute = "fg", highlight = "TabLineSel" }, + bg = { attribute = "bg", highlight = "Normal" }, + }, + duplicate_selected = { + fg = { attribute = "fg", highlight = "TabLineSel" }, + bg = { attribute = "bg", highlight = "TabLineSel" }, + italic = true, + }, + duplicate_visible = { + fg = { attribute = "fg", highlight = "TabLine" }, + bg = { attribute = "bg", highlight = "TabLine" }, + italic = true, + }, + duplicate = { + fg = { attribute = "fg", highlight = "TabLine" }, + bg = { attribute = "bg", highlight = "TabLine" }, + italic = true, + }, + modified = { + fg = { attribute = "fg", highlight = "TabLine" }, + bg = { attribute = "bg", highlight = "TabLine" }, + }, + modified_selected = { + fg = { attribute = "fg", highlight = "Normal" }, + bg = { attribute = "bg", highlight = "Normal" }, + }, + modified_visible = { + fg = { attribute = "fg", highlight = "TabLine" }, + bg = { attribute = "bg", highlight = "TabLine" }, + }, + separator = { + fg = { attribute = "bg", highlight = "TabLine" }, + bg = { attribute = "bg", highlight = "TabLine" }, + }, + separator_selected = { + fg = { attribute = "bg", highlight = "Normal" }, + bg = { attribute = "bg", highlight = "Normal" }, + }, + indicator_selected = { + fg = { attribute = "fg", highlight = "LspDiagnosticsDefaultHint" }, + bg = { attribute = "bg", highlight = "Normal" }, + }, + }, + } +end + +return M diff --git a/nvim/lua/user/cmp.lua b/nvim/lua/user/cmp.lua new file mode 100644 index 0000000..d7db785 --- /dev/null +++ b/nvim/lua/user/cmp.lua @@ -0,0 +1,167 @@ +local M = { + "hrsh7th/nvim-cmp", + commit = "cfafe0a1ca8933f7b7968a287d39904156f2c57d", + dependencies = { + { + "hrsh7th/cmp-nvim-lsp", + commit = "0e6b2ed705ddcff9738ec4ea838141654f12eeef", + }, + { + "hrsh7th/cmp-buffer", + commit = "3022dbc9166796b644a841a02de8dd1cc1d311fa", + }, + { + "hrsh7th/cmp-path", + commit = "91ff86cd9c29299a64f968ebb45846c485725f23", + }, + { + "hrsh7th/cmp-cmdline", + commit = "23c51b2a3c00f6abc4e922dbd7c3b9aca6992063", + }, + { + "saadparwaiz1/cmp_luasnip", + commit = "18095520391186d634a0045dacaa346291096566", + }, + { + "L3MON4D3/LuaSnip", + commit = "9bff06b570df29434a88f9c6a9cea3b21ca17208", + event = "InsertEnter", + dependencies = { + "rafamadriz/friendly-snippets", + commit = "a6f7a1609addb4e57daa6bedc300f77f8d225ab7", + }, + }, + { + "hrsh7th/cmp-nvim-lua", + commit = "f3491638d123cfd2c8048aefaf66d246ff250ca6", + }, + }, + event = { + "InsertEnter", + "CmdlineEnter", + }, +} + +function M.config() + local cmp = require "cmp" + local luasnip = require "luasnip" + require("luasnip/loaders/from_vscode").lazy_load() + + local check_backspace = function() + local col = vim.fn.col "." - 1 + return col == 0 or vim.fn.getline("."):sub(col, col):match "%s" + end + + local kind_icons = { + Text = "", + Method = "", + Function = "", + Constructor = "", + Field = "", + Variable = "", + Class = "", + Interface = "", + Module = "", + Property = "", + Unit = "", + Value = "", + Enum = "", + Keyword = "", + Snippet = "", + Color = "", + File = "", + Reference = "", + Folder = "", + EnumMember = "", + Constant = "", + Struct = "", + Event = "", + Operator = "", + TypeParameter = "", + } + + cmp.setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) -- For `luasnip` users. + end, + }, + mapping = cmp.mapping.preset.insert { + [""] = cmp.mapping.select_prev_item(), + [""] = cmp.mapping.select_next_item(), + [""] = cmp.mapping(cmp.mapping.scroll_docs(-1), { "i", "c" }), + [""] = cmp.mapping(cmp.mapping.scroll_docs(1), { "i", "c" }), + [""] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }), + [""] = cmp.mapping { + i = cmp.mapping.abort(), + c = cmp.mapping.close(), + }, + -- Accept currently selected item. If none selected, `select` first item. + -- Set `select` to `false` to only confirm explicitly selected items. + [""] = cmp.mapping.confirm { select = true }, + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expandable() then + luasnip.expand() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif check_backspace() then + fallback() + else + fallback() + end + end, { + "i", + "s", + }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { + "i", + "s", + }), + }, + formatting = { + fields = { "kind", "abbr", "menu" }, + format = function(entry, vim_item) + vim_item.kind = kind_icons[vim_item.kind] + vim_item.menu = ({ + nvim_lsp = "", + nvim_lua = "", + luasnip = "", + buffer = "", + path = "", + emoji = "", + })[entry.source.name] + return vim_item + end, + }, + sources = { + { name = "nvim_lsp" }, + { name = "nvim_lua" }, + { name = "luasnip" }, + { name = "buffer" }, + { name = "path" }, + }, + confirm_opts = { + behavior = cmp.ConfirmBehavior.Replace, + select = false, + }, + window = { + completion = cmp.config.window.bordered(), + documentation = cmp.config.window.bordered(), + }, + experimental = { + ghost_text = true, + }, + } +end + +return M diff --git a/nvim/lua/user/colorscheme.lua b/nvim/lua/user/colorscheme.lua new file mode 100644 index 0000000..bbbe16d --- /dev/null +++ b/nvim/lua/user/colorscheme.lua @@ -0,0 +1,19 @@ +local M = { + "rose-pine/neovim", + lazy = false, -- make sure we load this during startup if it is your main colorscheme + priority = 1000, -- make sure to load this before all the other start plugins +} + +M.name = "rose-pine" +function M.config() + require('rose-pine').setup { + disable_italics = true, + dark_variant = 'main' + } + local status_ok, _ = pcall(vim.cmd.colorscheme, M.name) + if not status_ok then + return + end +end + +return M diff --git a/nvim/lua/user/comment.lua b/nvim/lua/user/comment.lua new file mode 100644 index 0000000..27e8fd5 --- /dev/null +++ b/nvim/lua/user/comment.lua @@ -0,0 +1,39 @@ +local M = { + "numToStr/Comment.nvim", + commit = "eab2c83a0207369900e92783f56990808082eac2", + event = "BufRead", + dependencies = { + { + "JoosepAlviste/nvim-ts-context-commentstring", + event = "VeryLazy", + commit = "a0f89563ba36b3bacd62cf967b46beb4c2c29e52", + }, + }, +} + +function M.config() + pre_hook = function(ctx) + -- Only calculate commentstring for tsx filetypes + if vim.bo.filetype == "typescriptreact" then + local U = require "Comment.utils" + + -- Determine whether to use linewise or blockwise commentstring + local type = ctx.ctype == U.ctype.linewise and "__default" or "__multiline" + + -- Determine the location where to calculate commentstring from + local location = nil + if ctx.ctype == U.ctype.blockwise then + location = require("ts_context_commentstring.utils").get_cursor_location() + elseif ctx.cmotion == U.cmotion.v or ctx.cmotion == U.cmotion.V then + location = require("ts_context_commentstring.utils").get_visual_start_location() + end + + return require("ts_context_commentstring.internal").calculate_commentstring { + key = type, + location = location, + } + end + end +end + +return M diff --git a/nvim/lua/user/dap.lua b/nvim/lua/user/dap.lua new file mode 100644 index 0000000..93942b8 --- /dev/null +++ b/nvim/lua/user/dap.lua @@ -0,0 +1,67 @@ +local M = { + "mfussenegger/nvim-dap", + commit = "6b12294a57001d994022df8acbe2ef7327d30587", + event = "VeryLazy", +} + +function M.config() + local dap = require "dap" + + local dap_ui_status_ok, dapui = pcall(require, "dapui") + if not dap_ui_status_ok then + return + end + + dap.listeners.after.event_initialized["dapui_config"] = function() + dapui.open() + end + + dap.listeners.before.event_terminated["dapui_config"] = function() + dapui.close() + end + + dap.listeners.before.event_exited["dapui_config"] = function() + dapui.close() + end + + dap.adapters.codelldb = { + type = "server", + port = "${port}", + executable = { + -- provide the absolute path for `codelldb` command if not using the one installed using `mason.nvim` + command = "codelldb", + args = { "--port", "${port}" }, + -- On windows you may have to uncomment this: + -- detached = false, + }, + } + dap.configurations.c = { + { + name = "Launch file", + type = "codelldb", + request = "launch", + program = function() + local path + vim.ui.input({ prompt = "Path to executable: ", default = vim.loop.cwd() .. "/build/" }, function(input) + path = input + end) + vim.cmd [[redraw]] + return path + end, + cwd = "${workspaceFolder}", + stopOnEntry = false, + }, + } +end + +M = { + "ravenxrz/DAPInstall.nvim", + commit = "8798b4c36d33723e7bba6ed6e2c202f84bb300de", + lazy = true, + config = function() + require("dap_install").setup {} + require("dap_install").config("python", {}) + end, +} + +return M diff --git a/nvim/lua/user/dapui.lua b/nvim/lua/user/dapui.lua new file mode 100644 index 0000000..54ae38c --- /dev/null +++ b/nvim/lua/user/dapui.lua @@ -0,0 +1,60 @@ +local M = { + "rcarriga/nvim-dap-ui", + commit = "1cd4764221c91686dcf4d6b62d7a7b2d112e0b13", + event = "VeryLazy", + dependencies = { + { + "mfussenegger/nvim-dap", + commit = "6b12294a57001d994022df8acbe2ef7327d30587", + event = "VeryLazy", + }, + }, +} + +function M.config() + require("dapui").setup { + expand_lines = true, + icons = { expanded = "", collapsed = "", circular = "" }, + mappings = { + -- Use a table to apply multiple mappings + expand = { "", "<2-LeftMouse>" }, + open = "o", + remove = "d", + edit = "e", + repl = "r", + toggle = "t", + }, + layouts = { + { + elements = { + { id = "scopes", size = 0.33 }, + { id = "breakpoints", size = 0.17 }, + { id = "stacks", size = 0.25 }, + { id = "watches", size = 0.25 }, + }, + size = 0.33, + position = "right", + }, + { + elements = { + { id = "repl", size = 0.45 }, + { id = "console", size = 0.55 }, + }, + size = 0.27, + position = "bottom", + }, + }, + floating = { + max_height = 0.9, + max_width = 0.5, -- Floats will be treated as percentage of your screen. + border = vim.g.border_chars, -- Border style. Can be 'single', 'double' or 'rounded' + mappings = { + close = { "q", "" }, + }, + }, + } + + vim.fn.sign_define("DapBreakpoint", { text = "", texthl = "DiagnosticSignError", linehl = "", numhl = "" }) +end + +return M diff --git a/nvim/lua/user/gitsigns.lua b/nvim/lua/user/gitsigns.lua new file mode 100644 index 0000000..91f8e10 --- /dev/null +++ b/nvim/lua/user/gitsigns.lua @@ -0,0 +1,43 @@ +local M = { + "lewis6991/gitsigns.nvim", + commit = "ec4742a7eebf68bec663041d359b95637242b5c3", + event = "BufReadPre", +} + +M.opts = { + signs = { + add = { hl = "GitSignsAdd", text = "▎", numhl = "GitSignsAddNr", linehl = "GitSignsAddLn" }, + change = { hl = "GitSignsChange", text = "▎", numhl = "GitSignsChangeNr", linehl = "GitSignsChangeLn" }, + delete = { hl = "GitSignsDelete", text = "契", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" }, + topdelete = { hl = "GitSignsDelete", text = "契", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" }, + changedelete = { hl = "GitSignsChange", text = "▎", numhl = "GitSignsChangeNr", linehl = "GitSignsChangeLn" }, + }, + signcolumn = true, -- Toggle with `:Gitsigns toggle_signs` + watch_gitdir = { + interval = 1000, + follow_files = true, + }, + attach_to_untracked = true, + current_line_blame_opts = { + virt_text = true, + virt_text_pos = "eol", -- 'eol' | 'overlay' | 'right_align' + delay = 1000, + }, + sign_priority = 6, + update_debounce = 100, + status_formatter = nil, -- Use default + preview_config = { + -- Options passed to nvim_open_win + border = "single", + style = "minimal", + relative = "cursor", + row = 0, + col = 1, + }, +} + +function M.config() + require('gitsigns').setup() +end + +return M diff --git a/nvim/lua/user/illuminate.lua b/nvim/lua/user/illuminate.lua new file mode 100644 index 0000000..938da54 --- /dev/null +++ b/nvim/lua/user/illuminate.lua @@ -0,0 +1,54 @@ +local M = { + "RRethy/vim-illuminate", + commit = "d6ca7f77eeaf61b3e6ce9f0e5a978d606df44298", + event = "VeryLazy", +} + +function M.config() + local illuminate = require "illuminate" + vim.g.Illuminate_ftblacklist = { "alpha", "NvimTree" } + vim.api.nvim_set_keymap( + "n", + "", + 'lua require"illuminate".next_reference{wrap=true}', + { noremap = true } + ) + vim.api.nvim_set_keymap( + "n", + "", + 'lua require"illuminate".next_reference{reverse=true,wrap=true}', + { noremap = true } + ) + + illuminate.configure { + providers = { + "lsp", + "treesitter", + "regex", + }, + delay = 200, + filetypes_denylist = { + "dirvish", + "fugitive", + "alpha", + "NvimTree", + "packer", + "neogitstatus", + "Trouble", + "lir", + "Outline", + "spectre_panel", + "toggleterm", + "DressingSelect", + "TelescopePrompt", + }, + filetypes_allowlist = {}, + modes_denylist = {}, + modes_allowlist = {}, + providers_regex_syntax_denylist = {}, + providers_regex_syntax_allowlist = {}, + under_cursor = true, + } +end + +return M diff --git a/nvim/lua/user/indentline.lua b/nvim/lua/user/indentline.lua new file mode 100644 index 0000000..5945e6f --- /dev/null +++ b/nvim/lua/user/indentline.lua @@ -0,0 +1,21 @@ +local M = { + "lukas-reineke/indent-blankline.nvim", + commit = "8299fe7703dfff4b1752aeed271c3b95281a952d", + event = "BufReadPre", +} + +M.opts = { + char = "▏", + show_trailing_blankline_indent = false, + show_first_indent_level = true, + use_treesitter = true, + show_current_context = true, + buftype_exclude = { "terminal", "nofile" }, + filetype_exclude = { + "help", + "packer", + "NvimTree", + }, +} + +return M diff --git a/nvim/lua/user/lsp.lua b/nvim/lua/user/lsp.lua new file mode 100644 index 0000000..94fc781 --- /dev/null +++ b/nvim/lua/user/lsp.lua @@ -0,0 +1,111 @@ +local M = { + "neovim/nvim-lspconfig", + commit = "649137cbc53a044bffde36294ce3160cb18f32c7", + lazy = true, + dependencies = { + { + "hrsh7th/cmp-nvim-lsp", + commit = "0e6b2ed705ddcff9738ec4ea838141654f12eeef", + }, + }, +} + +local cmp_nvim_lsp = require "cmp_nvim_lsp" +function M.config() + local capabilities = vim.lsp.protocol.make_client_capabilities() + capabilities.textDocument.completion.completionItem.snippetSupport = true + capabilities = cmp_nvim_lsp.default_capabilities(M.capabilities) + + local function lsp_keymaps(bufnr) + local opts = { noremap = true, silent = true } + local keymap = vim.api.nvim_buf_set_keymap + keymap(bufnr, "n", "gD", "lua vim.lsp.buf.declaration()", opts) + keymap(bufnr, "n", "gd", "lua vim.lsp.buf.definition()", opts) + keymap(bufnr, "n", "K", "lua vim.lsp.buf.hover()", opts) + keymap(bufnr, "n", "gI", "lua vim.lsp.buf.implementation()", opts) + keymap(bufnr, "n", "gr", "lua vim.lsp.buf.references()", opts) + keymap(bufnr, "n", "gl", "lua vim.diagnostic.open_float()", opts) + keymap(bufnr, "n", "li", "LspInfo", opts) + keymap(bufnr, "n", "lI", "Mason", opts) + keymap(bufnr, "n", "la", "lua vim.lsp.buf.code_action()", opts) + keymap(bufnr, "n", "lj", "lua vim.diagnostic.goto_next({buffer=0})", opts) + keymap(bufnr, "n", "lk", "lua vim.diagnostic.goto_prev({buffer=0})", opts) + keymap(bufnr, "n", "lr", "lua vim.lsp.buf.rename()", opts) + keymap(bufnr, "n", "ls", "lua vim.lsp.buf.signature_help()", opts) + keymap(bufnr, "n", "lq", "lua vim.diagnostic.setloclist()", opts) + end + + local lspconfig = require "lspconfig" + local on_attach = function(client, bufnr) + if client.name == "tsserver" then + client.server_capabilities.documentFormattingProvider = false + end + + if client.name == "sumneko_lua" then + client.server_capabilities.documentFormattingProvider = false + end + + lsp_keymaps(bufnr) + require("illuminate").on_attach(client) + end + + for _, server in pairs(require("utils").servers) do + Opts = { + on_attach = on_attach, + capabilities = capabilities, + } + + server = vim.split(server, "@")[1] + + local require_ok, conf_opts = pcall(require, "settings." .. server) + if require_ok then + Opts = vim.tbl_deep_extend("force", conf_opts, Opts) + end + + lspconfig[server].setup(Opts) + end + + local signs = { + { name = "DiagnosticSignError", text = "" }, + { name = "DiagnosticSignWarn", text = "" }, + { name = "DiagnosticSignHint", text = "" }, + { name = "DiagnosticSignInfo", text = "" }, + } + + for _, sign in ipairs(signs) do + vim.fn.sign_define(sign.name, { texthl = sign.name, text = sign.text, numhl = "" }) + end + + local config = { + -- disable virtual text + virtual_text = false, + -- show signs + signs = { + active = signs, + }, + update_in_insert = true, + underline = true, + severity_sort = true, + float = { + focusable = false, + style = "minimal", + border = "rounded", + source = "always", + header = "", + prefix = "", + suffix = "", + }, + } + + vim.diagnostic.config(config) + + vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { + border = "rounded", + }) + + vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { + border = "rounded", + }) +end + +return M diff --git a/nvim/lua/user/lualine.lua b/nvim/lua/user/lualine.lua new file mode 100644 index 0000000..535f541 --- /dev/null +++ b/nvim/lua/user/lualine.lua @@ -0,0 +1,67 @@ +local M = { + "nvim-lualine/lualine.nvim", + commit = "0050b308552e45f7128f399886c86afefc3eb988", + event = { "VimEnter", "InsertEnter", "BufReadPre", "BufAdd", "BufNew", "BufReadPost" }, +} + +function M.config() + local status_ok, lualine = pcall(require, "lualine") + if not status_ok then + return + end + + local hide_in_width = function() + return vim.fn.winwidth(0) > 80 + end + + local diagnostics = { + "diagnostics", + sources = { "nvim_diagnostic" }, + sections = { "error", "warn" }, + symbols = { error = " ", warn = " " }, + colored = false, + always_visible = true, + } + + local diff = { + "diff", + colored = false, + symbols = { added = " ", modified = " ", removed = " " }, -- changes diff symbols + cond = hide_in_width, + } + + local filetype = { + "filetype", + icons_enabled = false, + } + + local location = { + "location", + padding = 0, + } + + local spaces = function() + return "spaces: " .. vim.api.nvim_buf_get_option(0, "shiftwidth") + end + lualine.setup { + options = { + globalstatus = true, + icons_enabled = true, + theme = "auto", + component_separators = { left = "", right = "" }, + section_separators = { left = "", right = "" }, + disabled_filetypes = { "alpha", "dashboard" }, + always_divide_middle = true, + }, + sections = { + lualine_a = { "mode" }, + lualine_b = { "branch" }, + lualine_c = { diagnostics }, + lualine_x = { diff, spaces, "encoding", filetype }, + lualine_y = { location }, + lualine_z = { "progress" }, + }, + } +end + +return M diff --git a/nvim/lua/user/mason.lua b/nvim/lua/user/mason.lua new file mode 100644 index 0000000..e211056 --- /dev/null +++ b/nvim/lua/user/mason.lua @@ -0,0 +1,36 @@ +local M = { + "williamboman/mason.nvim", + commit = "4546dec8b56bc56bc1d81e717e4a935bc7cd6477", + cmd = "Mason", + event = "BufReadPre", + dependencies = { + { + "williamboman/mason-lspconfig.nvim", + commit = "93e58e100f37ef4fb0f897deeed20599dae9d128", + lazy = true, + }, + }, +} + +local settings = { + ui = { + border = "none", + icons = { + package_installed = "◍", + package_pending = "◍", + package_uninstalled = "◍", + }, + }, + log_level = vim.log.levels.INFO, + max_concurrent_installers = 4, +} + +function M.config() + require("mason").setup(settings) + require("mason-lspconfig").setup { + ensure_installed = require("utils").servers, + automatic_installation = true, + } +end + +return M diff --git a/nvim/lua/user/neorg.lua b/nvim/lua/user/neorg.lua new file mode 100644 index 0000000..30c016e --- /dev/null +++ b/nvim/lua/user/neorg.lua @@ -0,0 +1,33 @@ +local M = { + "nvim-neorg/neorg", + commit = "6aa9fd303c807ed1ca3fb15cdeab1e322d02fd31", -- we give it a commit hash ourself + ft = "norg", + cmd = "Neorg", + build = ":Neorg sync-parsers", + opts = { + load = { + ["core.defaults"] = {}, -- Loads default behaviour + ["core.export"] = {}, + ["core.concealer"] = {}, -- Adds pretty icons to your documents + ["core.dirman"] = { -- Manages Neorg workspaces + config = { + workspaces = { + notes = "~/notes", + }, + }, + }, + }, + }, + dependencies = { { "nvim-lua/plenary.nvim" } }, +} + +function M.config() + require('neorg').setup { + load = { + ["core.defaults"] = {} + } + } +end + +return M + diff --git a/nvim/lua/user/null-ls.lua b/nvim/lua/user/null-ls.lua new file mode 100644 index 0000000..16b4317 --- /dev/null +++ b/nvim/lua/user/null-ls.lua @@ -0,0 +1,37 @@ +local M = { + "jose-elias-alvarez/null-ls.nvim", + event = "BufReadPre", + commit = "60b4a7167c79c7d04d1ff48b55f2235bf58158a7", + dependencies = { + { + "nvim-lua/plenary.nvim", + commit = "9a0d3bf7b832818c042aaf30f692b081ddd58bd9", + lazy = true, + }, + }, +} + +function M.config() + local null_ls = require "null-ls" + -- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/formatting + local formatting = null_ls.builtins.formatting + -- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/diagnostics + local diagnostics = null_ls.builtins.diagnostics + + -- https://github.com/prettier-solidity/prettier-plugin-solidity + null_ls.setup { + debug = false, + sources = { + formatting.prettier.with { + extra_filetypes = { "toml" }, + extra_args = { "--no-semi", "--single-quote", "--jsx-single-quote" }, + }, + formatting.black.with { extra_args = { "--fast" } }, + formatting.stylua, + formatting.google_java_format, + diagnostics.flake8, + }, + } +end + +return M diff --git a/nvim/lua/user/nvim-dev-icons.lua b/nvim/lua/user/nvim-dev-icons.lua new file mode 100644 index 0000000..c4125c9 --- /dev/null +++ b/nvim/lua/user/nvim-dev-icons.lua @@ -0,0 +1,22 @@ +local M = { + "nvim-tree/nvim-web-devicons", + event = "VeryLazy", + commit = "0568104bf8d0c3ab16395433fcc5c1638efc25d4" +} + +function M.config() + require("nvim-web-devicons").setup { + override = { + zsh = { + icon = "", + color = "#428850", + cterm_color = "65", + name = "Zsh", + }, + }, + color_icons = true, + default = true, + } +end + +return M diff --git a/nvim/lua/user/nvim-tree.lua b/nvim/lua/user/nvim-tree.lua new file mode 100644 index 0000000..8db97f9 --- /dev/null +++ b/nvim/lua/user/nvim-tree.lua @@ -0,0 +1,65 @@ +local M = { + "kyazdani42/nvim-tree.lua", + commit = "59e65d88db177ad1e6a8cffaafd4738420ad20b6", + event = "VimEnter" +} + +function M.config() + local tree_cb = require("nvim-tree.config").nvim_tree_callback + require("nvim-tree").setup { + update_focused_file = { + enable = true, + update_cwd = true, + }, + renderer = { + icons = { + glyphs = { + default = "", + symlink = "", + folder = { + arrow_open = "", + arrow_closed = "", + default = "", + open = "", + empty = "", + empty_open = "", + symlink = "", + symlink_open = "", + }, + git = { + unstaged = "", + staged = "S", + unmerged = "", + renamed = "➜", + untracked = "U", + deleted = "", + ignored = "◌", + }, + }, + }, + }, + diagnostics = { + enable = true, + show_on_dirs = true, + icons = { + hint = "", + info = "", + warning = "", + error = "", + }, + }, + view = { + width = 30, + side = "left", + mappings = { + list = { + { key = { "l", "", "o" }, cb = tree_cb "edit" }, + { key = "h", cb = tree_cb "close_node" }, + { key = "v", cb = tree_cb "vsplit" }, + }, + }, + }, + } +end + +return M diff --git a/nvim/lua/user/project.lua b/nvim/lua/user/project.lua new file mode 100644 index 0000000..a7aac6f --- /dev/null +++ b/nvim/lua/user/project.lua @@ -0,0 +1,29 @@ +local M = { + "ahmedkhalf/project.nvim", + commit = "685bc8e3890d2feb07ccf919522c97f7d33b94e4", + dependencies = { + { + "nvim-telescope/telescope.nvim", + commit = "203bf5609137600d73e8ed82703d6b0e320a5f36", + event = "Bufenter", + cmd = { "Telescope" }, + }, + }, +} + +function M.config() + local project = require "project_nvim" + project.setup { + + -- detection_methods = { "lsp", "pattern" }, -- NOTE: lsp detection will get annoying with multiple langs in one project + detection_methods = { "pattern" }, + + -- patterns used to detect root dir, when **"pattern"** is in detection_methods + patterns = { ".git", "Makefile", "package.json" }, + } + + local telescope = require "telescope" + telescope.load_extension "projects" +end + +return M diff --git a/nvim/lua/user/telescope.lua b/nvim/lua/user/telescope.lua new file mode 100644 index 0000000..b6b5a1d --- /dev/null +++ b/nvim/lua/user/telescope.lua @@ -0,0 +1,33 @@ +local M = { + "nvim-telescope/telescope.nvim", + commit = "203bf5609137600d73e8ed82703d6b0e320a5f36", + event = "Bufenter", + cmd = { "Telescope" }, + dependencies = { + { + "ahmedkhalf/project.nvim", + commit = "685bc8e3890d2feb07ccf919522c97f7d33b94e4", + }, + }, +} + +local actions = require "telescope.actions" + +M.opts = { + defaults = { + prompt_prefix = " ", + selection_caret = " ", + path_display = { "smart" }, + file_ignore_patterns = { ".git/", "node_modules" }, + mappings = { + i = { + [""] = actions.move_selection_next, + [""] = actions.move_selection_previous, + [""] = actions.move_selection_next, + [""] = actions.move_selection_previous, + }, + }, + }, +} + +return M diff --git a/nvim/lua/user/toggleterm.lua b/nvim/lua/user/toggleterm.lua new file mode 100644 index 0000000..512d97b --- /dev/null +++ b/nvim/lua/user/toggleterm.lua @@ -0,0 +1,49 @@ +local M = { + "akinsho/toggleterm.nvim", + commit = "19aad0f41f47affbba1274f05e3c067e6d718e1e", + event = "VeryLazy", +} + +function M.config() + local status_ok, toggleterm = pcall(require, "toggleterm") + if not status_ok then + return + end + + toggleterm.setup { + size = 20, + open_mapping = [[]], + hide_numbers = true, + shade_terminals = true, + shading_factor = 2, + start_in_insert = true, + insert_mappings = true, + persist_size = true, + direction = "float", + close_on_exit = true, + shell = vim.o.shell, + float_opts = { + border = "curved", + }, + } + + function _G.set_terminal_keymaps() + local opts = { noremap = true } + -- vim.api.nvim_buf_set_keymap(0, 't', '', [[]], opts) + vim.api.nvim_buf_set_keymap(0, "t", "", [[h]], opts) + vim.api.nvim_buf_set_keymap(0, "t", "", [[j]], opts) + vim.api.nvim_buf_set_keymap(0, "t", "", [[k]], opts) + vim.api.nvim_buf_set_keymap(0, "t", "", [[l]], opts) + end + + vim.cmd "autocmd! TermOpen term://* lua set_terminal_keymaps()" + + local Terminal = require("toggleterm.terminal").Terminal + local lazygit = Terminal:new { cmd = "lazygit", hidden = true } + + function _LAZYGIT_TOGGLE() + lazygit:toggle() + end +end + +return M diff --git a/nvim/lua/user/treesitter.lua b/nvim/lua/user/treesitter.lua new file mode 100644 index 0000000..41c29b8 --- /dev/null +++ b/nvim/lua/user/treesitter.lua @@ -0,0 +1,44 @@ +local M = { + "nvim-treesitter/nvim-treesitter", + commit = "226c1475a46a2ef6d840af9caa0117a439465500", + event = "BufReadPost", + dependencies = { + { + "JoosepAlviste/nvim-ts-context-commentstring", + event = "VeryLazy", + commit = "729d83ecb990dc2b30272833c213cc6d49ed5214", + }, + { + "nvim-tree/nvim-web-devicons", + event = "VeryLazy", + commit = "0568104bf8d0c3ab16395433fcc5c1638efc25d4" + }, + }, +} +function M.config() + local treesitter = require "nvim-treesitter" + local configs = require "nvim-treesitter.configs" + + configs.setup { + ensure_installed = { "lua", "markdown", "markdown_inline", "bash", "python" }, -- put the language you want in this array + -- ensure_installed = "all", -- one of "all" or a list of languages + ignore_install = { "" }, -- List of parsers to ignore installing + sync_install = false, -- install languages synchronously (only applied to `ensure_installed`) + + highlight = { + enable = true, -- false will disable the whole extension + disable = { "css" }, -- list of language that will be disabled + }, + autopairs = { + enable = true, + }, + indent = { enable = true, disable = { "python", "css" } }, + + context_commentstring = { + enable = true, + enable_autocmd = false, + }, + } +end + +return M diff --git a/nvim/lua/user/which-key.lua b/nvim/lua/user/which-key.lua new file mode 100644 index 0000000..f7ae4bb --- /dev/null +++ b/nvim/lua/user/which-key.lua @@ -0,0 +1,11 @@ +local M = { + "folke/which-key.nvim", + commit = "5224c261825263f46f6771f1b644cae33cd06995", + event = "VeryLazy", +} + +function M.config() + require("which-key").setup {} +end + +return M diff --git a/nvim/lua/utils/init.lua b/nvim/lua/utils/init.lua new file mode 100644 index 0000000..a4cae7a --- /dev/null +++ b/nvim/lua/utils/init.lua @@ -0,0 +1,15 @@ +local M = {} + +M.servers = { + "lua_ls", + "cssls", + "html", + "tsserver", + "pyright", + "bashls", + "jsonls", + "yamlls", + "gopls", +} + +return M -- cgit v1.2.3