aboutsummaryrefslogtreecommitdiff
path: root/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua306
1 files changed, 185 insertions, 121 deletions
diff --git a/init.lua b/init.lua
index ac291da..13db139 100644
--- a/init.lua
+++ b/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
- is_bootstrap = true
- vim.fn.system { 'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path }
- vim.cmd [[packadd packer.nvim]]
+--[[
+
+=====================================================================
+==================== READ THIS BEFORE CONTINUING ====================
+=====================================================================
+
+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
+vim.opt.rtp:prepend(lazypath)
-require('packer').startup(function(use)
- -- Package manager
- use 'wbthomason/packer.nvim'
+-- 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
- 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',
- requires = {
+ dependencies = {
-- Automatically install LSPs to stdpath for neovim
'williamboman/mason.nvim',
'williamboman/mason-lspconfig.nvim',
-- 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',
},
- }
+ },
- use { -- Autocompletion
+ { -- Autocompletion
'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
- 'nvim-treesitter/nvim-treesitter',
- run = function()
- pcall(require('nvim-treesitter.install').update { with_sync = true })
+ -- 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 = '~' },
+ },
+ },
+ },
+
+ { -- Theme inspired by Atom
+ 'navarasu/onedark.nvim',
+ priority = 1000,
+ config = function()
+ vim.cmd.colorscheme 'onedark'
end,
- }
+ },
- use { -- Additional text objects via treesitter
- 'nvim-treesitter/nvim-treesitter-textobjects',
- after = 'nvim-treesitter',
- }
+ { -- Set lualine as statusline
+ 'nvim-lualine/lualine.nvim',
+ -- See `:help lualine.txt`
+ opts = {
+ options = {
+ icons_enabled = false,
+ theme = 'onedark',
+ component_separators = '|',
+ section_separators = '',
+ },
+ },
+ },
- -- Git related plugins
- use 'tpope/vim-fugitive'
- use 'tpope/vim-rhubarb'
- use 'lewis6991/gitsigns.nvim'
+ { -- 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,
+ },
+ },
- use 'navarasu/onedark.nvim' -- Theme inspired by Atom
- use 'nvim-lualine/lualine.nvim' -- Fancier statusline
- 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
+ -- "gc" to comment visual regions/lines
+ { 'numToStr/Comment.nvim', opts = {} },
-- Fuzzy Finder (files, lsp, etc)
- use { 'nvim-telescope/telescope.nvim', branch = '0.1.x', requires = { 'nvim-lua/plenary.nvim' } }
-
- -- Fuzzy Finder Algorithm which requires local dependencies to be built. Only load if `make` is available
- use { 'nvim-telescope/telescope-fzf-native.nvim', run = 'make', cond = vim.fn.executable 'make' == 1 }
+ { '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. 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
- local has_plugins, plugins = pcall(require, 'custom.plugins')
- if has_plugins then
- plugins(use)
- end
+ { -- Highlight, edit, and navigate code
+ 'nvim-treesitter/nvim-treesitter',
+ dependencies = {
+ 'nvim-treesitter/nvim-treesitter-textobjects',
+ },
+ config = function()
+ pcall(require('nvim-treesitter.install').update { with_sync = true })
+ end,
+ },
- if is_bootstrap then
- require('packer').sync()
- end
-end)
+ -- 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',
--- When we are bootstrapping a configuration, it doesn't
--- make sense to execute the rest of the init.lua.
---
--- You'll need to restart nvim, and then it will work.
-if is_bootstrap then
- print '=================================='
- print ' Plugins are being installed'
- print ' Wait until Packer completes,'
- print ' then restart nvim'
- 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',
-})
+ -- 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
+ --
+ -- An additional note is that if you only copied in the `init.lua`, you can just comment this line
+ -- to get rid of the warning telling you that there are not plugins in `lua/custom/plugins/`.
+ { import = 'custom.plugins' },
+}, {})
-- [[ Setting options ]]
-- See `:help vim.o`
@@ -114,23 +211,21 @@ vim.o.undofile = true
vim.o.ignorecase = true
vim.o.smartcase = true
--- Decrease update time
-vim.o.updatetime = 250
+-- Keep signcolumn on by default
vim.wo.signcolumn = 'yes'
--- Set colorscheme
-vim.o.termguicolors = true
-vim.cmd [[colorscheme onedark]]
+-- 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 ]]
--- 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
-- See `:help vim.keymap.set()`
@@ -151,39 +246,6 @@ vim.api.nvim_create_autocmd('TextYankPost', {
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 ]]
-- See `:help telescope` and `:help telescope.setup()`
require('telescope').setup {
@@ -209,7 +271,7 @@ vim.keymap.set('n', '<leader>/', function()
winblend = 10,
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>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`
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', '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 },
indent = { enable = true, disable = { 'python' } },
@@ -231,7 +296,7 @@ require('nvim-treesitter.configs').setup {
init_selection = '<c-space>',
node_incremental = '<c-space>',
scope_incremental = '<c-s>',
- node_decremental = '<c-backspace>',
+ node_decremental = '<M-space>',
},
},
textobjects = {
@@ -343,7 +408,7 @@ local servers = {
-- rust_analyzer = {},
-- tsserver = {},
- sumneko_lua = {
+ lua_ls = {
Lua = {
workspace = { checkThirdParty = false },
telemetry = { enable = false },
@@ -353,7 +418,7 @@ local servers = {
-- 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)
@@ -378,13 +443,12 @@ mason_lspconfig.setup_handlers {
end,
}
--- Turn on lsp status information
-require('fidget').setup()
-
-- nvim-cmp setup
local cmp = require 'cmp'
local luasnip = require 'luasnip'
+luasnip.config.setup {}
+
cmp.setup {
snippet = {
expand = function(args)
@@ -394,7 +458,7 @@ cmp.setup {
mapping = cmp.mapping.preset.insert {
['<C-d>'] = 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 {
behavior = cmp.ConfirmBehavior.Replace,
select = true,