summaryrefslogtreecommitdiff
path: root/lua/lvim/config
diff options
context:
space:
mode:
authorkylo252 <[email protected]>2021-10-21 07:48:10 +0200
committerkylo252 <[email protected]>2021-10-21 07:48:10 +0200
commit30de3736baec9a72134205de91f3388e3ea68bcf (patch)
treec0079f51d68c61316726f104bae963c5f0371571 /lua/lvim/config
parentb98264042f558751483e2c993ebed11a5bcbb1de (diff)
parent25747cfff457d5375b6141588d81017ca515ffcb (diff)
Merge remote-tracking branch 'origin/rolling'
Diffstat (limited to 'lua/lvim/config')
-rw-r--r--lua/lvim/config/defaults.lua34
-rw-r--r--lua/lvim/config/init.lua203
-rw-r--r--lua/lvim/config/settings.lua76
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