-- set leader keys vim.g.mapleader = ' ' vim.g.maplocalleader = ' ' -- highlight as you search vim.opt.hlsearch = true vim.keymap.set('n', '', 'nohlsearch') -- preview substitutions live in preview window vim.opt.inccommand = 'split' -- prevent cursor from hitting top or bottom of screen vim.opt.scrolloff = 10 -- line numbers vim.wo.number = true vim.wo.relativenumber = true -- Indent stuff vim.o.expandtab = true vim.o.smartindent = true vim.o.autoindent = true vim.o.tabstop = 2 vim.o.softtabstop = 2 vim.o.shiftwidth = 2 -- wrapped lines are visually indented vim.o.breakindent = true -- save undo history vim.o.undofile = true -- case insensitive search unless capitalized vim.o.ignorecase = true vim.o.smartcase = true -- keep on signcolumn vim.wo.signcolumn = 'yes' -- decrease update time vim.o.updatetime = 250 vim.o.timeoutlen = 300 -- better completion experience vim.o.completeopt = 'menu,preview,noselect' -- better term colors vim.o.termguicolors = true -- clean up netrw vim.g.netrw_liststyle = 0 vim.g.netrw_banner = 0 -- conceal and foldlevel vim.o.conceallevel = 3 vim.o.foldlevel = 99 -- Basic Keymaps -- improves C-u and C-d by centering on scroll vim.keymap.set('n', '', 'zz', { desc = 'Scroll Up' }) vim.keymap.set('n', '', 'zz', { desc = 'Scroll Down' }) -- improved search by centering on results vim.keymap.set('n', 'n', 'nzzzv', { desc = 'Next Search Result' }) vim.keymap.set('n', 'N', 'Nzzzv', { desc = 'Previous Search Result' }) -- diagnostics vim.keymap.set('n', 'd', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' }) -- clipboard binds vim.keymap.set({"v", "x", "n"}, 'y', '"+y', { noremap = true, silent = true, desc = 'Yank to clipboard' }) vim.keymap.set({"n", "v", "x"}, 'Y', '"+yy', { noremap = true, silent = true, desc = 'Yank line to clipboard' }) vim.keymap.set({'n', 'v', 'x'}, 'p', '"+p', { noremap = true, silent = true, desc = 'Paste from clipboard' }) vim.keymap.set('i', '', '+', { noremap = true, silent = true, desc = 'Paste from clipboard from within insert mode' }) vim.keymap.set("x", "P", '"_dP', { noremap = true, silent = true, desc = 'Paste over selection without erasing unnamed register' }) -- Plugins vim.pack.add({ { src = 'https://github.com/vague-theme/vague.nvim' }, { src = 'https://github.com/miikanissi/modus-themes.nvim' }, { src = 'https://github.com/nvim-treesitter/nvim-treesitter' }, { src = 'https://github.com/nvim-mini/mini.pick' }, { src = 'https://github.com/nvim-mini/mini.extra' }, { src = 'https://github.com/nvim-mini/mini.icons' }, { src = 'https://github.com/nvim-mini/mini.notify' }, { src = 'https://github.com/nvim-mini/mini.pairs' }, { src = 'https://github.com/nvim-mini/mini.surround' }, { src = 'https://github.com/neovim/nvim-lspconfig' }, { src = 'https://github.com/stevearc/oil.nvim' }, { src = 'https://github.com/saghen/blink.cmp', version = vim.version.range('1.*') }, { src = 'https://github.com/zk-org/zk-nvim' }, }) -- treesitter local tsfiletypes = { 'lua', 'markdown', 'haskell' } vim.api.nvim_create_autocmd('FileType', { pattern = '*', callback = function() pcall(vim.treesitter.start) vim.wo[0][0].foldexpr = 'v:lua.vim.treesitter.foldexpr()' vim.wo[0][0].foldmethod = 'expr' vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()" end, }) -- Theme (vague) vim.cmd('colorscheme modus_vivendi') -- Blink require('blink.cmp').setup({ signature = { enabled = true }, completion = { documentation = { auto_show = true }} }) -- Oil require('oil').setup() -- Mini require('mini.icons').setup() require('mini.pick').setup() require('mini.extra').setup() require('mini.notify').setup() require('mini.pairs').setup() require('mini.surround').setup() vim.keymap.set('n', 'ff', MiniPick.builtin.files, { desc = 'Find Files' }) vim.keymap.set('n', 'fg', MiniPick.builtin.grep_live, { desc = 'Grep Files' }) -- Oil vim.keymap.set('n', 'fe', 'Oil', { desc = 'Explore Files' }) -- zk require('zk').setup({ picker = "minipick" }) vim.keymap.set("n", "zn", "ZkNew { title = vim.fn.input('Title: ') }") vim.keymap.set("v", "znt", ":'<,'>ZkNewFromTitleSelection") vim.keymap.set("n", "zf", "ZkNotes { sort = { 'modified' } }") vim.keymap.set("n", "zt", "ZkTags") vim.keymap.set("n", "zl", "ZkLinks") vim.keymap.set("n", "zg", "ZkNotes { sort = { 'modified' }, match = { vim.fn.input('Search: ') } }") vim.keymap.set("v", "zm", ":'<,'>ZkMatch") -- LSP -- global on_attach local function lsp_on_attach(client, bufnr) -- utility function for LSP keymaps local nmap = function(keys, func, desc) vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) end -- if client:supports_method('textDocument/completion') then -- local chars = {}; for i = 32, 126 do table.insert(chars, string.char(i)) end -- client.server_capabilities.completionProvider.triggerCharacters = chars -- -- vim.lsp.completion.enable(true, client.id, bufnr, {autotrigger = true}) -- end nmap('rn', vim.lsp.buf.rename, 'Rename') nmap('ca', vim.lsp.buf.code_action, 'Code Actions') nmap('gd', vim.lsp.buf.definition, 'Goto Definition') nmap('gr', function() MiniExtra.pickers.lsp({ scope = 'references' }) end, 'Goto References') nmap('gI', function() MiniExtra.pickers.lsp({ scope = 'implementation' }) end, 'Goto Implementation') nmap('ds', function() MiniExtra.pickers.lsp({ scope = 'document_symbol' }) end, 'Document Symbols') nmap('ws', function() MiniExtra.pickers.lsp({ scope = 'workspace_symbol_live' }) end, 'Workspace Symbols') nmap('D', vim.lsp.buf.type_definition, 'Goto Type Definition') nmap('gD', vim.lsp.buf.declaration, 'Goto Declaration') nmap('K', vim.lsp.buf.hover, 'Hover Documentation') nmap('', vim.lsp.buf.signature_help, 'Signature Documentation') end vim.lsp.config('*', { on_attach = lsp_on_attach }) -- Langauges vim.lsp.config('lua_ls', { settings = { Lua = { diagnostics = { globals = { 'vim' }, }, workspace = { library = vim.api.nvim_get_runtime_file("", true), checkThirdParty = false, }, runtime = { version = 'LuaJIT', }, telemetry = { enable = false, }, }, }, }) vim.lsp.enable('lua_ls') vim.lsp.enable('vtsls') vim.lsp.enable('cssls') vim.lsp.enable('tailwindcss') vim.lsp.enable('eslint') vim.lsp.enable('gopls') vim.lsp.enable('nixd') vim.lsp.enable('rust_analyzer') vim.lsp.enable('yamlls') vim.lsp.enable('clangd') vim.lsp.enable('hls')