nvim/lua/cosmic/utils/init.lua

122 lines
3 KiB
Lua

local Logger = require('cosmic.utils.logger')
local M = {}
function M.map(mode, lhs, rhs, opts)
local options = { noremap = true, silent = true }
if opts then
options = vim.tbl_extend('force', options, opts)
end
vim.api.nvim_set_keymap(mode, lhs, rhs, options)
end
function M.split(str, sep)
local res = {}
for w in str:gmatch('([^' .. sep .. ']*)') do
if w ~= '' then
table.insert(res, w)
end
end
return res
end
function M.get_active_lsp_client_names()
local active_clients = vim.lsp.get_active_clients()
local client_names = {}
for _, client in pairs(active_clients or {}) do
local buf = vim.api.nvim_get_current_buf()
-- only return attached buffers
if vim.lsp.buf_is_attached(buf, client.id) then
table.insert(client_names, client.name)
end
end
if not vim.tbl_isempty(client_names) then
table.sort(client_names)
end
return client_names
end
local function unload(module_pattern, reload)
reload = reload or false
for module, _ in pairs(package.loaded) do
if module:match(module_pattern) then
package.loaded[module] = nil
if reload then
require(module)
end
end
end
end
local function clear_cache()
if 0 == vim.fn.delete(vim.fn.stdpath('config') .. '/lua/cosmic/compiled.lua') then
vim.cmd(':LuaCacheClear')
end
end
function M.post_reload(msg)
unload('cosmic.utils', true)
unload('cosmic.theme', true)
unload('cosmic.plugins.statusline', true)
msg = msg or 'User config reloaded!'
Logger:log(msg)
end
function M.reload_user_config_sync()
M.reload_user_config()
clear_cache()
unload('cosmic.config', true)
unload('cosmic.core.pluginsInit', true)
vim.cmd([[autocmd User PackerCompileDone ++once lua require('cosmic.utils').post_reload()]])
vim.cmd(':PackerSync')
end
function M.reload_user_config(compile)
compile = compile or false
unload('cosmic.config', true)
if compile then
vim.cmd([[autocmd User PackerCompileDone ++once lua require('cosmic.utils').post_reload()]])
vim.cmd(':PackerCompile')
end
end
function M.get_install_dir()
local config_dir = os.getenv('COSMICNVIM_INSTALL_DIR')
if not config_dir then
return vim.fn.stdpath('config')
end
return config_dir
end
-- update instance of CosmicNvim
function M.update()
local Job = require('plenary.job')
local path = M.get_install_dir()
local errors = {}
Job
:new({
command = 'git',
args = { 'pull', '--ff-only' },
cwd = path,
on_start = function()
Logger:log('Updating...')
end,
on_exit = function()
if vim.tbl_isempty(errors) then
Logger:log('Updated! Running CosmicReloadSync...')
M.reload_user_config_sync()
else
table.insert(errors, 1, 'Something went wrong! Please pull changes manually.')
table.insert(errors, 2, '')
Logger:error('Update failed!', { timeout = 30000 })
end
end,
on_stderr = function(_, err)
table.insert(errors, err)
end,
})
:sync()
end
return M