diff options
Diffstat (limited to 'pkgs/profpatsch/gpg-private-offline-key/default.nix')
-rw-r--r-- | pkgs/profpatsch/gpg-private-offline-key/default.nix | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/pkgs/profpatsch/gpg-private-offline-key/default.nix b/pkgs/profpatsch/gpg-private-offline-key/default.nix new file mode 100644 index 00000000..d0e5ceb7 --- /dev/null +++ b/pkgs/profpatsch/gpg-private-offline-key/default.nix @@ -0,0 +1,57 @@ +{ pkgs, writeExecline, getBins }: + +let +# split + + bins = getBins pkgs.coreutils [ "split" "mktemp" "rm" "rmdir" ] + // getBins pkgs.lr [ "lr" ] + // getBins pkgs.xe [ "xe" ] + // getBins pkgs.qrencode [ "qrencode" ] + // getBins pkgs.zbar [ "zbarimg" ] + // getBins pkgs.sane-backends [ "scanimg" ]; + + qr-code-props = { + # second highest redundancy level + level = "Q"; + # max amount of bytes that level Q can encode + bytes = "1700"; + }; + + # Takes a private GPG key encoded with paperkey on stdin + # and execs into the argv for each qr code image (on stdin). + print-qr-codes = writeExecline "print-qr-codes" {} [ + split-stdin + "pipeline" [ + bins.qrencode + "--level=${qr-code-props.level}" + "--dpi=300" + "-o-" + ] + "$@" + ]; + + split-stdin = pkgs.writers.writePython3 "split-stdin" {} '' + import sys + import subprocess + + while True: + str = sys.stdin.buffer.read(${qr-code-props.bytes}) + if str == "": + break + ret = subprocess.run(sys.argv[1:], input=str) + code = ret.returncode + if code != 0: + sys.exit(code if code > 0 else 128 - code) + ''; + + test = writeExecline "test12" {} [ + "foreground" [ print-qr-codes "feh" "-" ] + ]; + + +# scanning: +# for i in (seq 0 9); scanimage --device=\'fujitsu:ScanSnap iX500:1527308\' --mode=gray --resolution=100 --format=png | zbarimg -Sdisable -Sqrcode.enable --raw - | head --bytes=-1; end > out + +in { + inherit print-qr-codes; +} |