mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 00:25:42 +02:00
plugins/auto-save: switch to mkNeovimPlugin
This commit is contained in:
parent
54207d1eff
commit
49452662b7
3 changed files with 180 additions and 129 deletions
|
@ -6,30 +6,62 @@
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
|
helpers.neovim-plugin.mkNeovimPlugin config {
|
||||||
|
name = "auto-save";
|
||||||
|
originalName = "auto-save.nvim";
|
||||||
|
defaultPackage = pkgs.vimPlugins.auto-save-nvim;
|
||||||
|
|
||||||
|
maintainers = [ helpers.maintainers.braindefender ];
|
||||||
|
|
||||||
|
# TODO: introduced 2024-06-21, remove after 24.11
|
||||||
|
deprecateExtraOptions = true;
|
||||||
|
optionsRenamedToSettings = [
|
||||||
|
[
|
||||||
|
"executionMessage"
|
||||||
|
"message"
|
||||||
|
]
|
||||||
|
[
|
||||||
|
"executionMessage"
|
||||||
|
"dim"
|
||||||
|
]
|
||||||
|
[
|
||||||
|
"executionMessage"
|
||||||
|
"cleaningInterval"
|
||||||
|
]
|
||||||
|
"triggerEvents"
|
||||||
|
"writeAllBuffers"
|
||||||
|
"debounceDelay"
|
||||||
|
];
|
||||||
|
|
||||||
|
imports =
|
||||||
let
|
let
|
||||||
cfg = config.plugins.auto-save;
|
basePluginPath = [
|
||||||
|
"plugins"
|
||||||
|
"auto-save"
|
||||||
|
];
|
||||||
|
settingsPath = basePluginPath ++ [ "settings" ];
|
||||||
in
|
in
|
||||||
{
|
[
|
||||||
options.plugins.auto-save = helpers.neovim-plugin.extraOptionsOptions // {
|
(mkRenamedOptionModule (basePluginPath ++ [ "enableAutoSave" ]) (settingsPath ++ [ "enabled" ]))
|
||||||
enable = mkEnableOption "auto-save";
|
(mkRemovedOptionModule (basePluginPath ++ [ "keymaps" ]) ''
|
||||||
|
Use the top-level `keymaps` option to create a keymap that runs :ASToggle
|
||||||
|
|
||||||
package = helpers.mkPluginPackageOption "auto-save" pkgs.vimPlugins.auto-save-nvim;
|
keymaps = [
|
||||||
|
{ key = "<leader>s"; action = "<cmd>ASToggle<CR>"; }
|
||||||
|
];
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
|
||||||
keymaps = {
|
settingsOptions = {
|
||||||
silent = mkOption {
|
enabled = helpers.defaultNullOpts.mkBool true ''
|
||||||
type = types.bool;
|
|
||||||
description = "Whether auto-save keymaps should be silent.";
|
|
||||||
default = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
toggle = helpers.mkNullOrOption types.str "Keymap for running auto-save.";
|
|
||||||
};
|
|
||||||
|
|
||||||
enableAutoSave = helpers.defaultNullOpts.mkBool true ''
|
|
||||||
Whether to start auto-save when the plugin is loaded.
|
Whether to start auto-save when the plugin is loaded.
|
||||||
'';
|
'';
|
||||||
|
|
||||||
executionMessage = {
|
execution_message = {
|
||||||
|
enabled = helpers.defaultNullOpts.mkBool true ''
|
||||||
|
Show execution message after successful auto-save.
|
||||||
|
'';
|
||||||
|
|
||||||
message =
|
message =
|
||||||
helpers.defaultNullOpts.mkStr
|
helpers.defaultNullOpts.mkStr
|
||||||
{
|
{
|
||||||
|
@ -40,7 +72,7 @@ in
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
''
|
''
|
||||||
The message to print en save.
|
The message to print on save.
|
||||||
This can be a lua function that returns a string.
|
This can be a lua function that returns a string.
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
@ -48,97 +80,101 @@ in
|
||||||
1
|
1
|
||||||
) 0.18 "Dim the color of `message`.";
|
) 0.18 "Dim the color of `message`.";
|
||||||
|
|
||||||
cleaningInterval = helpers.defaultNullOpts.mkInt 1250 ''
|
cleaning_interval = helpers.defaultNullOpts.mkUnsignedInt 1250 ''
|
||||||
Time (in milliseconds) to wait before automatically cleaning MsgArea after displaying
|
Time (in milliseconds) to wait before automatically cleaning MsgArea after displaying
|
||||||
`message`.
|
`message`.
|
||||||
See `:h MsgArea`.
|
See `:h MsgArea`.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
triggerEvents =
|
trigger_events = {
|
||||||
|
immediate_save =
|
||||||
|
helpers.defaultNullOpts.mkListOf types.str
|
||||||
|
[
|
||||||
|
"BufLeave"
|
||||||
|
"FocusLost"
|
||||||
|
]
|
||||||
|
''
|
||||||
|
Vim events that trigger an immediate save.\
|
||||||
|
See `:h events` for events description.
|
||||||
|
'';
|
||||||
|
|
||||||
|
defer_save =
|
||||||
helpers.defaultNullOpts.mkListOf types.str
|
helpers.defaultNullOpts.mkListOf types.str
|
||||||
[
|
[
|
||||||
"InsertLeave"
|
"InsertLeave"
|
||||||
"TextChanged"
|
"TextChanged"
|
||||||
]
|
]
|
||||||
''
|
''
|
||||||
Vim events that trigger auto-save.
|
Vim events that trigger a deferred save (saves after `debounceDelay`).\
|
||||||
See `:h events`.
|
See `:h events` for events description.
|
||||||
'';
|
'';
|
||||||
|
|
||||||
condition =
|
cancel_defered_save = helpers.defaultNullOpts.mkListOf types.str [ "InsertEnter" ] ''
|
||||||
helpers.defaultNullOpts.mkLuaFn
|
Vim events that cancel a pending deferred save.\
|
||||||
''
|
See `:h events` for events description.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
condition = helpers.defaultNullOpts.mkLuaFn' {
|
||||||
|
pluginDefault = null;
|
||||||
|
description = ''
|
||||||
|
Function that determines whether to save the current buffer or not.
|
||||||
|
- return true: if buffer is ok to be saved
|
||||||
|
- return false: if it's not ok to be saved
|
||||||
|
|
||||||
|
In this example, the second argument of `utils.not_in(..., {})`
|
||||||
|
determines which filetypes will be ignored by auto-save plugin.
|
||||||
|
|
||||||
|
Buffers that are `nomodifiable` are not saved by default.
|
||||||
|
'';
|
||||||
|
example = ''
|
||||||
function(buf)
|
function(buf)
|
||||||
local fn = vim.fn
|
local fn = vim.fn
|
||||||
local utils = require("auto-save.utils.data")
|
local utils = require("auto-save.utils.data")
|
||||||
|
|
||||||
if
|
if utils.not_in(fn.getbufvar(buf, "&filetype"), {}) then
|
||||||
fn.getbufvar(buf, "&modifiable") == 1 and utils.not_in(fn.getbufvar(buf, "&filetype"), {}) then
|
return true
|
||||||
return true -- met condition(s), can save
|
|
||||||
end
|
end
|
||||||
return false -- can't save
|
return false
|
||||||
end
|
end
|
||||||
''
|
|
||||||
''
|
|
||||||
Function that determines whether to save the current buffer or not.
|
|
||||||
- return true: if buffer is ok to be saved
|
|
||||||
- return false: if it's not ok to be saved
|
|
||||||
'';
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
writeAllBuffers = helpers.defaultNullOpts.mkBool false ''
|
write_all_buffers = helpers.defaultNullOpts.mkBool false ''
|
||||||
Write all buffers when the current one meets `condition`.
|
Write all buffers when the current one meets `condition`.
|
||||||
'';
|
'';
|
||||||
|
|
||||||
debounceDelay = helpers.defaultNullOpts.mkInt 135 ''
|
noautocmd = helpers.defaultNullOpts.mkBool false ''
|
||||||
|
Do not execute autocmds when saving.
|
||||||
|
'';
|
||||||
|
|
||||||
|
lockmarks = helpers.defaultNullOpts.mkBool false ''
|
||||||
|
Lock marks when saving, see `:h lockmarks` for more details.
|
||||||
|
'';
|
||||||
|
|
||||||
|
debounce_delay = helpers.defaultNullOpts.mkUnsignedInt 1000 ''
|
||||||
Saves the file at most every `debounce_delay` milliseconds.
|
Saves the file at most every `debounce_delay` milliseconds.
|
||||||
'';
|
'';
|
||||||
|
|
||||||
callbacks =
|
debug = helpers.defaultNullOpts.mkBool false ''
|
||||||
mapAttrs (name: desc: helpers.mkNullOrLuaFn "The code of the function that runs ${desc}.")
|
Log debug messages to `auto-save.log` file in NeoVim cache directory.
|
||||||
{
|
|
||||||
enabling = "when enabling auto-save";
|
|
||||||
disabling = "when disabling auto-save";
|
|
||||||
beforeAssertingSave = "before checking `condition`";
|
|
||||||
beforeSaving = "before doing the actual save";
|
|
||||||
afterSaving = "after doing the actual save";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config =
|
|
||||||
let
|
|
||||||
options = {
|
|
||||||
enabled = cfg.enableAutoSave;
|
|
||||||
execution_message = with cfg.executionMessage; {
|
|
||||||
inherit message dim;
|
|
||||||
cleaning_interval = cleaningInterval;
|
|
||||||
};
|
|
||||||
trigger_events = cfg.triggerEvents;
|
|
||||||
inherit (cfg) condition;
|
|
||||||
write_all_buffers = cfg.writeAllBuffers;
|
|
||||||
debounce_delay = cfg.debounceDelay;
|
|
||||||
callbacks = with cfg.callbacks; {
|
|
||||||
inherit enabling disabling;
|
|
||||||
before_asserting_save = beforeAssertingSave;
|
|
||||||
before_saving = beforeSaving;
|
|
||||||
after_saving = afterSaving;
|
|
||||||
};
|
|
||||||
} // cfg.extraOptions;
|
|
||||||
in
|
|
||||||
mkIf cfg.enable {
|
|
||||||
extraPlugins = [ cfg.package ];
|
|
||||||
|
|
||||||
extraConfigLua = ''
|
|
||||||
require('auto-save').setup(${helpers.toLuaObject options})
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
keymaps =
|
|
||||||
with cfg.keymaps;
|
|
||||||
optional (toggle != null) {
|
|
||||||
mode = "n";
|
|
||||||
key = toggle;
|
|
||||||
action = ":ASToggle<CR>";
|
|
||||||
options.silent = cfg.keymaps.silent;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
settingsExample = {
|
||||||
|
condition = ''
|
||||||
|
function(buf)
|
||||||
|
local fn = vim.fn
|
||||||
|
local utils = require("auto-save.utils.data")
|
||||||
|
|
||||||
|
if utils.not_in(fn.getbufvar(buf, "&filetype"), {'oil'}) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
write_all_buffers = true;
|
||||||
|
debounce_delay = 1000;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,47 +3,61 @@
|
||||||
plugins.auto-save.enable = true;
|
plugins.auto-save.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
example = {
|
||||||
|
plugins.auto-save = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
condition = ''
|
||||||
|
function(buf)
|
||||||
|
local fn = vim.fn
|
||||||
|
local utils = require("auto-save.utils.data")
|
||||||
|
|
||||||
|
if utils.not_in(fn.getbufvar(buf, "&filetype"), {'oil'}) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
write_all_buffers = true;
|
||||||
|
debounce_delay = 1000;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
defaults = {
|
defaults = {
|
||||||
plugins.auto-save = {
|
plugins.auto-save = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
keymaps = {
|
settings = {
|
||||||
silent = true;
|
enabled = true;
|
||||||
toggle = "<leader>s";
|
execution_message = {
|
||||||
};
|
enabled = true;
|
||||||
enableAutoSave = true;
|
dim = 0.18;
|
||||||
executionMessage = {
|
cleaning_interval = 1250;
|
||||||
message.__raw = ''
|
message.__raw = ''
|
||||||
function()
|
function()
|
||||||
return ("AutoSave: saved at " .. vim.fn.strftime("%H:%M:%S"))
|
return ("AutoSave: saved at " .. vim.fn.strftime("%H:%M:%S"))
|
||||||
end
|
end
|
||||||
'';
|
'';
|
||||||
dim = 0.18;
|
|
||||||
cleaningInterval = 1250;
|
|
||||||
};
|
};
|
||||||
triggerEvents = [
|
trigger_events = {
|
||||||
|
immediate_save = [
|
||||||
|
"BufLeave"
|
||||||
|
"FocusLost"
|
||||||
|
];
|
||||||
|
defer_save = [
|
||||||
"InsertLeave"
|
"InsertLeave"
|
||||||
"TextChanged"
|
"TextChanged"
|
||||||
];
|
];
|
||||||
condition = ''
|
cancel_defered_save = [ "InsertEnter" ];
|
||||||
function(buf)
|
};
|
||||||
local fn = vim.fn
|
condition = null;
|
||||||
local utils = require("auto-save.utils.data")
|
write_all_buffers = false;
|
||||||
|
noautocmd = false;
|
||||||
if fn.getbufvar(buf, "&modifiable") == 1 and utils.not_in(fn.getbufvar(buf, "&filetype"), {}) then
|
lockmarks = false;
|
||||||
return true -- met condition(s), can save
|
debounce_delay = 1000;
|
||||||
end
|
debug = false;
|
||||||
return false -- can't save
|
|
||||||
end
|
|
||||||
'';
|
|
||||||
writeAllBuffers = false;
|
|
||||||
debounceDelay = 135;
|
|
||||||
callbacks = {
|
|
||||||
enabling = null;
|
|
||||||
disabling = null;
|
|
||||||
beforeAssertingSave = null;
|
|
||||||
beforeSaving = null;
|
|
||||||
afterSaving = null;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,6 +5,7 @@ darcula = "darcula" # base16-list
|
||||||
Parm = "Parm" # clangd-extensions
|
Parm = "Parm" # clangd-extensions
|
||||||
Definitons = "Definitons" # TODO: ./plugins/languages/treesitter/treesitter-refactor.nix
|
Definitons = "Definitons" # TODO: ./plugins/languages/treesitter/treesitter-refactor.nix
|
||||||
deffered = "deffered" # TODO: ./plugins/utils/vim-matchup.nix
|
deffered = "deffered" # TODO: ./plugins/utils/vim-matchup.nix
|
||||||
|
defered = "defered" # ./plugins/utils/auto-save.nix
|
||||||
Highligt = "Highligt" # TODO: ./plugins/utils/neogen.nix
|
Highligt = "Highligt" # TODO: ./plugins/utils/neogen.nix
|
||||||
Annote = "Annote" # TODO: ./plugins/lsp/fidget.nix
|
Annote = "Annote" # TODO: ./plugins/lsp/fidget.nix
|
||||||
ket = "ket" # ./plugins/utils/sandwich.nix
|
ket = "ket" # ./plugins/utils/sandwich.nix
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue