9 Commits

Author SHA1 Message Date
Natercio Moniz
10906c7fcf script to cleanup nvim env 2025-10-23 11:22:00 +01:00
Natercio Moniz
148c8a0716 remove avante 2025-08-05 09:49:40 +01:00
Natercio Moniz
5ac6e4b5ea enabled friendly-snippets 2025-08-05 09:49:14 +01:00
Natercio Moniz
4f3a964e42 add shortcut to toggle the debug sessions panel 2025-07-23 17:10:01 +01:00
Natercio Moniz
e97cbf946c remove console from dap-ui layout 2025-07-21 15:35:58 +01:00
Natercio Moniz
7040f7d16c add avante plugin with claude config 2025-07-04 16:22:02 +01:00
Natercio Moniz
0b78c0c95f close dap ui on terminate 2025-07-04 16:21:11 +01:00
Natercio Moniz
b4da99b909 update neo-vim config to match latest from docs 2025-06-27 13:37:46 +01:00
Natercio Moniz
8f22556eef add shortcut to display floating diagnostic 2025-06-27 13:13:07 +01:00
6 changed files with 513 additions and 105 deletions

65
clean.sh Executable file
View File

@@ -0,0 +1,65 @@
#!/bin/bash
set -euo pipefail
SRC_DIRS=(
"$HOME/.local/share/nvim"
"$HOME/.local/state/nvim"
"$HOME/.cache/nvim"
)
# Ask if user wants to backup
printf "Do you want to backup before cleaning? [Y/n]: "
read -r BACKUP_CHOICE
case ${BACKUP_CHOICE:-} in
[nN]|[nN][oO])
BACKUP=false
;;
*)
BACKUP=true
TAG=.bak-$(date +%Y-%m-%d_%H-%M-%S)
;;
esac
# Show plan and confirm
printf "\n"
if [ "$BACKUP" = true ]; then
printf "This will back up and clean your Neovim directories.\n"
printf "Backup suffix to be appended: %s\n\n" "$TAG"
printf "Plan:\n"
for SRC in "${SRC_DIRS[@]}"; do
if [ -e "$SRC" ]; then
DEST="${SRC}${TAG}"
printf " %s ➡️ %s\n" "$SRC" "$DEST"
fi
done
else
printf "This will remove your Neovim directories WITHOUT backup.\n\n"
printf "Plan:\n"
for SRC in "${SRC_DIRS[@]}"; do
if [ -e "$SRC" ]; then
printf " %s ❌\n" "$SRC"
fi
done
fi
printf "\n"
read -r -p "Are you sure you want to proceed? [y/N]: " CONFIRM
case ${CONFIRM:-} in
[yY]|[yY][eE][sS]) ;;
*) printf "Aborted!\n"; exit 0;;
esac
# Perform action based on backup choice
for SRC in "${SRC_DIRS[@]}"; do
if [ -e "$SRC" ]; then
if [ "$BACKUP" = true ]; then
DEST="${SRC}${TAG}"
mv "$SRC" "$DEST"
else
rm -rf "$SRC"
fi
fi
done
printf "Done!"

View File

@@ -145,33 +145,13 @@ require('lazy').setup({
require('telescope').setup {
-- You can put your default mappings / updates / etc. in here
-- All the info you're looking for is in `:help telescope.setup()`
--
defaults = {
mappings = {
i = { ['<c-enter>'] = 'to_fuzzy_refine' },
},
},
pickers = {
find_files = {
theme = 'ivy',
},
grep_string = {
theme = 'ivy',
},
live_grep = {
theme = 'ivy',
},
diagnostics = {
theme = 'ivy',
},
oldfiles = {
theme = 'ivy',
},
buffers = {
theme = 'dropdown',
previewer = false,
},
},
-- pickers = {}
extensions = {
['ui-select'] = {
require('telescope.themes').get_dropdown(),
@@ -514,15 +494,12 @@ require('lazy').setup({
return 'make install_jsregexp'
end)(),
dependencies = {
-- `friendly-snippets` contains a variety of premade snippets.
-- See the README about individual language/framework/plugin snippets:
-- https://github.com/rafamadriz/friendly-snippets
-- {
-- 'rafamadriz/friendly-snippets',
-- config = function()
-- require('luasnip.loaders.from_vscode').lazy_load()
-- end,
-- },
{
'rafamadriz/friendly-snippets',
config = function()
require('luasnip.loaders.from_vscode').lazy_load()
end,
},
},
opts = {},
},
@@ -574,6 +551,7 @@ require('lazy').setup({
sources = {
default = { 'lsp', 'path', 'snippets', 'lazydev' },
providers = {
snippets = { score_offset = -100 },
lazydev = { module = 'lazydev.integrations.blink', score_offset = 100 },
},
},

View File

@@ -17,16 +17,16 @@ return {
local keymap = {
['<C-u>'] = function()
neoscroll.ctrl_u { duration = 100 }
neoscroll.ctrl_u { duration = 150 }
end,
['<C-d>'] = function()
neoscroll.ctrl_d { duration = 100 }
neoscroll.ctrl_d { duration = 150 }
end,
['<C-b>'] = function()
neoscroll.ctrl_b { duration = 100 }
neoscroll.ctrl_b { duration = 300 }
end,
['<C-f>'] = function()
neoscroll.ctrl_f { duration = 100 }
neoscroll.ctrl_f { duration = 300 }
end,
['zt'] = function()
neoscroll.zt { half_win_duration = 150 }

View File

@@ -53,3 +53,7 @@ vim.keymap.set('n', '<leader>ch', function()
print(('Deleted %d out of %d hidden buffers'):format(deleteCount, deleteCount + skipCount))
end, bufinfos)
end, { desc = '[C]lose [H]idden buffers' })
vim.keymap.set('n', '<leader>tt', function()
vim.diagnostic.open_float(nil, { focus = false })
end, { desc = 'Toggle Trouble' })

View File

@@ -11,6 +11,7 @@ return {
local dap = require 'dap'
local dapui = require 'dapui'
local dapgo = require 'dap-go'
local dapwidgets = require 'dap.ui.widgets'
return {
-- Basic debugging keymaps, feel free to change to your liking!
@@ -34,7 +35,8 @@ return {
desc = 'Debug: Set Breakpoint',
},
-- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception.
{ '<leader>td', dapui.toggle, desc = 'Debug: [T]oggle [D]AP ui.' },
{ '<leader>td', dapui.toggle, desc = 'Debug: [T]oggle [D]AP ui' },
{ '<leader>ts', dapwidgets.sidebar(dapwidgets.sessions, nil, '5 sp').toggle, desc = 'Debug: [T]oggle [S]essions panel' }, -- show sessions panel
{ '<leader>rl', dap.run_last, desc = 'Debug: [R]un [l]ast' },
{ '<leader>rt', dapgo.debug_test, desc = 'Debug: [R]un [t]est' },
unpack(keys),
@@ -87,6 +89,28 @@ return {
disconnect = '',
},
},
layouts = {
{
elements = {
{ id = 'scopes', size = 0.25 },
{ id = 'breakpoints', size = 0.25 },
{ id = 'stacks', size = 0.25 },
{ id = 'watches', size = 0.25 },
},
size = 40, -- width of the panel
position = 'left',
},
{
elements = {
{ id = 'repl', size = 1.0 },
-- mostly useless to me (Delve doesn't use it)
-- { id = "console", size = 0.25 }
},
size = 10, -- height of the panel
position = 'bottom',
},
},
}
vim.fn.sign_define('DapBreakpoint', { text = '🔴', texthl = '', linehl = '', numhl = '' })
@@ -96,8 +120,8 @@ return {
vim.fn.sign_define('DapStopped', { text = '👉', texthl = '', linehl = '', numhl = '' })
dap.listeners.after.event_initialized['dapui_config'] = dapui.open
-- dap.listeners.before.event_terminated['dapui_config'] = dapui.close
-- dap.listeners.before.event_exited['dapui_config'] = dapui.close
dap.listeners.before.event_terminated['dapui_config'] = dapui.close
dap.listeners.before.event_exited['dapui_config'] = dapui.close
-- Install golang specific config
require('dap-go').setup {

View File

@@ -1,74 +1,411 @@
return {
'nvim-neo-tree/neo-tree.nvim',
version = '*',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended
'MunifTanjim/nui.nvim',
},
cmd = 'Neotree',
keys = {
{ '\\', ':Neotree reveal<CR>', desc = 'NeoTree reveal', silent = true },
},
opts = {
filesystem = {
hijack_netrw_behavior = 'open_default',
window = {
mappings = {
['\\'] = 'close_window',
},
},
filtered_items = {
visible = false,
hide_dotfiles = false,
hide_gitignored = true,
hide_by_name = {
'.git',
'.DS_Store',
},
never_show = {},
always_show_by_pattern = {
'.env*',
},
},
},
buffers = {
follow_current_file = {
enabled = true,
},
},
window = {
mappings = {
['<C-v>'] = 'open_vsplit',
['Y'] = function(state)
local node = state.tree:get_node()
local filepath = node:get_id()
local filename = node.name
local results = {
vim.fn.fnamemodify(filepath, ':.'),
filepath,
filename,
-- If you want neo-tree's file operations to work with LSP (updating imports, etc.), you can use a plugin like
-- https://github.com/antosha417/nvim-lsp-file-operations:
-- {
-- "antosha417/nvim-lsp-file-operations",
-- dependencies = {
-- "nvim-lua/plenary.nvim",
-- "nvim-neo-tree/neo-tree.nvim",
-- },
-- config = function()
-- require("lsp-file-operations").setup()
-- end,
-- },
{
'nvim-neo-tree/neo-tree.nvim',
branch = 'v3.x',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended
'MunifTanjim/nui.nvim',
-- {"3rd/image.nvim", opts = {}}, -- Optional image support in preview window: See `# Preview Mode` for more information
{
's1n7ax/nvim-window-picker', -- for open_with_window_picker keymaps
version = '2.*',
config = function()
require('window-picker').setup {
filter_rules = {
include_current_win = false,
autoselect_one = true,
-- filter using buffer options
bo = {
-- if the file type is one of following, the window will be ignored
filetype = { 'neo-tree', 'neo-tree-popup', 'notify' },
-- if the buffer type is one of following, the window will be ignored
buftype = { 'terminal', 'quickfix' },
},
},
}
local i = vim.fn.inputlist {
'Choose what to copy:',
'1. ' .. results[1],
'2. ' .. results[2],
'3. ' .. results[3],
}
if i > 0 then
local result = results[i]
if not result then
return print('Invalid choice: ' .. i)
end
vim.fn.setreg('"', result)
end
end,
},
},
lazy = false,
-----Instead of using `config`, you can use `opts` instead, if you'd like:
-----@module "neo-tree"
-----@type neotree.Config
--opts = {},
config = function()
-- If you want icons for diagnostic errors, you'll need to define them somewhere.
-- In Neovim v0.10+, you can configure them in vim.diagnostic.config(), like:
--
-- vim.diagnostic.config({
-- signs = {
-- text = {
-- [vim.diagnostic.severity.ERROR] = '',
-- [vim.diagnostic.severity.WARN] = '',
-- [vim.diagnostic.severity.INFO] = '',
-- [vim.diagnostic.severity.HINT] = '󰌵',
-- },
-- }
-- })
--
-- In older versions, you can define the signs manually:
-- vim.fn.sign_define("DiagnosticSignError", { text = " ", texthl = "DiagnosticSignError" })
-- vim.fn.sign_define("DiagnosticSignWarn", { text = " ", texthl = "DiagnosticSignWarn" })
-- vim.fn.sign_define("DiagnosticSignInfo", { text = " ", texthl = "DiagnosticSignInfo" })
-- vim.fn.sign_define("DiagnosticSignHint", { text = "󰌵", texthl = "DiagnosticSignHint" })
require('neo-tree').setup {
close_if_last_window = false, -- Close Neo-tree if it is the last window left in the tab
popup_border_style = 'NC', -- or "" to use 'winborder' on Neovim v0.11+
enable_git_status = true,
enable_diagnostics = true,
open_files_do_not_replace_types = { 'terminal', 'trouble', 'qf' }, -- when opening files, do not use windows containing these filetypes or buftypes
open_files_using_relative_paths = false,
sort_case_insensitive = false, -- used when sorting files and directories in the tree
sort_function = nil, -- use a custom function for sorting files and directories in the tree
-- sort_function = function (a,b)
-- if a.type == b.type then
-- return a.path > b.path
-- else
-- return a.type > b.type
-- end
-- end , -- this sorts files and directories descendantly
default_component_configs = {
container = {
enable_character_fade = true,
},
indent = {
indent_size = 2,
padding = 1, -- extra padding on left hand side
-- indent guides
with_markers = true,
indent_marker = '',
last_indent_marker = '',
highlight = 'NeoTreeIndentMarker',
-- expander config, needed for nesting files
with_expanders = nil, -- if nil and file nesting is enabled, will enable expanders
expander_collapsed = '',
expander_expanded = '',
expander_highlight = 'NeoTreeExpander',
},
icon = {
folder_closed = '',
folder_open = '',
folder_empty = '󰜌',
provider = function(icon, node, state) -- default icon provider utilizes nvim-web-devicons if available
if node.type == 'file' or node.type == 'terminal' then
local success, web_devicons = pcall(require, 'nvim-web-devicons')
local name = node.type == 'terminal' and 'terminal' or node.name
if success then
local devicon, hl = web_devicons.get_icon(name)
icon.text = devicon or icon.text
icon.highlight = hl or icon.highlight
end
end
end,
-- The next two settings are only a fallback, if you use nvim-web-devicons and configure default icons there
-- then these will never be used.
default = '*',
highlight = 'NeoTreeFileIcon',
},
modified = {
symbol = '[+]',
highlight = 'NeoTreeModified',
},
name = {
trailing_slash = false,
use_git_status_colors = true,
highlight = 'NeoTreeFileName',
},
git_status = {
symbols = {
-- Change type
added = '', -- or "✚", but this is redundant info if you use git_status_colors on the name
modified = '', -- or "", but this is redundant info if you use git_status_colors on the name
deleted = '', -- this can only be used in the git_status source
renamed = '󰁕', -- this can only be used in the git_status source
-- Status type
untracked = '',
ignored = '',
unstaged = '󰄱',
staged = '',
conflict = '',
},
},
-- If you don't want to use these columns, you can set `enabled = false` for each of them individually
file_size = {
enabled = true,
width = 12, -- width of the column
required_width = 64, -- min width of window required to show this column
},
type = {
enabled = true,
width = 10, -- width of the column
required_width = 122, -- min width of window required to show this column
},
last_modified = {
enabled = true,
width = 20, -- width of the column
required_width = 88, -- min width of window required to show this column
},
created = {
enabled = true,
width = 20, -- width of the column
required_width = 110, -- min width of window required to show this column
},
symlink_target = {
enabled = false,
},
},
-- A list of functions, each representing a global custom command
-- that will be available in all sources (if not overridden in `opts[source_name].commands`)
-- see `:h neo-tree-custom-commands-global`
commands = {},
window = {
position = 'left',
width = 40,
mapping_options = {
noremap = true,
nowait = true,
},
mappings = {
['\\'] = 'close_window',
['<space>'] = '<Nop>',
['<2-LeftMouse>'] = 'open',
['<cr>'] = 'open',
['<esc>'] = 'cancel', -- close preview or floating neo-tree window
['P'] = { 'toggle_preview', config = { use_float = true, use_image_nvim = true } },
-- Read `# Preview Mode` for more information
['l'] = 'focus_preview',
['S'] = 'open_split',
['s'] = 'open_vsplit',
-- ["S"] = "split_with_window_picker",
-- ["s"] = "vsplit_with_window_picker",
['t'] = 'open_tabnew',
-- ["<cr>"] = "open_drop",
-- ["t"] = "open_tab_drop",
['w'] = 'open_with_window_picker',
--["P"] = "toggle_preview", -- enter preview mode, which shows the current node without focusing
['C'] = 'close_node',
-- ['C'] = 'close_all_subnodes',
['z'] = 'close_all_nodes',
--["Z"] = "expand_all_nodes",
['Z'] = 'expand_all_subnodes',
['a'] = {
'add',
-- this command supports BASH style brace expansion ("x{a,b,c}" -> xa,xb,xc). see `:h neo-tree-file-actions` for details
-- some commands may take optional config options, see `:h neo-tree-mappings` for details
config = {
show_path = 'none', -- "none", "relative", "absolute"
},
},
['A'] = 'add_directory', -- also accepts the optional config.show_path option like "add". this also supports BASH style brace expansion.
['d'] = 'delete',
['r'] = 'rename',
['b'] = 'rename_basename',
['y'] = 'copy_to_clipboard',
['x'] = 'cut_to_clipboard',
['p'] = 'paste_from_clipboard',
--['c'] = 'copy', -- takes text input for destination, also accepts the optional config.show_path option like "add":
['c'] = {
'copy',
config = {
show_path = 'relative', -- "none", "relative", "absolute"
},
},
['m'] = 'move', -- takes text input for destination, also accepts the optional config.show_path option like "add".
['q'] = 'close_window',
['R'] = 'refresh',
['?'] = 'show_help',
['<'] = 'prev_source',
['>'] = 'next_source',
['i'] = 'show_file_details',
-- ["i"] = {
-- "show_file_details",
-- -- format strings of the timestamps shown for date created and last modified (see `:h os.date()`)
-- -- both options accept a string or a function that takes in the date in seconds and returns a string to display
-- -- config = {
-- -- created_format = "%Y-%m-%d %I:%M %p",
-- -- modified_format = "relative", -- equivalent to the line below
-- -- modified_format = function(seconds) return require('neo-tree.utils').relative_date(seconds) end
-- -- }
-- },
['Y'] = function(state)
local node = state.tree:get_node()
local filepath = node:get_id()
local filename = node.name
local results = {
filename,
vim.fn.fnamemodify(filepath, ':.'),
filepath,
}
local i = vim.fn.inputlist {
'Choose what to copy:',
'1. ' .. results[1],
'2. ' .. results[2],
'3. ' .. results[3],
}
if i > 0 then
local result = results[i]
if not result then
return print('Invalid choice: ' .. i)
end
vim.fn.setreg('+', result)
end
end,
},
},
nesting_rules = {},
filesystem = {
filtered_items = {
visible = true, -- when true, they will just be displayed differently than normal items
hide_dotfiles = true,
hide_gitignored = true,
hide_hidden = true, -- only works on Windows for hidden files/directories
hide_by_name = {
--"node_modules"
},
hide_by_pattern = { -- uses glob style patterns
--"*.meta",
--"*/src/*/tsconfig.json",
},
always_show = { -- remains visible even if other settings would normally hide it
'.gitignore',
},
always_show_by_pattern = { -- uses glob style patterns
'.env*',
},
never_show = { -- remains hidden even if visible is toggled to true, this overrides always_show
'.DS_Store',
--"thumbs.db"
},
never_show_by_pattern = { -- uses glob style patterns
--".null-ls_*",
},
},
follow_current_file = {
enabled = true, -- This will find and focus the file in the active buffer every time
-- -- the current file is changed while the tree is open.
leave_dirs_open = false, -- `false` closes auto expanded dirs, such as with `:Neotree reveal`
},
group_empty_dirs = false, -- when true, empty folders will be grouped together
hijack_netrw_behavior = 'open_current', -- netrw disabled, opening a directory opens neo-tree
-- in whatever position is specified in window.position
-- "open_current", -- netrw disabled, opening a directory opens within the
-- window like netrw would, regardless of window.position
-- "disabled", -- netrw left alone, neo-tree does not handle opening dirs
use_libuv_file_watcher = false, -- This will use the OS level file watchers to detect changes
-- instead of relying on nvim autocmd events.
window = {
mappings = {
['<bs>'] = 'navigate_up',
['.'] = 'set_root',
['H'] = 'toggle_hidden',
['/'] = 'fuzzy_finder',
['D'] = 'fuzzy_finder_directory',
['#'] = 'fuzzy_sorter', -- fuzzy sorting using the fzy algorithm
-- ["D"] = "fuzzy_sorter_directory",
['f'] = 'filter_on_submit',
['<c-x>'] = 'clear_filter',
['[g'] = 'prev_git_modified',
[']g'] = 'next_git_modified',
['o'] = {
'show_help',
nowait = false,
config = { title = 'Order by', prefix_key = 'o' },
},
['oc'] = { 'order_by_created', nowait = false },
['od'] = { 'order_by_diagnostics', nowait = false },
['og'] = { 'order_by_git_status', nowait = false },
['om'] = { 'order_by_modified', nowait = false },
['on'] = { 'order_by_name', nowait = false },
['os'] = { 'order_by_size', nowait = false },
['ot'] = { 'order_by_type', nowait = false },
-- ['<key>'] = function(state) ... end,
},
fuzzy_finder_mappings = { -- define keymaps for filter popup window in fuzzy_finder_mode
['<down>'] = 'move_cursor_down',
['<C-n>'] = 'move_cursor_down',
['<up>'] = 'move_cursor_up',
['<C-p>'] = 'move_cursor_up',
['<esc>'] = 'close',
-- ['<key>'] = function(state, scroll_padding) ... end,
},
},
commands = {}, -- Add a custom command or override a global one using the same function name
},
buffers = {
follow_current_file = {
enabled = true, -- This will find and focus the file in the active buffer every time
-- -- the current file is changed while the tree is open.
leave_dirs_open = false, -- `false` closes auto expanded dirs, such as with `:Neotree reveal`
},
group_empty_dirs = true, -- when true, empty folders will be grouped together
show_unloaded = true,
window = {
mappings = {
['d'] = 'buffer_delete',
['bd'] = 'buffer_delete',
['<bs>'] = 'navigate_up',
['.'] = 'set_root',
['o'] = {
'show_help',
nowait = false,
config = { title = 'Order by', prefix_key = 'o' },
},
['oc'] = { 'order_by_created', nowait = false },
['od'] = { 'order_by_diagnostics', nowait = false },
['om'] = { 'order_by_modified', nowait = false },
['on'] = { 'order_by_name', nowait = false },
['os'] = { 'order_by_size', nowait = false },
['ot'] = { 'order_by_type', nowait = false },
},
},
},
git_status = {
window = {
position = 'float',
mappings = {
['A'] = 'git_add_all',
['gu'] = 'git_unstage_file',
['gU'] = 'git_undo_last_commit',
['ga'] = 'git_add_file',
['gr'] = 'git_revert_file',
['gc'] = 'git_commit',
['gp'] = 'git_push',
['gg'] = 'git_commit_and_push',
['o'] = {
'show_help',
nowait = false,
config = { title = 'Order by', prefix_key = 'o' },
},
['oc'] = { 'order_by_created', nowait = false },
['od'] = { 'order_by_diagnostics', nowait = false },
['om'] = { 'order_by_modified', nowait = false },
['on'] = { 'order_by_name', nowait = false },
['os'] = { 'order_by_size', nowait = false },
['ot'] = { 'order_by_type', nowait = false },
},
},
},
}
vim.keymap.set('n', '\\', '<Cmd>Neotree reveal<CR>')
end,
},
}