diff --git a/modules/programs/git.nix b/modules/programs/git.nix index 9cb11111a..72c193b45 100644 --- a/modules/programs/git.nix +++ b/modules/programs/git.nix @@ -316,16 +316,6 @@ in }; }; - patdiff = { - enable = mkEnableOption "" // { - description = '' - Whether to enable the {command}`patdiff` differ. - See - ''; - }; - - package = mkPackageOption pkgs "patdiff" { }; - }; }; }; @@ -355,8 +345,8 @@ in (config.programs.diff-highlight.enable && config.programs.diff-highlight.enableGitIntegration) (config.programs.diff-so-fancy.enable && config.programs.diff-so-fancy.enableGitIntegration) (config.programs.difftastic.enable && config.programs.difftastic.git.enable) + (config.programs.patdiff.enable && config.programs.patdiff.enableGitIntegration) cfg.riff.enable - cfg.patdiff.enable ]; in lib.count lib.id enabled <= 1; @@ -654,20 +644,6 @@ in } ) - ( - let - patdiffPackage = cfg.patdiff.package; - patdiffCommand = "${lib.getExe' patdiffPackage "patdiff-git-wrapper"}"; - in - mkIf cfg.patdiff.enable { - home.packages = [ patdiffPackage ]; - - programs.git.iniContent = { - diff.external = patdiffCommand; - }; - } - ) - (mkIf (cfg.riff.enable && cfg.riff.commandLineOptions != "") { home.sessionVariables.RIFF = cfg.riff.commandLineOptions; }) diff --git a/modules/programs/patdiff.nix b/modules/programs/patdiff.nix new file mode 100644 index 000000000..0a102f624 --- /dev/null +++ b/modules/programs/patdiff.nix @@ -0,0 +1,86 @@ +{ + config, + options, + lib, + pkgs, + ... +}: +let + cfg = config.programs.patdiff; + + inherit (lib) + mkEnableOption + mkIf + mkPackageOption + mkOption + types + ; +in +{ + meta.maintainers = with lib.maintainers; [ khaneliman ]; + + imports = [ + (lib.mkRenamedOptionModule + [ "programs" "git" "patdiff" "enable" ] + [ "programs" "patdiff" "enable" ] + ) + (lib.mkRenamedOptionModule + [ "programs" "git" "patdiff" "package" ] + [ "programs" "patdiff" "package" ] + ) + ]; + + options.programs.patdiff = { + enable = mkEnableOption "" // { + description = '' + Whether to enable the {command}`patdiff` differ. + See + ''; + }; + + package = mkPackageOption pkgs "patdiff" { }; + + enableGitIntegration = mkOption { + type = types.bool; + default = false; + description = '' + Whether to enable git integration for patdiff. + + When enabled, patdiff will be configured as git's external diff tool. + ''; + }; + }; + + config = + let + oldOption = lib.attrByPath [ "programs" "git" "patdiff" "enable" ] null options; + oldOptionEnabled = + oldOption != null && oldOption.isDefined && (builtins.length oldOption.files) > 0; + in + lib.mkMerge [ + (mkIf cfg.enable { + home.packages = [ cfg.package ]; + + # Auto-enable git integration if programs.git.patdiff.enable was set to true + programs.patdiff.enableGitIntegration = lib.mkIf oldOptionEnabled (lib.mkOverride 1490 true); + + warnings = + lib.optional + (cfg.enableGitIntegration && options.programs.patdiff.enableGitIntegration.highestPrio == 1490) + "`programs.patdiff.enableGitIntegration` automatic enablement is deprecated. Please explicitly set `programs.patdiff.enableGitIntegration = true`."; + }) + + (mkIf (cfg.enable && cfg.enableGitIntegration) { + programs.git = { + enable = lib.mkDefault true; + iniContent = + let + patdiffCommand = "${lib.getExe' cfg.package "patdiff-git-wrapper"}"; + in + { + diff.external = patdiffCommand; + }; + }; + }) + ]; +} diff --git a/tests/modules/programs/git/default.nix b/tests/modules/programs/git/default.nix index 2b9ed3da7..15380ffc2 100644 --- a/tests/modules/programs/git/default.nix +++ b/tests/modules/programs/git/default.nix @@ -10,5 +10,4 @@ git-with-hooks = ./git-with-hooks.nix; git-with-lfs = ./git-with-lfs.nix; git-with-maintenance = ./git-with-maintenance.nix; - git-patdiff = ./git-patdiff.nix; } diff --git a/tests/modules/programs/git/git-patdiff-expected.conf b/tests/modules/programs/git/git-patdiff-expected.conf deleted file mode 100644 index e9965dc2b..000000000 --- a/tests/modules/programs/git/git-patdiff-expected.conf +++ /dev/null @@ -1,19 +0,0 @@ -[commit] - gpgSign = true - -[diff] - external = "@patdiff@/bin/patdiff-git-wrapper" - -[gpg] - format = "openpgp" - -[gpg "openpgp"] - program = "path-to-gpg" - -[tag] - gpgSign = true - -[user] - email = "user@example.org" - name = "John Doe" - signingKey = "00112233445566778899AABBCCDDEEFF" diff --git a/tests/modules/programs/git/git-patdiff.nix b/tests/modules/programs/git/git-patdiff.nix deleted file mode 100644 index 82e5e02f8..000000000 --- a/tests/modules/programs/git/git-patdiff.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ - programs.git = { - enable = true; - signing = { - signer = "path-to-gpg"; - format = "openpgp"; - key = "00112233445566778899AABBCCDDEEFF"; - signByDefault = true; - }; - userEmail = "user@example.org"; - userName = "John Doe"; - - patdiff.enable = true; - }; - - nmt.script = '' - assertFileExists home-files/.config/git/config - assertFileContent home-files/.config/git/config ${./git-patdiff-expected.conf} - ''; -}