diff options
| author | ivan-boikov <ik.boikov.public@protonmail.com> | 2022-03-05 17:39:56 +0100 |
|---|---|---|
| committer | ivan-boikov <ik.boikov.public@protonmail.com> | 2022-03-05 17:39:56 +0100 |
| commit | e15bfb5ab86bb0adf1c375312a0bf0b72d65967e (patch) | |
| tree | ebb4e3c745a0921b119ef4955c965721506392de /scripts | |
| parent | a01dbe16dd247bfa445fd8bd6bd6f42bb192447d (diff) | |
dmnt:
handling LUKS-encrypted drives
automatic killing of blocking processes
dpass:
more checks for faulty usage
added echo mode
fixed type mode
set echo mode as default
dunst:
moved to bottomright
automatic width
remaps:
don't kill x11 with a shortcut
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/.local/bin/dmnt | 36 | ||||
| -rwxr-xr-x | scripts/.local/bin/dpass | 112 | ||||
| -rwxr-xr-x | scripts/.local/bin/remaps | 4 |
3 files changed, 109 insertions, 43 deletions
diff --git a/scripts/.local/bin/dmnt b/scripts/.local/bin/dmnt index 2df5271..c6bad87 100755 --- a/scripts/.local/bin/dmnt +++ b/scripts/.local/bin/dmnt @@ -12,19 +12,34 @@ getmount() { \ mkdiryn=$(printf "No\\nYes" | "$dmenu" -i -p "$mp does not exist. Create it?") || exit 1 [ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || sudo -A mkdir -p "$mp") fi - } +} mountusb() { \ - sudo -A mount "$1" 2>/dev/null && notify-send "USB mounting" "$1 mounted." && exit 0 + # handle LUKS-encrypted drives + #case "$(lsblk -no FSTYPE $1)" in + # *crypto_LUKS*) + #;; + #esac + #sudo -A mount "$1" 2>/dev/null && notify-send "USB mounting" "$1 mounted." && exit 0 + sudo -A mount "$1" 2>/dev/null && notify-send "$1 mounted" "" && exit 0 alreadymounted=$(lsblk -nrpo "name,type,mountpoint" | awk '$3!~/\/boot|\/home$|SWAP/&&length($3)>1{printf "-not ( -path *%s -prune ) ",$3}') getmount "/mnt /media -maxdepth 1 -type d $alreadymounted" partitiontype="$(lsblk -no "fstype" "$1")" case "$partitiontype" in "vfat") sudo -A mount -t vfat "$1" "$mp" -o rw,umask=0000;; "exfat") sudo -A mount "$1" "$mp" -o uid="$(id -u)",gid="$(id -g)";; + *crypto_LUKS*) + name="$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 16)" + mkfifo fifo + dpass > fifo & + sudo cryptsetup open --type luks "$1" "$name" --key-file fifo + rm fifo + device="/dev/mapper/$name" + sudo -A mount "$device" "$mp" + ;; *) sudo -A mount "$1" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" "$mp";; esac - notify-send "USB mounting" "$1 mounted to $mp." + notify-send "$1 mounted to $mp." "" } mountandroid() { \ @@ -39,8 +54,21 @@ unmountdev() { result=$(sudo -A umount "$1" 2>&1) if [ -z "$result" ]; then notify-send "Unmount device" "$1 unmounted" + return else - notify-send -u critical -t 4000 "Unmount device" "$result" + processes=$(lsof "$1" | tail -n +2 | awk '{print $1 " " $2}' | uniq) + pids="$(echo "$processes" | awk '{print $2}')" + #notify-send -u critical "Unmount device" "$result\nPreparing list of processes blocking $1..." + notify-send -u critical "Unmount $1" "$result\nBlocking processes:\n$processes" + action=$(echo "nothing\nterminate\nkill" | $dmenu -p "What to do to processes blocking $1" -l 3) + case $action in + terminate) echo "$pids" | while IFS='\n' read -r pid ; do kill $pid; done ;; + kill) echo "$pids" | while IFS='\n' read -r pid ; do kill -9 $pid; done ;; + nothing) + notify-send -u critical "Unmount device" "Aborted, $1 is still mounted" + return ;; + esac + unmountdev "$1" fi } diff --git a/scripts/.local/bin/dpass b/scripts/.local/bin/dpass index 8524a3e..9f187ff 100755 --- a/scripts/.local/bin/dpass +++ b/scripts/.local/bin/dpass @@ -2,21 +2,44 @@ shopt -s nullglob globstar -typeit=0 +output_method=("cat") +action_descr="" + +if [[ $1 == "--clipboard" ]]; then + if [[ -n $DISPLAY ]]; then + output_method=("xclip" "-selection" "clipboard") + action_descr="copied to clipboard" + else + echo "Only X11 is supported" + exit 1 + fi + shift +fi + if [[ $1 == "--type" ]]; then - typeit=1 - shift + if [[ -n $WAYLAND_DISPLAY ]]; then + xdotool="ydotool type --file -" + elif [[ -n $DISPLAY ]]; then + xdotool="xdotool type --clearmodifiers --file -" + else + echo "Error: No Wayland or X11 display detected" >&2 + exit 1 + fi + #output_method=("{ IFS= read -r pass; printf %s $pass; } | $xdotool") + output_method=("$xdotool") + action_descr="typed" + shift fi +#echo ${output_method[@]} + if [[ -n $WAYLAND_DISPLAY ]]; then - dmenu=dmenu-wl - xdotool="ydotool type --file -" + dmenu=dmenu-wl elif [[ -n $DISPLAY ]]; then - dmenu=cdmenu - xdotool="xdotool type --clearmodifiers --file -" + dmenu=cdmenu else - echo "Error: No Wayland or X11 display detected" >&2 - exit 1 + echo "Error: No Wayland or X11 display detected" >&2 + exit 1 fi prefix=${PASSWORD_STORE_DIR-~/.password-store} @@ -24,36 +47,51 @@ password_files=( "$prefix"/**/*.gpg ) password_files=( "${password_files[@]#"$prefix"/}" ) password_files=( "${password_files[@]%.gpg}" ) -password=$(printf '%s\n' "${password_files[@]}" | "$dmenu" -l 30 "$@") +password_file=$(printf '%s\n' "${password_files[@]}" | "$dmenu" -l 30 "$@") -[[ -n $password ]] || exit +if [[ ! " ${password_files[*]} " =~ " ${password_file} " ]]; then + notify-send -u critical "No entry \"$password_file\" in the password store" + exit 1 +fi -if [[ $typeit -eq 0 ]]; then - action=$(printf "login\npass\ninfo" | "$dmenu" -l 3) - case $action in +action=$(printf "password\nlogin\ninfo" | "$dmenu" -l 3) +case $action in login) - pass show "$password" | sed -n -e '/^login:/p' | awk '{print $2}' | xclip -selection clipboard - notify-send "Login for $password was copied to clipboard" - ;; - pass) - pass show -c "$password" 2>/dev/null - notify-send "Password for $password was copied to clipboard" - ;; + login=$(pass show $password_file | sed -n -e '/^login:/p' | awk '{print $2}') + if [[ -z $login ]]; then + notify-send -u critical "No login for \"$password_file\" was found" + exit 1 + fi + echo "$login" | ${output_method[@]} + if [[ -n $action_descr ]]; then + notify-send "Login for \"$password_file\" was $action_descr" + fi + ;; + password) + pass show "$password_file" | head -n 1 | ${output_method[@]} + #pass show -c "$password" 2>/dev/null + if [[ -n $action_descr ]]; then + notify-send "Password for \"$password_file\" was $action_descr" + fi + ;; info) - data=$(pass show $password | "$dmenu" -l 30) - if [[ -n "$data" ]] - then - do_trim=$(printf 'No\nYes' | "$dmenu" -p "Trim \"$(echo $data | awk '{print $1}')\" in front?" -l 2) - if [[ $do_trim == "Yes" ]]; then - data=$(echo "$data" | cut -f 2- -d ' ') - fi - echo $data | xclip -selection clipboard - notify-send "Info for $password was copied to clipboard" - else - notify-send "No info for $password was selected, clipboard not changed" + data=$(pass show $password_file | tail -n +2 | sed '/login\:/d') + if [[ -z $data ]]; then + notify-send -u critical "No additional info for \"$password_file\" was found" + exit 1 fi - ;; - esac -else - pass show "$password" | { IFS= read -r pass; printf %s "$pass"; } | $xdotool -fi + data=$(echo $data | "$dmenu" -l 30) + if [[ -z "$data" ]]; then + notify-send "No info for $password_file was selected" + exit 1 + fi + do_trim=$(printf 'Yes\nNo' | "$dmenu" -p "Trim \"$(echo $data | awk '{print $1}')\" in front?" -l 2) + if [[ $do_trim == "Yes" ]]; then + data=$(echo "$data" | cut -f 2- -d ' ') + fi + echo $data | ${output_method[@]} + if [[ -n $action_descr ]]; then + notify-send "Data for $password_file was $action_descr" + fi + ;; +esac diff --git a/scripts/.local/bin/remaps b/scripts/.local/bin/remaps index de83314..a75454f 100755 --- a/scripts/.local/bin/remaps +++ b/scripts/.local/bin/remaps @@ -30,7 +30,7 @@ xset r rate 200 75 -option grp:shift_caps_toggle \ -option lv3:ralt_switch \ -option compose:rctrl \ - -option nbsp:level3n \ - -option terminate:ctrl_alt_bkspc + -option nbsp:level3n #\ +# -option terminate:ctrl_alt_bkspc notify-send "Keyboard remapped" |
