{
  writeShellApplication,
  manix,
  ripgrep,
  fzf,
  ...
}: let
  cacheTime = "10";
in
  writeShellApplication {
    name = "custom-manix";
    runtimeInputs = [
      manix
      ripgrep
      fzf
    ];
    text = ''
      CACHE_DIR="''${XDG_CACHE_HOME:-$HOME/.cache}"
      CACHE_FILE="$CACHE_DIR/custom-manix-options.txt"
      mkdir -p "$CACHE_DIR"

      REGENERATE=0

      # check if -r flag was passed
      if [ "''${1:-}" = "-r" ]; then
        REGENERATE=1
      fi


      # regenerate if file does not exist or is older than cacheTime days
      if [ ! -f "$CACHE_FILE" ] || [ "$(find "$CACHE_FILE" -mtime +${cacheTime} -print)" ]; then
        REGENERATE=1
      fi

      if [ $REGENERATE -eq 1 ]; then
        echo "(Re)building custom-manix cache..."
        mkdir -p "$(dirname "$CACHE_FILE")"
            manix "" | rg -N '^(?:\x1b\[[0-9;]*m)*# ' | sed 's/\x1b\[[0-9;]*m//g; s/^# //' | rg -Nv '^(<|.*https?://)' > "$CACHE_FILE"
      fi

      # read from cache and pipe into fzf
      cat "$CACHE_FILE" \
        | fzf --preview "manix {}" \
        | xargs manix
    '';
  }
