Is there a reason you can’t use the generic CSV format?
Regardless, I have tested and it doesn’t look like those IDs are used during import. Import works perfectly fine with a Zipfile containing an unencrypted JSON file, as formatted by ProtonPass export, with all those base64 strings (itemId
, itemUuid
, shareId
) removed or blanked out:
JSON example
{
"encrypted": false,
"userId": "",
"vaults": {
"": {
"name": "test",
"description": "",
"display": {
"color": 0,
"icon": 0
},
"items": [
{
"data": {
"metadata": {
"name": "test-login",
"note": ""
},
"extraFields": [],
"type": "login",
"content": {
"itemEmail": "",
"password": "password",
"urls": [],
"totpUri": "",
"passkeys": [],
"itemUsername": "username"
}
},
"state": 1,
"aliasEmail": null,
"contentFormatVersion": 6,
"createTime": 1733128994,
"modifyTime": 1733128994,
"pinned": false
}
]
}
},
"version": "1.25.0"
}
When re-exporting those imported values, they have new IDs even when you include the old IDs from the original export, so they’re obviously not being used. My guess is they’re just some sort of random UUID.
Libnotify backends are D-Bus services, which isn’t really something you’d want to implement in a shell script. Going by some source code I just found, it looks pretty straightforward to do in Python, so that’s one option.
The easier option would be to use an existing notification daemon that lets you disable the default GUI and specify a script to run as a hook, but I don’t actually know of any like that.