-- theming -- Default options vim.opt.termguicolors = true vim.cmd.colorscheme 'duskfox' -- turn on relative line numbers vim.opt.relativenumber = true vim.opt.number = true vim.o.expandtab = false vim.o.paste = false vim.o.autoindent = true vim.o.linebreak = true vim.o.mouse = false vim.o.tabstop = 4 vim.g.BASH_AuthorName = 'Jeremy Wall' vim.g.BASH_AuthorRef = 'jw' vim.g.BASH_Email = 'jeremy@marzhillstudios.com' -- We want to use a different leader key vim.g.mapleader = ',' vim.cmd("noswapfile") vim.cmd("syntax on") vim.cmd("filetype plugin on") vim.cmd([[ au BufNewFile,BufRead *Makefile,*.mk set noexpandtab ]]) vim.cmd([[ au BufNewFile,BufRead *.py,*.java set tabstop=2 ]]) vim.cmd([[ au BufNewFile,BufRead *.app set filetype=erlang ]]) vim.cmd([[ au BufNewFile,BufRead .bash_* set filetype=sh ]]) vim.cmd([[ au BufNewFile,BufRead *.sil set filetype=tex ]]) vim.cmd([[ au BufNewFile,BufRead *.erl filetype indent off ]]) vim.cmd([[ au BufNewFile,BufRead *.hrl filetype indent off ]]) --https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md local lspconfig = require("lspconfig") -- Nix language server support lspconfig.nil_ls.setup{{ }} local vim_pid = vim.fn.getpid() -- "FormatterOptions:EnableEditorConfigSupport=true" local omnisharp_cmd = { tostring(vim.env.OMNISHARP_BIN), '--languageserver', '--hostPID', tostring(vim_pid), } -- This needs a path to the omnisharp dll provided. We depend on the OMNISHARP_BIN environment variable being set to make this work. lspconfig.omnisharp.setup { cmd = omnisharp_cmd, enable_roslyn_analyzers = true, enable_editorconfig_support = true, enable_import_completion = true, -- Omnisharp has issues with the semanticTokens feature. disable it for this language server. on_attach = function(client, bufnr) client.server_capabilities.semanticTokensProvider = nil end, -- TODO(jwall): See if init_options can assist in getting our lint setting correct. } --ocaml lspconfig.ocamllsp.setup{} -- Java language server support lspconfig.java_language_server.setup{} -- Typescript language server support lspconfig.tsserver.setup{} -- Rust language server support lspconfig.rust_analyzer.setup{} -- lua language server setup. lspconfig.lua_ls.setup{} -- lsp configuration vim.api.nvim_create_autocmd('LspAttach', { callback = function(args) local opts = { buffer = args.buf } vim.keymap.set("n", '', function() vim.lsp.buf.hover() end, opts) vim.keymap.set({"n", "v"}, "a", vim.lsp.buf.code_action, opts) vim.keymap.set("n", "gr", vim.lsp.buf.references, opts) vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) vim.keymap.set("n", "f", vim.lsp.buf.format, opts) -- We use F2 to rename things vim.keymap.set("n", "", vim.lsp.buf.rename, opts) end, }) -- LSP Diagnostics Options Setup local sign = function(opts) vim.fn.sign_define(opts.name, { texthl = opts.name, text = opts.text, numhl = '' }) end sign({name = 'DiagnosticSignError', text = '🔥'}) sign({name = 'DiagnosticSignWarn', text = '⚠️'}) sign({name = 'DiagnosticSignHint', text = '➡️'}) sign({name = 'DiagnosticSignInfo', text = '🗒️'}) vim.diagnostic.config({ virtual_text = false, signs = true, update_in_insert = true, underline = true, severity_sort = false, float = { border = 'rounded', source = 'always', header = '', prefix = '', }, }) vim.cmd([[ set signcolumn=yes autocmd CursorHold * lua vim.diagnostic.open_float(nil, { focusable = false }) ]]) vim.cmd([[ let g:coq_settings = { 'auto_start': 'shut-up', 'display.icons.mode': "none" } ]]) require("coq") --Set completeopt to have a better completion experience -- :help completeopt -- menuone: popup even when there's only one match -- noinsert: Do not insert text until a selection is made -- noselect: Do not select, force to select one from the menu -- shortness: avoid showing extra messages when using completion -- updatetime: set updatetime for CursorHold vim.opt.completeopt = {'menuone', 'noselect', 'noinsert'} vim.opt.shortmess = vim.opt.shortmess + { c = true} vim.api.nvim_set_option('updatetime', 300) -- Fixed column for diagnostics to appear -- Show autodiagnostic popup on cursor hover_range -- Goto previous / next diagnostic warning / error -- Show inlay_hints more frequently vim.cmd([[ set signcolumn=yes autocmd CursorHold * lua vim.diagnostic.open_float(nil, { focusable = false }) ]]) -- Treesitter Plugin Setup require('nvim-treesitter.configs').setup { highlight = { enable = true, additional_vim_regex_highlighting=false, }, ident = { enable = true }, rainbow = { enable = true, extended_mode = true, max_file_lines = nil, } } vim.g.loaded_netrw = 1 vim.g.loaded_netrwPlugin = 1 -- set termguicolors to enable highlight groups vim.opt.termguicolors = true -- setup nvim-tree require("nvim-tree").setup{ hijack_unnamed_buffer_when_opening = true, update_focused_file = { enable = true, }, renderer = { icons = { show = { file = false, }, glyphs = { default = "-", symlink = "S", bookmark = "🎗", modified = "●", folder = { arrow_closed = "→", arrow_open = "↓", default = "📁", open = "📂", empty = "📁", empty_open = "📂", symlink = "S", symlink_open = "S", }, git = { unstaged = "✗", staged = "✓", unmerged = "∦", renamed = "➜", untracked = "★", deleted = "X", ignored = "◌", }, }, }, }, diagnostics = { enable = true, show_on_dirs = true, icons = { hint = "➡️", info = "🗒️", warning = "⚠️", error = "🔥", }, }, } require('trouble').setup{ icons = false, signs = { hint = "➡️", information = "🗒️", warning = "⚠️", error = "🔥", other = "?", }, } vim.keymap.set("n", "", function() require("nvim-tree.api").tree.toggle() end) vim.keymap.set("n", "tc", function() vim.cmd("tabclose") end) vim.keymap.set("n", "tn", function() vim.cmd("tabnew") end) vim.keymap.set("n", "tk", function() vim.cmd("tabnext") end) vim.keymap.set("n", "tj", function() vim.cmd("tabprev") end) vim.keymap.set("n", "ts", function() vim.cmd("tabs") end) vim.keymap.set("n", "mg", function() vim.cmd("MagitOnly") end) -- Telelscope configuration local telescope = require('telescope') local telescope_builtins = require('telescope.builtin') local telescope_actions = require('telescope.actions') -- https://github.com/nvim-telescope/telescope.nvim telescope.setup({ defaults = { initial_mode = "normal", }, }) vim.keymap.set("n", "nff", telescope_builtins.fd) vim.keymap.set("n", "rl", telescope_builtins.lsp_references) vim.keymap.set("n", "rn", vim.lsp.buf.rename) vim.keymap.set("n", "sl", telescope_builtins.lsp_workspace_symbols) vim.keymap.set("n", "dl", telescope_builtins.diagnostics) vim.keymap.set("n", "bl", function() telescope_builtins.buffers({}) end) -- Show whatever errors we have in our trouble pane vim.keymap.set("n", "se", "TroubleToggle", { silent = true, noremap = true })