mirror of
https://github.com/harivansh-afk/nix.git
synced 2026-04-15 08:03:44 +00:00
70 lines
1.5 KiB
Bash
Executable file
70 lines
1.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
initial_query="${INITIAL_QUERY:-}"
|
|
|
|
search_script="$(mktemp)"
|
|
cleanup() {
|
|
rm -f "$search_script"
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
cat > "$search_script" <<'EOF'
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
query="${1:-}"
|
|
|
|
if [[ -z "$query" ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
paths=(
|
|
"$HOME/.claude/history.jsonl"
|
|
"$HOME/.claude/transcripts"
|
|
"$HOME/.claude/projects"
|
|
"$HOME/.codex/history.jsonl"
|
|
"$HOME/.codex/session_index.jsonl"
|
|
"$HOME/.codex/sessions"
|
|
"$HOME/.codex/memories"
|
|
)
|
|
|
|
args=()
|
|
for path in "${paths[@]}"; do
|
|
[[ -e "$path" ]] && args+=("$path")
|
|
done
|
|
|
|
[[ "${#args[@]}" -gt 0 ]] || exit 0
|
|
|
|
rg --json --line-number --smart-case --glob '*.jsonl' --glob '*.md' -- "$query" "${args[@]}" 2>/dev/null \
|
|
| jq -r '
|
|
select(.type == "match")
|
|
| [
|
|
.data.path.text,
|
|
(.data.line_number | tostring),
|
|
(.data.lines.text | gsub("[\r\n\t]+"; " "))
|
|
]
|
|
| @tsv
|
|
'
|
|
EOF
|
|
|
|
chmod +x "$search_script"
|
|
|
|
fzf --phony --ansi --disabled \
|
|
--query "$initial_query" \
|
|
--prompt 'history> ' \
|
|
--delimiter $'\t' \
|
|
--with-nth=1,2,3 \
|
|
--preview '
|
|
file=$(printf "%s" {} | cut -f1)
|
|
line=$(printf "%s" {} | cut -f2)
|
|
[[ -n "$file" ]] || exit 0
|
|
[[ "$line" =~ ^[0-9]+$ ]] || line=1
|
|
start=$(( line > 20 ? line - 20 : 1 ))
|
|
end=$(( line + 20 ))
|
|
sed -n "${start},${end}p" "$file"
|
|
' \
|
|
--preview-window=right:70%:wrap \
|
|
--header 'Type to search netty default Claude and Codex state' \
|
|
--bind "start:reload:$search_script {q} || true" \
|
|
--bind "change:reload:sleep 0.1; $search_script {q} || true"
|