1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-11-08 19:46:05 +01:00
home-manager/modules/programs/ripgrep-all.nix
Austin Horstman cba2f9ce95 treewide: reformat nixfmt-rfc-style
Reformat repository using new nixfmt-rfc-style.
2025-04-08 08:50:05 -07:00

102 lines
3.5 KiB
Nix

{
config,
lib,
pkgs,
...
}:
let
cfg = config.programs.ripgrep-all;
configPath =
if pkgs.stdenv.hostPlatform.isDarwin then
"Library/Application Support/ripgrep-all/config.jsonc"
else
"${config.xdg.configHome}/ripgrep-all/config.jsonc";
customAdapter = lib.types.submodule {
# Descriptions are largely copied from https://github.com/phiresky/ripgrep-all/blob/v1.0.0-alpha.5/src/adapters/custom.rs
options = {
name = lib.mkOption {
type = lib.types.str;
description = "The unique identifier and name of this adapter; must only include a-z, 0-9, _";
};
version = lib.mkOption {
type = lib.types.int;
default = 1;
description = "The version identifier used to key cache entries; change if the configuration or program changes";
};
description = lib.mkOption {
type = lib.types.str;
description = "A description of this adapter; shown in rga's help";
};
extensions = lib.mkOption {
type = with lib.types; listOf str;
description = "The file extensions this adapter supports";
example = [ "pdf" ];
};
mimetypes = lib.mkOption {
type = with lib.types; nullOr (listOf str);
default = null;
description = "If not null and --rga-accurate is enabled, mime type matching is used instead of file name matching";
example = [ "application/pdf" ];
};
binary = lib.mkOption {
type = lib.types.path;
description = "The path of the binary to run";
};
args = lib.mkOption {
type = with lib.types; listOf str;
default = [ ];
description = "The output path hint; the placeholders are the same as for rga's `args`";
};
disabled_by_default = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
description = "If true, the adapter will be disabled by default";
};
match_only_by_mime = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
description = "if --rga-accurate, only match by mime types, ignore extensions completely";
};
output_path_hint = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
description = "Setting this is useful if the output format is not plain text (.txt) but instead some other format that should be passed to another adapter";
example = "$${input_virtual_path}.txt.asciipagebreaks";
};
};
};
in
{
meta.maintainers = with lib.maintainers; [ lafrenierejm ];
options = {
programs.ripgrep-all = {
enable = lib.mkEnableOption "ripgrep-all (rga)";
package = lib.mkPackageOption pkgs "ripgrep-all" { nullable = true; };
custom_adapters = lib.mkOption {
type = lib.types.listOf customAdapter;
default = [ ];
description = ''
Custom adapters that invoke external preprocessing scripts.
See <link xlink:href="https://github.com/phiresky/ripgrep-all/wiki#custom-adapters"/>.
'';
};
};
};
config = lib.mkIf cfg.enable {
home = {
packages = lib.mkIf (cfg.package != null) [ cfg.package ];
file."${configPath}" = lib.mkIf (cfg.custom_adapters != [ ]) {
source = (pkgs.formats.json { }).generate "ripgrep-all" {
"$schema" = "./config.schema.json";
custom_adapters = map (lib.filterAttrs (n: v: v != null)) cfg.custom_adapters;
};
};
};
};
}