Skip to content

Instantly share code, notes, and snippets.

@matthewbdaly
Last active August 22, 2023 07:54
Show Gist options
  • Save matthewbdaly/2a523fbc0abedaf8e41b92a1a36c501d to your computer and use it in GitHub Desktop.
Save matthewbdaly/2a523fbc0abedaf8e41b92a1a36c501d to your computer and use it in GitHub Desktop.
Lua version of my Neovim config
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