nvim config update

This commit is contained in:
Christopher Beckmann
2024-12-12 18:04:51 +01:00
parent 38138f6746
commit 310b6c4d25
11 changed files with 336 additions and 144 deletions

View File

@@ -0,0 +1,9 @@
for _, style in ipairs({ "compact", "fancy", "minimal" }) do
for _, level in ipairs({ "debug", "warn", "error" }) do
Snacks.notifier.notify(
"- `notifier` says **hello**\n- and *goodbye*",
level,
{ style = style, timeout = 10000, title = "Snacks" }
)
end
end

View File

@@ -17,6 +17,10 @@ vim.keymap.set("n", "<leader>nh", vim.cmd.noh)
-- clear highlight on search when pressing <ESC>
-- vim.keymap.set('n', '<ESC>', '<cmd>nohlsearch<CR>')
vim.keymap.set("n", "<space><space>x", "<cmd>source %<CR>")
vim.keymap.set("n", "<space>x", ":.lua<CR>")
vim.keymap.set("v", "<space>x", ":lua<CR>")
-- Highlight when yanking text
vim.api.nvim_create_autocmd("TextYankPost", {
desc = "Highlight when yanking text",

View File

@@ -1,14 +1,14 @@
in_wsl = os.getenv('WSL_DISTRO_NAME') ~= nil
local in_wsl = os.getenv('WSL_DISTRO_NAME') ~= nil
-- https://mitchellt.com/2022/05/15/WSL-Neovim-Lua-and-the-Windows-Clipboard.html
if in_wsl then
vim.g.clipboard = {
name = 'wsl clipboard',
copy = {
["+"] = { "clip.exe" },
["*"] = { "clip.exe" }
copy = {
["+"] = { "clip.exe" },
["*"] = { "clip.exe" }
},
paste = {
paste = {
["+"] = { 'powershell.exe -c [Console]::Out.Write($(Get-Clipboard -Raw).tostring().replace("`r", ""))' },
["*"] = { 'powershell.exe -c [Console]::Out.Write($(Get-Clipboard -Raw).tostring().replace("`r", ""))' } },
cache_enabled = true
@@ -65,7 +65,6 @@ local options = {
smartcase = true,
showtabline = 0,
cursorline = true,
background = "dark",
termguicolors = true,
@@ -83,8 +82,8 @@ local options = {
updatetime = 50,
showmode = false,
list = true,
listchars = { tab = '┬╗ ', trail = '┬╖', nbsp= 'ΓÉú'},
-- list = true,
-- listchars = { tab = '┬╗ ', trail = '┬╖', nbsp= 'ΓÉú'},
inccommand = 'split',
cursorline = true,

View File

@@ -1,33 +1,85 @@
local function check_backspace()
local col = vim.fn.col(".") - 1
if col == 0 or vim.fn.getline("."):sub(col, col):match("%s") then
return true
else
return false
end
end
local function T(str)
return vim.api.nvim_replace_termcodes(str, true, true, true)
end
return {
{
'L3MON4D3/LuaSnip',
dependencies = {
'saadparwaiz1/cmp_luasnip',
'rafamadriz/friendly-snippets',
},
config = function()
require("luasnip.loaders.from_vscode").lazy_load()
end
},
{
'hrsh7th/nvim-cmp',
dependencies = {
'hrsh7th/cmp-nvim-lsp',
'hrsh7th/cmp-buffer',
-- 'hrsh7th/cmp-path',
-- 'hrsh7th/cmp-cmdline',
'L3MON4D3/LuaSnip',
'hrsh7th/cmp-path',
'hrsh7th/cmp-cmdline',
'onsails/lspkind.nvim',
{ 'L3MON4D3/LuaSnip', build = "make install_jsregexp" },
'saadparwaiz1/cmp_luasnip',
'rafamadriz/friendly-snippets',
},
lazy = false,
priority = 100,
config = function()
vim.opt.completeopt = { "menu", "menuone" }
local lspkind = require('lspkind')
local cmp = require('cmp')
local ls = require("luasnip")
ls.setup({
history = true,
})
ls.filetype_extend("latex", { "tex" })
-- require("luasnip.loaders.from_vscode").lazy_load()
require("luasnip.loaders.from_lua").load({
-- paths = vim.api.nvim_get_runtime_file("lua/kamu/snippets/", true)[1]
paths = "~/.config/nvim/lua/kamu/snippets/",
})
-- require("luasnip.loaders").edit_snippet_files()
-- vim.keymap.set({ "i", "s" }, "<Tab>", function()
-- if ls.expand_or_jumpable() then
-- ls.expand_or_jump()
-- else
-- return "<Tab>"
-- end
-- end, { expr = true, silent = true })
--
-- vim.keymap.set({ "i", "s" }, "<S-Tab>", function()
-- if ls.jumpable(-1) then
-- ls.jump(-1)
-- else
-- print("can't go further back")
-- end
-- end, { silent = true })
cmp.setup({
formatting = {
format = lspkind.cmp_format({
mode = 'symbol_text',
}),
},
ellipsis_char = '...',
show_labelDetails = true,
snippet = {
-- REQUIRED - you must specify a snippet engine
expand = function(args)
require('luasnip').lsp_expand(args.body) -- For `luasnip` users.
-- vim.snippet.expand(args.body)
require('luasnip').lsp_expand(args.body)
end,
},
maxwidth = {
menu = 50,
abbr = 50,
},
window = {
-- completion = cmp.config.window.bordered(),
-- documentation = cmp.config.window.bordered(),
@@ -37,14 +89,37 @@ return {
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.abort(),
['<Tab>'] = cmp.mapping.confirm({ select = false }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
-- ['<Tab>'] = cmp.mapping.confirm({ select = false }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
['<CR>'] = cmp.mapping.confirm({ select = false }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
['<Tab>'] = cmp.mapping(function(fallback)
if vim.fn.pumvisible() == 1 then
vim.fn.feedkeys(T('<C-n>'), 'n')
elseif ls.expand_or_jumpable() then
ls.expand_or_jump()
elseif not check_backspace() then
cmp.mapping.complete()(core, fallback)
else
vim.cmd(':>')
vim.cmd(':startinsert')
end
end, { "i", "s" }),
['<S-Tab>'] = cmp.mapping(function(fallback)
if vim.fn.pumvisible() == 1 then
vim.fn.feedkeys(T('<C-p>'), 'n')
elseif ls.jumpable(-1) then
ls.jump(-1)
else
vim.cmd(':<')
vim.cmd(':startinsert')
end
end, { "i", "s" }),
}),
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
}, {
{ name = 'path' },
{ name = 'buffer' },
})
}),
})
-- Set configuration for specific filetype.
@@ -63,6 +138,7 @@ return {
-- { name = 'buffer' }
-- }
-- })
--
-- -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
-- cmp.setup.cmdline(':', {

View File

@@ -1,76 +1,76 @@
return {
{
-- lsp client plugin
"neovim/nvim-lspconfig", -- https://github.com/neovim/nvim-lspconfig
dependencies = {
"williamboman/mason.nvim", -- https://github.com/williamboman/mason.nvim
"williamboman/mason-lspconfig.nvim", -- https://github.com/williamboman/mason-lspconfig.nvim bridges the gab between lspconfig and mason
-- "folke/neodev.nvim", -- https://github.com/folke/neodev.nvim
},
config = function()
local capabilities = require('cmp_nvim_lsp').default_capabilities()
require('mason').setup()
require('mason-lspconfig').setup({
ensure_installed = {
'lua_ls',
-- lsp client plugin
"neovim/nvim-lspconfig", -- https://github.com/neovim/nvim-lspconfig
dependencies = {
"williamboman/mason.nvim", -- https://github.com/williamboman/mason.nvim
"williamboman/mason-lspconfig.nvim", -- https://github.com/williamboman/mason-lspconfig.nvim bridges the gab between lspconfig and mason
{
"folke/lazydev.nvim", -- https://github.com/folke/lazydev.nvim
ft = "lua",
opts = {
library = {
{ path = "${3rd}/luv/library", words = { "vim%.uv" } },
},
handlers = {
-- set up all installed servers automatically
function(server_name)
require("lspconfig")[server_name].setup({
-- print(server_name),
capabilities = capabilities
})
end,
["ansiblels"] = function()
require("lspconfig")['ansiblels'].setup({
filetypes = {
"yaml",
},
-- settings = {
-- },
})
end,
}
})
-- require("neodev").setup({})
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('KamuLspConfig', {}),
callback = function(ev)
local opts = { buffer = ev.buf }
vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts)
vim.keymap.set("n", "K", function() vim.lsp.buf.hover() end, opts)
vim.keymap.set("n", "<leader>ca", function() vim.lsp.buf.code_action() end, opts)
vim.keymap.set('n', '<space>f', function()
vim.lsp.buf.format { async = true }
end, opts)
vim.keymap.set("n", "<leader>vws", function() vim.lsp.buf.workspace_symbol() end, opts)
vim.keymap.set("n", "<leader>vd", function() vim.diagnostic.open_float() end, opts)
vim.keymap.set("n", "[d", function() vim.diagnostic.goto_next() end, opts)
vim.keymap.set("n", "]d", function() vim.diagnostic.goto_prev() end, opts)
vim.keymap.set("n", "<leader>vrr", function() vim.lsp.buf.references() end, opts)
vim.keymap.set("n", "<leader>vrn", function() vim.lsp.buf.rename() end, opts)
vim.keymap.set("i", "<C-h>", function() vim.lsp.buf.signature_help() end, opts)
end,
})
end
},
},
},
{
"nvimtools/none-ls.nvim",
config = function()
local null_ls = require("null-ls")
config = function()
local capabilities = require('cmp_nvim_lsp').default_capabilities()
null_ls.setup({
sources = {
null_ls.builtins.formatting.black,
null_ls.builtins.formatting.isort,
}
})
end
}
require('mason').setup()
require('mason-lspconfig').setup({
ensure_installed = {
'lua_ls',
},
handlers = {
function(server_name)
require("lspconfig")[server_name].setup({
capabilities = capabilities
})
end,
["ansiblels"] = function()
require("lspconfig")['ansiblels'].setup({
filetypes = {
"yaml",
},
})
end,
}
})
vim.api.nvim_create_autocmd('LspAttach', {
-- group = vim.api.nvim_create_augroup('KamuLspConfig', {}),
callback = function(ev)
local opts = { buffer = ev.buf }
local client = vim.lsp.get_client_by_id(ev.data.client_id)
if not client then return end
vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts)
vim.keymap.set("n", "K", function() vim.lsp.buf.hover() end, opts)
vim.keymap.set("n", "<leader>ca", function() vim.lsp.buf.code_action() end, opts)
vim.keymap.set('n', '<space>f', function()
vim.lsp.buf.format { async = true }
end, opts)
vim.keymap.set("n", "<leader>vws", function() vim.lsp.buf.workspace_symbol() end, opts)
vim.keymap.set("n", "<leader>vd", function() vim.diagnostic.open_float() end, opts)
vim.keymap.set("n", "[d", function() vim.diagnostic.goto_next() end, opts)
vim.keymap.set("n", "]d", function() vim.diagnostic.goto_prev() end, opts)
vim.keymap.set("n", "<leader>vrr", function() vim.lsp.buf.references() end, opts)
vim.keymap.set("n", "<leader>vrn", function() vim.lsp.buf.rename() end, opts)
vim.keymap.set("i", "<C-h>", function() vim.lsp.buf.signature_help() end, opts)
-- Format on save
if client.supports_method('textDocument/formatting') and vim.bo.filetype == "lua" then
vim.api.nvim_create_autocmd('BufWritePre', {
buffer = ev.buf,
callback = function()
vim.lsp.buf.format({ bufnr = ev.buf, id = client.id })
end,
})
end
end,
})
end
}

View File

@@ -65,7 +65,7 @@ end
return {
'nvim-lualine/lualine.nvim',
dependencies = {
dependencies = {
'kyazdani42/nvim-web-devicons',
'folke/noice.nvim',
},
@@ -75,8 +75,8 @@ return {
theme = 'catppuccin',
--fmt = string.lower,
icons_enabled = true,
component_separators = { left = '', right = ''},
section_separators = { left = '', right = ''},
component_separators = { left = '', right = '' },
section_separators = { left = '', right = '' },
disabled_filetypes = {
statusline = {},
winbar = {},
@@ -104,7 +104,7 @@ return {
{
'branch',
color = { fg = "#FFF" },
icon = { 'εéá', color = function() return { fg = getModeColor('a', 'bg') } end },
icon = { '', color = function() return { fg = getModeColor('a', 'bg') } end },
},
{
'diff',
@@ -138,13 +138,13 @@ return {
} },
lualine_x = {
-- print recording messages
{
require("noice").api.statusline.mode.get,
cond = function()
return require("noice").api.statusline.mode.has() and string.match(require("noice").api.statusline.mode.get(), '^recording @.$') ~= nil
end,
color = { fg = "#ff9e64" },
},
-- {
-- require("noice").api.statusline.mode.get,
-- cond = function()
-- return require("noice").api.statusline.mode.has() and string.match(require("noice").api.statusline.mode.get(), '^recording @.$') ~= nil
-- end,
-- color = { fg = "#ff9e64" },
-- },
'encoding', 'fileformat', 'filetype' },
lualine_y = {
{

View File

@@ -1,26 +0,0 @@
return {
"folke/noice.nvim",
event = "VeryLazy",
opts = {
},
dependencies = {
"rcarriga/nvim-notify",
"MunifTanjim/nui.nvim",
},
config = function(_, opts)
require("noice").setup(opts)
require("notify").setup({
background_colour = "#000000",
level = 2,
minimum_width = 50,
render = "compact",
time_formats = {
notification = "%T",
notification_history = "%FT%T"
},
timeout = 5000,
top_down = true
})
end,
}

View File

@@ -0,0 +1,66 @@
return {
"folke/snacks.nvim",
priority = 1000,
lazy = false,
keys = {
{ "<leader>sh", "<cmd>lua Snacks.notifier.show_history()<CR>", mode = "n", desc = "Show the notification History" }
},
opts = {
bigfile = { enabled = true },
notifier = {
enabled = true,
{
timeout = 3000, -- default timeout in ms
width = { min = 40, max = 0.4 },
height = { min = 1, max = 0.6 },
margin = { top = 0, right = 1, bottom = 0 },
padding = true, -- add 1 cell of left/right padding to the notification window
sort = { "level", "added" }, -- sort by level and time
level = vim.log.levels.TRACE,
icons = {
error = "",
warn = "",
info = "",
debug = "",
trace = "",
},
keep = function(notif)
return vim.fn.getcmdpos() > 0
end,
style = "compact",
top_down = true, -- place notifications from top to bottom
date_format = "%R", -- time format for notifications
more_format = " ↓ %d lines ",
refresh = 50, -- refresh at most every 50ms
}
},
quickfile = { enabled = true },
statuscolumn = { enabled = true },
words = { enabled = true },
},
init = function()
vim.api.nvim_create_autocmd("User", {
pattern = "VeryLazy",
callback = function()
_G.dd = function(...)
Snacks.debug.inspect(...)
end
_G.bt = function()
Snacks.debug.backtrace()
end
vim.print = _G.dd -- Override print to use snacks for `:=` command
Snacks.toggle.option("spell", { name = "Spelling" }):map("<leader>us")
Snacks.toggle.option("wrap", { name = "Wrap" }):map("<leader>uw")
Snacks.toggle.option("relativenumber", { name = "Relative Number" }):map("<leader>uL")
Snacks.toggle.diagnostics():map("<leader>ud")
Snacks.toggle.line_number():map("<leader>ul")
Snacks.toggle.option("conceallevel", { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2 }):map(
"<leader>uc")
Snacks.toggle.treesitter():map("<leader>uT")
Snacks.toggle.option("background", { off = "light", on = "dark", name = "Dark Background" }):map("<leader>ub")
Snacks.toggle.inlay_hints():map("<leader>uh")
end,
})
end,
}

View File

@@ -1,17 +1,39 @@
return {
"nvim-telescope/telescope.nvim",
tag = '0.1.3',
dependencies = {'nvim-lua/plenary.nvim'},
"nvim-telescope/telescope.nvim",
tag = '0.1.8',
dependencies = {
'nvim-lua/plenary.nvim',
{ 'nvim-telescope/telescope-fzf-native.nvim', build = 'make' },
},
config = function()
require("telescope").setup()
require("telescope").setup({
pickers = {
find_files = {
theme = "ivy",
},
},
extensions = {
fzf = {},
}
})
require('telescope').load_extension('fzf')
local builtin = require('telescope.builtin')
vim.keymap.set('n', '<leader>ff', builtin.find_files, {})
vim.keymap.set('n', '<leader>ff', builtin.find_files)
vim.keymap.set('n', '<leader>fn', function() builtin.find_files { cwd = vim.fn.stdpath("config") } end)
vim.keymap.set('n', '<leader>fr', function()
builtin.live_grep {
cwd = "~/reports",
file_ignore_patterns = { "/Makefile$", "%.png$", "%.PNG$" }
}
end)
vim.keymap.set('n', '<leader>fg', builtin.live_grep, {})
vim.keymap.set('n', '<leader>fb', builtin.buffers, {})
vim.keymap.set('n', '<leader>fh', builtin.help_tags, {})
vim.keymap.set('n', '<leader>fs', builtin.current_buffer_fuzzy_find, {})
vim.keymap.set('n', '<leader>fo', builtin.lsp_document_symbols, {})
vim.keymap.set('n', '<leader>fi', builtin.lsp_incoming_calls, {})
vim.keymap.set('n', '<leader>fm', function() builtin.treesitter({default_text=":method:"}) end)
vim.keymap.set('n', '<leader>fm', function() builtin.treesitter({ default_text = ":method:" }) end)
end,
}

View File

@@ -0,0 +1,31 @@
-- require("luasnip.session.snippet_collection").clear_snippets("tex")
local ls = require("luasnip")
local s = ls.snippet
local i = ls.insert_node
local sn = ls.snippet_node
local t = ls.text_node
local f = ls.function_node
local c = ls.choice_node
local d = ls.dynamic_node
local r = ls.restore_node
local fmt = require("luasnip.extras.fmt").fmt
local snippets = {
-- s("todo", fmt("\\sytodo[{}]{{ {} }}{}", { c(1, { t("todo"), t("techqa") }), i(2, "techqa"), i(0) })),
s("todo",
fmt("\\sytodo[{}]{{{}}}{}",
{
i(1, "techqa"),
i(2),
i(0)
}
)
)
}
local autosnippets = {}
ls.add_snippets("tex", snippets)
return snippets, autosnippets