diff options
author | Matthew Lemon <y@yulqen.org> | 2023-05-14 09:10:26 +0100 |
---|---|---|
committer | Matthew Lemon <y@yulqen.org> | 2023-05-14 09:10:26 +0100 |
commit | 0721b537a8aa3be8b70c183b25951494df9dcd0e (patch) | |
tree | eff07bbc31aeefbb9d2e441bb5ca8b5a5a527ffb /nvim | |
parent | 10a89dfbc6bc57ce12c8cf90f1b38a34b728b369 (diff) |
Installs nvim config base-idea
Diffstat (limited to 'nvim')
57 files changed, 1694 insertions, 755 deletions
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", "<C-J>", 'copilot#Accept("<CR>")', { 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', '<F5>', function() require('dap').continue() end) -vim.keymap.set('n', '<F10>', function() require('dap').step_over() end) -vim.keymap.set('n', '<F11>', function() require('dap').step_into() end) -vim.keymap.set('n', '<F12>', function() require('dap').step_out() end) -vim.keymap.set('n', '<F9>', function() require('dap').toggle_breakpoint() end) -vim.keymap.set('n', '<Leader>B', function() require('dap').set_breakpoint() end) -vim.keymap.set('n', '<Leader>lp', function() require('dap').set_breakpoint(nil, nil, vim.fn.input('Log point message: ')) end) -vim.keymap.set('n', '<Leader>dr', function() require('dap').repl.open() end) -vim.keymap.set('n', '<Leader>dl', function() require('dap').run_last() end) -vim.keymap.set({'n', 'v'}, '<Leader>dh', function() - require('dap.ui.widgets').hover() -end) -vim.keymap.set({'n', 'v'}, '<Leader>dp', function() - require('dap.ui.widgets').preview() -end) -vim.keymap.set('n', '<Leader>df', function() - local widgets = require('dap.ui.widgets') - widgets.centered_float(widgets.frames) -end) -vim.keymap.set('n', '<Leader>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", "<leader>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", "<leader>a", mark.add_file) -vim.keymap.set("n", "<leader>bh", ui.toggle_quick_menu) - -vim.keymap.set("n", "<C-h>", function() ui.nav_file(1) end) -vim.keymap.set("n", "<C-t>", function() ui.nav_file(2) end) -vim.keymap.set("n", "<C-n>", function() ui.nav_file(3) end) -vim.keymap.set("n", "<C-s>", 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 <leader>- -vim.keymap.set("n", "<leader>-", "<cmd>call ledger#transaction_state_set(line('.'), '*')<CR>") - -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({ --- ['<C-p>'] = cmp.mapping.select_prev_item(cmp_select), --- ['<C-n>'] = cmp.mapping.select_next_item(cmp_select), --- ['<C-y>'] = cmp.mapping.confirm({ select = true }), --- ["<C-Space>"] = cmp.mapping.complete(), --- }) - --- cmp_mappings['<Tab>'] = nil --- cmp_mappings['<S-Tab>'] = 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", "<leader>vws", function() vim.lsp.buf.workspace_symbol() end, opts) - vim.keymap.set("n", "<leader>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", "<leader>vca", function() vim.lsp.buf.code_action() end, opts) - vim.keymap.set("n", "<leader>vrr", function() vim.lsp.buf.references() end, opts) - vim.keymap.set("n", "<leader>vrn", function() vim.lsp.buf.rename() end, opts) - vim.keymap.set("i", "<C-h>", 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 ... - - ["<Tab>"] = 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" }), - - ["<S-Tab>"] = 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', '<leader>ff', builtin.find_files, {}) -vim.keymap.set('n', '<leader>fg', builtin.live_grep, {}) -vim.keymap.set('n', '<leader>fb', builtin.buffers, {}) -vim.keymap.set('n', '<leader>fh', builtin.help_tags, {}) -vim.keymap.set('n', '<leader>fs', builtin.grep_string, {}) -vim.keymap.set('n', '<leader>fc', builtin.command_history, {}) -vim.keymap.set('n', '<leader>fk', builtin.keymaps, {}) -vim.keymap.set('n', '<leader>fl', builtin.diagnostics, {}) -vim.keymap.set('n', '<leader>fo', builtin.builtin, {}) - -vim.keymap.set('n', '<leader>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", "<localleader>tp", "<cmd>ToDoTxtTasksToggle<CR>") -vim.keymap.set("n", "<localleader>ta", "<cmd>ToDoTxtCapture<CR>") 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", "<leader>xq", "<cmd>TroubleToggle quickfix<cr>", - {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", "<leader>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", "<leader>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", "<leader>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 <silent> <buffer> q :close<CR> + 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("", "<Space>", "<Nop>", 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", "<C-h>", "<C-w>h", opts) +keymap("n", "<C-j>", "<C-w>j", opts) +keymap("n", "<C-k>", "<C-w>k", opts) +keymap("n", "<C-l>", "<C-w>l", opts) + +-- Resize with arrows +keymap("n", "<C-Up>", ":resize -2<CR>", opts) +keymap("n", "<C-Down>", ":resize +2<CR>", opts) +keymap("n", "<C-Left>", ":vertical resize -2<CR>", opts) +keymap("n", "<C-Right>", ":vertical resize +2<CR>", opts) + +-- Navigate buffers +keymap("n", "<S-l>", ":bnext<CR>", opts) +keymap("n", "<S-h>", ":bprevious<CR>", opts) + +-- Clear highlights +keymap("n", "<leader>h", "<cmd>nohlsearch<CR>", opts) + +-- Close buffers +keymap("n", "<S-q>", "<cmd>Bdelete!<CR>", opts) + +-- Better paste +keymap("v", "p", '"_dP', opts) + +-- Insert -- +-- Press jk fast to enter +keymap("i", "jk", "<ESC>", opts) + +-- Visual -- +-- Stay in indent mode +keymap("v", "<", "<gv", opts) +keymap("v", ">", ">gv", opts) + +-- Plugins -- + +-- NvimTree +keymap("n", "<leader>e", ":NvimTreeToggle<CR>", opts) + +-- Telescope +keymap("n", "<leader>ff", ":Telescope find_files<CR>", opts) +keymap("n", "<leader>ft", ":Telescope live_grep<CR>", opts) +keymap("n", "<leader>fp", ":Telescope projects<CR>", opts) +keymap("n", "<leader>fb", ":Telescope buffers<CR>", opts) + +-- Git +keymap("n", "<leader>gg", "<cmd>lua _LAZYGIT_TOGGLE()<CR>", opts) + +-- Comment +keymap("n", "<leader>/", "<cmd>lua require('Comment.api').toggle.linewise.current()<CR>", opts) +keymap("x", "<leader>/", "<esc><cmd>lua require('Comment.api').toggle.linewise(vim.fn.visualmode())<CR>", opts) + +-- DAP +keymap("n", "<leader>db", "<cmd>lua require'dap'.toggle_breakpoint()<cr>", opts) +keymap("n", "<leader>dc", "<cmd>lua require'dap'.continue()<cr>", opts) +keymap("n", "<leader>di", "<cmd>lua require'dap'.step_into()<cr>", opts) +keymap("n", "<leader>do", "<cmd>lua require'dap'.step_over()<cr>", opts) +keymap("n", "<leader>dO", "<cmd>lua require'dap'.step_out()<cr>", opts) +keymap("n", "<leader>dr", "<cmd>lua require'dap'.repl.toggle()<cr>", opts) +keymap("n", "<leader>dl", "<cmd>lua require'dap'.run_last()<cr>", opts) +keymap("n", "<leader>du", "<cmd>lua require'dapui'.toggle()<cr>", opts) +keymap("n", "<leader>dt", "<cmd>lua require'dap'.terminate()<cr>", opts) + +-- Lsp +keymap("n", "<leader>lf", "<cmd>lua vim.lsp.buf.format{ async = true }<cr>", 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", "<leader>pv", vim.cmd.Ex) - -vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv") -vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv") - -vim.keymap.set("n", "J", "mzJ`z") -vim.keymap.set("n", "<C-d>", "<C-d>zz") -vim.keymap.set("n", "<C-u>", "<C-u>zz") -vim.keymap.set("n", "n", "nzzzv") -vim.keymap.set("n", "N", "Nzzzv") - --- greatest remap ever -vim.keymap.set("x", "<leader>p", [["_dP]]) - --- next greatest remap ever : asbjornHaland -vim.keymap.set({"n", "v"}, "<leader>y", [["+y]]) -vim.keymap.set("n", "<leader>Y", [["+Y]]) - -vim.keymap.set({"n", "v"}, "<leader>d", [["_d]]) - --- This is going to get me cancelled -vim.keymap.set("i", "<C-c>", "<Esc>") - -vim.keymap.set("n", "Q", "<nop>") ---vim.keymap.set("n", "<C-f>", "<cmd>silent !tmux neww tmux-sessionizer<CR>") --- vim.keymap.set("n", "<leader>f", vim.lsp.buf.format) - -vim.keymap.set("n", "<C-k>", "<cmd>cnext<CR>zz") -vim.keymap.set("n", "<C-j>", "<cmd>cprev<CR>zz") -vim.keymap.set("n", "<leader>k", "<cmd>lnext<CR>zz") -vim.keymap.set("n", "<leader>j", "<cmd>lprev<CR>zz") - -vim.keymap.set("n", "<leader>s", [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]]) -vim.keymap.set("n", "<leader>x", "<cmd>!chmod +x %<CR>", { silent = true }) - -vim.keymap.set("n", "<leader>ev", "<cmd>e ~/dotfiles/nvim/lua/lemon/packer.lua<CR>"); -vim.keymap.set("n", "<leader>mr", "<cmd>CellularAutomaton make_it_rain<CR>"); - -vim.keymap.set("n", "<leader><leader>", 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 <CR>"), + dashboard.button("e", " " .. " New file", ":ene <BAR> startinsert <CR>"), + dashboard.button("p", " " .. " Find project", ":lua require('telescope').extensions.projects.projects()<CR>"), + dashboard.button("r", " " .. " Recent files", ":Telescope oldfiles <CR>"), + dashboard.button("t", " " .. " Find text", ":Telescope live_grep <CR>"), + dashboard.button("c", " " .. " Config", ":e $MYVIMRC <CR>"), + dashboard.button("q", " " .. " Quit", ":qa<CR>"), + } + 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 = "<M-e>", + 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 { + ["<C-k>"] = cmp.mapping.select_prev_item(), + ["<C-j>"] = cmp.mapping.select_next_item(), + ["<C-b>"] = cmp.mapping(cmp.mapping.scroll_docs(-1), { "i", "c" }), + ["<C-f>"] = cmp.mapping(cmp.mapping.scroll_docs(1), { "i", "c" }), + ["<C-Space>"] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }), + ["<C-e>"] = 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. + ["<CR>"] = cmp.mapping.confirm { select = true }, + ["<Tab>"] = 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", + }), + ["<S-Tab>"] = 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 = { "<CR>", "<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", "<Esc>" }, + }, + }, + } + + 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", + "<a-n>", + '<cmd>lua require"illuminate".next_reference{wrap=true}<cr>', + { noremap = true } + ) + vim.api.nvim_set_keymap( + "n", + "<a-p>", + '<cmd>lua require"illuminate".next_reference{reverse=true,wrap=true}<cr>', + { 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", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts) + keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts) + keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts) + keymap(bufnr, "n", "gI", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts) + keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts) + keymap(bufnr, "n", "gl", "<cmd>lua vim.diagnostic.open_float()<CR>", opts) + keymap(bufnr, "n", "<leader>li", "<cmd>LspInfo<cr>", opts) + keymap(bufnr, "n", "<leader>lI", "<cmd>Mason<cr>", opts) + keymap(bufnr, "n", "<leader>la", "<cmd>lua vim.lsp.buf.code_action()<cr>", opts) + keymap(bufnr, "n", "<leader>lj", "<cmd>lua vim.diagnostic.goto_next({buffer=0})<cr>", opts) + keymap(bufnr, "n", "<leader>lk", "<cmd>lua vim.diagnostic.goto_prev({buffer=0})<cr>", opts) + keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts) + keymap(bufnr, "n", "<leader>ls", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts) + keymap(bufnr, "n", "<leader>lq", "<cmd>lua vim.diagnostic.setloclist()<CR>", 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", "<CR>", "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 = { + ["<Down>"] = actions.move_selection_next, + ["<Up>"] = actions.move_selection_previous, + ["<C-j>"] = actions.move_selection_next, + ["<C-k>"] = 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 = [[<c-\>]], + 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', '<esc>', [[<C-\><C-n>]], opts) + vim.api.nvim_buf_set_keymap(0, "t", "<C-h>", [[<C-\><C-n><C-W>h]], opts) + vim.api.nvim_buf_set_keymap(0, "t", "<C-j>", [[<C-\><C-n><C-W>j]], opts) + vim.api.nvim_buf_set_keymap(0, "t", "<C-k>", [[<C-\><C-n><C-W>k]], opts) + vim.api.nvim_buf_set_keymap(0, "t", "<C-l>", [[<C-\><C-n><C-W>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 |