]> git.friedersdorff.com Git - max/saltfiles.git/blob - states/nvim/files/init.lua
INSTALL NEOVIM
[max/saltfiles.git] / states / nvim / files / init.lua
1 vim.g.mapleader = ','
2 vim.g.maplocalleader = '\\'
3
4 local Plug = vim.fn['plug#']
5 vim.call('plug#begin')
6
7 Plug 'junegunn/vim-plug'
8
9 -- Language Server protocol config
10 Plug 'neovim/nvim-lspconfig'
11
12 -- Colorschemes
13 Plug 'shaunsingh/solarized.nvim'
14
15 -- Syntax Highlighting and folding
16 Plug('nvim-treesitter/nvim-treesitter', {['do'] = ':TSUpdate'})
17
18 Plug 'nvim-lualine/lualine.nvim'
19
20 -- Tags
21 Plug 'liuchengxu/vista.vim'
22
23 -- Navigation
24 Plug 'preservim/nerdtree'
25
26 -- Telescope finding shit
27 Plug 'nvim-lua/plenary.nvim'
28 Plug('nvim-telescope/telescope.nvim', {['branch'] = '0.1.x'})
29 Plug('nvim-telescope/telescope-fzf-native.nvim', {['do'] = 'make' })
30 Plug 'doctorfree/cheatsheet.nvim'
31
32 -- Omnisharp
33 Plug 'Hoffs/omnisharp-extended-lsp.nvim'
34
35 -- Git
36 Plug 'tpope/vim-fugitive'
37 Plug 'tommcdo/vim-fubitive'
38
39 -- Misc
40 Plug 'lukas-reineke/indent-blankline.nvim'
41
42 vim.call('plug#end')
43
44 require'lspconfig'.pylsp.setup{
45         settings = { pylsp = {
46                 plugins = {
47                         flake8 = {
48                                 enabled = true,
49                                 maxLineLength = 100,
50                         },
51                         pycodestyle = { enabled = false, },
52                         pyflakes = { enabled = false, },
53                         rope_autoimport = { enabled = true, },
54                 },
55                 configurationSources = 'flake8'
56         }}
57 }
58 require'lspconfig'.omnisharp.setup{
59         cmd = { "dotnet", "/usr/lib/omnisharp-roslyn/OmniSharp.dll" },
60         enable_roslyn_analyzers = false,
61         handlers = {
62                 ["textDocument/definition"] = require('omnisharp_extended').handler,
63         },
64 }
65
66 vim.diagnostic.config{
67         float = {
68                 source = 'always',
69         }
70 }
71
72 -- Global mappings.
73 -- See `:help vim.diagnostic.*` for documentation on any of the below functions
74 vim.keymap.set('n', '<space>e', vim.diagnostic.open_float)
75 vim.keymap.set('n', '[d', vim.diagnostic.goto_prev)
76 vim.keymap.set('n', ']d', vim.diagnostic.goto_next)
77 vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist)
78
79 -- Use LspAttach autocommand to only map the following keys
80 -- after the language server attaches to the current buffer
81 vim.api.nvim_create_autocmd('LspAttach', {
82         group = vim.api.nvim_create_augroup('UserLspConfig', {}),
83         callback = function(ev)
84                 -- Enable completion triggered by <c-x><c-o>
85                 vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'
86
87                 -- Buffer local mappings.
88                 -- See `:help vim.lsp.*` for documentation on any of the below functions
89                 local opts = { buffer = ev.buf }
90                 vim.keymap.set('n', '<leader>gd', vim.lsp.buf.definition, opts)
91                 vim.keymap.set('n', '<leader>K', vim.lsp.buf.hover, opts)
92                 vim.keymap.set('n', '<leader>k', vim.lsp.buf.signature_help, opts)
93                 vim.keymap.set('n', '<leader>D', vim.lsp.buf.type_definition, opts)
94                 vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, opts)
95                 vim.keymap.set({ 'n', 'v' }, '<leader>ca', vim.lsp.buf.code_action, opts)
96                 vim.keymap.set('n', '<space>f', function()
97                         vim.lsp.buf.format { async = true }
98                 end, opts)
99         end,
100 })
101
102
103 -- Tressiter for syntax highlighting and folding
104 require'nvim-treesitter.configs'.setup {
105         ensure_installed = { "c", "lua", "vim", "vimdoc", "python", "html" },
106         auto_install = true,
107
108         highlight = { enable = true, },
109         indent = { enable = true, },
110 }
111
112 vim.opt.foldmethod = "expr"
113 vim.opt.foldexpr = "nvim_treesitter#foldexpr()"
114
115
116 -- Tag bar
117 vim.g.vista_default_executive = 'nvim_lsp'
118 vim.keymap.set('n', '<F8>', ':Vista!!<CR>')
119
120
121 -- Colourscheme
122 vim.opt.background = 'light'
123
124 vim.g.solarized_borders = true
125
126
127 -- This setting needs to be set before solarized is loaded
128 -- so it can't go into ginit.vim, since that is loaded after
129 -- this file
130 if vim.fn.has('gui_running') == 0 then
131         vim.g.solarized_disable_background = true
132 else
133         vim.g.solarized_disable_background = false
134 end
135 require('solarized').set()
136
137
138 -- Lualine (powerline like thing) setup
139 require('lualine').setup {
140         options = {
141                 theme = 'solarized'
142         }
143 }
144
145
146 -- Nerdree mappings
147 vim.keymap.set('n', '<C-n>', ':NERDTreeToggle<CR>')
148 vim.keymap.set('n', '<C-f>', ':NERDTreeFind<CR>')
149
150
151 -- Telescope
152 require('telescope').setup{
153         extensions = {
154                 fzf = {
155                         fuzzy = true,                    -- false will only do exact matching
156                         override_generic_sorter = true,  -- override the generic sorter
157                         override_file_sorter = true,     -- override the file sorter
158                         case_mode = "smart_case",
159                 }
160         },
161         pickers = {
162                 find_files = {
163                         theme = "dropdown",
164                 },
165                 live_grep = {
166                         theme = "dropdown",
167                 },
168                 lsp_references = {
169                         theme = "dropdown",
170                 },
171         }
172 }
173 local tele_builtin = require('telescope.builtin')
174 vim.keymap.set('n', '<leader>ff', tele_builtin.find_files, {})
175 vim.keymap.set('n', '<leader>fg', tele_builtin.live_grep, {})
176 vim.keymap.set('n', '<leader>gr', tele_builtin.lsp_references, {})
177 require('telescope').load_extension('fzf')
178
179
180 -- General Setup
181 -- Relative line numbering
182 vim.opt.relativenumber = true
183 vim.opt.number = true
184 -- Ruler at 80 and 100 cols
185 vim.o.colorcolumn = "80,100"
186
187 -- Show Spaces, newlines tabs etc
188 vim.opt.listchars = {
189         trail = '•',
190         extends = '>',
191         precedes = '<',
192         nbsp = '␣',
193         eol = '↲',
194         tab = '→,',
195 }
196 vim.opt.list = true
197
198 -- Clear highlights from search with Ctrl-l
199 vim.keymap.set('n', '<C-l>', ':noh<CR>')
200
201
202 -- Indentline
203 require("ibl").setup()