diff options
Diffstat (limited to 'home-manager/i3/rofi-passmenu.nix')
| -rw-r--r-- | home-manager/i3/rofi-passmenu.nix | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/home-manager/i3/rofi-passmenu.nix b/home-manager/i3/rofi-passmenu.nix new file mode 100644 index 0000000..153ffc3 --- /dev/null +++ b/home-manager/i3/rofi-passmenu.nix @@ -0,0 +1,72 @@ +{ + pkgs +}: + +pkgs.writeShellApplication { + name = "rofi-passmenu"; + + runtimeInputs = with pkgs; [ + pass + rofi + xclip + xdotool + gnugrep + gawk + coreutils + libnotify + ]; + + text = '' + #!/usr/bin/env bash + + store_dir="''${PASSWORD_STORE_DIR:-$HOME/.password-store}" + + get_passwords() { + echo "[+] Add New Password" + if [ -d "$store_dir" ]; then + find "$store_dir" -name "*.gpg" | sort | while IFS= read -r file; do + pass="''${file#"$store_dir"/}" + echo "''${pass%.gpg}" + done + fi + } + + selected=$(get_passwords | rofi -dmenu -i -p "pass") + [[ -z "$selected" ]] && exit 0 + + if [[ "$selected" == "[+] Add New Password" ]]; then + new_path=$(rofi -dmenu -p "Enter path/name for new password:") + [[ -z "$new_path" ]] && exit 0 + + choice=$(echo -e "Generate\nManual" | rofi -dmenu -p "Password method:") + if [[ "$choice" == "Generate" ]]; then + pass generate "$new_path" 20 + notify-send "Pass" "Generated password for $new_path" + elif [[ "$choice" == "Manual" ]]; then + new_pass=$(rofi -dmenu -p "Enter password:" -password) + [[ -n "$new_pass" ]] && echo "$new_pass" | pass insert -m "$new_path" + fi + exit 0 + fi + + action=$(echo -e "1. Type Password\n2. Type Username\n3. Copy Password\n4. Copy Username\n5. Show Password" | rofi -dmenu -i -p "$selected") + + case "$action" in + "1. Type Password") + pass show "$selected" | head -n 1 | tr -d '\n' | xdotool type --clearmodifiers -fi - + ;; + "2. Type Username") + pass show "$selected" | grep -i "^username:" | sed 's/^[^:]*:[[:space:]]*//' | tr -d '\n' | xdotool type --clearmodifiers -fi - + ;; + "3. Copy Password") + pass show -c "$selected" + ;; + "4. Copy Username") + pass show "$selected" | grep -i "^username:" | sed 's/^[^:]*:[[:space:]]*//' | xclip -selection clipboard + ;; + "5. Show Password") + pass show "$selected" | head -n 1 | rofi -dmenu -p "Password for $selected" + ;; + esac + ''; +} |
