1{
2 pkgs,
3 config,
4 lib,
5 ...
6}:
7
8let
9 cfg = config.programs.fzf;
10in
11{
12 options = {
13 programs.fzf = {
14 fuzzyCompletion = lib.mkEnableOption "fuzzy completion with fzf";
15 keybindings = lib.mkEnableOption "fzf keybindings";
16 };
17 };
18
19 config = lib.mkIf (cfg.keybindings || cfg.fuzzyCompletion) {
20 environment.systemPackages = [ pkgs.fzf ];
21
22 programs = {
23 # load after programs.bash.completion.enable
24 bash.promptPluginInit = lib.mkAfter (
25 lib.optionalString cfg.fuzzyCompletion ''
26 source ${pkgs.fzf}/share/fzf/completion.bash
27 ''
28 + lib.optionalString cfg.keybindings ''
29 source ${pkgs.fzf}/share/fzf/key-bindings.bash
30 ''
31 );
32
33 zsh = {
34 interactiveShellInit = lib.optionalString (!config.programs.zsh.ohMyZsh.enable) (
35 lib.optionalString cfg.fuzzyCompletion ''
36 source ${pkgs.fzf}/share/fzf/completion.zsh
37 ''
38 + lib.optionalString cfg.keybindings ''
39 source ${pkgs.fzf}/share/fzf/key-bindings.zsh
40 ''
41 );
42
43 ohMyZsh.plugins = lib.mkIf config.programs.zsh.ohMyZsh.enable [ "fzf" ];
44 };
45
46 fish.interactiveShellInit = lib.optionalString cfg.keybindings ''
47 source ${pkgs.fzf}/share/fzf/key-bindings.fish
48 '';
49 };
50 };
51
52 meta.maintainers = with lib.maintainers; [ laalsaas ];
53}