-- i do not really maintain this anymore since emacs is my main editor now vim.api.nvim_set_option("termguicolors", true) local bind = vim.keymap.set -- SETTINGS vim.o.cmdheight = 1 vim.o.modifiable = true vim.o.cursorline = true vim.o.hidden = true vim.o.encoding = "utf-8" vim.o.pumheight = 10 vim.o.fileencoding = "utf-8" vim.o.ruler = true vim.o.cmdheight = 1 vim.o.mouse = "a" vim.o.splitbelow = true vim.o.splitright = true vim.o.conceallevel = 0 vim.o.tabstop = 2 vim.o.shiftwidth = 2 vim.o.smarttab = true vim.o.expandtab = true vim.o.smartindent = true vim.o.autoindent = true vim.o.number = true vim.o.relativenumber = true vim.o.showtabline = 2 vim.o.updatetime = 300 vim.o.lazyredraw = true vim.o.timeoutlen = 100 vim.o.clipboard = "unnamedplus" vim.o.completeopt = "menuone,noselect" vim.o.cursorcolumn = true -- KEYBINDS --[[ A relic of the past --Colemak-DH bind fuction for hjkl [mnei]) local function cdhbind(a, b) bind('', a:lower(), b:lower()) bind('', a:upper(), b:upper()) end cdhbind('m', 'h') cdhbind('n', 'j') cdhbind('e', 'k') cdhbind('i', 'l') cdhbind('u', 'i') cdhbind('l', 'u') cdhbind('k', 'n') cdhbind('f', 'e') cdhbind('t', 'f') cdhbind('j', 't') bind('n', "", ":resize -2") bind('n', "", ":resize +2") bind('n', "", ":vertical resize -2") bind('n', "", ":vertical resize +2") bind('v', '<', "', ">gv") bind('n', "", "q") bind('n', "", "h") bind('n', "", "j") bind('n', "", "k") bind('n', "", "l") bind('n', "", ":vsplit") bind('n', "", ":split") ]] -- function _G.CompileRun() local Terminal = require('toggleterm.terminal').Terminal local file = vim.fn.expand('%:p') local noext = vim.fn.expand('%:p:r') local commandMap = { ['java'] = 'java ' .. file, ['lisp'] = 'clisp ' .. file, ['python'] = 'python3 ' .. file, ['c'] = 'gcc ' .. file .. ' -o ' .. noext .. ' -Wno-unused-result ' .. ' && ' .. noext .. ' && rm ' .. noext, ['rust'] = 'rustc ' .. file .. ' -o ' .. noext .. ' && ' .. noext .. ' && rm ' .. noext, ['cpp'] = 'g++ ' .. file .. ' -o ' .. noext .. ' -Wno-unused-result ' .. ' && ' .. noext .. ' && rm ' .. noext, ['cc'] = 'g++ ' .. file .. ' -o ' .. noext .. ' -Wno-unused-result ' .. ' && ' .. noext .. ' && rm ' .. noext, ['haskell'] = 'runhaskell ' .. file, ['sh'] = 'sh ' .. file, ['javascript'] = 'node ' .. file, ['typescript'] = 'tsc ' .. file .. ' && node ' .. noext .. '.js && rm ' .. noext .. '.js' } filetype = vim.api.nvim_buf_get_option(0, "filetype") if commandMap[filetype] ~= nil then Terminal:new({cmd = commandMap[filetype], close_on_exit = false}) :toggle() end end function _G.Repl() local Terminal = require('toggleterm.terminal').Terminal local file = vim.fn.expand('%:p') local commandMap = { ['lisp'] = 'clisp', ['python'] = 'python3', ['haskell'] = 'ghci ' .. file, ['sh'] = 'sh', ['javascript'] = 'node', ['typescript'] = 'ts-node', ['nix'] = 'nix repl', ['lua'] = 'lua' } filetype = vim.api.nvim_buf_get_option(0, "filetype") if commandMap[filetype] ~= nil then Terminal:new({cmd = commandMap[filetype]}):toggle() end end bind('n', "", ":call v:lua.CompileRun()") bind('n', "", ":call v:lua.Repl()") -- PLUGINS CONFIG -- nvim-tree.lua require'nvim-tree'.setup { diagnostics = {enable = true}, update_focused_file = {enable = true, update_root = true}, renderer = {highlight_opened_files = "all", highlight_git = true}, git = {enable = true, ignore = true, show_on_dirs = true}, actions = { open_file = { quit_on_open = true, resize_window = true, window_picker = { enable = true, exclude = { filetype = { "notify", "packer", "qf", "diff", "fugitive", "fugitiveblame" }, buftype = {"nofile", "terminal", "help"} } } } }, view = {adaptive_size = true} } bind('n', "", ":NvimTreeToggle") bind('n', "r", ":NvimTreeRefresh") bind('n', "f", ":NvimTreeFindFile") bind('n', "f", ":NvimTreeFindFile") -- colorizer require'colorizer'.setup() -- toggleterm require("toggleterm").setup { size = function(term) if term.direction == "horizontal" then return 25 elseif term.direction == "vertical" then return vim.o.columns * 0.4 end end, open_mapping = [[]], autochdir = true } -- autoclose require("autoclose").setup({ options = {disabled_filetypes = {"text", "markdown"}} }) -- icons require'nvim-web-devicons'.setup {default = true} -- barbar bind('n', "", ":BufferPrevious") bind('n', "", ":BufferNext") bind('n', "", ":BufferMovePrevious") bind('n', ">", ":BufferMoveNext") bind('n', "", ":BufferClose") for i = 1, 8, 1 do bind('n', string.format("", i), string.format(":BufferGoto %d", i)) end -- presence.nvim vim.g.presence_neovim_image_text = "Ballin" vim.g.presence_main_image = "file" -- treesitter-nvim require'nvim-treesitter.configs'.setup { ensure_install = "all", highlight = {enable = true, additional_vim_regex_highlighting = true}, indent = {enable = true} } local on_attach = function(client, bufnr) local bufopts = {noremap = true, silent = true, buffer = bufnr} vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') bind('n', 'gD', vim.lsp.buf.declaration, bufopts) bind('n', 'gd', vim.lsp.buf.definition, bufopts) bind('n', '', vim.lsp.buf.hover, bufopts) bind('n', 'gi', vim.lsp.buf.implementation, bufopts) bind('n', 'gr', vim.lsp.buf.references, bufopts) bind('n', "", function() vim.lsp.buf.format {async = true} end, bufopts) end local servers = { "clangd", "rust_analyzer", "tsserver", "hls", "pylsp", "texlab", "nixd", "terraform_lsp", "html", "cssls", "jsonls", "svelte", "gopls" } local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities.textDocument.completion.completionItem.resolveSupport = { properties = {'documentation', 'detail', 'additionalTextEdits'} } -- lspconfig local nvimlsp = require('lspconfig') for _, lsp in ipairs(servers) do nvimlsp[lsp].setup {capabilities = capabilities, on_attach = on_attach} end -- luasnip local luasnip = require 'luasnip' luasnip.snippets = {html = {}} luasnip.snippets.javascript = luasnip.snippets.html luasnip.snippets.javascriptreact = luasnip.snippets.html require("luasnip/loaders/from_vscode").lazy_load() -- nvim cmp local cmp = require 'cmp' cmp.setup { snippet = { expand = function(args) require('luasnip').lsp_expand(args.body) end }, 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.Replace, select = true }, [''] = function(fallback) if cmp.visible() then cmp.select_next_item() elseif luasnip.expand_or_jumpable() then luasnip.expand_or_jump() else fallback() end end, [''] = function(fallback) if cmp.visible() then cmp.select_prev_item() elseif luasnip.jumpable(-1) then luasnip.jump(-1) else fallback() end end }, sources = { {name = 'nvim_lsp'}, {name = 'path'}, {name = 'nvim_lua'}, {name = 'luasnip'}, {name = 'calc'}, {name = 'emoji'}, {name = 'buffer'}, {name = 'look'} }, formatting = { format = require('lspkind').cmp_format({ with_text = true, menu = ({ buffer = "[Buffer]", nvim_lsp = "[LSP]", luasnip = "[LuaSnip]", nvim_lua = "[Lua]", latex_symbols = "[Latex]" }) }) } } -- telescope require('telescope').setup() vim.cmd("set shortmess+=c") -- STATUSLINE vim.cmd("set noruler") vim.o.laststatus = 2 local function mode() local mode_map = { ['n'] = 'normal ', ['v'] = 'visual ', ['V'] = 'v·line ', [''] = 'v·block ', ['s'] = 'select ', ['S'] = 's·line ', [''] = 's·block ', ['i'] = 'insert ', ['Rv'] = 'v·replace ', ['c'] = 'command ', ['!'] = 'shell ', ['t'] = 'terminal ' } local m = vim.api.nvim_get_mode().mode if mode_map[m] == nil then return m end return mode_map[m] end -- theming local dark = true require("catppuccin").setup({ flavour = "mocha", background = {light = "latte", dark = "mocha"} }) vim.cmd("colorscheme catppuccin") function hi(hi_var, hi_value) vim.cmd("hi " .. hi_var .. " " .. hi_value) end local colors = require("catppuccin.palettes").get_palette "latte" hi("Light", "guibg=" .. colors.text .. " guifg=" .. colors.crust) hi("Misc", "guibg=" .. colors.pink .. " guifg=" .. colors.base) hi("Dark", "guibg=" .. colors.crust .. " guifg=" .. colors.text) local function git() local branch = io.popen( [[git rev-parse --abbrev-ref HEAD 2>/dev/null | tr -d '\n']]):read( "*a") return string.len(branch) > 0 and ' ' .. branch or '' end local statusline = { '%#Light# ', mode():upper() .. ' ', '%#Misc#', string.len(git()) > 0 and ' ' .. git() .. ' ' or '', '%#Dark# ', '%f ', '%#Light#', '%=', '%#Dark# ', '%y ', '%#Light# ', '%p%% ', ' ', '%l/%L ', ' ', '%c ' } vim.o.statusline = table.concat(statusline) function _G.ToggleTheme() if dark then vim.cmd("set background=light") local colors = require("catppuccin.palettes").get_palette "latte" hi("Light", "guibg=" .. colors.crust .. " guifg=" .. colors.text) hi("Misc", "guibg=" .. colors.peach .. " guifg=" .. colors.text) hi("Dark", "guibg=" .. colors.text .. " guifg=" .. colors.crust) vim.o.statusline = table.concat(statusline) else vim.cmd("set background=dark") local colors = require("catppuccin.palettes").get_palette "mocha" hi("Light", "guibg=" .. colors.text .. " guifg=" .. colors.crust) hi("Misc", "guibg=" .. colors.pink .. " guifg=" .. colors.base) hi("Dark", "guibg=" .. colors.crust .. " guifg=" .. colors.text) vim.o.statusline = table.concat(statusline) end dark = not dark end bind('n', "", ":call v:lua.ToggleTheme()")