94 lines
2.4 KiB
Markdown
94 lines
2.4 KiB
Markdown
# shell-history
|
|
|
|
Shell history stored in SQLite, synced via git.
|
|
|
|
## Install
|
|
|
|
```
|
|
cd $HOME/dev/vlv
|
|
git clone git.meatbag.se:vlv/shell-history.git shell-history
|
|
mkdir histdb
|
|
|
|
cd shell-history
|
|
go build -o verbatim .
|
|
sudo install verbatim /usr/local/bin/
|
|
```
|
|
|
|
## Migrate from log files
|
|
|
|
```
|
|
verbatim import ~/dev/vlv/histdb/
|
|
```
|
|
|
|
## zsh
|
|
|
|
`~/.zshrc`:
|
|
|
|
```zsh
|
|
autoload -Uz compinit promptinit add-zsh-hook
|
|
|
|
histdb_dir="$HOME/dev/vlv/histdb"
|
|
|
|
_add_history() {
|
|
if test "$(id -u)" -ne 0; then
|
|
local cmd=$(fc -ln -1)
|
|
cmd=${cmd//$'\n'/\\n}
|
|
verbatim add \
|
|
--timestamp "$(date -u +%Y-%m-%dT%H:%M:%S+00:00)" \
|
|
--hostname "$(hostname)" \
|
|
--dir "$(pwd)" \
|
|
-- "$cmd"
|
|
fi
|
|
}
|
|
add-zsh-hook precmd _add_history
|
|
|
|
hsup() { verbatim sync "$histdb_dir" }
|
|
|
|
hs() {
|
|
local copy_cmd=
|
|
case "$(uname -s)" in
|
|
Darwin) copy_cmd="pbcopy" ;;
|
|
*)
|
|
case "$XDG_SESSION_TYPE" in
|
|
x11) copy_cmd="xsel --clipboard" ;;
|
|
wayland) copy_cmd="wl-copy --trim-newline" ;;
|
|
*) echo "Session type not detected."; return ;;
|
|
esac ;;
|
|
esac
|
|
|
|
local entry="$(
|
|
verbatim search --compact --reverse --limit 10000 "$@" | \
|
|
fzf --ansi --disabled --query "${*:-}" \
|
|
--bind "start:reload:verbatim search --compact --reverse --limit 10000 {q}" \
|
|
--bind "change:reload:sleep 0.1; verbatim search --compact --reverse --limit 10000 {q} || true" \
|
|
--bind "ctrl-a:reload:verbatim search --compact --reverse {q}" \
|
|
--header "ctrl-a: search all"
|
|
)"
|
|
|
|
local entry_cmd="$(<<<$entry sed 's/\x1b\[[0-9;]*m//g' | awk '{ print substr($0, index($0, $5)) }')"
|
|
entry_cmd="${entry_cmd//\\n/$'\n'}"
|
|
|
|
if [[ "$entry" ]]; then
|
|
eval $copy_cmd <<< "$entry_cmd" >/dev/null
|
|
echo "Copied to clipboard." >&2
|
|
fi
|
|
}
|
|
```
|
|
|
|
## Usage
|
|
|
|
```
|
|
verbatim [--db PATH] add --timestamp T --hostname H --dir D -- COMMAND...
|
|
verbatim [--db PATH] search [--host H] [--dir D] [--after T] [--before T] [--limit N] [QUERY...]
|
|
verbatim [--db PATH] sync DIR
|
|
verbatim [--db PATH] import DIR
|
|
verbatim [--db PATH] stats
|
|
```
|
|
|
|
Default `--db`: `~/.local/share/verbatim/history.db`
|
|
|
|
## Legacy
|
|
|
|
The old shell scripts (`search.sh`, `sync.sh`) are kept for backward compatibility
|
|
during migration. They continue to work with the log files in the git repo.
|