{
  lib,
  config,
  ...
}: let
  cfg = config.marleyos.programs.fzf;

  has-ripgrep = config.programs.ripgrep.enable;
  has-fd = config.programs.fd.enable;
  has-eza = config.programs.eza.enable;
  has-bat = config.programs.bat.enable;
  has-tmux = config.programs.tmux.enable;
  has-delta = config.programs.git.delta.enable;
  has-difft = config.programs.git.difftastic.enable;
in {
  options.marleyos.programs.fzf.enable = lib.mkEnableOption "fzf";

  config = lib.mkIf cfg.enable {
    programs.fzf = {
      enable = true;

      defaultOptions = [
        "--margin=10%,5%"
        "--border=sharp"
        "--pointer= "
        "--marker= "
        "--prompt= "
        "--preview-label-pos='bottom'"
        "--preview-window='border-sharp'"
      ];

      defaultCommand = lib.mkIf has-ripgrep "rg --files --hidden --glob \"!.git\"";

      changeDirWidgetCommand = lib.mkIf has-fd "fd --type d";
      changeDirWidgetOptions = lib.mkIf has-eza [
        "--preview 'eza --all --color=always --sort=name --group-directories-first --level=3 {}'"
      ];

      fileWidgetCommand = lib.mkIf has-fd "fd --type f";
      fileWidgetOptions = lib.mkIf has-bat [
        "--preview 'bat {}'"
      ];

      tmux.enableShellIntegration = lib.mkIf has-tmux true;
    };

    home.sessionVariables =
      if has-delta
      then {
        fzf_diff_highlighter = "delta --paging=never --features=arctic-fox";
      }
      else if has-difft
      then {
        fzf_diff_highlighter = "difft --color=always";
      }
      else {};
  };
}
