commit 63c56e196bfa7d37a00900c896066c2ecd37b4bf parent 4c7b6dc8dcf9a3827a8f4860205bdc57e7340f1e Author: Chris <chris@echoz.io> Date: Fri, 28 Aug 2026 06:32:27 +0200 feat(gpg): unlock via rbw Diffstat:
| M | modules/gpg/default.nix | | | 39 | +++++++++++++++++++++++++++++++++------ |
1 file changed, 33 insertions(+), 6 deletions(-)
diff --git a/modules/gpg/default.nix b/modules/gpg/default.nix @@ -18,12 +18,39 @@ services.gpg-agent = { enable = true; - pinentry.package = pkgs.writeShellScriptBin "rbw-pinentry-wrapper" '' - if [ -n "$WAYLAND_DISPLAY" ]; then - exec ${lib.getExe config.programs.wayprompt.package} "$@" - else - exec ${lib.getExe pkgs.pinentry-tty} "$@" - fi + pinentry.package = pkgs.writeShellScriptBin "rbw-pinentry" '' + fallback() { + if [ -n "$WAYLAND_DISPLAY" ]; then + exec ${lib.getExe config.programs.wayprompt.package} "$@" + else + exec ${lib.getExe pkgs.pinentry-tty} "$@" + fi + } + + secret=$(${lib.getExe pkgs.rbw} get gpg) || fallback "$@" + + secret=$(printf '%s' "$secret" | ${lib.getExe pkgs.gnused} 's/%/%25/g') + + echo "OK Pleased to meet you" + while IFS=' ' read -r cmd rest; do + case "$cmd" in + GETPIN) + printf 'D %s\n' "$secret" + echo "OK" + ;; + GETINFO) + [ "$rest" = "pid" ] && echo "D $$" + echo "OK" + ;; + BYE) + echo "OK closing connection" + exit 0 + ;; + *) + echo "OK" + ;; + esac + done ''; }; };