dotfiles/neovim/init.lua

148 lines
4.1 KiB
Lua
Raw Normal View History

2022-08-14 08:57:04 +00:00
-- Basic settings of vim
2022-08-14 07:48:17 +00:00
vim.cmd([[
set number relativenumber
set tabstop=4 softtabstop=4
set expandtab
set shiftwidth=4
2022-08-14 08:57:04 +00:00
set smartindent
2022-08-14 07:48:17 +00:00
set exrc
2022-08-14 08:57:04 +00:00
set incsearch
2022-08-15 06:45:08 +00:00
set scrolloff=15
2022-08-14 08:57:04 +00:00
set signcolumn=yes
set colorcolumn=80
2022-08-15 06:45:08 +00:00
set background=dark
2022-08-14 08:57:04 +00:00
]])
vim.opt.termguicolors = true
2022-08-15 06:45:08 +00:00
-- some plugins misbehave when we do swap files
vim.opt.swapfile = false
vim.opt.backup = false
vim.opt.undodir = os.getenv("HOME") .. "/.vim/undodir"
vim.opt.undofile = true
vim.opt.completeopt = 'menuone,noselect'
vim.g.mapleader = ' '
-- basic keymaps
vim.keymap.set({'n','v'}, '<Space>', '<Nop>', {silent=true}) -- since we're using space for leader
-- diagnostics (errors/warnings to be shown)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next)
vim.keymap.set('n', '<leader>e', vim.diagnostic.open_float) -- opens diag in box (floating)
vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist)
2022-08-14 07:48:17 +00:00
2022-08-14 08:57:04 +00:00
-- vim-plug
vim.cmd([[
let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim'
if empty(glob(data_dir . '/autoload/plug.vim'))
silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif
2022-08-14 07:48:17 +00:00
]])
2022-08-14 08:57:04 +00:00
local Plug = vim.fn['plug#']
vim.call('plug#begin', '~/.config/nvim/plugged')
2022-08-15 06:45:08 +00:00
-- libs and dependencies
2022-08-14 08:57:04 +00:00
Plug('nvim-lua/plenary.nvim')
2022-08-15 06:45:08 +00:00
-- plugins
Plug('nvim-treesitter/nvim-treesitter') -- language parser engine
Plug('nvim-treesitter/nvim-treesitter-textobjects') -- more text objects
Plug('nvim-telescope/telescope.nvim', {tag = '0.1.0'}) -- fuzzy search thru files
-- cmp: auto-complete/suggestions
Plug('neovim/nvim-lspconfig') -- built-in LSP configurations
Plug('hrsh7th/cmp-nvim-lsp')
Plug('hrsh7th/cmp-buffer')
Plug('hrsh7th/nvim-cmp')
Plug('onsails/lspkind-nvim')
-- DevExp
Plug('numToStr/Comment.nvim') -- "gc" to comment visual regions/lines
Plug('lewis6991/gitsigns.nvim') -- add git info to sign columns
Plug('tpope/vim-fugitive') -- git commands in nvim
-- UI & colorscheme
2022-08-14 08:57:04 +00:00
Plug('gruvbox-community/gruvbox')
2022-08-15 06:45:08 +00:00
Plug('nvim-lualine/lualine.nvim') -- fancy status line
Plug('lukas-reineke/indent-blankline.nvim') -- identation lines on blank lines
-- other
Plug('nvim-treesitter/nvim-treesitter', {run = ':TSUpdate'})
---------
2022-08-14 08:57:04 +00:00
vim.call('plug#end')
2022-08-15 06:45:08 +00:00
-- color, highlighting, UI stuffs
2022-08-14 08:57:04 +00:00
vim.cmd.colorscheme('gruvbox')
2022-08-15 06:45:08 +00:00
-- plugin keymaps
function remap(mode, key_cmd, binded_fn, opts)
opts = opts or {remap = true}
return vim.keymap.set(mode, key_cmd, binded_fn, opts)
end
-- Comment.nvim
require('Comment').setup()
-- lukas-reineke/indent-blankline.nvim
require('indent_blankline').setup {
char = '',
show_trailing_blankline_indent = false,
}
-- telescope
require('telescope').setup {
defaults = {
mappings = {
i = {
['<C-u>'] = false,
['<C-d>'] = false,
}
}
}
}
pcall(require('telescope').load_extension, 'fzf')
remap('n', '<C-p>','<cmd>Telescope<cr>', {desc = 'Open Telescope general search'})
remap('n', '<leader>ff',function()
require('telescope.builtin').find_files()
end, {desc = '[F]ind [F]iles'})
remap('n', '<leader>fg',function()
require('telescope.builtin').live_grep()
end, {desc = '[F]ind by [G]rep'})
remap('n', '<leader>fb',function()
require('telescope.builtin').buffers()
end, {desc = '[F]ind existing [B]uffers'})
remap('n', '<leader>fh',function()
require('telescope.builtin').help_tags()
end, {desc = '[F]ind [H]elp'})
remap('n', '<leader>fd',function()
require('telescope.builtin').live_grep()
end, {desc = '[F]ind [D]iagnostics'})
-- treesitter
require('nvim-treesitter.configs').setup {
ensure_installed = {'lua', 'typescript', 'rust', 'go', 'python'},
highlight = {enable = true},
indent = {enable = true},
incremental_selection = {
enable = true,
keymap = {
init_selection = '<c-space>',
node_incremental = '<c-space>',
node_decremental = '<c-backspace>'
}
},
textobjects = {
select = {
enable = true,
lookahead = true,
keymaps = {
['af'] = '@function.outer',
['if'] = '@function.inner',
['ac'] = '@class.outer',
['ic'] = '@class.inner',
},
},
},
}