diff --git a/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml
index b730d591868f..c101b5ef805a 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml
@@ -25,7 +25,9 @@
- Create the first release note entry in this section!
+ fzf,
+ a command line fuzzyfinder. Available as
+ programs.fzf.
diff --git a/nixos/doc/manual/release-notes/rl-2305.section.md b/nixos/doc/manual/release-notes/rl-2305.section.md
index d630b993c0f4..8f5ebf53b8fd 100644
--- a/nixos/doc/manual/release-notes/rl-2305.section.md
+++ b/nixos/doc/manual/release-notes/rl-2305.section.md
@@ -14,7 +14,7 @@ In addition to numerous new and upgraded packages, this release has the followin
-- Create the first release note entry in this section!
+- [fzf](https://github.com/junegunn/fzf), a command line fuzzyfinder. Available as [programs.fzf](#opt-programs.fzf.fuzzyCompletion).
## Backward Incompatibilities {#sec-release-23.05-incompatibilities}
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 18ce9e8a1516..59d6cf165f18 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -165,6 +165,7 @@
./programs/flexoptix-app.nix
./programs/freetds.nix
./programs/fuse.nix
+ ./programs/fzf.nix
./programs/gamemode.nix
./programs/geary.nix
./programs/git.nix
diff --git a/nixos/modules/programs/fzf.nix b/nixos/modules/programs/fzf.nix
new file mode 100644
index 000000000000..0452bf426227
--- /dev/null
+++ b/nixos/modules/programs/fzf.nix
@@ -0,0 +1,37 @@
+{pkgs, config, lib, ...}:
+with lib;
+let
+ cfg = config.programs.fzf;
+in {
+ options = {
+ programs.fzf = {
+ fuzzyCompletion = mkOption {
+ type = types.bool;
+ description = lib.mdDoc "Whether to use fzf for fuzzy completion";
+ default = false;
+ example = true;
+ };
+ keybindings = mkOption {
+ type = types.bool;
+ description = lib.mdDoc "Whether to set up fzf keybindings";
+ default = false;
+ example = true;
+ };
+ };
+ };
+ config = {
+ environment.systemPackages = optional (cfg.keybindings || cfg.fuzzyCompletion) pkgs.fzf;
+ programs.bash.interactiveShellInit = optionalString cfg.fuzzyCompletion ''
+ source ${pkgs.fzf}/share/fzf/completion.bash
+ '' + optionalString cfg.keybindings ''
+ source ${pkgs.fzf}/share/fzf/key-bindings.bash
+ '';
+
+ programs.zsh.interactiveShellInit = optionalString cfg.fuzzyCompletion ''
+ source ${pkgs.fzf}/share/fzf/completion.zsh
+ '' + optionalString cfg.keybindings ''
+ source ${pkgs.fzf}/share/fzf/key-bindings.zsh
+ '';
+ };
+ meta.maintainers = with maintainers; [ laalsaas ];
+}
diff --git a/pkgs/tools/misc/fzf/default.nix b/pkgs/tools/misc/fzf/default.nix
index aee012197730..0ea167a5053c 100644
--- a/pkgs/tools/misc/fzf/default.nix
+++ b/pkgs/tools/misc/fzf/default.nix
@@ -1,5 +1,12 @@
-{ lib, buildGoModule, fetchFromGitHub, writeText, runtimeShell, ncurses, perl }:
-
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, writeText
+, runtimeShell
+, installShellFiles
+, ncurses
+, perl
+}:
buildGoModule rec {
pname = "fzf";
version = "0.35.1";
@@ -15,7 +22,7 @@ buildGoModule rec {
outputs = [ "out" "man" ];
- fishHook = writeText "load-fzf-keybindings.fish" "fzf_key_bindings";
+ nativeBuildInputs = [ installShellFiles ];
buildInputs = [ ncurses ];
@@ -38,22 +45,19 @@ buildGoModule rec {
--replace " perl -n " " ${perl}/bin/perl -n "
'';
- preInstall = ''
- mkdir -p $out/share/fish/{vendor_functions.d,vendor_conf.d}
- cp shell/key-bindings.fish $out/share/fish/vendor_functions.d/fzf_key_bindings.fish
- cp ${fishHook} $out/share/fish/vendor_conf.d/load-fzf-key-bindings.fish
- '';
-
postInstall = ''
- cp bin/fzf-tmux $out/bin
+ install bin/fzf-tmux $out/bin
- mkdir -p $man/share/man
- cp -r man/man1 $man/share/man
+ installManPage man/man1/fzf.1 man/man1/fzf-tmux.1
- mkdir -p $out/share/vim-plugins/${pname}
- cp -r plugin $out/share/vim-plugins/${pname}
+ install -D plugin/* -t $out/share/vim-plugins/${pname}/plugin
+
+ # Install shell integrations
+ install -D shell/* -t $out/share/fzf/
+ install -D shell/key-bindings.fish $out/share/fish/vendor_functions.d/fzf_key_bindings.fish
+ mkdir -p $out/share/fish/vendor_conf.d
+ echo fzf_key_bindings > $out/share/fish/vendor_conf.d/load-fzf-key-bindings.fish
- cp -R shell $out/share/fzf
cat <