mirror of
https://github.com/nix-community/home-manager.git
synced 2026-10-02 19:49:18 +00:00
Splitting git diff tools into the separate programs.difftastic module
made it impossible to register difftastic as a git difftool without also
forcing it as diff.external, since the boolean git.diffToolMode only
toggled between "external" and "external + difftool".
Replace git.diffToolMode with a git.mode enum ("external", "difftool",
"both") so difftastic can be wired as the difftool only, leaving
`git diff` untouched. The deprecated boolean is migrated automatically
via mkChangedOptionModule (true -> "both", false -> "external"),
preserving existing behavior.
Fixes #8592
26 lines
810 B
Nix
26 lines
810 B
Nix
{
|
|
programs.difftastic = {
|
|
enable = true;
|
|
git = {
|
|
enable = true;
|
|
mode = "difftool";
|
|
};
|
|
options = {
|
|
color = "always";
|
|
display = "side-by-side";
|
|
};
|
|
};
|
|
|
|
programs.git.enable = true;
|
|
|
|
nmt.script = ''
|
|
assertFileExists home-files/.config/git/config
|
|
# Should have difftool config only, leaving `git diff` untouched
|
|
assertFileContains home-files/.config/git/config 'tool = "difftastic"'
|
|
assertFileContains home-files/.config/git/config '[difftool "difftastic"]'
|
|
assertFileContains home-files/.config/git/config "cmd = \"@difftastic@/bin/difft '--color=always' '--display=side-by-side' \$LOCAL \$REMOTE\""
|
|
# Should NOT have diff.external when mode is "difftool"
|
|
assertFileNotRegex home-files/.config/git/config 'external = .*/difft'
|
|
'';
|
|
}
|