diff --git a/modules/lib/maintainers.nix b/modules/lib/maintainers.nix
index 5b1d35d4..2d2f551d 100644
--- a/modules/lib/maintainers.nix
+++ b/modules/lib/maintainers.nix
@@ -394,4 +394,10 @@
github = "natecox";
githubId = 2782695;
};
+ pedorich-n = {
+ name = "Mykyta Pedorich";
+ email = "pedorich.n@gmail.com";
+ github = "pedorich-n";
+ githubId = 15573098;
+ };
}
diff --git a/modules/modules.nix b/modules/modules.nix
index e219817d..b79ca19a 100644
--- a/modules/modules.nix
+++ b/modules/modules.nix
@@ -163,6 +163,7 @@ let
./programs/qutebrowser.nix
./programs/rbw.nix
./programs/readline.nix
+ ./programs/ripgrep.nix
./programs/rofi-pass.nix
./programs/rofi.nix
./programs/rtorrent.nix
diff --git a/modules/programs/ripgrep.nix b/modules/programs/ripgrep.nix
new file mode 100644
index 00000000..0adfccc8
--- /dev/null
+++ b/modules/programs/ripgrep.nix
@@ -0,0 +1,51 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let cfg = config.programs.ripgrep;
+in {
+ meta.maintainers = [ hm.maintainers.pedorich-n ];
+
+ options = {
+ programs.ripgrep = {
+ enable = mkEnableOption "Ripgrep";
+
+ package = mkPackageOption pkgs "ripgrep" { };
+
+ configDir = mkOption {
+ type = types.str;
+ default = "${config.xdg.configHome}/ripgrep";
+ defaultText =
+ literalExpression ''"''${config.xdg.configHome}/ripgrep"'';
+ description = ''
+ Directory where the ripgreprc file will be stored.
+ '';
+ };
+
+ arguments = mkOption {
+ type = with types; listOf str;
+ default = [ ];
+ example = [ "--max-columns-preview" "--colors=line:style:bold" ];
+ description = ''
+ List of arguments to pass to ripgrep. Each item is given to ripgrep as a single command line argument verbatim.
+
+ See
+ for an example configuration.
+ '';
+ };
+ };
+ };
+
+ config = mkIf cfg.enable {
+ home = {
+ packages = [ cfg.package ];
+
+ file."${cfg.configDir}/ripgreprc" =
+ mkIf (cfg.arguments != [ ]) { text = lib.concatLines cfg.arguments; };
+
+ sessionVariables = {
+ "RIPGREP_CONFIG_PATH" = "${cfg.configDir}/ripgreprc";
+ };
+ };
+ };
+}
diff --git a/tests/default.nix b/tests/default.nix
index 272ecb4d..c9a7d745 100644
--- a/tests/default.nix
+++ b/tests/default.nix
@@ -115,6 +115,7 @@ import nmt {
./modules/programs/pubs
./modules/programs/qutebrowser
./modules/programs/readline
+ ./modules/programs/ripgrep
./modules/programs/sagemath
./modules/programs/sbt
./modules/programs/scmpuff
diff --git a/tests/modules/programs/ripgrep/custom-arguments.nix b/tests/modules/programs/ripgrep/custom-arguments.nix
new file mode 100644
index 00000000..e18efe82
--- /dev/null
+++ b/tests/modules/programs/ripgrep/custom-arguments.nix
@@ -0,0 +1,24 @@
+{ pkgs, config, ... }: {
+ config = {
+ programs.ripgrep = {
+ enable = true;
+ package = config.lib.test.mkStubPackage { name = "ripgrep"; };
+ arguments = [
+ "--max-columns-preview"
+ "--colors=line:style:bold"
+ "--no-require-git"
+ ];
+ };
+
+ nmt.script = ''
+ assertFileExists home-files/.config/ripgrep/ripgreprc
+ assertFileContent home-files/.config/ripgrep/ripgreprc ${
+ pkgs.writeText "ripgrep.expected" ''
+ --max-columns-preview
+ --colors=line:style:bold
+ --no-require-git
+ ''
+ }
+ '';
+ };
+}
diff --git a/tests/modules/programs/ripgrep/default-arguments.nix b/tests/modules/programs/ripgrep/default-arguments.nix
new file mode 100644
index 00000000..43525316
--- /dev/null
+++ b/tests/modules/programs/ripgrep/default-arguments.nix
@@ -0,0 +1,12 @@
+{ config, ... }: {
+ config = {
+ programs.ripgrep = {
+ enable = true;
+ package = config.lib.test.mkStubPackage { name = "ripgrep"; };
+ };
+
+ nmt.script = ''
+ assertPathNotExists home-files/.config/ripgrep/ripgreprc
+ '';
+ };
+}
diff --git a/tests/modules/programs/ripgrep/default.nix b/tests/modules/programs/ripgrep/default.nix
new file mode 100644
index 00000000..6146a0bd
--- /dev/null
+++ b/tests/modules/programs/ripgrep/default.nix
@@ -0,0 +1,4 @@
+{
+ ripgrep-default-arguments = ./default-arguments.nix;
+ ripgrep-custom-arguments = ./custom-arguments.nix;
+}