An Oh My Zsh plugin for GPG encrypted, Internet synchronized Zsh history using Git.
sudo apt install gpg git
git clone git@github.com:wulfgarpro/history-sync.git
cp -r history-sync ~/.oh-my-zsh/plugins
Then open .zshrc file and append history-sync to the plugin line:
plugins=(... history-sync)
And finally, reload zsh:
zsh
Before history-sync can be useful, you need two things:
- A hosted git repository, e.g. GitHub, Bitbucket
- Ideally with ssh key access
- A configured gpg key pair for encrypting and decrypting your history file and the enrolled public keys of all the nodes in your web of trust
- See the GnuPG documentation for more information since it's outside the scope of this README
Once you have these things in place, it's just a matter of updating the needed environment variables to suit your configuration:
- ZSH_HISTORY_FILE: your zsh_history file location
- ZSH_HISTORY_PROJ: your git project for housing your zsh_history file
- ZSH_HISTORY_FILE_ENC: your encrypted zsh_history file location
- GIT_COMMIT_MSG: your default message when pushing to $ZSH_HISTORY_PROJ
Which have the following defaults:
ZSH_HISTORY_FILE_NAME=".zsh_history"
ZSH_HISTORY_FILE="${HOME}/${ZSH_HISTORY_FILE_NAME}"
ZSH_HISTORY_PROJ="${HOME}/.zsh_history_proj"
ZSH_HISTORY_FILE_ENC_NAME="zsh_history"
ZSH_HISTORY_FILE_ENC="${ZSH_HISTORY_PROJ}/${ZSH_HISTORY_FILE_ENC_NAME}"
GIT_COMMIT_MSG="latest $(date)"
and running the commands:
# pull history
zhpl
# push history
zhps -r "John Brown" -r 876T3F78 -r ...
# pull and push history
zhsync
Check out the screen cast.
MIT @ James Fraser