Neovim (ratataque)
NvChad-based Neovim config with harpoon, flash, telescope, and AI assistance
linuxratataqueeditorneovimluanvchad
Overview
ratataque's Neovim config is built on NvChad v2.5, extending it with custom plugins for navigation, editing, and AI assistance. Key features include treesitter-based folding, harpoon for file marks, flash for motion, and Avante for AI coding.
Structure
~/.config/nvim/
├── init.lua # Entry point, loads NvChad + plugins
├── lua/
│ ├── chadrc.lua # NvChad configuration
│ ├── options.lua # Vim options + folding setup
│ ├── mappings.lua # All keybindings organized by section
│ ├── configs/ # Plugin configurations
│ └── plugins/ # Plugin specs (40+ plugins)
Plugin Manager
Uses lazy.nvim with NvChad as the base:
require("lazy").setup({
{
"NvChad/NvChad",
lazy = false,
branch = "v2.5",
import = "nvchad.plugins",
},
{ import = "plugins" },
}, lazy_config)Core Options
vim.g.mapleader = " "
vim.opt.relativenumber = true
vim.opt.shiftwidth = 4
vim.opt.tabstop = 4
vim.opt.expandtab = true
-- Treesitter folding
vim.opt.foldmethod = "expr"
vim.opt.foldexpr = "v:lua.vim.treesitter.foldexpr()"
vim.opt.foldlevelstart = 0Key Plugins
Harpoon (file marks)
Quick file switching with Alt + home row keys:
["<A-f>"] = { "<cmd>lua require('harpoon.ui').nav_file(1)<CR>" },
["<A-d>"] = { "<cmd>lua require('harpoon.ui').nav_file(2)<CR>" },
["<A-s>"] = { "<cmd>lua require('harpoon.ui').nav_file(3)<CR>" },
["<A-a>"] = { "<cmd>lua require('harpoon.ui').nav_file(4)<CR>" },
["<leader>mf"] = { "<cmd>lua require('harpoon.mark').replace_file(1)<CR>" },
["<C-e>"] = { "<cmd>lua require('harpoon.ui').toggle_quick_menu()<CR>" },Telescope
["<leader>."] = { "<cmd>Telescope find_files<CR>" },
["<leader>ff"] = { "<cmd>Telescope frecency workspace=CWD<CR>" },
["<leader>fw"] = { "<cmd>Telescope live_grep<CR>" },
["<leader>b"] = { "<cmd>Telescope buffers<CR>" },
["<leader>/"] = { "<cmd>Telescope current_buffer_fuzzy_find<CR>" },
["<leader>fu"] = { "<cmd>Telescope undo<CR>" },
[":"] = { "<cmd>Telescope cmdline<CR>" },Flash + Leap
Motion plugins for fast cursor navigation (configured via plugin specs).
Avante (AI)
["<leader>e"] = { "<cmd>AvanteToggle<CR>" },
["<leader>ao"] = { "<cmd>AvanteClear<CR>" },
-- Visual mode
["<leader>ae"] = { "<cmd>AvanteEdit<CR>" },blink.cmp
Completion engine with LSP, path, snippets, and buffer sources.
Keybindings
Organized into sections in mappings.lua:
General
["<A-x>"] = { "<C-w>c", "Window close" },
["<A-e>"] = { "<cmd>qa<CR>", "Exit" },
["<leader>j"] = { "<cmd>normal! zz<CR>", "Center buffer" },
["<leader>ca"] = { "<cmd>lua require('tiny-code-action').code_action()<CR>" },
["<leader>cb"] = { "<cmd>%bd|e#<CR>", "Close all buffers" },
["<leader><leader>"] = { "<cmd>Telescope resume<CR>" },Folding
["<leader>l"] = { "zA", "Toggle fold recursively" },
["<leader>k"] = { "za", "Toggle fold" },
["<leader>K"] = { "zRzz", "Open all folds" },
["<leader>L"] = { "zMzz", "Close all folds" },
["<leader>h"] = { "zMzvzz", "Focus current fold" },
["["] = { "zj", "Next fold" },
["]"] = { "zk", "Prev fold" },Git
["<leader>gg"] = { "<cmd>LazyGit<CR>" },
["<leader>gc"] = { "<cmd>Telescope git_commits<CR>" },
["<leader>gb"] = { "<cmd>Telescope git_branches<CR>" },
["<leader>gs"] = { "<cmd>Telescope git_status<CR>" },
["<leader>gvd"] = { "<cmd>DiffviewOpen<CR>" },
["<leader>gvf"] = { "<cmd>DiffviewFileHistory %<CR>" },Text Editing
-- Insert mode
["<C-b>"] = { "<ESC>^i", "Beginning of line" },
["<C-e>"] = { "<End>", "End of line" },
["<C-h>"] = { "<Backspace>", "Backspace" },
["<C-l>"] = { "<Delete>", "Delete" },
-- Visual mode: move lines
["<C-j>"] = { ":m '>+1<CR>gv=gv", "Move down" },
["<C-k>"] = { ":m '<-2<CR>gv=gv", "Move up" },
-- Visual surround
["("] = { "<Plug>(nvim-surround-visual)(" },
["{"] = { "<Plug>(nvim-surround-visual){" },DAP (Debugging)
["<leader>ds"] = { "<cmd>lua require'dap'.toggle_breakpoint()<CR>" },
["<leader>dm"] = { "<cmd>DapContinue<CR>" },
["<down>"] = { "<cmd>DapStepInto<CR>" },
["<up>"] = { "<cmd>DapStepOver<CR>" },Various Text Objects
Custom text objects via various-textobjs:
vim.keymap.set({ "o", "x" }, "an", 'require("various-textobjs").number("outer")')
vim.keymap.set({ "o", "x" }, "aa", 'require("various-textobjs").indentation("outer", "outer")')
vim.keymap.set({ "o", "x" }, "iv", 'require("various-textobjs").value("inner")')
vim.keymap.set({ "o", "x" }, "ik", 'require("various-textobjs").key("inner")')
vim.keymap.set({ "o", "x" }, "O", 'require("various-textobjs").subword("inner")')
vim.keymap.set({ "o", "x" }, "o", "iw")Notable Plugins
- telescope.nvim + frecency, undo, cmdline extensions
- harpoon - Quick file switching
- flash.nvim + leap.nvim - Motion
- nvim-surround - Surround operations
- trouble.nvim - Diagnostics panel
- lazygit.nvim - Git UI
- diffview.nvim - Git diff viewer
- avante.nvim - AI coding assistant
- conform.nvim - Formatting
- auto-session - Session management
- yazi.nvim - File manager integration
- blink.cmp - Completion
- various-textobjs - Custom text objects
Neovide Support
if vim.g.neovide then
vim.g.neovide_transparency = 0.8
vim.g.neovide_refresh_rate = 120
vim.g.neovide_cursor_vfx_mode = "ripple"
vim.g.neovide_scale_factor = 0.7
vim.g.neovide_window_blurred = 1
end