mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-04-24 04:29:25 +02:00
added first pass to fork
This commit is contained in:
parent
d310fac7f6
commit
7720705199
2 changed files with 128 additions and 0 deletions
23
plugins/history-sync/README.md
Normal file
23
plugins/history-sync/README.md
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
## An oh-my-zsh plugin for gpg encrypted, internet synchronized zsh history using git.
|
||||||
|
<br />
|
||||||
|
That is, if you'd like an easy way to securely synchronise your zsh_history across many computers connected to the internet, this plugin will help you. You could even automate it using something like cron for a daily or even hourly sync.
|
||||||
|
|
||||||
|
### How do I use it?
|
||||||
|
|
||||||
|
1. Create a git repo for housing your encrypted zsh_history file (local or remote)
|
||||||
|
- Mine is $HOME/.zsh_history_proj
|
||||||
|
2. Activate history-sync plugin in your .zshrc
|
||||||
|
- git clone git@github.com:wulfgarpro/history-sync.git $HOME/.oh-my-zsh/plugins/.
|
||||||
|
3. Export environment variables (or use defaults found in history-sync.plugin.zsh)
|
||||||
|
<br />These are:
|
||||||
|
- ZSH_HISTORY_FILE
|
||||||
|
- ZSH_HISTORY_PROJ
|
||||||
|
- ZSH_HISTORY_FILE_ENC
|
||||||
|
- GIT_COMMIT_MSG
|
||||||
|
4. Ensure your gpg/pgp setup is complete and you have a public/private key pair
|
||||||
|
<br /> i.e.:
|
||||||
|
- gpg --list-keys
|
||||||
|
5. Run zhpl alias to pull
|
||||||
|
6. Run zhps alias to push
|
||||||
|
7. Run zhsync to pull/push
|
||||||
|
|
||||||
105
plugins/history-sync/history-sync.plugin.zsh
Normal file
105
plugins/history-sync/history-sync.plugin.zsh
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
###
|
||||||
|
# James Fraser
|
||||||
|
# <wulfgar.pro@gmail.com>
|
||||||
|
###
|
||||||
|
|
||||||
|
autoload -U colors
|
||||||
|
colors
|
||||||
|
|
||||||
|
ZSH_HISTORY_FILE=$HOME/.zsh_history
|
||||||
|
ZSH_HISTORY_PROJ=$HOME/.zsh_history_proj
|
||||||
|
ZSH_HISTORY_FILE_ENC=$ZSH_HISTORY_PROJ/zsh_history
|
||||||
|
GIT_COMMIT_MSG="latest $(date)"
|
||||||
|
|
||||||
|
function print_git_error_msg() {
|
||||||
|
echo "$bold_color$fg[red]Fix your git repo...${reset_color}";
|
||||||
|
}
|
||||||
|
|
||||||
|
function print_gpg_encrypt_error_msg() {
|
||||||
|
echo "$bold_color$fg[red]GPG failed to encrypt history file... exiting.${reset_color}";
|
||||||
|
}
|
||||||
|
|
||||||
|
function print_gpg_decrypt_error_msg() {
|
||||||
|
echo "$bold_color$fg[red]GPG failed to decrypt history file... exiting.${reset_color}";
|
||||||
|
}
|
||||||
|
|
||||||
|
# Pull current master and merge with .zsh_history
|
||||||
|
function history_sync_pull() {
|
||||||
|
cp -a $HOME/{.zsh_history,.zsh_history.backup}
|
||||||
|
DIR=$CWD
|
||||||
|
cd $ZSH_HISTORY_PROJ && git pull
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
print_git_error_msg
|
||||||
|
cd $DIR
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Decrypt
|
||||||
|
gpg --output zsh_history_decrypted --decrypt zsh_history
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
print_gpg_decrypt_error_msg
|
||||||
|
cd $DIR
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Merge using sort unique
|
||||||
|
cat $HOME/.zsh_history zsh_history_decrypted | sort -u > $HOME/.zsh_history
|
||||||
|
rm zsh_history_decrypted
|
||||||
|
cd $DIR
|
||||||
|
}
|
||||||
|
|
||||||
|
# Push current history to master
|
||||||
|
function history_sync_push() {
|
||||||
|
echo -n "Please enter GPG recipient name: "
|
||||||
|
read name
|
||||||
|
|
||||||
|
# Encrypt
|
||||||
|
if [[ -n $name ]]; then
|
||||||
|
gpg -v -r $NAME --encrypt --sign --armor --output $ZSH_HISTORY_FILE_ENC $ZSH_HISTORY_FILE
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
print_gpg_encrypt_error_msg
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "$bold_color$fg[yellow]Do you want to commit current local history file? ${reset_color}"
|
||||||
|
read commit
|
||||||
|
if [[ -n $commit ]]; then
|
||||||
|
case $commit in
|
||||||
|
[Yy]* )
|
||||||
|
DIR=$CWD
|
||||||
|
cd $ZSH_HISTORY_PROJ && git add * && git commit -am $GIT_COMMIT_MSG
|
||||||
|
echo -n "$bold_color$fg[yellow]Do you want to push to remote? ${reset_color}"
|
||||||
|
read push
|
||||||
|
if [[ -n $push ]]; then
|
||||||
|
case $push in
|
||||||
|
[Yy]* )
|
||||||
|
git push
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
print_git_error_msg
|
||||||
|
cd $DIR
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
cd $DIR
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
print_git_error_msg
|
||||||
|
cd $DIR
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
[Nn]* )
|
||||||
|
;;
|
||||||
|
* )
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
alias zhpl=history_sync_pull
|
||||||
|
alias zhps=history_sync_push
|
||||||
|
alias zhsync="history_sync_pull && history_sync_push"
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue