1{
2 lib,
3 buildPythonPackage,
4 fetchFromGitHub,
5 gnupg,
6 keyring,
7 pass,
8 poetry-core,
9 pythonOlder,
10}:
11buildPythonPackage rec {
12 pname = "keyring-pass";
13 version = "0.9.3";
14 disabled = pythonOlder "3.6";
15
16 pyproject = true;
17
18 src = fetchFromGitHub {
19 owner = "nazarewk";
20 repo = "keyring_pass";
21 tag = "v${version}";
22 hash = "sha256-EsM+RUhYtelslRpxR5NQbqpOt8KaeCsFqkqZ1ZFx0I0=";
23 };
24
25 postPatch = ''
26 substituteInPlace keyring_pass/__init__.py \
27 --replace-fail 'pass_binary = "pass"' 'pass_binary = "${lib.getExe pass}"'
28 '';
29
30 build-system = [ poetry-core ];
31
32 nativeCheckInputs = [
33 keyring
34 gnupg
35 ];
36
37 checkPhase = ''
38 export HOME="$TMPDIR"
39
40 # generate temporary GPG identity
41 cat <<EOF | gpg --gen-key --batch /dev/stdin
42 %no-protection
43 %transient-key
44 Key-Type: 1
45 Key-Length: 1024
46 Subkey-Type: 1
47 Subkey-Length: 1024
48 Name-Real: test
49 Name-Email: test@example.com
50 Expire-Date: 1
51 EOF
52
53 # configure password store
54 ${lib.getExe pass} init test@example.com
55
56 # Configure `keyring` CLI
57 # first make sure `keyring-pass` is in "$PYTHONPATH"
58 [[ "$PYTHONPATH" == *"$out"/lib/python*/site-packages* ]]
59 export PYTHON_KEYRING_BACKEND="keyring_pass.PasswordStoreBackend"
60
61 # confirm set/get/del works
62 keyring set test-service test-username <<<"test-password"
63 test "$(keyring get test-service test-username)" == "test-password"
64 keyring del test-service test-username
65 '';
66
67 pythonImportsCheck = [ "keyring_pass" ];
68
69 meta = {
70 description = "Password Store (pass) backend for python's keyring";
71 homepage = "https://github.com/nazarewk/keyring_pass";
72 license = lib.licenses.mit;
73 maintainers = [ lib.maintainers.nazarewk ];
74 };
75}