summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flake.nix20
-rw-r--r--modules/home/riff.nix50
2 files changed, 70 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix
index 8d078c3..de9dd91 100644
--- a/flake.nix
+++ b/flake.nix
@@ -24,6 +24,18 @@
forAllSystems = lib.genAttrs systems;
forTier1Systems = lib.genAttrs tier1Systems;
nixpkgsFor = nixpkgs.legacyPackages;
+
+ mkModule =
+ {
+ name,
+ type,
+ imports,
+ }:
+ {
+ __file = "${self.outPath}/flake.nix#${type}Modules.${name}";
+ inherit imports;
+ };
+
in
{
checks = forTier1Systems (
@@ -53,6 +65,14 @@
pkgs' // { default = pkgs'.treefetch or pkgs.emptyFile; }
);
+ homeModules = {
+ riff = mkModule {
+ name = "riff";
+ type = "home";
+ imports = [ ./modules/home/riff.nix ];
+ };
+ };
+
formatter = forTier1Systems (system: nixpkgsFor.${system}.nixfmt-rfc-style);
templates =
diff --git a/modules/home/riff.nix b/modules/home/riff.nix
new file mode 100644
index 0000000..dadc9cf
--- /dev/null
+++ b/modules/home/riff.nix
@@ -0,0 +1,50 @@
+# TODO: Upstream this
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+let
+ cfg = config.programs.git.riff;
+ cfg' = config.programs.git;
+
+ exe = baseNameOf (lib.getExe cfg.package);
+in
+{
+ options.programs.git.riff = {
+ enable = lib.mkEnableOption "diff filtering through `riff`";
+
+ package = lib.mkPackageOption pkgs "riffdiff" { };
+ };
+
+ config = lib.mkIf cfg.enable {
+ assertions = [
+ {
+ assertion =
+ let
+ enabled = [
+ cfg'.delta.enable
+ cfg'.diff-so-fancy.enable
+ cfg'.difftastic.enable
+ cfg.enable
+ ];
+ in
+ lib.count lib.id enabled <= 1;
+ message = "Only one of 'programs.git.delta.enable' or 'programs.git.difftastic.enable' or 'programs.git.diff-so-fancy.enable' or `programs.git.riff.enable` can be set to true at the same time.";
+ }
+ ];
+
+ home.packages = [ cfg.package ];
+
+ programs.git.iniContent = {
+ pager = {
+ diff = exe;
+ log = exe;
+ show = exe;
+ };
+
+ interactive.diffFilter = exe + " --color=on";
+ };
+ };
+}