-- A Neovim configuration, again... -- -- ███ ▄ ▄▀ ██ ███ ▄█ ▄ ▄▀ ██ -- █ █ █ ▄▀ █ █ █ █ ██ █ ▄▀ █ █ -- █ ▀ ▄ █ █ █ ▀▄ █▄▄█ █ ▀ ▄ ██ ██ █ █ ▀▄ █▄▄█ -- █ ▄▀ █ █ █ █ █ █ █ ▄▀ ▐█ █ █ █ █ █ █ █ -- ███ █▄ ▄█ ███ █ ███ ▐ █ █ █ ███ █ -- ▀▀▀ █ █ ██ █ -- ▀ ▀ local version = vim.version() local expected = { major = 0, minor = 12 } if version.major ~= expected.major or version.minor ~= expected.minor then vim.notify( 'This configuration assumes NeoVim version ' .. expected.major .. '.' .. expected.minor .. ', but it is ' .. version.major .. '.' .. version.minor .. '!', vim.log.levels.ERROR ) return end -- setup debug mode vim.g.bugabinga_debug_mode = false -- start `profiler.nvim` with `NVIM_PROFILE=1 nvim ...` to instrument all modules, -- but not start profiler yet. -- or `NVIM_PROFILE=start nvim ...` to start the profiler on startup -- then hit to save profile. -- inspect profile on https://ui.perfetto.dev require 'bugabinga.profile' local start_time = vim.uv.hrtime() local auto = require 'std.auto' auto 'measure_startup_time' { events = 'VimEnter', description = 'Measure startup time of neovim.', once = true, command = function () local end_time = vim.uv.hrtime() ---@diagnostic disable-line: undefined-field local time_elapsed = end_time - start_time vim.schedule( function () local time_elapsed_ms = time_elapsed / 1e6 local msg = string.format( 'Neovim started in (%d ms).', time_elapsed_ms ) vim.notify( msg, vim.log.levels.INFO ) end ) end, } vim.cmd.colorscheme 'nugu' require 'patches' --- Defers loading the module to end of vim main loop. --- Useful for modules, that need not be loaded immediately on nvim startup. --- --- @see require local defer = vim.schedule_wrap( require ) --- Some modules need to be loaded immediately, when vim is started with parameters (files or folders), --- but could be deferred, when vim is started 'naked'. --- This function does that. --- If vim was started with no arguments, it defers loading the module, otherwise it is loaded immediately. --- --- @param module_name string Name of lua module local defer_on_naked = function ( module_name ) local now_if_args = vim.fn.argc( -1 ) > 0 and require or defer now_if_args( module_name ) end --[[ MY STUFF ]] require 'bugabinga.options' defer_on_naked 'bugabinga.treesitter' defer_on_naked 'bugabinga.lsp' defer_on_naked 'bugabinga.bigfile' defer_on_naked 'bugabinga.file_changed' defer_on_naked 'bugabinga.editorconfig' defer 'bugabinga.sessions' defer 'bugabinga.statusline' defer 'bugabinga.diagnostic' defer 'bugabinga.cmdline' defer 'bugabinga.snippet' defer 'bugabinga.code_action' defer 'bugabinga.mkdir' defer 'bugabinga.cycle' defer 'bugabinga.terminal' defer 'bugabinga.inlay' defer 'bugabinga.d2' defer 'bugabinga.pivi' defer 'bugabinga.pivi_status' defer 'bugabinga.pivi_keys' -- Plugins handle deferred loading via puk. -- No need to use `defer(...)` --[[ PLUGINS ]] --TODO: slowly move over plugins to "my stuff" require 'bugabinga.autotag' require 'bugabinga.devicons' defer 'bugabinga.diff' require 'bugabinga.file_explorer' require 'bugabinga.format' defer 'bugabinga.fuzzy_find' defer 'bugabinga.jump2d' defer 'bugabinga.key_preview' defer 'bugabinga.move' defer 'bugabinga.navigation' defer 'bugabinga.patterns' defer 'bugabinga.search_and_replace' defer 'bugabinga.fun' defer 'bugabinga.splitjoin' require 'bugabinga.surround' require 'bugabinga.textobjects' defer 'bugabinga.winbar' require 'bugabinga.suppress_warnings' require 'bugabinga.autopairs' defer 'bugabinga.notify' require 'bugabinga.incubator'