Skip to content

Instantly share code, notes, and snippets.

@storopoli
Last active April 6, 2026 07:46
Show Gist options
  • Select an option

  • Save storopoli/ff55e50f7292c4b1806f6c3469781722 to your computer and use it in GitHub Desktop.

Select an option

Save storopoli/ff55e50f7292c4b1806f6c3469781722 to your computer and use it in GitHub Desktop.
Minimal Neovim config
-------------------------------------------------------------------------------
-- DEPENDENCIES
-- neovim >=0.12 ripgrep fd fzf
-------------------------------------------------------------------------------
-- Options
-- Set highlight on search
vim.o.hlsearch = false
vim.o.incsearch = true
vim.o.nu = true
vim.o.relativenumber = true
vim.o.tabstop = 2
vim.o.softtabstop = 2
vim.o.shiftwidth = 2
vim.o.expandtab = true
vim.o.hidden = true
vim.o.laststatus = 3
vim.o.winbar = "%=%m %f"
vim.o.mouse = "a"
-- Scrolling
vim.o.scrolloff = 8
vim.o.sidescrolloff = 8
-- Time in milliseconds to wait for a mapped sequence to complete
vim.o.timeoutlen = 500
vim.o.ttyfast = true
vim.o.wrap = false
vim.o.breakindent = true
-- Better undo history
vim.o.swapfile = false
vim.o.backup = false
vim.o.undodir = vim.fn.stdpath("data") .. "/undo"
vim.o.undofile = true
vim.o.ignorecase = true
vim.o.smartcase = true
vim.o.updatetime = 500
vim.wo.signcolumn = "yes"
vim.o.colorcolumn = "80"
vim.o.splitbelow = true
vim.o.splitright = true
vim.o.list = true
vim.opt.listchars = { tab = "» ", trail = "·", nbsp = "␣" }
vim.o.winborder = "rounded"
-- NOTE: Must happen before plugins are required (otherwise wrong leader will be used)
vim.g.mapleader = " "
vim.g.maplocalleader = " "
-- Colorcheme
vim.cmd.colorscheme "retrobox"
-- Keymaps for better default experience
vim.keymap.set({ "n", "v" }, "<Space>", "<Nop>", { silent = true })
vim.keymap.set("n", "Q", "<nop>")
-- Better movement
vim.keymap.set("n", "J", "mzJ`z")
vim.keymap.set("n", "<C-d>", "<C-d>zz")
vim.keymap.set("n", "<C-u>", "<C-u>zz")
vim.keymap.set("n", "n", "nzzzv")
vim.keymap.set("n", "N", "Nzzzv")
-- Better indenting
vim.keymap.set("v", "<", "<gv")
vim.keymap.set("v", ">", ">gv")
-- Clear search with <ESC>
vim.keymap.set({ "i", "n" }, "<ESC>", "<CMD>noh<CR><esc>")
-- Clear search, diff update and redraw
-- taken from runtime/lua/_editor.lua
vim.keymap.set("n", "<leader>R", "<CMD>nohlsearch<Bar>diffupdate<Bar>normal! <C-L><CR>")
-- J/K to move up/down visual lines
vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv")
vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")
vim.keymap.set("n", "<A-j>", "<CMD>m .+1<CR>==")
vim.keymap.set("n", "<A-k>", "<CMD>m .-2<CR>==")
vim.keymap.set("i", "<A-j>", "<ESC><CMD>m .+1<CR>==gi")
vim.keymap.set("i", "<A-k>", "<ESC><CMD>m .-2<CR>==gi")
vim.keymap.set("v", "<A-j>", ":m '>+1<CR>gv=gv")
vim.keymap.set("v", "<A-k>", ":m '<-2<CR>gv=gv")
-- Remap for dealing with word wrap
vim.keymap.set("n", "k", "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true })
vim.keymap.set("n", "j", "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true })
-- Easy save
vim.keymap.set("n", "<leader>w", "<CMD>w<CR>", { silent = true })
-- Easy Quit
vim.keymap.set("n", "<leader>q", "<CMD>q<CR>", { silent = true })
vim.keymap.set("n", "<leader>Q", "<CMD>qa!<CR>", { silent = true })
-- Terminal
vim.keymap.set("n", "<leader>t", "<CMD>split | wincmd j | terminal env INSIDE_NEOVIM=1 fish<CR>i", { silent = true })
vim.keymap.set("t", "<Esc>", "<C-\\><C-n>", { silent = true })
vim.api.nvim_create_autocmd("TermOpen", {
callback = function()
vim.keymap.set("n", "q", "<CMD>q<CR>", { buffer = true, silent = true })
end
})
-- Global Yank
vim.keymap.set({ "n", "v", "x" }, "<leader>y", '"+y', { noremap = true, silent = true })
-- Plugins
vim.pack.add({
"https://github.com/ibhagwan/fzf-lua",
"https://github.com/neovim/nvim-lspconfig",
})
-- FZF-lua
vim.o.termguicolors = true
require "fzf-lua".setup { defaults = { git_icons = false } }
vim.api.nvim_set_keymap("n", "<C-\\>", [[<Cmd>lua require"fzf-lua".buffers()<CR>]], {})
vim.api.nvim_set_keymap("n", "<C-k>", [[<Cmd>lua require"fzf-lua".diagnostics_workspace()<CR>]], {})
vim.api.nvim_set_keymap("n", "<C-p>", [[<Cmd>lua require"fzf-lua".global()<CR>]], {})
vim.api.nvim_set_keymap("n", "<C-l>", [[<Cmd>lua require"fzf-lua".live_grep()<CR>]], {})
vim.api.nvim_set_keymap("n", "<C-g>", [[<Cmd>lua require"fzf-lua".grep_project()<CR>]], {})
vim.api.nvim_set_keymap("n", "<C-h>", [[<Cmd>lua require"fzf-lua".git_diff()<CR>]], {})
vim.api.nvim_set_keymap("n", "gs", [[<Cmd>lua require"fzf-lua".lsp_document_symbols()<CR>]], {})
vim.api.nvim_set_keymap("n", "gS", [[<Cmd>lua require"fzf-lua".lsp_live_workspace_symbols()<CR>]], {})
-- LSPs
vim.o.autocomplete = true
vim.o.completeopt = 'menu,menuone,noselect,nearest'
vim.o.pumborder = 'rounded' -- optional, nice UI
vim.o.pummaxwidth = 40
vim.diagnostic.config({ virtual_text = false, virtual_lines = { current_line = true } })
vim.api.nvim_create_autocmd("LspAttach", {
callback = function(args)
local bufnr = args.buf
local client = assert(vim.lsp.get_client_by_id(args.data.client_id))
-- Native LSP completion
if client:supports_method("textDocument/completion") then
vim.lsp.completion.enable(true, client.id, bufnr, { autotrigger = true })
end
-- Make sure the built-in LSP-powered gq is active
if client:supports_method("textDocument/formatting") then
vim.bo[bufnr].formatexpr = "v:lua.vim.lsp.formatexpr()"
end
-- Copilot LSP - Taken from :h lspconfig-all
if client:supports_method(vim.lsp.protocol.Methods.textDocument_inlineCompletion, bufnr) then
vim.lsp.inline_completion.enable(true, { bufnr = bufnr })
vim.keymap.set(
"i",
"<C-F>",
vim.lsp.inline_completion.get,
{ desc = "LSP: accept inline completion", buffer = bufnr }
)
vim.keymap.set(
"i",
"<C-G>",
vim.lsp.inline_completion.select,
{ desc = "LSP: switch inline completion", buffer = bufnr }
)
end
end
})
-- Auto-starts LSP when a buffer is opened, based on the lsp-config
-- `filetypes`, `root_markers`, and `root_dir` fields.
vim.lsp.enable({
"lua_ls",
"hls",
"rust_analyzer",
"taplo",
"yamlls",
"bashls",
"pyright",
"ruff",
"ty",
"copilot",
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment