diff options
Diffstat (limited to 'lua/lvim/config')
-rw-r--r-- | lua/lvim/config/defaults.lua | 32 | ||||
-rw-r--r-- | lua/lvim/config/init.lua | 202 | ||||
-rw-r--r-- | lua/lvim/config/settings.lua | 76 |
3 files changed, 310 insertions, 0 deletions
diff --git a/lua/lvim/config/defaults.lua b/lua/lvim/config/defaults.lua new file mode 100644 index 00000000..ffbb2e1b --- /dev/null +++ b/lua/lvim/config/defaults.lua @@ -0,0 +1,32 @@ +return { + leader = "space", + colorscheme = "onedarker", + line_wrap_cursor_movement = true, + transparent_window = false, + format_on_save = true, + keys = {}, + + builtin = {}, + + log = { + ---@usage can be { "trace", "debug", "info", "warn", "error", "fatal" }, + level = "warn", + viewer = { + ---@usage this will fallback on "less +F" if not found + cmd = "lnav", + layout_config = { + ---@usage direction = 'vertical' | 'horizontal' | 'window' | 'float', + direction = "horizontal", + open_mapping = "", + size = 40, + float_opts = {}, + }, + }, + }, + plugins = { + -- use config.lua for this not put here + }, + + autocommands = {}, + lang = {}, +} diff --git a/lua/lvim/config/init.lua b/lua/lvim/config/init.lua new file mode 100644 index 00000000..d7877f1e --- /dev/null +++ b/lua/lvim/config/init.lua @@ -0,0 +1,202 @@ +local utils = require "lvim.utils" +local Log = require "lvim.core.log" + +local M = {} + +local user_config_dir = get_config_dir() +local user_config_file = utils.join_paths(user_config_dir, "config.lua") + +-- Fallback config.lua to lv-config.lua +if not utils.is_file(user_config_file) then + local lv_config = utils.join_paths(user_config_dir, "lv-config.lua") + Log:warn(string.format("[%s] not found, falling back to [%s]", user_config_file, lv_config)) + user_config_file = lv_config +end + +function M:get_user_config_path() + return user_config_file +end + +--- Initialize lvim default configuration +-- Define lvim global variable +function M:init() + if vim.tbl_isempty(lvim or {}) then + lvim = require "lvim.config.defaults" + local home_dir = vim.loop.os_homedir() + lvim.vsnip_dir = utils.join_paths(home_dir, ".config", "snippets") + lvim.database = { save_location = utils.join_paths(home_dir, ".config", "lunarvim_db"), auto_execute = 1 } + end + + local builtins = require "lvim.core.builtins" + builtins.config { user_config_file = user_config_file } + + local settings = require "lvim.config.settings" + settings.load_options() + + local lvim_lsp_config = require "lvim.lsp.config" + lvim.lsp = vim.deepcopy(lvim_lsp_config) + + local supported_languages = { + "asm", + "bash", + "beancount", + "bibtex", + "bicep", + "c", + "c_sharp", + "clojure", + "cmake", + "comment", + "commonlisp", + "cpp", + "crystal", + "cs", + "css", + "cuda", + "d", + "dart", + "dockerfile", + "dot", + "elixir", + "elm", + "emmet", + "erlang", + "fennel", + "fish", + "fortran", + "gdscript", + "glimmer", + "go", + "gomod", + "graphql", + "haskell", + "hcl", + "heex", + "html", + "java", + "javascript", + "javascriptreact", + "jsdoc", + "json", + "json5", + "jsonc", + "julia", + "kotlin", + "latex", + "ledger", + "less", + "lua", + "markdown", + "nginx", + "nix", + "ocaml", + "ocaml_interface", + "perl", + "php", + "pioasm", + "ps1", + "puppet", + "python", + "ql", + "query", + "r", + "regex", + "rst", + "ruby", + "rust", + "scala", + "scss", + "sh", + "solidity", + "sparql", + "sql", + "supercollider", + "surface", + "svelte", + "swift", + "tailwindcss", + "terraform", + "tex", + "tlaplus", + "toml", + "tsx", + "turtle", + "typescript", + "typescriptreact", + "verilog", + "vim", + "vue", + "yaml", + "yang", + "zig", + } + + require("lvim.lsp.manager").init_defaults(supported_languages) +end + +local function deprecation_notice() + local in_headless = #vim.api.nvim_list_uis() == 0 + if in_headless then + return + end + + for lang, entry in pairs(lvim.lang) do + local deprecated_config = entry["lvim.lsp"] or {} + if not vim.tbl_isempty(deprecated_config) then + local msg = string.format( + "Deprecation notice: [lvim.lang.%s.lsp] setting is no longer supported. See https://github.com/LunarVim/LunarVim#breaking-changes", + lang + ) + vim.schedule(function() + vim.notify(msg, vim.log.levels.WARN) + end) + end + end +end + +--- Override the configuration with a user provided one +-- @param config_path The path to the configuration overrides +function M:load(config_path) + config_path = config_path or self.get_user_config_path() + local ok, _ = pcall(dofile, config_path) + if not ok then + Log:warn("Invalid configuration: " .. config_path) + end + + deprecation_notice() + + local autocmds = require "lvim.core.autocmds" + autocmds.define_augroups(lvim.autocommands) + + local settings = require "lvim.config.settings" + settings.load_commands() +end + +--- Override the configuration with a user provided one +-- @param config_path The path to the configuration overrides +function M:reload() + local lvim_modules = {} + for module, _ in pairs(package.loaded) do + if module:match "lvim" then + package.loaded.module = nil + table.insert(lvim_modules, module) + end + end + + M:init() + M:load() + + require("lvim.keymappings").setup() -- this should be done before loading the plugins + local plugins = require "lvim.plugins" + utils.toggle_autoformat() + local plugin_loader = require "lvim.plugin-loader" + plugin_loader:cache_reset() + plugin_loader:load { plugins, lvim.plugins } + vim.cmd ":PackerInstall" + vim.cmd ":PackerCompile" + -- vim.cmd ":PackerClean" + require("lvim.lsp").setup() + Log:info "Reloaded configuration" +end + +return M diff --git a/lua/lvim/config/settings.lua b/lua/lvim/config/settings.lua new file mode 100644 index 00000000..b86e1a18 --- /dev/null +++ b/lua/lvim/config/settings.lua @@ -0,0 +1,76 @@ +local M = {} +local utils = require "lvim.utils" +M.load_options = function() + local default_options = { + backup = false, -- creates a backup file + clipboard = "unnamedplus", -- allows neovim to access the system clipboard + cmdheight = 2, -- more space in the neovim command line for displaying messages + colorcolumn = "99999", -- fixes indentline for now + completeopt = { "menuone", "noselect" }, + conceallevel = 0, -- so that `` is visible in markdown files + fileencoding = "utf-8", -- the encoding written to a file + foldmethod = "manual", -- folding, set to "expr" for treesitter based folding + foldexpr = "", -- set to "nvim_treesitter#foldexpr()" for treesitter based folding + guifont = "monospace:h17", -- the font used in graphical neovim applications + hidden = true, -- required to keep multiple buffers and open multiple buffers + hlsearch = true, -- highlight all matches on previous search pattern + ignorecase = true, -- ignore case in search patterns + mouse = "a", -- allow the mouse to be used in neovim + pumheight = 10, -- pop up menu height + showmode = false, -- we don't need to see things like -- INSERT -- anymore + showtabline = 2, -- always show tabs + smartcase = true, -- smart case + smartindent = true, -- make indenting smarter again + splitbelow = true, -- force all horizontal splits to go below current window + splitright = true, -- force all vertical splits to go to the right of current window + swapfile = false, -- creates a swapfile + termguicolors = true, -- set term gui colors (most terminals support this) + timeoutlen = 100, -- time to wait for a mapped sequence to complete (in milliseconds) + title = true, -- set the title of window to the value of the titlestring + -- opt.titlestring = "%<%F%=%l/%L - nvim" -- what the title of the window will be set to + undodir = utils.join_paths(get_cache_dir(), "undo"), -- set an undo directory + undofile = true, -- enable persistent undo + updatetime = 300, -- faster completion + writebackup = false, -- if a file is being edited by another program (or was written to file while editing with another program), it is not allowed to be edited + expandtab = true, -- convert tabs to spaces + shiftwidth = 2, -- the number of spaces inserted for each indentation + tabstop = 2, -- insert 2 spaces for a tab + cursorline = true, -- highlight the current line + number = true, -- set numbered lines + relativenumber = false, -- set relative numbered lines + numberwidth = 4, -- set number column width to 2 {default 4} + signcolumn = "yes", -- always show the sign column, otherwise it would shift the text each time + wrap = false, -- display lines as one long line + spell = false, + spelllang = "en", + scrolloff = 8, -- is one of my fav + sidescrolloff = 8, + } + + --- SETTINGS --- + + vim.opt.shortmess:append "c" + + for k, v in pairs(default_options) do + vim.opt[k] = v + end +end + +M.load_commands = function() + local cmd = vim.cmd + if lvim.line_wrap_cursor_movement then + cmd "set whichwrap+=<,>,[,],h,l" + end + + if lvim.transparent_window then + cmd "au ColorScheme * hi Normal ctermbg=none guibg=none" + cmd "au ColorScheme * hi SignColumn ctermbg=none guibg=none" + cmd "au ColorScheme * hi NormalNC ctermbg=none guibg=none" + cmd "au ColorScheme * hi MsgArea ctermbg=none guibg=none" + cmd "au ColorScheme * hi TelescopeBorder ctermbg=none guibg=none" + cmd "au ColorScheme * hi NvimTreeNormal ctermbg=none guibg=none" + cmd "let &fcs='eob: '" + end +end + +return M |