Compare commits
21 commits
master
...
lazy-refre
Author | SHA1 | Date | |
---|---|---|---|
|
d8784b62db | ||
|
33469ef03d | ||
|
bdbe2f3ae2 | ||
|
e5c03b4206 | ||
|
775ff6ac89 | ||
|
ba5786cde4 | ||
|
a7400529d7 | ||
|
eea0adb4fe | ||
|
c33d911e60 | ||
|
e40d7048d4 | ||
|
5ba0db5522 | ||
|
0d7e4dadab | ||
|
1a2a96be4c | ||
|
36e99fbe35 | ||
|
d6ad146301 | ||
|
4d218e3b8a | ||
|
69d7d4a081 | ||
|
1afbeca63f | ||
|
68a0332ac2 | ||
|
4f112819b1 | ||
|
c6629b47ff |
9 changed files with 476 additions and 209 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -2,4 +2,4 @@ tags
|
||||||
test.sh
|
test.sh
|
||||||
.luarc.json
|
.luarc.json
|
||||||
nvim
|
nvim
|
||||||
plugin/packer_compiled.lua
|
lazy-lock.json
|
||||||
|
|
34
Dockerfile
34
Dockerfile
|
@ -1,34 +0,0 @@
|
||||||
# Build neovim separately in the first stage
|
|
||||||
FROM alpine:latest AS base
|
|
||||||
|
|
||||||
RUN apk --no-cache add \
|
|
||||||
autoconf \
|
|
||||||
automake \
|
|
||||||
build-base \
|
|
||||||
cmake \
|
|
||||||
ninja \
|
|
||||||
coreutils \
|
|
||||||
curl \
|
|
||||||
gettext-tiny-dev \
|
|
||||||
git \
|
|
||||||
libtool \
|
|
||||||
pkgconf \
|
|
||||||
unzip
|
|
||||||
|
|
||||||
# Build neovim (and use it as an example codebase
|
|
||||||
RUN git clone https://github.com/neovim/neovim.git
|
|
||||||
|
|
||||||
ARG VERSION=master
|
|
||||||
RUN cd neovim && git checkout ${VERSION} && make CMAKE_BUILD_TYPE=RelWithDebInfo install
|
|
||||||
|
|
||||||
# To support kickstart.nvim
|
|
||||||
RUN apk --no-cache add \
|
|
||||||
fd \
|
|
||||||
ctags \
|
|
||||||
ripgrep \
|
|
||||||
git
|
|
||||||
|
|
||||||
# Copy the kickstart.nvim init.lua
|
|
||||||
COPY ./init.lua /root/.config/nvim/init.lua
|
|
||||||
|
|
||||||
WORKDIR /neovim
|
|
154
README.md
154
README.md
|
@ -1,25 +1,118 @@
|
||||||
|
# kickstart.nvim
|
||||||
|
|
||||||
### Introduction
|
### Introduction
|
||||||
|
|
||||||
A starting point for Neovim that is:
|
A starting point for Neovim that is:
|
||||||
|
|
||||||
* Small (<500 lines)
|
* Small
|
||||||
* Single-file
|
* Single-file (with examples of moving to multi-file)
|
||||||
* Documented
|
* Documented
|
||||||
* Modular
|
* Modular
|
||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
This repo is meant to be used as a starting point for a user's own configuration; remove the things you don't use and add what you miss. Please refrain from leaving comments about enabling / disabling particular languages out of the box.
|
Distribution Alternatives:
|
||||||
|
- [LazyVim](https://www.lazyvim.org/): A delightful distribution maintained by @folke (the author of lazy.nvim, the package manager used here)
|
||||||
|
|
||||||
### Installation
|
### 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.
|
||||||
|
|
||||||
* Backup your previous configuration
|
* Backup your previous configuration
|
||||||
* Copy and paste the kickstart.nvim `init.lua` into `$HOME/.config/nvim/init.lua` (Linux) or `~/AppData/Local/nvim/init.lua` (Windows)
|
* (Recommended) Fork this repo (so that you have your own copy that you can modify).
|
||||||
* Start Neovim (`nvim`) and run `:PackerInstall` - ignore any error message about missing plugins, `:PackerInstall` will fix that shortly
|
* Clone the kickstart repo into `$HOME/.config/nvim/` (Linux/Mac) or `~/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
|
||||||
|
* Start Neovim (`nvim`) and allow `lazy.nvim` to complete installation.
|
||||||
* Restart Neovim
|
* Restart Neovim
|
||||||
|
* **You're ready to go!**
|
||||||
|
|
||||||
|
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 as well [Windows Installation](#Windows-Installation)
|
||||||
|
|
||||||
|
### Configuration And Extension
|
||||||
|
|
||||||
|
* Inside of your fork, feel free to modify any file you like! It's your fork!
|
||||||
|
* Then there are two primary configuration options available:
|
||||||
|
* Include the `lua/kickstart/plugins/*` files in your configuration.
|
||||||
|
* Add new configuration in `lua/custom/plugins/*` files, which will be auto sourced using `lazy.nvim`
|
||||||
|
* NOTE: To enable this, you need to uncomment `{ import = 'custom.plugins' }` in your `init.lua`
|
||||||
|
|
||||||
|
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",
|
||||||
|
config = function()
|
||||||
|
require("nvim-autopairs").setup {}
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
If there are languages that you don't want to use, remove their configuration and notes from your `init.lua` after copy and pasting (for example, in the mason configuration).
|
This will automatically install `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
|
||||||
|
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 ()
|
||||||
|
-- Unless you are still migrating, remove the deprecated commands from v1.x
|
||||||
|
vim.cmd([[ let g:neo_tree_remove_legacy_commands = 1 ]])
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
#### Example: Adding a file to change default options
|
||||||
|
|
||||||
|
To change default options, you can add a file in the `/after/plugin/` folder (see `:help load-plugins`) to include your own options, keymaps, autogroups, and more. The following is an example `defaults.lua` file (located at `$HOME/.config/nvim/after/plugin/defaults.lua`).
|
||||||
|
|
||||||
|
```lua
|
||||||
|
vim.opt.relativenumber = true
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>sr', require('telescope.builtin').resume, { desc = '[S]earch [R]esume' })
|
||||||
|
```
|
||||||
|
|
||||||
|
### 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).
|
||||||
|
|
||||||
### Windows Installation
|
### Windows Installation
|
||||||
|
|
||||||
|
@ -35,50 +128,3 @@ This requires:
|
||||||
use {'nvim-telescope/telescope-fzf-native.nvim', run = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' }
|
use {'nvim-telescope/telescope-fzf-native.nvim', run = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' }
|
||||||
```
|
```
|
||||||
|
|
||||||
### Configuration
|
|
||||||
|
|
||||||
You could directly modify the `init.lua` file with your personal customizations. This option is the most straightforward, but if you update your config from this repo, you may need to reapply your changes.
|
|
||||||
|
|
||||||
An alternative approach is to create a separate `custom.plugins` module to register your own plugins. In addition, you can handle further customizations in the `/after/plugin/` directory (see `:help load-plugins`). See the following examples for more information. Leveraging this technique should make upgrading to a newer version of this repo easier.
|
|
||||||
|
|
||||||
#### Example `plugins.lua`
|
|
||||||
|
|
||||||
The following is an example of a `plugins.lua` module (located at `$HOME/.config/nvim/lua/custom/plugins.lua`) where you can register your own plugins.
|
|
||||||
|
|
||||||
```lua
|
|
||||||
return function(use)
|
|
||||||
use({
|
|
||||||
"folke/which-key.nvim",
|
|
||||||
config = function()
|
|
||||||
require("which-key").setup({})
|
|
||||||
end
|
|
||||||
})
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Example `defaults.lua`
|
|
||||||
|
|
||||||
For further customizations, you can add a file in the `/after/plugin/` folder (see `:help load-plugins`) to include your own options, keymaps, autogroups, and more. The following is an example `defaults.lua` file (located at `$HOME/.config/nvim/after/plugin/defaults.lua`).
|
|
||||||
|
|
||||||
```lua
|
|
||||||
vim.opt.relativenumber = true
|
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>sr', require('telescope.builtin').resume, { desc = '[S]earch [R]esume' })
|
|
||||||
```
|
|
||||||
|
|
||||||
### 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
|
|
||||||
* Lazy-loading. Kickstart.nvim should start within 40 ms on modern hardware. Please profile and contribute to upstream plugins to optimize startup time instead.
|
|
||||||
|
|
||||||
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/`
|
|
||||||
|
|
||||||
|
|
24
doc/kickstart.txt
Normal file
24
doc/kickstart.txt
Normal file
|
@ -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:
|
3
doc/tags
Normal file
3
doc/tags
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
kickstart-is kickstart.txt /*kickstart-is*
|
||||||
|
kickstart-is-not kickstart.txt /*kickstart-is-not*
|
||||||
|
kickstart.nvim kickstart.txt /*kickstart.nvim*
|
304
init.lua
304
init.lua
|
@ -1,96 +1,193 @@
|
||||||
-- Install packer
|
--[[
|
||||||
local install_path = vim.fn.stdpath 'data' .. '/site/pack/packer/start/packer.nvim'
|
|
||||||
local is_bootstrap = false
|
=====================================================================
|
||||||
if vim.fn.empty(vim.fn.glob(install_path)) > 0 then
|
==================== READ THIS BEFORE CONTINUING ====================
|
||||||
is_bootstrap = true
|
=====================================================================
|
||||||
vim.fn.system { 'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path }
|
|
||||||
vim.cmd [[packadd packer.nvim]]
|
Kickstart.nvim is *not* a distribution.
|
||||||
|
|
||||||
|
Kickstart.nvim is a template for your own configuration.
|
||||||
|
The goal is that you can read every line of code, top-to-bottom, and understand
|
||||||
|
what your configuration is doing.
|
||||||
|
|
||||||
|
Once you've done that, you should start exploring, configuring and tinkering to
|
||||||
|
explore Neovim!
|
||||||
|
|
||||||
|
If you don't know anything about Lua, I recommend taking some time to read through
|
||||||
|
a guide. One possible example:
|
||||||
|
- https://learnxinyminutes.com/docs/lua/
|
||||||
|
|
||||||
|
And then you can explore or search through `:help lua-guide`
|
||||||
|
|
||||||
|
|
||||||
|
Kickstart Guide:
|
||||||
|
|
||||||
|
I have left several `:help X` comments throughout the init.lua
|
||||||
|
You should run that command and read that help section for more information.
|
||||||
|
|
||||||
|
In addition, I have some `NOTE:` items throughout the file.
|
||||||
|
These are for you, the reader to help understand what is happening. Feel free to delete
|
||||||
|
them once you know what you're doing, but they should serve as a guide for when you
|
||||||
|
are first encountering a few different constructs in your nvim config.
|
||||||
|
|
||||||
|
I hope you enjoy your Neovim journey,
|
||||||
|
- TJ
|
||||||
|
|
||||||
|
P.S. You can delete this when you're done too. It's your config now :)
|
||||||
|
--]]
|
||||||
|
|
||||||
|
-- Set <space> 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
|
end
|
||||||
|
vim.opt.rtp:prepend(lazypath)
|
||||||
|
|
||||||
require('packer').startup(function(use)
|
-- NOTE: Here is where you install your plugins.
|
||||||
-- Package manager
|
-- You can configure plugins using the `config` key.
|
||||||
use 'wbthomason/packer.nvim'
|
--
|
||||||
|
-- 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
|
||||||
|
|
||||||
use { -- LSP Configuration & Plugins
|
-- 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',
|
'neovim/nvim-lspconfig',
|
||||||
requires = {
|
dependencies = {
|
||||||
-- Automatically install LSPs to stdpath for neovim
|
-- Automatically install LSPs to stdpath for neovim
|
||||||
'williamboman/mason.nvim',
|
'williamboman/mason.nvim',
|
||||||
'williamboman/mason-lspconfig.nvim',
|
'williamboman/mason-lspconfig.nvim',
|
||||||
|
|
||||||
-- Useful status updates for LSP
|
-- Useful status updates for LSP
|
||||||
'j-hui/fidget.nvim',
|
-- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
|
||||||
|
{ 'j-hui/fidget.nvim', opts = {} },
|
||||||
|
|
||||||
-- Additional lua configuration, makes nvim stuff amazing
|
-- Additional lua configuration, makes nvim stuff amazing!
|
||||||
'folke/neodev.nvim',
|
'folke/neodev.nvim',
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
|
|
||||||
use { -- Autocompletion
|
{ -- Autocompletion
|
||||||
'hrsh7th/nvim-cmp',
|
'hrsh7th/nvim-cmp',
|
||||||
requires = { 'hrsh7th/cmp-nvim-lsp', 'L3MON4D3/LuaSnip', 'saadparwaiz1/cmp_luasnip' },
|
dependencies = { 'hrsh7th/cmp-nvim-lsp', 'L3MON4D3/LuaSnip', 'saadparwaiz1/cmp_luasnip' },
|
||||||
}
|
},
|
||||||
|
|
||||||
use { -- Highlight, edit, and navigate code
|
-- Useful plugin to show you pending keybinds.
|
||||||
'nvim-treesitter/nvim-treesitter',
|
{ 'folke/which-key.nvim', opts = {} },
|
||||||
run = function()
|
{ -- Adds git releated signs to the gutter, as well as utilities for managing changes
|
||||||
pcall(require('nvim-treesitter.install').update { with_sync = true })
|
'lewis6991/gitsigns.nvim',
|
||||||
|
opts = {
|
||||||
|
-- See `:help gitsigns.txt`
|
||||||
|
signs = {
|
||||||
|
add = { text = '+' },
|
||||||
|
change = { text = '~' },
|
||||||
|
delete = { text = '_' },
|
||||||
|
topdelete = { text = '‾' },
|
||||||
|
changedelete = { text = '~' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
{ -- Theme inspired by Atom
|
||||||
|
'navarasu/onedark.nvim',
|
||||||
|
priority = 1000,
|
||||||
|
config = function()
|
||||||
|
vim.cmd.colorscheme 'onedark'
|
||||||
end,
|
end,
|
||||||
}
|
},
|
||||||
|
|
||||||
use { -- Additional text objects via treesitter
|
{ -- Set lualine as statusline
|
||||||
'nvim-treesitter/nvim-treesitter-textobjects',
|
'nvim-lualine/lualine.nvim',
|
||||||
after = 'nvim-treesitter',
|
-- See `:help lualine.txt`
|
||||||
}
|
opts = {
|
||||||
|
options = {
|
||||||
|
icons_enabled = false,
|
||||||
|
theme = 'onedark',
|
||||||
|
component_separators = '|',
|
||||||
|
section_separators = '',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
-- Git related plugins
|
{ -- Add indentation guides even on blank lines
|
||||||
use 'tpope/vim-fugitive'
|
'lukas-reineke/indent-blankline.nvim',
|
||||||
use 'tpope/vim-rhubarb'
|
-- Enable `lukas-reineke/indent-blankline.nvim`
|
||||||
use 'lewis6991/gitsigns.nvim'
|
-- See `:help indent_blankline.txt`
|
||||||
|
opts = {
|
||||||
|
char = '┊',
|
||||||
|
show_trailing_blankline_indent = false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
use 'navarasu/onedark.nvim' -- Theme inspired by Atom
|
-- "gc" to comment visual regions/lines
|
||||||
use 'nvim-lualine/lualine.nvim' -- Fancier statusline
|
{ 'numToStr/Comment.nvim', opts = {} },
|
||||||
use 'lukas-reineke/indent-blankline.nvim' -- Add indentation guides even on blank lines
|
|
||||||
use 'numToStr/Comment.nvim' -- "gc" to comment visual regions/lines
|
|
||||||
use 'tpope/vim-sleuth' -- Detect tabstop and shiftwidth automatically
|
|
||||||
|
|
||||||
-- Fuzzy Finder (files, lsp, etc)
|
-- Fuzzy Finder (files, lsp, etc)
|
||||||
use { 'nvim-telescope/telescope.nvim', branch = '0.1.x', requires = { 'nvim-lua/plenary.nvim' } }
|
{ 'nvim-telescope/telescope.nvim', version = '*', dependencies = { 'nvim-lua/plenary.nvim' } },
|
||||||
|
|
||||||
-- Fuzzy Finder Algorithm which requires local dependencies to be built. Only load if `make` is available
|
-- Fuzzy Finder Algorithm which requires local dependencies to be built.
|
||||||
use { 'nvim-telescope/telescope-fzf-native.nvim', run = 'make', cond = vim.fn.executable 'make' == 1 }
|
-- 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,
|
||||||
|
},
|
||||||
|
|
||||||
-- Add custom plugins to packer from ~/.config/nvim/lua/custom/plugins.lua
|
{ -- Highlight, edit, and navigate code
|
||||||
local has_plugins, plugins = pcall(require, 'custom.plugins')
|
'nvim-treesitter/nvim-treesitter',
|
||||||
if has_plugins then
|
dependencies = {
|
||||||
plugins(use)
|
'nvim-treesitter/nvim-treesitter-textobjects',
|
||||||
end
|
},
|
||||||
|
config = function()
|
||||||
|
pcall(require('nvim-treesitter.install').update { with_sync = true })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
if is_bootstrap then
|
-- NOTE: Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart
|
||||||
require('packer').sync()
|
-- These are some example plugins that I've included in the kickstart repository.
|
||||||
end
|
-- Uncomment any of the lines below to enable them.
|
||||||
end)
|
-- require 'kickstart.plugins.autoformat',
|
||||||
|
-- require 'kickstart.plugins.debug',
|
||||||
|
|
||||||
-- When we are bootstrapping a configuration, it doesn't
|
-- NOTE: The import below automatically adds your own plugins, configuration, etc from `lua/custom/plugins/*.lua`
|
||||||
-- make sense to execute the rest of the init.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.
|
||||||
-- You'll need to restart nvim, and then it will work.
|
--
|
||||||
if is_bootstrap then
|
-- For additional information see: https://github.com/folke/lazy.nvim#-structuring-your-plugins
|
||||||
print '=================================='
|
--
|
||||||
print ' Plugins are being installed'
|
-- An additional note is that if you only copied in the `init.lua`, you can just comment this line
|
||||||
print ' Wait until Packer completes,'
|
-- to get rid of the warning telling you that there are not plugins in `lua/custom/plugins/`.
|
||||||
print ' then restart nvim'
|
{ import = 'custom.plugins' },
|
||||||
print '=================================='
|
}, {})
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Automatically source and re-compile packer whenever you save this init.lua
|
|
||||||
local packer_group = vim.api.nvim_create_augroup('Packer', { clear = true })
|
|
||||||
vim.api.nvim_create_autocmd('BufWritePost', {
|
|
||||||
command = 'source <afile> | silent! LspStop | silent! LspStart | PackerCompile',
|
|
||||||
group = packer_group,
|
|
||||||
pattern = vim.fn.expand '$MYVIMRC',
|
|
||||||
})
|
|
||||||
|
|
||||||
-- [[ Setting options ]]
|
-- [[ Setting options ]]
|
||||||
-- See `:help vim.o`
|
-- See `:help vim.o`
|
||||||
|
@ -114,23 +211,21 @@ vim.o.undofile = true
|
||||||
vim.o.ignorecase = true
|
vim.o.ignorecase = true
|
||||||
vim.o.smartcase = true
|
vim.o.smartcase = true
|
||||||
|
|
||||||
-- Decrease update time
|
-- Keep signcolumn on by default
|
||||||
vim.o.updatetime = 250
|
|
||||||
vim.wo.signcolumn = 'yes'
|
vim.wo.signcolumn = 'yes'
|
||||||
|
|
||||||
-- Set colorscheme
|
-- Decrease update time
|
||||||
vim.o.termguicolors = true
|
vim.o.updatetime = 250
|
||||||
vim.cmd [[colorscheme onedark]]
|
vim.o.timeout = true
|
||||||
|
vim.o.timeoutlen = 300
|
||||||
|
|
||||||
-- Set completeopt to have a better completion experience
|
-- Set completeopt to have a better completion experience
|
||||||
vim.o.completeopt = 'menuone,noselect'
|
vim.o.completeopt = 'menuone,noselect'
|
||||||
|
|
||||||
|
-- NOTE: You should make sure your terminal supports this
|
||||||
|
vim.o.termguicolors = true
|
||||||
|
|
||||||
-- [[ Basic Keymaps ]]
|
-- [[ Basic Keymaps ]]
|
||||||
-- Set <space> 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 = ' '
|
|
||||||
|
|
||||||
-- Keymaps for better default experience
|
-- Keymaps for better default experience
|
||||||
-- See `:help vim.keymap.set()`
|
-- See `:help vim.keymap.set()`
|
||||||
|
@ -151,39 +246,6 @@ vim.api.nvim_create_autocmd('TextYankPost', {
|
||||||
pattern = '*',
|
pattern = '*',
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Set lualine as statusline
|
|
||||||
-- See `:help lualine.txt`
|
|
||||||
require('lualine').setup {
|
|
||||||
options = {
|
|
||||||
icons_enabled = false,
|
|
||||||
theme = 'onedark',
|
|
||||||
component_separators = '|',
|
|
||||||
section_separators = '',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Enable Comment.nvim
|
|
||||||
require('Comment').setup()
|
|
||||||
|
|
||||||
-- Enable `lukas-reineke/indent-blankline.nvim`
|
|
||||||
-- See `:help indent_blankline.txt`
|
|
||||||
require('indent_blankline').setup {
|
|
||||||
char = '┊',
|
|
||||||
show_trailing_blankline_indent = false,
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Gitsigns
|
|
||||||
-- See `:help gitsigns.txt`
|
|
||||||
require('gitsigns').setup {
|
|
||||||
signs = {
|
|
||||||
add = { text = '+' },
|
|
||||||
change = { text = '~' },
|
|
||||||
delete = { text = '_' },
|
|
||||||
topdelete = { text = '‾' },
|
|
||||||
changedelete = { text = '~' },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
-- [[ Configure Telescope ]]
|
-- [[ Configure Telescope ]]
|
||||||
-- See `:help telescope` and `:help telescope.setup()`
|
-- See `:help telescope` and `:help telescope.setup()`
|
||||||
require('telescope').setup {
|
require('telescope').setup {
|
||||||
|
@ -209,7 +271,7 @@ vim.keymap.set('n', '<leader>/', function()
|
||||||
winblend = 10,
|
winblend = 10,
|
||||||
previewer = false,
|
previewer = false,
|
||||||
})
|
})
|
||||||
end, { desc = '[/] Fuzzily search in current buffer]' })
|
end, { desc = '[/] Fuzzily search in current buffer' })
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' })
|
vim.keymap.set('n', '<leader>sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' })
|
||||||
vim.keymap.set('n', '<leader>sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' })
|
vim.keymap.set('n', '<leader>sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' })
|
||||||
|
@ -221,7 +283,10 @@ vim.keymap.set('n', '<leader>sd', require('telescope.builtin').diagnostics, { de
|
||||||
-- See `:help nvim-treesitter`
|
-- See `:help nvim-treesitter`
|
||||||
require('nvim-treesitter.configs').setup {
|
require('nvim-treesitter.configs').setup {
|
||||||
-- Add languages to be installed here that you want installed for treesitter
|
-- Add languages to be installed here that you want installed for treesitter
|
||||||
ensure_installed = { 'c', 'cpp', 'go', 'lua', 'python', 'rust', 'typescript', 'help', 'vim' },
|
ensure_installed = { 'c', 'cpp', 'go', 'lua', 'python', 'rust', 'tsx', 'typescript', 'help', 'vim' },
|
||||||
|
|
||||||
|
-- Autoinstall languages that are not installed. Defaults to false (but you can change for yourself!)
|
||||||
|
auto_install = false,
|
||||||
|
|
||||||
highlight = { enable = true },
|
highlight = { enable = true },
|
||||||
indent = { enable = true, disable = { 'python' } },
|
indent = { enable = true, disable = { 'python' } },
|
||||||
|
@ -231,7 +296,7 @@ require('nvim-treesitter.configs').setup {
|
||||||
init_selection = '<c-space>',
|
init_selection = '<c-space>',
|
||||||
node_incremental = '<c-space>',
|
node_incremental = '<c-space>',
|
||||||
scope_incremental = '<c-s>',
|
scope_incremental = '<c-s>',
|
||||||
node_decremental = '<c-backspace>',
|
node_decremental = '<M-space>',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
textobjects = {
|
textobjects = {
|
||||||
|
@ -343,7 +408,7 @@ local servers = {
|
||||||
-- rust_analyzer = {},
|
-- rust_analyzer = {},
|
||||||
-- tsserver = {},
|
-- tsserver = {},
|
||||||
|
|
||||||
sumneko_lua = {
|
lua_ls = {
|
||||||
Lua = {
|
Lua = {
|
||||||
workspace = { checkThirdParty = false },
|
workspace = { checkThirdParty = false },
|
||||||
telemetry = { enable = false },
|
telemetry = { enable = false },
|
||||||
|
@ -353,7 +418,7 @@ local servers = {
|
||||||
|
|
||||||
-- Setup neovim lua configuration
|
-- Setup neovim lua configuration
|
||||||
require('neodev').setup()
|
require('neodev').setup()
|
||||||
--
|
|
||||||
-- nvim-cmp supports additional completion capabilities, so broadcast that to servers
|
-- nvim-cmp supports additional completion capabilities, so broadcast that to servers
|
||||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||||
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
|
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
|
||||||
|
@ -378,13 +443,12 @@ mason_lspconfig.setup_handlers {
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Turn on lsp status information
|
|
||||||
require('fidget').setup()
|
|
||||||
|
|
||||||
-- nvim-cmp setup
|
-- nvim-cmp setup
|
||||||
local cmp = require 'cmp'
|
local cmp = require 'cmp'
|
||||||
local luasnip = require 'luasnip'
|
local luasnip = require 'luasnip'
|
||||||
|
|
||||||
|
luasnip.config.setup {}
|
||||||
|
|
||||||
cmp.setup {
|
cmp.setup {
|
||||||
snippet = {
|
snippet = {
|
||||||
expand = function(args)
|
expand = function(args)
|
||||||
|
@ -394,7 +458,7 @@ cmp.setup {
|
||||||
mapping = cmp.mapping.preset.insert {
|
mapping = cmp.mapping.preset.insert {
|
||||||
['<C-d>'] = cmp.mapping.scroll_docs(-4),
|
['<C-d>'] = cmp.mapping.scroll_docs(-4),
|
||||||
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
||||||
['<C-Space>'] = cmp.mapping.complete(),
|
['<C-Space>'] = cmp.mapping.complete {},
|
||||||
['<CR>'] = cmp.mapping.confirm {
|
['<CR>'] = cmp.mapping.confirm {
|
||||||
behavior = cmp.ConfirmBehavior.Replace,
|
behavior = cmp.ConfirmBehavior.Replace,
|
||||||
select = true,
|
select = true,
|
||||||
|
|
5
lua/custom/plugins/init.lua
Normal file
5
lua/custom/plugins/init.lua
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
-- You can add your own plugins here or in other files in this directory!
|
||||||
|
-- I promise not to create any merge conflicts in this directory :)
|
||||||
|
--
|
||||||
|
-- See the kickstart.nvim README for more information
|
||||||
|
return {}
|
74
lua/kickstart/plugins/autoformat.lua
Normal file
74
lua/kickstart/plugins/autoformat.lua
Normal file
|
@ -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,
|
||||||
|
}
|
85
lua/kickstart/plugins/debug.lua
Normal file
85
lua/kickstart/plugins/debug.lua
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
-- 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'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',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
-- You can provide additional configuration to the handlers,
|
||||||
|
-- see mason-nvim-dap README for more information
|
||||||
|
require('mason-nvim-dap').setup_handlers()
|
||||||
|
|
||||||
|
-- Basic debugging keymaps, feel free to change to your liking!
|
||||||
|
vim.keymap.set('n', '<F5>', dap.continue)
|
||||||
|
vim.keymap.set('n', '<F1>', dap.step_into)
|
||||||
|
vim.keymap.set('n', '<F2>', dap.step_over)
|
||||||
|
vim.keymap.set('n', '<F3>', dap.step_out)
|
||||||
|
vim.keymap.set('n', '<leader>b', dap.toggle_breakpoint)
|
||||||
|
vim.keymap.set('n', '<leader>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 = '⏹',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
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,
|
||||||
|
}
|
Loading…
Reference in a new issue