I have been using this, which is similar, for a few years:
I often have multiple concurrent sessions of terminal open, which leads to messed up history interactions. One solution I've encountered (but have not tested yet) is zsh-histdb [0]. It stores sessions' history to a SQLite db instead of a single appended file, with extra metadata about when commands were run, what session, etc. If you've already got your .zshrc file open to mess with the history settings it might be worth checking out that tool while you're at it.
I use zsh-histdb[1], which records my entire shell history for all time in a database, which also stores:
• The start and stop times of the command
• The working directory where the command was run
• The hostname of the machine
• A unique per-host session ID, so history from several sessions is not confused
• The exit status of the command
This the working directory of the command has been especially useful for me to get the context of what I did, not only the command itself.Alternatives (without judgement):
https://github.com/cantino/mcfly
https://github.com/jcsalterego/historian
https://github.com/larkery/zsh-histdb + https://github.com/m42e/zsh-histdb-fzf
https://github.com/ellie/atuin
All of these except the OP (I think) use SQLite databases.
Personally I use zsh-histdb, which is great but only for ZSH. I'm working on adding a rich SQLite history to nushell so I can finally try nu: https://github.com/nushell/reedline/pull/401 .
Do you know how zsh-histdb compares to similar projects?(quick google…)
https://github.com/cantino/mcfly
https://github.com/ellie/atuin
https://loshadki.app/shellhistory/
Here is a zsh function (added to ~/.zshrc) I made for use with https://github.com/larkery/zsh-histdb to get the same effect, but only showing commands whose exit_status is 0:
jog() {
sqlite3 $HOME/.histdb/zsh-history.db "
SELECT
replace(commands.argv, '
', '
')
FROM commands
JOIN history ON history.command_id = commands.id
JOIN places ON history.place_id = places.id
WHERE history.exit_status = 0
AND dir = '${PWD}'
AND places.host = '${HOST}'
AND commands.argv != 'jog'
AND commands.argv NOT LIKE 'z %'
AND commands.argv NOT LIKE 'cd %'
AND commands.argv != '..'
ORDER BY start_time DESC
LIMIT 10
"
}