summary refs log tree commit diff
path: root/.vim/init.lua
diff options
context:
space:
mode:
Diffstat (limited to '.vim/init.lua')
-rw-r--r--.vim/init.lua106
1 files changed, 106 insertions, 0 deletions
diff --git a/.vim/init.lua b/.vim/init.lua
new file mode 100644
index 0000000..419bf0b
--- /dev/null
+++ b/.vim/init.lua
@@ -0,0 +1,106 @@
+local cmd = vim.cmd
+local fn = vim.fn
+local g = vim.g
+local o = vim.o
+
+g.mapleader = ' ' -- <leader> key to <space>
+g.maplocalleader = '\\'
+
+require('plugins')
+require('hardmode')
+local u = require('utils')
+
+-- OPTIONS -- {{{
+cmd('set clipboard+=unnamedplus')
+u.opt('o', 'shiftround', true)
+u.opt('o', 'termguicolors', true)
+u.opt('o', 'incsearch', true)
+u.opt('o', 'inccommand', 'split')
+u.opt('o', 'smartcase', true)
+u.opt('o', 'hidden', true)
+u.opt('w', 'list', true)
+u.opt('w', 'number', true)
+u.opt('w', 'wrap', true)
+u.opt('o', 'scrolloff', 3)
+cmd('set listchars+=trail:¬')
+u.opt('o', 'showbreak', '↪ ')
+u.opt('b', 'textwidth', 80) -- TODO see if this is annoying
+u.opt('w', 'colorcolumn', '+1') -- depends on 'textwidth'
+u.opt('w', 'foldenable', true)
+u.opt('w', 'foldlevel', 0)
+u.opt('w', 'foldmethod', 'marker')
+u.opt('o', 'fillchars', 'fold:─')
+u.opt('o', 'complete', '.,w,b,u')
+u.opt('o', 'completeopt', 'menuone,noinsert,noselect,preview')
+cmd('set shortmess+=c')
+u.opt('w', 'statusline', '%!luaeval("statusline()")')
+u.opt('o', 'cmdheight', 1)
+u.opt('o', 'showmode', true)
+u.opt('o', 'showcmd', false)
+u.opt('o', 'laststatus', 2)
+u.opt('o', 'ruler', true)
+u.opt('o', 'mouse', 'a')
+u.opt('o', 'spell', false)
+u.opt('o', 'lazyredraw', true)
+u.opt('o', 'backspace', 'indent,eol,start')
+u.opt('o', 'undolevels', 1000)
+u.opt('o', 'updatetime', 300)
+u.opt('o', 'signcolumn', 'yes')
+-- }}}
+
+-- COLORS -- {{{
+g.nihoncolors_transparent_background = true
+cmd('colorscheme nihoncolors')
+-- }}}
+
+-- KEY BINDS -- {{{
+u.map('n', 'Q', ':quitall', { silent = false })
+u.map('n', 'gb', ':bnext<CR>')
+u.map('n', 'gB', ':bprevious<CR>')
+-- terminal
+u.map('t', '<ESC>', '<C-\\><C-n>')
+u.map('t', '<Leader>qq', '<C-\\><C-n>:bdelete!<CR>')
+-- completion
+u.map('i', '<C-n>', 'pumvisible() ? "\\<C-n>" : completion#trigger_completion()', { expr = true })
+u.map('i', '<C-p>', 'pumvisible() ? "\\<C-n>" : completion#trigger_completion()', { expr = true })
+u.map('i', '<C-j>', '<cmd>lua require("completion.source").nextCompletion()<CR>')
+u.map('i', '<C-k>', '<cmd>lua require("completion.source").prevCompletion()<CR>')
+-- }}}
+
+-- AUTO GROUPS -- {{{
+u.augroup('yank_highlight', {{'TextYankPost', '*', 'silent! lua require("vim.highlight").on_yank()'}})
+u.augroup('diagnostics', {{'CursorHold', '*', 'lua vim.lsp.diagnostic.show_line_diagnostics()'}})
+-- }}}
+
+-- USER COMMANDS -- {{{
+u.def('BalenaDiagnosticsFold', 'call balena_diagnostics_fold#apply()')
+u.def('SortLine', 'call setline(".", join(sort(split(getline("."), " ")), " "))')
+-- }}}
+
+-- STATUS LINE -- {{{
+vim.api.nvim_command('hi StatusLineInsert guifg=#00ffff guibg=None')
+vim.api.nvim_command('hi StatusLineCommand guifg=#ff3300 guibg=None')
+statusline = function()
+	local sl = ''
+	-- left
+	sl = sl .. statusline_color(vim.fn.mode())
+	sl = sl .. [[ ⢷ %<%F %-m %-r ]]
+	-- right
+	sl = sl .. [[ %=  %l:%v %y ]]
+	return sl
+end
+statusline_color = function(mode)
+	if mode == 'i' then
+		return '%#StatusLineInsert#'
+	elseif mode == 'c' then
+		return '%#StatusLineCommand#'
+	elseif mode == 'v' or mode == 'V' or mode == '' then
+		return '%#Visual#'
+	elseif mode == 'R' or mode == 'Rv' then
+		return '%1*'
+		-- return '%#Include#'
+	else
+		return '%1*'
+	end
+end
+-- }}}