summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorivan-boikov <ik.boikov.public@protonmail.com>2022-03-05 17:39:56 +0100
committerivan-boikov <ik.boikov.public@protonmail.com>2022-03-05 17:39:56 +0100
commite15bfb5ab86bb0adf1c375312a0bf0b72d65967e (patch)
treeebb4e3c745a0921b119ef4955c965721506392de /scripts
parenta01dbe16dd247bfa445fd8bd6bd6f42bb192447d (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-xscripts/.local/bin/dmnt36
-rwxr-xr-xscripts/.local/bin/dpass112
-rwxr-xr-xscripts/.local/bin/remaps4
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"