git: option to use difftastic as difftool

I want `git diff` to stay the same, but `git difftool` to use
difftastic,
as described in the difftastic docs:
https://difftastic.wilfred.me.uk/git.html#regular-usage
This commit is contained in:
Manu [tennox] 2024-04-24 20:27:42 +01:00
parent bfa7c06436
commit d34d74f5ea
1 changed files with 26 additions and 12 deletions

View File

@ -221,6 +221,12 @@ in {
See <https://github.com/Wilfred/difftastic>.
'';
};
enableAsDifftool = mkEnableOption "" // {
description = ''
Enable the {command}`difftastic` syntax highlighter as a git difftool.
See <https://github.com/Wilfred/difftastic>.
'';
};
background = mkOption {
type = types.enum [ "light" "dark" ];
@ -477,18 +483,26 @@ in {
};
})
(mkIf cfg.difftastic.enable {
home.packages = [ pkgs.difftastic ];
programs.git.iniContent = let
difftCommand = concatStringsSep " " [
"${pkgs.difftastic}/bin/difft"
"--color ${cfg.difftastic.color}"
"--background ${cfg.difftastic.background}"
"--display ${cfg.difftastic.display}"
];
in { diff.external = difftCommand; };
})
(let
difftCommand = concatStringsSep " " [
"${pkgs.difftastic}/bin/difft"
"--color ${cfg.difftastic.color}"
"--background ${cfg.difftastic.background}"
"--display ${cfg.difftastic.display}"
];
in (lib.mkMerge [
(mkIf cfg.difftastic.enable {
home.packages = [ pkgs.difftastic ];
programs.git.iniContent = { diff.external = difftCommand; };
})
(mkIf cfg.difftastic.enableAsDifftool {
home.packages = [ pkgs.difftastic ];
programs.git.iniContent = {
diff = { tool = lib.mkDefault "difftastic"; };
difftool = { difftastic = { cmd = "difft $LOCAL $REMOTE"; }; };
};
})
]))
(let
deltaPackage = cfg.delta.package;