Compare commits
2 commits
f71df2ee98
...
7393fc696a
Author | SHA1 | Date | |
---|---|---|---|
7393fc696a | |||
83af9ac2ac |
8 changed files with 252 additions and 0 deletions
|
@ -58,6 +58,10 @@ with final.pkgs.lib; let
|
|||
lexima-vim
|
||||
(mkNvimPlugin inputs.neotab-nvim "neotab.nvim")
|
||||
ts-comments-nvim
|
||||
mini-ai
|
||||
|
||||
# Formatting
|
||||
conform-nvim
|
||||
|
||||
# Treesitter
|
||||
nvim-treesitter-textobjects
|
||||
|
@ -103,6 +107,10 @@ with final.pkgs.lib; let
|
|||
# Language servers
|
||||
lua-language-server
|
||||
nixd
|
||||
|
||||
# Formatters
|
||||
shfmt
|
||||
stylua
|
||||
];
|
||||
in {
|
||||
# This is the neovim derivation returned by the overlay.
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
---@type {[string]:"azure" | "blue" | "cyan" | "green" | "grey" | "orange" | "purple" | "red" | "yellow"}
|
||||
return {
|
||||
around = 'purple',
|
||||
buffers = 'cyan',
|
||||
change = 'cyan',
|
||||
delete = 'red',
|
||||
|
@ -9,6 +10,7 @@ return {
|
|||
format = 'purple',
|
||||
git = 'orange',
|
||||
go_to = 'cyan',
|
||||
inner = 'purple',
|
||||
notifications = 'orange',
|
||||
replace = 'blue',
|
||||
search = 'green',
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
return {
|
||||
around = '',
|
||||
bottom = '',
|
||||
center = '',
|
||||
change = '',
|
||||
|
@ -35,9 +36,47 @@ return {
|
|||
right = '',
|
||||
increase = '',
|
||||
},
|
||||
inner = '',
|
||||
last = '',
|
||||
lazygit = '',
|
||||
left = '',
|
||||
lsp = {
|
||||
array = '',
|
||||
boolean = '',
|
||||
class = '',
|
||||
color = '',
|
||||
control = '',
|
||||
constant = '',
|
||||
constructor = '',
|
||||
enum = '',
|
||||
enummember = '',
|
||||
event = '',
|
||||
field = '',
|
||||
file = '',
|
||||
folder = '',
|
||||
['function'] = '',
|
||||
interface = '',
|
||||
key = '',
|
||||
keyword = '',
|
||||
method = '',
|
||||
module = '',
|
||||
namespace = '',
|
||||
null = '',
|
||||
number = '',
|
||||
object = '',
|
||||
operator = '',
|
||||
package = '',
|
||||
property = '',
|
||||
reference = '',
|
||||
snippet = '',
|
||||
string = '',
|
||||
struct = '',
|
||||
text = '',
|
||||
typeparameter = '',
|
||||
unit = '',
|
||||
value = '',
|
||||
variable = '',
|
||||
},
|
||||
next = '',
|
||||
notifications = '',
|
||||
prev = '',
|
||||
|
|
|
@ -5,4 +5,5 @@ return {
|
|||
req('lexima-vim'),
|
||||
req('neotab-nvim'),
|
||||
req('ts-comments-nvim'),
|
||||
req('mini-ai'),
|
||||
}
|
||||
|
|
124
nvim/lua/plugins/coding/mini-ai.lua
Normal file
124
nvim/lua/plugins/coding/mini-ai.lua
Normal file
|
@ -0,0 +1,124 @@
|
|||
return {
|
||||
'mini.ai',
|
||||
event = 'DeferredUIEnter',
|
||||
before = function()
|
||||
require('lz.n').trigger_load('which-key.nvim')
|
||||
end,
|
||||
after = function()
|
||||
local ai = require('mini.ai')
|
||||
|
||||
ai.setup({
|
||||
n_lines = 500,
|
||||
custom_textobjects = {
|
||||
-- code blOck
|
||||
o = ai.gen_spec.treesitter({
|
||||
a = { '@block.outer', '@conditional.outer', '@loop.outer' },
|
||||
i = { '@block.inner', '@conditional.inner', '@loop.inner' },
|
||||
}),
|
||||
|
||||
-- Class
|
||||
c = ai.gen_spec.treesitter({
|
||||
a = '@class.outer',
|
||||
i = '@class.inner',
|
||||
}),
|
||||
|
||||
-- Usage (fn call)
|
||||
u = ai.gen_spec.function_call(),
|
||||
|
||||
-- Usage (to last .)
|
||||
U = ai.gen_spec.function_call({ name_pattern = '[%w_]' }),
|
||||
|
||||
-- Digit
|
||||
d = { '%f[%d]%d+' },
|
||||
|
||||
-- word within casE (snake_case, CamelCase, etc)
|
||||
e = {
|
||||
{
|
||||
'%u[%l%d]+%f[^%l%d]',
|
||||
'%f[%S][%l%d]+%f[^%l%d]',
|
||||
'%f[%P][%l%d]+%f[^%l%d]',
|
||||
'^[%l%d]+%f[^%l%d]',
|
||||
},
|
||||
'^().*()$',
|
||||
},
|
||||
|
||||
-- buffer
|
||||
g = {
|
||||
from = { line = 1, col = 1 },
|
||||
to = {
|
||||
line = vim.fn.line('$'),
|
||||
col = math.max(vim.fn.getline('$'):len(), 1),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
local i = require('icons')
|
||||
local c = require('colors')
|
||||
local mkA = MarleyVim.wkSpec(c.around)
|
||||
local mkI = MarleyVim.wkSpec(c.inner)
|
||||
|
||||
---@param lhs string
|
||||
---@param icon string
|
||||
---@param opts table
|
||||
local function mkKey(lhs, icon, opts)
|
||||
if lhs:sub(1, 1) == 'a' then
|
||||
return mkA(lhs, nil, icon, opts)
|
||||
else
|
||||
return mkI(lhs, nil, icon, opts)
|
||||
end
|
||||
end
|
||||
|
||||
local groups = {
|
||||
around = { 'a', i.around },
|
||||
around_last = { 'al', i.around },
|
||||
around_next = { 'an', i.around },
|
||||
inner = { 'i', i.inner },
|
||||
inner_last = { 'il', i.inner },
|
||||
inner_next = { 'in', i.inner },
|
||||
}
|
||||
|
||||
local mappings = {
|
||||
{ '<SPACE>', '', 'whitespace' },
|
||||
{ '"', '', 'double quotes' },
|
||||
{ "'", '', 'single quotes' },
|
||||
{ '`', '', 'backticks' },
|
||||
{ '(', '', '()' },
|
||||
{ ')', '', '() with ws' },
|
||||
{ '[', '', '[] block' },
|
||||
{ ']', '', '[] block with ws' },
|
||||
{ '{', '', '{} block' },
|
||||
{ '}', '', '{} block with ws' },
|
||||
{ '<', '', '<>' },
|
||||
{ '>', '', '<> with ws' },
|
||||
{ '_', '', 'underscores' },
|
||||
{ '?', '', 'user prompt' },
|
||||
{ 'a', i.lsp.variable, 'argument' },
|
||||
{ 'b', '', ')]} block' },
|
||||
{ 'c', i.lsp.class, 'class' },
|
||||
{ 'd', i.lsp.number, 'numbers' },
|
||||
{ 'e', i.lsp.variable, 'word within case' },
|
||||
{ 'f', i.lsp['function'], 'function' },
|
||||
{ 'g', i.lsp.file, 'entire buffer' },
|
||||
{ 'o', i.lsp.control, 'block, conditional, loop' },
|
||||
{ 'q', i.lsp.string, 'quotes/backticks' },
|
||||
{ 't', '', 'tags' },
|
||||
{ 'u', i.lsp.method, 'use/call' },
|
||||
{ 'U', i.lsp.method, 'use/call without dot' },
|
||||
}
|
||||
|
||||
local spec = { mode = { 'o', 'x' } }
|
||||
|
||||
for name, data in pairs(groups) do
|
||||
name = name:gsub('^around_', ''):gsub('^insude_', '')
|
||||
|
||||
spec[#spec + 1] = mkKey(data[1], data[2], { group = name })
|
||||
|
||||
for _, item in ipairs(mappings) do
|
||||
spec[#spec + 1] = mkKey(data[1] .. item[1], item[2], { desc = item[3] })
|
||||
end
|
||||
end
|
||||
|
||||
require('which-key').add({ spec })
|
||||
end,
|
||||
}
|
43
nvim/lua/plugins/formatting/conform-nvim.lua
Normal file
43
nvim/lua/plugins/formatting/conform-nvim.lua
Normal file
|
@ -0,0 +1,43 @@
|
|||
return {
|
||||
'conform.nvim',
|
||||
event = { 'BufWritePre' },
|
||||
cmd = { 'ConformInfo' },
|
||||
keys = {
|
||||
{
|
||||
'<LEADER>cf',
|
||||
function()
|
||||
require('conform').format()
|
||||
end,
|
||||
desc = 'format',
|
||||
},
|
||||
{
|
||||
'<LEADER>cF',
|
||||
function()
|
||||
require('conform').format({
|
||||
formatters = { 'injected' },
|
||||
timeout_ms = 3000,
|
||||
})
|
||||
end,
|
||||
mode = { 'n', 'v' },
|
||||
desc = 'format injected langs',
|
||||
},
|
||||
},
|
||||
after = function()
|
||||
require('conform').setup({
|
||||
format_on_save = function(buf)
|
||||
if (vim.g.autoformat == false) or (vim.b[buf].autoformat == false) then
|
||||
return
|
||||
end
|
||||
|
||||
return { timeout_ms = 3000, lsp_format = 'fallback' }
|
||||
end,
|
||||
formatters_by_ft = {
|
||||
lua = { 'stylua' },
|
||||
fish = { 'fish_indent' },
|
||||
sh = { 'shfmt' },
|
||||
},
|
||||
})
|
||||
|
||||
vim.o.formatexpr = "v:lua.require'conform'.formatexpr()"
|
||||
end,
|
||||
}
|
5
nvim/lua/plugins/formatting/init.lua
Normal file
5
nvim/lua/plugins/formatting/init.lua
Normal file
|
@ -0,0 +1,5 @@
|
|||
local req = MarleyVim.local_require('plugins.formatting')
|
||||
|
||||
return {
|
||||
req('conform-nvim'),
|
||||
}
|
|
@ -61,6 +61,36 @@ if vim.lsp.inlay_hint then
|
|||
toggle.inlay_hints():map('<LEADER>uh')
|
||||
end
|
||||
|
||||
toggle({
|
||||
name = 'auto format (global)',
|
||||
get = function()
|
||||
return vim.g.autoformat == nil or vim.g.autoformat
|
||||
end,
|
||||
set = function(enable)
|
||||
vim.g.autoformat = (enable == nil and true) or enable
|
||||
vim.b.autoformat = nil
|
||||
end,
|
||||
}):map('<LEADER>uf')
|
||||
|
||||
toggle({
|
||||
name = 'auto format (buffer)',
|
||||
get = function()
|
||||
local buf = vim.api.nvim_get_current_buf()
|
||||
|
||||
local gopt = vim.g.autoformat
|
||||
local bopt = vim.b[buf].autoformat
|
||||
|
||||
if bopt ~= nil then
|
||||
return bopt
|
||||
end
|
||||
|
||||
return gopt == nil or gopt
|
||||
end,
|
||||
set = function(enable)
|
||||
vim.b.autoformat = (enable == nil and true) or enable
|
||||
end,
|
||||
}):map('<LEADER>uF')
|
||||
|
||||
-- Git -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
|
||||
set({ 'n' }, '<LEADER>gb', function()
|
||||
|
|
Loading…
Reference in a new issue