diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..2ad4d31 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,28 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + + + +## Describe the bug + + +## To Reproduce + +1. ... + +## Desktop + +- OS: +- Terminal: + +## Neovim Version + + +``` +``` diff --git a/.gitignore b/.gitignore index e033bc6..ea93eda 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ +tags +test.sh +.luarc.json +nvim lazy-lock.json diff --git a/.stylua.toml b/.stylua.toml new file mode 100644 index 0000000..5d12dbd --- /dev/null +++ b/.stylua.toml @@ -0,0 +1,6 @@ +column_width = 160 +line_endings = "Unix" +indent_type = "Spaces" +indent_width = 2 +quote_style = "AutoPreferSingle" +no_call_parentheses = true diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..9cf1062 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,19 @@ +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..64f386c --- /dev/null +++ b/README.md @@ -0,0 +1,147 @@ +# kickstart.nvim + +### Introduction + +A starting point for Neovim that is: + +* Small +* Single-file (with examples of moving to multi-file) +* Documented +* Modular + +This repo is meant to be used as by **YOU** to begin your Neovim journey; remove the things you don't use and add what you miss. + +Kickstart.nvim targets *only* the latest ['stable'](https://github.com/neovim/neovim/releases/tag/stable) and latest ['nightly'](https://github.com/neovim/neovim/releases/tag/nightly) of Neovim. If you are experiencing issues, please make sure you have the latest versions. + +Distribution Alternatives: +- [LazyVim](https://www.lazyvim.org/): A delightful distribution maintained by @folke (the author of lazy.nvim, the package manager used here) + +### Installation + +* Backup your previous configuration (if any exists) + +### Archive Installation +* On the home/landing page for the project find the blue "<> CODE" button click it and select Local > Download ZIP. +* Extract the archive to: + `~/.config/nvim` (Linux) + `~/.config/nvim` (MacOS) + `%userprofile%\AppData\Local\nvim\` (Windows) +* Ensure your extraction method did not extract with a parent folder. For example in ~/.config/nvim you should have init.lua not another folder called kickstart.nvim. + +### Git Clone Installation +* From a terminal cd/dir to: + `~/.config/nvim` (Linux) + `~/.config/nvim` (MacOS) + `%userprofile%\AppData\Local\nvim\` (Windows) + +* run: `git clone https://github.com/nvim-lua/kickstart.nvim.git ~/.config/nvim` OR: `gh repo clone nvim-lua/kickstart.nvim` +* Run Neovim (from terminal or shortcut) and allow lazy.nvim to download files and set up the basics. +* Once the setup is complete, restart Neovim. +* **You're ready to go!** + +* (Recommended/Optional) Fork this repo (so that you have your own copy that you can modify). +* Clone the kickstart repo into `$HOME/.config/nvim/` (Linux/Mac) or `%userprofile%\AppData\Local\nvim\` (Windows) + * If you don't want to include it as a git repo, you can just clone it and then move the files to this location + +Additional system requirements: +- Make sure to review the readmes of the plugins if you are experiencing errors. In particular: + - [ripgrep](https://github.com/BurntSushi/ripgrep#installation) is required for multiple [telescope](https://github.com/nvim-telescope/telescope.nvim#suggested-dependencies) pickers. +- See [Windows Installation](#Windows-Installation) if you have trouble with `telescope-fzf-native` + +### Configuration And Extension + +* Inside of your copy, feel free to modify any file you like! It's your copy! +* Feel free to change any of the default options in `init.lua` to better suit your needs. +* For adding plugins, there are 3 primary options: + * Add new configuration in `lua/custom/plugins/*` files, which will be auto sourced using `lazy.nvim` + * Modify `init.lua` with additional plugins. + * Include the `lua/kickstart/plugins/*` files in your configuration. + +You can also merge updates/changes from the repo back into your fork, to keep up-to-date with any changes for the default configuration. + +#### Example: Adding an autopairs plugin + +In the file: `lua/custom/plugins/autopairs.lua`, add: + +```lua +-- File: lua/custom/plugins/autopairs.lua + +return { + "windwp/nvim-autopairs", + -- Optional dependency + dependencies = { 'hrsh7th/nvim-cmp' }, + config = function() + require("nvim-autopairs").setup {} + -- If you want to automatically add `(` after selecting a function or method + local cmp_autopairs = require('nvim-autopairs.completion.cmp') + local cmp = require('cmp') + cmp.event:on( + 'confirm_done', + cmp_autopairs.on_confirm_done() + ) + end, +} +``` + + +This will automatically install [windwp/nvim-autopairs](https://github.com/windwp/nvim-autopairs) and enable it on startup. For more information, see documentation for [lazy.nvim](https://github.com/folke/lazy.nvim). + +#### Example: Adding a file tree plugin + +In the file: `lua/custom/plugins/filetree.lua`, add: + +```lua +-- Unless you are still migrating, remove the deprecated commands from v1.x +vim.cmd([[ let g:neo_tree_remove_legacy_commands = 1 ]]) + +return { + "nvim-neo-tree/neo-tree.nvim", + version = "*", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-tree/nvim-web-devicons", -- not strictly required, but recommended + "MunifTanjim/nui.nvim", + }, + config = function () + require('neo-tree').setup {} + end, +} +``` + +This will install the tree plugin and add the command `:Neotree` for you. You can explore the documentation at [neo-tree.nvim](https://github.com/nvim-neo-tree/neo-tree.nvim) for more information. + +### Contribution + +Pull-requests are welcome. The goal of this repo is not to create a Neovim configuration framework, but to offer a starting template that shows, by example, available features in Neovim. Some things that will not be included: + +* Custom language server configuration (null-ls templates) +* Theming beyond a default colorscheme necessary for LSP highlight groups + +Each PR, especially those which increase the line count, should have a description as to why the PR is necessary. + +### FAQ + +* What should I do if I already have a pre-existing neovim configuration? + * You should back it up, then delete all files associated with it. + * This includes your existing init.lua and the neovim files in `~/.local` which can be deleted with `rm -rf ~/.local/share/nvim/` + * You may also want to look at the [migration guide for lazy.nvim](https://github.com/folke/lazy.nvim#-migration-guide) +* What if I want to "uninstall" this configuration: + * See [lazy.nvim uninstall](https://github.com/folke/lazy.nvim#-uninstalling) information +* Are there any cool videos about this plugin? + * Current iteration of kickstart (coming soon) + * Here is one about the previous iteration of kickstart: [video introduction to Kickstart.nvim](https://youtu.be/stqUbv-5u2s). Note the install via init.lua no longer works as specified. Please follow the install instructions in this file instead as they're up to date. + +### Windows Installation + +Installation may require installing build tools, and updating the run command for `telescope-fzf-native` + +See `telescope-fzf-native` documentation for [more details](https://github.com/nvim-telescope/telescope-fzf-native.nvim#installation) + +This requires: + +- Install CMake, and the Microsoft C++ Build Tools on Windows + +```lua +{'nvim-telescope/telescope-fzf-native.nvim', build = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' } +``` + diff --git a/assets/markdown.css b/assets/markdown.css deleted file mode 100644 index 87d0225..0000000 --- a/assets/markdown.css +++ /dev/null @@ -1,319 +0,0 @@ -/* - * github like style - * https://github.com/iamcco/markdown.css/blob/master/dest/github/markdown.css - */ -:root { - --color-text-primary: #333; - --color-text-tertiary: #777; - --color-text-link: #4078c0; - --color-bg-primary: #fff; - --color-bg-secondary: #fafbfc; - --color-bg-tertiary: #f8f8f8; - --color-border-primary: #ddd; - --color-border-secondary: #eaecef; - --color-border-tertiary: #d1d5da; - --color-kbd-foreground: #444d56; - --color-markdown-blockquote-border: #dfe2e5; - --color-markdown-table-border: #dfe2e5; - --color-markdown-table-tr-border: #c6cbd1; - --color-markdown-code-bg: #1b1f230d; -} -[data-theme="dark"] { - --color-text-primary: #c9d1d9; - --color-text-tertiary: #8b949e; - --color-text-link: #58a6ff; - --color-bg-primary: #0d1117; - --color-bg-secondary: #0d1117; - --color-bg-tertiary: #161b22; - --color-border-primary: #30363d; - --color-border-secondary: #21262d; - --color-border-tertiary: #6e7681; - --color-kbd-foreground: #b1bac4; - --color-markdown-blockquote-border: #3b434b; - --color-markdown-table-border: #3b434b; - --color-markdown-table-tr-border: #272c32; - --color-markdown-code-bg: #f0f6fc26; -} -.markdown-body ol ol, -.markdown-body ul ol, -.markdown-body ol ul, -.markdown-body ul ul, -.markdown-body ol ul ol, -.markdown-body ul ul ol, -.markdown-body ol ul ul, -.markdown-body ul ul ul { - margin-top: 0; - margin-bottom: 0; -} -.markdown-body { - font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, - sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-size: 12px; - color: var(--color-text-primary); - line-height: 1.6; - word-wrap: break-word; - padding: 45px; - background: var(--color-bg-primary); -} -.markdown-body > *:first-child { - margin-top: 0 !important; -} -.markdown-body > *:last-child { - margin-bottom: 0 !important; -} -.markdown-body .table-of-contents ol { - list-style: none; -} -.markdown-body .table-of-contents > ol { - padding-left: 0; -} -.markdown-body * { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.markdown-body h1, -.markdown-body h2, -.markdown-body h3, -.markdown-body h4, -.markdown-body h5, -.markdown-body h6 { - margin-top: 1em; - margin-bottom: 16px; - font-weight: bold; - line-height: 1.4; -} -.markdown-body h1 .anchor, -.markdown-body h2 .anchor, -.markdown-body h3 .anchor, -.markdown-body h4 .anchor, -.markdown-body h5 .anchor, -.markdown-body h6 .anchor { - margin-left: -24px; - visibility: hidden; -} -.markdown-body h1:hover .anchor, -.markdown-body h2:hover .anchor, -.markdown-body h3:hover .anchor, -.markdown-body h4:hover .anchor, -.markdown-body h5:hover .anchor, -.markdown-body h6:hover .anchor { - visibility: visible; -} -.markdown-body p, -.markdown-body blockquote, -.markdown-body ul, -.markdown-body ol, -.markdown-body dl, -.markdown-body table, -.markdown-body pre { - margin-top: 0; - margin-bottom: 16px; -} -.markdown-body h1 { - margin: 0.67em 0; - padding-bottom: 0.3em; - font-size: 2.25em; - line-height: 1.2; - border-bottom: 1px solid var(--color-border-secondary); -} -.markdown-body h2 { - padding-bottom: 0.3em; - font-size: 1.75em; - line-height: 1.225; - border-bottom: 1px solid var(--color-border-secondary); -} -.markdown-body h3 { - font-size: 1.5em; - line-height: 1.43; -} -.markdown-body h4 { - font-size: 1.25em; -} -.markdown-body h5 { - font-size: 1em; -} -.markdown-body h6 { - font-size: 1em; - color: var(--color-text-tertiary); -} -.markdown-body hr { - margin-top: 20px; - margin-bottom: 20px; - height: 0; - border: 0; - border-top: 1px solid var(--color-border-primary); -} -.markdown-body ol, -.markdown-body ul { - padding-left: 2em; -} -.markdown-body ol ol, -.markdown-body ul ol { - list-style-type: lower-roman; -} -.markdown-body ol ul, -.markdown-body ul ul { - list-style-type: circle; -} -.markdown-body ol ul ul, -.markdown-body ul ul ul { - list-style-type: square; -} -.markdown-body ol { - list-style-type: decimal; -} -.markdown-body ul { - list-style-type: disc; -} -.markdown-body dl { - margin-bottom: 1.3em; -} -.markdown-body dl dt { - font-weight: 700; -} -.markdown-body dl dd { - margin-left: 0; -} -.markdown-body dl dd p { - margin-bottom: 0.8em; -} -.markdown-body blockquote { - margin-left: 0; - margin-right: 0; - padding: 0 15px; - color: var(--color-text-tertiary); - border-left: 4px solid var(--color-markdown-blockquote-border); -} -.markdown-body table { - display: block; - width: 100%; - overflow: auto; - word-break: normal; - word-break: keep-all; - border-collapse: collapse; - border-spacing: 0; -} -.markdown-body table tr { - background-color: var(--color-bg-primary); - border-top: 1px solid var(--color-markdown-table-tr-border); -} -.markdown-body table tr:nth-child(2n) { - background-color: var(--color-bg-tertiary); -} -.markdown-body table th, -.markdown-body table td { - padding: 6px 13px; - border: 1px solid var(--color-markdown-table-border); - vertical-align: top; -} -.markdown-body kbd { - display: inline-block; - padding: 5px 6px; - font: 14px SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace; - line-height: 10px; - color: var(--color-kbd-foreground); - vertical-align: middle; - background-color: var(--color-bg-secondary); - border: 1px solid var(--color-border-tertiary); - border-radius: 3px; - box-shadow: inset 0 -1px 0 var(--color-border-tertiary); -} -.markdown-body pre { - word-wrap: normal; - padding: 16px; - overflow: auto; - font-size: 85%; - line-height: 1.45; - background-color: var(--color-bg-tertiary); - -webkit-border-radius: 3px; - border-radius: 3px; -} -.markdown-body pre code { - display: inline; - max-width: initial; - padding: 0; - margin: 0; - overflow: initial; - font-size: 100%; - line-height: inherit; - word-wrap: normal; - white-space: pre; - border: 0; - -webkit-border-radius: 3px; - border-radius: 3px; - background-color: transparent; -} -.markdown-body pre code:before, -.markdown-body pre code:after { - content: normal; -} -.markdown-body code { - font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; - padding: 0; - padding-top: 0.2em; - padding-bottom: 0.2em; - margin: 0; - font-size: 85%; - background-color: var(--color-markdown-code-bg); - -webkit-border-radius: 3px; - border-radius: 3px; -} -.markdown-body code:before, -.markdown-body code:after { - letter-spacing: -0.2em; - content: "\00a0"; -} -.markdown-body a { - color: var(--color-text-link); - text-decoration: none; - background: transparent; -} -.markdown-body img { - max-width: 100%; - max-height: 100%; - padding: 1rem; -} -.markdown-body strong { - font-weight: bold; -} -.markdown-body em { - font-style: italic; -} -.markdown-body del { - text-decoration: line-through; -} -.task-list-item { - list-style-type: none; -} -.task-list-item input { - font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, - sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - margin: 0 0.35em 0.25em -1.6em; - vertical-align: middle; -} -.task-list-item input[disabled] { - cursor: default; -} -.task-list-item input[type="checkbox"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0; -} -.task-list-item input[type="radio"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0; -} -.markdown-body h1, -.markdown-body h2, -.markdown-body h3, -.markdown-body h4, -.markdown-body h4 { - clear: both; -} -#page-header { - display: none; -} diff --git a/doc/kickstart.txt b/doc/kickstart.txt new file mode 100644 index 0000000..cb87ac3 --- /dev/null +++ b/doc/kickstart.txt @@ -0,0 +1,24 @@ +================================================================================ +INTRODUCTION *kickstart.nvim* + +Kickstart.nvim is a project to help you get started on your neovim journey. + + *kickstart-is-not* +It is not: +- Complete framework for every plugin under the sun +- Place to add every plugin that could ever be useful + + *kickstart-is* +It is: +- Somewhere that has a good start for the most common "IDE" type features: + - autocompletion + - goto-definition + - find references + - fuzzy finding + - and hinting at what more can be done :) +- A place to _kickstart_ your journey. + - You should fork this project and use/modify it so that it matches your + style and preferences. If you don't want to do that, there are probably + other projects that would fit much better for you (and that's great!)! + + vim:tw=78:ts=8:ft=help:norl: diff --git a/init.lua b/init.lua index 8e88a02..6f808b3 100644 --- a/init.lua +++ b/init.lua @@ -1,28 +1,494 @@ --- [[ Basic Keymaps ]] --- Set as the leader key --- See `:help mapleader` --- NOTE: Must happen before plugins are required (otherwise wrong leader will be used) + vim.g.mapleader = ' ' vim.g.maplocalleader = ' ' +-- Install package manager +-- https://github.com/folke/lazy.nvim +-- `:help lazy.nvim.txt` for more info +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) + +-- NOTE: Here is where you install your plugins. +-- You can configure plugins using the `config` key. +-- +-- You can also configure plugins after the setup call, +-- as they will be available in your neovim runtime. +require('lazy').setup({ + -- NOTE: First, some plugins that don't require any configuration + + -- Git related plugins + 'tpope/vim-fugitive', + 'tpope/vim-rhubarb', + + -- Detect tabstop and shiftwidth automatically + 'tpope/vim-sleuth', + + -- NOTE: This is where your plugins related to LSP can be installed. + -- The configuration is done below. Search for lspconfig to find it below. + { + -- LSP Configuration & Plugins + 'neovim/nvim-lspconfig', + dependencies = { + -- Automatically install LSPs to stdpath for neovim + { 'williamboman/mason.nvim', config = true }, + 'williamboman/mason-lspconfig.nvim', + + -- Useful status updates for LSP + -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})` + { 'j-hui/fidget.nvim', opts = {} }, + + -- Additional lua configuration, makes nvim stuff amazing! + 'folke/neodev.nvim', + }, + }, + + { + -- Autocompletion + 'hrsh7th/nvim-cmp', + dependencies = { + -- Snippet Engine & its associated nvim-cmp source + 'L3MON4D3/LuaSnip', + 'saadparwaiz1/cmp_luasnip', + + -- Adds LSP completion capabilities + 'hrsh7th/cmp-nvim-lsp', + + -- Adds a number of user-friendly snippets + 'rafamadriz/friendly-snippets', + -- Icons + 'onsails/lspkind.nvim', + }, + }, + + -- Useful plugin to show you pending keybinds. + { 'folke/which-key.nvim', opts = {} }, + { + -- Adds git releated signs to the gutter, as well as utilities for managing changes + 'lewis6991/gitsigns.nvim', + opts = { + -- See `:help gitsigns.txt` + signs = { + add = { text = '+' }, + change = { text = '~' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + }, + on_attach = function(bufnr) + vim.keymap.set('n', 'gp', require('gitsigns').prev_hunk, { buffer = bufnr, desc = '[G]o to [P]revious Hunk' }) + vim.keymap.set('n', 'gn', require('gitsigns').next_hunk, { buffer = bufnr, desc = '[G]o to [N]ext Hunk' }) + vim.keymap.set('n', 'ph', require('gitsigns').preview_hunk, { buffer = bufnr, desc = '[P]review [H]unk' }) + end, + }, + }, + + { + "mcchrish/zenbones.nvim", + dependencies = "rktjmp/lush.nvim" + }, + + { + -- Set lualine as statusline + 'nvim-lualine/lualine.nvim', + -- See `:help lualine.txt` + opts = { + options = { + icons_enabled = false, + component_separators = '|', + section_separators = '', + }, + }, + }, + + { + -- Add indentation guides even on blank lines + 'lukas-reineke/indent-blankline.nvim', + -- Enable `lukas-reineke/indent-blankline.nvim` + -- See `:help indent_blankline.txt` + opts = { + char = '┊', + show_trailing_blankline_indent = false, + }, + }, + + -- "gc" to comment visual regions/lines + { 'numToStr/Comment.nvim', opts = {} }, + + -- Fuzzy Finder (files, lsp, etc) + { 'nvim-telescope/telescope.nvim', branch = '0.1.x', dependencies = { 'nvim-lua/plenary.nvim' } }, + + -- Fuzzy Finder Algorithm which requires local dependencies to be built. + -- Only load if `make` is available. Make sure you have the system + -- requirements installed. + { + 'nvim-telescope/telescope-fzf-native.nvim', + -- NOTE: If you are having trouble with this installation, + -- refer to the README for telescope-fzf-native for more instructions. + build = 'make', + cond = function() + return vim.fn.executable 'make' == 1 + end, + }, + + { + -- Highlight, edit, and navigate code + 'nvim-treesitter/nvim-treesitter', + dependencies = { + 'nvim-treesitter/nvim-treesitter-textobjects', + }, + build = ':TSUpdate', + }, + + -- NOTE: Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart + -- These are some example plugins that I've included in the kickstart repository. + -- Uncomment any of the lines below to enable them. + -- require 'kickstart.plugins.autoformat', + -- require 'kickstart.plugins.debug', + + -- NOTE: The import below automatically adds your own plugins, configuration, etc from `lua/custom/plugins/*.lua` + -- You can use this folder to prevent any conflicts with this init.lua if you're interested in keeping + -- up-to-date with whatever is in the kickstart repo. + -- + -- For additional information see: https://github.com/folke/lazy.nvim#-structuring-your-plugins + { import = 'custom.plugins' }, +}, {}) + +-- [[ Setting options ]] +-- See `:help vim.o` +-- NOTE: You can change these options as you wish! + +-- Set highlight on search +vim.o.hlsearch = false + +-- Make line numbers default +vim.wo.number = true + +-- Enable mouse mode +vim.o.mouse = 'a' + +-- Sync clipboard between OS and Neovim. +-- Remove this option if you want your OS clipboard to remain independent. +-- See `:help 'clipboard'` +vim.o.clipboard = 'unnamedplus' + +-- Enable break indent +vim.o.breakindent = true + +-- Save undo history +vim.o.undofile = true + +-- Case insensitive searching UNLESS /C or capital in search +vim.o.ignorecase = true +vim.o.smartcase = true + +-- Keep signcolumn on by default +vim.wo.signcolumn = 'yes' + +-- Decrease update time +vim.o.updatetime = 250 +vim.o.timeout = true +vim.o.timeoutlen = 300 + +-- Set completeopt to have a better completion experience +vim.o.completeopt = 'menuone,noselect' + +-- NOTE: You should make sure your terminal supports this +vim.o.termguicolors = true + +-- [[ Basic Keymaps ]] + -- Keymaps for better default experience -- See `:help vim.keymap.set()` vim.keymap.set({ 'n', 'v' }, '', '', { silent = true }) --- [[ Lazy bootstrap ]] -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) +-- Remap for dealing with word wrap +vim.keymap.set('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) +vim.keymap.set('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) -require("lazy").setup("plugins") +-- [[ Highlight on yank ]] +-- See `:help vim.highlight.on_yank()` +local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true }) +vim.api.nvim_create_autocmd('TextYankPost', { + callback = function() + vim.highlight.on_yank() + end, + group = highlight_group, + pattern = '*', +}) + +-- [[ Configure Telescope ]] +-- See `:help telescope` and `:help telescope.setup()` +require('telescope').setup { + defaults = { + mappings = { + i = { + [''] = false, + [''] = false, + }, + }, + }, +} + +-- Enable telescope fzf native, if installed +pcall(require('telescope').load_extension, 'fzf') + +-- See `:help telescope.builtin` +vim.keymap.set('n', '?', require('telescope.builtin').oldfiles, { desc = '[?] Find recently opened files' }) +vim.keymap.set('n', '', require('telescope.builtin').buffers, { desc = '[ ] Find existing buffers' }) +vim.keymap.set('n', '/', function() + -- You can pass additional configuration to telescope to change theme, layout, etc. + require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { + winblend = 10, + previewer = false, + }) +end, { desc = '[/] Fuzzily search in current buffer' }) + +vim.keymap.set('n', 'gf', require('telescope.builtin').git_files, { desc = 'Search [G]it [F]iles' }) +vim.keymap.set('n', 'sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' }) +vim.keymap.set('n', 'sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' }) +vim.keymap.set('n', 'sw', require('telescope.builtin').grep_string, { desc = '[S]earch current [W]ord' }) +vim.keymap.set('n', 'sg', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' }) +vim.keymap.set('n', 'sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' }) + +-- [[ Configure Treesitter ]] +-- See `:help nvim-treesitter` +require('nvim-treesitter.configs').setup { + -- Add languages to be installed here that you want installed for treesitter + ensure_installed = { 'c', 'cpp', 'go', 'lua', 'python', 'rust', 'tsx', 'typescript', 'vimdoc', 'vim' }, + + -- Autoinstall languages that are not installed. Defaults to false (but you can change for yourself!) + auto_install = false, + + highlight = { enable = true }, + indent = { enable = true }, + incremental_selection = { + enable = true, + keymaps = { + init_selection = '', + node_incremental = '', + scope_incremental = '', + node_decremental = '', + }, + }, + textobjects = { + select = { + enable = true, + lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim + keymaps = { + -- You can use the capture groups defined in textobjects.scm + ['aa'] = '@parameter.outer', + ['ia'] = '@parameter.inner', + ['af'] = '@function.outer', + ['if'] = '@function.inner', + ['ac'] = '@class.outer', + ['ic'] = '@class.inner', + }, + }, + move = { + enable = true, + set_jumps = true, -- whether to set jumps in the jumplist + goto_next_start = { + [']m'] = '@function.outer', + [']]'] = '@class.outer', + }, + goto_next_end = { + [']M'] = '@function.outer', + [']['] = '@class.outer', + }, + goto_previous_start = { + ['[m'] = '@function.outer', + ['[['] = '@class.outer', + }, + goto_previous_end = { + ['[M'] = '@function.outer', + ['[]'] = '@class.outer', + }, + }, + swap = { + enable = true, + swap_next = { + ['a'] = '@parameter.inner', + }, + swap_previous = { + ['A'] = '@parameter.inner', + }, + }, + }, +} + +-- Diagnostic keymaps +vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' }) +vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' }) +vim.keymap.set('n', 'e', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' }) +vim.keymap.set('n', 'q', vim.diagnostic.setloclist, { desc = 'Open diagnostics list' }) + +-- [[ Configure LSP ]] +-- This function gets run when an LSP connects to a particular buffer. +local on_attach = function(_, bufnr) + -- NOTE: Remember that lua is a real programming language, and as such it is possible + -- to define small helper and utility functions so you don't have to repeat yourself + -- many times. + -- + -- In this case, we create a function that lets us more easily define mappings specific + -- for LSP related items. It sets the mode, buffer and description for us each time. + local nmap = function(keys, func, desc) + if desc then + desc = 'LSP: ' .. desc + end + + vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) + end + + nmap('rn', vim.lsp.buf.rename, '[R]e[n]ame') + nmap('ca', vim.lsp.buf.code_action, '[C]ode [A]ction') + + nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') + nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') + nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation') + nmap('D', vim.lsp.buf.type_definition, 'Type [D]efinition') + nmap('ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') + nmap('ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') + + -- See `:help K` for why this keymap + nmap('K', vim.lsp.buf.hover, 'Hover Documentation') + nmap('', vim.lsp.buf.signature_help, 'Signature Documentation') + + -- Lesser used LSP functionality + nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') + nmap('wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') + nmap('wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') + nmap('wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, '[W]orkspace [L]ist Folders') + + -- Create a command `:Format` local to the LSP buffer + vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) + vim.lsp.buf.format() + end, { desc = 'Format current buffer with LSP' }) +end + +-- Enable the following language servers +-- Feel free to add/remove any LSPs that you want here. They will automatically be installed. +-- +-- Add any additional override configuration in the following tables. They will be passed to +-- the `settings` field of the server config. You must look up that documentation yourself. +local servers = { + -- clangd = {}, + -- gopls = {}, + pyright = {}, + rust_analyzer = {}, + -- tsserver = {}, + + lua_ls = { + Lua = { + workspace = { checkThirdParty = false }, + telemetry = { enable = false }, + }, + }, +} + +-- Setup neovim lua configuration +require('neodev').setup() + +-- nvim-cmp supports additional completion capabilities, so broadcast that to servers +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) + +-- Ensure the servers above are installed +local mason_lspconfig = require 'mason-lspconfig' + +mason_lspconfig.setup { + ensure_installed = vim.tbl_keys(servers), +} + +mason_lspconfig.setup_handlers { + function(server_name) + require('lspconfig')[server_name].setup { + capabilities = capabilities, + on_attach = on_attach, + settings = servers[server_name], + } + end, +} + +-- [[ Configure nvim-cmp ]] +-- See `:help cmp` +local cmp = require 'cmp' +local luasnip = require 'luasnip' +local lspkind = require('lspkind') +require('luasnip.loaders.from_vscode').lazy_load() +luasnip.config.setup {} + +cmp.setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert { + [''] = cmp.mapping.select_next_item(), + [''] = cmp.mapping.select_prev_item(), + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete {}, + [''] = cmp.mapping.confirm { + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }, + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_locally_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end, { 'i', 's' }), + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.locally_jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { 'i', 's' }), + }, + sources = { + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + { name = 'path'}, + }, + formatting = { + -- changing the order of fields so the icon is the first + fields = {"kind", 'abbr', "menu"}, + -- fields = {"abbr", "menu"}, + view = { + entries = "wildmenu" -- can be "custom", "wildmenu" or "native" + }, + + -- here is where the change happens + format = lspkind.cmp_format({ + mode = 'symbol', -- show only symbol annotations + menu = ({ + nvim_lsp = "[LSP]", + luasnip = "[LuaSnip]", + buffer = "[Buffer]",}), + peset = 'codicons', + }), + } +} + +-- The line beneath this is called `modeline`. See `:help modeline` +-- vim: ts=2 sts=2 sw=2 et require("settings") -require("lsp-extra") diff --git a/lua/.luarc.json b/lua/.luarc.json deleted file mode 100644 index 85cd921..0000000 --- a/lua/.luarc.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/sumneko/vscode-lua/master/setting/schema.json", - "Lua.diagnostics.globals": [ - "vim", - "require", - "local", - "style" - ] -} \ No newline at end of file diff --git a/lua/plugins/format.lua b/lua/custom/plugins/format.lua similarity index 100% rename from lua/plugins/format.lua rename to lua/custom/plugins/format.lua diff --git a/lua/plugins/markdown.lua b/lua/custom/plugins/markdown.lua similarity index 100% rename from lua/plugins/markdown.lua rename to lua/custom/plugins/markdown.lua diff --git a/lua/plugins/notes.lua b/lua/custom/plugins/notes.lua similarity index 100% rename from lua/plugins/notes.lua rename to lua/custom/plugins/notes.lua diff --git a/lua/plugins/zenmode.lua b/lua/custom/plugins/zenmode.lua similarity index 100% rename from lua/plugins/zenmode.lua rename to lua/custom/plugins/zenmode.lua diff --git a/lua/kickstart/plugins/autoformat.lua b/lua/kickstart/plugins/autoformat.lua new file mode 100644 index 0000000..bc56b15 --- /dev/null +++ b/lua/kickstart/plugins/autoformat.lua @@ -0,0 +1,74 @@ +-- autoformat.lua +-- +-- Use your language server to automatically format your code on save. +-- Adds additional commands as well to manage the behavior + +return { + 'neovim/nvim-lspconfig', + config = function() + -- Switch for controlling whether you want autoformatting. + -- Use :KickstartFormatToggle to toggle autoformatting on or off + local format_is_enabled = true + vim.api.nvim_create_user_command('KickstartFormatToggle', function() + format_is_enabled = not format_is_enabled + print('Setting autoformatting to: ' .. tostring(format_is_enabled)) + end, {}) + + -- Create an augroup that is used for managing our formatting autocmds. + -- We need one augroup per client to make sure that multiple clients + -- can attach to the same buffer without interfering with each other. + local _augroups = {} + local get_augroup = function(client) + if not _augroups[client.id] then + local group_name = 'kickstart-lsp-format-' .. client.name + local id = vim.api.nvim_create_augroup(group_name, { clear = true }) + _augroups[client.id] = id + end + + return _augroups[client.id] + end + + -- Whenever an LSP attaches to a buffer, we will run this function. + -- + -- See `:help LspAttach` for more information about this autocmd event. + vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('kickstart-lsp-attach-format', { clear = true }), + -- This is where we attach the autoformatting for reasonable clients + callback = function(args) + local client_id = args.data.client_id + local client = vim.lsp.get_client_by_id(client_id) + local bufnr = args.buf + + -- Only attach to clients that support document formatting + if not client.server_capabilities.documentFormattingProvider then + return + end + + -- Tsserver usually works poorly. Sorry you work with bad languages + -- You can remove this line if you know what you're doing :) + if client.name == 'tsserver' then + return + end + + -- Create an autocmd that will run *before* we save the buffer. + -- Run the formatting command for the LSP that has just attached. + vim.api.nvim_create_autocmd('BufWritePre', { + group = get_augroup(client), + buffer = bufnr, + callback = function() + if not format_is_enabled then + return + end + + vim.lsp.buf.format { + async = false, + filter = function(c) + return c.id == client.id + end, + } + end, + }) + end, + }) + end, +} diff --git a/lua/kickstart/plugins/debug.lua b/lua/kickstart/plugins/debug.lua new file mode 100644 index 0000000..deeda56 --- /dev/null +++ b/lua/kickstart/plugins/debug.lua @@ -0,0 +1,86 @@ +-- debug.lua +-- +-- Shows how to use the DAP plugin to debug your code. +-- +-- Primarily focused on configuring the debugger for Go, but can +-- be extended to other languages as well. That's why it's called +-- kickstart.nvim and not kitchen-sink.nvim ;) + +return { + -- NOTE: Yes, you can install new plugins here! + 'mfussenegger/nvim-dap', + -- NOTE: And you can specify dependencies as well + dependencies = { + -- Creates a beautiful debugger UI + 'rcarriga/nvim-dap-ui', + + -- Installs the debug adapters for you + 'williamboman/mason.nvim', + 'jay-babu/mason-nvim-dap.nvim', + + -- Add your own debuggers here + 'leoluz/nvim-dap-go', + }, + config = function() + local dap = require 'dap' + local dapui = require 'dapui' + + require('mason-nvim-dap').setup { + -- Makes a best effort to setup the various debuggers with + -- reasonable debug configurations + automatic_setup = true, + + -- You can provide additional configuration to the handlers, + -- see mason-nvim-dap README for more information + handlers = {}, + + -- You'll need to check that you have the required things installed + -- online, please don't ask me how to install them :) + ensure_installed = { + -- Update this to ensure that you have the debuggers for the langs you want + 'delve', + }, + } + + -- Basic debugging keymaps, feel free to change to your liking! + vim.keymap.set('n', '', dap.continue) + vim.keymap.set('n', '', dap.step_into) + vim.keymap.set('n', '', dap.step_over) + vim.keymap.set('n', '', dap.step_out) + vim.keymap.set('n', 'b', dap.toggle_breakpoint) + vim.keymap.set('n', 'B', function() + dap.set_breakpoint(vim.fn.input 'Breakpoint condition: ') + end) + + -- Dap UI setup + -- For more information, see |:help nvim-dap-ui| + dapui.setup { + -- Set icons to characters that are more likely to work in every terminal. + -- Feel free to remove or use ones that you like more! :) + -- Don't feel like these are good choices. + icons = { expanded = '▾', collapsed = '▸', current_frame = '*' }, + controls = { + icons = { + pause = '⏸', + play = '▶', + step_into = '⏎', + step_over = '⏭', + step_out = '⏮', + step_back = 'b', + run_last = '▶▶', + terminate = '⏹', + disconnect = "⏏", + }, + }, + } + -- toggle to see last session result. Without this ,you can't see session output in case of unhandled exception. + vim.keymap.set("n", "", dapui.toggle) + + dap.listeners.after.event_initialized['dapui_config'] = dapui.open + dap.listeners.before.event_terminated['dapui_config'] = dapui.close + dap.listeners.before.event_exited['dapui_config'] = dapui.close + + -- Install golang specific config + require('dap-go').setup() + end, +} diff --git a/lua/lsp-extra.lua b/lua/lsp-extra.lua deleted file mode 100644 index 8b576ca..0000000 --- a/lua/lsp-extra.lua +++ /dev/null @@ -1,112 +0,0 @@ -require('luasnip.loaders.from_vscode').lazy_load() - -local on_attach = function(_, bufnr) - -- NOTE: Remember that lua is a real programming language, and as such it is possible - -- to define small helper and utility functions so you don't have to repeat yourself - -- many times. -local sign = function(opts) -vim.fn.sign_define(opts.name, { - texthl = opts.name, - text = opts.text, - numhl = '' -}) -end - -sign({name = 'DiagnosticSignError', text = '✘'}) -sign({name = 'DiagnosticSignWarn', text = ''}) -sign({name = 'DiagnosticSignHint', text = '󱦲'}) -sign({name = 'DiagnosticSignInfo', text = '󰙎'}) - -vim.diagnostic.config({ - virtual_text = true, - severity_sort = true, - -- float = { - -- border = nil, - -- source = 'always', - -- header = '', - -- prefix = '', - -- }, -}) - - -- In this case, we create a function that lets us more easily define mappings specific - -- for LSP related items. It sets the mode, buffer and description for us each time. - local nmap = function(keys, func, desc) - if desc then - desc = 'LSP: ' .. desc - end - - vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) - end - - nmap('rn', vim.lsp.buf.rename, '[R]e[n]ame') - nmap('ca', vim.lsp.buf.code_action, '[C]ode [A]ction') - - nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') - nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') - nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation') - nmap('D', vim.lsp.buf.type_definition, 'Type [D]efinition') - nmap('ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') - nmap('ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') - - -- See `:help K` for why this keymap - nmap('K', vim.lsp.buf.hover, 'Hover Documentation') - nmap('', vim.lsp.buf.signature_help, 'Signature Documentation') - - -- Lesser used LSP functionality - nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') - nmap('wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') - nmap('wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') - nmap('wl', function() - print(vim.inspect(vim.lsp.buf.list_workspace_folders())) - end, '[W]orkspace [L]ist Folders') - - -- Create a command `:Format` local to the LSP buffer - vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) - if vim.lsp.buf.format then - vim.lsp.buf.format() - elseif vim.lsp.buf.formatting then - vim.lsp.buf.formatting() - end - end, { desc = 'Format current buffer with LSP' }) -end - -vim.api.nvim_create_autocmd('LspAttach', { - desc = 'LSP actions', - callback = function(event) - -- Create your keybindings here... - end -}) - -require('mason').setup() -require('mason-lspconfig').setup({ - ensure_installed = { - -- Replace these with whatever servers you want to install - 'rust_analyzer', - 'pyright', - } -}) - -local lspconfig = require('lspconfig') -local lsp_capabilities = require('cmp_nvim_lsp').default_capabilities() - -require('mason-lspconfig').setup_handlers({ - function(server_name) - lspconfig[server_name].setup({ - capabilities = lsp_capabilities, - }) - end, -}) - --- nvim-cmp supports additional completion capabilities -local capabilities = vim.lsp.protocol.make_client_capabilities() -capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) - -vim.lsp.handlers['textDocument/hover'] = vim.lsp.with( - vim.lsp.handlers.hover, - {border = nil} -) - -vim.lsp.handlers['textDocument/signatureHelp'] = vim.lsp.with( - vim.lsp.handlers.signature_help, - {border = nil} -) diff --git a/lua/plugins/colorscheme.lua b/lua/plugins/colorscheme.lua deleted file mode 100644 index 1546dd6..0000000 --- a/lua/plugins/colorscheme.lua +++ /dev/null @@ -1,11 +0,0 @@ -return { - -- [[ Colorscheme ]] - 'mcchrish/zenbones.nvim', - dependencies = "rktjmp/lush.nvim", - priority = 1000, - config = function() - vim.g.zenbones = { transparent_background = true } - vim.cmd.colorscheme 'gruvbones' - - end, -} diff --git a/lua/plugins/comment.lua b/lua/plugins/comment.lua deleted file mode 100644 index 0df03e4..0000000 --- a/lua/plugins/comment.lua +++ /dev/null @@ -1,6 +0,0 @@ -return { - 'numToStr/Comment.nvim', -- "gc" to comment visual regions/lines - config = function() - require('Comment').setup() - end, -} diff --git a/lua/plugins/git.lua b/lua/plugins/git.lua deleted file mode 100644 index 6c8d04c..0000000 --- a/lua/plugins/git.lua +++ /dev/null @@ -1,24 +0,0 @@ -return { - -- Git related plugins - 'tpope/vim-fugitive', - 'tpope/vim-rhubarb', - { - -- Adds git releated signs to the gutter, as well as utilities for managing changes - 'lewis6991/gitsigns.nvim', - opts = { - -- See `:help gitsigns.txt` - signs = { - add = { text = '+' }, - change = { text = '~' }, - delete = { text = '_' }, - topdelete = { text = '‾' }, - changedelete = { text = '~' }, - }, - on_attach = function(bufnr) - vim.keymap.set('n', 'gp', require('gitsigns').prev_hunk, { buffer = bufnr, desc = '[G]o to [P]revious Hunk' }) - vim.keymap.set('n', 'gn', require('gitsigns').next_hunk, { buffer = bufnr, desc = '[G]o to [N]ext Hunk' }) - vim.keymap.set('n', 'ph', require('gitsigns').preview_hunk, { buffer = bufnr, desc = '[P]review [H]unk' }) - end, - }, - }, -} diff --git a/lua/plugins/indentblankline.lua b/lua/plugins/indentblankline.lua deleted file mode 100644 index e761b0f..0000000 --- a/lua/plugins/indentblankline.lua +++ /dev/null @@ -1,9 +0,0 @@ -return { - 'lukas-reineke/indent-blankline.nvim', -- Add indentation guides even on blank lines - config = function() - require('indent_blankline').setup { - char = '┊', - show_trailing_blankline_indent = false, - } - end, -} diff --git a/lua/plugins/lsp-zero.lua b/lua/plugins/lsp-zero.lua deleted file mode 100644 index 5cf2f5a..0000000 --- a/lua/plugins/lsp-zero.lua +++ /dev/null @@ -1,125 +0,0 @@ --- Boilerplate for LSP and completion --- https://github.com/VonHeikemen/lsp-zero.nvim --- ---Default keybindings --- K: Displays hover information about the symbol under the cursor in a floating window. See :help vim.lsp.buf.hover(). --- gd: Jumps to the definition of the symbol under the cursor. See :help vim.lsp.buf.definition(). --- gD: Jumps to the declaration of the symbol under the cursor. Some servers don't implement this feature. See :help vim.lsp.buf.declaration(). --- gi: Lists all the implementations for the symbol under the cursor in the quickfix window. See :help vim.lsp.buf.implementation(). --- go: Jumps to the definition of the type of the symbol under the cursor. See :help vim.lsp.buf.type_definition(). --- gr: Lists all the references to the symbol under the cursor in the quickfix window. See :help vim.lsp.buf.references(). --- : Displays signature information about the symbol under the cursor in a floating window. See :help vim.lsp.buf.signature_help(). If a mapping already exists for this key this function is not bound. --- : Renames all references to the symbol under the cursor. See :help vim.lsp.buf.rename(). --- ga: Selects a code action available at the current cursor position. See :help vim.lsp.buf.code_action(). --- gl: Show diagnostics in a floating window. See :help vim.diagnostic.open_float(). --- [d: Move to the previous diagnostic in the current buffer. See :help vim.diagnostic.goto_prev(). --- ]d: Move to the next diagnostic. See :help vim.diagnostic.goto_next(). -return { - "VonHeikemen/lsp-zero.nvim", - dependencies = { - -- LSP Support - { "neovim/nvim-lspconfig" }, -- Required - { "williamboman/mason.nvim" }, -- Optional - { "williamboman/mason-lspconfig.nvim" }, -- Optional - - -- Autocompletion - { "hrsh7th/nvim-cmp" }, -- Required - { "hrsh7th/cmp-nvim-lsp" }, -- Required - { "hrsh7th/cmp-buffer" }, -- Optional - { "hrsh7th/cmp-path" }, -- Optional - { "saadparwaiz1/cmp_luasnip" }, -- Optional - { "hrsh7th/cmp-nvim-lua" }, -- Optional - - -- Snippets - { "L3MON4D3/LuaSnip" }, -- Required - { "rafamadriz/friendly-snippets" }, -- Optional - {'onsails/lspkind.nvim'}, -- Icons - - -- Useful status updates for LSP - { "j-hui/fidget.nvim", config = true }, - }, - config = function() - local lsp = require("lsp-zero").preset({ - name = "minimal", - set_lsp_keymaps = true, - manage_nvim_cmp = true, - suggest_lsp_servers = true, - }) - - -- custom: mappings - -- https://github.com/VonHeikemen/lsp-zero.nvim/blob/v1.x/doc/md/autocomplete.md#override-keybindings - local cmp = require("cmp") - local lspkind = require('lspkind') - local luasnip = require 'luasnip' - luasnip.config.setup {} - local function confirm_first(fallback) - if cmp.visible() then - cmp.confirm({ select = true }) - else - fallback() - end - end - lsp.setup_nvim_cmp({ - mapping = cmp.mapping.preset.insert({ - [''] = cmp.mapping.confirm({ select = true }), - [""] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_next_item() - elseif luasnip.expand_or_jumpable() then - luasnip.expand_or_jump() - -- elseif has_words_before() then - -- cmp.complete() - else - fallback() - end - end, {"i", "s"}), - }), - sources = { - { name = 'nvim_lsp' }, - { name = 'luasnip' }, - { name = 'path'}, - }, - formatting = { - -- changing the order of fields so the icon is the first - fields = {"kind", 'abbr', "menu"}, - -- fields = {"abbr", "menu"}, - view = { - entries = "wildmenu" -- can be "custom", "wildmenu" or "native" - }, - - -- here is where the change happens - format = lspkind.cmp_format({ - mode = 'symbol', -- show only symbol annotations - menu = ({ - nvim_lsp = "[LSP]", - luasnip = "[LuaSnip]", - buffer = "[Buffer]",}), - maxwidth = 30, -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters) - ellipsis_char = '...', -- when popup menu exceed maxwidth, the truncated part would show ellipsis_char instead (must define maxwidth first) - preset = 'codicons', - }), - }, - documentation = { - max_height = 15, - max_width = 60, - border = 'single', - col_offset = -3, - side_padding = 1, - winhighlight = 'Normal:Todo,FloatBorder:None,CursorLine:Visual,Search:None', - zindex = 1001 - }, - - }) - - -- (Optional) Configure lua language server for neovim - lsp.nvim_workspace() - - lsp.setup() - - -- cmp.setup(cmp_config) - - -- keymaps - vim.keymap.set("n", "ga", vim.lsp.buf.code_action) - end, - -} diff --git a/lua/plugins/lualine.lua b/lua/plugins/lualine.lua deleted file mode 100644 index e420662..0000000 --- a/lua/plugins/lualine.lua +++ /dev/null @@ -1,13 +0,0 @@ -return{ - "nvim-lualine/lualine.nvim", - config = function () - require('lualine').setup { - options = { - icons_enabled = true, - -- theme = 'gruvbones', - component_separators = '|', - section_separators = '', - }, - } - end -} diff --git a/lua/plugins/telescope.lua b/lua/plugins/telescope.lua deleted file mode 100644 index 8d57295..0000000 --- a/lua/plugins/telescope.lua +++ /dev/null @@ -1,29 +0,0 @@ -return { - - {'nvim-telescope/telescope-media-files.nvim', - config = function() - require('telescope').load_extension('media_files') - require'telescope'.setup({ - extensions = { - media_files = { - -- filetypes whitelist - -- defaults to {"png", "jpg", "mp4", "webm", "pdf"} - filetypes = {"png", "webp", "jpg", "jpeg", "pdf"}, - find_cmd = "rg" -- find command (defaults to `fd`) - } - }, - }) - end - }, - - -- Fuzzy Finder (files, lsp, etc) - { 'nvim-telescope/telescope.nvim', - branch = '0.1.x', - dependencies = { 'nvim-lua/plenary.nvim' } - }, - - -- Fuzzy Finder Algorithm which requires local dependencies to be built. Only load if `make` is available - { 'nvim-telescope/telescope-fzf-native.nvim', - run = 'make', - cond = vim.fn.executable 'make' == 1 }, -} diff --git a/lua/plugins/treesitter.lua b/lua/plugins/treesitter.lua deleted file mode 100644 index 9f57a5d..0000000 --- a/lua/plugins/treesitter.lua +++ /dev/null @@ -1,10 +0,0 @@ -return { - { - -- Highlight, edit, and navigate code - 'nvim-treesitter/nvim-treesitter', - dependencies = { - 'nvim-treesitter/nvim-treesitter-textobjects', - }, - build = ':TSUpdate', - }, -} diff --git a/lua/plugins/wkeys.lua b/lua/plugins/wkeys.lua deleted file mode 100644 index 967731b..0000000 --- a/lua/plugins/wkeys.lua +++ /dev/null @@ -1,8 +0,0 @@ -return { - ({'folke/which-key.nvim', - config = function() - local wk = require("which-key") - wk.register(mappings, opts) - end - }), - } diff --git a/lua/settings.lua b/lua/settings.lua index dabd64e..0c7b655 100644 --- a/lua/settings.lua +++ b/lua/settings.lua @@ -31,7 +31,7 @@ vim.opt.showmode = false -- Set colorscheme vim.o.termguicolors = true --- vim.cmd [[colorscheme zenbones]] +vim.cmd [[colorscheme gruvbones]] local map = vim.api.nvim_set_keymap local opts = { noremap = true, silent = true }