summaryrefslogtreecommitdiffstats
path: root/dotfiles
diff options
context:
space:
mode:
authorMinijackson <minijackson@riseup.net>2021-05-12 20:54:32 +0200
committerMinijackson <minijackson@riseup.net>2021-05-12 20:56:46 +0200
commit13bbcd5a5feffa4a91f4e4068e68e9baf2f90223 (patch)
tree8d5937668be0f3b28c11f5ce3f35d2ad8fd85318 /dotfiles
parent829f633426f4a775dbb20c29d0bfbd791608cb6c (diff)
downloadnixos-config-reborn-13bbcd5a5feffa4a91f4e4068e68e9baf2f90223.tar.gz
nixos-config-reborn-13bbcd5a5feffa4a91f4e4068e68e9baf2f90223.zip
vim: better config with lua, with some dev config
Diffstat (limited to 'dotfiles')
-rw-r--r--dotfiles/vim-dev.lua61
-rw-r--r--dotfiles/vim.lua223
-rw-r--r--dotfiles/vimrc.vim139
3 files changed, 284 insertions, 139 deletions
diff --git a/dotfiles/vim-dev.lua b/dotfiles/vim-dev.lua
new file mode 100644
index 0000000..6b78022
--- /dev/null
+++ b/dotfiles/vim-dev.lua
@@ -0,0 +1,61 @@
1local lspconfig = require("lspconfig")
2
3function on_attach(client, bufnr)
4 local function buf_set_keymap(...)
5 vim.api.nvim_buf_set_keymap(bufnr, ...)
6 end
7
8 local opts = { noremap = true, silent = true }
9
10 buf_set_keymap('n', 'gD', '<Cmd>lua vim.lsp.buf.declaration()<CR>', opts)
11 buf_set_keymap('n', 'gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', opts)
12 buf_set_keymap('n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>', opts)
13
14 buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
15
16 buf_set_keymap('n', '<leader>sa', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
17 buf_set_keymap('n', '<leader>se', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>', opts)
18 buf_set_keymap('n', '<leader>sl', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>', opts)
19 buf_set_keymap('n', '<leader>sr', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
20
21 buf_set_keymap('n', '[d', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts)
22 buf_set_keymap('n', ']d', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts)
23
24 -- Capability specific
25
26 -- print(vim.inspect(client.resolved_capabilities))
27
28 if client.resolved_capabilities.document_formatting then
29 buf_set_keymap("n", "<leader>sf", "<cmd>lua vim.lsp.buf.formatting()<CR>", opts)
30 end
31 if client.resolved_capabilities.document_range_formatting then
32 buf_set_keymap("v", "<leader>sf", "<cmd>lua vim.lsp.buf.range_formatting()<CR>", opts)
33 end
34
35 -- Rust specific
36 buf_set_keymap("n", "<leader>sh", "<cmd>RustToggleInlayHints<CR>", opts)
37
38 require("completion").on_attach()
39end
40
41function setup_lsp_with(servers)
42 for _, server in ipairs(servers) do
43 lspconfig[server].setup {
44 cmd = { vim.g[server .. "_path"] },
45 on_attach = on_attach,
46 }
47 end
48end
49
50setup_lsp_with {
51 "clangd",
52 "elixirls",
53 "pyls",
54}
55
56require("rust-tools").setup {
57 server = {
58 cmd = { vim.g.rust_analyzer_path },
59 on_attach = on_attach,
60 }
61}
diff --git a/dotfiles/vim.lua b/dotfiles/vim.lua
new file mode 100644
index 0000000..1acff0d
--- /dev/null
+++ b/dotfiles/vim.lua
@@ -0,0 +1,223 @@
1-- Options
2----------
3
4vim.o.undofile = true
5vim.o.backup = true
6vim.cmd "set backupdir-=."
7
8vim.o.mouse = "a"
9
10vim.o.ignorecase = true
11vim.o.smartcase = true
12
13vim.o.smartindent = true
14
15vim.o.tabstop = 4
16vim.o.shiftwidth = 4
17
18vim.o.inccommand = "split"
19
20vim.o.scrolloff = 1
21vim.o.sidescrolloff = 5
22
23vim.o.colorcolumn = "80"
24vim.o.cursorline = true
25
26vim.o.title = true
27
28vim.o.wildmode = "longest:full,full"
29vim.o.completeopt = "menu,menuone,preview,noinsert,noselect"
30
31-- Use ripgrep
32vim.o.grepprg = vim.g.ripgrep_path .. " --vimgrep --smart-case"
33vim.o.grepformat = "%f:%l:%c:%m" .. vim.o.grepformat
34
35vim.o.termguicolors = true
36vim.o.background = "dark"
37
38-- Mode already shown by the status line
39vim.o.showmode = false
40
41-- Do not set "trail:-" because it messes up the highlighting
42vim.o.listchars = "tab:│ ,extends:>,precedes:<,nbsp:+"
43vim.wo.list = true
44vim.o.fillchars = "fold:─,vert:│"
45
46-- Leaders
47----------
48
49vim.g.maplocalleader = ","
50vim.g.mapleader = ";"
51
52-- Misc
53-------
54
55-- From neovim#14420
56-- Restores the position of previously opened files
57vim.cmd [[
58 augroup LastCursorPos
59 autocmd!
60 autocmd BufReadPost * if @% !~# "\.git[\/\\]COMMIT_EDITMSG$" && line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
61 augroup end
62]]
63
64-- Highlight yanked text
65vim.cmd "autocmd TextYankPost * silent! lua vim.highlight.on_yank()"
66
67vim.g.tex_flavor = "latex"
68
69vim.cmd "colorscheme gruvbox"
70
71-- Mappings
72-----------
73
74local map = vim.api.nvim_set_keymap
75local mapopts = { noremap = true, silent = true }
76
77vim.fn["camelcasemotion#CreateMotionMappings"] "<LocalLeader>"
78
79map("n", "=of", [[:set <C-R>=(&formatoptions =~ "a") ? 'formatoptions-=a' : 'formatoptions+=a'<CR><CR>]], mapopts)
80
81-- Plugins
82----------
83
84-- Gitsigns
85
86require('gitsigns').setup {
87 keymaps = {
88 noremap = true,
89 buffer = true,
90 silent = true,
91
92 ['n ]c'] = { expr = true, "&diff ? ']c' : '<cmd>lua require\"gitsigns\".next_hunk()<CR>'"},
93 ['n [c'] = { expr = true, "&diff ? '[c' : '<cmd>lua require\"gitsigns\".prev_hunk()<CR>'"},
94
95 ['n <leader>hs'] = '<cmd>lua require"gitsigns".stage_hunk()<CR>',
96 ['n <leader>hu'] = '<cmd>lua require"gitsigns".undo_stage_hunk()<CR>',
97 ['n <leader>hr'] = '<cmd>lua require"gitsigns".reset_hunk()<CR>',
98 ['n <leader>hR'] = '<cmd>lua require"gitsigns".reset_buffer()<CR>',
99 ['n <leader>hp'] = '<cmd>lua require"gitsigns".preview_hunk()<CR>',
100 ['n <leader>hb'] = '<cmd>lua require"gitsigns".blame_line()<CR>',
101
102 -- Text objects
103 ['o ih'] = ':<C-U>lua require"gitsigns".select_hunk()<CR>',
104 ['x ih'] = ':<C-U>lua require"gitsigns".select_hunk()<CR>',
105 }
106}
107
108-- Treesitter
109
110require('nvim-treesitter.configs').setup {
111 highlight = {
112 enable = true,
113 },
114 incremental_selection = {
115 enable = true,
116 keymaps = {
117 init_selection = "gnn",
118 node_incremental = "grn",
119 scope_incremental = "grc",
120 node_decremental = "grm",
121 },
122 },
123 indent = {
124 enable = true,
125 },
126 matchup = {
127 enable = true,
128 },
129 textobjects = {
130 select = {
131 enable = true,
132 keymaps = {
133 -- You can use the capture groups defined in textobjects.scm
134 ["af"] = "@function.outer",
135 ["if"] = "@function.inner",
136 ["ac"] = "@class.outer",
137 ["ic"] = "@class.inner",
138 },
139 },
140
141 move = {
142 enable = true,
143 goto_next_start = {
144 ["]m"] = "@function.outer",
145 ["]]"] = "@class.outer",
146 },
147 goto_next_end = {
148 ["]M"] = "@function.outer",
149 ["]["] = "@class.outer",
150 },
151 goto_previous_start = {
152 ["[m"] = "@function.outer",
153 ["[["] = "@class.outer",
154 },
155 goto_previous_end = {
156 ["[M"] = "@function.outer",
157 ["[]"] = "@class.outer",
158 },
159 },
160 },
161}
162
163vim.o.foldmethod = 'expr'
164vim.o.foldexpr = 'nvim_treesitter#foldexpr()'
165
166-- Completion-nvim
167
168vim.g.completion_chain_complete_list = {
169 default = {
170 {
171 complete_items = { 'lsp', 'ts', 'path', 'snippet', 'buffers', 'tmux', },
172 }
173 },
174}
175
176vim.cmd [[autocmd BufEnter * lua require'completion'.on_attach()]]
177
178local map = vim.api.nvim_set_keymap
179
180vim.g.completion_enable_snippet = "snippets.nvim"
181
182-- Telescope
183
184map("n", "<leader>fb", "<cmd>Telescope buffers<cr>", mapopts)
185map("n", "<leader>ff", "<cmd>Telescope find_files<cr>", mapopts)
186map("n", "<leader>fg", "<cmd>Telescope live_grep<cr>", mapopts)
187map("n", "<leader>fh", "<cmd>Telescope help_tags<cr>", mapopts)
188map("n", "<leader>ft", "<cmd>Telescope treesitter<cr>", mapopts)
189
190-- Lualine
191
192local lsp_status = require('lsp-status')
193lsp_status.config {
194 indicator_errors = "err:",
195 indicator_hint = "hint:",
196 indicator_info = "info:",
197 indicator_ok = "ok",
198 indicator_warnings = "warn:",
199 spinner_frames = {""},
200 status_symbol = "lsp:",
201}
202lsp_status.register_progress()
203
204function LspStatus()
205 if #vim.lsp.buf_get_clients() < 1 then return "" end
206
207 return lsp_status.status()
208end
209
210require("lualine").setup {
211 options = {
212 component_separators = "",
213 icons_enabled = false,
214 section_separators = "",
215 },
216 sections = {
217 lualine_c = {'filename', LspStatus},
218 },
219}
220
221-- Snippets.nvim
222
223require("snippets").use_suggested_mappings()
diff --git a/dotfiles/vimrc.vim b/dotfiles/vimrc.vim
deleted file mode 100644
index a0451c6..0000000
--- a/dotfiles/vimrc.vim
+++ /dev/null
@@ -1,139 +0,0 @@
1" Some global variables are defined in ../vim.nix
2
3" Better default options {{{
4
5set undofile
6set backup
7set backupdir-=.
8
9set mouse=a
10
11set ignorecase
12set smartcase
13
14set smartindent
15set tabstop=4
16set shiftwidth=4
17
18set inccommand=split
19
20set scrolloff=1
21set sidescrolloff=5
22
23set colorcolumn=80
24set cursorline
25
26set modeline
27
28set title
29
30set wildmode=longest:full,full
31
32let g:maplocalleader = ','
33let g:mapleader = ';'
34
35" If previously opened jump to the last position in the file
36au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
37
38let &grepprg = g:ripgrep_path . ' --vimgrep $*'
39let &grepformat = '%f:%l:%c:%m,' . &grepformat
40
41let g:tex_flavor = 'latex'
42
43" }}}
44
45" Colors, Statusline, Tabline, Code display {{{
46
47set termguicolors
48let g:gruvbox_contrast_dark = 'soft'
49let g:gruvbox_italic = 1
50set background=dark
51colorscheme gruvbox
52
53" Doesn't do anything because the tabline gets overwritten by lightline
54"exe 'hi! TabLineSel guifg=' . g:dominant_color
55
56let g:lightline = {
57 \ 'colorscheme': 'gruvbox',
58 \ 'subseparator': { 'left': '|', 'right': '|' },
59 \ 'tab_linesubseparator': { 'left': '|', 'right': '|' },
60 \ }
61
62set noshowmode
63
64" Do not set "trail:-" because it messes up the highlighting
65set listchars=tab:│\ ,extends:>,precedes:<,nbsp:+
66set list
67
68set fillchars=fold:─,vert:│
69
70highlight ExtraWhitespace term=inverse cterm=inverse gui=inverse
71" Show trailing whitespace and spaces before tabs:
72autocmd Syntax * syn match ExtraWhitespace /\s\+$\| \+\ze\t/ containedin=ALL
73
74" }}}
75
76" Mappings {{{
77
78call camelcasemotion#CreateMotionMappings(g:maplocalleader)
79
80nmap =of :set <C-R>=(&formatoptions =~ "a") ? 'formatoptions-=a' : 'formatoptions+=a'<CR><CR>
81
82" }}}
83
84set completefunc=syntaxcomplete#Complete
85set completeopt+=noinsert,noselect
86
87" Deoplete {{{
88
89let g:deoplete#enable_at_startup = 1
90
91" }}}
92
93" Neosnippets {{{
94
95imap <C-k> <Plug>(neosnippet_expand_or_jump)
96smap <C-k> <Plug>(neosnippet_expand_or_jump)
97xmap <C-k> <Plug>(neosnippet_expand_target)
98
99set conceallevel=2
100set concealcursor=nv
101
102" }}}
103
104" CtrlP {{{
105let g:ctrlp_user_command = g:fd_path . ' --type f --color never "" %s'
106let g:ctrlp_use_caching = 0
107" }}}
108
109" LanguageClient {{{
110let g:LanguageClient_loggingFile = stdpath('data') . '/LanguageClient.log'
111let g:LanguageClient_serverStderr = stdpath('data') . '/LanguageServer.log'
112" }}}
113
114" VimWiki {{{
115 " {'path': '~/Documents/Wiki', 'path_html': '~/Documents/Wiki/html'} \
116let g:vimwiki_list = [
117 \ {'path': '~/Documents/Wiki/personal',
118 \ 'path_html': '~/Documents/Wiki/personal/html',
119 \ 'auto_tags': 1},
120 \ {'path': '~/Documents/Wiki/science', 'path_html': '~/Documents/Wiki/science/html', 'auto_tags': 1},
121 \ {'path': '~/Documents/Wiki/work', 'path_html': '~/Documents/Wiki/work/html', 'auto_tags': 1},
122\ ]
123
124let g:vimwiki_global_ext = 0
125
126let g:vimwiki_auto_header = 1
127let g:vimwiki_hl_headers = 1
128let g:vimwiki_hl_cb_checked = 1
129let g:vimwiki_html_header_numbering = 2
130let g:vimwiki_html_header_numbering_sym = '.'
131
132let g:vimwiki_links_header_level = 2
133let g:vimwiki_tags_header_level = 2
134let g:vimwiki_toc_header_level = 2
135
136call deoplete#custom#var('omni', 'input_patterns', { 'vimwiki': '\[\[\w*|\:\w+' })
137" }}}
138
139" vim: fdm=marker