Last active
August 22, 2023 07:54
-
-
Save matthewbdaly/2a523fbc0abedaf8e41b92a1a36c501d to your computer and use it in GitHub Desktop.
Lua version of my Neovim config
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
vim.g.polyglot_disabled = 'markdown' | |
local Plug = vim.fn['plug#'] | |
vim.call('plug#begin') | |
--Project | |
Plug('ahmedkhalf/project.nvim') | |
--Search | |
Plug('junegunn/fzf', {['do'] = vim.fn['fzf#install']}) | |
Plug('junegunn/fzf.vim') | |
Plug('stsewd/fzf-checkout.vim') | |
Plug('nvim-treesitter/nvim-treesitter', {['do'] = ':TSUpdate'}) | |
Plug('nvim-lua/plenary.nvim') | |
Plug('nvim-telescope/telescope.nvim') | |
Plug('nvim-telescope/telescope-fzf-native.nvim', { ['do'] = 'make' }) | |
--LSP Completion | |
Plug('neovim/nvim-lspconfig') | |
Plug 'williamboman/mason.nvim' | |
Plug 'williamboman/mason-lspconfig.nvim' | |
Plug('hrsh7th/cmp-nvim-lsp') | |
Plug('hrsh7th/cmp-buffer') | |
Plug('hrsh7th/cmp-path') | |
Plug('hrsh7th/cmp-cmdline') | |
Plug('hrsh7th/nvim-cmp') | |
Plug('github/copilot.vim') | |
--Refactorings in PHP | |
vim.cmd('let g:phpactorPhpBin = "~/.phpbrew/php/php-8.2.8/bin/php"') | |
Plug('phpactor/phpactor', {['for'] = 'php', tag = '*', ['do'] = 'composer install --no-dev -o'}) | |
--Tests | |
Plug('antoinemadec/FixCursorHold.nvim') | |
Plug('nvim-neotest/neotest') | |
Plug('theutz/neotest-pest') | |
--Snippets | |
Plug('SirVer/ultisnips') | |
Plug('honza/vim-snippets') | |
Plug('mlaursen/vim-react-snippets') | |
Plug('quangnguyen30192/cmp-nvim-ultisnips') | |
--Git integration | |
Plug('tpope/vim-fugitive') | |
Plug('lewis6991/gitsigns.nvim') | |
--Comments | |
Plug('numToStr/Comment.nvim') | |
--Terminal | |
Plug('akinsho/toggleterm.nvim') | |
--Debugger | |
Plug('mfussenegger/nvim-dap') | |
--Editorconfig | |
Plug('editorconfig/editorconfig-vim') | |
--Feedback and linting | |
Plug('jose-elias-alvarez/null-ls.nvim') | |
Plug('folke/trouble.nvim') | |
--Syntax | |
Plug('sheerun/vim-polyglot') | |
Plug('matthewbdaly/vim-filetype-settings') | |
Plug('matthewbdaly/vim-statamic-antlers') | |
--Status line | |
Plug('nvim-lualine/lualine.nvim') | |
--Theme | |
Plug('mhartington/oceanic-next') | |
Plug('folke/lsp-colors.nvim') | |
--Which | |
Plug('folke/which-key.nvim') | |
--Icons and tree | |
Plug('ryanoasis/vim-devicons') | |
Plug('kyazdani42/nvim-web-devicons') | |
Plug('preservim/nerdtree') | |
Plug('onsails/lspkind-nvim') | |
vim.call('plug#end') | |
--Theme | |
vim.o.syntax = 'enable' | |
vim.o.background = 'dark' | |
vim.g.oceanic_next_terminal_bold = 1 | |
vim.g.oceanic_next_terminal_italic = 1 | |
vim.cmd('colorscheme OceanicNext') | |
--General | |
vim.opt.encoding = "utf-8" | |
vim.opt.fileencoding = "utf-8" | |
vim.opt.guifont = "Fira Code" | |
vim.o.nu = true | |
vim.cmd('filetype plugin indent on') | |
vim.cmd('set nocp') | |
vim.o.ruler = true | |
vim.o.wildmenu = true | |
vim.cmd('set wildignore=.svn,CVS,.git,*.o,*.a,*.class,*.mo,*.la,*.so,*.obj,*.swp,*.jpg,*.png,*.xpm,*.gif') | |
vim.cmd('set mouse-=a') | |
vim.cmd('set t_Co=256') | |
vim.o.cursorline = true | |
vim.g.completeopt = 'menu,menuone,noselect' | |
vim.o.hidden = true | |
--Tabs and spacing | |
vim.o.autoindent = true | |
vim.o.cindent = true | |
vim.o.tabstop = 4 | |
vim.o.expandtab = true | |
vim.o.shiftwidth = 4 | |
vim.o.smarttab = true | |
vim.o.foldmethod = 'manual' | |
--Search | |
vim.o.hlsearch = true | |
vim.o.incsearch = true | |
vim.o.infercase = true | |
vim.o.smartcase = true | |
vim.cmd('set diffopt +=iwhite') | |
-- Code actions | |
vim.api.nvim_set_keymap('n', 'ca', [[<Cmd>lua vim.lsp.buf.code_action()<CR>]], { noremap = true, silent = true }) | |
--Telescope key bindings | |
vim.cmd([[ | |
nnoremap <leader>ff <cmd>Telescope find_files<cr> | |
nnoremap <leader>fg <cmd>Telescope live_grep<cr> | |
nnoremap <leader>fb <cmd>Telescope buffers<cr> | |
nnoremap <leader>fh <cmd>Telescope help_tags<cr> | |
]]) | |
--Syntax highlighting in Markdown | |
vim.cmd([[ | |
au BufNewFile,BufReadPost *.md set filetype=markdown | |
let g:markdown_fenced_languages = ['bash=sh', 'css', 'django', 'javascript', 'js=javascript', 'json=javascript', 'perl', 'php', 'python', 'ruby', 'sass', 'xml', 'html', 'vim'] | |
]]) | |
require("mason").setup {} | |
require('null-ls').setup({ | |
sources = { | |
require('null-ls').builtins.formatting.stylua, | |
require('null-ls').builtins.formatting.eslint, | |
require('null-ls').builtins.formatting.phpcbf.with({ | |
command = "vendor/bin/phpcbf", | |
requiredFiles = {"vendor/bin/phpcbf"} | |
}), | |
require('null-ls').builtins.formatting.phpcsfixer, | |
require('null-ls').builtins.diagnostics.eslint, | |
require('null-ls').builtins.diagnostics.php, | |
require('null-ls').builtins.diagnostics.phpcs.with({ | |
command = "vendor/bin/phpcs", | |
requiredFiles = {"vendor/bin/phpcs"} | |
}), | |
require('null-ls').builtins.diagnostics.psalm.with({ | |
command = "./vendor/bin/psalm", | |
requiredFiles = {"vendor/bin/psalm"} | |
}), | |
require('null-ls').builtins.diagnostics.eslint, | |
require('null-ls').builtins.diagnostics.stylelint, | |
require('null-ls').builtins.diagnostics.tsc, | |
}, | |
}) | |
local psalm_config_exists = vim.fn.filereadable('./psalm.xml') == 1 | |
local phpcs_config_exists = vim.fn.filereadable('./phpcs.xml') == 1 | |
require('null-ls').setup({ | |
sources = { | |
require('null-ls').builtins.formatting.stylua, | |
require('null-ls').builtins.formatting.eslint, | |
(phpcs_config_exists and require('null-ls').builtins.formatting.phpcbf.with({ | |
command = "vendor/bin/phpcbf", | |
requiredFiles = {"vendor/bin/phpcbf"} | |
})) or nil, | |
require('null-ls').builtins.formatting.phpcsfixer, | |
require('null-ls').builtins.diagnostics.eslint, | |
require('null-ls').builtins.diagnostics.php, | |
(phpcs_config_exists and require('null-ls').builtins.diagnostics.phpcs.with({ | |
command = "vendor/bin/phpcs", | |
requiredFiles = {"vendor/bin/phpcs"} | |
})) or nil, | |
(psalm_config_exists and require('null-ls').builtins.diagnostics.psalm.with({ | |
command = "./vendor/bin/psalm", | |
requiredFiles = {"vendor/bin/psalm"} | |
})) or nil, | |
require('null-ls').builtins.diagnostics.eslint, | |
require('null-ls').builtins.diagnostics.stylelint, | |
require('null-ls').builtins.diagnostics.tsc, | |
}, | |
}) | |
vim.cmd('map <Leader>lf :lua vim.lsp.buf.formatting_sync(nil, 10000)<CR>') | |
-- Setup lspconfig. | |
local capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities()) | |
-- Replace <YOUR_LSP_SERVER> with each lsp server you've enabled. | |
local nvim_lsp = require('lspconfig') | |
nvim_lsp['flow'].setup { | |
capabilities = capabilities, | |
filetypes = { | |
'javascript', | |
'javascriptreact', | |
} | |
} | |
nvim_lsp['tsserver'].setup { | |
capabilities = capabilities, | |
filetypes = { | |
'typescript', | |
'typescriptreact', | |
'typescript.tsx', | |
} | |
} | |
nvim_lsp['tailwindcss'].setup { | |
capabilities = capabilities, | |
filetypes = { | |
'typescript', | |
'typescriptreact', | |
'typescript.tsx', | |
} | |
} | |
nvim_lsp['intelephense'].setup({ | |
capabilities = capabilities, | |
filetypes = { | |
'php', | |
'phtml', | |
}, | |
settings = { | |
intelephense = { | |
files = { | |
maxSize = 5000000, | |
exclude = { | |
"**/.git/**", | |
"**/.svn/**", | |
"**/.hg/**", | |
"**/CVS/**", | |
"**/.DS_Store/**", | |
"**/node_modules/**", | |
"**/bower_components/**", | |
"**/vendor/**/{Tests,tests}/**", | |
"**/.history/**", | |
"**/vendor/**/vendor/**", | |
"**/vendor/fzaninotto/faker/src/Faker/Provider/*", | |
"**/vendor/vimeo/psalm/dictionaries/*", | |
"**/vendor/composer/autoload_classmap.php", | |
"**/vendor/composer/autoload_static.php" | |
} | |
} | |
} | |
} | |
}); | |
nvim_lsp.phpactor.setup{ | |
capabilities = capabilities, | |
filetypes = { | |
'php', | |
'phtml', | |
} | |
} | |
require('Comment').setup() | |
require("trouble").setup {} | |
require("toggleterm").setup{} | |
require("which-key").setup {} | |
require("project_nvim").setup{} | |
require('gitsigns').setup() | |
-- Setup nvim-cmp. | |
local cmp = require'cmp' | |
local lspkind = require('lspkind') | |
local source_mapping = { | |
buffer = "[Buffer]", | |
nvim_lsp = "[LSP]", | |
nvim_lua = "[Lua]", | |
-- cmp_tabnine = "[TN]", | |
path = "[Path]", | |
} | |
cmp.setup({ | |
formatting = { | |
format = function(entry, vim_item) | |
-- if you have lspkind installed, you can use it like | |
-- in the following line: | |
vim_item.kind = lspkind.symbolic(vim_item.kind, {mode = "symbol"}) | |
vim_item.menu = source_mapping[entry.source.name] | |
-- if entry.source.name == "cmp_tabnine" then | |
-- local detail = (entry.completion_item.data or {}).detail | |
-- vim_item.kind = "" | |
-- if detail and detail:find('.*%%.*') then | |
-- vim_item.kind = vim_item.kind .. ' ' .. detail | |
-- end | |
-- | |
-- if (entry.completion_item.data or {}).multiline then | |
-- vim_item.kind = vim_item.kind .. ' ' .. '[ML]' | |
-- end | |
-- end | |
local maxwidth = 80 | |
vim_item.abbr = string.sub(vim_item.abbr, 1, maxwidth) | |
return vim_item | |
end, | |
}, | |
snippet = { | |
-- REQUIRED - you must specify a snippet engine | |
expand = function(args) | |
vim.fn["UltiSnips#Anon"](args.body) | |
end, | |
}, | |
mapping = { | |
['<C-b>'] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }), | |
['<C-f>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }), | |
['<C-Space>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }), | |
['<C-y>'] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `<C-y>` mapping. | |
['<C-e>'] = cmp.mapping({ | |
i = cmp.mapping.abort(), | |
c = cmp.mapping.close(), | |
}), | |
['<CR>'] = cmp.mapping.confirm({ select = false }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. | |
}, | |
sources = cmp.config.sources({ | |
{ name = 'nvim_lsp' }, | |
{ name = 'ultisnips' }, | |
-- { name = 'cmp_tabnine' }, | |
}, { | |
{ name = 'buffer' }, | |
}), | |
view = { | |
entries = "native" | |
} | |
}) | |
-- Set configuration for specific filetype. | |
cmp.setup.filetype('gitcommit', { | |
sources = cmp.config.sources({ | |
{ name = 'cmp_git' }, -- You can specify the `cmp_git` source if you were installed it. | |
}, { | |
{ name = 'buffer' }, | |
}) | |
}) | |
-- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore). | |
cmp.setup.cmdline('/', { | |
sources = { | |
{ name = 'buffer' } | |
}, | |
view = { | |
entries = "custom" | |
} | |
}) | |
-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). | |
cmp.setup.cmdline(':', { | |
sources = cmp.config.sources({ | |
{ name = 'path' } | |
}, { | |
{ name = 'cmdline' } | |
}), | |
view = { | |
entries = "custom" | |
} | |
}) | |
local actions = require("telescope.actions") | |
local trouble = require("trouble.providers.telescope") | |
local telescope = require("telescope") | |
telescope.load_extension('projects') | |
telescope.setup { | |
defaults = { | |
mappings = { | |
i = { ["<c-t>"] = trouble.open_with_trouble }, | |
n = { ["<c-t>"] = trouble.open_with_trouble }, | |
}, | |
}, | |
} | |
local separator = { '"▏"', color = 'StatusLineNonText' } | |
require('lualine').setup({ | |
options = { | |
component_separators = { left = '', right = ''}, | |
section_separators = { left = '', right = ''}, | |
globalstatus = true, | |
theme = 'OceanicNext', | |
}, | |
tabline = { | |
lualine_a = {'buffers'}, | |
}, | |
sections = { | |
lualine_a = {'mode'}, | |
lualine_b = {'branch', 'diff', 'diagnostics'}, | |
lualine_c = {'filename'}, | |
lualine_x = {'filetype'}, | |
lualine_y = {'progress'}, | |
lualine_z = {'location'}, | |
}, | |
}) | |
require('neotest').setup({ | |
adapters = { | |
require('neotest-pest')({ | |
pest_cmd = function() | |
return "vendor/bin/pest" | |
end | |
}), | |
} | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment