Last active
March 31, 2026 22:36
-
-
Save teki/e5ed709de70b1e7556b9a2088ddfdb50 to your computer and use it in GitHub Desktop.
nvim config
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| -- Learn about Neovim's lua api | |
| -- https://neovim.io/doc/user/lua-guide.html | |
| vim.o.number = true | |
| vim.o.tabstop = 2 | |
| vim.o.shiftwidth = 2 | |
| vim.o.expandtab = true | |
| vim.o.smartcase = true | |
| vim.o.ignorecase = true | |
| vim.o.wrap = false | |
| vim.o.hlsearch = true | |
| vim.o.signcolumn = 'yes' | |
| vim.g.mapleader = ' ' | |
| local ok_theme = pcall(vim.cmd.colorscheme, 'retrobox') | |
| if not ok_theme then | |
| vim.cmd.colorscheme('habamax') | |
| end | |
| local min_version = "0.12.0" | |
| if vim.fn.has("nvim-" .. min_version) == 0 then | |
| vim.notify( | |
| "This config requires Neovim >= " .. min_version .. ". Please update!", | |
| vim.log.levels.ERROR | |
| ) | |
| return | |
| end | |
| -- Install plugins | |
| vim.pack.add({'https://github.com/nvim-mini/mini.nvim'}) | |
| vim.pack.add({'https://github.com/neovim/nvim-lspconfig'}) | |
| vim.pack.add({'https://github.com/nvim-lua/plenary.nvim'}) | |
| vim.pack.add({'https://github.com/mikavilpas/yazi.nvim'}) | |
| vim.pack.add({'https://github.com/ibhagwan/fzf-lua'}) | |
| vim.pack.add({'https://github.com/akinsho/toggleterm.nvim'}) | |
| vim.pack.add({'https://github.com/Punity122333/hexinspector.nvim'}) | |
| require('mini.icons').setup({}) | |
| require('mini.snippets').setup({}) | |
| -- completion | |
| require('mini.completion').setup({}) | |
| -- basic git support | |
| require('mini.git').setup({}) | |
| require('mini.diff').setup({}) | |
| require('mini.notify').setup({}) | |
| -- used by fzf-lua | |
| require('fzf-lua').setup({'fzf-native'}) | |
| -- terminal window manage | |
| require('toggleterm').setup({}) | |
| -- HexEdit [path] and HexInspect [path] | |
| require('hexinspector').setup({}) | |
| -- auto cwd to project, restore cursor position | |
| require('mini.misc').setup() | |
| require('mini.statusline').setup() | |
| -- not sure: show indent on line | |
| require('mini.indentscope').setup({}) | |
| -- highlight whitespace end of line | |
| require('mini.trailspace').setup({}) | |
| -- highlight word under cursor | |
| require('mini.cursorword').setup({}) | |
| -- open screen | |
| require('mini.starter').setup({}) | |
| -- lazygit overlay | |
| local Terminal = require('toggleterm.terminal').Terminal | |
| local lazygit = Terminal:new({ cmd = "lazygit", hidden = true, direction = "float", name = "lazygit" }) | |
| function _G._lazygit_toggle() | |
| lazygit:toggle() | |
| end | |
| vim.keymap.set('n', '<leader>g', '<cmd>lua _lazygit_toggle()<cr>', {noremap = true, silent = true}) | |
| -- terminal overlay | |
| local myterm = Terminal:new({ hidden = true, direction = "float", name = "myterm", dir="~/work" }) | |
| function _G._myterm_toggle() | |
| myterm:toggle() | |
| end | |
| vim.keymap.set('n', '<leader>t', '<cmd>lua _myterm_toggle()<cr>', {desc = 'Open terminal'}) | |
| -- common term: if you only want these mappings for toggle term use term://*toggleterm#* instead | |
| function _G.set_terminal_keymaps() | |
| local opts = {buffer = 0} | |
| vim.keymap.set('t', '<C-w>', [[<C-\><C-n><C-w>]], opts) | |
| end | |
| vim.cmd('autocmd! TermOpen term://* lua set_terminal_keymaps()') | |
| -- Basic clipboard interaction | |
| vim.keymap.set({'n', 'x', 'v'}, 'gy', '"+y', {desc = 'Copy to clipboard'}) | |
| vim.keymap.set({'n', 'x', 'v'}, 'gp', '"+p', {desc = 'Paste clipboard text'}) | |
| -- MacOS stuff | |
| -- cmd+c support from here: https://www.reddit.com/r/Ghostty/comments/1hzj8el/how_to_get_cmdc_and_cmda_working_in_neovim/ | |
| vim.keymap.set({ 'n', 'i', 'v', 'x' }, '<D-c>', '"+y', { desc = 'MacOS copy' }) | |
| vim.keymap.set({ 'n', 'i', 'v', 'x' }, '<D-v>', '"+p', { desc = 'MacOS paste' }) | |
| -- generic | |
| vim.keymap.set('n', '<leader>q', '<cmd>quitall<cr>', {desc = 'Exit vim'}) | |
| vim.keymap.set('n', '<leader>w', '<cmd>w<cr>', {desc = 'Save file'}) | |
| -- edit config -- | |
| vim.keymap.set('n', '<leader>0', '<cmd>e $MYVIMRC<cr>', {desc = 'Edit config'}) | |
| vim.keymap.set('n', '<leader>9', '<cmd>source $MYVIMRC<cr>', {desc = 'Reload config'}) | |
| -- yazi -- | |
| vim.keymap.set('n', '<leader>y', '<cmd>Yazi toggle<cr>', {desc = 'Open yazi'}) | |
| -- fzf -- | |
| -- global has prefix support: $buffer, @lsp buffer, #lsp project | |
| vim.keymap.set('n', '<leader>o', '<cmd>FzfLua global<cr>', {desc = 'fzf find files'}) | |
| vim.keymap.set('n', '<tab>', '<cmd>FzfLua buffers<cr>', {desc = 'fzf find files'}) | |
| vim.keymap.set('n', '<leader>s', '<cmd>lua FzfLua.live_grep({resume=true})<cr>', {desc = 'fzf live grep'}) | |
| vim.keymap.set('n', '<leader>f', '<cmd>FzfLua lgrep_curbuf<cr>', {desc = 'fzf grep in buffer'}) | |
| vim.keymap.set('n', '<leader><space>', '<cmd>FzfLua resume<cr>', {desc = 'fzf show window'}) | |
| -- use tab for auto complete | |
| local imap_expr = function(lhs, rhs) | |
| vim.keymap.set('i', lhs, rhs, { expr = true }) | |
| end | |
| imap_expr('<Tab>', [[pumvisible() ? "\<C-n>" : "\<Tab>"]]) | |
| imap_expr('<S-Tab>', [[pumvisible() ? "\<C-p>" : "\<S-Tab>"]]) | |
| -- lsp -- | |
| -- "gra" (Normal and Visual mode) is mapped to vim.lsp.buf.code_action() | |
| -- "gri" is mapped to vim.lsp.buf.implementation() | |
| -- "grn" is mapped to vim.lsp.buf.rename() | |
| -- "grr" is mapped to vim.lsp.buf.references() | |
| -- "grt" is mapped to vim.lsp.buf.type_definition() | |
| -- "gO" is mapped to vim.lsp.buf.document_symbol() | |
| -- CTRL-S (Insert mode) is mapped to vim.lsp.buf.signature_help() | |
| vim.api.nvim_create_autocmd('LspAttach', { | |
| callback = function(event) | |
| -- NOTE: By default `K` uses the program specified in the 'keywordprg' option. | |
| -- Here we override the default behavior, we force it to use the LSP client | |
| -- Display documentation of the symbol under the cursor | |
| vim.keymap.set('n', 'K', '<cmd>lua vim.lsp.buf.hover()<cr>', {buffer = event.buf}) | |
| end, | |
| }) | |
| -- List of compatible language servers is here: | |
| -- https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md | |
| vim.lsp.enable('clangd') | |
| vim.lsp.enable('bashls') | |
| vim.lsp.enable('ty') | |
| -- default configs come from: https://github.com/neovim/nvim-lspconfig | |
| -- to change config: vim.lsp.config(server, opts) | |
| -- Display errors, warning inline | |
| vim.diagnostic.config({ | |
| virtual_text = true, | |
| }) | |
| MiniMisc.setup_restore_cursor() | |
| MiniMisc.setup_auto_root({".git"}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment