mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-24 17:58:38 +02:00
plugins/telescope.extensions.undo: init + (#654)
* new plugin * add content * add content * Update plugins/telescope/undo.nix Co-authored-by: Gaétan Lepage <33058747+GaetanLepage@users.noreply.github.com> * Update plugins/telescope/undo.nix Co-authored-by: Gaétan Lepage <33058747+GaetanLepage@users.noreply.github.com> * add test * Update plugins/telescope/undo.nix Co-authored-by: Gaétan Lepage <33058747+GaetanLepage@users.noreply.github.com> * fix per pr comments * fix per pr comments * fix per pr comments --------- Co-authored-by: Haseeb Majid <haseeb.majid@imaginecurve.com> Co-authored-by: Gaétan Lepage <33058747+GaetanLepage@users.noreply.github.com>
This commit is contained in:
parent
0c5dcb56d1
commit
520a59668d
3 changed files with 172 additions and 0 deletions
|
@ -15,6 +15,7 @@ in {
|
||||||
./fzy-native.nix
|
./fzy-native.nix
|
||||||
./media-files.nix
|
./media-files.nix
|
||||||
./project-nvim.nix
|
./project-nvim.nix
|
||||||
|
./undo.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# TODO:add support for aditional filetypes. This requires autocommands!
|
# TODO:add support for aditional filetypes. This requires autocommands!
|
||||||
|
|
137
plugins/telescope/undo.nix
Normal file
137
plugins/telescope/undo.nix
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
cfg = config.plugins.telescope.extensions.undo;
|
||||||
|
helpers = import ../helpers.nix {inherit lib;};
|
||||||
|
in {
|
||||||
|
options.plugins.telescope.extensions.undo = {
|
||||||
|
enable = mkEnableOption "undo";
|
||||||
|
|
||||||
|
package = helpers.mkPackageOption "telescope extension undo" pkgs.vimPlugins.telescope-undo-nvim;
|
||||||
|
|
||||||
|
useDelta = mkOption {
|
||||||
|
type = types.nullOr types.bool;
|
||||||
|
description = ''
|
||||||
|
When set to true, [delta](https://github.com/dandavison/delta) is used for fancy diffs in the preview section.
|
||||||
|
If set to false, `telescope-undo` will not use `delta` even when available and fall back to a plain diff with
|
||||||
|
treesitter highlights.
|
||||||
|
'';
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
useCustomCommand = mkOption {
|
||||||
|
type = types.nullOr (types.listOf types.str);
|
||||||
|
description = ''
|
||||||
|
should be in this format: [ "bash" "-c" "echo '$DIFF' | delta" ]
|
||||||
|
'';
|
||||||
|
default = null;
|
||||||
|
};
|
||||||
|
|
||||||
|
sideBySide = mkOption {
|
||||||
|
type = types.nullOr types.bool;
|
||||||
|
description = ''
|
||||||
|
If set to true tells `delta` to render diffs side-by-side. Thus, requires `delta` to be
|
||||||
|
used. Be aware that `delta` always uses its own configuration, so it might be that you're getting
|
||||||
|
the side-by-side view even if this is set to false.
|
||||||
|
'';
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
diffContextLines = mkOption {
|
||||||
|
type = with types;
|
||||||
|
either ints.unsigned str;
|
||||||
|
description = ''Defaults to the scrolloff'';
|
||||||
|
default = "vim.o.scrolloff";
|
||||||
|
};
|
||||||
|
|
||||||
|
entryFormat = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
description = ''The format to show on telescope for the different versions of the file.'';
|
||||||
|
default = "state #$ID, $STAT, $TIME";
|
||||||
|
};
|
||||||
|
|
||||||
|
timeFormat = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
description = ''
|
||||||
|
Can be set to a [Lua date format string](https://www.lua.org/pil/22.1.html).
|
||||||
|
'';
|
||||||
|
default = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
mappings = {
|
||||||
|
i =
|
||||||
|
helpers.defaultNullOpts.mkNullable
|
||||||
|
(
|
||||||
|
with types;
|
||||||
|
attrsOf str
|
||||||
|
)
|
||||||
|
''
|
||||||
|
{
|
||||||
|
"<cr>" = "yank_additions";
|
||||||
|
"<s-cr>" = "yank_deletions";
|
||||||
|
"<c-cr>" = "restore";
|
||||||
|
}
|
||||||
|
''
|
||||||
|
"Keymaps in insert mode";
|
||||||
|
n =
|
||||||
|
helpers.defaultNullOpts.mkNullable
|
||||||
|
(
|
||||||
|
with types;
|
||||||
|
attrsOf str
|
||||||
|
)
|
||||||
|
''
|
||||||
|
{
|
||||||
|
"y" = "yank_additions";
|
||||||
|
"Y" = "yank_deletions";
|
||||||
|
"u" = "restore";
|
||||||
|
}
|
||||||
|
''
|
||||||
|
"Keymaps in normal mode";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = let
|
||||||
|
configuration = with cfg; {
|
||||||
|
use_delta = useDelta;
|
||||||
|
use_custom_command = useCustomCommand;
|
||||||
|
side_by_side = sideBySide;
|
||||||
|
diff_context_lines =
|
||||||
|
if isInt diffContextLines
|
||||||
|
then helpers.mkRaw "diffContextLines"
|
||||||
|
else diffContextLines;
|
||||||
|
entry_format = entryFormat;
|
||||||
|
time_format = timeFormat;
|
||||||
|
mappings = with mappings; {
|
||||||
|
i =
|
||||||
|
helpers.ifNonNull' i
|
||||||
|
(
|
||||||
|
mapAttrs
|
||||||
|
(key: action:
|
||||||
|
helpers.mkRaw "require('telescope-undo.actions').${action}")
|
||||||
|
i
|
||||||
|
);
|
||||||
|
|
||||||
|
n =
|
||||||
|
helpers.ifNonNull' n
|
||||||
|
(
|
||||||
|
mapAttrs
|
||||||
|
(key: action:
|
||||||
|
helpers.mkRaw "require('telescope-undo.actions').${action}")
|
||||||
|
n
|
||||||
|
);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
mkIf
|
||||||
|
cfg.enable
|
||||||
|
{
|
||||||
|
extraPlugins = [cfg.package];
|
||||||
|
|
||||||
|
plugins.telescope.enabledExtensions = ["undo"];
|
||||||
|
plugins.telescope.extensionConfig."undo" = configuration;
|
||||||
|
};
|
||||||
|
}
|
34
tests/test-sources/plugins/telescope/undo.nix
Normal file
34
tests/test-sources/plugins/telescope/undo.nix
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
{
|
||||||
|
empty = {
|
||||||
|
plugins.telescope.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
example = {
|
||||||
|
plugins.telescope = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
extensions.undo = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
useDelta = true;
|
||||||
|
useCustomCommand = ["bash" "-c" "echo '$DIFF' | delta"];
|
||||||
|
sideBySide = true;
|
||||||
|
diffContextLines = 8;
|
||||||
|
entryFormat = "state #$ID";
|
||||||
|
timeFormat = "!%Y-%m-%dT%TZ";
|
||||||
|
mappings = {
|
||||||
|
i = {
|
||||||
|
"<cr>" = "yank_additions";
|
||||||
|
"<s-cr>" = "yank_deletions";
|
||||||
|
"<c-cr>" = "restore";
|
||||||
|
};
|
||||||
|
n = {
|
||||||
|
"y" = "yank_additions";
|
||||||
|
"Y" = "yank_deletions";
|
||||||
|
"u" = "restore";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue