linters/formatters

This commit is contained in:
iofq 2025-03-14 12:47:25 -05:00
parent dab37cf7a5
commit 5043280c65
6 changed files with 80 additions and 23 deletions

View file

@ -31,9 +31,9 @@
pkgs = import nixpkgs {
inherit system;
overlays = [
neovim-overlay
inputs.neovim-nightly-overlay.overlays.default
gen-luarc.overlays.default
neovim-overlay
];
};
shell = pkgs.mkShell {

View file

@ -16,6 +16,7 @@ with final.pkgs.lib; let
blink-cmp
blink-ripgrep-nvim
codecompanion-nvim
conform-nvim
copilot-lua
diffview-nvim
eyeliner-nvim
@ -25,12 +26,12 @@ with final.pkgs.lib; let
luasnip
mini-nvim
neogit
none-ls-nvim
nightfox-nvim
nvim-autopairs
# nvim-dap
# nvim-dap-go
# nvim-dap-ui
nvim-lint
nvim-lspconfig
# nvim-nio
nvim-treesitter-context
@ -52,6 +53,7 @@ with final.pkgs.lib; let
# linters
puppet-lint
yamllint
jq
# LSPs
gopls

View file

@ -1,5 +1,6 @@
vim.opt.autowrite = true
vim.opt.backspace = 'indent,eol,start'
vim.opt.clipboard = 'unnamedplus'
vim.opt.confirm = true
vim.opt.completeopt = { 'menu', 'menuone', 'noselect' }
vim.opt.expandtab = true -- insert tabs as spaces
vim.opt.inccommand = 'split' -- incremental live completion
@ -80,7 +81,7 @@ vim.diagnostic.config {
-- random keymaps
vim.keymap.set('n', 'gq', vim.cmd.bdelete, { silent = true })
vim.keymap.set('n', 'gQ', '<cmd>%bd|e#', { silent = true })
vim.keymap.set('n', 'gQ', '<cmd>%bd|e#<CR>', { silent = true })
vim.keymap.set('n', 'gt', vim.cmd.bnext, { silent = true })
vim.keymap.set('n', 'gr', vim.cmd.bprev, { silent = true })
vim.keymap.set('n', 'tr', 'gT', { noremap = true, silent = true })
@ -88,4 +89,30 @@ vim.keymap.set('n', 'tt', 'gt', { noremap = true, silent = true })
vim.keymap.set('n', 'n', 'nzz', { noremap = true, silent = true })
vim.keymap.set('n', 'N', 'Nzz', { noremap = true, silent = true })
vim.keymap.set({ 'v', 'i' }, 'wq', '<esc>l', { noremap = true, silent = true })
vim.keymap.set('n', '<leader>x', '"rd', { remap = true, silent = true })
vim.keymap.set('v', "<", "<gv")
vim.keymap.set('v', ">", ">gv")
-- clipboard
vim.keymap.set({ 'n', 'v', 'x' }, '<leader>y', '"+y', { noremap = true, silent = true })
vim.keymap.set('n', '<leader>yy', '"+yy', { noremap = true, silent = true })
vim.keymap.set({ 'n', 'v', 'x' }, '<leader>p', '"+p', { noremap = true, silent = true })
-- resize splits if window got resized
vim.api.nvim_create_autocmd({ "VimResized" }, {
group = vim.api.nvim_create_augroup("resize_splits", { clear = true }),
callback = function()
local current_tab = vim.fn.tabpagenr()
vim.cmd("tabdo wincmd =")
vim.cmd("tabnext " .. current_tab)
end,
})
-- Check if we need to reload the file when it changed
vim.api.nvim_create_autocmd({ "FocusGained", "TermClose", "TermLeave" }, {
group = vim.api.nvim_create_augroup("check_reload", { clear = true }),
callback = function()
if vim.o.buftype ~= "nofile" then
vim.cmd("checktime")
end
end,
})

View file

@ -129,9 +129,6 @@ return {
vim.keymap.set('n', '<leader>dh', function()
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
end, { buffer = ev.buf, noremap = true, silent = true, desc = 'LSP hints toggle' })
vim.keymap.set('n', '<space>df', function()
vim.lsp.buf.format { async = true }
end, { buffer = ev.buf, noremap = true, silent = true, desc = 'LSP format' })
-- Auto-refresh code lenses
if not client then
return
@ -153,16 +150,34 @@ return {
end,
},
{
'nvimtools/none-ls.nvim',
'stevearc/conform.nvim',
event = 'VeryLazy',
opts = {
notify_no_formatters = false,
formatters_by_ft = {
json = { "jq" },
puppet = { "puppet-lint" },
['*'] = { 'trim_whitespace' }
},
format_on_save = {
timeout_ms = 500,
lsp_format = "last",
},
},
},
{
'mfussenegger/nvim-lint',
event = 'VeryLazy',
config = function()
local null = require('null-ls')
null.setup {
sources = {
null.builtins.diagnostics.puppet_lint,
null.builtins.diagnostics.yamllint,
},
}
end,
require("lint").linters_by_ft = {
docker = { "hadolint" },
yaml = { "yamllint" },
puppet = { "puppet-lint" },
sh = { "shellcheck" },
go = { "golangcilint" },
ruby = { "rubocop" },
}
vim.api.nvim_command('au BufWritePost * lua require("lint").try_lint()')
end
},
}

View file

@ -2,6 +2,7 @@ return {
{
'echasnovski/mini.nvim',
lazy = false,
dependencies = { "folke/snacks.nvim" },
config = function()
require('mini.basics').setup { mappings = { windows = true, }, }
require('mini.tabline').setup({
@ -50,8 +51,6 @@ return {
require('mini.jump2d').setup({ mappings = { start_jumping = '<leader>S' } });
require('mini.surround').setup()
require('mini.splitjoin').setup { detect = { separator = '[,;\n]' }, }
require('mini.trailspace').setup()
vim.api.nvim_create_user_command('Trim', require('mini.trailspace').trim, {})
local miniclue = require('mini.clue')
miniclue.setup {
@ -136,6 +135,12 @@ return {
)
end,
})
vim.api.nvim_create_autocmd("User", {
pattern = "MiniFilesActionRename",
callback = function(event)
Snacks.rename.on_rename_file(event.data.from, event.data.to)
end,
})
end)
end,
},

View file

@ -6,6 +6,8 @@ return {
priority = 1000,
opts = {
bigfile = { enabled = true },
dim = { enabled = true },
quickfile = { enabled = true },
notifier = { enabled = true },
scope = { enabled = true },
terminal = { enabled = true },
@ -58,9 +60,10 @@ return {
end,
keys = {
{ '<C-\\>', function() Snacks.terminal.toggle() end, mode = { "n", "t" }, noremap = true, desc = 'terminal open' },
{ '<leader>t', function() Snacks.terminal.toggle('$SHELL') end, mode = { "n", "t" }, noremap = true, desc = 'terminal open' },
{ '\\\\', function() Snacks.terminal.toggle('$SHELL') end, mode = { "n", "t" }, noremap = true, desc = 'terminal open' },
{ 'm', function() Snacks.words.jump(1, true) end, noremap = true, desc = 'next reference' },
{ 'M', function() Snacks.words.jump(-1, true) end, noremap = true, desc = 'next reference' },
{ '\\z', function() Snacks.dim() end, noremap = true, desc = 'dim' },
{
'<leader>ff',
function() Snacks.picker.smart() end,
@ -68,9 +71,14 @@ return {
},
{
'<leader>fe',
function() Snacks.picker.explorer() end,
function() Snacks.explorer() end,
{ noremap = true, silent = true, desc = 'snacks explorer' }
},
{
'<leader>fE',
function() Snacks.explorer.reveal() end,
{ noremap = true, silent = true, desc = 'snacks explorer open current file' }
},
{
'<leader>fg',
function() Snacks.picker.files() end,