summaryrefslogtreecommitdiff
path: root/bin/cle
blob: 63a7153da0a01f0a60f696da021c4deb81c2d83d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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