V = vim -------------------------- ---- Config Section ----- --- 1 --- Options -------- -------------------------- O = V.opt -- Show numebers. Relative numbers are useful if you want to jump up and down -- using the j or k commands. But I prefer to use the G command O.number=true O.relativenumber=false O.cursorline=true -- Pretty much the standard now-a-days. O.tabstop=2 O.shiftwidth=2 O.expandtab=true O.preserveindent=true O.termguicolors=true O.showmode=false O.signcolumn="yes" -- Useful to search this way O.ignorecase=true O.smartcase=true -- Maintain a history of undos so that I can undo even after restart O.undofile=true O.updatetime=300 O.timeoutlen=500 -- Keep atleast 15 lines at the bottom, don't scroll beyond O.scrolloff=15 O.list = true O.listchars = { tab = '» ', trail = '·', nbsp = '␣' } -- If running on WSL + Arch, uncomment this for faster startup -- before setting the clipbard to unnamedplus -- V.g.clipboard = { -- name = 'win32yank', -- copy = { -- ["+"] = 'win32yank.exe -i --crlf', -- ["*"] = 'win32yank.exe -i --crlf', -- }, -- paste = { -- ["+"] = 'win32yank.exe -o --lf', -- ["*"] = 'win32yank.exe -o --lf', -- }, -- cache_enabled = 0, --} O.clipboard='unnamedplus' -------------------------- ---- Config Section ----- --- 2 --- Leader --------- -------------------------- V.keymap.set('n', " ", "", {silent = true, remap = false}) V.g.mapleader = " " -------------------------- ---- Config Section ----- --- 3 --- Packer conf ---- -------------------------- local fresh_install_packer = function() local packerpath = V.fn.stdpath("data") .. "/site/pack/packer/start/packer.nvim" if not V.loop.fs_stat(packerpath) then V.fn.system({ "git", "clone", "--depth", "1", "https://github.com/wbthomason/packer.nvim.git", packerpath, }) V.cmd [[packadd packer.nvim]] return true end return false end local fresh_install = fresh_install_packer(); V.cmd([[ augroup packer_user_config autocmd! autocmd BufWritePost init.lua source | PackerCompile augroup end ]]) -------------------------- ---- Config Section ----- --- 4 --- Plugins -------- -------------------------- local packer = require('packer') packer.startup({function(u) u 'wbthomason/packer.nvim' -- Colorscheme u { 'catppuccin/nvim', as = 'catppuccin' } -- AI u 'github/copilot.vim' -- Dev u 'williamboman/mason.nvim' u 'williamboman/mason-lspconfig.nvim' u 'neovim/nvim-lspconfig' u 'hrsh7th/nvim-cmp' u 'hrsh7th/cmp-nvim-lsp' u 'hrsh7th/cmp-buffer' u 'hrsh7th/cmp-path' u 'numToStr/Comment.nvim' u { 'nvim-treesitter/nvim-treesitter', build = ':TSUpdate', } -- Markdown u 'godlygeek/tabular' u 'preservim/vim-markdown' u 'vim-pandoc/vim-pandoc-syntax' u 'junegunn/goyo.vim' u 'junegunn/limelight.vim' -- File tree, telescope u 'nvim-lua/plenary.nvim' u 'nvim-tree/nvim-web-devicons' u 'MunifTanjim/nui.nvim' u { 'nvim-neo-tree/neo-tree.nvim', branch = 'v3.x' } u { 'nvim-telescope/telescope.nvim', branch = '0.1.x' } -- Others u 'itchyny/lightline.vim' u 'folke/which-key.nvim' if fresh_install then packer.sync() end end, config = { max_jobs = 50, git = { cmd = 'git', subcommands = { update = 'pull --ff-only --progress --rebase=false --force', install = 'clone --depth %i --no-single-branch --progress', fetch = 'fetch --depth 1 --progress --force', checkout = 'checkout %s --', update_branch = 'merge --ff-only @{u}', current_branch = 'branch --show-current', diff = 'log --color=never --pretty=format:FMT --no-show-signature HEAD@{1}...HEAD', diff_fmt = '%%h %%s (%%cr)', get_rev = 'rev-parse --short HEAD', get_msg = 'log --color=never --pretty=format:FMT --no-show-signature HEAD -n 1', submodules = 'submodule update --init --recursive --progress' }, depth = 1, clone_timeout = 5, -- in seconds default_url_format = 'https://github.com/%s' }, }}) -------------------------- ---- Config Section ----- --- 5 --- Plugins conf---- -------------------------- V.cmd("colorscheme catppuccin-frappe") require('telescope').setup() require("mason").setup() require("mason-lspconfig").setup() require("lspconfig").rust_analyzer.setup {} vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('UserLspConfig', {}), callback = function(ev) -- Enable completion triggered by vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' -- Buffer local mappings. -- See `:help vim.lsp.*` for documentation on any of the below functions local opts = { buffer = ev.buf } vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts) vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts) vim.keymap.set('n', '', vim.lsp.buf.signature_help, opts) vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, opts) vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, opts) vim.keymap.set('n', 'wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, opts) vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, opts) vim.keymap.set('n', 'rn', vim.lsp.buf.rename, opts) vim.keymap.set({ 'n', 'v' }, 'ca', vim.lsp.buf.code_action, opts) vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) vim.keymap.set('n', 'ff', function() vim.lsp.buf.format { async = true } end, opts) end, }) local cmp = require('cmp') cmp.setup { mapping = { [''] = cmp.mapping.select_prev_item(), [''] = cmp.mapping.select_next_item(), [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [''] = cmp.mapping.close(), [''] = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Insert, select = true }), }, sources = { {name = 'buffer'}, {name = 'nvim_lsp'}, {name = 'path'} }, completion = { completeopt = 'menu,menuone,noinsert' } } local whichkey = require('which-key') whichkey.setup() -- vim-markdown V.cmd('let g:vim_markdown_folding_disabled = 1') V.cmd('let g:vim_markdown_conceal = 0') V.cmd('let g:tex_conceal = ""') V.cmd('let g:vim_markdown_math = 1') V.cmd('let g:vim_markdown_frontmatter = 1') V.cmd('let g:vim_markdown_toml_frontmatter = 1') V.cmd('let g:vim_markdown_json_frontmatter = 1') V.cmd([[ augroup pandoc_syntax au! BufNewFile,BufFilePre,BufRead *.md set filetype=markdown.pandoc augroup END ]]) V.cmd([[ augroup pandoc_syntax au! BufNewFile,BufFilePre,BufRead *.markdown set filetype=markdown.pandoc augroup END ]]) require('Comment').setup() require('nvim-treesitter.configs').setup { ensure_installed = { 'bash', 'c', 'html', 'html', 'markdown', 'vim', 'vimdoc', 'rust' }, auto_install = true, highlight = { enable = true }, indent = { enable = true }, } -------------------------- ---- Config Section ----- --- x --- Neovide -------- -------------------------- if V.g.neovide then -- V.g.neovide_fullscreen = true V.g.neovide_cursor_animation_length = 0.05 V.g.neovide_transparency = 0.85 V.g.neovide_refresh_rate_idle = 5 V.g.neovide_cursor_trail_size = 0.2 V.g.neovide_cursor_vfx_mode = "railgun" end -------------------------- ---- Config Section ----- --- x --- Keybindings ---- -------------------------- local keymap = V.api.nvim_set_keymap local lua_keymap = V.keymap local opts = { noremap = true, silent = true } keymap('n', 'w', ':w', opts) keymap('n', 'q', ':q', opts) keymap('n', 'Q', ':qa!', opts) -- Neotree keymap('n', 'e', ':Neotree toggle ', opts) -- Telescope keymap('n', 'fb', ':Telescope buffers', opts) keymap('n', 'fo', ':Telescope find_files', opts) keymap('n', 'fg', ':Telescope live_grep', opts) keymap('n', 'fh', ':Telescope help_tags', opts) keymap('n', 'fr', ':Telescope oldfiles', opts) -- Navidate windows keymap("n", "", "h", opts) keymap("n", "", "j", opts) keymap("n", "", "k", opts) keymap("n", "", "l", opts) -- Navigate buffers keymap("n", "", ":bnext", opts) keymap("n", "", ":bprevious", opts) -- Stay in indent mode keymap("v", "<", "", ">gv", opts) keymap("v", "p", '"_dP', opts) -- Move text up and down keymap("x", "J", ":move '>+1gv-gv", opts) keymap("x", "K", ":move '<-2gv-gv", opts) keymap("x", "", ":move '>+1gv-gv", opts) keymap("x", "", ":move '<-2gv-gv", opts) -- terminal keymap("t", "", "", opts) keymap("n", "tt", ":ToggleTerm", opts) keymap("x", "tt", ":ToggleTerm", opts) -- Notes keymap('n', 'tf', ':TableFormat', opts) keymap('n', 'tc', ':Toc', opts) keymap('n', 'di', ":pu='{'..strftime('%c')..'}'", opts) keymap('n', 'o', 'oi', opts) keymap('n', 'fy', ':let @+=@%', opts) keymap('n', 'gn', 'yi[:e *', opts) keymap('n', 'gm', ':e main.md', opts) -- Present keymap('n', 'g', ':Goyo', opts) keymap('n', 'l', ':Limelight!! 0.9', opts) -- Diagnostics lua_keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous [D]iagnostic message' }) lua_keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next [D]iagnostic message' }) lua_keymap.set('n', 'ed', vim.diagnostic.open_float, { desc = 'Show diagnostic [E]rror messages' }) lua_keymap.set('n', 'fd', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' }) -- Neovide if V.g.neovide then keymap('n', 'ff', ':lua V.g.neovide_fullscreen = true', opts) end -- Misc keymap('n', '', ':red', opts) keymap('n', ';', ':nohl', opts) keymap('n', 'ns', '/Config Section', opts)