diff --git a/modules/home/system/shell.nix b/modules/home/system/shell.nix index 0dd81db..3336369 100644 --- a/modules/home/system/shell.nix +++ b/modules/home/system/shell.nix @@ -244,6 +244,58 @@ EOF fi ${pkgs.gum}/bin/gum spin --spinner dot --title "Posting to Bluesky..." -- /bin/bash <&2 + return 1 + fi + else + did="\$identifier" + fi + + # Resolve DID document + local pds_endpoint="" + if [[ "\$did" =~ ^did:plc: ]]; then + # Resolve via PLC directory + pds_endpoint=\$(${pkgs.curl}/bin/curl -sf "https://plc.directory/\$did" | ${pkgs.jq}/bin/jq -r '.service[] | select(.type == "AtprotoPersonalDataServer") | .serviceEndpoint' | head -n1) + elif [[ "\$did" =~ ^did:web: ]]; then + # Resolve via did:web + local domain="\''${did#did:web:}" + pds_endpoint=\$(${pkgs.curl}/bin/curl -sf "https://\$domain/.well-known/did.json" | ${pkgs.jq}/bin/jq -r '.service[] | select(.type == "AtprotoPersonalDataServer") | .serviceEndpoint' | head -n1) + else + echo "Unsupported DID method: \$did" >&2 + return 1 + fi + + if [[ -z "\$pds_endpoint" ]]; then + echo "Failed to resolve PDS endpoint for: \$did" >&2 + return 1 + fi + + echo "\$pds_endpoint" + } + + # Resolve PDS endpoints for both accounts + account1_pds=\$(resolve_pds "$ACCOUNT1") + if [[ -z "\$account1_pds" ]]; then + echo "Failed to resolve PDS for $ACCOUNT1" >&2 + exit 1 + fi + + account2_pds=\$(resolve_pds "$ACCOUNT2") + if [[ -z "\$account2_pds" ]]; then + echo "Failed to resolve PDS for $ACCOUNT2" >&2 + exit 1 + fi + # Generate JWT for ACCOUNT1 account1_response=\$(${pkgs.curl}/bin/curl -s -X POST \ -H "Content-Type: application/json" \ @@ -251,9 +303,10 @@ EOF "identifier": "'$ACCOUNT1'", "password": "'$ACCOUNT1_PASSWORD'" }' \ - "https://bsky.social/xrpc/com.atproto.server.createSession") + "\$account1_pds/xrpc/com.atproto.server.createSession") account1_jwt=\$(echo "\$account1_response" | ${pkgs.jq}/bin/jq -r '.accessJwt') + account1_did=\$(echo "\$account1_response" | ${pkgs.jq}/bin/jq -r '.did') if [[ -z "\$account1_jwt" || "\$account1_jwt" == "null" ]]; then echo "Failed to authenticate account $ACCOUNT1" >&2 @@ -268,9 +321,10 @@ EOF "identifier": "'$ACCOUNT2'", "password": "'$ACCOUNT2_PASSWORD'" }' \ - "https://bsky.social/xrpc/com.atproto.server.createSession") + "\$account2_pds/xrpc/com.atproto.server.createSession") account2_jwt=\$(echo "\$account2_response" | ${pkgs.jq}/bin/jq -r '.accessJwt') + account2_did=\$(echo "\$account2_response" | ${pkgs.jq}/bin/jq -r '.did') if [[ -z "\$account2_jwt" || "\$account2_jwt" == "null" ]]; then echo "Failed to authenticate account $ACCOUNT2" >&2 @@ -284,14 +338,14 @@ EOF -H "Authorization: Bearer \$account1_jwt" \ -d '{ "collection": "a.status.update", - "repo": "'$ACCOUNT1'", + "repo": "'\$account1_did'", "record": { "\$type": "a.status.update", "text": "'"$message"'", "createdAt": "'\$(date -u +"%Y-%m-%dT%H:%M:%SZ")'" } }' \ - "https://bsky.social/xrpc/com.atproto.repo.createRecord") + "\$account1_pds/xrpc/com.atproto.repo.createRecord") if [[ \$(echo "\$account1_post_response" | ${pkgs.jq}/bin/jq -r 'has("error")') == "true" ]]; then echo "Error posting to $ACCOUNT1:" >&2 @@ -305,14 +359,14 @@ EOF -H "Authorization: Bearer \$account2_jwt" \ -d '{ "collection": "app.bsky.feed.post", - "repo": "'$ACCOUNT2'", + "repo": "'\$account2_did'", "record": { "\$type": "app.bsky.feed.post", "text": "'"$message"'", "createdAt": "'\$(date -u +"%Y-%m-%dT%H:%M:%SZ")'" } }' \ - "https://bsky.social/xrpc/com.atproto.repo.createRecord") + "\$account2_pds/xrpc/com.atproto.repo.createRecord") if [[ \$(echo "\$account2_post_response" | ${pkgs.jq}/bin/jq -r 'has("error")') == "true" ]]; then echo "Error posting to $ACCOUNT2:" >&2 diff --git a/secrets/bluesky.age b/secrets/bluesky.age index 229db16..5071e73 100644 --- a/secrets/bluesky.age +++ b/secrets/bluesky.age @@ -1,23 +1,13 @@ age-encryption.org/v1 -> ssh-rsa DqcG0Q -Pge+V9a56y8YOA2Fz7MaiCSqcX2TeRlz62BoLTdhilyPc1GduRy7cuVDOLEVxa3x -53qj2JeB4xRpTM8bVzUR4AavOxFLcDaGGe+FbbwvpCIMMECY80KZ9QfDs3X41UIJ -bjoTn0yPhu+hunNYAAfmuVEZQ6OhG8cfGJKIzGKf2TIksbIlfywGhOruTlugBl8n -PwK7rS0p2cGRtr4bECchPn5kFqIDERpQEcCZmuh6sGmp54Kmo7aZu3cpzHyl/oM/ -RtChCUTkUu4tGTjc52LdSSWKC8beVN0MLIn0X+Q3yIp9tBZ5ivZR6CX4OGaAEOqq -BuiMeZt4hh61NoAL5fsF5nEbAogE7WkedJw7qEyUy7YxGAEk+Djo8+CbniVzVCOv -SmLCNhzbeSUxjp8OR6TWKXNpUG4TQwihzV8ube4eg848U4UOBTGGFvI7OmfoPeLF -QNATwMOQIAP43UqP01Z13gwKNHLN6x3SIG0lD0m4h9i0icfjv5xi9PLL+bx36OGt +G6XSVQgjB/AIMCoiFqWwVt8GV6RxDO/IEuRULaAvG2t71MnOBrbhE+30EvPwL3Wv +3vJf3p9wtkYZao7jJbcGE9jTPIgso5P5G8W4P5/HGqzPZFfyALFRQUBLCGztbUBV +NsgqWP3YmuuNmFglkeiyOa0DKNCpITIr2nRyDELtkN7t3iif8EGbxqfu9ptUZKVN ++H3VRAfYfpJJ3f4GYZJU9pu1ygGlBb4KAL6oizy7VHUYHTR98uAWmHh/MSz+gPgM +GZhsk+j2j/YTDMDsaxxm63gfOIXUSRHVhsFXs0aotr8AyLb8jz4Ui6p0iL4Tor+d +T/Nv+GPwoMok1mvsxL+72qNhftM5UJ2cGn38m9oNGtUg4BUiBhg6cGK/UmoFO9RT +jTH68X7ShpUOxhHXZTntSUvhMrvaZf+Bmlt40esAPuA+qnwCOEY28bMH+Eme+EMl +6X15PzB5OMY+U3gQeL+wnEuHIHOyeyxDnSHvnk0YdXi6A7vRyw1vv78RqxjcSW3e --> ssh-rsa DqcG0Q -H7u1sn3dQfYRkkYWx2MI+1jyAvbWRN7hzonZwpQaojZiyn2pV7CMTtW3E33obKAU -SGbx5cn8/DWhNRg1/1Mw/d5mTDmesnu/rknOhYpTa1du6jWMymLL40MPD0hDgvNw -LmKI3cElDqJ+ITHhg3iKwH0OuAeT8iN3c5k9nmaHj7C7r8AClgQUcnt+XloA9YFU -thulreu9yxc3owKOobzcu8ZdyFDwX4Qyl+lmfzZIFZC1cW8gjPa99cPYua3Ai++A -myS3sB7xpwdVNK89m1O/qbTQyl9PdqHrkBaknNvpmJ+DPCQTKk7NrtYuioFCyBod -5+GxmP2qEhwkhWh5hRtI0qjvPxV7YzqUBMbBkafbjBDlyUOmCf8oVrR8sv45pdQw -7FpyCoquVR5IiEpFDjr8dRRYwbzSxT0BW6f7ZAmIwquPOrhet2ObKRkveyye01QO -PgNw5P4Xg6f8aKFANI3k6yPrY/2JyoHoqjLVBVov+08jKf5uqRNtLMhjnQ1QHPND - ---- T/3m+ZxB3rLlgVKpPtvZTO2yrdNWs6vgFlKYmz4IIaI -0�Q��\7��s�Hv�*��܌����::��P8�7�r��e�A�&L`��?��x���V2���Dax��mH���.H䂠5LF]g��(Y�8 �_SȊ��oW햸G�w��j ��v�k|����[�EǻM⏙@��й� Z�j�wJ� \ No newline at end of file +--- CAoxMY3YNS+Gl8JOnNgT1QWW+9KnzrJajWISy1EPSCw +/��V�@�����B�����q,�GOaL`Mᘛnͣ�;e0��Kw�'9 ew�9��l�����:ԍD��ܡd�|&؉�q�E�ƕ����EI�h�a)�H��f�!���a5�y$ػ��:��B<Ƌt΅���$��;����0ʹ���[�"� \ No newline at end of file