mirror of
https://github.com/Keyitdev/dotfiles.git
synced 2026-09-24 01:52:09 +00:00
New version: created v3
This commit is contained in:
@@ -0,0 +1,299 @@
|
||||
_G.astronvim = {}
|
||||
local stdpath = vim.fn.stdpath
|
||||
local tbl_insert = table.insert
|
||||
local map = vim.keymap.set
|
||||
|
||||
astronvim.install = astronvim_installation or { home = stdpath "config" }
|
||||
|
||||
local astronvim_config = stdpath("config"):gsub("nvim$", "astronvim")
|
||||
vim.opt.rtp:append(astronvim_config)
|
||||
local supported_configs = { astronvim.install.home, astronvim_config }
|
||||
|
||||
local function load_module_file(module)
|
||||
local found_module = nil
|
||||
for _, config_path in ipairs(supported_configs) do
|
||||
local module_path = config_path .. "/lua/" .. module:gsub("%.", "/") .. ".lua"
|
||||
if vim.fn.filereadable(module_path) == 1 then
|
||||
found_module = module_path
|
||||
end
|
||||
end
|
||||
if found_module then
|
||||
local status_ok, loaded_module = pcall(require, module)
|
||||
if status_ok then
|
||||
found_module = loaded_module
|
||||
else
|
||||
astronvim.notify("Error loading " .. found_module, "error")
|
||||
end
|
||||
end
|
||||
return found_module
|
||||
end
|
||||
|
||||
astronvim.user_settings = load_module_file "user.init"
|
||||
astronvim.default_compile_path = stdpath "data" .. "/packer_compiled.lua"
|
||||
astronvim.user_terminals = {}
|
||||
astronvim.url_matcher =
|
||||
"\\v\\c%(%(h?ttps?|ftp|file|ssh|git)://|[a-z]+[@][a-z]+[.][a-z]+:)%([&:#*@~%_\\-=?!+;/0-9a-z]+%(%([.;/?]|[.][.]+)[&:#*@~%_\\-=?!+/0-9a-z]+|:\\d+|,%(%(%(h?ttps?|ftp|file|ssh|git)://|[a-z]+[@][a-z]+[.][a-z]+:)@![0-9a-z]+))*|\\([&:#*@~%_\\-=?!+;/.0-9a-z]*\\)|\\[[&:#*@~%_\\-=?!+;/.0-9a-z]*\\]|\\{%([&:#*@~%_\\-=?!+;/.0-9a-z]*|\\{[&:#*@~%_\\-=?!+;/.0-9a-z]*})\\})+"
|
||||
|
||||
local function func_or_extend(overrides, default, extend)
|
||||
if extend then
|
||||
if type(overrides) == "table" then
|
||||
default = vim.tbl_deep_extend("force", default, overrides)
|
||||
elseif type(overrides) == "function" then
|
||||
default = overrides(default)
|
||||
end
|
||||
elseif overrides ~= nil then
|
||||
default = overrides
|
||||
end
|
||||
return default
|
||||
end
|
||||
|
||||
function astronvim.conditional_func(func, condition, ...)
|
||||
if (condition == nil and true or condition) and type(func) == "function" then
|
||||
return func(...)
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.trim_or_nil(str)
|
||||
return type(str) == "string" and vim.trim(str) or nil
|
||||
end
|
||||
|
||||
function astronvim.notify(msg, type, opts)
|
||||
vim.notify(msg, type, vim.tbl_deep_extend("force", { title = "AstroNvim" }, opts or {}))
|
||||
end
|
||||
|
||||
function astronvim.echo(messages)
|
||||
messages = messages or { { "\n" } }
|
||||
if type(messages) == "table" then
|
||||
vim.api.nvim_echo(messages, false, {})
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.confirm_prompt(messages)
|
||||
if messages then
|
||||
astronvim.echo(messages)
|
||||
end
|
||||
local confirmed = string.lower(vim.fn.input "(y/n) ") == "y"
|
||||
astronvim.echo()
|
||||
astronvim.echo()
|
||||
return confirmed
|
||||
end
|
||||
|
||||
local function user_setting_table(module)
|
||||
local settings = astronvim.user_settings or {}
|
||||
for tbl in string.gmatch(module, "([^%.]+)") do
|
||||
settings = settings[tbl]
|
||||
if settings == nil then
|
||||
break
|
||||
end
|
||||
end
|
||||
return settings
|
||||
end
|
||||
|
||||
function astronvim.initialize_packer()
|
||||
local packer_avail, packer = pcall(require, "packer")
|
||||
if not packer_avail then
|
||||
local packer_path = stdpath "data" .. "/site/pack/packer/start/packer.nvim"
|
||||
vim.fn.delete(packer_path, "rf")
|
||||
vim.fn.system {
|
||||
"git",
|
||||
"clone",
|
||||
"--depth",
|
||||
"1",
|
||||
"https://github.com/wbthomason/packer.nvim",
|
||||
packer_path,
|
||||
}
|
||||
astronvim.echo { { "Initializing Packer...\n\n" } }
|
||||
vim.cmd "packadd packer.nvim"
|
||||
packer_avail, packer = pcall(require, "packer")
|
||||
if not packer_avail then
|
||||
vim.api.nvim_err_writeln("Failed to load packer at:" .. packer_path .. "\n\n" .. packer)
|
||||
end
|
||||
end
|
||||
return packer
|
||||
end
|
||||
|
||||
function astronvim.vim_opts(options)
|
||||
for scope, table in pairs(options) do
|
||||
for setting, value in pairs(table) do
|
||||
vim[scope][setting] = value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.user_plugin_opts(module, default, extend, prefix)
|
||||
if extend == nil then
|
||||
extend = true
|
||||
end
|
||||
default = default or {}
|
||||
local user_settings = load_module_file((prefix or "user") .. "." .. module)
|
||||
if user_settings == nil and prefix == nil then
|
||||
user_settings = user_setting_table(module)
|
||||
end
|
||||
if user_settings ~= nil then
|
||||
default = func_or_extend(user_settings, default, extend)
|
||||
end
|
||||
return default
|
||||
end
|
||||
|
||||
function astronvim.compiled()
|
||||
local run_me, _ = loadfile(
|
||||
astronvim.user_plugin_opts("plugins.packer", { compile_path = astronvim.default_compile_path }).compile_path
|
||||
)
|
||||
if run_me then
|
||||
run_me()
|
||||
else
|
||||
astronvim.echo { { "Please run " }, { ":PackerSync", "Title" } }
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.url_opener()
|
||||
if vim.fn.has "mac" == 1 then
|
||||
vim.fn.jobstart({ "open", vim.fn.expand "<cfile>" }, { detach = true })
|
||||
elseif vim.fn.has "unix" == 1 then
|
||||
vim.fn.jobstart({ "xdg-open", vim.fn.expand "<cfile>" }, { detach = true })
|
||||
else
|
||||
astronvim.notify("gx is not supported on this OS!", "error")
|
||||
end
|
||||
end
|
||||
|
||||
-- term_details can be either a string for just a command or
|
||||
-- a complete table to provide full access to configuration when calling Terminal:new()
|
||||
function astronvim.toggle_term_cmd(term_details)
|
||||
if type(term_details) == "string" then
|
||||
term_details = { cmd = term_details, hidden = true }
|
||||
end
|
||||
local term_key = term_details.cmd
|
||||
if vim.v.count > 0 and term_details.count == nil then
|
||||
term_details.count = vim.v.count
|
||||
term_key = term_key .. vim.v.count
|
||||
end
|
||||
if astronvim.user_terminals[term_key] == nil then
|
||||
astronvim.user_terminals[term_key] = require("toggleterm.terminal").Terminal:new(term_details)
|
||||
end
|
||||
astronvim.user_terminals[term_key]:toggle()
|
||||
end
|
||||
|
||||
function astronvim.add_cmp_source(source)
|
||||
local cmp_avail, cmp = pcall(require, "cmp")
|
||||
if cmp_avail then
|
||||
local config = cmp.get_config()
|
||||
tbl_insert(config.sources, source)
|
||||
cmp.setup(config)
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.get_user_cmp_source(source)
|
||||
source = type(source) == "string" and { name = source } or source
|
||||
local priority = astronvim.user_plugin_opts("cmp.source_priority", {
|
||||
nvim_lsp = 1000,
|
||||
luasnip = 750,
|
||||
buffer = 500,
|
||||
path = 250,
|
||||
})[source.name]
|
||||
if priority then
|
||||
source.priority = priority
|
||||
end
|
||||
return source
|
||||
end
|
||||
|
||||
function astronvim.add_user_cmp_source(source)
|
||||
astronvim.add_cmp_source(astronvim.get_user_cmp_source(source))
|
||||
end
|
||||
|
||||
function astronvim.null_ls_providers(filetype)
|
||||
local registered = {}
|
||||
local sources_avail, sources = pcall(require, "null-ls.sources")
|
||||
if sources_avail then
|
||||
for _, source in ipairs(sources.get_available(filetype)) do
|
||||
for method in pairs(source.methods) do
|
||||
registered[method] = registered[method] or {}
|
||||
tbl_insert(registered[method], source.name)
|
||||
end
|
||||
end
|
||||
end
|
||||
return registered
|
||||
end
|
||||
|
||||
function astronvim.null_ls_sources(filetype, source)
|
||||
local methods_avail, methods = pcall(require, "null-ls.methods")
|
||||
return methods_avail and astronvim.null_ls_providers(filetype)[methods.internal[source]] or {}
|
||||
end
|
||||
|
||||
function astronvim.alpha_button(sc, txt)
|
||||
local sc_ = sc:gsub("%s", ""):gsub("LDR", "<leader>")
|
||||
if vim.g.mapleader then
|
||||
sc = sc:gsub("LDR", vim.g.mapleader == " " and "SPC" or vim.g.mapleader)
|
||||
end
|
||||
return {
|
||||
type = "button",
|
||||
val = txt,
|
||||
on_press = function()
|
||||
local key = vim.api.nvim_replace_termcodes(sc_, true, false, true)
|
||||
vim.api.nvim_feedkeys(key, "normal", false)
|
||||
end,
|
||||
opts = {
|
||||
position = "center",
|
||||
text = txt,
|
||||
shortcut = sc,
|
||||
cursor = 5,
|
||||
width = 36,
|
||||
align_shortcut = "right",
|
||||
hl = "DashboardCenter",
|
||||
hl_shortcut = "DashboardShortcut",
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
function astronvim.is_available(plugin)
|
||||
return packer_plugins ~= nil and packer_plugins[plugin] ~= nil
|
||||
end
|
||||
|
||||
function astronvim.set_mappings(map_table, base)
|
||||
for mode, maps in pairs(map_table) do
|
||||
for keymap, options in pairs(maps) do
|
||||
if options then
|
||||
local cmd = options
|
||||
if type(options) == "table" then
|
||||
cmd = options[1]
|
||||
options[1] = nil
|
||||
else
|
||||
options = {}
|
||||
end
|
||||
map(mode, keymap, cmd, vim.tbl_deep_extend("force", options, base or {}))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.delete_url_match()
|
||||
for _, match in ipairs(vim.fn.getmatches()) do
|
||||
if match.group == "HighlightURL" then
|
||||
vim.fn.matchdelete(match.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.set_url_match()
|
||||
astronvim.delete_url_match()
|
||||
if vim.g.highlighturl_enabled then
|
||||
vim.fn.matchadd("HighlightURL", astronvim.url_matcher, 15)
|
||||
end
|
||||
end
|
||||
|
||||
function astronvim.toggle_url_match()
|
||||
vim.g.highlighturl_enabled = not vim.g.highlighturl_enabled
|
||||
astronvim.set_url_match()
|
||||
end
|
||||
|
||||
function astronvim.cmd(cmd, show_error)
|
||||
local result = vim.fn.system(cmd)
|
||||
local success = vim.api.nvim_get_vvar "shell_error" == 0
|
||||
if not success and (show_error == nil and true or show_error) then
|
||||
vim.api.nvim_err_writeln("Error running command: " .. cmd .. "\nError message:\n" .. result)
|
||||
end
|
||||
return success and result or nil
|
||||
end
|
||||
|
||||
require "core.utils.updater"
|
||||
|
||||
return astronvim
|
||||
Reference in New Issue
Block a user