default.nix (1347B)
1 { 2 lib, 3 pkgs, 4 5 user, 6 ... 7 }: 8 { 9 home-manager.users.${user} = 10 { config, ... }: 11 { 12 programs.gpg = { 13 enable = true; 14 homedir = "${config.xdg.dataHome}/gnupg"; 15 mutableKeys = false; 16 mutableTrust = false; 17 }; 18 19 services.gpg-agent = { 20 enable = true; 21 pinentry.package = pkgs.writeShellScriptBin "rbw-pinentry" '' 22 fallback() { 23 if [ -n "$WAYLAND_DISPLAY" ]; then 24 exec ${lib.getExe config.programs.wayprompt.package} "$@" 25 else 26 exec ${lib.getExe pkgs.pinentry-tty} "$@" 27 fi 28 } 29 30 secret=$(${lib.getExe pkgs.rbw} get gpg) || fallback "$@" 31 32 secret=$(printf '%s' "$secret" | ${lib.getExe pkgs.gnused} 's/%/%25/g') 33 34 echo "OK Pleased to meet you" 35 while IFS=' ' read -r cmd rest; do 36 case "$cmd" in 37 GETPIN) 38 printf 'D %s\n' "$secret" 39 echo "OK" 40 ;; 41 GETINFO) 42 [ "$rest" = "pid" ] && echo "D $$" 43 echo "OK" 44 ;; 45 BYE) 46 echo "OK closing connection" 47 exit 0 48 ;; 49 *) 50 echo "OK" 51 ;; 52 esac 53 done 54 ''; 55 }; 56 }; 57 }