blob: 1264627f61ef7e3f7789191d936f17c4d1d6a83f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
{ 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" ];
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,
# splits it into pieces into an empty directory that
# has to be provided via PRIVKEY_TMPDIR,
# and execs into the block provided as first argument
# for each qr code image (via stdin).
print-qr-codes = writeExecline "print-qr-codes" {} [
"importas" "-ui" "privkey_dir" "PRIVKEY_TMPDIR"
"cd" "$privkey_dir"
"if" [
bins.split
"--bytes=${qr-code-props.bytes}"
# paperkey-encoded key comes from stdin
"-"
]
"pipeline" [ bins.lr "-0" ]
"forstdin" "-0" "piece"
"importas" "-iu" "piece" "piece"
"redirfd" "-r" "0" "$piece"
"pipeline" [
bins.qrencode
"--level=${qr-code-props.level}"
"--dpi=300"
"-o-"
]
"$@"
];
print-qr-codes2 = pkgs.writers.writePython "print-qr-codes" {} ''
import sys
while True:
str = sys.stdin.bytes.read(${qr-code-props.bytes})
if str == "":
break
sys.execvl( bins.qrencode
'';
rm-files-in-directory = writeExecline "rm-files-in-directory" { readNArgs = 1; } [
"if" [
"pipeline" [ bins.lr "-0" "-t" "depth==1" "$1" ]
bins.xe "-0" bins.rm
]
bins.rmdir "$1"
];
test = writeExecline "test12" {} [
"backtick" "-ni" "PRIVKEY_TMPDIR" [ bins.mktemp "-d" ]
"importas" "-i" "privdir" "PRIVKEY_TMPDIR"
"foreground" [ print-qr-codes [ "feh" "-" ] ]
rm-files-in-directory "$privdir"
];
# scanning:
# for i in (seq 0 9); nix-shell -p zbar --run 'scanimage --device=\'fujitsu:ScanSnap iX500:1527308\' --mode=gray --resolution=100 --format=png | zbarimg -Sdisable -Sqrcode.enable --raw - | head --bytes=-1'; end > out
in {
inherit test;
}
|