From 7519f615df36804ef40bcb03d4114f5ec9216d40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristoffer=20Plagborg=20Bak=20S=C3=B8rensen?= <57013304+kpbaks@users.noreply.github.com> Date: Mon, 18 May 2026 17:35:29 +0200 Subject: [PATCH] ec: init module Adds Home Manager module for ec, a 3-way terminal native Git merge conflict resolver. The module supports: - Git integration by configuring ec as a mergetool. --- modules/programs/ec.nix | 42 +++++++++++++++++++ tests/darwinScrublist.nix | 1 + .../programs/ec/basic-configuration.nix | 9 ++++ tests/modules/programs/ec/default.nix | 3 ++ tests/modules/programs/ec/ec-git.conf | 12 ++++++ 5 files changed, 67 insertions(+) create mode 100644 modules/programs/ec.nix create mode 100644 tests/modules/programs/ec/basic-configuration.nix create mode 100644 tests/modules/programs/ec/default.nix create mode 100644 tests/modules/programs/ec/ec-git.conf diff --git a/modules/programs/ec.nix b/modules/programs/ec.nix new file mode 100644 index 000000000..6a977c28e --- /dev/null +++ b/modules/programs/ec.nix @@ -0,0 +1,42 @@ +{ + pkgs, + config, + lib, + ... +}: +let + cfg = config.programs.ec; + ec = lib.getExe cfg.package; +in +{ + meta.maintainers = [ lib.maintainers.kpbaks ]; + + options = { + programs.ec = { + enable = lib.mkEnableOption "ec, 3-way terminal native Git merge conflict resolver"; + package = lib.mkPackageOption pkgs "ec" { }; + + enableGitIntegration = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + Whether to enable git integration for ec. + + When enabled, ec will be configured as git's merge tool. + ''; + }; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = [ cfg.package ]; + + programs.git.settings = lib.mkIf cfg.enableGitIntegration { + merge.tool = "ec"; + mergetool.ec = { + cmd = ''${ec} "$BASE" "$LOCAL" "$REMOTE" "$MERGED"''; + trustExitCode = true; + }; + }; + }; +} diff --git a/tests/darwinScrublist.nix b/tests/darwinScrublist.nix index 183b5b67f..141712dd6 100644 --- a/tests/darwinScrublist.nix +++ b/tests/darwinScrublist.nix @@ -49,6 +49,7 @@ let "discord" "discoss" "earthly" + "ec" "element-desktop" "emacs" "espanso" diff --git a/tests/modules/programs/ec/basic-configuration.nix b/tests/modules/programs/ec/basic-configuration.nix new file mode 100644 index 000000000..e68d36fe5 --- /dev/null +++ b/tests/modules/programs/ec/basic-configuration.nix @@ -0,0 +1,9 @@ +{ + programs.git.enable = true; + programs.ec.enable = true; + programs.ec.enableGitIntegration = true; + + nmt.script = '' + assertFileContent "home-files/.config/git/config" ${./ec-git.conf} + ''; +} diff --git a/tests/modules/programs/ec/default.nix b/tests/modules/programs/ec/default.nix new file mode 100644 index 000000000..e0631d492 --- /dev/null +++ b/tests/modules/programs/ec/default.nix @@ -0,0 +1,3 @@ +{ + ec-basic-configuration = ./basic-configuration.nix; +} diff --git a/tests/modules/programs/ec/ec-git.conf b/tests/modules/programs/ec/ec-git.conf new file mode 100644 index 000000000..287c35269 --- /dev/null +++ b/tests/modules/programs/ec/ec-git.conf @@ -0,0 +1,12 @@ +[gpg] + format = "openpgp" + +[gpg "openpgp"] + program = "@gnupg@/bin/gpg" + +[merge] + tool = "ec" + +[mergetool "ec"] + cmd = "@ec@/bin/ec \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"" + trustExitCode = true