diff options
Diffstat (limited to 'lua/lvim/config')
| -rw-r--r-- | lua/lvim/config/defaults.lua | 34 | ||||
| -rw-r--r-- | lua/lvim/config/init.lua | 203 | ||||
| -rw-r--r-- | lua/lvim/config/settings.lua | 76 | 
3 files changed, 313 insertions, 0 deletions
| diff --git a/lua/lvim/config/defaults.lua b/lua/lvim/config/defaults.lua new file mode 100644 index 00000000..effe1e77 --- /dev/null +++ b/lua/lvim/config/defaults.lua @@ -0,0 +1,34 @@ +return { +  leader = "space", +  colorscheme = "onedarker", +  line_wrap_cursor_movement = true, +  transparent_window = false, +  format_on_save = true, +  keys = {}, + +  builtin = {}, + +  plugins = { +    -- use config.lua for this not put here +  }, + +  autocommands = {}, +  lang = {}, +  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 = {}, +      }, +    }, +    ---@usage set to false to restore the default behavior of vim.notify +    override_notify = true, +  }, +} diff --git a/lua/lvim/config/init.lua b/lua/lvim/config/init.lua new file mode 100644 index 00000000..c06d28ef --- /dev/null +++ b/lua/lvim/config/init.lua @@ -0,0 +1,203 @@ +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") + +---Get the full path to the user configuration file +---@return string +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 autocmds = require "lvim.core.autocmds" +  lvim.autocommands = autocmds.load_augroups() + +  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) +  local autocmds = require "lvim.core.autocmds" +  config_path = config_path or self.get_user_config_path() +  local ok, err = pcall(dofile, config_path) +  if not ok then +    if utils.is_file(user_config_file) then +      Log:warn("Invalid configuration: " .. err) +    else +      Log:warn(string.format("Unable to find configuration file [%s]", config_path)) +    end +  end + +  deprecation_notice() + +  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 | 
