#!/bin/sh
set -ex
# 改行以外の空白で文字列を分割しない
IFS='
'
if ! gpg=$(command -v gpg2) >/dev/null; then
echo "$0 requires gpg2" >&2
false
fi
# if ! sha256sum=$(command -v sha256sum) >/dev/null; then
# echo "$0 requires sha256sum" >&2
# false
# fi
if [ -f .encrypt/master_key.gpg ]; then
echo "No master key in repositry. Repositry not initialized for pijul-encrypt" >&2
false
fi
encrypt() {
path=$1
$gpg --decrypt .encrypt.d/master_key.gpg |
$gpg --batch --passphrase-fd 0 \
--sign --encrypt-to-default-key --symmetric "$path"
}
# decrypt() {
# path=$1
# $gpg --decrypt .encrypt.d/master_key.gpg |
# $gpg --batch --output - --pinentry-mode loopback --passphrase-fd 0 \
# --decrypt "$path"
# }
rules=$(cat .encrypt)
# globを展開、マッチするディレクトリの中身も全部マッチしたいのでfindを噛ませる
# shellcheck disable=SC2086
secrets_in_worktree=$(find $(cat .encrypt) -type f)
: "↓debug secrets_in_worktree↓
$secrets_in_worktree"
# pijulが記録しているパスのうち`.encrypt`にマッチするもの
secrets_in_tracked=$(printf '%s\n' $secrets_in_worktree $(pijul list) | sort | uniq -d)
: "↓debug secrets_in_tracked↓
$secrets_in_tracked"
# .encryptにマッチするパスをremoveして`.gpg`をつけてaddし直す
for path in $secrets_in_tracked; do
case $path in
*.gpg)
break
;;
*)
pijul remove "$path" # 秘密のファイルはrecordしてはいけない
touch "$path.gpg"
pijul add "$path.gpg"
;;
esac
done
# # `.gpg`で終わるファイルを更新
# for path in $(pijul list); do
# case $path in
# .encrypt.d/master_key.gpg) ;;
# *.gpg)
# if [ -f "$path" ]; then
# rm "$path"
# fi
# encrypt "${path%%.gpg}"
# ;;
# esac
# done