mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 08:35:43 +02:00
plugins/gitlinker: init
This commit is contained in:
parent
be14bc1b91
commit
a13638c0e8
3 changed files with 151 additions and 0 deletions
|
@ -37,6 +37,7 @@
|
||||||
./git/git-worktree.nix
|
./git/git-worktree.nix
|
||||||
./git/gitblame.nix
|
./git/gitblame.nix
|
||||||
./git/gitgutter.nix
|
./git/gitgutter.nix
|
||||||
|
./git/gitlinker.nix
|
||||||
./git/gitmessenger.nix
|
./git/gitmessenger.nix
|
||||||
./git/gitsigns.nix
|
./git/gitsigns.nix
|
||||||
./git/neogit.nix
|
./git/neogit.nix
|
||||||
|
|
119
plugins/git/gitlinker.nix
Normal file
119
plugins/git/gitlinker.nix
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
helpers,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; {
|
||||||
|
options.plugins.gitlinker =
|
||||||
|
helpers.extraOptionsOptions
|
||||||
|
// {
|
||||||
|
enable = mkEnableOption "gitlinker.nvim";
|
||||||
|
|
||||||
|
package = helpers.mkPackageOption "gitlinker.nvim" pkgs.vimPlugins.gitlinker-nvim;
|
||||||
|
|
||||||
|
remote = helpers.mkNullOrOption types.str "Force the use of a specific remote.";
|
||||||
|
|
||||||
|
addCurrentLineOnNormalMode = helpers.defaultNullOpts.mkBool true ''
|
||||||
|
Adds current line nr in the url for normal mode.
|
||||||
|
'';
|
||||||
|
|
||||||
|
actionCallback =
|
||||||
|
helpers.defaultNullOpts.mkNullable (with types; either str helpers.rawType)
|
||||||
|
"copy_to_clipboard"
|
||||||
|
''
|
||||||
|
Callback for what to do with the url.
|
||||||
|
|
||||||
|
Can be
|
||||||
|
- the name of a built-in callback. Example: `actionCallback = "copy_to_clipboard";` is
|
||||||
|
setting
|
||||||
|
```lua
|
||||||
|
require('gitlinker.actions').copy_to_clipboard
|
||||||
|
```
|
||||||
|
in lua.
|
||||||
|
- Raw lua code `actionCallback.__raw = "function() ... end";`.
|
||||||
|
'';
|
||||||
|
|
||||||
|
printUrl = helpers.defaultNullOpts.mkBool true "Print the url after performing the action.";
|
||||||
|
|
||||||
|
mappings = helpers.defaultNullOpts.mkStr "<leader>gy" "Mapping to call url generation.";
|
||||||
|
|
||||||
|
callbacks =
|
||||||
|
helpers.defaultNullOpts.mkNullable
|
||||||
|
(
|
||||||
|
with types;
|
||||||
|
attrsOf
|
||||||
|
(
|
||||||
|
either
|
||||||
|
str
|
||||||
|
helpers.rawType
|
||||||
|
)
|
||||||
|
)
|
||||||
|
''
|
||||||
|
{
|
||||||
|
"github.com" = "get_github_type_url";
|
||||||
|
"gitlab.com" = "get_gitlab_type_url";
|
||||||
|
"try.gitea.io" = "get_gitea_type_url";
|
||||||
|
"codeberg.org" = "get_gitea_type_url";
|
||||||
|
"bitbucket.org" = "get_bitbucket_type_url";
|
||||||
|
"try.gogs.io" = "get_gogs_type_url";
|
||||||
|
"git.sr.ht" = "get_srht_type_url";
|
||||||
|
"git.launchpad.net" = "get_launchpad_type_url";
|
||||||
|
"repo.or.cz" = "get_repoorcz_type_url";
|
||||||
|
"git.kernel.org" = "get_cgit_type_url";
|
||||||
|
"git.savannah.gnu.org" = "get_cgit_type_url";
|
||||||
|
}
|
||||||
|
''
|
||||||
|
''
|
||||||
|
|
||||||
|
Each key can be
|
||||||
|
- the name of a built-in callback. Example: `"get_gitlab_type_url";` is setting
|
||||||
|
```lua
|
||||||
|
require('gitlinker.hosts').get_gitlab_type_url
|
||||||
|
```
|
||||||
|
in lua.
|
||||||
|
- Raw lua code `"github.com".__raw = "function(url_data) ... end";`.
|
||||||
|
|
||||||
|
Learn more by reading `:h gitinker-callbacks`.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
config = let
|
||||||
|
cfg = config.plugins.gitlinker;
|
||||||
|
in
|
||||||
|
mkIf cfg.enable {
|
||||||
|
extraPlugins = [cfg.package];
|
||||||
|
|
||||||
|
extraConfigLua = let
|
||||||
|
setupOptions = with cfg;
|
||||||
|
{
|
||||||
|
opts = {
|
||||||
|
inherit remote;
|
||||||
|
add_current_line_on_normal_mode = addCurrentLineOnNormalMode;
|
||||||
|
action_callback =
|
||||||
|
if isString actionCallback
|
||||||
|
then helpers.mkRaw "require('gitlinker.actions').${actionCallback}"
|
||||||
|
else actionCallback;
|
||||||
|
print_url = printUrl;
|
||||||
|
inherit mappings;
|
||||||
|
};
|
||||||
|
callbacks =
|
||||||
|
helpers.ifNonNull' callbacks
|
||||||
|
(
|
||||||
|
mapAttrs
|
||||||
|
(
|
||||||
|
source: callback:
|
||||||
|
if isString callback
|
||||||
|
then helpers.mkRaw "require('gitlinker.hosts').${callback}"
|
||||||
|
else callback
|
||||||
|
)
|
||||||
|
callbacks
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// cfg.extraOptions;
|
||||||
|
in ''
|
||||||
|
require('gitlinker').setup(${helpers.toLuaObject setupOptions})
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
31
tests/test-sources/plugins/git/gitlinker.nix
Normal file
31
tests/test-sources/plugins/git/gitlinker.nix
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
{
|
||||||
|
empty = {
|
||||||
|
plugins.gitlinker.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
defaults = {
|
||||||
|
plugins.gitlinker = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
remote = null;
|
||||||
|
addCurrentLineOnNormalMode = true;
|
||||||
|
actionCallback = "copy_to_clipboard";
|
||||||
|
printUrl = true;
|
||||||
|
mappings = "<leader>gy";
|
||||||
|
|
||||||
|
callbacks = {
|
||||||
|
"github.com" = "get_github_type_url";
|
||||||
|
"gitlab.com" = "get_gitlab_type_url";
|
||||||
|
"try.gitea.io" = "get_gitea_type_url";
|
||||||
|
"codeberg.org" = "get_gitea_type_url";
|
||||||
|
"bitbucket.org" = "get_bitbucket_type_url";
|
||||||
|
"try.gogs.io" = "get_gogs_type_url";
|
||||||
|
"git.sr.ht" = "get_srht_type_url";
|
||||||
|
"git.launchpad.net" = "get_launchpad_type_url";
|
||||||
|
"repo.or.cz" = "get_repoorcz_type_url";
|
||||||
|
"git.kernel.org" = "get_cgit_type_url";
|
||||||
|
"git.savannah.gnu.org" = "get_cgit_type_url";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue