From 695d122bacb3388ed1968509c31d87e8e23c428f Mon Sep 17 00:00:00 2001 From: Maximilian Friedersdorff Date: Sat, 28 Sep 2024 21:02:20 +0100 Subject: [PATCH] Add nvim config --- dot_config/nvim/ginit.vim | 29 +++++ dot_config/nvim/init.lua | 218 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 247 insertions(+) create mode 100644 dot_config/nvim/ginit.vim create mode 100644 dot_config/nvim/init.lua diff --git a/dot_config/nvim/ginit.vim b/dot_config/nvim/ginit.vim new file mode 100644 index 0000000..8b29e59 --- /dev/null +++ b/dot_config/nvim/ginit.vim @@ -0,0 +1,29 @@ +" Enable Mouse +set mouse=a + +" Set Editor Font +if exists(':GuiFont') + " Use GuiFont! to ignore font errors + GuiFont Monaco Nerd Font Mono:h10 +endif + +" Disable GUI Tabline +if exists(':GuiTabline') + GuiTabline 0 +endif + +" Disable GUI Popupmenu +if exists(':GuiPopupmenu') + GuiPopupmenu 0 +endif + +" Enable GUI ScrollBar +if exists(':GuiScrollBar') + GuiScrollBar 1 +endif + +" Right Click Context Menu (Copy-Cut-Paste) +nnoremap :call GuiShowContextMenu() +inoremap :call GuiShowContextMenu() +xnoremap :call GuiShowContextMenu()gv +snoremap :call GuiShowContextMenu()gv diff --git a/dot_config/nvim/init.lua b/dot_config/nvim/init.lua new file mode 100644 index 0000000..8665ed2 --- /dev/null +++ b/dot_config/nvim/init.lua @@ -0,0 +1,218 @@ +vim.g.mapleader = ',' +vim.g.maplocalleader = '\\' + +local Plug = vim.fn['plug#'] +vim.call('plug#begin') + +Plug 'junegunn/vim-plug' + +-- Language Server protocol config +Plug 'neovim/nvim-lspconfig' + +-- Colorschemes +Plug 'shaunsingh/solarized.nvim' + +-- Syntax Highlighting and folding +Plug('nvim-treesitter/nvim-treesitter', {['do'] = ':TSUpdate'}) + +Plug 'nvim-lualine/lualine.nvim' + +-- Tags +Plug 'liuchengxu/vista.vim' + +-- Navigation +Plug 'preservim/nerdtree' + +-- Telescope finding shit +Plug 'nvim-lua/plenary.nvim' +Plug('nvim-telescope/telescope.nvim', {['branch'] = '0.1.x'}) +Plug('nvim-telescope/telescope-fzf-native.nvim', {['do'] = 'make' }) +Plug 'doctorfree/cheatsheet.nvim' + +-- Omnisharp +Plug 'Hoffs/omnisharp-extended-lsp.nvim' + +-- Git +Plug 'tpope/vim-fugitive' +Plug 'tommcdo/vim-fubitive' + +-- ZK Zettlekasten Notes +Plug 'zk-org/zk-nvim' + +-- Misc +Plug 'lukas-reineke/indent-blankline.nvim' + +vim.call('plug#end') + +require'lspconfig'.pylsp.setup{ + settings = { pylsp = { + plugins = { + pycodestyle = { enabled = false, }, + pyflakes = { enabled = false, }, + rope_autoimport = { enabled = true, }, + }, + configurationSources = 'flake8' + }} +} +require'lspconfig'.omnisharp.setup{ + cmd = { "dotnet", "/usr/lib/omnisharp-roslyn/OmniSharp.dll" }, + enable_roslyn_analyzers = false, + handlers = { + ["textDocument/definition"] = require('omnisharp_extended').handler, + }, +} +require'lspconfig'.marksman.setup{} +require'lspconfig'.ruff_lsp.setup{} + +require'zk'.setup() + +vim.diagnostic.config{ + float = { + source = 'always', + } +} + +-- Global mappings. +-- See `:help vim.diagnostic.*` for documentation on any of the below functions +vim.keymap.set('n', 'e', vim.diagnostic.open_float) +vim.keymap.set('n', '[d', vim.diagnostic.goto_prev) +vim.keymap.set('n', ']d', vim.diagnostic.goto_next) +vim.keymap.set('n', 'q', vim.diagnostic.setloclist) + +-- Use LspAttach autocommand to only map the following keys +-- after the language server attaches to the current buffer +vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('UserLspConfig', {}), + callback = function(ev) + -- Enable completion triggered by + vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' + + -- Buffer local mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + local opts = { buffer = ev.buf } + vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) + vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts) + vim.keymap.set('n', 'k', vim.lsp.buf.signature_help, opts) + vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, opts) + vim.keymap.set('n', 'rn', vim.lsp.buf.rename, opts) + vim.keymap.set('n', 'fo', function() vim.lsp.buf.format { async = true } end, opts) + vim.keymap.set({ 'n', 'v' }, 'ca', vim.lsp.buf.code_action, opts) + vim.keymap.set('n', 'f', function() + vim.lsp.buf.format { async = true } + end, opts) + end, +}) + + +-- Treesiter for syntax highlighting and folding +require'nvim-treesitter.configs'.setup { + ensure_installed = { "c", "lua", "vim", "vimdoc", "python", "html" }, + auto_install = true, + + highlight = { + enable = true, + disable = { "markdown" }, + }, + indent = { enable = true, }, +} + +vim.opt.foldmethod = "expr" +vim.opt.foldexpr = "nvim_treesitter#foldexpr()" +vim.opt.foldenable = false + + +-- Tag bar +vim.g.vista_default_executive = 'nvim_lsp' +vim.keymap.set('n', '', ':Vista!!') + + +-- Colourscheme +vim.opt.background = 'light' + +vim.g.solarized_borders = true + + +-- This setting needs to be set before solarized is loaded +-- so it can't go into ginit.vim, since that is loaded after +-- this file +if vim.fn.has('gui_running') == 0 then + vim.g.solarized_disable_background = true +else + vim.g.solarized_disable_background = false +end +require('solarized').set() + + +-- Lualine (powerline like thing) setup +require('lualine').setup { + options = { + theme = 'solarized' + } +} + + +-- Nerdree mappings +vim.keymap.set('n', '', ':NERDTreeToggle') +vim.keymap.set('n', '', ':NERDTreeFind') + + +-- Telescope +require('telescope').setup{ + extensions = { + fzf = { + fuzzy = true, -- false will only do exact matching + override_generic_sorter = true, -- override the generic sorter + override_file_sorter = true, -- override the file sorter + case_mode = "smart_case", + } + }, + pickers = { + find_files = { + theme = "dropdown", + }, + live_grep = { + theme = "dropdown", + }, + lsp_references = { + theme = "dropdown", + }, + } +} +local tele_builtin = require('telescope.builtin') +vim.keymap.set('n', 'ff', tele_builtin.find_files, {}) +vim.keymap.set('n', 'fg', tele_builtin.live_grep, {}) +vim.keymap.set('n', 'gr', tele_builtin.lsp_references, {}) +require('telescope').load_extension('fzf') + + +-- General Setup +-- Relative line numbering +vim.opt.relativenumber = true +vim.opt.number = true +-- Ruler at 80 and 100 cols +vim.o.colorcolumn = "80,100" + +-- Show Spaces, newlines tabs etc +vim.opt.listchars = { + trail = '•', + extends = '>', + precedes = '<', + nbsp = '␣', + eol = '↲', + tab = '→,', +} +vim.opt.list = true + +-- Clear highlights from search with Ctrl-l +vim.keymap.set('n', '', ':noh') + + +-- Indentline +require("ibl").setup() + + +-- Whitespace -- +vim.o.expandtab = true +vim.o.smartindent = true +vim.o.tabstop = 4 +vim.o.shiftwidth = 4