--[[-- File : /home/jeff/.config/lvim/config.lua Author : Jeff Lance Date : 03.08.2023 16:16:54 Last Modified Date: 03.08.2023 16:16:54 Last Modified By : Jeff Lance --- lvim is the global options object --]]-- -- general -- lvim.log.level = "warn" lvim.format_on_save.enabled = false lvim.colorscheme = "onedark_dark" lvim.background = "dark" lvim.transparent_window = true -- to enable neo-tree file browsing, comment the following lvim.builtin.nvimtree.active = false -- to disable icons and use a minimalist setup, uncomment the following -- lvim.use_icons = false -- variables -- -- functions -- -- keymappings [view all the defaults by pressing Lvk] -- lvim.leader = ";" lvim.keys.insert_mode[";;"] = "" lvim.keys.normal_mode[""] = "w" lvim.keys.normal_mode[""] = "redo" lvim.keys.normal_mode[""] = "undo" lvim.keys.normal_mode[""] = ":<" lvim.keys.normal_mode[""] = ":>" -- remap neo-tree shortcut to rnvimr lvim.lsp.buffer_mappings.normal_mode[';e'] = { "RnvimrToggle", "File explorer" } lvim.builtin.which_key.mappings["d"] = lvim.builtin.which_key.mappings[";"] lvim.builtin.which_key.mappings["G"] = lvim.builtin.which_key.mappings["g"] lvim.builtin.which_key.mappings["g"] = {} lvim.builtin.which_key.mappings["H"] = { name = "Header", H = { "AddHeader" , "Add header to the file" }, h = { "AddMinHeader" , "Add minimal header to the file" }, lg = { "AddGNULicense", "Add GPLv3 License" }, lm = { "AddMITLicense", "Add MIT License" }, } lvim.builtin.which_key.mappings["Lv"] = lvim.builtin.which_key.mappings["L"] lvim.builtin.which_key.mappings["Ll"] = lvim.builtin.which_key.mappings["l"] lvim.builtin.which_key.mappings["l"] = {} lvim.builtin.which_key.mappings["L"] = { name = "LSP, Lunar" } lvim.builtin.which_key.mappings["l"] = { name = "LaTeX", m = { "VimtexContextMenu", "Open Context Menu" }, u = { "VimtexCountLetters", "Count Letters" }, w = { "VimtexCountWords", "Count Words" }, d = { "VimtexDocPackage", "Open Doc for package" }, e = { "VimtexErrors", "Look at the errors" }, s = { "VimtexStatus", "Look at the status" }, a = { "VimtexToggleMain", "Toggle Main" }, v = { "VimtexView", "View pdf" }, i = { "VimtexInfo", "Vimtex Info" }, l = { name = "Clean", l = { "VimtexClean", "Clean Project" }, c = { "VimtexClean", "Clean Cache" }, }, c = { name = "Compile", c = { "VimtexCompile", "Compile Project" }, o = { "VimtexCompileOutput", "Compile Project and Show Output", }, s = { "VimtexCompileSS", "Compile project super fast" }, e = { "VimtexCompileSelected", "Compile Selected" }, }, r = { name = "Reload", r = { "VimtexReload", "Reload" }, s = { "VimtexReloadState", "Reload State" }, }, o = { name = "Stop", p = { "VimtexStop", "Stop" }, a = { "VimtexStopAll", "Stop All" }, }, t = { name = "TOC", o = { "VimtexTocOpen", "Open TOC" }, t = { "VimtexTocToggle", "Toggle TOC" }, }, } lvim.builtin.which_key.mappings["o"] = { "Telescope find_files", "Open a file" } lvim.builtin.which_key.mappings["P"] = lvim.builtin.which_key.mappings["p"] lvim.builtin.which_key.mappings["p"] = { "Telescope projects", "Projects"} lvim.builtin.which_key.mappings["S"] = lvim.builtin.which_key.mappings["s"] lvim.builtin.which_key.mappings["s"] = { "echom 'Sourcing' source %", "Source current file" } lvim.builtin.which_key.mappings["r"] = { "Telescope oldfiles", "Open recent file" } lvim.builtin.which_key.mappings["z"] = { name = "Zettel", c = { "lua require('neuron/cmd').new_edit('/home/jeff/Notes/')", "Create new note" }, i = { "lua require'neuron'.goto_index()", "Goto notes index"}, z = { "lua require'neuron/telescope'.find_zettels()", "Find notes" }, Z = { "lua require'neuron/telescope'.find_zettels {insert = true}", "Insert the found note ID" }, b = { "lua require'neuron/telescope'.find_backlinks()", "Backlinks of the current note" }, B = { "lua require'neuron/telescope'.find_backlinks {insert = true}", "As b but insert the found ID" }, t = { "lua require'neuron/telescope'.find_tags()", "Find all tags and insert" }, s = { "lua require'neuron'.rib {address = '127.0.0.1:8200', verbose = true}", "Start neuron server" }, n = { "lua require'neuron'.goto_next_extmark()", "Goto next link" }, p = { "lua require'neuron'.goto_prev_extmark()", "Goto previous link" }, } lvim.builtin.which_key.mappings["x"] = { "w! q!", "Save and quit"} lvim.builtin.which_key.mappings[";"] = {} lvim.builtin.terminal.open_mapping = "" -- Change theme settings -- -- lvim.builtin.theme.options.dim_inactive = true -- lvim.builtin.theme.options.style = "storm" -- TODO: User Config for predefined plugins -- After changing plugin config exit and reopen LunarVim, Run :PackerInstall :PackerCompile lvim.builtin.alpha.active = true lvim.builtin.alpha.mode = "dashboard" lvim.builtin.terminal.active = true lvim.builtin.nvimtree.setup.view.side = "left" lvim.builtin.nvimtree.setup.renderer.icons.show.git = false -- Treesitter settings -- -- if you don't want all the parsers change this to a table of the ones you want lvim.builtin.treesitter.ensure_installed = { "bash", "c", "javascript", "json", "latex", "lua", "python", "typescript", "tsx", "css", "rust", "java", "yaml", } lvim.builtin.treesitter.ignore_install = { "haskell" } lvim.builtin.treesitter.highlight.enable = true -- Generic LSP settings -- vim.diagnostic.config({ virtual_text = true }) -- setup LSP local capabilities = require("lvim.lsp").common_capabilities() require("lvim.lsp.manager").setup("texlab", { on_attach = require("lvim.lsp").common_on_attach, on_init = require("lvim.lsp").common_on_init, capabilities = capabilities, }) -- Setup formatters and linters -- -- formatters local formatters = require("lvim.lsp.null-ls.formatters") formatters.setup({ { name = "black" }, { command = "latexindent", filetypes = { "tex" } }, }) lvim.format_on_save.enabled = true lvim.format_on_save.pattern = { "*.py", "*.tex" } -- linters local linters = require("lvim.lsp.null-ls.linters") linters.setup({ { command = "flake8", filetypes = { "python" } }, { command = "chktex", filetypes = { "tex" } }, }) -- Python management setup -- -- setup debug adapter lvim.builtin.dap.active = true local mason_path = vim.fn.glob(vim.fn.stdpath "data" .. "/mason/") pcall(function() require("dap-python").setup(mason_path .. "packages/debugpy/venv/bin/python") end) -- -- setup testing -- require("neotest").setup({ -- adapters = { -- require("neotest-python")({ -- -- Extra arguments for nvim-dap configuration -- -- See https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings for values -- dap = { -- justMyCode = false, -- console = "integratedTerminal", -- }, -- args = { "--log-level", "DEBUG", "--quiet" }, -- runner = "pytest", -- }) -- } -- }) -- Additional Plugins -- lvim.plugins = { -- addheader { 'alpertuna/vim-header', config = function () vim.cmd ([[ let g:header_field_author = 'Jeff Lance' let g:header_field_author_email = 'email@jefflance.me' let g:header_auto_update_header = 1 let g:header_field_filename_path = 1 let g:header_field_timestamp_format = '%d.%m.%Y %H:%M:%S' ]]) end, }, -- asyncrun { "skywind3000/asyncrun.vim", }, -- colorschemes { 'Abstract-IDE/Abstract-cs', }, { 'ishan9299/modus-theme-vim', }, { 'NLKNguyen/papercolor-theme', }, { 'olimorris/onedarkpro.nvim', priority = 1000, config = function () require("onedarkpro").setup({ colors = { onedark = { bg = "#000000" -- black }, onelight = { bg = "#FFFFFF" -- white }, -- cursorline = "#FF0000", }, styles = { types = "NONE", methods = "NONE", numbers = "NONE", strings = "NONE", comments = "italic", keywords = "bold,italic", constants = "NONE", functions = "italic", operators = "NONE", variables = "NONE", parameters = "NONE", conditionals = "italic", virtual_text = "NONE", }, options = { cursorline = true, transparency = true, } }) end }, -- markdown previewer { 'iamcco/markdown-preview.nvim', build = "cd app && npm install", ft = "markdown", config = function() vim.g.mkdp_auto_start = 1 end, }, -- minimap { 'echasnovski/mini.map', branch = "stable", config = function() require('mini.map').setup() local map = require('mini.map') map.setup({ integrations = { map.gen_integration.builtin_search(), map.gen_integration.diagnostic({ error = 'DiagnosticFloatingError', warn = 'DiagnosticFloatingWarn', info = 'DiagnosticFloatingInfo', hint = 'DiagnosticFloatingHint', }), }, symbols = { encode = map.gen_encode_symbols.dot('2x1'), }, window = { side = 'right', width = 20, -- set to 1 for a pure scrollbar :) winblend = 15, show_integration_count = false, }, }) end }, -- neoscroll: smooth scrolling { "karb94/neoscroll.nvim", event = "WinScrolled", config = function() require('neoscroll').setup({ -- All these keys will be mapped to their corresponding default scrolling animation mappings = {'', '', '', '', '', '', 'zt', 'zz', 'zb'}, hide_cursor = true, -- Hide cursor while scrolling stop_eof = true, -- Stop at when scrolling downwards use_local_scrolloff = false, -- Use the local scope of scrolloff instead of the global scope respect_scrolloff = false, -- Stop scrolling when the cursor reaches the scrolloff margin of the file cursor_scrolls_alone = true, -- The cursor will keep on scrolling even if the window cannot scroll further easing_function = nil, -- Default easing function pre_hook = nil, -- Function to run before the scrolling animation starts post_hook = nil, -- Function to run after the scrolling animation ends }) end }, -- neuron: note taking { 'oberblastmeister/neuron.nvim', config = function() require("neuron").setup({ virtual_titles = true, mappings = true, run = nil, neuron_dir = "~/Notes", leader = ";z", }) end, }, -- colorizer: color highlighter { 'norcalli/nvim-colorizer.lua', config = function() require("colorizer").setup({ '*' }, { RGB = true, -- #RGB hex codes RRGGBB = true, -- #RRGGBB hex codes RRGGBBAA = true, -- #RRGGBBAA hex codes rgb_fn = true, -- CSS rgb() and rgba() functions hsl_fn = true, -- CSS hsl() and hsla() functions css = true, -- Enable all CSS features: rgb_fn, hsl_fn, names, RGB, RRGGBB css_fn = true, -- Enable all CSS *functions*: rgb_fn, hsl_fn mode = 'background', }) end, }, { "kevinhwang91/rnvimr", cmd = "RnvimrToggle", config = function() vim.g.rnvimr_draw_border = 1 vim.g.rnvimr_pick_enable = 1 vim.g.rnvimr_bw_enable = 1 end, }, -- suda { 'lambdalisue/suda.vim', config = function() vim.g.prompt = 'Mot de passe: ' vim.g.suda_smart_edit = 1 end, }, ---- telescope-project --{ -- "nvim-telescope/telescope-project.nvim", -- event = "BufWinEnter", -- setup = function() -- vim.cmd [[packadd telescope.nvim]] -- end, --}, -- trouble { 'folke/trouble.nvim', cmd = "TroubleToggle", }, -- vim-repeat: enable repeating supported plugin maps with "." { "tpope/vim-repeat" }, -- vim-surround { 'tpope/vim-surround', config = function () vim.o.timeoutlen = 500 end, }, -- LaTeX management needed plugins { "lervag/vimtex", config = function () vim.cmd([[ let g:vimtex_view_method = "zathura" let g:vimtex_quickfix_enabled = 0 let g:vimtex_compiler_method = 'latexmk' ]]) end, }, { "kdheepak/cmp-latex-symbols" }, { "KeitaNakamura/tex-conceal.vim" }, { -- "SirVer/ultisnips" }, -- Python management needed plugins { "ChristianChiarulli/swenv.nvim" }, { "stevearc/dressing.nvim" }, { "mfussenegger/nvim-dap-python" }, { "nvim-neotest/neotest" }, { "nvim-neotest/neotest-python" }, } -- Telescope plugins load -- lvim.builtin.telescope.on_config_done = function(telescope) -- pcall(telescope.load_extension, "telescope-project") -- any other extensions loading end -- Autocommands (https://neovim.io/doc/user/autocmd.html) -- -- minimap view lvim.autocommands = { { {"BufEnter", "Filetype"}, { desc = "Open mini.map and exclude some filetypes", pattern = { "*" }, callback = function() local exclude_ft = { "qf", "NvimTree", "toggleterm", "TelescopePrompt", "alpha", "netrw", } local map = require('mini.map') if vim.tbl_contains(exclude_ft, vim.o.filetype) then vim.b.minimap_disable = true map.close() elseif vim.o.buftype == "" then map.open() end end, }, }, } -- wrap mode for json files vim.api.nvim_create_autocmd("BufEnter", { pattern = { "*.json", "*.jsonc" }, -- enable wrap mode for json files only command = "setlocal wrap", }) -- bash highlight for zsh files vim.api.nvim_create_autocmd("FileType", { pattern = "zsh", callback = function() -- let treesitter use bash highlight for zsh files as well require("nvim-treesitter.highlight").attach(0, "bash") end, }) -- latex cmp vim.api.nvim_create_autocmd("FileType", { group = vim.api.nvim_create_augroup("LaTeXGroup", { clear = true }), pattern = "tex", callback = function() require("user.cmp") end, })