From d8b4ba070f5dfcb6c051c74fb31eafb58127580b Mon Sep 17 00:00:00 2001 From: Bob van der Linden Date: Tue, 25 Mar 2025 21:37:24 +0100 Subject: [PATCH] mergiraf: init module (#6633) This adds git integration for mergiraf. It sets up git to use mergiraf to automatically resolve merge conflicts. --- modules/modules.nix | 1 + modules/programs/mergiraf.nix | 31 +++++++++++++++++++ tests/default.nix | 2 ++ .../programs/mergiraf/basic-configuration.nix | 13 ++++++++ tests/modules/programs/mergiraf/default.nix | 1 + .../mergiraf/mergiraf-git-attributes.conf | 1 + .../programs/mergiraf/mergiraf-git.conf | 9 ++++++ 7 files changed, 58 insertions(+) create mode 100644 modules/programs/mergiraf.nix create mode 100644 tests/modules/programs/mergiraf/basic-configuration.nix create mode 100644 tests/modules/programs/mergiraf/default.nix create mode 100644 tests/modules/programs/mergiraf/mergiraf-git-attributes.conf create mode 100644 tests/modules/programs/mergiraf/mergiraf-git.conf diff --git a/modules/modules.nix b/modules/modules.nix index 68bdf73e3..ded27ace1 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -170,6 +170,7 @@ let ./programs/mbsync.nix ./programs/mcfly.nix ./programs/mercurial.nix + ./programs/mergiraf.nix ./programs/micro.nix ./programs/mise.nix ./programs/mods.nix diff --git a/modules/programs/mergiraf.nix b/modules/programs/mergiraf.nix new file mode 100644 index 000000000..0597b7d93 --- /dev/null +++ b/modules/programs/mergiraf.nix @@ -0,0 +1,31 @@ +{ pkgs, config, lib, ... }: +let + inherit (lib) + mkEnableOption mkPackageOption types literalExpression mkIf maintainers; + cfg = config.programs.mergiraf; + mergiraf = "${cfg.package}/bin/mergiraf"; +in { + meta.maintainers = [ maintainers.bobvanderlinden ]; + + options = { + programs.mergiraf = { + enable = mkEnableOption "mergiraf"; + package = mkPackageOption pkgs "mergiraf" { }; + }; + }; + + config = mkIf cfg.enable { + home.packages = [ cfg.package ]; + + programs.git = { + attributes = [ "* merge=mergiraf" ]; + extraConfig = { + merge.mergiraf = { + name = "mergiraf"; + driver = + "${mergiraf} merge --git %O %A %B -s %S -x %X -y %Y -p %P -l %L"; + }; + }; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index 427f4e87a..5d099211f 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -131,6 +131,7 @@ let "lsd" "lieer" "mbsync" + "mergiraf" "micro" "mise" "mpv" @@ -341,6 +342,7 @@ in import nmtSrc { ./modules/programs/lieer ./modules/programs/man ./modules/programs/mbsync + ./modules/programs/mergiraf ./modules/programs/micro ./modules/programs/mise ./modules/programs/mods diff --git a/tests/modules/programs/mergiraf/basic-configuration.nix b/tests/modules/programs/mergiraf/basic-configuration.nix new file mode 100644 index 000000000..3d8688ad7 --- /dev/null +++ b/tests/modules/programs/mergiraf/basic-configuration.nix @@ -0,0 +1,13 @@ +{ config, lib, ... }: + +{ + programs.git.enable = true; + programs.mergiraf.enable = true; + + nmt.script = '' + assertFileContent "home-files/.config/git/config" ${./mergiraf-git.conf} + assertFileContent "home-files/.config/git/attributes" ${ + ./mergiraf-git-attributes.conf + } + ''; +} diff --git a/tests/modules/programs/mergiraf/default.nix b/tests/modules/programs/mergiraf/default.nix new file mode 100644 index 000000000..67d8916b7 --- /dev/null +++ b/tests/modules/programs/mergiraf/default.nix @@ -0,0 +1 @@ +{ mergiraf-basic-configuration = ./basic-configuration.nix; } diff --git a/tests/modules/programs/mergiraf/mergiraf-git-attributes.conf b/tests/modules/programs/mergiraf/mergiraf-git-attributes.conf new file mode 100644 index 000000000..789ed5db5 --- /dev/null +++ b/tests/modules/programs/mergiraf/mergiraf-git-attributes.conf @@ -0,0 +1 @@ +* merge=mergiraf diff --git a/tests/modules/programs/mergiraf/mergiraf-git.conf b/tests/modules/programs/mergiraf/mergiraf-git.conf new file mode 100644 index 000000000..46da0369f --- /dev/null +++ b/tests/modules/programs/mergiraf/mergiraf-git.conf @@ -0,0 +1,9 @@ +[gpg] + format = "openpgp" + +[gpg "openpgp"] + program = "@gnupg@/bin/gpg" + +[merge "mergiraf"] + driver = "@mergiraf@/bin/mergiraf merge --git %O %A %B -s %S -x %X -y %Y -p %P -l %L" + name = "mergiraf"