diff --git a/dot_config/choose/executable_choose-rbw.sh b/dot_config/choose/executable_choose-rbw.sh index 36a7593..4de15d6 100644 --- a/dot_config/choose/executable_choose-rbw.sh +++ b/dot_config/choose/executable_choose-rbw.sh @@ -1,7 +1,55 @@ -#!/usr/bin/env bash -# Use fuzzel to find a password from password-store and copy it to clipboard. -# inpired by: https://gist.github.com/igemnace/2b8609d280752e8a1b173204c14f6892 +#!/bin/bash -pass_name=$(rbw list | choose) +# Funktion zur Auswahl mit fuzzel oder choose +select_item() { + local prompt="$1" + local input="$2" + if [[ "$OSTYPE" == "darwin"* ]]; then + echo "$input" | choose -p "$prompt" + else + echo "$input" | fuzzel -d -p "$prompt" + fi +} -[[ $pass_name != "" ]] && rbw get "$pass_name" --clipboard +# Funktion zum Bereinigen des ausgewählten Textes +clean_text() { + local text="$1" + if [[ "$text" == *": "* ]]; then + echo "$text" | sed 's/^[^:]*: //' + else + echo "$text" + fi +} + +# Funktion zum Kopieren in die Zwischenablage +copy_to_clipboard() { + local text="$1" + if [[ "$OSTYPE" == "darwin"* ]]; then + echo -n "$text" | pbcopy + else + echo -n "$text" | wl-copy + fi +} + +# Wähle einen Eintrag aus der Liste +pass_name=$(select_item "Wähle einen Eintrag:" "$(rbw list)") + +# Wenn ein Eintrag ausgewählt wurde +if [[ $pass_name != "" ]]; then + # Hole alle Details des Eintrags + details=$(rbw get "$pass_name" --full) + + # Zeige Details an und lasse den Benutzer eine Zeile auswählen + selected_detail=$(select_item "Details für $pass_name:" "$details") + + # Wenn eine Zeile ausgewählt wurde + if [[ $selected_detail != "" ]]; then + # Bereinige den ausgewählten Text + cleaned_text=$(clean_text "$selected_detail") + + # Kopiere den bereinigten Text in die Zwischenablage + copy_to_clipboard "$cleaned_text" + + echo "Bereinigter Text wurde in die Zwischenablage kopiert." + fi +fi diff --git a/dot_config/fuzzel/executable_fuzzel-rbw.sh b/dot_config/fuzzel/executable_fuzzel-rbw.sh index 9fe6372..4de15d6 100644 --- a/dot_config/fuzzel/executable_fuzzel-rbw.sh +++ b/dot_config/fuzzel/executable_fuzzel-rbw.sh @@ -1,15 +1,22 @@ #!/bin/bash +# Funktion zur Auswahl mit fuzzel oder choose +select_item() { + local prompt="$1" + local input="$2" + if [[ "$OSTYPE" == "darwin"* ]]; then + echo "$input" | choose -p "$prompt" + else + echo "$input" | fuzzel -d -p "$prompt" + fi +} + # Funktion zum Bereinigen des ausgewählten Textes clean_text() { local text="$1" - - # Prüfe, ob der Text einen Doppelpunkt gefolgt von einem Leerzeichen enthält if [[ "$text" == *": "* ]]; then - # Entferne alles bis zum ersten Doppelpunkt und das folgende Leerzeichen echo "$text" | sed 's/^[^:]*: //' else - # Wenn kein Doppelpunkt mit folgendem Leerzeichen gefunden wird, gib den Text unverändert zurück echo "$text" fi } @@ -25,15 +32,15 @@ copy_to_clipboard() { } # Wähle einen Eintrag aus der Liste -pass_name=$(rbw list | fuzzel -d) +pass_name=$(select_item "Wähle einen Eintrag:" "$(rbw list)") # Wenn ein Eintrag ausgewählt wurde if [[ $pass_name != "" ]]; then # Hole alle Details des Eintrags details=$(rbw get "$pass_name" --full) - # Zeige Details in einem neuen Fuzzel-Fenster an und lasse den Benutzer eine Zeile auswählen - selected_detail=$(echo "$details" | fuzzel --dmenu --prompt="Details für $pass_name: ") + # Zeige Details an und lasse den Benutzer eine Zeile auswählen + selected_detail=$(select_item "Details für $pass_name:" "$details") # Wenn eine Zeile ausgewählt wurde if [[ $selected_detail != "" ]]; then