feat(nvim): can't remember

This commit is contained in:
2025-09-20 07:22:11 +02:00
parent 02ecd3f25f
commit 0bb9a6f7c0
7 changed files with 383 additions and 300 deletions

View File

@@ -1,69 +1,128 @@
-- return {
-- 'hrsh7th/nvim-cmp',
-- dependencies = {
-- 'neovim/nvim-lspconfig',
-- 'hrsh7th/cmp-nvim-lsp',
-- 'hrsh7th/cmp-buffer',
-- 'hrsh7th/cmp-path',
-- 'hrsh7th/cmp-cmdline',
-- 'hrsh7th/cmp-vsnip',
-- 'hrsh7th/vim-vsnip',
-- },
-- config = function ()
-- local cmp = require'cmp'
-- cmp.setup({
-- snippet = {
-- expand = function(args)
-- vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users.
-- end,
-- },
-- window = {
-- completion = cmp.config.window.bordered(),
-- documentation = cmp.config.window.bordered(),
-- },
-- sources = cmp.config.sources({
-- { name = 'nvim_lsp' },
-- { name = 'vsnip' }, -- For vsnip users.
-- { name = 'path' },
-- {
-- name = 'buffer',
-- option = {
-- keyword_length = 3,
-- get_bufnrs = function()
-- return vim.api.nvim_list_bufs()
-- end
-- }
-- },
-- }, {
-- { name = 'buffer' },
-- })
-- })
--
-- -- Set configuration for specific filetype.
-- cmp.setup.filetype('gitcommit', {
-- sources = cmp.config.sources({
-- { name = 'git' }, -- You can specify the `git` source if [you were installed it](https://github.com/petertriho/cmp-git).
-- }, {
-- { name = 'buffer' },
-- })
-- })
--
-- -- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore).
-- cmp.setup.cmdline({ '/', '?' }, {
-- mapping = cmp.mapping.preset.cmdline(),
-- sources = {
-- { name = 'buffer' }
-- }
-- })
--
-- -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
-- cmp.setup.cmdline(':', {
-- mapping = cmp.mapping.preset.cmdline(),
-- sources = cmp.config.sources({
-- { name = 'path' }
-- }, {
-- { name = 'cmdline' }
-- })
-- })
-- end
-- }
return { return {
'hrsh7th/nvim-cmp', "saghen/blink.cmp",
dependencies = { -- optional: provides snippets for the snippet source
'neovim/nvim-lspconfig', dependencies = { "rafamadriz/friendly-snippets" },
'hrsh7th/cmp-nvim-lsp',
'hrsh7th/cmp-buffer',
'hrsh7th/cmp-path',
'hrsh7th/cmp-cmdline',
'hrsh7th/cmp-vsnip',
'hrsh7th/vim-vsnip',
},
config = function ()
local cmp = require'cmp'
cmp.setup({
snippet = {
expand = function(args)
vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users.
end,
},
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'vsnip' }, -- For vsnip users.
{ name = 'path' },
{
name = 'buffer',
option = {
keyword_length = 3,
get_bufnrs = function()
return vim.api.nvim_list_bufs()
end
}
},
}, {
{ name = 'buffer' },
})
})
-- Set configuration for specific filetype. -- use a release tag to download pre-built binaries
cmp.setup.filetype('gitcommit', { version = "1.*",
sources = cmp.config.sources({ -- AND/OR build from source, requires nightly: https://rust-lang.github.io/rustup/concepts/channels.html#working-with-nightly-rust
{ name = 'git' }, -- You can specify the `git` source if [you were installed it](https://github.com/petertriho/cmp-git). -- build = 'cargo build --release',
}, { -- If you use nix, you can build from source using latest nightly rust with:
{ name = 'buffer' }, -- build = 'nix run .#build-plugin',
})
})
-- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore). ---@module 'blink.cmp'
cmp.setup.cmdline({ '/', '?' }, { ---@type blink.cmp.Config
mapping = cmp.mapping.preset.cmdline(), opts = {
-- 'default' (recommended) for mappings similar to built-in completions (C-y to accept)
-- 'super-tab' for mappings similar to vscode (tab to accept)
-- 'enter' for enter to accept
-- 'none' for no mappings
--
-- All presets have the following mappings:
-- C-space: Open menu or open docs if already open
-- C-n/C-p or Up/Down: Select next/previous item
-- C-e: Hide menu
-- C-k: Toggle signature help (if signature.enabled = true)
--
-- See :h blink-cmp-config-keymap for defining your own keymap
keymap = { preset = "default" },
appearance = {
-- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font'
-- Adjusts spacing to ensure icons are aligned
nerd_font_variant = "mono",
},
-- (Default) Only show the documentation popup when manually triggered
completion = {
documentation = {
auto_show = false,
auto_show_delay_ms = 200,
},
},
-- Default list of enabled providers defined so that you can extend it
-- elsewhere in your config, without redefining it, due to `opts_extend`
sources = { sources = {
{ name = 'buffer' } default = { "lsp", "path", "snippets", "buffer" },
} },
})
-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). -- (Default) Rust fuzzy matcher for typo resistance and significantly better performance
cmp.setup.cmdline(':', { -- You may use a lua implementation instead by using `implementation = "lua"` or fallback to the lua implementation,
mapping = cmp.mapping.preset.cmdline(), -- when the Rust fuzzy matcher is not available, by using `implementation = "prefer_rust"`
sources = cmp.config.sources({ --
{ name = 'path' } -- See the fuzzy documentation for more information
}, { fuzzy = { implementation = "prefer_rust_with_warning" },
{ name = 'cmdline' } },
}) opts_extend = { "sources.default" },
})
end
} }

View File

@@ -18,7 +18,8 @@ return {
markdown = { "prettier" }, markdown = { "prettier" },
graphql = { "prettier" }, graphql = { "prettier" },
lua = { "stylua" }, lua = { "stylua" },
python = { "isort", "black" }, -- python = { "isort", "black" },
python = { "ruff_fix", "ruff_format" },
}, },
format_on_save = { format_on_save = {
lsp_fallback = true, lsp_fallback = true,

View File

@@ -28,9 +28,10 @@ return {
ensure_installed = { ensure_installed = {
"prettier", -- prettier formatter "prettier", -- prettier formatter
"stylua", -- lua formatter "stylua", -- lua formatter
"isort", -- python formatter -- "isort", -- python formatter
"black", -- python formatter -- "black", -- python formatter
"flake8", -- python linter -- "flake8", -- python linter
"ruff",
"eslint_d", -- js linter "eslint_d", -- js linter
}, },
}) })

View File

@@ -2,31 +2,35 @@ return {
"nvim-lualine/lualine.nvim", "nvim-lualine/lualine.nvim",
dependencies = { dependencies = {
"folke/noice.nvim", "folke/noice.nvim",
'nvim-tree/nvim-web-devicons', "nvim-tree/nvim-web-devicons",
}, },
config = function () config = function()
local colors = { local colors = {
bg = '#202328', bg = "#202328",
fg = '#bbc2cf', fg = "#bbc2cf",
yellow = '#ECBE7B', yellow = "#ECBE7B",
cyan = '#008080', cyan = "#008080",
darkblue = '#081633', darkblue = "#081633",
green = '#98be65', green = "#98be65",
orange = '#FF8800', orange = "#FF8800",
violet = '#a9a1e1', violet = "#a9a1e1",
magenta = '#c678dd', magenta = "#c678dd",
blue = '#51afef', blue = "#51afef",
red = '#ec5f67' red = "#ec5f67",
} }
local conditions = { local conditions = {
buffer_not_empty = function() return vim.fn.empty(vim.fn.expand('%:t')) ~= 1 end, buffer_not_empty = function()
hide_in_width = function() return vim.fn.winwidth(0) > 80 end, return vim.fn.empty(vim.fn.expand("%:t")) ~= 1
end,
hide_in_width = function()
return vim.fn.winwidth(0) > 80
end,
check_git_workspace = function() check_git_workspace = function()
local filepath = vim.fn.expand('%:p:h') local filepath = vim.fn.expand("%:p:h")
local gitdir = vim.fn.finddir('.git', filepath .. ';') local gitdir = vim.fn.finddir(".git", filepath .. ";")
return gitdir and #gitdir > 0 and #gitdir < #filepath return gitdir and #gitdir > 0 and #gitdir < #filepath
end end,
} }
-- Config -- Config
@@ -40,9 +44,9 @@ return {
-- We are going to use lualine_c an lualine_x as left and -- We are going to use lualine_c an lualine_x as left and
-- right section. both are highlighted by c theme . so we -- right section. both are highlighted by c theme . so we
-- are just setting default looks o statusline -- are just setting default looks o statusline
normal = {c = {fg = colors.fg, bg = colors.bg}}, normal = { c = { fg = colors.fg, bg = colors.bg } },
inactive = {c = {fg = colors.fg, bg = colors.bg}} inactive = { c = { fg = colors.fg, bg = colors.bg } },
} },
}, },
sections = { sections = {
-- these are to remove the defaults -- these are to remove the defaults
@@ -57,8 +61,8 @@ return {
require("noice").api.statusline.mode.get, require("noice").api.statusline.mode.get,
cond = require("noice").api.statusline.mode.has, cond = require("noice").api.statusline.mode.has,
color = { fg = "#ff9e64" }, color = { fg = "#ff9e64" },
} },
} },
}, },
inactive_sections = { inactive_sections = {
-- these are to remove the defaults -- these are to remove the defaults
@@ -67,8 +71,8 @@ return {
lualine_y = {}, lualine_y = {},
lualine_z = {}, lualine_z = {},
lualine_c = {}, lualine_c = {},
lualine_x = {} lualine_x = {},
} },
} }
-- inserts a component in lualine_c at left section -- inserts a component in lualine_c at left section
@@ -85,13 +89,13 @@ return {
n = colors.red, n = colors.red,
i = colors.green, i = colors.green,
v = colors.blue, v = colors.blue,
[''] = colors.blue, [""] = colors.blue,
v = colors.blue, v = colors.blue,
c = colors.magenta, c = colors.magenta,
no = colors.red, no = colors.red,
s = colors.orange, s = colors.orange,
s = colors.orange, s = colors.orange,
[''] = colors.orange, [""] = colors.orange,
ic = colors.yellow, ic = colors.yellow,
r = colors.violet, r = colors.violet,
rv = colors.violet, rv = colors.violet,
@@ -99,55 +103,60 @@ return {
ce = colors.red, ce = colors.red,
r = colors.cyan, r = colors.cyan,
rm = colors.cyan, rm = colors.cyan,
['r?'] = colors.cyan, ["r?"] = colors.cyan,
['!'] = colors.red, ["!"] = colors.red,
t = colors.red t = colors.red,
} }
ins_left { ins_left({
-- mode component -- mode component
function() function()
-- auto change color according to neovims mode -- auto change color according to neovims mode
vim.api.nvim_command( vim.api.nvim_command("hi! lualinemode guifg=" .. mode_color[vim.fn.mode()] .. " guibg=" .. colors.bg)
'hi! lualinemode guifg=' .. mode_color[vim.fn.mode()] .. " guibg=" .. colors.bg) return ""
return ''
end, end,
color = "lualinemode", color = "lualinemode",
left_padding = 0 left_padding = 0,
} })
ins_left { ins_left({
"mode", "mode",
color = {fg = colors.green, gui = 'bold'} color = { fg = colors.green, gui = "bold" },
} })
ins_left { ins_left({
-- filesize component -- filesize component
function() function()
local function format_file_size(file) local function format_file_size(file)
local size = vim.fn.getfsize(file) local size = vim.fn.getfsize(file)
if size <= 0 then return '' end if size <= 0 then
local sufixes = {'b', 'k', 'm', 'g'} return ""
end
local sufixes = { "b", "k", "m", "g" }
local i = 1 local i = 1
while size > 1024 do while size > 1024 do
size = size / 1024 size = size / 1024
i = i + 1 i = i + 1
end end
return string.format('%.1f%s', size, sufixes[i]) return string.format("%.1f%s", size, sufixes[i])
end
local file = vim.fn.expand("%:p")
if string.len(file) == 0 then
return ""
end end
local file = vim.fn.expand('%:p')
if string.len(file) == 0 then return '' end
return format_file_size(file) return format_file_size(file)
end, end,
condition = conditions.buffer_not_empty condition = conditions.buffer_not_empty,
} })
ins_left { ins_left({
-- Lsp server name . -- Lsp server name .
function() function()
local msg = 'No Active Lsp' local msg = "No Active Lsp"
local buf_ft = vim.api.nvim_buf_get_option(0, 'filetype') local buf_ft = vim.api.nvim_buf_get_option(0, "filetype")
local clients = vim.lsp.get_active_clients() local clients = vim.lsp.get_clients()
if next(clients) == nil then return msg end if next(clients) == nil then
return msg
end
for _, client in ipairs(clients) do for _, client in ipairs(clients) do
local filetypes = client.config.filetypes local filetypes = client.config.filetypes
if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then
@@ -156,67 +165,71 @@ return {
end end
return msg return msg
end, end,
icon = ' LSP:', icon = " LSP:",
color = {fg = '#ffffff', gui = 'bold'} color = { fg = "#ffffff", gui = "bold" },
} })
ins_left { ins_left({
'diagnostics', "diagnostics",
sources = {'nvim_diagnostic'}, sources = { "nvim_diagnostic" },
symbols = {error = '', warn = '', info = ''}, symbols = { error = "", warn = "", info = "" },
color_error = colors.red, color_error = colors.red,
color_warn = colors.yellow, color_warn = colors.yellow,
color_info = colors.cyan color_info = colors.cyan,
} })
-- Insert mid section. You can make any number of sections in neovim :) -- Insert mid section. You can make any number of sections in neovim :)
-- for lualine it's any number greater then 2 -- for lualine it's any number greater then 2
ins_left {function() return '%=' end} ins_left({
function()
return "%="
end,
})
ins_left { ins_left({
'filename', "filename",
file_status = true, file_status = true,
path = 1, path = 1,
condition = conditions.buffer_not_empty, condition = conditions.buffer_not_empty,
color = {fg = colors.magenta, gui = 'bold'} color = { fg = colors.magenta, gui = "bold" },
} })
-- Add components to right sections -- Add components to right sections
ins_right { ins_right({
'o:encoding', -- option component same as &encoding in viml "o:encoding", -- option component same as &encoding in viml
upper = true, -- I'm not sure why it's upper case either ;) upper = true, -- I'm not sure why it's upper case either ;)
condition = conditions.hide_in_width, condition = conditions.hide_in_width,
color = {fg = colors.green, gui = 'bold'} color = { fg = colors.green, gui = "bold" },
} })
ins_right { ins_right({
'fileformat', "fileformat",
upper = true, upper = true,
icons_enabled = false, -- I think icons are cool but Eviline doesn't have them. sigh icons_enabled = false, -- I think icons are cool but Eviline doesn't have them. sigh
color = {fg = colors.green, gui = 'bold'} color = { fg = colors.green, gui = "bold" },
} })
ins_right { ins_right({
'branch', "branch",
icon = '', icon = "",
condition = conditions.check_git_workspace, condition = conditions.check_git_workspace,
color = {fg = colors.violet, gui = 'bold'} color = { fg = colors.violet, gui = "bold" },
} })
ins_right { ins_right({
'diff', "diff",
-- Is it me or the symbol for modified us really weird -- Is it me or the symbol for modified us really weird
symbols = {added = '', modified = '', removed = ''}, symbols = { added = "", modified = "", removed = "" },
color_added = colors.green, color_added = colors.green,
color_modified = colors.orange, color_modified = colors.orange,
color_removed = colors.red, color_removed = colors.red,
condition = conditions.hide_in_width condition = conditions.hide_in_width,
} })
ins_right {'location'} ins_right({ "location" })
ins_right {'progress', color = {fg = colors.fg, gui = 'bold'}} ins_right({ "progress", color = { fg = colors.fg, gui = "bold" } })
require('lualine').setup(config) require("lualine").setup(config)
end end,
} }

View File

@@ -21,24 +21,24 @@ return {
"markdown_inline", "markdown_inline",
}, },
sync_install = false, sync_install = false,
highlight = { enable = true }, highlight = { enable = false },
indent = { enable = true }, indent = { enable = true },
}) })
end, end,
opts = function(_, opts) -- opts = function(_, opts)
vim.treesitter.language.register("markdown", "mdx") -- vim.treesitter.language.register("markdown", "mdx")
-- vim.list_extend(opts.highlight.disable, { "tsx" }) -- vim.list_extend(opts.highlight.disable, { "tsx" })
if type(opts.ensure_installed) == "table" then -- if type(opts.ensure_installed) == "table" then
vim.list_extend(opts.ensure_installed, { -- vim.list_extend(opts.ensure_installed, {
"bibtex", -- "bibtex",
"latex", -- "latex",
-- you can add more here -- -- you can add more here
}) -- })
end -- end
if type(opts.highlight.disable) == "table" then -- if type(opts.highlight.disable) == "table" then
vim.list_extend(opts.highlight.disable, { "latex", "bibtex" }) -- vim.list_extend(opts.highlight.disable, { "latex", "bibtex" })
else -- else
opts.highlight.disable = { "latex", "bibtex" } -- opts.highlight.disable = { "latex", "bibtex" }
end -- end
end, -- end,
} }

View File

@@ -20,7 +20,7 @@ return {
vim.g.vimtex_compiler_latexmk = { vim.g.vimtex_compiler_latexmk = {
aux_dir = "./aux", aux_dir = "./aux",
out_dir = "./out", out_dir = "./",
} }
end, end,
}, },

View File

@@ -9,5 +9,14 @@ return {
-- your configuration comes here -- your configuration comes here
-- or leave it empty to use the default settings -- or leave it empty to use the default settings
-- refer to the configuration section below -- refer to the configuration section below
} },
keys = {
{
"<leader>?",
function()
require("which-key").show({ global = false })
end,
desc = "Buffer Local Keymaps (which-key)",
},
},
} }