summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2025-04-13 20:03:35 +0200
committerMarc Vertes <mvertes@free.fr>2025-04-13 20:03:35 +0200
commit6b2ff5de7a85ac0dd21c4e6a3c6871099182d8ee (patch)
tree11bbe9b8aab723098756c5977fb3ef5c0cebe409 /bin
parentb7927432c7574abb47425fd1af5e7d8ab8fc936c (diff)
cle
Diffstat (limited to 'bin')
-rwxr-xr-xbin/cle42
-rwxr-xr-xbin/crypt8
2 files changed, 45 insertions, 5 deletions
diff --git a/bin/cle b/bin/cle
new file mode 100755
index 0000000..63a7153
--- /dev/null
+++ b/bin/cle
@@ -0,0 +1,42 @@
+#!/bin/sh -C
+
+clip() { print "$1" | tee /dev/tty | head -n 1 | pbcopy; }
+
+del() { rm -i ~/.cle/"$1"; }
+
+die() { echo "$@" >&2; exit 1; }
+
+edit() {
+ [ "$1" ] || die 'missing argument'
+ tmp=$(mktemp) f=~/.cle/"$1"
+ trap 'rm -f "$tmp"' EXIT
+ print "$1" >| "$tmp" || mkdir -p "${f%/*}"
+ [ -s "$tmp" ] || gen >| "$tmp"
+ "${EDITOR:-vim}" "$tmp"
+ crypt "$tmp" >| "$f"
+}
+
+gen() { LC_ALL=C tr -dc 'A-Za-z0-9!?%=' < /dev/urandom | head -c 10; }
+
+list() { cd ~/.cle && find -- * -type f; }
+
+print() { [ -f ~/.cle/"$1" ] && crypt -d < ~/.cle/"$1"; }
+
+tui() {
+ list | fzf --preview 'cle print {}' \
+ --preview-window hidden \
+ --header 'ctrl-del: delete, ctrl-e: edit, ctrl-n: new' \
+ --bind 'ctrl-delete:execute(cle del {})+reload(cle list)' \
+ --bind 'ctrl-e:execute(cle edit {})' \
+ --bind 'ctrl-n:execute(cle edit {q})+reload(cle list)' \
+ --bind 'ctrl-v:toggle-preview' \
+ --query "$1" --select-1 |
+ xargs cle clip
+}
+
+case $1 in
+ (clip|del|edit|gen|list|print)
+ cmd=$1; shift; $cmd "$@" ;;
+ (*)
+ tui "$@" ;;
+esac
diff --git a/bin/crypt b/bin/crypt
index 939f3f5..c63d60a 100755
--- a/bin/crypt
+++ b/bin/crypt
@@ -1,13 +1,12 @@
#!/bin/sh
-usage='Usage: crypt [-de] [-o output] [input]
+usage='Usage: crypt [-d] [-o output] [input]
Encrypt or decrypt input (default: stdin) to ouput (default: stdout),
using ssh rsa key.
Options:
-d action is decrypt (default: encrypt)
- -e action is encrypt
-o output set ouput (default: stdout)'
key="$(mktemp)"
@@ -40,14 +39,13 @@ decrypt() {
}
cmd=encrypt
-while getopts :deo: opt; do
+while getopts :do: opt; do
case $opt in
d) cmd=decrypt ;;
- e) cmd=encrypt ;;
o) exec 1>"$OPTARG" ;;
*) echo "$usage" >&2; exit 1 ;;
esac
done
shift $((OPTIND - 1))
-[ "$1" ] && [ "$1" != "-" ] && exec 0<"$1"
+[ "$1" ] && exec 0<"$1"
"$cmd"