From a86df770c137a95bfff1648555a498119ed3d076 Mon Sep 17 00:00:00 2001 From: Ben Mayer <90480641+Libadoxon@users.noreply.github.com> Date: Fri, 14 Feb 2025 12:57:21 +0100 Subject: [PATCH] plugins/git: add git-conflict-nvim (#637) * plugins/git: add git-conflict-nvim; modularize * plugins/git: build git-conflict-nvim ourselves --- docs/release-notes/rl-0.8.md | 4 ++ modules/plugins/git/default.nix | 2 + modules/plugins/git/git-conflict/config.nix | 40 +++++++++++++++++++ modules/plugins/git/git-conflict/default.nix | 6 +++ .../plugins/git/git-conflict/git-conflict.nix | 23 +++++++++++ npins/sources.json | 14 ++++++- 6 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 modules/plugins/git/git-conflict/config.nix create mode 100644 modules/plugins/git/git-conflict/default.nix create mode 100644 modules/plugins/git/git-conflict/git-conflict.nix diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index 5ff8c5f2..c9b4892a 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -162,3 +162,7 @@ [Mr-Helpful](https://github.com/Mr-Helpful) - Corrects pin names used for nvim themes + +[Libadoxon](https://github.com/Libadoxon) + +- Add [git-conflict](https://github.com/akinsho/git-conflict.nvim) plugin for resolving git conflicts diff --git a/modules/plugins/git/default.nix b/modules/plugins/git/default.nix index 525cbcf7..6ed92217 100644 --- a/modules/plugins/git/default.nix +++ b/modules/plugins/git/default.nix @@ -4,6 +4,7 @@ in { imports = [ ./gitsigns ./vim-fugitive + ./git-conflict ]; options.vim.git = { @@ -13,6 +14,7 @@ in { Enabling this option will enable the following plugins: * gitsigns * vim-fugitive + * git-conflict ''; }; } diff --git a/modules/plugins/git/git-conflict/config.nix b/modules/plugins/git/git-conflict/config.nix new file mode 100644 index 00000000..bc9905d6 --- /dev/null +++ b/modules/plugins/git/git-conflict/config.nix @@ -0,0 +1,40 @@ +{ + config, + lib, + ... +}: let + inherit (lib.modules) mkIf mkMerge; + inherit (lib.nvim.binds) addDescriptionsToMappings mkSetBinding; + inherit (lib.nvim.dag) entryAnywhere; + inherit (lib.nvim.lua) toLuaObject; + + cfg = config.vim.git.git-conflict; + + self = import ./git-conflict.nix {inherit lib config;}; + gcMappingDefinitions = self.options.vim.git.git-conflict.mappings; + + gcMappings = addDescriptionsToMappings cfg.mappings gcMappingDefinitions; +in { + config = mkIf cfg.enable (mkMerge [ + { + vim = { + startPlugins = ["git-conflict-nvim"]; + + maps = { + normal = mkMerge [ + (mkSetBinding gcMappings.ours "(git-conflict-ours)") + (mkSetBinding gcMappings.theirs "(git-conflict-theirs)") + (mkSetBinding gcMappings.both "(git-conflict-both)") + (mkSetBinding gcMappings.none "(git-conflict-none)") + (mkSetBinding gcMappings.prevConflict "(git-conflict-prev-conflict)") + (mkSetBinding gcMappings.nextConflict "(git-conflict-next-conflict)") + ]; + }; + + pluginRC.git-conflict = entryAnywhere '' + require('git-conflict').setup(${toLuaObject ({default_mappings = false;} // cfg.setupOpts)}) + ''; + }; + } + ]); +} diff --git a/modules/plugins/git/git-conflict/default.nix b/modules/plugins/git/git-conflict/default.nix new file mode 100644 index 00000000..89093a72 --- /dev/null +++ b/modules/plugins/git/git-conflict/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./config.nix + ./git-conflict.nix + ]; +} diff --git a/modules/plugins/git/git-conflict/git-conflict.nix b/modules/plugins/git/git-conflict/git-conflict.nix new file mode 100644 index 00000000..bffb926c --- /dev/null +++ b/modules/plugins/git/git-conflict/git-conflict.nix @@ -0,0 +1,23 @@ +{ + config, + lib, + ... +}: let + inherit (lib.options) mkEnableOption; + inherit (lib.nvim.binds) mkMappingOption; + inherit (lib.nvim.types) mkPluginSetupOption; +in { + options.vim.git.git-conflict = { + enable = mkEnableOption "git-conflict" // {default = config.vim.git.enable;}; + setupOpts = mkPluginSetupOption "git-conflict" {}; + + mappings = { + ours = mkMappingOption "Choose Ours [Git-Conflict]" "co"; + theirs = mkMappingOption "Choose Theirs [Git-Conflict]" "ct"; + both = mkMappingOption "Choose Both [Git-Conflict]" "cb"; + none = mkMappingOption "Choose None [Git-Conflict]" "c0"; + prevConflict = mkMappingOption "Go to the previous Conflict [Git-Conflict]" "]x"; + nextConflict = mkMappingOption "Go to the next Conflict [Git-Conflict]" "[x"; + }; + }; +} diff --git a/npins/sources.json b/npins/sources.json index 9bd3f725..82eb60d4 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -423,6 +423,18 @@ "url": "https://github.com/notomo/gesture.nvim/archive/dbd839bda337cb73911aeef06897eb29cb99f76f.tar.gz", "hash": "1cqiahc52xh113l8lgpz3k852vvqkv2srj9shdkyya76a2v2sf9d" }, + "git-conflict-nvim": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "akinsho", + "repo": "git-conflict.nvim" + }, + "branch": "main", + "revision": "a1badcd070d176172940eb55d9d59029dad1c5a6", + "url": "https://github.com/akinsho/git-conflict.nvim/archive/a1badcd070d176172940eb55d9d59029dad1c5a6.tar.gz", + "hash": "05rnwhm1fmg3yb7j2xc9nmw262jc687qxhwabn97qarrk2da0r0a" + }, "gitsigns-nvim": { "type": "Git", "repository": { @@ -2044,4 +2056,4 @@ } }, "version": 3 -} +} \ No newline at end of file