summaryrefslogtreecommitdiff
path: root/ar/.local/bin/sshadd
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2025-01-24 20:35:27 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2025-01-24 20:35:27 +0900
commitc80a54e42b52ce297f0f2f71af23c562832025c7 (patch)
treedcce8bb977a770f473325d48f6f70b21d9818a40 /ar/.local/bin/sshadd
init
Diffstat (limited to 'ar/.local/bin/sshadd')
-rwxr-xr-xar/.local/bin/sshadd31
1 files changed, 31 insertions, 0 deletions
diff --git a/ar/.local/bin/sshadd b/ar/.local/bin/sshadd
new file mode 100755
index 0000000..76797ba
--- /dev/null
+++ b/ar/.local/bin/sshadd
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+SSH_KEY_DIR="${PASSWORD_STORE_DIR:-${HOME}/.local/share/.password-store}"
+
+temp_private_keys_list=$(mktemp)
+
+# Ensure that filenames with spaces or other special characters are handled correctly.
+find "$SSH_KEY_DIR" -name "*.pub" | while IFS= read -r pub_file_path; do
+ private_key_path="${pub_file_path%.pub}"
+ if [ -f "$private_key_path" ]; then
+ echo "$(basename "$private_key_path")" >>"$temp_private_keys_list"
+ echo "$private_key_path" >>"$temp_private_keys_list"
+ fi
+done
+
+# Use of dmenu is system-specific and not covered by POSIX standards
+selected_key_name=$(awk 'NR % 2 == 1' "$temp_private_keys_list" | dmenu -i -p "Select SSH key:")
+
+if [ -n "$selected_key_name" ]; then
+ selected_key_path=$(awk -v name="$selected_key_name" '$0 == name { getline; print }' "$temp_private_keys_list")
+
+ if [ -n "$selected_key_path" ]; then
+ export SSH_ASKPASS="$HOME/.local/bin/demupass"
+ setsid ssh-add "$selected_key_path" </dev/null
+ ln -sf "$selected_key_path" "$HOME/.ssh/$(basename "$selected_key_path")"
+ ln -sf "${selected_key_path}.pub" "$HOME/.ssh/$(basename "$selected_key_path").pub"
+ notify-send "🔑 SSH key added:" "$selected_key_name"
+ fi
+fi
+
+rm "$temp_private_keys_list"