new-main #1
			
				
			
		
		
		
	|  | @ -9,6 +9,13 @@ assignees: '' | |||
| 
 | ||||
| <!-- Any bug report not following this template will be immediately closed. Thanks --> | ||||
| 
 | ||||
| ## Before Reporting an Issue | ||||
| - I have read the kickstart.nvim README.md. | ||||
| - I have read the appropriate plugin's documentation. | ||||
| - I have searched that this issue has not been reported before. | ||||
| 
 | ||||
| - [ ] **By checking this, I confirm that the above steps are completed. I understand leaving this unchecked will result in this report being closed immediately.** | ||||
| 
 | ||||
| ## Describe the bug | ||||
| <!-- A clear and concise description of what the bug is. --> | ||||
| 
 | ||||
|  | @ -18,8 +25,8 @@ assignees: '' | |||
| 
 | ||||
| ## Desktop | ||||
| <!-- please complete the following information. --> | ||||
| - OS:  | ||||
| - Terminal:  | ||||
| - OS: | ||||
| - Terminal: | ||||
| 
 | ||||
| ## Neovim Version | ||||
| <!-- Output of running `:version` from inside of neovim. --> | ||||
|  |  | |||
|  | @ -0,0 +1,8 @@ | |||
| *************************************************************************** | ||||
| **NOTE** | ||||
| Please verify that the `base repository` above has the intended destination! | ||||
| Github by default opens Pull Requests against the parent of a forked repository. | ||||
| If this is your personal fork and you didn't intend to open a PR for contribution | ||||
| to the original project then adjust the `base repository` accordingly. | ||||
| ************************************************************************** | ||||
| 
 | ||||
|  | @ -2,3 +2,6 @@ tags | |||
| test.sh | ||||
| .luarc.json | ||||
| nvim | ||||
| 
 | ||||
| spell/ | ||||
| lazy-lock.json | ||||
|  |  | |||
							
								
								
									
										292
									
								
								README.md
								
								
								
								
							
							
						
						
									
										292
									
								
								README.md
								
								
								
								
							|  | @ -1,59 +1,98 @@ | |||
| # kickstart.nvim | ||||
| 
 | ||||
| https://github.com/kdheepak/kickstart.nvim/assets/1813121/f3ff9a2b-c31f-44df-a4fa-8a0d7b17cf7b | ||||
| 
 | ||||
| ### Introduction | ||||
| ## Introduction | ||||
| 
 | ||||
| A starting point for Neovim that is: | ||||
| 
 | ||||
| * Small | ||||
| * Single-file (with examples of moving to multi-file) | ||||
| * Documented | ||||
| * Modular | ||||
| * Single-file | ||||
| * Completely Documented | ||||
| 
 | ||||
| This repo is meant to be used by **YOU** to begin your Neovim journey; remove the things you don't use and add what you miss. | ||||
| **NOT** a Neovim distribution, but instead a starting point for your configuration. | ||||
| 
 | ||||
| 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. | ||||
| ## Installation | ||||
| 
 | ||||
| Distribution Alternatives: | ||||
| - [LazyVim](https://www.lazyvim.org/): A delightful distribution maintained by @folke (the author of lazy.nvim, the package manager used here) | ||||
| ### Install Neovim | ||||
| 
 | ||||
| ### Installation | ||||
| 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. | ||||
| 
 | ||||
| > **NOTE**  | ||||
| ### Install External Dependencies | ||||
| 
 | ||||
| External Requirements: | ||||
| - Basic utils: `git`, `make`, `unzip`, C Compiler (`gcc`) | ||||
| - [ripgrep](https://github.com/BurntSushi/ripgrep#installation) | ||||
| - Clipboard tool (xclip/xsel/win32yank or other depending on the platform) | ||||
| - A [Nerd Font](https://www.nerdfonts.com/): optional, provides various icons | ||||
|   - if you have it set `vim.g.have_nerd_font` in `init.lua` to true | ||||
| - Emoji fonts (Ubuntu only, and only if you want emoji!) `sudo apt install fonts-noto-color-emoji` | ||||
| - Language Setup: | ||||
|   - If you want to write Typescript, you need `npm` | ||||
|   - If you want to write Golang, you will need `go` | ||||
|   - etc. | ||||
| 
 | ||||
| > [!NOTE] | ||||
| > See [Install Recipes](#Install-Recipes) for additional Windows and Linux specific notes | ||||
| > and quick install snippets | ||||
| 
 | ||||
| ### Install Kickstart | ||||
| 
 | ||||
| > [!NOTE] | ||||
| > [Backup](#FAQ) your previous configuration (if any exists) | ||||
| 
 | ||||
| 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` | ||||
| 
 | ||||
| Neovim's configurations are located under the following paths, depending on your OS: | ||||
| 
 | ||||
| | OS | PATH | | ||||
| | :- | :--- | | ||||
| | Linux | `$XDG_CONFIG_HOME/nvim`, `~/.config/nvim` | | ||||
| | MacOS | `$XDG_CONFIG_HOME/nvim`, `~/.config/nvim` | | ||||
| | Windows (cmd)| `%userprofile%\AppData\Local\nvim\` | | ||||
| | Windows (powershell)| `$env:USERPROFILE\AppData\Local\nvim\` | | ||||
| | Linux, MacOS | `$XDG_CONFIG_HOME/nvim`, `~/.config/nvim` | | ||||
| | Windows (cmd)| `%localappdata%\nvim\` | | ||||
| | Windows (powershell)| `$env:LOCALAPPDATA\nvim\` | | ||||
| 
 | ||||
| Clone kickstart.nvim: | ||||
| #### Recommended Step | ||||
| 
 | ||||
| [Fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo) this repo | ||||
| so that you have your own copy that you can modify, then install by cloning the | ||||
| fork to your machine using one of the commands below, depending on your OS. | ||||
| 
 | ||||
| > [!NOTE] | ||||
| > Your fork's URL will be something like this: | ||||
| > `https://github.com/<your_github_username>/kickstart.nvim.git` | ||||
| 
 | ||||
| You likely want to remove `lazy-lock.json` from your fork's `.gitignore` file | ||||
| too - it's ignored in the kickstart repo to make maintenance easier, but it's | ||||
| [recommended to track it in version control](https://lazy.folke.io/usage/lockfile). | ||||
| 
 | ||||
| #### Clone kickstart.nvim | ||||
| 
 | ||||
| > [!NOTE] | ||||
| > If following the recommended step above (i.e., forking the repo), replace | ||||
| > `nvim-lua` with `<your_github_username>` in the commands below | ||||
| 
 | ||||
| <details><summary> Linux and Mac </summary> | ||||
| 
 | ||||
| - on Linux and Mac | ||||
| ```sh | ||||
| git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim | ||||
| ``` | ||||
| 
 | ||||
| - on Windows (cmd) | ||||
| </details> | ||||
| 
 | ||||
| <details><summary> Windows </summary> | ||||
| 
 | ||||
| If you're using `cmd.exe`: | ||||
| 
 | ||||
| ``` | ||||
| git clone https://github.com/nvim-lua/kickstart.nvim.git %userprofile%\AppData\Local\nvim\  | ||||
| git clone https://github.com/nvim-lua/kickstart.nvim.git "%localappdata%\nvim" | ||||
| ``` | ||||
| 
 | ||||
| - on Windows (powershell) | ||||
| If you're using `powershell.exe` | ||||
| 
 | ||||
| ``` | ||||
| git clone https://github.com/nvim-lua/kickstart.nvim.git $env:USERPROFILE\AppData\Local\nvim\  | ||||
| git clone https://github.com/nvim-lua/kickstart.nvim.git "${env:LOCALAPPDATA}\nvim" | ||||
| ``` | ||||
| 
 | ||||
| </details> | ||||
| 
 | ||||
| ### Post Installation | ||||
| 
 | ||||
|  | @ -63,132 +102,139 @@ Start Neovim | |||
| nvim | ||||
| ``` | ||||
| 
 | ||||
| The `Lazy` plugin manager will start automatically on the first run and install the configured plugins - as can be seen in the introduction video. After the installation is complete you can press `q` to close the `Lazy` UI and **you are ready to go**! Next time you run nvim `Lazy` will no longer show up. | ||||
| That's it! Lazy will install all the plugins you have. Use `:Lazy` to view | ||||
| the current plugin status. Hit `q` to close the window. | ||||
| 
 | ||||
| If you would prefer to hide this step and run the plugin sync from the command line, you can use: | ||||
| #### Read The Friendly Documentation | ||||
| 
 | ||||
| Read through the `init.lua` file in your configuration folder for more | ||||
| information about extending and exploring Neovim. That also includes | ||||
| examples of adding popularly requested plugins. | ||||
| 
 | ||||
| > [!NOTE] | ||||
| > For more information about a particular plugin check its repository's documentation. | ||||
| 
 | ||||
| ```sh | ||||
| nvim --headless "+Lazy! sync" +qa | ||||
| ``` | ||||
| 
 | ||||
| ### Getting Started | ||||
| 
 | ||||
| See [Effective Neovim: Instant IDE](https://youtu.be/stqUbv-5u2s), covering the previous version. Note: The install via init.lua is outdated, please follow the install instructions in this file instead. An updated video is coming soon. | ||||
| 
 | ||||
| ### Recommended Steps | ||||
| 
 | ||||
| [Fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo) this repo (so that you have your own copy that you can modify) and then installing you can install to your machine using the methods above. | ||||
| 
 | ||||
| > **NOTE**   | ||||
| > Your fork's url will be something like this: `https://github.com/<your_github_username>/kickstart.nvim.git` | ||||
| 
 | ||||
| ### 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` (uncomment the line importing the `custom/plugins` directory in the `init.lua` file to enable this) | ||||
|   * 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. | ||||
| [The Only Video You Need to Get Started with Neovim](https://youtu.be/m8C0Cq9Uv9o) | ||||
| 
 | ||||
| ### 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 should I do if I already have a pre-existing Neovim configuration? | ||||
|   * You should back it up and then delete all associated files. | ||||
|   * This includes your existing init.lua and the Neovim files in `~/.local` | ||||
|     which can be deleted with `rm -rf ~/.local/share/nvim/` | ||||
| * Can I keep my existing configuration in parallel to kickstart? | ||||
|   * Yes! You can use [NVIM_APPNAME](https://neovim.io/doc/user/starting.html#%24NVIM_APPNAME)`=nvim-NAME` to maintain multiple configurations. For example you can install the kickstart configuration in `~/.config/nvim-kickstart` and create an alias: | ||||
|   * Yes! You can use [NVIM_APPNAME](https://neovim.io/doc/user/starting.html#%24NVIM_APPNAME)`=nvim-NAME` | ||||
|     to maintain multiple configurations. For example, you can install the kickstart | ||||
|     configuration in `~/.config/nvim-kickstart` and create an alias: | ||||
|     ``` | ||||
|     alias nvim-kickstart='NVIM_APPNAME="nvim-kickstart" nvim' | ||||
|     ``` | ||||
|     When you run Neovim using `nvim-kickstart` alias it will use the alternative config directory and the matching local directory `~/.local/share/nvim-kickstart`. You can apply this approach to any Neovim distribution that you would like to try out. | ||||
|     When you run Neovim using `nvim-kickstart` alias it will use the alternative | ||||
|     config directory and the matching local directory | ||||
|     `~/.local/share/nvim-kickstart`. You can apply this approach to any Neovim | ||||
|     distribution that you would like to try out. | ||||
| * What if I want to "uninstall" this configuration: | ||||
|   * See [lazy.nvim uninstall](https://github.com/folke/lazy.nvim#-uninstalling) information | ||||
|   * See [lazy.nvim uninstall](https://lazy.folke.io/usage#-uninstalling) information | ||||
| * Why is the kickstart `init.lua` a single file? Wouldn't it make sense to split it into multiple files? | ||||
|   * The main purpose of kickstart is to serve as a teaching tool and a reference | ||||
|     configuration that someone can easily `git clone` as a basis for their own. | ||||
|     configuration that someone can easily use to `git clone` as a basis for their own. | ||||
|     As you progress in learning Neovim and Lua, you might consider splitting `init.lua` | ||||
|     into smaller parts. A fork of kickstart that does this while maintaining the exact | ||||
|     into smaller parts. A fork of kickstart that does this while maintaining the | ||||
|     same functionality is available here: | ||||
|     * [kickstart-modular.nvim](https://github.com/dam9000/kickstart-modular.nvim) | ||||
|   * Discussions on this topic can be found here: | ||||
|     * [Restructure the configuration](https://github.com/nvim-lua/kickstart.nvim/issues/218) | ||||
|     * [Reorganize init.lua into a multi-file setup](https://github.com/nvim-lua/kickstart.nvim/pull/473) | ||||
| 
 | ||||
| ### Windows Installation | ||||
| ### Install Recipes | ||||
| 
 | ||||
| Installation may require installing build tools, and updating the run command for `telescope-fzf-native` | ||||
| Below you can find OS specific install instructions for Neovim and dependencies. | ||||
| 
 | ||||
| After installing all the dependencies continue with the [Install Kickstart](#Install-Kickstart) step. | ||||
| 
 | ||||
| #### Windows Installation | ||||
| 
 | ||||
| <details><summary>Windows with Microsoft C++ Build Tools and CMake</summary> | ||||
| 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 | ||||
| - 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' } | ||||
| ``` | ||||
| </details> | ||||
| <details><summary>Windows with gcc/make using chocolatey</summary> | ||||
| Alternatively, one can install gcc and make which don't require changing the config, | ||||
| the easiest way is to use choco: | ||||
| 
 | ||||
| 1. install [chocolatey](https://chocolatey.org/install) | ||||
| either follow the instructions on the page or use winget, | ||||
| run in cmd as **admin**: | ||||
| ``` | ||||
| winget install --accept-source-agreements chocolatey.chocolatey | ||||
| ``` | ||||
| 
 | ||||
| 2. install all requirements using choco, exit the previous cmd and | ||||
| open a new one so that choco path is set, and run in cmd as **admin**: | ||||
| ``` | ||||
| choco install -y neovim git ripgrep wget fd unzip gzip mingw make | ||||
| ``` | ||||
| </details> | ||||
| <details><summary>WSL (Windows Subsystem for Linux)</summary> | ||||
| 
 | ||||
| ``` | ||||
| wsl --install | ||||
| wsl | ||||
| sudo add-apt-repository ppa:neovim-ppa/unstable -y | ||||
| sudo apt update | ||||
| sudo apt install make gcc ripgrep unzip git xclip neovim | ||||
| ``` | ||||
| </details> | ||||
| 
 | ||||
| #### Linux Install | ||||
| <details><summary>Ubuntu Install Steps</summary> | ||||
| 
 | ||||
| ``` | ||||
| sudo add-apt-repository ppa:neovim-ppa/unstable -y | ||||
| sudo apt update | ||||
| sudo apt install make gcc ripgrep unzip git xclip neovim | ||||
| ``` | ||||
| </details> | ||||
| <details><summary>Debian Install Steps</summary> | ||||
| 
 | ||||
| ``` | ||||
| sudo apt update | ||||
| sudo apt install make gcc ripgrep unzip git xclip curl | ||||
| 
 | ||||
| # Now we install nvim | ||||
| curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gz | ||||
| sudo rm -rf /opt/nvim-linux-x86_64 | ||||
| sudo mkdir -p /opt/nvim-linux-x86_64 | ||||
| sudo chmod a+rX /opt/nvim-linux-x86_64 | ||||
| sudo tar -C /opt -xzf nvim-linux-x86_64.tar.gz | ||||
| 
 | ||||
| # make it available in /usr/local/bin, distro installs to /usr/bin | ||||
| sudo ln -sf /opt/nvim-linux-x86_64/bin/nvim /usr/local/bin/ | ||||
| ``` | ||||
| </details> | ||||
| <details><summary>Fedora Install Steps</summary> | ||||
| 
 | ||||
| ``` | ||||
| sudo dnf install -y gcc make git ripgrep fd-find unzip neovim | ||||
| ``` | ||||
| </details> | ||||
| 
 | ||||
| <details><summary>Arch Install Steps</summary> | ||||
| 
 | ||||
| ``` | ||||
| sudo pacman -S --noconfirm --needed gcc make git ripgrep fd unzip neovim | ||||
| ``` | ||||
| </details> | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,5 @@ | |||
| local config = { | ||||
|   cmd = { '/usr/bin/jdtls' }, | ||||
|   root_dir = vim.fs.dirname(vim.fs.find({ 'gradlew', '.git', 'mvnw' }, { upward = true })[1]), | ||||
| } | ||||
| require('jdtls').start_or_attach(config) | ||||
|  | @ -0,0 +1,52 @@ | |||
| --[[ | ||||
| -- | ||||
| -- This file is not required for your own configuration, | ||||
| -- but helps people determine if their system is setup correctly. | ||||
| -- | ||||
| --]] | ||||
| 
 | ||||
| local check_version = function() | ||||
|   local verstr = tostring(vim.version()) | ||||
|   if not vim.version.ge then | ||||
|     vim.health.error(string.format("Neovim out of date: '%s'. Upgrade to latest stable or nightly", verstr)) | ||||
|     return | ||||
|   end | ||||
| 
 | ||||
|   if vim.version.ge(vim.version(), '0.10-dev') then | ||||
|     vim.health.ok(string.format("Neovim version is: '%s'", verstr)) | ||||
|   else | ||||
|     vim.health.error(string.format("Neovim out of date: '%s'. Upgrade to latest stable or nightly", verstr)) | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| local check_external_reqs = function() | ||||
|   -- Basic utils: `git`, `make`, `unzip` | ||||
|   for _, exe in ipairs { 'git', 'make', 'unzip', 'rg' } do | ||||
|     local is_executable = vim.fn.executable(exe) == 1 | ||||
|     if is_executable then | ||||
|       vim.health.ok(string.format("Found executable: '%s'", exe)) | ||||
|     else | ||||
|       vim.health.warn(string.format("Could not find executable: '%s'", exe)) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   return true | ||||
| end | ||||
| 
 | ||||
| return { | ||||
|   check = function() | ||||
|     vim.health.start 'kickstart.nvim' | ||||
| 
 | ||||
|     vim.health.info [[NOTE: Not every warning is a 'must-fix' in `:checkhealth` | ||||
| 
 | ||||
|   Fix only warnings for plugins and languages you intend to use. | ||||
|     Mason will give warnings for languages that are not installed. | ||||
|     You do not need to install, unless you want to use those languages!]] | ||||
| 
 | ||||
|     local uv = vim.uv or vim.loop | ||||
|     vim.health.info('System Information: ' .. vim.inspect(uv.os_uname())) | ||||
| 
 | ||||
|     check_version() | ||||
|     check_external_reqs() | ||||
|   end, | ||||
| } | ||||
|  | @ -1,74 +0,0 @@ | |||
| -- 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, | ||||
| } | ||||
|  | @ -0,0 +1,16 @@ | |||
| -- autopairs | ||||
| -- https://github.com/windwp/nvim-autopairs | ||||
| 
 | ||||
| return { | ||||
|   'windwp/nvim-autopairs', | ||||
|   event = 'InsertEnter', | ||||
|   -- 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, | ||||
| } | ||||
|  | @ -14,6 +14,9 @@ return { | |||
|     -- Creates a beautiful debugger UI | ||||
|     'rcarriga/nvim-dap-ui', | ||||
| 
 | ||||
|     -- Required dependency for nvim-dap-ui | ||||
|     'nvim-neotest/nvim-nio', | ||||
| 
 | ||||
|     -- Installs the debug adapters for you | ||||
|     'williamboman/mason.nvim', | ||||
|     'jay-babu/mason-nvim-dap.nvim', | ||||
|  | @ -21,6 +24,59 @@ return { | |||
|     -- Add your own debuggers here | ||||
|     'leoluz/nvim-dap-go', | ||||
|   }, | ||||
|   keys = { | ||||
|     -- Basic debugging keymaps, feel free to change to your liking! | ||||
|     { | ||||
|       '<F5>', | ||||
|       function() | ||||
|         require('dap').continue() | ||||
|       end, | ||||
|       desc = 'Debug: Start/Continue', | ||||
|     }, | ||||
|     { | ||||
|       '<F1>', | ||||
|       function() | ||||
|         require('dap').step_into() | ||||
|       end, | ||||
|       desc = 'Debug: Step Into', | ||||
|     }, | ||||
|     { | ||||
|       '<F2>', | ||||
|       function() | ||||
|         require('dap').step_over() | ||||
|       end, | ||||
|       desc = 'Debug: Step Over', | ||||
|     }, | ||||
|     { | ||||
|       '<F3>', | ||||
|       function() | ||||
|         require('dap').step_out() | ||||
|       end, | ||||
|       desc = 'Debug: Step Out', | ||||
|     }, | ||||
|     { | ||||
|       '<leader>b', | ||||
|       function() | ||||
|         require('dap').toggle_breakpoint() | ||||
|       end, | ||||
|       desc = 'Debug: Toggle Breakpoint', | ||||
|     }, | ||||
|     { | ||||
|       '<leader>B', | ||||
|       function() | ||||
|         require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ') | ||||
|       end, | ||||
|       desc = 'Debug: Set Breakpoint', | ||||
|     }, | ||||
|     -- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception. | ||||
|     { | ||||
|       '<F7>', | ||||
|       function() | ||||
|         require('dapui').toggle() | ||||
|       end, | ||||
|       desc = 'Debug: See last session result.', | ||||
|     }, | ||||
|   }, | ||||
|   config = function() | ||||
|     local dap = require 'dap' | ||||
|     local dapui = require 'dapui' | ||||
|  | @ -28,7 +84,7 @@ return { | |||
|     require('mason-nvim-dap').setup { | ||||
|       -- Makes a best effort to setup the various debuggers with | ||||
|       -- reasonable debug configurations | ||||
|       automatic_setup = true, | ||||
|       automatic_installation = true, | ||||
| 
 | ||||
|       -- You can provide additional configuration to the handlers, | ||||
|       -- see mason-nvim-dap README for more information | ||||
|  | @ -42,16 +98,6 @@ return { | |||
|       }, | ||||
|     } | ||||
| 
 | ||||
|     -- Basic debugging keymaps, feel free to change to your liking! | ||||
|     vim.keymap.set('n', '<F5>', dap.continue, { desc = 'Debug: Start/Continue' }) | ||||
|     vim.keymap.set('n', '<F1>', dap.step_into, { desc = 'Debug: Step Into' }) | ||||
|     vim.keymap.set('n', '<F2>', dap.step_over, { desc = 'Debug: Step Over' }) | ||||
|     vim.keymap.set('n', '<F3>', dap.step_out, { desc = 'Debug: Step Out' }) | ||||
|     vim.keymap.set('n', '<leader>b', dap.toggle_breakpoint, { desc = 'Debug: Toggle Breakpoint' }) | ||||
|     vim.keymap.set('n', '<leader>B', function() | ||||
|       dap.set_breakpoint(vim.fn.input 'Breakpoint condition: ') | ||||
|     end, { desc = 'Debug: Set Breakpoint' }) | ||||
| 
 | ||||
|     -- Dap UI setup | ||||
|     -- For more information, see |:help nvim-dap-ui| | ||||
|     dapui.setup { | ||||
|  | @ -74,14 +120,29 @@ return { | |||
|       }, | ||||
|     } | ||||
| 
 | ||||
|     -- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception. | ||||
|     vim.keymap.set('n', '<F7>', dapui.toggle, { desc = 'Debug: See last session result.' }) | ||||
|     -- Change breakpoint icons | ||||
|     -- vim.api.nvim_set_hl(0, 'DapBreak', { fg = '#e51400' }) | ||||
|     -- vim.api.nvim_set_hl(0, 'DapStop', { fg = '#ffcc00' }) | ||||
|     -- local breakpoint_icons = vim.g.have_nerd_font | ||||
|     --     and { Breakpoint = '', BreakpointCondition = '', BreakpointRejected = '', LogPoint = '', Stopped = '' } | ||||
|     --   or { Breakpoint = '●', BreakpointCondition = '⊜', BreakpointRejected = '⊘', LogPoint = '◆', Stopped = '⭔' } | ||||
|     -- for type, icon in pairs(breakpoint_icons) do | ||||
|     --   local tp = 'Dap' .. type | ||||
|     --   local hl = (type == 'Stopped') and 'DapStop' or 'DapBreak' | ||||
|     --   vim.fn.sign_define(tp, { text = icon, texthl = hl, numhl = hl }) | ||||
|     -- end | ||||
| 
 | ||||
|     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() | ||||
|     require('dap-go').setup { | ||||
|       delve = { | ||||
|         -- On Windows delve must be run attached or it crashes. | ||||
|         -- See https://github.com/leoluz/nvim-dap-go/blob/main/README.md#configuring | ||||
|         detached = vim.fn.has 'win32' == 0, | ||||
|       }, | ||||
|     } | ||||
|   end, | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,61 @@ | |||
| -- Adds git related signs to the gutter, as well as utilities for managing changes | ||||
| -- NOTE: gitsigns is already included in init.lua but contains only the base | ||||
| -- config. This will add also the recommended keymaps. | ||||
| 
 | ||||
| return { | ||||
|   { | ||||
|     'lewis6991/gitsigns.nvim', | ||||
|     opts = { | ||||
|       on_attach = function(bufnr) | ||||
|         local gitsigns = require 'gitsigns' | ||||
| 
 | ||||
|         local function map(mode, l, r, opts) | ||||
|           opts = opts or {} | ||||
|           opts.buffer = bufnr | ||||
|           vim.keymap.set(mode, l, r, opts) | ||||
|         end | ||||
| 
 | ||||
|         -- Navigation | ||||
|         map('n', ']c', function() | ||||
|           if vim.wo.diff then | ||||
|             vim.cmd.normal { ']c', bang = true } | ||||
|           else | ||||
|             gitsigns.nav_hunk 'next' | ||||
|           end | ||||
|         end, { desc = 'Jump to next git [c]hange' }) | ||||
| 
 | ||||
|         map('n', '[c', function() | ||||
|           if vim.wo.diff then | ||||
|             vim.cmd.normal { '[c', bang = true } | ||||
|           else | ||||
|             gitsigns.nav_hunk 'prev' | ||||
|           end | ||||
|         end, { desc = 'Jump to previous git [c]hange' }) | ||||
| 
 | ||||
|         -- Actions | ||||
|         -- visual mode | ||||
|         map('v', '<leader>hs', function() | ||||
|           gitsigns.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } | ||||
|         end, { desc = 'git [s]tage hunk' }) | ||||
|         map('v', '<leader>hr', function() | ||||
|           gitsigns.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } | ||||
|         end, { desc = 'git [r]eset hunk' }) | ||||
|         -- normal mode | ||||
|         map('n', '<leader>hs', gitsigns.stage_hunk, { desc = 'git [s]tage hunk' }) | ||||
|         map('n', '<leader>hr', gitsigns.reset_hunk, { desc = 'git [r]eset hunk' }) | ||||
|         map('n', '<leader>hS', gitsigns.stage_buffer, { desc = 'git [S]tage buffer' }) | ||||
|         map('n', '<leader>hu', gitsigns.stage_hunk, { desc = 'git [u]ndo stage hunk' }) | ||||
|         map('n', '<leader>hR', gitsigns.reset_buffer, { desc = 'git [R]eset buffer' }) | ||||
|         map('n', '<leader>hp', gitsigns.preview_hunk, { desc = 'git [p]review hunk' }) | ||||
|         map('n', '<leader>hb', gitsigns.blame_line, { desc = 'git [b]lame line' }) | ||||
|         map('n', '<leader>hd', gitsigns.diffthis, { desc = 'git [d]iff against index' }) | ||||
|         map('n', '<leader>hD', function() | ||||
|           gitsigns.diffthis '@' | ||||
|         end, { desc = 'git [D]iff against last commit' }) | ||||
|         -- Toggles | ||||
|         map('n', '<leader>tb', gitsigns.toggle_current_line_blame, { desc = '[T]oggle git show [b]lame line' }) | ||||
|         map('n', '<leader>tD', gitsigns.preview_hunk_inline, { desc = '[T]oggle git show [D]eleted' }) | ||||
|       end, | ||||
|     }, | ||||
|   }, | ||||
| } | ||||
|  | @ -0,0 +1,9 @@ | |||
| return { | ||||
|   { -- Add indentation guides even on blank lines | ||||
|     'lukas-reineke/indent-blankline.nvim', | ||||
|     -- Enable `lukas-reineke/indent-blankline.nvim` | ||||
|     -- See `:help ibl` | ||||
|     main = 'ibl', | ||||
|     opts = {}, | ||||
|   }, | ||||
| } | ||||
|  | @ -0,0 +1,60 @@ | |||
| return { | ||||
| 
 | ||||
|   { -- Linting | ||||
|     'mfussenegger/nvim-lint', | ||||
|     event = { 'BufReadPre', 'BufNewFile' }, | ||||
|     config = function() | ||||
|       local lint = require 'lint' | ||||
|       lint.linters_by_ft = { | ||||
|         markdown = { 'markdownlint' }, | ||||
|       } | ||||
| 
 | ||||
|       -- To allow other plugins to add linters to require('lint').linters_by_ft, | ||||
|       -- instead set linters_by_ft like this: | ||||
|       -- lint.linters_by_ft = lint.linters_by_ft or {} | ||||
|       -- lint.linters_by_ft['markdown'] = { 'markdownlint' } | ||||
|       -- | ||||
|       -- However, note that this will enable a set of default linters, | ||||
|       -- which will cause errors unless these tools are available: | ||||
|       -- { | ||||
|       --   clojure = { "clj-kondo" }, | ||||
|       --   dockerfile = { "hadolint" }, | ||||
|       --   inko = { "inko" }, | ||||
|       --   janet = { "janet" }, | ||||
|       --   json = { "jsonlint" }, | ||||
|       --   markdown = { "vale" }, | ||||
|       --   rst = { "vale" }, | ||||
|       --   ruby = { "ruby" }, | ||||
|       --   terraform = { "tflint" }, | ||||
|       --   text = { "vale" } | ||||
|       -- } | ||||
|       -- | ||||
|       -- You can disable the default linters by setting their filetypes to nil: | ||||
|       -- lint.linters_by_ft['clojure'] = nil | ||||
|       -- lint.linters_by_ft['dockerfile'] = nil | ||||
|       -- lint.linters_by_ft['inko'] = nil | ||||
|       -- lint.linters_by_ft['janet'] = nil | ||||
|       -- lint.linters_by_ft['json'] = nil | ||||
|       -- lint.linters_by_ft['markdown'] = nil | ||||
|       -- lint.linters_by_ft['rst'] = nil | ||||
|       -- lint.linters_by_ft['ruby'] = nil | ||||
|       -- lint.linters_by_ft['terraform'] = nil | ||||
|       -- lint.linters_by_ft['text'] = nil | ||||
| 
 | ||||
|       -- Create autocommand which carries out the actual linting | ||||
|       -- on the specified events. | ||||
|       local lint_augroup = vim.api.nvim_create_augroup('lint', { clear = true }) | ||||
|       vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, { | ||||
|         group = lint_augroup, | ||||
|         callback = function() | ||||
|           -- Only run the linter in buffers that you can modify in order to | ||||
|           -- avoid superfluous noise, notably within the handy LSP pop-ups that | ||||
|           -- describe the hovered symbol using Markdown. | ||||
|           if vim.opt_local.modifiable:get() then | ||||
|             lint.try_lint() | ||||
|           end | ||||
|         end, | ||||
|       }) | ||||
|     end, | ||||
|   }, | ||||
| } | ||||
|  | @ -0,0 +1,25 @@ | |||
| -- Neo-tree is a Neovim plugin to browse the file system | ||||
| -- https://github.com/nvim-neo-tree/neo-tree.nvim | ||||
| 
 | ||||
| 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', | ||||
|   }, | ||||
|   cmd = 'Neotree', | ||||
|   keys = { | ||||
|     { '\\', ':Neotree reveal<CR>', desc = 'NeoTree reveal', silent = true }, | ||||
|   }, | ||||
|   opts = { | ||||
|     filesystem = { | ||||
|       window = { | ||||
|         mappings = { | ||||
|           ['\\'] = 'close_window', | ||||
|         }, | ||||
|       }, | ||||
|     }, | ||||
|   }, | ||||
| } | ||||
		Loading…
	
		Reference in New Issue