summary refs log tree commit diff
path: root/.vim/init.lua
blob: e25acf74717f666e920ddb513429ce4c03b02b00 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
local cmd = vim.cmd
local fn = vim.fn
local g = vim.g
local o = vim.o

local nnoremap = require('astronauta.keymap').nnoremap
local inoremap = require('astronauta.keymap').tnoremap

g.mapleader = ' ' -- <leader> key to <space>
g.maplocalleader = '\\'

require('plugins')
require('hardmode')
local u = require('utils')

-- OPTIONS -- {{{
cmd('set clipboard+=unnamedplus')
u.opt('o', 'exrc', true)
u.opt('o', 'title', true)
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', true)
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')

u.opt('w', 'conceallevel', 2)
u.opt('w', 'concealcursor', 'cv')

u.opt('o', 'expandtab', true)
-- }}}

-- COLORS -- {{{
-- g.nihoncolors_transparent_background = true
cmd('colorscheme lush')
-- }}}

-- KEY BINDS -- {{{
nnoremap { 'Q', function() cmd [[ quitall ]] end, silent = false }
nnoremap { 'gb', function() cmd [[ bnext ]] end }
nnoremap { 'gB', function() cmd [[ bprevious ]] end }

-- terminal
u.map('t', '<ESC>', '<C-\\><C-n>')
u.map('t', '<Leader>qq', '<C-\\><C-n>:bdelete!<CR>')

nnoremap { 'gf', function() require('misc').open_under_cursor('open') end }
nnoremap { 'gF', function() require('misc').open_under_cursor() end }
nnoremap { 'gx', function() require('misc').open_under_cursor('url-launcher') end }
nnoremap { 'gGw', function() require('misc').word_under_cursor(function(s) require('telescope.builtin.files').grep_string({ search = s }) end) end }
nnoremap { 'gGe', function() require('misc').expr_under_cursor(function(s) require('telescope.builtin.files').grep_string({ search = s }) end) end }
nnoremap { 'gGf', function() require('misc').file_under_cursor(function(s) require('telescope.builtin.files').grep_string({ search = s }) end) end }
-- }}}

-- AUTO GROUPS -- {{{
u.augroup2 {
  yank_highlight = {{ 'TextYankPost', '*', 'silent! lua require("vim.highlight").on_yank()' }}
}
-- }}}

-- 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
-- }}}

-- source .nvimrc if it exists
local local_vimrc = vim.fn.getcwd()..'/.nvimrc'
if vim.loop.fs_stat(local_vimrc) then
  vim.cmd('source '..local_vimrc)
end