refactor(nvim): manage Neovim with Home Manager
This commit is contained in:
parent
83c43d07df
commit
5630466780
42 changed files with 5 additions and 0 deletions
13
config/neovim/lua/opdavies/globals.lua
Normal file
13
config/neovim/lua/opdavies/globals.lua
Normal file
|
@ -0,0 +1,13 @@
|
|||
P = function(v)
|
||||
print(vim.inspect(v))
|
||||
return v
|
||||
end
|
||||
|
||||
RELOAD = function(...)
|
||||
return require("plenary.reload").reload_module(...)
|
||||
end
|
||||
|
||||
R = function(name)
|
||||
RELOAD(name)
|
||||
return require(name)
|
||||
end
|
23
config/neovim/lua/opdavies/keymap.lua
Normal file
23
config/neovim/lua/opdavies/keymap.lua
Normal file
|
@ -0,0 +1,23 @@
|
|||
local M = {}
|
||||
|
||||
M.imap = function(tbl)
|
||||
vim.keymap.set("i", tbl[1], tbl[2], tbl[3])
|
||||
end
|
||||
|
||||
M.map = function(tbl)
|
||||
vim.keymap.set(tbl[1], tbl[2], tbl[3], tbl[4] or {})
|
||||
end
|
||||
|
||||
M.nmap = function(tbl)
|
||||
vim.keymap.set("n", tbl[1], tbl[2], tbl[3])
|
||||
end
|
||||
|
||||
M.vmap = function(tbl)
|
||||
vim.keymap.set("v", tbl[1], tbl[2], tbl[3])
|
||||
end
|
||||
|
||||
M.xmap = function(tbl)
|
||||
vim.keymap.set("x", tbl[1], tbl[2], tbl[3])
|
||||
end
|
||||
|
||||
return M
|
167
config/neovim/lua/opdavies/lsp/init.lua
Normal file
167
config/neovim/lua/opdavies/lsp/init.lua
Normal file
|
@ -0,0 +1,167 @@
|
|||
local has_lsp, lspconfig = pcall(require, "lspconfig")
|
||||
if not has_lsp then
|
||||
return
|
||||
end
|
||||
|
||||
local nvim_status = require "lsp-status"
|
||||
|
||||
local imap = require("opdavies.keymap").imap
|
||||
local nmap = require("opdavies.keymap").nmap
|
||||
|
||||
local telescope_mapper = require "opdavies.telescope.mappings"
|
||||
|
||||
local buf_nnoremap = function(opts)
|
||||
opts.buffer = 0
|
||||
nmap(opts)
|
||||
end
|
||||
|
||||
local buf_inoremap = function(opts)
|
||||
opts.buffer = 0
|
||||
imap(opts)
|
||||
end
|
||||
|
||||
local updated_capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
updated_capabilities = require("cmp_nvim_lsp").update_capabilities(updated_capabilities)
|
||||
|
||||
local custom_init = function(client)
|
||||
client.config.flags = client.config.flags or {}
|
||||
client.config.flags.allow_incremental_sync = true
|
||||
end
|
||||
|
||||
local custom_attach = function(client)
|
||||
local filetype = vim.api.nvim_buf_get_option(0, "filetype")
|
||||
|
||||
nvim_status.on_attach(client)
|
||||
|
||||
-- Keymaps
|
||||
buf_inoremap { "<c-s>", vim.lsp.buf.signature_help }
|
||||
|
||||
buf_nnoremap { "<leader>ca", vim.lsp.buf.code_action }
|
||||
buf_nnoremap { "<leader>dn", vim.diagnostic.goto_next }
|
||||
buf_nnoremap { "<leader>dp", vim.diagnostic.goto_prev }
|
||||
buf_nnoremap { "<leader>f", vim.lsp.buf.format }
|
||||
buf_nnoremap { "<leader>rn", vim.lsp.buf.rename }
|
||||
buf_nnoremap { "<leader>rr", "<cmd>LspRestart<cr>" }
|
||||
buf_nnoremap { "K", vim.lsp.buf.hover }
|
||||
buf_nnoremap { "gD", vim.lsp.buf.declaration }
|
||||
buf_nnoremap { "gT", vim.lsp.buf.type_definition }
|
||||
buf_nnoremap { "gd", vim.lsp.buf.definition }
|
||||
buf_nnoremap { "gi", vim.lsp.buf.implementation }
|
||||
|
||||
if filetype ~= "lua" then
|
||||
buf_nnoremap { "K", vim.lsp.buf.hover }
|
||||
end
|
||||
|
||||
telescope_mapper("<leader>dl", "diagnostics", nil, true)
|
||||
|
||||
-- Set autocommands conditional on server_capabilities
|
||||
if client.server_capabilities.document_highlight then
|
||||
vim.cmd [[
|
||||
augroup lsp_document_highlight
|
||||
autocmd! * <buffer>
|
||||
autocmd CursorHold <buffer> lua vim.lsp.buf.document_highlight()
|
||||
autocmd CursorMoved <buffer> lua vim.lsp.buf.clear_references()
|
||||
augroup END
|
||||
]]
|
||||
end
|
||||
|
||||
-- Attach any filetype specific options to the client
|
||||
-- filetype_attach[filetype](client)
|
||||
end
|
||||
|
||||
local servers = {
|
||||
ansiblels = true,
|
||||
bashls = true,
|
||||
cssls = true,
|
||||
gopls = true,
|
||||
html = true,
|
||||
-- intelephense = true
|
||||
rnix = true,
|
||||
tsserver = true,
|
||||
vuels = true,
|
||||
yamlls = true,
|
||||
|
||||
intelephense = {
|
||||
filetypes = { "php", "module", "test", "inc" },
|
||||
},
|
||||
|
||||
sumneko_lua = {
|
||||
settings = {
|
||||
Lua = {
|
||||
diagnostics = {
|
||||
globals = { "vim" },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
tailwindcss = {
|
||||
filetypes = {
|
||||
-- html
|
||||
"html",
|
||||
"html.twig",
|
||||
"php",
|
||||
"twig",
|
||||
|
||||
-- js
|
||||
"javascript",
|
||||
"typescript",
|
||||
|
||||
-- mixed
|
||||
"vue",
|
||||
},
|
||||
|
||||
init_options = {
|
||||
userLanguages = {
|
||||
["html.twig"] = "html",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- tsserver = {
|
||||
-- filetypes = {
|
||||
-- "javascript",
|
||||
-- "javascriptreact",
|
||||
-- "javascript.jsx",
|
||||
-- "typescript",
|
||||
-- "typescriptreact",
|
||||
-- "typescript.tsx",
|
||||
-- "vue",
|
||||
-- },
|
||||
-- },
|
||||
}
|
||||
|
||||
local setup_server = function(server, config)
|
||||
if not config then
|
||||
return
|
||||
end
|
||||
|
||||
if type(config) ~= "table" then
|
||||
config = {}
|
||||
end
|
||||
|
||||
config = vim.tbl_deep_extend("force", {
|
||||
on_init = custom_init,
|
||||
on_attach = custom_attach,
|
||||
capabilities = updated_capabilities,
|
||||
flags = {
|
||||
debounce_text_changes = nil,
|
||||
},
|
||||
}, config)
|
||||
|
||||
lspconfig[server].setup(config)
|
||||
end
|
||||
|
||||
for server, config in pairs(servers) do
|
||||
setup_server(server, config)
|
||||
end
|
||||
|
||||
vim.diagnostic.config {
|
||||
signs = true,
|
||||
underline = false,
|
||||
update_in_insert = false,
|
||||
virtual_text = { spacing = 2 },
|
||||
}
|
||||
|
||||
require "opdavies.lsp.null-ls"
|
||||
require "opdavies.lsp.signature"
|
36
config/neovim/lua/opdavies/lsp/null-ls.lua
Normal file
36
config/neovim/lua/opdavies/lsp/null-ls.lua
Normal file
|
@ -0,0 +1,36 @@
|
|||
local status_ok, null_ls = pcall(require, "null-ls")
|
||||
if not status_ok then
|
||||
return
|
||||
end
|
||||
|
||||
local lsp_formatting = function(bufnr)
|
||||
vim.lsp.buf.format {
|
||||
filter = function(client)
|
||||
return client.name == "null-ls"
|
||||
end,
|
||||
bufnr = bufnr,
|
||||
}
|
||||
end
|
||||
|
||||
local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
|
||||
|
||||
local completion = null_ls.builtins.completion
|
||||
local diagnostics = null_ls.builtins.diagnostics
|
||||
local formatting = null_ls.builtins.formatting
|
||||
|
||||
null_ls.setup {
|
||||
sources = {
|
||||
formatting.phpcbf,
|
||||
formatting.markdownlint,
|
||||
formatting.prettier,
|
||||
formatting.rustywind,
|
||||
formatting.stylua,
|
||||
|
||||
diagnostics.eslint,
|
||||
diagnostics.markdownlint,
|
||||
diagnostics.php,
|
||||
diagnostics.phpcs,
|
||||
diagnostics.phpstan,
|
||||
diagnostics.shellcheck,
|
||||
},
|
||||
}
|
6
config/neovim/lua/opdavies/lsp/signature.lua
Normal file
6
config/neovim/lua/opdavies/lsp/signature.lua
Normal file
|
@ -0,0 +1,6 @@
|
|||
local status_ok, lsp_signature = pcall(require, "lsp_signature")
|
||||
if not status_ok then
|
||||
return
|
||||
end
|
||||
|
||||
lsp_signature.setup {}
|
172
config/neovim/lua/opdavies/options.lua
Normal file
172
config/neovim/lua/opdavies/options.lua
Normal file
|
@ -0,0 +1,172 @@
|
|||
local M = {}
|
||||
|
||||
local function set_autocmd()
|
||||
vim.cmd [[
|
||||
autocmd BufRead,BufNewFile *.test set filetype=php
|
||||
|
||||
autocmd BufWritePost plugins.lua luafile %
|
||||
autocmd BufWritePost plugins.lua PackerSync
|
||||
|
||||
autocmd FileType gitcommit highlight ColorColumn ctermbg=8
|
||||
autocmd FileType gitcommit setlocal colorcolumn=50,72
|
||||
autocmd FileType gitcommit setlocal spell
|
||||
autocmd FileType gitcommit setlocal textwidth=72
|
||||
]]
|
||||
|
||||
-- Automatically resize buffers when Vim is resized.
|
||||
vim.api.nvim_create_autocmd("VimResized *", { command = ":wincmd =" })
|
||||
|
||||
-- Cursorline highlighting control.
|
||||
-- Only have it on in the current buffer.
|
||||
local group = vim.api.nvim_create_augroup("CursorLineControl", { clear = true })
|
||||
local set_cursorline = function(event, value, pattern)
|
||||
vim.api.nvim_create_autocmd(event, {
|
||||
group = group,
|
||||
pattern = pattern,
|
||||
callback = function()
|
||||
vim.opt_local.cursorline = value
|
||||
end,
|
||||
})
|
||||
end
|
||||
set_cursorline("WinLeave", false)
|
||||
set_cursorline("WinEnter", true)
|
||||
set_cursorline("FileType", false, "TelescopePrompt")
|
||||
end
|
||||
|
||||
local function set_filetypes()
|
||||
vim.cmd [[
|
||||
filetype indent on
|
||||
filetype on
|
||||
filetype plugin on
|
||||
]]
|
||||
end
|
||||
|
||||
local function set_key_mappings()
|
||||
local map = vim.api.nvim_set_keymap
|
||||
|
||||
local options = { noremap = true }
|
||||
|
||||
map("n", "<Leader>so", ":call opdavies#save_and_exec()<CR>", options)
|
||||
|
||||
-- Format paragraphs to an 80 character line length.
|
||||
map("n", "<Leader>g", "gqap", options)
|
||||
map("x", "<Leader>g", "gqa", options)
|
||||
|
||||
-- Make the current file executable
|
||||
map("n", "<Leader>x", ":!chmod +x %<Cr>", options)
|
||||
|
||||
-- Yank from the current column to the end of the line
|
||||
map("n", "Y", "yg$", options)
|
||||
|
||||
-- Keep things centred
|
||||
map("n", "n", "nzzzv", options)
|
||||
map("n", "N", "Nzzzv", options)
|
||||
|
||||
-- Remove arrow keys
|
||||
map("v", "<down>", "<nop>", options)
|
||||
map("v", "<left>", "<nop>", options)
|
||||
map("v", "<right>", "<nop>", options)
|
||||
map("v", "<up>", "<nop>", options)
|
||||
|
||||
-- Clears hlsearch after doing a search, otherwise just does normal <CR> stuff
|
||||
vim.cmd [[ nnoremap <expr> <CR> {-> v:hlsearch ? ":nohl\<CR>" : "\<CR>"}() ]]
|
||||
|
||||
map("n", "<C-f>", ":silent !tmux neww tmux-sessioniser<CR>", { noremap = true, silent = true })
|
||||
|
||||
local keymap = require "opdavies.keymap"
|
||||
local imap = keymap.imap
|
||||
local nmap = keymap.nmap
|
||||
local vmap = keymap.vmap
|
||||
local xmap = keymap.xmap
|
||||
|
||||
-- Easy insertion of a trailing ; or , from insert mode
|
||||
imap { ",,", "<Esc>A,<Esc>" }
|
||||
imap { ";;", "<Esc>A;<Esc>" }
|
||||
|
||||
nmap { "ga", "<Plug>(EasyAlign)" }
|
||||
xmap { "ga", "<Plug>(EasyAlign)" }
|
||||
|
||||
-- Focus on the current buffer.
|
||||
nmap { "<leader>-", ":wincmd _<cr>:wincmd |<cr>", { noremap = true, silent = true } }
|
||||
|
||||
-- Automatically resize buffers.
|
||||
nmap { "<leader>=", ":wincmd =<cr>", { noremap = true, silent = true } }
|
||||
|
||||
-- Move line(s) up and down.
|
||||
local opts = { noremap = true, silent = true }
|
||||
imap { "<M-j>", "<Esc>:m .+1<CR>==gi", opts }
|
||||
imap { "<M-k>", "<Esc>:m .-2<CR>==gi", opts }
|
||||
nmap { "<M-j>", ":m .+1<CR>==", opts }
|
||||
nmap { "<M-k>", ":m .-2<CR>==", opts }
|
||||
vmap { "<M-j>", ":m '>+1<CR>gv=gv", opts }
|
||||
vmap { "<M-k>", ":m '<-2<CR>gv=gv", opts }
|
||||
|
||||
-- Move half a screen up or down and re-center.
|
||||
nmap { "<C-d>", "<C-d>zz" }
|
||||
nmap { "<C-u>", "<C-u>zz" }
|
||||
end
|
||||
|
||||
local function set_highlights()
|
||||
vim.cmd [[highlight Comment cterm=italic gui=italic]]
|
||||
end
|
||||
|
||||
local function set_vim_g()
|
||||
vim.g.mapleader = " "
|
||||
end
|
||||
|
||||
local function set_vim_o()
|
||||
local settings = {
|
||||
autoindent = true,
|
||||
breakindent = true,
|
||||
conceallevel = 0,
|
||||
cursorline = true,
|
||||
expandtab = true,
|
||||
foldlevel = 1,
|
||||
foldlevelstart = 99,
|
||||
foldmethod = "indent",
|
||||
formatoptions = "lm",
|
||||
hidden = false,
|
||||
linebreak = true,
|
||||
mouse = "n",
|
||||
number = true,
|
||||
pumblend = 10,
|
||||
pumheight = 10,
|
||||
relativenumber = true,
|
||||
scrolloff = 10,
|
||||
shiftwidth = 2,
|
||||
showmode = false,
|
||||
smartindent = true,
|
||||
softtabstop = 2,
|
||||
splitbelow = true,
|
||||
splitright = true,
|
||||
swapfile = false,
|
||||
syntax = "on",
|
||||
tabstop = 2,
|
||||
termguicolors = true,
|
||||
textwidth = 0,
|
||||
updatetime = 1000,
|
||||
winbar = "%=%m %f",
|
||||
wrap = false,
|
||||
}
|
||||
|
||||
for key, value in pairs(settings) do
|
||||
vim.o[key] = value
|
||||
end
|
||||
|
||||
vim.opt.clipboard:append "unnamedplus"
|
||||
vim.opt.completeopt = { "menu", "menuone", "noselect" }
|
||||
vim.opt.laststatus = 3
|
||||
end
|
||||
|
||||
M.setup = function()
|
||||
set_vim_g()
|
||||
set_vim_o()
|
||||
set_key_mappings()
|
||||
set_autocmd()
|
||||
set_filetypes()
|
||||
set_highlights()
|
||||
|
||||
vim.g.snippets = "luasnip"
|
||||
end
|
||||
|
||||
return M
|
137
config/neovim/lua/opdavies/plugins.lua
Normal file
137
config/neovim/lua/opdavies/plugins.lua
Normal file
|
@ -0,0 +1,137 @@
|
|||
local status_ok, packer = pcall(require, "packer")
|
||||
if not status_ok then
|
||||
return
|
||||
end
|
||||
|
||||
packer.init {
|
||||
display = {
|
||||
open_fn = function()
|
||||
return require("packer.util").float {}
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
return packer.startup(function()
|
||||
local use = packer.use
|
||||
|
||||
use "wbthomason/packer.nvim"
|
||||
|
||||
-- Tmux
|
||||
use "preservim/vimux"
|
||||
|
||||
-- Utilities
|
||||
use "aca/emmet-ls"
|
||||
use "andymass/vim-matchup"
|
||||
use "cakebaker/scss-syntax.vim"
|
||||
use "christoomey/vim-sort-motion"
|
||||
use "christoomey/vim-tmux-navigator"
|
||||
use "editorconfig/editorconfig-vim"
|
||||
use "folke/twilight.nvim"
|
||||
use "folke/zen-mode.nvim"
|
||||
use "icatalina/vim-case-change"
|
||||
use "junegunn/vim-easy-align"
|
||||
use "kazhala/close-buffers.nvim"
|
||||
use "kyazdani42/nvim-web-devicons"
|
||||
use "lewis6991/gitsigns.nvim"
|
||||
use "lewis6991/impatient.nvim"
|
||||
use "machakann/vim-highlightedyank"
|
||||
use "miyakogi/seiya.vim"
|
||||
use "mkitt/tabline.vim"
|
||||
use "monaqa/dial.nvim"
|
||||
use "norcalli/nvim-colorizer.lua"
|
||||
use "numToStr/Comment.nvim"
|
||||
use "nvim-lua/plenary.nvim"
|
||||
use "nvim-lua/popup.nvim"
|
||||
use "sheerun/vim-polyglot"
|
||||
use "theprimeagen/git-worktree.nvim"
|
||||
use "theprimeagen/refactoring.nvim"
|
||||
use "tjdevries/express_line.nvim"
|
||||
use "tpope/vim-abolish"
|
||||
use "tpope/vim-repeat"
|
||||
use "tpope/vim-surround"
|
||||
use "vim-test/vim-test"
|
||||
use { "mg979/vim-visual-multi", branch = "master" }
|
||||
|
||||
-- Themes
|
||||
use {
|
||||
"tjdevries/gruvbuddy.nvim",
|
||||
requires = {
|
||||
"tjdevries/colorbuddy.vim",
|
||||
},
|
||||
}
|
||||
|
||||
-- Navigation
|
||||
use "ThePrimeagen/harpoon"
|
||||
use "tamago324/lir-git-status.nvim"
|
||||
use "tamago324/lir.nvim"
|
||||
|
||||
-- Treesitter
|
||||
use "nvim-treesitter/playground"
|
||||
use 'nvim-treesitter/nvim-treesitter-context'
|
||||
use {
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
run = ":TSUpdate",
|
||||
}
|
||||
use "nvim-treesitter/nvim-treesitter-textobjects"
|
||||
|
||||
-- Completion
|
||||
use {
|
||||
"hrsh7th/nvim-cmp",
|
||||
requires = {
|
||||
"L3MON4D3/LuaSnip",
|
||||
"hrsh7th/cmp-buffer",
|
||||
"hrsh7th/cmp-nvim-lsp",
|
||||
"hrsh7th/cmp-path",
|
||||
"onsails/lspkind-nvim",
|
||||
"saadparwaiz1/cmp_luasnip",
|
||||
},
|
||||
}
|
||||
|
||||
-- Snippets
|
||||
use "L3MON4D3/LuaSnip"
|
||||
use "rafamadriz/friendly-snippets"
|
||||
|
||||
-- LSP
|
||||
use "jose-elias-alvarez/null-ls.nvim"
|
||||
use "neovim/nvim-lspconfig"
|
||||
use "nvim-lua/lsp-status.nvim"
|
||||
|
||||
-- Debugging
|
||||
use "mfussenegger/nvim-dap"
|
||||
use "nvim-telescope/telescope-dap.nvim"
|
||||
use "rcarriga/nvim-dap-ui"
|
||||
use "theHamsta/nvim-dap-virtual-text"
|
||||
|
||||
-- Telescope
|
||||
use "nvim-telescope/telescope.nvim"
|
||||
use "nvim-telescope/telescope-file-browser.nvim"
|
||||
use { "nvim-telescope/telescope-fzf-native.nvim", run = "make" }
|
||||
use { "nvim-telescope/telescope-ui-select.nvim" }
|
||||
|
||||
-- Git
|
||||
use "TimUntersberger/neogit"
|
||||
|
||||
-- Databases
|
||||
use "tpope/vim-dadbod"
|
||||
use "kristijanhusak/vim-dadbod-completion"
|
||||
use "kristijanhusak/vim-dadbod-ui"
|
||||
|
||||
-- HTTP client
|
||||
use "rest-nvim/rest.nvim"
|
||||
|
||||
-- Text objects
|
||||
use "kana/vim-textobj-indent"
|
||||
use "kana/vim-textobj-user"
|
||||
use "vim-scripts/argtextobj.vim"
|
||||
use "wellle/targets.vim"
|
||||
|
||||
-- Markdown
|
||||
use {
|
||||
"iamcco/markdown-preview.nvim",
|
||||
run = "cd app && npm install",
|
||||
setup = function()
|
||||
vim.g.mkdp_filetypes = { "markdown" }
|
||||
end,
|
||||
ft = { "markdown" },
|
||||
}
|
||||
end)
|
10
config/neovim/lua/opdavies/snippets/ft/javascript.lua
Normal file
10
config/neovim/lua/opdavies/snippets/ft/javascript.lua
Normal file
|
@ -0,0 +1,10 @@
|
|||
local fmta = require("luasnip.extras.fmt").fmta
|
||||
local ls = require "luasnip"
|
||||
|
||||
local i = ls.insert_node
|
||||
|
||||
local M = {
|
||||
log = fmta("console.log(<>);", { i(1, "value") }),
|
||||
}
|
||||
|
||||
return M
|
27
config/neovim/lua/opdavies/snippets/ft/lua.lua
Normal file
27
config/neovim/lua/opdavies/snippets/ft/lua.lua
Normal file
|
@ -0,0 +1,27 @@
|
|||
local ls = require "luasnip"
|
||||
|
||||
local fmt = require("luasnip.extras.fmt").fmt
|
||||
local rep = require("luasnip.extras").rep
|
||||
|
||||
local f, i = ls.function_node, ls.insert_node
|
||||
|
||||
return {
|
||||
pcall = fmt(
|
||||
[[
|
||||
local status_ok, {} = pcall(require, "{}")
|
||||
if not status_ok then
|
||||
return
|
||||
end
|
||||
]],
|
||||
{ i(1), rep(1) }
|
||||
),
|
||||
|
||||
req = fmt([[local {} = require "{}"]], {
|
||||
f(function(import_name)
|
||||
local parts = vim.split(import_name[1][1], ".", true)
|
||||
|
||||
return parts[#parts] or ""
|
||||
end, { 1 }),
|
||||
i(1),
|
||||
}),
|
||||
}
|
18
config/neovim/lua/opdavies/snippets/ft/markdown.lua
Normal file
18
config/neovim/lua/opdavies/snippets/ft/markdown.lua
Normal file
|
@ -0,0 +1,18 @@
|
|||
local fmt = require("luasnip.extras.fmt").fmt
|
||||
local ls = require "luasnip"
|
||||
|
||||
local i = ls.insert_node
|
||||
|
||||
local M = {
|
||||
frontmatter = fmt(
|
||||
[[
|
||||
---
|
||||
title: {}
|
||||
---
|
||||
{}
|
||||
]],
|
||||
{ i(1), i(0) }
|
||||
),
|
||||
}
|
||||
|
||||
return M
|
87
config/neovim/lua/opdavies/snippets/ft/php.lua
Normal file
87
config/neovim/lua/opdavies/snippets/ft/php.lua
Normal file
|
@ -0,0 +1,87 @@
|
|||
local fmta = require("luasnip.extras.fmt").fmta
|
||||
local ls = require "luasnip"
|
||||
|
||||
local c = ls.choice_node
|
||||
local f = ls.function_node
|
||||
local i = ls.insert_node
|
||||
local t = ls.text_node
|
||||
|
||||
local M = {
|
||||
|
||||
drupalclass = fmta(
|
||||
[[
|
||||
<<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace <>;
|
||||
|
||||
final class <> {
|
||||
|
||||
<>
|
||||
|
||||
}]],
|
||||
{
|
||||
f(function()
|
||||
local filepath = vim.fn.expand "%:h"
|
||||
local filepath_parts = vim.fn.split(filepath, "/")
|
||||
|
||||
if not vim.tbl_contains(filepath_parts, "src") then
|
||||
return ""
|
||||
end
|
||||
|
||||
local namespace_parts = { "Drupal" }
|
||||
|
||||
local is_test_file = vim.tbl_contains(filepath_parts, "tests")
|
||||
if is_test_file then
|
||||
table.insert(namespace_parts, "Tests")
|
||||
end
|
||||
|
||||
-- Find and add the module name.
|
||||
for k, v in ipairs(filepath_parts) do
|
||||
if v == "src" then
|
||||
if is_test_file then
|
||||
table.insert(namespace_parts, filepath_parts[k - 2])
|
||||
else
|
||||
table.insert(namespace_parts, filepath_parts[k - 1])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Add the rest of the namespace.
|
||||
local namespace = vim.split(filepath, "src/")
|
||||
local final_part = (namespace[2] or ""):gsub("/", "\\")
|
||||
table.insert(namespace_parts, final_part)
|
||||
|
||||
return table.concat(namespace_parts, "\\")
|
||||
end),
|
||||
f(function()
|
||||
return vim.fn.expand "%:t:r"
|
||||
end),
|
||||
i(0),
|
||||
}
|
||||
),
|
||||
|
||||
func = fmta("function <>(<>)<> {\n <>\n}<>", { i(1), i(2), i(3), i(4), i(0) }),
|
||||
|
||||
met = fmta(
|
||||
[[
|
||||
<> function <>(<>)<> {
|
||||
<>
|
||||
}<>
|
||||
]],
|
||||
{ c(1, { t "public", t "protected", t "private" }), i(2), i(3), i(4), i(5), i(0) }
|
||||
),
|
||||
|
||||
test = fmta(
|
||||
[[
|
||||
/** @test */
|
||||
public function <><>(): void {
|
||||
<>
|
||||
}<>
|
||||
]],
|
||||
{ c(1, { t "test", t "it", t "should" }), i(2), i(3), i(0) }
|
||||
),
|
||||
}
|
||||
|
||||
return M
|
22
config/neovim/lua/opdavies/snippets/ft/rst.lua
Normal file
22
config/neovim/lua/opdavies/snippets/ft/rst.lua
Normal file
|
@ -0,0 +1,22 @@
|
|||
local ls = require "luasnip"
|
||||
|
||||
local i = ls.insert_node
|
||||
local f = ls.function_node
|
||||
|
||||
local fill_line = function(char)
|
||||
return function()
|
||||
local row = vim.api.nvim_win_get_cursor(0)[1]
|
||||
local lines = vim.api.nvim_buf_get_lines(0, row - 2, row, false)
|
||||
return string.rep(char, #lines[1])
|
||||
end
|
||||
end
|
||||
|
||||
local M = {
|
||||
link = { ".. _", i(1), ":" },
|
||||
|
||||
head = f(fill_line "=", {}),
|
||||
sub = f(fill_line "-", {}),
|
||||
subsub = f(fill_line "^", {}),
|
||||
}
|
||||
|
||||
return M
|
139
config/neovim/lua/opdavies/telescope/init.lua
Normal file
139
config/neovim/lua/opdavies/telescope/init.lua
Normal file
|
@ -0,0 +1,139 @@
|
|||
SHOULD_RELOAD_TELESCOPE = true
|
||||
|
||||
local reloader = function()
|
||||
if SHOULD_RELOAD_TELESCOPE then
|
||||
RELOAD "plenary"
|
||||
RELOAD "telescope"
|
||||
RELOAD "opdavies.telescope.setup"
|
||||
end
|
||||
end
|
||||
|
||||
local themes = require "telescope.themes"
|
||||
|
||||
local M = {}
|
||||
|
||||
function M.current_buf()
|
||||
local opts = {
|
||||
sorting_strategy = "ascending",
|
||||
previewer = false,
|
||||
}
|
||||
|
||||
require("telescope.builtin").current_buffer_fuzzy_find(opts)
|
||||
end
|
||||
|
||||
M.diagnostics = function()
|
||||
local theme = require("telescope.themes").get_dropdown {
|
||||
previewer = false,
|
||||
}
|
||||
|
||||
require("telescope.builtin").diagnostics(theme)
|
||||
end
|
||||
|
||||
function M.lsp_document_symbols()
|
||||
local theme = require("telescope.themes").get_dropdown {
|
||||
previewer = false,
|
||||
}
|
||||
|
||||
require("telescope.builtin").lsp_document_symbols(theme)
|
||||
end
|
||||
|
||||
function M.edit_neovim()
|
||||
local opts = {
|
||||
cwd = "~/.config/nvim",
|
||||
find_command = { "rg", "--no-ignore", "--files", "--follow" },
|
||||
path_display = { "shorten" },
|
||||
prompt_title = "~ dotfiles ~",
|
||||
no_ignore = true,
|
||||
|
||||
layout_strategy = "flex",
|
||||
layout_config = {
|
||||
height = 0.8,
|
||||
prompt_position = "top",
|
||||
width = 0.9,
|
||||
|
||||
horizontal = {
|
||||
width = { padding = 0.15 },
|
||||
},
|
||||
vertical = {
|
||||
preview_height = 0.75,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
require("telescope.builtin").find_files(opts)
|
||||
end
|
||||
|
||||
function M.edit_zsh()
|
||||
local opts = {
|
||||
cwd = "~/.config/zsh",
|
||||
path_display = { "shorten" },
|
||||
prompt_title = "~ zsh ~",
|
||||
no_ignore = true,
|
||||
|
||||
layout_strategy = "flex",
|
||||
layout_config = {
|
||||
height = 0.8,
|
||||
prompt_position = "top",
|
||||
width = 0.9,
|
||||
|
||||
horizontal = {
|
||||
width = { padding = 0.15 },
|
||||
},
|
||||
vertical = {
|
||||
preview_height = 0.75,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
require("telescope.builtin").find_files(opts)
|
||||
end
|
||||
|
||||
function M.file_browser()
|
||||
local opts = {
|
||||
cwd = vim.fn.expand "%:p:h",
|
||||
sorting_strategy = "ascending",
|
||||
}
|
||||
|
||||
require("telescope").extensions.file_browser.file_browser(opts)
|
||||
end
|
||||
|
||||
function M.fd()
|
||||
local opts = themes.get_ivy {
|
||||
file_ignore_patterns = { ".git/" },
|
||||
hidden = true,
|
||||
no_ignore = true,
|
||||
}
|
||||
|
||||
require("telescope.builtin").find_files(opts)
|
||||
end
|
||||
|
||||
function M.git_files()
|
||||
local opts = themes.get_ivy {
|
||||
file_ignore_patterns = { ".git/", "vendor" },
|
||||
hidden = true,
|
||||
no_ignore = true,
|
||||
}
|
||||
|
||||
require("telescope.builtin").git_files(opts)
|
||||
end
|
||||
|
||||
function M.live_grep()
|
||||
require("telescope.builtin").live_grep {
|
||||
file_ignore_patterns = { ".git/" },
|
||||
hidden = true,
|
||||
no_ignore = true,
|
||||
sorting_strategy = "ascending",
|
||||
}
|
||||
end
|
||||
|
||||
return setmetatable({}, {
|
||||
__index = function(_, k)
|
||||
reloader()
|
||||
|
||||
if M[k] then
|
||||
return M[k]
|
||||
else
|
||||
return require("telescope.builtin")[k]
|
||||
end
|
||||
end,
|
||||
})
|
44
config/neovim/lua/opdavies/telescope/mappings.lua
Normal file
44
config/neovim/lua/opdavies/telescope/mappings.lua
Normal file
|
@ -0,0 +1,44 @@
|
|||
TelescopeMapArgs = TelescopeMapArgs or {}
|
||||
|
||||
local telescope = require "telescope"
|
||||
|
||||
local telescope_mapper = function(key, f, options, buffer)
|
||||
local map_key = vim.api.nvim_replace_termcodes(key .. f, true, true, true)
|
||||
|
||||
TelescopeMapArgs[map_key] = options or {}
|
||||
|
||||
local mode = "n"
|
||||
local rhs = string.format("<cmd>lua R('opdavies.telescope')['%s'](TelescopeMapArgs['%s'])<CR>", f, map_key)
|
||||
|
||||
local map_options = {
|
||||
noremap = true,
|
||||
silent = true,
|
||||
}
|
||||
|
||||
if not buffer then
|
||||
vim.api.nvim_set_keymap(mode, key, rhs, map_options)
|
||||
else
|
||||
vim.api.nvim_buf_set_keymap(0, mode, key, rhs, map_options)
|
||||
end
|
||||
end
|
||||
|
||||
telescope_mapper("<leader>fb", "buffers")
|
||||
telescope_mapper("<leader>fd", "fd")
|
||||
telescope_mapper("<leader>fe", "file_browser")
|
||||
telescope_mapper("<leader>ff", "current_buf")
|
||||
telescope_mapper("<leader>fg", "git_files")
|
||||
telescope_mapper("<leader>fh", "help_tags")
|
||||
telescope_mapper("<leader>fl", "live_grep")
|
||||
|
||||
telescope_mapper("<leader>ds", "lsp_document_symbols")
|
||||
telescope_mapper("<leader>dl", "diagnostics")
|
||||
|
||||
telescope_mapper("<leader>en", "edit_neovim")
|
||||
telescope_mapper("<leader>ez", "edit_zsh")
|
||||
|
||||
local nmap = require("opdavies.keymap").nmap
|
||||
|
||||
nmap { "<leader>gm", telescope.extensions.git_worktree.create_git_worktree }
|
||||
nmap { "<leader>gw", telescope.extensions.git_worktree.git_worktrees }
|
||||
|
||||
return telescope_mapper
|
63
config/neovim/lua/opdavies/telescope/setup.lua
Normal file
63
config/neovim/lua/opdavies/telescope/setup.lua
Normal file
|
@ -0,0 +1,63 @@
|
|||
local status_ok, telescope = pcall(require, "telescope")
|
||||
if not status_ok then
|
||||
return
|
||||
end
|
||||
|
||||
local previewers = require "telescope.previewers"
|
||||
local Job = require "plenary.job"
|
||||
|
||||
-- Create a new maker that won't preview binary files
|
||||
-- https://github.com/nvim-telescope/telescope.nvim/wiki/Configuration-Recipes#dont-preview-binaries
|
||||
local new_maker = function(filepath, bufnr, opts)
|
||||
filepath = vim.fn.expand(filepath)
|
||||
Job:new({
|
||||
command = "file",
|
||||
args = { "--mime-type", "-b", filepath },
|
||||
on_exit = function(j)
|
||||
local mime_type = vim.split(j:result()[1], "/")[1]
|
||||
if mime_type == "text" then
|
||||
previewers.buffer_previewer_maker(filepath, bufnr, opts)
|
||||
else
|
||||
vim.schedule(function()
|
||||
vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, { "BINARY" })
|
||||
end)
|
||||
end
|
||||
end,
|
||||
}):sync()
|
||||
end
|
||||
|
||||
local action_layout = require "telescope.actions.layout"
|
||||
local actions = require "telescope.actions"
|
||||
|
||||
telescope.setup {
|
||||
defaults = {
|
||||
buffer_previewer_maker = new_maker,
|
||||
mappings = {
|
||||
i = {
|
||||
["<C-h>"] = actions.which_key,
|
||||
["<C-p>"] = action_layout.toggle_preview,
|
||||
},
|
||||
n = {
|
||||
["<C-p>"] = action_layout.toggle_preview,
|
||||
},
|
||||
},
|
||||
no_ignore = true,
|
||||
prompt_prefix = "$ ",
|
||||
},
|
||||
|
||||
extensions = {
|
||||
file_browser = {
|
||||
theme = "ivy",
|
||||
},
|
||||
|
||||
["ui-select"] = {
|
||||
require("telescope.themes").get_dropdown {},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
telescope.load_extension "file_browser"
|
||||
telescope.load_extension "fzf"
|
||||
telescope.load_extension "git_worktree"
|
||||
telescope.load_extension "refactoring"
|
||||
telescope.load_extension "ui-select"
|
Loading…
Add table
Add a link
Reference in a new issue