neovim:init.vim->init.lua and misc changes

This commit is contained in:
2021-05-29 10:17:10 +05:30
parent 94ed8dba17
commit 28cda002d5
28 changed files with 537 additions and 332 deletions

View File

@@ -2,53 +2,30 @@
{
programs.neovim = {
enable = true;
package = pkgs.neovim-nightly;
defaultEditor = true;
configure = {
customRC = ''
"theme
let g:gruvbox_italic=1
let g:gruvbox_contrast_dark="hard"
let g:gruvbox_contrast_light="hard"
set background=dark
colorscheme gruvbox
'' +
builtins.readFile ./nvim/init.vim +
builtins.readFile ./nvim/utils.vim +
''
"Floaterm
let g:floaterm_keymap_toggle = '<F1>'
let g:floaterm_keymap_next = '<F2>'
let g:floaterm_keymap_prev = '<F3>'
let g:floaterm_keymap_new = '<F4>'
let g:floaterm_gitcommit='floaterm'
let g:floaterm_autoinsert=1
let g:floaterm_width=0.8
let g:floaterm_height=0.8
let g:floaterm_wintitle=0
let g:floaterm_shell="/usr/bin/env zsh"
'' +
/* ''
"Colorizer
packadd! nvim-colorizer.lua
lua require'colorizer'.setup()
'' +
*/ ''
"closetag
let g:closetag_filenames = "*.html,*.xhtml,*.phtml,*.js,*.erb,*.jsx"
let g:closetag_xhtml_filenames = '*.xhtml,*.jsx,*.js,*.erb'
let g:closetag_emptyTags_caseSensitive = 1
let g:closetag_shortcut = '>'
let g:closetag_close_shortcut = '<leader>>'
'' +
''
"nerdcommenter
map <C-c> <plug>NERDCommenterToggle
map <C-d> <plug>NERDCommenterSexy
'';
packages.myVimPackage = with pkgs.vimPlugins; {
start = [ auto-pairs vim-floaterm vim-rooter vim-polyglot gruvbox vim-closetag vim-floaterm nerdcommenter];
};
customRC ="lua << EOF\n" + builtins.readFile ./nvim/init.lua + "\nEOF\n";
packages.myVimPackage = with pkgs.vimPlugins; {
start = [
nvim-colorizer-lua
auto-pairs
vim-floaterm
vim-rooter
vim-closetag
vim-floaterm
nerdcommenter
vim-startify
nvim-compe
nvim-lspconfig
barbar-nvim
nvim-web-devicons
vim-polyglot
(gruvbox.overrideAttrs (oa: { patches = [ ./nvim/gruvbox.patch ]; }))
# (gruvbox.overrideAttrs (oa: { src = pkgs.fetchFromGitHub{} }))
];
};
};
}
};
}

View File

@@ -0,0 +1,11 @@
--- a/colors/gruvbox.vim 2021-05-28 01:06:40.516914044 +0530
+++ b/colors/gruvbox.vim 2021-05-28 01:07:38.279375184 +0530
@@ -588,7 +588,7 @@
" try, catch, throw
hi! link Exception GruvboxRed
" sizeof, "+", "*", etc.
-hi! link Operator Normal
+hi! link Operator GruvboxFg1
" Any other keyword
hi! link Keyword GruvboxRed

287
configs/nvim/init.lua Normal file
View File

@@ -0,0 +1,287 @@
require'lspconfig'.rust_analyzer.setup{}
require'lspconfig'.tsserver.setup{}
require'lspconfig'.clangd.setup{}
require'lspconfig'.tsserver.setup{}
require'lspconfig'.jedi_language_server.setup{}
require'lspconfig'.purescriptls.setup{}
require'colorizer'.setup{}
local comm = vim.api.nvim_command
local bind = vim.api.nvim_set_keymap
local set = function(a) comm("set " .. a) end
local setvar = vim.api.nvim_set_var
local getvar = vim.api.nvim_get_var
function hi(hi_var, hi_value)
comm("hi " .. hi_var .. " " .. hi_value)
end
--SETTINGS
comm("syntax enable")
comm("syntax sync minlines=100")
set("cmdheight=1")
set("modifiable")
set("cursorline")
set("hidden")
set("encoding=utf-8")
set("pumheight=10")
set("fileencoding=utf-8")
set("ruler")
set("cmdheight=1")
set("mouse=a")
set("splitbelow")
set("splitright")
set("nowrap")
set("conceallevel=0")
set("tabstop=4")
set("shiftwidth=4")
set("smarttab")
set("expandtab")
set("smartindent")
set("autoindent")
set("number")
set("relativenumber")
set("showtabline=2")
set("updatetime=300")
set("lazyredraw")
set("timeoutlen=100")
set("clipboard=unnamedplus")
--KEYBINDS
--Colemak-DH bind fuction for hjkl [mnei])
local function cdhbind(a, b)
bind('n', a:lower(), b:lower(), { noremap = true})
bind('n', a:upper(), b:upper(), { noremap = true})
bind('o', a:lower(), b:lower(), { noremap = true})
bind('o', a:upper(), b:upper(), { noremap = true})
bind('x', a:lower(), b:lower(), { noremap = true})
bind('x', a:upper(), b:upper(), { noremap = true})
end
cdhbind('m', 'h')
cdhbind('n', 'j')
cdhbind('e', 'k')
cdhbind('i', 'l')
cdhbind('h', 'i')
cdhbind('j', 'm')
cdhbind('k', 'n')
cdhbind('l', 'e')
bind('n', "<M-s>", ":w<CR>", {noremap=true})
bind('n', "<M-n>", ":resize -2<CR>", {noremap=true, silent=true})
bind('n', "<M-e>", ":resize +2<CR>", {noremap=true, silent=true})
bind('n', "<M-m>", ":vertical resize -2<CR>", {noremap=true, silent=true})
bind('n', "<M-i>", ":vertical resize +2<CR>", {noremap=true, silent=true})
bind('v', '<', "<gv", {noremap=true})
bind('v', '>', ">gv", {noremap=true})
bind('n', "<C-q>", "<C-w>q", {noremap=true})
bind('n', "<C-m>", "<C-w>h", {noremap=true})
bind('n', "<C-n>", "<C-w>j", {noremap=true})
bind('n', "<C-e>", "<C-w>k", {noremap=true})
bind('n', "<C-i>", "<C-w>l", {noremap=true})
--RUN AND REPL (using vim-floaterm)
function _G.CompileRun()
local file = vim.fn.expand('%:p')
local noext = vim.fn.expand('%:p:r')
local commandMap = {
['java'] = 'java ' .. file,
['lisp'] = 'clisp ' .. file,
['python'] = 'python3 ' .. file,
['c'] = 'gcc ' .. file .. ' -o ' .. noext .. ' && ' .. noext .. ' && rm ' .. noext,
['rust'] = 'rustc ' .. file .. ' -o ' .. noext .. ' && ' .. noext .. ' && rm ' .. noext,
['cpp'] = 'g++ -std=c++17 ' .. file .. ' -o ' .. noext .. ' && ' .. noext .. ' && rm ' .. noext,
['haskell'] = 'ghc -dynamic ' .. file .. ' && ' .. noext .. ' && rm ' .. noext .. ' ' .. noext .. '.o ' .. noext .. '.hi',
['sh'] = 'sh ' .. file,
['javascript']= 'node ' .. file,
['typescript']= 'tsc ' .. file .. ' && node ' .. noext .. '.js && rm ' .. noext .. '.js'
}
filetype = vim.api.nvim_buf_get_option(0, "filetype")
if commandMap[filetype] ~= nil then comm("FloatermNew --autoclose=0 " .. commandMap[filetype]) end
end
function _G.Repl()
local file = vim.fn.expand('%:p')
local commandMap = {
['lisp'] = 'clisp',
['python'] = 'python3',
['haskell'] = 'ghci ' .. file,
['sh'] = 'sh',
['javascript']= 'node',
['typescript']= 'ts-node',
['nix'] = 'nix repl',
['lua'] = 'lua'
}
filetype = vim.api.nvim_buf_get_option(0, "filetype")
if commandMap[filetype] ~= nil then comm("FloatermNew " .. commandMap[filetype]) end
end
bind('n', "<F5>", ":call v:lua.CompileRun()<CR>", {silent=true})
bind('n', "<F6>", ":call v:lua.Repl()<CR>", {silent=true})
--PLUGINS CONFIG
--gruvbox
vim.g.gruvbox_italic=1
vim.g.gruvbox_contrast_dark="hard"
vim.g.gruvbox_contrast_light="hard"
set("background=dark")
comm("colorscheme gruvbox")
--floaterm
vim.g.floaterm_keymap_toggle = '<F1>'
vim.g.floaterm_keymap_next = '<F2>'
vim.g.floaterm_keymap_prev = '<F3>'
vim.g.floaterm_keymap_new = '<F4>'
vim.g.floaterm_gitcommit='floaterm'
vim.g.floaterm_autoinsert=1
vim.g.floaterm_width=1.0
vim.g.floaterm_height=0.3
vim.g.floaterm_shell="/usr/bin/env zsh"
vim.g.floaterm_wintype = "split"
--closetag
vim.g.closetag_filenames = "*.html,*.xhtml,*.phtml,*.js,*.erb,*.jsx"
vim.g.closetag_xhtml_filenames = "*.xhtml,*.jsx,*.js,*.erb"
vim.g.closetag_emptyTags_caseSensitive = 1
vim.g.closetag_shortcut = '>'
--nerdcommenter
bind('n',"<C-c>","<plug>NERDCommenterToggle", {noremap=true, silent=true})
bind('n',"<C-d>","<plug>NERDCommenterSexy", {noremap=true, silent=true})
--barbar
bind('n', "<M-,>", ":BufferPrevious<CR>", {silent=true, noremap=true})
bind('n', "<M-.>", ":BufferNext<CR>", {silent=true, noremap=true})
bind('n', "<M-<>", ":BufferMovePrevious<CR>", {silent=true, noremap=true})
bind('n', "<M->>", ":BufferMoveNext<CR>", {silent=true, noremap=true})
for i = 1,8,1
do
bind('n', string.format("<M-%d>", i), string.format(":BufferGoto %d<CR>", i), {silent=true, noremap=true})
end
--lsp and compe stuff i got from various places
vim.api.nvim_buf_set_keymap(0, 'n', 'gD', '<Cmd>lua vim.lsp.buf.declaration()<CR>', {silent=true, noremap=true})
vim.api.nvim_buf_set_keymap(0, 'n', 'gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', {silent=true, noremap=true})
vim.api.nvim_buf_set_keymap(0, 'n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>', {silent=true, noremap=true})
vim.api.nvim_buf_set_keymap(0, 'n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', {silent=true, noremap=true})
vim.api.nvim_buf_set_keymap(0, 'n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', {silent=true, noremap=true})
vim.api.nvim_buf_set_keymap(0, 'n', "<space>f", "<cmd>lua vim.lsp.buf.formatting()<CR>", {silent=true, noremap=true})
require'compe'.setup {
enabled = true;
autocomplete = true;
debug = false;
min_length = 1;
preselect = 'enable';
throttle_time = 80;
source_timeout = 200;
incomplete_delay = 400;
max_abbr_width = 100;
max_kind_width = 100;
max_menu_width = 100;
documentation = true;
source = {
path = true;
buffer = true;
nvim_lsp = true;
calc = true;
spell = true;
treesitter = true;
nvim_lua = true;
};
}
local t = function(str)
return vim.api.nvim_replace_termcodes(str, true, true, true)
end
local check_back_space = function()
local col = vim.fn.col('.') - 1
if col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') then
return true
else
return false
end
end
-- Use (s-)tab to:
--- move to prev/next item in completion menuone
--- jump to prev/next snippet's placeholder
_G.tab_complete = function()
if vim.fn.pumvisible() == 1 then
return t "<C-n>"
elseif check_back_space() then
return t "<Tab>"
else
return vim.fn['compe#complete']()
end
end
_G.s_tab_complete = function()
if vim.fn.pumvisible() == 1 then
return t "<C-p>"
elseif vim.fn.call("vsnip#jumpable", {-1}) == 1 then
return t "<Plug>(vsnip-jump-prev)"
else
return t "<S-Tab>"
end
end
vim.api.nvim_set_keymap("i", "<Tab>", "v:lua.tab_complete()", {expr = true, silent = true})
vim.api.nvim_set_keymap("s", "<Tab>", "v:lua.tab_complete()", {expr = true, silent = true})
vim.api.nvim_set_keymap("i", "<S-Tab>", "v:lua.s_tab_complete()", {expr = true, silent = true})
vim.api.nvim_set_keymap("s", "<S-Tab>", "v:lua.s_tab_complete()", {expr = true, silent = true})
set("shortmess+=c")
--STATUSLINE
set("noruler")
set("laststatus=2")
local function mode()
local mode_map = {
['n'] = 'normal ',
['v'] = 'visual ',
['V'] = 'v·line ',
[''] = 'v·block ',
['s'] = 'select ',
['S'] = 's·line ',
[''] = 's·block ',
['i'] = 'insert ',
['Rv'] = 'v·replace ',
['c'] = 'command ',
['!'] = 'shell ',
['t'] = 'terminal '
}
local m = vim.api.nvim_get_mode().mode
if mode_map[m] == nil then return m end
return mode_map[m]
end
hi("Light", "guibg=#fbf1c7 guifg=#1d2021")
hi("Dark", "guibg=#1d2021 guifg=#fbf1c7")
hi("Gray", "guifg=#fbf1c7 guibg=#665c54")
local function git()
local branch = io.popen([[git rev-parse --abbrev-ref HEAD 2>/dev/null | tr -d '\n']]):read("*a")
return string.len(branch) > 0 and ''.. branch or ''
end
local statusline = {
'%#Light# ',
mode():upper() .. ' ',
'%#Dark#',
string.len(git()) > 0 and ' ' .. git() .. ' ' or '',
'%#Gray# ',
'%f ',
'%#Light#',
'%=',
'%#Dark# ',
'%y ',
'%#Light# ',
'%p%% ',
'',
'%l/%L ',
'',
'%c '
}
vim.o.statusline = table.concat(statusline)
vim.api.nvim_set_option("termguicolors", true)

View File

@@ -1,129 +0,0 @@
"SETTINGS
let g:mapleader = "\<Space>"
syntax enable
set modifiable
set cursorline
set hidden
set nowrap
set encoding=utf-8
set pumheight=10
set fileencoding=utf-8
set ruler
set cmdheight=2
set iskeyword+=-
set mouse=a
set splitbelow
set splitright
set t_Co=256
set conceallevel=0
set tabstop=4
set shiftwidth=4
set smarttab
set expandtab
set smartindent
set autoindent
set number
set relativenumber
set background=dark
syntax sync minlines=100
set showtabline=2
set noshowmode
set nobackup
set nowritebackup
set updatetime=300
set lazyredraw
set timeoutlen=100
set formatoptions-=cro
set clipboard=unnamedplus
au! BufWritePost $MYVIMRC source %
cmap w!! w !sudo tee %
"MAPPINGS
inoremap <S-Space> <ESC>
nnoremap m h|xnoremap m h|onoremap m h|
nnoremap n j|xnoremap n j|onoremap n j|
nnoremap e k|xnoremap e k|onoremap e k|
nnoremap i l|xnoremap i l|onoremap i l|
nnoremap M H|xnoremap M H|onoremap M H|
nnoremap N J|xnoremap N J|onoremap N J|
nnoremap E K|xnoremap E K|onoremap E K|
nnoremap I L|xnoremap I L|onoremap I L|
nnoremap h i|xnoremap h i|onoremap h i|
nnoremap H I|xnoremap H I|onoremap H I|
nnoremap k n|xnoremap k n|onoremap k n|
nnoremap K N|xnoremap K N|onoremap K N|
nnoremap j m|xnoremap j m|onoremap j m|
nnoremap J M|xnoremap J M|onoremap J M|
nnoremap l e|xnoremap l e|onoremap l e|
nnoremap L E|xnoremap L E|onoremap L E|
nnoremap <C-s> :w<CR>
nnoremap <M-n> :resize -2<CR>
nnoremap <M-e> :resize +2<CR>
nnoremap <M-m> :vertical resize -2<CR>
nnoremap <M-i> :vertical resize +2<CR>
nnoremap <TAB> :bnext<CR>
nnoremap <S-TAB> :bprevious<CR>
vnoremap < <gv
vnoremap > >gv
nnoremap <C-q> :bd!<CR>
nnoremap <C-x> :bd#<CR>
tnoremap <C-q> :bd!<CR>
nnoremap <C-M> <C-W>h|xnoremap <C-M> <C-W>h|
nnoremap <C-N> <C-W>j|xnoremap <C-N> <C-W>j|
nnoremap <C-E> <C-W>k|xnoremap <C-E> <C-W>k|
nnoremap <C-I> <C-W>l|xnoremap <C-I> <C-W>l|
"STATUSLINE
"let right=""
"let left=""
set laststatus=2
set statusline=
set statusline+=%1*
set statusline+=\ %{ModeBruh()}\
set statusline+=%2*\%{GitBruh()}\
set statusline+=%3*\ %f\
set statusline+=%1*
set statusline+=%=
set statusline+=%3*\ %{strlen(&fenc)?&fenc:'none'}\
set statusline+=%2*\ %y\
let bruh="%  "
let bruh1="  "
set statusline+=%1*\ %p%{bruh}%l/%L%{bruh1}%c\
hi User1 guibg=#fbf1c7 guifg=#1d2021
hi User2 guibg=#1d2021 guifg=#fbf1c7
hi User3 guifg=#fbf1c7 guibg=#665c54
function! ModeBruh()
let l:mode=mode()
if l:mode==#"n"
return "NORMAL"
elseif l:mode==?"v"
return "VISUAL"
elseif l:mode==#"i"
return "INSERT"
elseif l:mode==#"R"
return "REPLACE"
elseif l:mode==?"s"
return "SELECT"
elseif l:mode==#"t"
return "TERMINAL"
elseif l:mode==#"c"
return "COMMAND"
elseif l:mode==#"!"
return "SHELL"
endif
endfunction
function! GitBruh()
let l:branchname = GitBranch()
return strlen(l:branchname) > 0?'  '.l:branchname.'':''
endfunction
function! GitBranch()
return system("git rev-parse --abbrev-ref HEAD 2>/dev/null | tr -d '\n'")
endfunction
set termguicolors

View File

@@ -1,19 +0,0 @@
" I got this part of the config from Michael Lan Source = https://www.youtube.com/watch?v=I4Rz0qoWYBl
function! TermWrapper(command) abort
if !exists('g:split_term_style') | let g:split_term_style = 'vertical' | endif
if g:split_term_style ==# 'vertical'
let buffercmd = 'vnew'
elseif g:split_term_style ==# 'horizontal'
let buffercmd = 'new'
else
echoerr 'ERROR! g:split_term_style is not a valid value (must be ''horizontal'' or ''vertical'' but is currently set to ''' . g:split_term_style . ''')'
throw 'ERROR! g:split_term_style is not a valid value (must be ''horizontal'' or ''vertical'')'
endif
exec buffercmd
exec 'term ' . a:command
exec 'startinsert'
endfunction
command! -nargs=0 CompileAndRun call TermWrapper(printf('g++ -std=c++17 %s && ./a.out', expand('%')))
autocmd FileType cpp nnoremap <F5> :CompileAndRun<CR>
let g:split_term_style = 'vertical'