#!/usr/bin/env bash
# bluecry Omarchy plugin installer — generated by the bluecry web app.
# Ships the watcher as a standalone script + private venv. No repo checkout,
# no bluecry CLI, no uv needed on this host.
set -euo pipefail

echo "==> installing bluecry Omarchy toast plugin"

BLUECRY_STATE="$HOME/.local/share/bluecry"
mkdir -p "$HOME/.local/bin" "$HOME/.config/systemd/user" "$BLUECRY_STATE"
mkdir -p "$HOME/.config/omarchy/plugins/bluecry"

# Remember the current plugin QML so we can restart the shell only when the
# files actually changed — the shell keeps loaded QML in memory, so new files
# on disk do nothing until a restart (rescanPlugins is NOT enough).
OLD_PLUGIN_HASH=""
if [[ -f "$HOME/.config/omarchy/plugins/bluecry/Panel.qml" ]]; then
  OLD_PLUGIN_HASH=$(cat "$HOME/.config/omarchy/plugins/bluecry/Panel.qml" "$HOME/.config/omarchy/plugins/bluecry/BarWidget.qml" | md5sum || true)
fi

# --- bluecry-watcher.py -> $HOME/.local/share/bluecry/bluecry-watcher.py
base64 -d > $HOME/.local/share/bluecry/bluecry-watcher.py <<'B64'
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiJIb3N0LXNpZGUgT21hcmNoeSB0b2FzdCB3YXRjaGVyIOKAlCBzdWJzY3JpYmVzIHRvIHRoZSBwdWJsaWMgd2FsbCB3ZWJzb2NrZXQuCgpSdW5zIE9VVFNJREUgdGhlIGNvbnRhaW5lcnMgKG9uIHRoZSBPbWFyY2h5IGhvc3QgYXMgYSBzeXN0ZW1kIHVzZXIgc2VydmljZSkuClRoZSB3ZWIgc2VydmljZSBhbHJlYWR5IGRldGVjdHMgc3Bpa2VzL21pbGVzdG9uZXMgc2VydmVyLXNpZGUgKHdlYi9zcGlrZXMucHkpCmFuZCBldmVyeSBwb3N0IGFycml2ZXMgcHJlLXNjb3JlZCwgc28gdGhpcyB3YXRjaGVyIGlzIHB1cmUgcGx1bWJpbmc6IGNvbm5lY3QsCnJvdXRlIG1lc3NhZ2VzLCBjb2FsZXNjZSBoYXRlIGJhdGNoZXMsIGZpcmUgZGVza3RvcCB0b2FzdHMgdGhyb3VnaCB0aGUKT21hcmNoeSBzZW5kZXIgY29udHJhY3QgKGBvbWFyY2h5LW5vdGlmaWNhdGlvbi1zZW5kYCksIGZhbGxpbmcgYmFjayB0bwpgbm90aWZ5LXNlbmRgIG9uIGFueSBvdGhlciBmcmVlZGVza3RvcCBub3RpZmljYXRpb24gZGFlbW9uLgoKTWVzc2FnZSByb3V0aW5nIChhZGRpdGl2ZSBwcm90b2NvbCBmcm9tIHdlYi93cy5weSk6CiAgc25hcHNob3QgICAtPiBpZ25vcmVkIChpbml0aWFsIHBhZ2Ugc3RhdGUpCiAgdXBkYXRlICAgICAtPiBoYXRlIGZpbHRlciArIDMwcyBidXJzdCBjb2FsZXNjaW5nIC0+IG9uZSB0b2FzdCBwZXIgd2luZG93CiAgc3Bpa2UgICAgICAtPiB0b2FzdCAoY29vbGRvd24gZW5mb3JjZWQgc2VydmVyLXNpZGUpCiAgbWlsZXN0b25lICAtPiB0b2FzdCwgbG93IHVyZ2VuY3kKICBhbnl0aGluZyBlbHNlIC0+IGlnbm9yZWQKIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFubm90YXRpb25zCgppbXBvcnQgYXN5bmNpbwppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwppbXBvcnQgc2h1dGlsCmltcG9ydCB0aW1lCmZyb20gZGF0YWNsYXNzZXMgaW1wb3J0IGRhdGFjbGFzcywgZmllbGQKCmltcG9ydCB3ZWJzb2NrZXRzCgpsb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCiMgT21hcmNoeSBnbHlwaHMgKE5lcmQgRm9udCkgc28gdG9hc3RzIG1hdGNoIHRoZSByZXN0IG9mIHRoZSBzaGVsbCBVSS4KR0xZUEhfSEFURSA9ICJcdWYwNzEiICAjICBleGNsYW1hdGlvbi10cmlhbmdsZQpHTFlQSF9TUElLRSA9ICJcdWUzOWIiICAjICBjaGFydC90cmVuZGluZyBnbHlwaApHTFlQSF9NSUxFU1RPTkUgPSAiXHVmNTIxIiAgIyAgcGFydHkgcG9wcGVyIGZhbGxiYWNrIGdseXBoCgpIQVRFX0xBQkVMUyA9ICgiYW5ncnkiLCAibWl4ZWQiKQoKUkVDT05ORUNUX0JBQ0tPRkZfUyA9IDUuMApTTkFQU0hPVF9HUkFDRV9TID0gMzAuMCAgIyBtYXggd2FpdCBmb3IgdGhlIHNuYXBzaG90IGhhbmRzaGFrZSBiZWZvcmUgcmVjb25uZWN0CgoKZGVmIG5vcm1hbGl6ZV93c191cmwodXJsOiBzdHIpIC0+IHN0cjoKICAgICIiIkFjY2VwdCBzaXRlIG9yaWdpbnMgKGh0dHBzOi8vKSBhcyB3ZWxsIGFzIHdzL3dzcyDigJQgd2Vic29ja2V0cyByZWplY3RzCiAgICBhbnl0aGluZyBidXQgd3Mvd3NzLCBhbmQgdGhlIHNpdGUgb3JpZ2luIGlzIHRoZSBuYXR1cmFsIHRoaW5nIHRvIHBhc3RlLiIiIgogICAgaWYgdXJsLnN0YXJ0c3dpdGgoImh0dHBzOi8vIik6CiAgICAgICAgcmV0dXJuICJ3c3M6Ly8iICsgdXJsW2xlbigiaHR0cHM6Ly8iKSA6XQogICAgaWYgdXJsLnN0YXJ0c3dpdGgoImh0dHA6Ly8iKToKICAgICAgICByZXR1cm4gIndzOi8vIiArIHVybFtsZW4oImh0dHA6Ly8iKSA6XQogICAgcmV0dXJuIHVybAoKCkBkYXRhY2xhc3MKY2xhc3MgVG9hc3Q6CiAgICB0aXRsZTogc3RyCiAgICBib2R5OiBzdHIKICAgICMgY3JpdGljYWwgPSB0aGUgT21hcmNoeSBzaGVsbCBrZWVwcyB0aGUgdG9hc3Qgb24gc2NyZWVuIHVudGlsIGRpc21pc3NlZAogICAgIyAoaG92ZXIgcGF1c2VzLCByaWdodC1jbGljayBjbG9zZXMpLiBETkQgc3RpbGwgYXBwbGllczogcHVuY2gtdGhyb3VnaAogICAgIyByZXF1aXJlcyBhcHBfbmFtZSAibm90aWZ5LXNlbmQiLCBvdXJzIGlzICJibHVlY3J5IiDigJQgc2lsZW5jZWQgdG9hc3RzIGdvCiAgICAjIHRvIGhpc3RvcnkgaW5zdGVhZCBvZiBpbnRlcnJ1cHRpbmcuCiAgICB1cmdlbmN5OiBzdHIgPSAiY3JpdGljYWwiCiAgICBnbHlwaDogc3RyID0gR0xZUEhfSEFURQoKCkBkYXRhY2xhc3MKY2xhc3MgQmF0Y2g6CiAgICAiIiJIYXRlIHBvc3RzIGNvYWxlc2NlZCBvdmVyIG9uZSB3aW5kb3cuIiIiCgogICAgcG9zdHM6IGxpc3RbZGljdF0gPSBmaWVsZChkZWZhdWx0X2ZhY3Rvcnk9bGlzdCkKCiAgICBkZWYgYWRkKHNlbGYsIHBvc3Q6IGRpY3QpIC0+IE5vbmU6CiAgICAgICAgc2VsZi5wb3N0cy5hcHBlbmQocG9zdCkKCiAgICBkZWYgZW1wdHkoc2VsZikgLT4gYm9vbDoKICAgICAgICByZXR1cm4gbm90IHNlbGYucG9zdHMKCiAgICBkZWYgdG9hc3Qoc2VsZiwgdGVybTogc3RyKSAtPiBUb2FzdCB8IE5vbmU6CiAgICAgICAgaWYgbm90IHNlbGYucG9zdHM6CiAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgbiA9IGxlbihzZWxmLnBvc3RzKQogICAgICAgIGxhdGVzdCA9IHNlbGYucG9zdHNbLTFdCiAgICAgICAgaGFuZGxlID0gbGF0ZXN0LmdldCgiaGFuZGxlIikgb3IgInNvbWVvbmUiCiAgICAgICAgdGV4dCA9IChsYXRlc3QuZ2V0KCJ0ZXh0Iikgb3IgIiIpLnN0cmlwKCkucmVwbGFjZSgiXG4iLCAiICIpCiAgICAgICAgaWYgbGVuKHRleHQpID4gODA6CiAgICAgICAgICAgIHRleHQgPSB0ZXh0Wzo3N10gKyAiLi4uIgogICAgICAgIHRpdGxlID0gZiJibHVlY3J5IMK3IHt0ZXJtfToge259IG5ldyBoYXRlcnsncycgaWYgbiAhPSAxIGVsc2UgJyd9IgogICAgICAgIGJvZHkgPSBmIkB7aGFuZGxlfToge3RleHR9IiBpZiB0ZXh0IGVsc2UgZiJAe2hhbmRsZX0iCiAgICAgICAgcmV0dXJuIFRvYXN0KHRpdGxlLCBib2R5KQoKCmRlZiBoYXRlX3Bvc3RzKHBvc3RzOiBsaXN0W2RpY3RdLCAqLCBtaW5fYW5ncnk6IGludCA9IDMpIC0+IGxpc3RbZGljdF06CiAgICAiIiJXYWxsIGhhdGUgY3JpdGVyaWEsIG1pcnJvcmluZyB0aGUgY29sbGFnZSBxdWVyeTogYW5ncnkgPj0gTiBhbmQgbGFiZWwKICAgIGluIChhbmdyeSwgbWl4ZWQpLiIiIgogICAgcmV0dXJuIFsKICAgICAgICBwIGZvciBwIGluIHBvc3RzIGlmIGludChwLmdldCgiYW5ncnkiKSBvciAwKSA+PSBtaW5fYW5ncnkgYW5kIHAuZ2V0KCJsYWJlbCIpIGluIEhBVEVfTEFCRUxTCiAgICBdCgoKZGVmIG9tYXJjaHlfdG9hc3RfYXJndih0OiBUb2FzdCkgLT4gbGlzdFtzdHJdOgogICAgIiIiQXJndiBmb3IgT21hcmNoeSdzIHNlbmRlciDigJQgdHlwZWQgcGFyYW1zLCBubyBhcmd2IHJlaW50ZXJwcmV0YXRpb24uCgogICAgYC0tZXhlY2AgaXMgZGVsaWJlcmF0ZWx5IGFic2VudDogbm8gY2xpY2sgYWN0aW9uIGJ5IGRlc2lnbi4KICAgICIiIgogICAgcmV0dXJuIFsKICAgICAgICAib21hcmNoeS1ub3RpZmljYXRpb24tc2VuZCIsCiAgICAgICAgIi0tYXBwLW5hbWUiLAogICAgICAgICJibHVlY3J5IiwKICAgICAgICAiLS1nbHlwaCIsCiAgICAgICAgdC5nbHlwaCwKICAgICAgICAiLS11cmdlbmN5IiwKICAgICAgICB0LnVyZ2VuY3ksCiAgICAgICAgdC50aXRsZSwKICAgICAgICB0LmJvZHksCiAgICBdCgoKZGVmIG5vdGlmeV9zZW5kX3RvYXN0X2FyZ3YodDogVG9hc3QpIC0+IGxpc3Rbc3RyXToKICAgICIiIkZhbGxiYWNrIGZvciBnZW5lcmljIGZyZWVkZXNrdG9wIGRhZW1vbnMgKGR1bnN0L21ha28vZXRjLikuIiIiCiAgICByZXR1cm4gWwogICAgICAgICJub3RpZnktc2VuZCIsCiAgICAgICAgIi0tYXBwLW5hbWU9Ymx1ZWNyeSIsCiAgICAgICAgIi0tdXJnZW5jeSIsCiAgICAgICAgeyJsb3ciOiAibG93IiwgImNyaXRpY2FsIjogImNyaXRpY2FsIn0uZ2V0KHQudXJnZW5jeSwgIm5vcm1hbCIpLAogICAgICAgIHQudGl0bGUsCiAgICAgICAgdC5ib2R5LAogICAgXQoKCmNsYXNzIFRvYXN0U2luazoKICAgICIiIkZpcmVzIHRvYXN0cyB2aWEgdGhlIGJlc3QgYXZhaWxhYmxlIHNlbmRlciwgbmV2ZXIgY3Jhc2hlcyB0aGUgd2F0Y2hlci4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgd2FpdF9mb3Jfc2hlbGw6IGJvb2wgPSBUcnVlKSAtPiBOb25lOgogICAgICAgIHNlbGYud2FpdF9mb3Jfc2hlbGwgPSB3YWl0X2Zvcl9zaGVsbAogICAgICAgIHNlbGYuX3dhaXRlZCA9IEZhbHNlCiAgICAgICAgc2VsZi5vbWFyY2h5ID0gc2h1dGlsLndoaWNoKCJvbWFyY2h5LW5vdGlmaWNhdGlvbi1zZW5kIikKICAgICAgICBzZWxmLm5vdGlmeV9zZW5kID0gc2h1dGlsLndoaWNoKCJub3RpZnktc2VuZCIpCgogICAgYXN5bmMgZGVmIF9lbnN1cmVfcmVhZHkoc2VsZikgLT4gTm9uZToKICAgICAgICAiIiJPbWFyY2h5OiB3YWl0IG9uY2UgZm9yIHRoZSBzaGVsbCB0byBjbGFpbSB0aGUgbm90aWZpY2F0aW9ucyBidXMKICAgICAgICAoYG9tYXJjaHktbm90aWZpY2F0aW9uLXdhaXRgKSwgb3IgdGhlIGZpcnN0IHRvYXN0IGxhbmRzIGluIHRoZSB2b2lkIOKAlAogICAgICAgIHRoZSBzZW5kZXIgY29udHJhY3Qgc2F5cyBhbnl0aGluZyBzZW5kaW5nIG5lYXIgc2Vzc2lvbiBzdGFydCB1c2VzIGl0LiIiIgogICAgICAgIGlmIHNlbGYuX3dhaXRlZCBvciBub3Qgc2VsZi53YWl0X2Zvcl9zaGVsbDoKICAgICAgICAgICAgc2VsZi5fd2FpdGVkID0gVHJ1ZQogICAgICAgICAgICByZXR1cm4KICAgICAgICBzZWxmLl93YWl0ZWQgPSBUcnVlCiAgICAgICAgaWYgc2VsZi5vbWFyY2h5OgogICAgICAgICAgICB3YWl0X2JpbiA9IHNodXRpbC53aGljaCgib21hcmNoeS1ub3RpZmljYXRpb24td2FpdCIpCiAgICAgICAgICAgIGlmIHdhaXRfYmluOgogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIGF3YWl0IGFzeW5jaW8ud2FpdF9mb3IoCiAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYyh3YWl0X2JpbiwgIjEwIiksCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTIuMCwKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzogICMgbm9xYTogQkxFMDAxCiAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJvbWFyY2h5LW5vdGlmaWNhdGlvbi13YWl0IGZhaWxlZDogJXMiLCBleGMpCgogICAgYXN5bmMgZGVmIHNlbmQoc2VsZiwgdDogVG9hc3QpIC0+IE5vbmU6CiAgICAgICAgYXJndiA9IE5vbmUKICAgICAgICBpZiBzZWxmLm9tYXJjaHk6CiAgICAgICAgICAgIGFyZ3YgPSBvbWFyY2h5X3RvYXN0X2FyZ3YodCkKICAgICAgICBlbGlmIHNlbGYubm90aWZ5X3NlbmQ6CiAgICAgICAgICAgIGFyZ3YgPSBub3RpZnlfc2VuZF90b2FzdF9hcmd2KHQpCiAgICAgICAgaWYgYXJndiBpcyBOb25lOgogICAgICAgICAgICBsb2cuaW5mbygibm8gbm90aWZpY2F0aW9uIHNlbmRlcjsgd291bGQgdG9hc3Q6ICVzIOKAlCAlcyIsIHQudGl0bGUsIHQuYm9keSkKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgYXdhaXQgc2VsZi5fZW5zdXJlX3JlYWR5KCkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHByb2MgPSBhd2FpdCBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMoKmFyZ3YpCiAgICAgICAgICAgIGF3YWl0IGFzeW5jaW8ud2FpdF9mb3IocHJvYy53YWl0KCksIHRpbWVvdXQ9MTAuMCkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzogICMgbm9xYTogQkxFMDAxCiAgICAgICAgICAgIGxvZy53YXJuaW5nKCJ0b2FzdCBmYWlsZWQgKCVzKTogJXMiLCBhcmd2WzBdLCBleGMpCgoKZGVmIHJvdXRlX21lc3NhZ2UobXNnOiBkaWN0LCBiYXRjaDogQmF0Y2gsICosIG1pbl9hbmdyeTogaW50KSAtPiBUb2FzdCB8IE5vbmU6CiAgICAiIiJPbmUgd2Vic29ja2V0IG1lc3NhZ2UgLT4gemVybyBvciBvbmUgdG9hc3QuIE11dGF0ZXMgYGJhdGNoYCBmb3IgdXBkYXRlcy4KCiAgICBQdXJlIChubyBJL08pIHNvIHRlc3RzIGNhbiBkcml2ZSBpdCB3aXRoIGEgZmFrZSBzdHJlYW0uCiAgICAiIiIKICAgIG10eXBlID0gbXNnLmdldCgidHlwZSIpCiAgICBpZiBtdHlwZSA9PSAidXBkYXRlIjoKICAgICAgICBmb3IgcCBpbiBoYXRlX3Bvc3RzKG1zZy5nZXQoInBvc3RzIikgb3IgW10sIG1pbl9hbmdyeT1taW5fYW5ncnkpOgogICAgICAgICAgICBiYXRjaC5hZGQocCkKICAgICAgICByZXR1cm4gTm9uZQogICAgaWYgbXR5cGUgPT0gInNwaWtlIjoKICAgICAgICByYXRlID0gbXNnLmdldCgicmF0ZSIpCiAgICAgICAgdGVybSA9IG1zZy5nZXQoInRlcm0iKSBvciAiPyIKICAgICAgICByZXR1cm4gVG9hc3QoCiAgICAgICAgICAgICJibHVlY3J5IMK3IHNwaWtlIiwKICAgICAgICAgICAgZiJ7dGVybX0gaXMgdHJlbmRpbmcg4oCUIHtyYXRlIGlmIHJhdGUgaXMgbm90IE5vbmUgZWxzZSAnPyd9IHBvc3RzL21pbiIsCiAgICAgICAgICAgIGdseXBoPUdMWVBIX1NQSUtFLAogICAgICAgICkKICAgIGlmIG10eXBlID09ICJtaWxlc3RvbmUiOgogICAgICAgIHRlcm0gPSBtc2cuZ2V0KCJ0ZXJtIikgb3IgIj8iCiAgICAgICAgdG90YWwgPSBtc2cuZ2V0KCJ0b3RhbCIpCiAgICAgICAgdG90YWxfcyA9IGYie3RvdGFsOix9IiBpZiBpc2luc3RhbmNlKHRvdGFsLCBpbnQpIGVsc2Ugc3RyKHRvdGFsKQogICAgICAgIHJldHVybiBUb2FzdCgKICAgICAgICAgICAgImJsdWVjcnkgwrcgbWlsZXN0b25lIiwKICAgICAgICAgICAgZiJ7dGVybX0gaGF0ZSB3YWxsIGhpdCB7dG90YWxfc30gcG9zdHMiLAogICAgICAgICAgICBnbHlwaD1HTFlQSF9NSUxFU1RPTkUsCiAgICAgICAgKQogICAgcmV0dXJuIE5vbmUKCgphc3luYyBkZWYgd2F0Y2goCiAgICB1cmw6IHN0ciwKICAgICosCiAgICB0ZXJtOiBzdHIgPSAib21hcmNoeSIsCiAgICBtaW5fYW5ncnk6IGludCA9IDMsCiAgICB3aW5kb3c6IGZsb2F0ID0gMzAuMCwKICAgIHNpbms6IFRvYXN0U2luayB8IE5vbmUgPSBOb25lLAopIC0+IE5vbmU6CiAgICAiIiJXYXRjaCB0aGUgZmVlZCB3ZWJzb2NrZXQgZm9yZXZlcjsgdG9hc3QgY29hbGVzY2VkIGhhdGUgYmF0Y2hlcyArIGFsZXJ0cy4KCiAgICBSZWNlaXZlIGxvb3AgaXMgcmVjdi13aXRoLWRlYWRsaW5lIHJhdGhlciB0aGFuIGBhc3luYyBmb3JgOiBhIGxvbmUgaGF0ZQogICAgcG9zdCBmb2xsb3dlZCBieSBzaWxlbmNlIG11c3Qgc3RpbGwgZmx1c2ggd2hlbiBpdHMgd2luZG93IGVsYXBzZXMuCiAgICAiIiIKICAgIHNpbmsgPSBzaW5rIG9yIFRvYXN0U2luaygpCiAgICB1cmwgPSBub3JtYWxpemVfd3NfdXJsKHVybCkKICAgIGxvZy5pbmZvKCJ3YXRjaGluZyAlcyAodGVybT0lcywgbWluX2FuZ3J5PSVkLCB3aW5kb3c9JS4wZnMpIiwgdXJsLCB0ZXJtLCBtaW5fYW5ncnksIHdpbmRvdykKICAgIHdoaWxlIFRydWU6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBhc3luYyB3aXRoIHdlYnNvY2tldHMuY29ubmVjdCh1cmwpIGFzIHdzOgogICAgICAgICAgICAgICAgIyBTbmFwc2hvdCBoYW5kc2hha2U6IHBhZ2Ugc3RhdGUsIG5ldmVyIHRvYXN0IGl0LgogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIHJhdyA9IGF3YWl0IGFzeW5jaW8ud2FpdF9mb3Iod3MucmVjdigpLCB0aW1lb3V0PVNOQVBTSE9UX0dSQUNFX1MpCiAgICAgICAgICAgICAgICAgICAgbXNnID0ganNvbi5sb2FkcyhyYXcpCiAgICAgICAgICAgICAgICAgICAgaWYgbXNnLmdldCgidHlwZSIpICE9ICJzbmFwc2hvdCI6CiAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiZmlyc3QgbWVzc2FnZSB3YXMgJXI7IGlnbm9yaW5nIiwgbXNnLmdldCgidHlwZSIpKQogICAgICAgICAgICAgICAgZXhjZXB0IFRpbWVvdXRFcnJvcjoKICAgICAgICAgICAgICAgICAgICBsb2cud2FybmluZygibm8gc25hcHNob3Qgd2l0aGluICUuMGZzOyByZWNvbm5lY3RpbmciLCBTTkFQU0hPVF9HUkFDRV9TKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgYmF0Y2ggPSBCYXRjaCgpCiAgICAgICAgICAgICAgICBmbHVzaF9kZWFkbGluZTogZmxvYXQgfCBOb25lID0gTm9uZQogICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgoMC4xLCBmbHVzaF9kZWFkbGluZSAtIHRpbWUubW9ub3RvbmljKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmbHVzaF9kZWFkbGluZSBpcyBub3QgTm9uZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBOb25lCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgcmF3ID0gYXdhaXQgYXN5bmNpby53YWl0X2Zvcih3cy5yZWN2KCksIHRpbWVvdXQpCiAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFRpbWVvdXRFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QgPSBiYXRjaC50b2FzdCh0ZXJtKQogICAgICAgICAgICAgICAgICAgICAgICBiYXRjaCA9IEJhdGNoKCkKICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hfZGVhZGxpbmUgPSBOb25lCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRvYXN0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2luay5zZW5kKHRvYXN0KQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0ganNvbi5sb2FkcyhyYXcpCiAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgdG9hc3QgPSByb3V0ZV9tZXNzYWdlKG1zZywgYmF0Y2gsIG1pbl9hbmdyeT1taW5fYW5ncnkpCiAgICAgICAgICAgICAgICAgICAgaWYgdG9hc3QgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbmsuc2VuZCh0b2FzdCkKICAgICAgICAgICAgICAgICAgICBlbGlmIG5vdCBiYXRjaC5lbXB0eSgpIGFuZCBmbHVzaF9kZWFkbGluZSBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICAgICBmbHVzaF9kZWFkbGluZSA9IHRpbWUubW9ub3RvbmljKCkgKyB3aW5kb3cKICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKICAgICAgICAgICAgcmFpc2UKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzogICMgbm9xYTogQkxFMDAxCiAgICAgICAgICAgIGxvZy53YXJuaW5nKCJmZWVkIGNvbm5lY3Rpb24gbG9zdCAoJXMpOyByZXRyeSBpbiAlLjBmcyIsIGV4YywgUkVDT05ORUNUX0JBQ0tPRkZfUykKICAgICAgICAgICAgYXdhaXQgYXN5bmNpby5zbGVlcChSRUNPTk5FQ1RfQkFDS09GRl9TKQoKCmFzeW5jIGRlZiBkaWdlc3Rfb25jZSgKICAgIHVybDogc3RyLAogICAgKiwKICAgIHRlcm06IHN0ciA9ICJvbWFyY2h5IiwKICAgIHNpbms6IFRvYXN0U2luayB8IE5vbmUgPSBOb25lLAopIC0+IFRvYXN0IHwgTm9uZToKICAgICIiIk9uZS1zaG90IGRhaWx5IGRpZ2VzdDogY29ubmVjdCwgdGFrZSB0aGUgc25hcHNob3QsIHN1bW1hcml6ZSwgdG9hc3QsIGV4aXQuCgogICAgVXNlcyB0aGUgcHVibGljIHdzIChubyBob3N0IERCIGFjY2Vzcykg4oCUIHdvcmtzIGZyb20gYW55IG1hY2hpbmUuCiAgICAiIiIKICAgIHNpbmsgPSBzaW5rIG9yIFRvYXN0U2luaygpCiAgICB1cmwgPSBub3JtYWxpemVfd3NfdXJsKHVybCkKCiAgICBhc3luYyB3aXRoIHdlYnNvY2tldHMuY29ubmVjdCh1cmwpIGFzIHdzOgogICAgICAgIHJhdyA9IGF3YWl0IGFzeW5jaW8ud2FpdF9mb3Iod3MucmVjdigpLCB0aW1lb3V0PVNOQVBTSE9UX0dSQUNFX1MpCiAgICAgICAgbXNnID0ganNvbi5sb2FkcyhyYXcpCiAgICAgICAgaWYgbXNnLmdldCgidHlwZSIpICE9ICJzbmFwc2hvdCI6CiAgICAgICAgICAgIGxvZy53YXJuaW5nKCJkaWdlc3Q6IGZpcnN0IG1lc3NhZ2Ugd2FzICVyLCBub3Qgc25hcHNob3QiLCBtc2cuZ2V0KCJ0eXBlIikpCiAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgcG9zdHMgPSBtc2cuZ2V0KCJwb3N0cyIpIG9yIFtdCiAgICAgICAgdG90YWwgPSBtc2cuZ2V0KCJ0b3RhbCIpCiAgICAgICAgYW5ncmllc3QgPSBtYXgoCiAgICAgICAgICAgIHBvc3RzLAogICAgICAgICAgICBrZXk9bGFtYmRhIHA6IChpbnQocC5nZXQoImFuZ3J5Iikgb3IgMCksIC1pbnQocC5nZXQoImhhcHB5Iikgb3IgMCkpLAogICAgICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgKQogICAgICAgIGlmIGFuZ3JpZXN0IGlzIE5vbmU6CiAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgaGFuZGxlID0gYW5ncmllc3QuZ2V0KCJoYW5kbGUiKSBvciAic29tZW9uZSIKICAgICAgICB0ZXh0ID0gKGFuZ3JpZXN0LmdldCgidGV4dCIpIG9yICIiKS5zdHJpcCgpLnJlcGxhY2UoIlxuIiwgIiAiKQogICAgICAgIGlmIGxlbih0ZXh0KSA+IDgwOgogICAgICAgICAgICB0ZXh0ID0gdGV4dFs6NzddICsgIi4uLiIKICAgICAgICBhbmdyeV9uID0gc3VtKDEgZm9yIHAgaW4gcG9zdHMgaWYgaW50KHAuZ2V0KCJhbmdyeSIpIG9yIDApID49IDMpCiAgICAgICAgdG90YWxfcyA9IGYie3RvdGFsOix9IHRvdGFsIiBpZiBpc2luc3RhbmNlKHRvdGFsLCBpbnQpIGVsc2UgIndhbGwiCiAgICAgICAgdG9hc3QgPSBUb2FzdCgKICAgICAgICAgICAgZiJibHVlY3J5IGRpZ2VzdCDCtyB7dGVybX0iLAogICAgICAgICAgICBmInt0b3RhbF9zfSDCtyB7YW5ncnlfbn0gaGF0ZSBwb3N0cyBvbiB0aGUgd2FsbCDCtyB0b3A6IEB7aGFuZGxlfToge3RleHR9IiwKICAgICAgICApCiAgICAgICAgYXdhaXQgc2luay5zZW5kKHRvYXN0KQogICAgICAgIHJldHVybiB0b2FzdAoKCkRFRkFVTFRfUFVCTElDX0JBU0UgPSAiaHR0cHM6Ly9ibHVlY3J5LmxldHRlcmxhc2guY29tIgoKCmRlZiBfbWFpbigpIC0+IE5vbmU6CiAgICAiIiJTdGFuZGFsb25lIGVudHJ5cG9pbnQgKG5vIGJsdWVjcnkgcGFja2FnZSwgbm8gdHlwZXIpLiIiIgogICAgaW1wb3J0IGFyZ3BhcnNlCgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0iYmx1ZWNyeS13YXRjaGVyIikKICAgIHN1YiA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhkZXN0PSJtb2RlIiwgcmVxdWlyZWQ9VHJ1ZSkKCiAgICBwX25vdGlmeSA9IHN1Yi5hZGRfcGFyc2VyKCJub3RpZnkiLCBoZWxwPSJ3YXRjaCB0aGUgd2FsbCB3ZWJzb2NrZXQgYW5kIHRvYXN0IChkYWVtb24pIikKICAgIHBfZGlnZXN0ID0gc3ViLmFkZF9wYXJzZXIoImRpZ2VzdCIsIGhlbHA9Im9uZS1zaG90IG1vcm5pbmcgc3VtbWFyeSB0b2FzdCIpCiAgICBmb3IgcCBpbiAocF9ub3RpZnksIHBfZGlnZXN0KToKICAgICAgICBwLmFkZF9hcmd1bWVudCgiLS10ZXJtIiwgZGVmYXVsdD0ib21hcmNoeSIsIGhlbHA9ImtleXdvcmQgd2FsbCB0byB3YXRjaCIpCiAgICAgICAgcC5hZGRfYXJndW1lbnQoCiAgICAgICAgICAgICItLXVybCIsCiAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgaGVscD0iZmVlZCB3ZWJzb2NrZXQgKGRlZmF1bHQ6IDxwdWJsaWMgc2l0ZT4vd3MvZmVlZC88dGVybT4pIiwKICAgICAgICApCiAgICBwX25vdGlmeS5hZGRfYXJndW1lbnQoIi0tbWluLWFuZ3J5IiwgdHlwZT1pbnQsIGRlZmF1bHQ9MykKICAgIHBfbm90aWZ5LmFkZF9hcmd1bWVudCgiLS13aW5kb3ciLCB0eXBlPWZsb2F0LCBkZWZhdWx0PTMwLjApCgogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5JTkZPLCBmb3JtYXQ9IiUobGV2ZWxuYW1lKXMgJShuYW1lKXM6ICUobWVzc2FnZSlzIikKICAgIHVybCA9IGFyZ3MudXJsCiAgICBpZiBub3QgdXJsOgogICAgICAgIHVybCA9IGYie0RFRkFVTFRfUFVCTElDX0JBU0V9L3dzL2ZlZWQve2FyZ3MudGVybX0iCiAgICBpZiAiL3dzL2ZlZWQvIiBub3QgaW4gdXJsOgogICAgICAgIHVybCA9IGYie3VybC5yc3RyaXAoJy8nKX0vd3MvZmVlZC97YXJncy50ZXJtfSIKCiAgICBpZiBhcmdzLm1vZGUgPT0gImRpZ2VzdCI6CiAgICAgICAgdG9hc3QgPSBhc3luY2lvLnJ1bihkaWdlc3Rfb25jZSh1cmwsIHRlcm09YXJncy50ZXJtLCBzaW5rPVRvYXN0U2luaygpKSkKICAgICAgICBpZiB0b2FzdCBpcyBOb25lOgogICAgICAgICAgICBwcmludCgibm8gd2FsbCBwb3N0cyB0byBkaWdlc3QgeWV0IikKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludChmInRvYXN0ZWQ6IHt0b2FzdC50aXRsZX0g4oCUIHt0b2FzdC5ib2R5fSIpCiAgICAgICAgcmV0dXJuCiAgICBhc3luY2lvLnJ1bigKICAgICAgICB3YXRjaCh1cmwsIHRlcm09YXJncy50ZXJtLCBtaW5fYW5ncnk9YXJncy5taW5fYW5ncnksIHdpbmRvdz1hcmdzLndpbmRvdywgc2luaz1Ub2FzdFNpbmsoKSkKICAgICkKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgX21haW4oKQo=
B64
chmod 644 $HOME/.local/share/bluecry/bluecry-watcher.py

# --- private venv for the one non-stdlib dependency (websockets) ------------
PY="python3"
if ! python3 -c "import websockets" >/dev/null 2>&1; then
  echo "==> creating private venv for websockets (~/.local/share/bluecry/venv)"
  python3 -m venv "$BLUECRY_STATE/venv"
  "$BLUECRY_STATE/venv/bin/pip" install --quiet --disable-pip-version-check websockets
  PY="$BLUECRY_STATE/venv/bin/python"
else
  echo "==> system python already has websockets; using it directly"
fi

# --- omarchy-bluecry-notify -> $HOME/.local/bin/omarchy-bluecry-notify
base64 -d > $HOME/.local/bin/omarchy-bluecry-notify <<'B64'
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIG9tYXJjaHk6c3VtbWFyeT1ibHVlY3J5IHRvYXN0IHdhdGNoZXIgKG9tYXJjaHkgYmx1ZWNyeSBub3RpZnkpCiMgb21hcmNoeTphcmdzPVtbLS10ZXJtIFRFUk1dLCBbLS11cmwgVVJMXSwgWy0tbWluLWFuZ3J5IE5dLCBbLS13aW5kb3cgU0VDU11dCiMKIyBUaGluIHdyYXBwZXIgYXJvdW5kIHRoZSBzdGFuZGFsb25lIGJsdWVjcnktd2F0Y2hlci5weSAoc3RkbGliICsgd2Vic29ja2V0cwojIGluIGEgcHJpdmF0ZSB2ZW52IGF0IH4vLmxvY2FsL3NoYXJlL2JsdWVjcnkvdmVudiDigJQgY3JlYXRlZCBieSB0aGUgaW5zdGFsbGVyKS4KIyBObyBibHVlY3J5IHJlcG8gb3IgQ0xJIHJlcXVpcmVkIG9uIHRoaXMgaG9zdC4KIwojIGBvbWFyY2h5IGJsdWVjcnkgbm90aWZ5YCByb3V0ZXMgaGVyZSBPTkxZIHdoZW4gdGhpcyBmaWxlIGxpdmVzIGluIHRoZSBzYW1lCiMgZGlyIGFzIHRoZSBgb21hcmNoeWAgYmluYXJ5ICh0aGUgcm91dGVyIHByb2JlcyBpdHMgb3duIGRpciwgbmV2ZXIKIyB+Ly5sb2NhbC9iaW4pLiBUaGUgc3lzdGVtZCB1c2VyIHNlcnZpY2UgZXhlY3MgaXQgZGlyZWN0bHksIHNvIHRoZSB3YXRjaGVyCiMgd29ya3MgcmVnYXJkbGVzcyBvZiByb3V0aW5nLgpzZXQgLWV1byBwaXBlZmFpbAoKRElSPSIkSE9NRS8ubG9jYWwvc2hhcmUvYmx1ZWNyeSIKUFk9IiRESVIvdmVudi9iaW4vcHl0aG9uIgpbWyAteCAkUFkgXV0gfHwgUFk9IiQoY29tbWFuZCAtdiBweXRob24zKSIKZXhlYyAiJFBZIiAiJERJUi9ibHVlY3J5LXdhdGNoZXIucHkiIG5vdGlmeSAiJEAiCg==
B64
chmod 755 $HOME/.local/bin/omarchy-bluecry-notify

# --- omarchy-bluecry-digest -> $HOME/.local/bin/omarchy-bluecry-digest
base64 -d > $HOME/.local/bin/omarchy-bluecry-digest <<'B64'
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIG9tYXJjaHk6c3VtbWFyeT1ibHVlY3J5IGRhaWx5IGRpZ2VzdCB0b2FzdCAob21hcmNoeSBibHVlY3J5IGRpZ2VzdCkKIyBvbWFyY2h5OmFyZ3M9W1stLXRlcm0gVEVSTV0sIFstLXVybCBVUkxdXQojCiMgT25lLXNob3QgbW9ybmluZyB0b2FzdDogd2FsbCB0b3RhbCArIGFuZ3JpZXN0IHBvc3QuIFBhaXJzIHdpdGggdGhlCiMgYmx1ZWNyeS1kaWdlc3QudGltZXIgc3lzdGVtZCB1c2VyIHRpbWVyLiBUaGluIHdyYXBwZXIgYXJvdW5kIHRoZSBzdGFuZGFsb25lCiMgYmx1ZWNyeS13YXRjaGVyLnB5IOKAlCBubyBibHVlY3J5IHJlcG8gb3IgQ0xJIHJlcXVpcmVkIG9uIHRoaXMgaG9zdC4Kc2V0IC1ldW8gcGlwZWZhaWwKCkRJUj0iJEhPTUUvLmxvY2FsL3NoYXJlL2JsdWVjcnkiClBZPSIkRElSL3ZlbnYvYmluL3B5dGhvbiIKW1sgLXggJFBZIF1dIHx8IFBZPSIkKGNvbW1hbmQgLXYgcHl0aG9uMykiCmV4ZWMgIiRQWSIgIiRESVIvYmx1ZWNyeS13YXRjaGVyLnB5IiBkaWdlc3QgIiRAIgo=
B64
chmod 755 $HOME/.local/bin/omarchy-bluecry-digest

# --- bluecry-notify.service -> $HOME/.config/systemd/user/bluecry-notify.service
base64 -d > $HOME/.config/systemd/user/bluecry-notify.service <<'B64'
IyBibHVlY3J5LW5vdGlmeS5zZXJ2aWNlIOKAlCBPbWFyY2h5IHRvYXN0IHdhdGNoZXIgKGhvc3Qtc2lkZSwgTk9UIGEgY29udGFpbmVyKS4KIwojIEZvbGxvd3MgdGhlIE9tYXJjaHkgc3Vic3lzdGVtIHBhdHRlcm4gKGxpa2Ugb21hcmNoeS1jcmFzaC13YXRjaCk6CiMgc3RhcnRzIHdpdGggdGhlIGdyYXBoaWNhbCBzZXNzaW9uLCBkaWVzIHdpdGggaXQsIHJlc3RhcnRzIG9uIGZhaWx1cmUuCiMKIyBJbnN0YWxsIChvciBqdXN0IHJ1biBkZXBsb3kvb21hcmNoeS9pbnN0YWxsLnNoKToKIyAgIGNwIGRlcGxveS9vbWFyY2h5L2JsdWVjcnktbm90aWZ5LnNlcnZpY2Ugfi8uY29uZmlnL3N5c3RlbWQvdXNlci8KIyAgIHN5c3RlbWN0bCAtLXVzZXIgZGFlbW9uLXJlbG9hZAojICAgc3lzdGVtY3RsIC0tdXNlciBlbmFibGUgLS1ub3cgYmx1ZWNyeS1ub3RpZnkuc2VydmljZQoKW1VuaXRdCkRlc2NyaXB0aW9uPWJsdWVjcnkgT21hcmNoeSB0b2FzdCB3YXRjaGVyIChoYXRlIHBvc3RzLCBzcGlrZXMsIG1pbGVzdG9uZXMpCkFmdGVyPWdyYXBoaWNhbC1zZXNzaW9uLnRhcmdldApQYXJ0T2Y9Z3JhcGhpY2FsLXNlc3Npb24udGFyZ2V0CgpbU2VydmljZV0KVHlwZT1zaW1wbGUKRXhlY1N0YXJ0PSVoLy5sb2NhbC9iaW4vb21hcmNoeS1ibHVlY3J5LW5vdGlmeSAtLXRlcm0gb21hcmNoeQojIE92ZXJyaWRlIG9uIHRoZSBob3N0IHRvIHBvaW50IGF0IGEgZGV2IHNlcnZlciBvciBhbm90aGVyIHRlcm06CiMgICBzeXN0ZW1jdGwgLS11c2VyIGVkaXQgYmx1ZWNyeS1ub3RpZnkKIyAgIFtTZXJ2aWNlXQojICAgRXhlY1N0YXJ0PQojICAgRXhlY1N0YXJ0PSVoLy5sb2NhbC9iaW4vb21hcmNoeS1ibHVlY3J5LW5vdGlmeSAtLXVybCB3czovLzEyNy4wLjAuMTo4Nzg3IC0tdGVybSBvbWFyY2h5ClJlc3RhcnQ9b24tZmFpbHVyZQpSZXN0YXJ0U2VjPTUKCltJbnN0YWxsXQpXYW50ZWRCeT1ncmFwaGljYWwtc2Vzc2lvbi50YXJnZXQK
B64
chmod 644 $HOME/.config/systemd/user/bluecry-notify.service

# --- bluecry-digest.service -> $HOME/.config/systemd/user/bluecry-digest.service
base64 -d > $HOME/.config/systemd/user/bluecry-digest.service <<'B64'
W1VuaXRdCkRlc2NyaXB0aW9uPWJsdWVjcnkgZGFpbHkgZGlnZXN0IHRvYXN0ICh0b3AgaGF0ZXIgKyB3YWxsIHRvdGFsKQoKW1NlcnZpY2VdClR5cGU9b25lc2hvdApFeGVjU3RhcnQ9JWgvLmxvY2FsL2Jpbi9vbWFyY2h5LWJsdWVjcnktZGlnZXN0Cg==
B64
chmod 644 $HOME/.config/systemd/user/bluecry-digest.service

# --- bluecry-digest.timer -> $HOME/.config/systemd/user/bluecry-digest.timer
base64 -d > $HOME/.config/systemd/user/bluecry-digest.timer <<'B64'
W1VuaXRdCkRlc2NyaXB0aW9uPXJ1biBibHVlY3J5IGRpZ2VzdCBldmVyeSBtb3JuaW5nIGF0IDA5OjAwCgpbVGltZXJdCk9uQ2FsZW5kYXI9Ki0qLSogMDk6MDA6MDAKUGVyc2lzdGVudD10cnVlCgpbSW5zdGFsbF0KV2FudGVkQnk9dGltZXJzLnRhcmdldAo=
B64
chmod 644 $HOME/.config/systemd/user/bluecry-digest.timer

# --- manifest.json -> $HOME/.config/omarchy/plugins/bluecry/manifest.json
base64 -d > $HOME/.config/omarchy/plugins/bluecry/manifest.json <<'B64'
ewogICJzY2hlbWFWZXJzaW9uIjogMSwKICAiaWQiOiAibWF0YXRvbi5ibHVlY3J5IiwKICAibmFtZSI6ICJCbHVlY3J5IiwKICAidmVyc2lvbiI6ICIxLjAuMCIsCiAgImF1dGhvciI6ICJtYXRhdG9uIiwKICAiZGVzY3JpcHRpb24iOiAiTGFzdCA1IG9tYXJjaHkgaGF0ZXJzIOKAlCBiYXIgcGlsbCB3aXRoIGEgcG9wdXAgcGFuZWwgZmVkIGJ5IGJsdWVjcnkubGV0dGVybGFzaC5jb20iLAogICJraW5kcyI6IFsKICAgICJiYXItd2lkZ2V0IgogIF0sCiAgImVudHJ5UG9pbnRzIjogewogICAgImJhcldpZGdldCI6ICJCYXJXaWRnZXQucW1sIgogIH0sCiAgImJhcldpZGdldCI6IHsKICAgICJkaXNwbGF5TmFtZSI6ICJCbHVlY3J5IGhhdGVycyIsCiAgICAiZGVzY3JpcHRpb24iOiAiRmlyZSBwaWxsIHNob3dpbmcgdGhlIGhhdGUtd2FsbCB0b3RhbDsgY2xpY2sgZm9yIHRoZSBsYXN0IDUgaGF0ZSBtZXNzYWdlcyIsCiAgICAiY2F0ZWdvcnkiOiAiSW5mbyIsCiAgICAiYWxsb3dNdWx0aXBsZSI6IGZhbHNlCiAgfQp9Cg==
B64
chmod 644 $HOME/.config/omarchy/plugins/bluecry/manifest.json

# --- BarWidget.qml -> $HOME/.config/omarchy/plugins/bluecry/BarWidget.qml
base64 -d > $HOME/.config/omarchy/plugins/bluecry/BarWidget.qml <<'B64'
aW1wb3J0IFF0UXVpY2sKaW1wb3J0IHFzLkNvbW1vbnMKaW1wb3J0IHFzLlVpCgpCYXJXaWRnZXQgewogIGlkOiByb290CiAgbW9kdWxlTmFtZTogIm1hdGF0b24uYmx1ZWNyeSIKCiAgZnVuY3Rpb24gaW5qZWN0UGFuZWwoKSB7CiAgICB2YXIgdGFyZ2V0ID0gcGFuZWxMb2FkZXIuaXRlbQogICAgaWYgKCF0YXJnZXQpIHJldHVybgogICAgaWYgKCJiYXIiIGluIHRhcmdldCkgdGFyZ2V0LmJhciA9IHJvb3QuYmFyCiAgICBpZiAoImFuY2hvckl0ZW0iIGluIHRhcmdldCkgdGFyZ2V0LmFuY2hvckl0ZW0gPSBidXR0b24KICAgIGlmICgiaG9zdFdpZGdldCIgaW4gdGFyZ2V0KSB0YXJnZXQuaG9zdFdpZGdldCA9IHJvb3QKICB9CgogIGZ1bmN0aW9uIHJlZnJlc2goKSB7CiAgICBpZiAocGFuZWxMb2FkZXIuaXRlbSAmJiBwYW5lbExvYWRlci5pdGVtLnJlZnJlc2gpIHBhbmVsTG9hZGVyLml0ZW0ucmVmcmVzaCgpCiAgfQoKICBmdW5jdGlvbiB0b2dnbGVQYW5lbCgpIHsKICAgIGlmIChwYW5lbExvYWRlci5pdGVtICYmIHBhbmVsTG9hZGVyLml0ZW0udG9nZ2xlKSBwYW5lbExvYWRlci5pdGVtLnRvZ2dsZSgpCiAgfQoKICAvLyBTaGFwZSBjb250cmFjdCBmb3Igc2hlbGwuc3VtbW9uL2hpZGUvdG9nZ2xlIHJvdXRpbmcgKG1pcnJvcnMgdGhlIHdlYXRoZXIgd2lkZ2V0KS4KICByZWFkb25seSBwcm9wZXJ0eSBib29sIG9wZW5lZDogcGFuZWxMb2FkZXIuaXRlbSA/IHBhbmVsTG9hZGVyLml0ZW0ub3BlbmVkID09PSB0cnVlIDogZmFsc2UKCiAgZnVuY3Rpb24gb3BlbigpIHsKICAgIGlmIChwYW5lbExvYWRlci5pdGVtICYmIHBhbmVsTG9hZGVyLml0ZW0ub3BlbkZyb21Ib3RrZXkpIHBhbmVsTG9hZGVyLml0ZW0ub3BlbkZyb21Ib3RrZXkoKQogIH0KCiAgZnVuY3Rpb24gY2xvc2UoKSB7CiAgICBpZiAocGFuZWxMb2FkZXIuaXRlbSAmJiBwYW5lbExvYWRlci5pdGVtLmNsb3NlKSBwYW5lbExvYWRlci5pdGVtLmNsb3NlKCkKICB9CgogIGZ1bmN0aW9uIHRvZ2dsZSgpIHsKICAgIGlmIChwYW5lbExvYWRlci5pdGVtICYmIHBhbmVsTG9hZGVyLml0ZW0udG9nZ2xlKSBwYW5lbExvYWRlci5pdGVtLnRvZ2dsZSgpCiAgfQoKICByZWFkb25seSBwcm9wZXJ0eSBib29sIHBvcG91dFN3aXRjaENsb3Npbmc6IHBhbmVsTG9hZGVyLml0ZW0gPyBwYW5lbExvYWRlci5pdGVtLnBvcG91dFN3aXRjaENsb3NpbmcgPT09IHRydWUgOiBmYWxzZQoKICBmdW5jdGlvbiBjbG9zZUZvclBvcG91dFN3aXRjaCgpIHsKICAgIGlmIChwYW5lbExvYWRlci5pdGVtKSBwYW5lbExvYWRlci5pdGVtLmNsb3NlRm9yUG9wb3V0U3dpdGNoKCkKICB9CgogIHZpc2libGU6IHBhbmVsTG9hZGVyLml0ZW0gJiYgcGFuZWxMb2FkZXIuaXRlbS5sYWJlbCAhPT0gIiIKICBpbXBsaWNpdFdpZHRoOiBidXR0b24uaW1wbGljaXRXaWR0aAogIGltcGxpY2l0SGVpZ2h0OiBidXR0b24uaW1wbGljaXRIZWlnaHQKCiAgb25CYXJDaGFuZ2VkOiBpbmplY3RQYW5lbCgpCgogIExvYWRlciB7CiAgICBpZDogcGFuZWxMb2FkZXIKICAgIGFjdGl2ZTogdHJ1ZQogICAgc291cmNlOiBRdC5yZXNvbHZlZFVybCgiUGFuZWwucW1sIikKICAgIHZpc2libGU6IGZhbHNlCiAgICBvbkxvYWRlZDogewogICAgICByb290LmluamVjdFBhbmVsKCkKICAgICAgUXQuY2FsbExhdGVyKHJvb3QuaW5qZWN0UGFuZWwpCiAgICB9CiAgfQoKICBCYXJJY29uQnV0dG9uIHsKICAgIGlkOiBidXR0b24KICAgIGFuY2hvcnMuZmlsbDogcGFyZW50CiAgICBiYXI6IHJvb3QuYmFyCiAgICB0ZXh0OiBwYW5lbExvYWRlci5pdGVtID8gcGFuZWxMb2FkZXIuaXRlbS5sYWJlbCA6ICIiCiAgICBzbG90U2l6ZTogU3R5bGUuYmFyLnN0YXR1c1Nsb3QKICAgIHRvb2x0aXBUZXh0OiAiYmx1ZWNyeSBoYXRlcnMg4oCUIGNsaWNrIGZvciB0aGUgbGFzdCA1IgoKICAgIG9uUHJlc3NlZDogZnVuY3Rpb24oYikgewogICAgICBpZiAoIXJvb3QuYmFyKSByZXR1cm4KICAgICAgaWYgKGIgPT09IFF0LlJpZ2h0QnV0dG9uKSByb290LnJlZnJlc2goKQogICAgICBlbHNlIHJvb3QudG9nZ2xlUGFuZWwoKQogICAgfQogIH0KfQo=
B64
chmod 644 $HOME/.config/omarchy/plugins/bluecry/BarWidget.qml

# --- Panel.qml -> $HOME/.config/omarchy/plugins/bluecry/Panel.qml
base64 -d > $HOME/.config/omarchy/plugins/bluecry/Panel.qml <<'B64'
aW1wb3J0IFF0UXVpY2sKaW1wb3J0IFF1aWNrc2hlbGwKaW1wb3J0IFF1aWNrc2hlbGwuSW8KaW1wb3J0IHFzLkNvbW1vbnMKaW1wb3J0IHFzLlVpCmltcG9ydCAiTW9kZWwuanMiIGFzIE1vZGVsCgpQYW5lbCB7CiAgaWQ6IHJvb3QKICBtb2R1bGVOYW1lOiAibWF0YXRvbi5ibHVlY3J5IgogIGlwY1RhcmdldDogIm1hdGF0b24uYmx1ZWNyeSIKICBtYW5hZ2VJcGM6IGZhbHNlCgogIHByb3BlcnR5IHZhciBhbmNob3JJdGVtOiBudWxsCiAgcHJvcGVydHkgYm9vbCBvcGVuZWRGcm9tSG90a2V5OiBmYWxzZQogIHByb3BlcnR5IHZhciBob3N0V2lkZ2V0OiBudWxsCiAgcmVhZG9ubHkgcHJvcGVydHkgdmFyIGJhcklkZW50aXR5OiBob3N0V2lkZ2V0IHx8IHJvb3QKCiAgZnVuY3Rpb24gb3BlbigpIHsKICAgIG9wZW5lZEZyb21Ib3RrZXkgPSBmYWxzZQogICAgcm9vdC5jb250cm9sbGVyLnNob3coKQogICAgcm9vdC5yZWZyZXNoKCkKICB9CgogIGZ1bmN0aW9uIG9wZW5Gcm9tSG90a2V5KCkgewogICAgb3BlbmVkRnJvbUhvdGtleSA9IHRydWUKICAgIHJvb3QuY29udHJvbGxlci5zaG93KCkKICAgIHJvb3QucmVmcmVzaCgpCiAgICBRdC5jYWxsTGF0ZXIoZnVuY3Rpb24oKSB7CiAgICAgIGlmIChyb290Lm9wZW5lZCkgc2V0Q2VudGVySG92ZXJSZXZlYWxTdXBwcmVzc2VkKHRydWUpCiAgICB9KQogIH0KCiAgZnVuY3Rpb24gY2xvc2UoKSB7CiAgICBzZXRDZW50ZXJIb3ZlclJldmVhbFN1cHByZXNzZWQoZmFsc2UpCiAgICByb290LmNvbnRyb2xsZXIuaGlkZSgpCiAgfQoKICBmdW5jdGlvbiB0b2dnbGUoKSB7CiAgICBpZiAocm9vdC5vcGVuZWQpIHJvb3QuY2xvc2UoKQogICAgZWxzZSByb290Lm9wZW5Gcm9tSG90a2V5KCkKICB9CgogIGZ1bmN0aW9uIHNldENlbnRlckhvdmVyUmV2ZWFsU3VwcHJlc3NlZCh2YWx1ZSkgewogICAgaWYgKHJvb3QuYmFyICYmICJjZW50ZXJIb3ZlclJldmVhbFN1cHByZXNzZWQiIGluIHJvb3QuYmFyKQogICAgICByb290LmJhci5jZW50ZXJIb3ZlclJldmVhbFN1cHByZXNzZWQgPSB2YWx1ZQogIH0KCiAgLy8gLS0tLSBkYXRhIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIHJlYWRvbmx5IHByb3BlcnR5IHN0cmluZyB0ZXJtOiAib21hcmNoeSIKICByZWFkb25seSBwcm9wZXJ0eSBzdHJpbmcgZmVlZFVybDoKICAgICJodHRwczovL2JsdWVjcnkubGV0dGVybGFzaC5jb20vYXBpL2ZlZWQvIiArIHRlcm0gKyAiP21vZGU9aGF0ZXJzJmxpbWl0PTUiCgogIHByb3BlcnR5IGludCBoYXRlVG90YWw6IDAKICAvLyBKdXN0IHRoZSBnbHlwaCDigJQgbm8gY291bnRzLCBrZWVwIHRoZSBwaWxsIGNvbXBhY3QuCiAgcHJvcGVydHkgc3RyaW5nIGxhYmVsOiAiXHVGMDcxIgoKICBMaXN0TW9kZWwgeyBpZDogaGF0ZU1vZGVsIH0KCiAgZnVuY3Rpb24gcmVmcmVzaCgpIHsKICAgIGlmICghZmVlZFByb2MucnVubmluZykgZmVlZFByb2MucnVubmluZyA9IHRydWUKICB9CgogIFRpbWVyIHsKICAgIGludGVydmFsOiA2MDAwMAogICAgcnVubmluZzogdHJ1ZQogICAgcmVwZWF0OiB0cnVlCiAgICB0cmlnZ2VyZWRPblN0YXJ0OiB0cnVlCiAgICBvblRyaWdnZXJlZDogcm9vdC5yZWZyZXNoKCkKICB9CgogIFByb2Nlc3MgewogICAgaWQ6IGZlZWRQcm9jCiAgICBjb21tYW5kOiBbImN1cmwiLCAiLWZzUyIsICItLW1heC10aW1lIiwgIjgiLCByb290LmZlZWRVcmxdCiAgICBzdGRvdXQ6IFN0ZGlvQ29sbGVjdG9yIHsKICAgICAgd2FpdEZvckVuZDogdHJ1ZQogICAgICBvblN0cmVhbUZpbmlzaGVkOiB7CiAgICAgICAgdmFyIHJhdyA9IFN0cmluZyh0ZXh0IHx8ICIiKS50cmltKCkKICAgICAgICBpZiAoIXJhdykgcmV0dXJuCiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhciBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdykKICAgICAgICAgIE1vZGVsLmZpbGxNb2RlbChoYXRlTW9kZWwsIHBhcnNlZCwgNSkKICAgICAgICAgIHJvb3QuaGF0ZVRvdGFsID0gcGFyc2VJbnQocGFyc2VkLnRvdGFsLCAxMCkgfHwgMAogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIC8vIEtlZXAgbGFzdC1nb29kIGRhdGEgdmlzaWJsZTsgdGhlIHRpbWVyIHJldHJpZXMgaW4gYSBtaW51dGUuCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvcGVuUG9zdCh1cmwpIHsKICAgIGlmICh1cmwgPT09ICIiKSByZXR1cm4KICAgIG9wZW5Qcm9jLmNvbW1hbmQgPSBbInhkZy1vcGVuIiwgdXJsXQogICAgb3BlblByb2MucnVubmluZyA9IHRydWUKICB9CgogIFByb2Nlc3MgewogICAgaWQ6IG9wZW5Qcm9jCiAgfQoKICAvLyAtLS0tIHBvcHVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgS2V5Ym9hcmRQYW5lbCB7CiAgICBpZDogcGFuZWwKICAgIGFuY2hvckl0ZW06IHJvb3QuYW5jaG9ySXRlbQogICAgb3duZXI6IHJvb3QuYmFySWRlbnRpdHkKICAgIGJhcjogcm9vdC5iYXIKICAgIG9wZW46IHJvb3Qub3BlbmVkCiAgICBjZW50ZXJPbkJhcjogdHJ1ZQogICAgZm9jdXNUYXJnZXQ6IGtleUNhdGNoZXIKICAgIGNvbnRlbnRXaWR0aDogcGFuZWwuZml0dGVkQ29udGVudFdpZHRoKFN0eWxlLnNwYWNlKDQ2MCkpCiAgICBjb250ZW50SGVpZ2h0OiBwYW5lbC5maXR0ZWRDb250ZW50SGVpZ2h0KGxpc3RDb2x1bW4uaW1wbGljaXRIZWlnaHQpCgogICAgUGFuZWxLZXlDYXRjaGVyIHsKICAgICAgaWQ6IGtleUNhdGNoZXIKICAgICAgYW5jaG9ycy5maWxsOiBwYXJlbnQKICAgICAgb25DbG9zZVJlcXVlc3RlZDogcm9vdC5jbG9zZSgpCgogICAgICBGbGlja2FibGUgewogICAgICAgIGFuY2hvcnMuZmlsbDogcGFyZW50CiAgICAgICAgY29udGVudFdpZHRoOiB3aWR0aAogICAgICAgIGNvbnRlbnRIZWlnaHQ6IGxpc3RDb2x1bW4uaW1wbGljaXRIZWlnaHQKICAgICAgICBjbGlwOiB0cnVlCiAgICAgICAgYm91bmRzQmVoYXZpb3I6IEZsaWNrYWJsZS5TdG9wQXRCb3VuZHMKICAgICAgICBpbnRlcmFjdGl2ZTogY29udGVudEhlaWdodCA+IGhlaWdodAoKICAgICAgICBDb2x1bW4gewogICAgICAgICAgaWQ6IGxpc3RDb2x1bW4KICAgICAgICAgIHdpZHRoOiBwYXJlbnQud2lkdGgKICAgICAgICAgIHNwYWNpbmc6IFN0eWxlLnNwYWNlKDEwKQoKICAgICAgICAgIC8vIEhlYWRlcgogICAgICAgICAgVGV4dCB7CiAgICAgICAgICAgIHRleHRGb3JtYXQ6IFRleHQuUGxhaW5UZXh0CiAgICAgICAgICAgIHRleHQ6ICgiTEFTVCA1IEhBVEVSUyBcdTAwQjcgIiArIHJvb3QudGVybSkudG9VcHBlckNhc2UoKQogICAgICAgICAgICBjb2xvcjogUXQuZGFya2VyKHJvb3QuYmFyLmZvcmVncm91bmQsIDEuNCkKICAgICAgICAgICAgZm9udC5mYW1pbHk6IHJvb3QuYmFyLmZvbnRGYW1pbHkKICAgICAgICAgICAgZm9udC5waXhlbFNpemU6IFN0eWxlLmZvbnQuYm9keVNtYWxsCiAgICAgICAgICAgIGZvbnQubGV0dGVyU3BhY2luZzogMQogICAgICAgICAgICBhbmNob3JzLmxlZnQ6IHBhcmVudC5sZWZ0CiAgICAgICAgICAgIGFuY2hvcnMubGVmdE1hcmdpbjogU3R5bGUuc3BhY2UoMTYpCiAgICAgICAgICAgIGFuY2hvcnMudG9wTWFyZ2luOiBTdHlsZS5zcGFjZSg0KQogICAgICAgICAgfQoKICAgICAgICAgIFJlcGVhdGVyIHsKICAgICAgICAgICAgbW9kZWw6IGhhdGVNb2RlbAoKICAgICAgICAgICAgUmVjdGFuZ2xlIHsKICAgICAgICAgICAgICBpZDogcG9zdENhcmQKCiAgICAgICAgICAgICAgcmVxdWlyZWQgcHJvcGVydHkgaW50IGluZGV4CiAgICAgICAgICAgICAgcmVxdWlyZWQgcHJvcGVydHkgc3RyaW5nIGhhbmRsZQogICAgICAgICAgICAgIHJlcXVpcmVkIHByb3BlcnR5IGludCBhbmdyeQogICAgICAgICAgICAgIHJlcXVpcmVkIHByb3BlcnR5IHN0cmluZyB0ZXh0CiAgICAgICAgICAgICAgcmVxdWlyZWQgcHJvcGVydHkgc3RyaW5nIHVybAogICAgICAgICAgICAgIHJlcXVpcmVkIHByb3BlcnR5IGJvb2wgZXhwYW5kZWQKCiAgICAgICAgICAgICAgd2lkdGg6IHBhcmVudC53aWR0aAogICAgICAgICAgICAgIGhlaWdodDogcm93Q29sLmltcGxpY2l0SGVpZ2h0ICsgU3R5bGUuc3BhY2UoMTIpCiAgICAgICAgICAgICAgcmFkaXVzOiBTdHlsZS5jb3JuZXJSYWRpdXMKICAgICAgICAgICAgICBjb2xvcjogcG9zdEFyZWEuY29udGFpbnNNb3VzZSA/IFN0eWxlLmhvdmVyRmlsbEZvcihyb290LmJhci5mb3JlZ3JvdW5kLCBDb2xvci5hY2NlbnQpIDogInRyYW5zcGFyZW50IgoKICAgICAgICAgICAgICAvLyBSb3cgY2xpY2sgb3BlbnMgdGhlIHBvc3QuIERlY2xhcmVkIEJFRk9SRSB0aGUgY29udGVudCBjb2x1bW4sCiAgICAgICAgICAgICAgLy8gc28gdGhlIGV4cGFuZCBsaW5rIChpbnNpZGUgcm93Q29sKSBzdGFja3Mgb24gdG9wIG9mIGl0IGFuZAogICAgICAgICAgICAgIC8vIHdpbnMgY2xpY2tzIGluIGl0cyBsaXR0bGUgY29ybmVyLgogICAgICAgICAgICAgIE1vdXNlQXJlYSB7CiAgICAgICAgICAgICAgICBpZDogcG9zdEFyZWEKICAgICAgICAgICAgICAgIGFuY2hvcnMuZmlsbDogcGFyZW50CiAgICAgICAgICAgICAgICBob3ZlckVuYWJsZWQ6IHRydWUKICAgICAgICAgICAgICAgIGN1cnNvclNoYXBlOiBRdC5Qb2ludGluZ0hhbmRDdXJzb3IKICAgICAgICAgICAgICAgIG9uQ2xpY2tlZDogcm9vdC5vcGVuUG9zdChwb3N0Q2FyZC51cmwpCiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBDb2x1bW4gewogICAgICAgICAgICAgICAgaWQ6IHJvd0NvbAogICAgICAgICAgICAgICAgYW5jaG9ycy5sZWZ0OiBwYXJlbnQubGVmdAogICAgICAgICAgICAgICAgYW5jaG9ycy5yaWdodDogcGFyZW50LnJpZ2h0CiAgICAgICAgICAgICAgICBhbmNob3JzLnRvcDogcGFyZW50LnRvcAogICAgICAgICAgICAgICAgYW5jaG9ycy5tYXJnaW5zOiBTdHlsZS5zcGFjZSg4KQogICAgICAgICAgICAgICAgc3BhY2luZzogU3R5bGUuc3BhY2UoMykKCiAgICAgICAgICAgICAgICBSb3cgewogICAgICAgICAgICAgICAgICBzcGFjaW5nOiBTdHlsZS5zcGFjZSg4KQoKICAgICAgICAgICAgICAgICAgLy8gQW5ncnkgc2NvcmUgcGlwczogZmlsbGVkIHNxdWFyZXMgb3V0IG9mIDUuCiAgICAgICAgICAgICAgICAgIFJvdyB7CiAgICAgICAgICAgICAgICAgICAgc3BhY2luZzogMgogICAgICAgICAgICAgICAgICAgIGFuY2hvcnMudmVydGljYWxDZW50ZXI6IHBhcmVudC52ZXJ0aWNhbENlbnRlcgoKICAgICAgICAgICAgICAgICAgICBSZXBlYXRlciB7CiAgICAgICAgICAgICAgICAgICAgICBtb2RlbDogNQoKICAgICAgICAgICAgICAgICAgICAgIFJlY3RhbmdsZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkIHByb3BlcnR5IGludCBpbmRleAogICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogNwogICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDcKICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiAyCiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMudmVydGljYWxDZW50ZXI6IHBhcmVudC52ZXJ0aWNhbENlbnRlcgogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogaW5kZXggPCBwb3N0Q2FyZC5hbmdyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAiI2Y0MjEyZSIgOiBRdC5kYXJrZXIocm9vdC5iYXIuZm9yZWdyb3VuZCwgMS42KQogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgVGV4dCB7CiAgICAgICAgICAgICAgICAgICAgdGV4dEZvcm1hdDogVGV4dC5QbGFpblRleHQKICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiQCIgKyBwb3N0Q2FyZC5oYW5kbGUKICAgICAgICAgICAgICAgICAgICBjb2xvcjogcm9vdC5iYXIuZm9yZWdyb3VuZAogICAgICAgICAgICAgICAgICAgIGZvbnQuZmFtaWx5OiByb290LmJhci5mb250RmFtaWx5CiAgICAgICAgICAgICAgICAgICAgZm9udC5waXhlbFNpemU6IFN0eWxlLmZvbnQuYm9keQogICAgICAgICAgICAgICAgICAgIGZvbnQuYm9sZDogdHJ1ZQogICAgICAgICAgICAgICAgICAgIGVsaWRlOiBUZXh0LkVsaWRlUmlnaHQKICAgICAgICAgICAgICAgICAgICBhbmNob3JzLnZlcnRpY2FsQ2VudGVyOiBwYXJlbnQudmVydGljYWxDZW50ZXIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIFRleHQgewogICAgICAgICAgICAgICAgICBpZDogcG9zdFRleHQKICAgICAgICAgICAgICAgICAgd2lkdGg6IHBhcmVudC53aWR0aAogICAgICAgICAgICAgICAgICB0ZXh0Rm9ybWF0OiBUZXh0LlBsYWluVGV4dAogICAgICAgICAgICAgICAgICB0ZXh0OiBwb3N0Q2FyZC50ZXh0CiAgICAgICAgICAgICAgICAgIGNvbG9yOiBRdC5kYXJrZXIocm9vdC5iYXIuZm9yZWdyb3VuZCwgMS4yNSkKICAgICAgICAgICAgICAgICAgZm9udC5mYW1pbHk6IHJvb3QuYmFyLmZvbnRGYW1pbHkKICAgICAgICAgICAgICAgICAgZm9udC5waXhlbFNpemU6IFN0eWxlLmZvbnQuYm9keVNtYWxsCiAgICAgICAgICAgICAgICAgIHdyYXBNb2RlOiBUZXh0LldyYXBBbnl3aGVyZQogICAgICAgICAgICAgICAgICBtYXhpbXVtTGluZUNvdW50OiBwb3N0Q2FyZC5leHBhbmRlZCA/IDQwIDogMwogICAgICAgICAgICAgICAgICBlbGlkZTogVGV4dC5FbGlkZVJpZ2h0CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gRXhwYW5kL2NvbGxhcHNlIOKAlCBvbmx5IG9mZmVyZWQgd2hlbiB0aGUgcHJldmlldyBhY3R1YWxseQogICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGVkIHRoZSBtZXNzYWdlLgogICAgICAgICAgICAgICAgVGV4dCB7CiAgICAgICAgICAgICAgICAgIHZpc2libGU6IHBvc3RUZXh0LnRydW5jYXRlZCB8fCBwb3N0Q2FyZC5leHBhbmRlZAogICAgICAgICAgICAgICAgICB0ZXh0Rm9ybWF0OiBUZXh0LlBsYWluVGV4dAogICAgICAgICAgICAgICAgICB0ZXh0OiBwb3N0Q2FyZC5leHBhbmRlZCA/ICJzaG93IGxlc3MgXHUyNUI0IiA6ICJzaG93IG1vcmUgXHUyNUJFIgogICAgICAgICAgICAgICAgICBjb2xvcjogQ29sb3IuYWNjZW50CiAgICAgICAgICAgICAgICAgIGZvbnQuZmFtaWx5OiByb290LmJhci5mb250RmFtaWx5CiAgICAgICAgICAgICAgICAgIGZvbnQucGl4ZWxTaXplOiBTdHlsZS5mb250LmJvZHlTbWFsbAogICAgICAgICAgICAgICAgICBmb250Lml0YWxpYzogdHJ1ZQoKICAgICAgICAgICAgICAgICAgTW91c2VBcmVhIHsKICAgICAgICAgICAgICAgICAgICBhbmNob3JzLmZpbGw6IHBhcmVudAogICAgICAgICAgICAgICAgICAgIGN1cnNvclNoYXBlOiBRdC5Qb2ludGluZ0hhbmRDdXJzb3IKICAgICAgICAgICAgICAgICAgICBvbkNsaWNrZWQ6IGhhdGVNb2RlbC5zZXRQcm9wZXJ0eShwb3N0Q2FyZC5pbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwYW5kZWQiLCAhcG9zdENhcmQuZXhwYW5kZWQpCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICBUZXh0IHsKICAgICAgICAgICAgdmlzaWJsZTogaGF0ZU1vZGVsLmNvdW50ID09PSAwCiAgICAgICAgICAgIHRleHQ6ICJObyBoYXRlcnMgb24gdGhlIHdhbGwgeWV0LiIKICAgICAgICAgICAgY29sb3I6IFF0LmRhcmtlcihyb290LmJhci5mb3JlZ3JvdW5kLCAxLjUpCiAgICAgICAgICAgIGZvbnQuZmFtaWx5OiByb290LmJhci5mb250RmFtaWx5CiAgICAgICAgICAgIGZvbnQucGl4ZWxTaXplOiBTdHlsZS5mb250LmJvZHlTbWFsbAogICAgICAgICAgICBmb250Lml0YWxpYzogdHJ1ZQogICAgICAgICAgICBhbmNob3JzLmxlZnQ6IHBhcmVudC5sZWZ0CiAgICAgICAgICAgIGFuY2hvcnMubGVmdE1hcmdpbjogU3R5bGUuc3BhY2UoMTYpCiAgICAgICAgICB9CgogICAgICAgICAgSXRlbSB7IHdpZHRoOiAxOyBoZWlnaHQ6IFN0eWxlLnNwYWNlKDYpIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn0K
B64
chmod 644 $HOME/.config/omarchy/plugins/bluecry/Panel.qml

# --- Model.js -> $HOME/.config/omarchy/plugins/bluecry/Model.js
base64 -d > $HOME/.config/omarchy/plugins/bluecry/Model.js <<'B64'
Ly8gUHVyZSBwYXJzaW5nL2Zvcm1hdHRpbmcgaGVscGVycyBmb3IgdGhlIGJsdWVjcnkgZmVlZCBBUEkgcmVzcG9uc2UuCi8vIExvYWRhYmxlIHN0YW5kYWxvbmUgKG5vZGUvUU1MKSBzbyB0aGUgUU1MIHN0YXlzIGRlY2xhcmF0aXZlLgoKLy8gRmlsbCBhIExpc3RNb2RlbCB3aXRoIHRoZSBsYXRlc3QgaGF0ZSBwb3N0cy4gRnVsbCB0ZXh0IGlzIGtlcHQg4oCUIHRoZQovLyBkZWxlZ2F0ZSBwcmV2aWV3cyBpdCAoMyBsaW5lcywgZWxpZGVkKSBhbmQgZXhwYW5kcyBpbiBwbGFjZSBvbiBkZW1hbmQuCmZ1bmN0aW9uIGZpbGxNb2RlbChtb2RlbCwgcGF5bG9hZCwgbGltaXQpIHsKICAgIG1vZGVsLmNsZWFyKCkKICAgIHZhciBwb3N0cyA9IHBheWxvYWQgJiYgcGF5bG9hZC5wb3N0cyA/IHBheWxvYWQucG9zdHMgOiBbXQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3N0cy5sZW5ndGggJiYgaSA8IGxpbWl0OyBpKyspIHsKICAgICAgICB2YXIgcCA9IHBvc3RzW2ldCiAgICAgICAgbW9kZWwuYXBwZW5kKHsKICAgICAgICAgICAgaGFuZGxlOiBTdHJpbmcocC5oYW5kbGUgfHwgInVua25vd24iKSwKICAgICAgICAgICAgYW5ncnk6IHBhcnNlSW50KHAuYW5ncnksIDEwKSB8fCAwLAogICAgICAgICAgICB0ZXh0OiBTdHJpbmcocC50cmFuc2xhdGlvbiB8fCBwLnRleHQgfHwgIiIpLnJlcGxhY2UoL1xzKy9nLCAiICIpLnRyaW0oKSwKICAgICAgICAgICAgdXJsOiBTdHJpbmcocC51cmwgfHwgIiIpLAogICAgICAgICAgICBleHBhbmRlZDogZmFsc2UKICAgICAgICB9KQogICAgfQp9CgpmdW5jdGlvbiB3aGVuTGFiZWwoY3JlYXRlZEF0KSB7CiAgICAvLyBjcmVhdGVkX2F0IGlzIGFuIElTTyBzdHJpbmc7IGtlZXAgaXQgc2hvcnQgYW5kIGh1bWJsZS4KICAgIGlmICghY3JlYXRlZEF0KSByZXR1cm4gIiIKICAgIHJldHVybiBTdHJpbmcoY3JlYXRlZEF0KS5zbGljZSgwLCAxMCkKfQo=
B64
chmod 644 $HOME/.config/omarchy/plugins/bluecry/Model.js

# Plain user-level commands (work everywhere; PATH includes ~/.local/bin).
ln -sf omarchy-bluecry-notify "$HOME/.local/bin/bluecry-notify"
ln -sf omarchy-bluecry-digest "$HOME/.local/bin/bluecry-digest"

# --- omarchy CLI routing ----------------------------------------------------
# The `omarchy` router only probes ITS OWN directory (dirname of the omarchy
# binary), never ~/.local/bin. Route `omarchy bluecry ...` only when we can
# write there; otherwise print the opt-in sudo command instead of running it
# from inside a piped script.
ROUTED="no"
if command -v omarchy >/dev/null 2>&1; then
  OMARCHY_BIN_DIR="$(cd "$(dirname "$(command -v omarchy)")" && pwd)"
  if [[ -w $OMARCHY_BIN_DIR ]]; then
    install -m755 "$HOME/.local/bin/omarchy-bluecry-notify" "$OMARCHY_BIN_DIR/"
    install -m755 "$HOME/.local/bin/omarchy-bluecry-digest" "$OMARCHY_BIN_DIR/"
    ROUTED="yes"
  else
    echo "==> optional: enable 'omarchy bluecry' routes (needs sudo):"
    echo "    sudo install -m755 ~/.local/bin/omarchy-bluecry-{notify,digest} '$OMARCHY_BIN_DIR/'"
  fi
fi

if command -v systemctl >/dev/null 2>&1; then
  systemctl --user daemon-reload
  systemctl --user enable --now bluecry-notify.service
  systemctl --user enable --now bluecry-digest.timer
  echo "==> watcher:    systemctl --user status bluecry-notify"
  echo "==> digest now: systemctl --user start bluecry-digest.service"
else
  echo "!! systemd user session not found; units written but not enabled" >&2
fi

# --- shell plugin (bar pill + last-5-haters popup) --------------------------
# Written into ~/.config/omarchy/plugins/bluecry/ above — same layout
# `omarchy plugin add` would clone. Rescan, then enable into the right bar
# section; both best-effort so a headless run never fails the install.
PLUGIN_ENABLED="no"
if command -v omarchy >/dev/null 2>&1; then
  omarchy-shell shell rescanPlugins >/dev/null 2>&1 || true
  if omarchy plugin enable mataton.bluecry --section right >/dev/null 2>&1; then
    PLUGIN_ENABLED="yes"
    echo "==> bar widget enabled (right section): fire pill shows the wall total,"
    echo "    click it for the last 5 hate messages"
  else
    echo "==> enable the bar widget manually: omarchy plugin enable mataton.bluecry --section right"
  fi
  # The running shell keeps loaded QML in memory — rescanPlugins alone does
  # not reload it. Restart the shell only when the plugin QML changed.
  if [[ -n $OLD_PLUGIN_HASH ]]; then
    NEW_PLUGIN_HASH=$(cat "$HOME/.config/omarchy/plugins/bluecry/Panel.qml" "$HOME/.config/omarchy/plugins/bluecry/BarWidget.qml" | md5sum)
    SHELL_RUNNING=$(pgrep -f "omarchy-shell|quickshell" >/dev/null 2>&1 && echo yes || echo no)
    if [[ $OLD_PLUGIN_HASH != "$NEW_PLUGIN_HASH" && $SHELL_RUNNING == "yes" ]]; then
      echo "==> plugin QML changed; restarting the shell to load it"
      omarchy restart shell >/dev/null 2>&1 || true
    fi
  fi
fi

echo "==> done. run it manually with:"
if [[ $ROUTED == "yes" ]]; then
  echo "    omarchy bluecry notify --help"
else
  echo "    bluecry-notify --help"
fi
