Distro agnostic Neovim plugin to upgrade your current distro from its github remote.
If you use Neovim in multiple machines, you can use the command :DistroUpdate
to get the latest changes of your config from your GitHub repository from any device.
If you are developing a Neovim distro, you can ship this plugin, and users will get updates from your distro GitHub repository when they run :DistroUpdate
.
Currently, running :DistroUpdate
will overwrite any uncommited change in your local nvim config.
This plugin requires you to use lazy package manager
{
"Zeioth/distroupgrade.nvim",
dependencies = "nvim-lua/plenary.nvim",
event = "VeryLazy",
opts = {}
}
Command | Description |
---|---|
:DistroUpdate | If the value of the option channel is stable , it will update from the latest available released version of the remote of the git repository of your nvim config. If the value of channel is nightly , it will update from the latest changes in the branch nightly of the git repository of you nvim config. |
:DistroUpdateRevert | Uses git to bring your config to the state it had before running :DistroUpdate . |
:DistroFreezePluginVersions | Saves your current plugin versions into lazy_versions.lua in your config directory. You can import this file and pass it to your lazy config, so it respect your locked versions. Check the option spec in lazy. |
:DistroReadVersion | Prints the commit number of the current distro version. |
:DistroReadChangelog | Prints the changelog. |
All options described here are 100% optional and you don't need to define them to use this plugin.
Name | Default value | Description |
---|---|---|
channel | stable |
Channel used by the command :DistroUpdate . stable will update the distro from the latest available released version of your git repository. nightly will update the distro from the main branch of your git repository. |
hot_reload_files | {} |
The files included, will be hot reloaded every time you write them. This way you can see the changes in your config reflected without having to restart nvim. For example: { my_nvim_opts_file, my_nvim_mappings_file} . Be aware this feature is experimental, and might not work in all cases yet. |
hot_reload_callback | function() end |
(optional) Extra things to do after the files defined in the option hot_reload_files are reloaded. For example: This can be handy if you want to re-apply your theme. |
release_tag | nil |
If this option is specified, the option channel will be ignored, and the updater will download the release you specify. The format must be semantic versioning, like: "v1.0" . |
remote | origin |
Git remote of your distro repository. |
snapshot_file | <nvim_config_dir>/lua/lazy_snapshot.lua |
File used by the command :DistroFreezePluginVersions to write the plugins. |
rollback_file | <nvim_cache_dir>/rollback.lua |
Rollback file automatically triggered by :DistroUpdate . This file will be used when you use :DistroUpdateRevert |
-- distroupdate.nvim [distro update]
-- https://github.com/Zeioth/distroupdate.nvim
{
"Zeioth/distroupdate.nvim",
dependencies = { "nvim-lua/plenary.nvim" },
event = "VeryLazy",
opts = function()
local config_dir = vim.fn.stdpath "config" .. "/lua/base/"
return {
remote = "origin",
channel = "stable", -- stable/nightly.
release_tag = nil, -- in case you wanna freeze a specific distro version.
hot_reload_files = {
config_dir .. "1-options.lua",
config_dir .. "4-mappings.lua"
},
hot_reload_callback = function()
vim.cmd ":silent! doautocmd ColorScheme" -- heirline colorscheme reload event.
vim.cmd(":silent! colorscheme " .. base.default_colorscheme) -- nvim colorscheme reload command.
end
}
end
},
Many of the GPL3 lua libraries this plugin use come from AstroNvim and NormalNvim. So please support both projects if you enjoy this plugin.
- Is this plugin automatic? NO. This plugin will do nothing unless you run one of its commands.
- Where do the updates come from? From your own git repo. You are the only one in control.