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}