# 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.