nix-community.nixvim/plugins/utils/auto-save.nix

180 lines
4.7 KiB
Nix
Raw Normal View History

2023-06-02 13:13:27 +02:00
{
lib,
helpers,
pkgs,
2023-06-02 13:13:27 +02:00
...
}:
2024-05-05 19:39:35 +02:00
with lib;
2024-09-01 12:52:28 +01:00
helpers.neovim-plugin.mkNeovimPlugin {
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
basePluginPath = [
"plugins"
"auto-save"
];
settingsPath = basePluginPath ++ [ "settings" ];
in
[
(mkRenamedOptionModule (basePluginPath ++ [ "enableAutoSave" ]) (settingsPath ++ [ "enabled" ]))
(mkRemovedOptionModule (basePluginPath ++ [ "keymaps" ]) ''
Use the top-level `keymaps` option to create a keymap that runs :ASToggle
keymaps = [
{ key = "<leader>s"; action = "<cmd>ASToggle<CR>"; }
];
'')
];
settingsOptions = {
enabled = helpers.defaultNullOpts.mkBool true ''
2024-05-05 19:39:35 +02:00
Whether to start auto-save when the plugin is loaded.
'';
2023-06-02 13:13:27 +02:00
execution_message = {
enabled = helpers.defaultNullOpts.mkBool true ''
Show execution message after successful auto-save.
'';
2024-05-05 19:39:35 +02:00
message =
helpers.defaultNullOpts.mkStr
{
__raw = ''
function()
return ("AutoSave: saved at " .. vim.fn.strftime("%H:%M:%S"))
end
'';
}
2023-06-02 13:13:27 +02:00
''
The message to print on save.
2023-06-02 13:13:27 +02:00
This can be a lua function that returns a string.
'';
2024-05-05 19:39:35 +02:00
dim = helpers.defaultNullOpts.mkNullable (types.numbers.between 0
1
) 0.18 "Dim the color of `message`.";
2023-06-02 13:13:27 +02:00
cleaning_interval = helpers.defaultNullOpts.mkUnsignedInt 1250 ''
2024-05-05 19:39:35 +02:00
Time (in milliseconds) to wait before automatically cleaning MsgArea after displaying
`message`.
See `:h MsgArea`.
'';
};
2023-06-02 13:13:27 +02:00
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
[
"InsertLeave"
"TextChanged"
]
''
Vim events that trigger a deferred save (saves after `debounceDelay`).\
See `:h events` for events description.
'';
cancel_defered_save = helpers.defaultNullOpts.mkListOf types.str [ "InsertEnter" ] ''
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)
local fn = vim.fn
local utils = require("auto-save.utils.data")
if utils.not_in(fn.getbufvar(buf, "&filetype"), {}) then
return true
2023-06-02 13:13:27 +02:00
end
return false
end
'';
};
write_all_buffers = helpers.defaultNullOpts.mkBool false ''
2024-05-05 19:39:35 +02:00
Write all buffers when the current one meets `condition`.
'';
2023-06-02 13:13:27 +02:00
noautocmd = helpers.defaultNullOpts.mkBool false ''
Do not execute autocmds when saving.
2024-05-05 19:39:35 +02:00
'';
2023-06-02 13:13:27 +02:00
lockmarks = helpers.defaultNullOpts.mkBool false ''
Lock marks when saving, see `:h lockmarks` for more details.
'';
2023-06-02 13:13:27 +02:00
debounce_delay = helpers.defaultNullOpts.mkUnsignedInt 1000 ''
Saves the file at most every `debounce_delay` milliseconds.
'';
2023-06-02 13:13:27 +02:00
debug = helpers.defaultNullOpts.mkBool false ''
Log debug messages to `auto-save.log` file in NeoVim cache directory.
'';
};
2023-06-02 13:13:27 +02:00
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;
};
2023-06-02 13:13:27 +02:00
}