-- basic settings vim.g.mapleader = ' ' local set = vim.opt set.tabstop = 2 set.shiftwidth = 2 set.softtabstop = 2 set.expandtab = true set.mouse = 'a' set.clipboard='unnamed' local execute = vim.api.nvim_command local fn = vim.fn local fmt = string.format local pack_path = fn.stdpath('data') .. '/site/pack' -- ensure a given plugin from github.com// is cloned in the pack/packer/start directory local function ensure (user, repo) local install_path = fmt('%s/packer/start/%s', pack_path, repo) if fn.empty(fn.glob(install_path)) > 0 then execute(fmt('!git clone https://github.com/%s/%s %s', user, repo, install_path)) execute(fmt('packadd %s', repo)) end end -- ensure the plugin manager is installed ensure('wbthomason', 'packer.nvim') require('packer').startup(function(use) -- install all the plugins you need here -- the plugin manager can manage itself use {'wbthomason/packer.nvim'} -- neogit use { 'TimUntersberger/neogit', requires = 'nvim-lua/plenary.nvim', config = function() end } -- telescope and fzf use { 'nvim-telescope/telescope.nvim', tag = '0.1.0', requires = { {'nvim-lua/plenary.nvim'} } } -- lsp config for elixir-ls support use {'neovim/nvim-lspconfig'} -- mix format use {'mhinz/vim-mix-format'} -- cmp framework for auto-completion support use {'hrsh7th/nvim-cmp'} -- install different completion source use {'hrsh7th/cmp-nvim-lsp'} use {'hrsh7th/cmp-buffer'} use {'hrsh7th/cmp-path'} use {'hrsh7th/cmp-cmdline'} -- you need a snippet engine for snippet support -- here I'm using vsnip which can load snippets in vscode format use {'hrsh7th/vim-vsnip'} use {'hrsh7th/cmp-vsnip'} -- colorscheme use 'marko-cerovac/material.nvim' -- treesitter for syntax highlighting and more use {'nvim-treesitter/nvim-treesitter'} use { 'ahmedkhalf/project.nvim', config = function() require('project_nvim').setup { -- https://github.com/ahmedkhalf/project.nvim#%EF%B8%8F-configuration } end } -- status line -- https://github.com/nvim-lualine/lualine.nvim use { 'nvim-lualine/lualine.nvim', requires = { 'kyazdani42/nvim-web-devicons', opt = true } } end) -- `on_attach` callback will be called after a language server -- instance has been attached to an open buffer with matching filetype -- here we're setting key mappings for hover documentation, goto definitions, goto references, etc -- you may set those key mappings based on your own preference local on_attach = function(client, bufnr) local opts = { noremap=true, silent=true } vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', 'lua vim.lsp.buf.definition()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', 'lua vim.lsp.buf.references()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', 'lua vim.lsp.buf.declaration()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', 'lua vim.lsp.buf.implementation()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', 'lua vim.lsp.buf.hover()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', '', 'lua vim.lsp.buf.signature_help()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'ca', 'lua vim.lsp.buf.code_action()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'cd', 'lua vim.diagnostic.open_float()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', '[d', 'lua vim.diagnostic.goto_prev()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', ']d', 'lua vim.diagnostic.goto_next()', opts) end local capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities()) require('lspconfig').elixirls.setup { cmd = { '/Users/nicolasknoebber/package/elixir-ls/language_server.sh' }, on_attach = on_attach, capabilities = capabilities } local cmp = require'cmp' cmp.setup({ snippet = { expand = function(args) -- setting up snippet engine -- this is for vsnip, if you're using other -- snippet engine, please refer to the `nvim-cmp` guide vim.fn['vsnip#anonymous'](args.body) end, }, mapping = { [''] = cmp.mapping.confirm({ select = true }), }, sources = cmp.config.sources({ { name = 'nvim_lsp' }, { name = 'vsnip' }, -- For vsnip users. { name = 'buffer' } }) }) vim.g.mix_format_on_save = 1 -- tree sitter require'nvim-treesitter.configs'.setup { ensure_installed = {'elixir', 'heex'}, sync_install = true, auto_install = true, ignore_install = { }, highlight = { enable = true, disable = { }, additional_vim_regex_highlighting = false, }, } -- status line require('lualine').setup { options = { theme = 'material', } } -- color scheme require('material').setup({ lualine_style = 'default', }) require('neogit').setup { disable_commit_confirmation = true } vim.g.material_style = 'palenight' vim.cmd 'colorscheme material' -- global keybinds vim.keymap.set('n', 'Y', 'yy') vim.keymap.set('n', 'f', ':Telescope find_files') vim.keymap.set('n', 's', ':Telescope live_grep') vim.keymap.set('n', 'b', ':Telescope buffers') vim.keymap.set('n', 'k', ':q') vim.keymap.set('n', 'o', '') vim.keymap.set('n', 'j', '') vim.keymap.set('n', 'g', ':Neogit kind=vsplit')