summaryrefslogtreecommitdiff
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
parentb7927432c7574abb47425fd1af5e7d8ab8fc936c (diff)
cle
-rw-r--r--.bashrc4
-rwxr-xr-xbin/cle42
-rwxr-xr-xbin/crypt8
3 files changed, 47 insertions, 7 deletions
diff --git a/.bashrc b/.bashrc
index c24d0e0..4f1e100 100644
--- a/.bashrc
+++ b/.bashrc
@@ -26,13 +26,13 @@ OS=${OS:-$(~/bin/os)}
case $OS in
(arch|alpine)
alias ls='ls --color=auto -v' ll='ls -AlFhv'
- [ "$OS" = arch ] || trap 'printf "\e]2;%s\a" "${BASH_COMMAND%ps1}"' DEBUG
+ [ "$OS" = arch ] || trap 'printf "\e]2;%s\a" "$TERM_TAG ${BASH_COMMAND%ps1}"' DEBUG
;;
(Darwin)
alias ls='ls -GF' ll='ls -AlGFhv'
alias ldd='otool -L'
alias ibrew='arch -x86_64 /usr/local/bin/brew'
- trap 'printf "\e]2;%s\a" " ${BASH_COMMAND%update_terminal_cwd}"' DEBUG
+ trap 'printf "\e]2;%s\a" "$TERM_TAG ${BASH_COMMAND%update_terminal_cwd}"' DEBUG
;;
(termux)
PATH=~/bin:${HOME%/*}/usr/bin:~/go/bin
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"