keepassxc
1#!/usr/bin/env bash
2# fetch KeePass database passwords from kdewallet
3
4### change the path to suit your installation or set KDBX_SEARCH before calling ###
5: ${KDBX_SEARCH:=~/.KeePass/*.kdbx}6
7PROG=${0##*/}8KEEPASSXC=$(which -a keepassxc | sed -e "\\,$0,d" -e 'q')9
10daemon_main() {11# open kdewallet12handle=$(qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.open kdewallet 0 "$PROG")13while [[ true != $(qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.isOpen kdewallet) ]]; do14sleep 115done16
17declare -A DBs18for DBPATH in $(ls -r $KDBX_SEARCH); do19DBs[$(realpath $DBPATH)]=$(qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.readPassword "$handle" "Passwords" "${DBPATH##*/}" "$PROG")20done21
22# launch real keepassxc23IFS=$'\n\n\n'24"$KEEPASSXC" --pw-stdin "${!DBs[@]}" <<<"${DBs[*]}" &25
26# done with kdewallet27qdbus org.kde.kwalletd5 /modules/kwalletd5 org.kde.KWallet.close "$handle" "false" "$PROG"28}
29
30if [[ $1 == '-d' ]]; then31exec >&~/tmp/$PROG.log32set -vx33daemon_main
34else
35cd /36daemon_main </dev/null >&/dev/null &37disown
38fi
39