diff --git a/modules/programs/git.nix b/modules/programs/git.nix
index 72c193b45..b81e40976 100644
--- a/modules/programs/git.nix
+++ b/modules/programs/git.nix
@@ -293,29 +293,6 @@ in
};
};
- riff = {
- enable = mkEnableOption "" // {
- description = ''
- Enable the riff diff highlighter.
- See .
- '';
- };
-
- package = mkPackageOption pkgs "riffdiff" { };
-
- commandLineOptions = mkOption {
- type = types.listOf types.str;
- default = [ ];
- example = literalExpression ''[ "--no-adds-only-special" ]'';
- apply = lib.concatStringsSep " ";
- description = ''
- Command line arguments to include in the RIFF environment variable.
-
- Run riff --help for a full list of options
- '';
- };
- };
-
};
};
@@ -346,7 +323,7 @@ in
(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
+ (config.programs.riff.enable && config.programs.riff.enableGitIntegration)
];
in
lib.count lib.id enabled <= 1;
@@ -624,29 +601,6 @@ in
};
})
- (
- let
- riffExe = baseNameOf (lib.getExe cfg.riff.package);
- in
- mkIf cfg.riff.enable {
- home.packages = [ cfg.riff.package ];
-
- # https://github.com/walles/riff/blob/b17e6f17ce807c8652bc59cd46758661d23ce358/README.md#usage
- programs.git.iniContent = {
- pager = {
- diff = riffExe;
- log = riffExe;
- show = riffExe;
- };
-
- interactive.diffFilter = "${riffExe} --color=on";
- };
- }
- )
-
- (mkIf (cfg.riff.enable && cfg.riff.commandLineOptions != "") {
- home.sessionVariables.RIFF = cfg.riff.commandLineOptions;
- })
]
);
}
diff --git a/modules/programs/riff.nix b/modules/programs/riff.nix
new file mode 100644
index 000000000..537fdf83c
--- /dev/null
+++ b/modules/programs/riff.nix
@@ -0,0 +1,107 @@
+{
+ config,
+ options,
+ lib,
+ pkgs,
+ ...
+}:
+let
+ cfg = config.programs.riff;
+
+ inherit (lib)
+ literalExpression
+ mkEnableOption
+ mkIf
+ mkOption
+ mkPackageOption
+ types
+ ;
+in
+{
+ meta.maintainers = with lib.maintainers; [ khaneliman ];
+
+ imports = [
+ (lib.mkRenamedOptionModule [ "programs" "git" "riff" "enable" ] [ "programs" "riff" "enable" ])
+ (lib.mkRenamedOptionModule [ "programs" "git" "riff" "package" ] [ "programs" "riff" "package" ])
+ (lib.mkRenamedOptionModule
+ [ "programs" "git" "riff" "commandLineOptions" ]
+ [ "programs" "riff" "commandLineOptions" ]
+ )
+ ];
+
+ options.programs.riff = {
+ enable = mkEnableOption "" // {
+ description = ''
+ Enable the riff diff highlighter.
+ See .
+ '';
+ };
+
+ package = mkPackageOption pkgs "riffdiff" { };
+
+ commandLineOptions = mkOption {
+ type = types.listOf types.str;
+ default = [ ];
+ example = literalExpression ''[ "--no-adds-only-special" ]'';
+ apply = lib.concatStringsSep " ";
+ description = ''
+ Command line arguments to include in the RIFF environment variable.
+
+ Run riff --help for a full list of options
+ '';
+ };
+
+ enableGitIntegration = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Whether to enable git integration for riff.
+
+ When enabled, riff will be configured as git's pager for diff, log, and show commands.
+ '';
+ };
+ };
+
+ config =
+ let
+ oldOption = lib.attrByPath [ "programs" "git" "riff" "enable" ] null options;
+ oldOptionEnabled =
+ oldOption != null && oldOption.isDefined && (builtins.length oldOption.files) > 0;
+ in
+ lib.mkMerge [
+ (mkIf cfg.enable {
+ home.packages = [ cfg.package ];
+
+ home.sessionVariables = mkIf (cfg.commandLineOptions != "") {
+ RIFF = cfg.commandLineOptions;
+ };
+
+ # Auto-enable git integration if programs.git.riff.enable was set to true
+ programs.riff.enableGitIntegration = lib.mkIf oldOptionEnabled (lib.mkOverride 1490 true);
+
+ warnings =
+ lib.optional
+ (cfg.enableGitIntegration && options.programs.riff.enableGitIntegration.highestPrio == 1490)
+ "`programs.riff.enableGitIntegration` automatic enablement is deprecated. Please explicitly set `programs.riff.enableGitIntegration = true`.";
+ })
+
+ (mkIf (cfg.enable && cfg.enableGitIntegration) {
+ programs.git = {
+ enable = lib.mkDefault true;
+ iniContent =
+ let
+ riffExe = baseNameOf (lib.getExe cfg.package);
+ in
+ {
+ pager = {
+ diff = riffExe;
+ log = riffExe;
+ show = riffExe;
+ };
+
+ interactive.diffFilter = "${riffExe} --color=on";
+ };
+ };
+ })
+ ];
+}