{ config, pkgs, ... }:
{

  # FZF is a fuzzy-finder for the terminal

  home-manager.users.${config.user} = {

    programs.fzf.enable = true;

    programs.fish = {
      functions = {
        projects = {
          description = "Jump to a project";
          body = ''
            set projdir ( \
                fd \
                    --search-path $HOME/dev \
                    --type directory \
                    --exact-depth 2 \
                | ${pkgs.proximity-sort}/bin/proximity-sort $PWD \
                | sed 's/\\/$//' \
                | fzf --tiebreak=index \
            )
            and cd $projdir
            and commandline -f execute
          '';
        };
      };
      shellAbbrs = {
        lsf = "ls -lh | fzf";
      };
    };

    # Global fzf configuration
    home.sessionVariables =
      let
        fzfCommand = "fd --type file";
      in
      {
        FZF_DEFAULT_COMMAND = fzfCommand;
        FZF_CTRL_T_COMMAND = fzfCommand;
        FZF_DEFAULT_OPTS = "-m --height 50% --border";
      };

    home.packages = [
      (pkgs.writeShellApplication {
        name = "jqr";
        runtimeInputs = [
          pkgs.jq
          pkgs.fzf
        ];
        text = builtins.readFile ./bash/scripts/jqr.sh;
      })
    ];
  };
}