Solved it.
I had to use pacmd set-default-sink rather than pactl set-card-profile. To be able to use it in a script, you must export PULSE_RUNTIME_PATH also. Create /usr/local/bin/hdmi_sound_toggle:
#!/bin/sh
HDMI_STATUS=`cat /sys/class/drm/card0/card0-HDMI-A-1/status`
export PULSE_RUNTIME_PATH="/run/user/1000/pulse/"
if [ $HDMI_STATUS = "connected" ]
then
sudo -u zed -E pacmd set-default-sink 0
else
sudo -u zed -E pacmd set-default-sink 1
fi
Where zed is my username and 1000 is my UID.
chmod the file to 0755.
Create a udev rule at /etc/udev/rules.d/hdmi_sound.rule as sudo:
SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/hdmi_sound_toggle"
Restart udev rules:
sudo udevadm control --reload
You can test that the udev rules works using udevadm monitor --property.