Skip to content

Doorbell Popup

doorbell-popup opens a Home Assistant more-info camera popup as an Omarchy webapp and positions it as a floating Hyprland window. It can run once, or watch a Home Assistant entity and open the popup when that entity turns on.

Both public host overrides expose a permanent open-only popup on:

SUPER+ALT+C

Both hosts use the same mobile-sized bottom-right geometry on the active workspace’s monitor. Nothing is forced to a host-specific monitor or workspace.

The script defaults to:

SettingDefault
Motion entityinput_boolean.doorbell
Camera entitycamera.front_door_snapshot
Home Assistant URLhttp://homeassistant.local:8123
Target workspaceActive workspace
Size380x500
Duration20 seconds

The popup URL is built as:

<base-url>/lovelace/home?more-info-entity-id=<camera-entity>

Open the popup and exit:

Terminal window
doorbell-popup --open-only

Keep it open instead of scheduling the auto-close timer:

Terminal window
doorbell-popup --open-only --no-auto-close

Focus the popup after opening or repositioning:

Terminal window
doorbell-popup --open-only --focus-popup

Run without --open-only to watch the motion entity:

Terminal window
doorbell-popup

Watch mode uses:

Terminal window
go-automate ha bridge watch entity --bar-json --icon '' input_boolean.doorbell

When the emitted JSON has class on, the popup opens or repositions.

doorbell-popup uses the focused monitor by default, keeping the popup on the active workspace. Explicit flags override that:

  • --monitor <name> targets that monitor.
  • --workspace <id> moves the popup to that workspace and uses its monitor.

doorbell-popup delegates geometry to launch-floating-webapp, the same global command used by shell webapp clicks. It places the exact launched window in the target monitor’s bottom-right corner and accounts for output scale and reserved areas.

Terminal window
doorbell-popup --open-only --monitor DP-1 --width 380 --height 500
doorbell-popup --entity input_boolean.doorbell --camera-entity camera.front_door_snapshot
doorbell-popup --base-url http://homeassistant.local:8123 --workspace 1
doorbell-popup --duration 30 --margin 20 --bottom-margin 12

Numeric values must be positive integers.

Simulate one on event:

Terminal window
doorbell-popup --simulate-event on --simulate-exit

Force the startup simulation path:

Terminal window
doorbell-popup --force-motion-true --simulate-exit

The script stores the last popup address at:

${XDG_RUNTIME_DIR:-/tmp}/doorbell-popup.address

If that address still exists, the script repositions the existing popup instead of opening a duplicate. If the address is stale, it removes the file.

  1. Test with doorbell-popup --open-only first.
  2. Add --monitor, --width, and --height until placement is right.
  3. Test the event path with --simulate-event on --simulate-exit.
  4. Run watch mode only after the open-once path works.

If the script exits immediately, check required commands:

Terminal window
command -v go-automate hyprctl jq launch-floating-webapp

If placement is on the wrong monitor, pass --monitor <name> and verify monitor names with:

Terminal window
hyprctl -j monitors

If no event opens the popup, check the entity stream directly:

Terminal window
go-automate ha bridge watch entity --bar-json --icon '' input_boolean.doorbell

If the popup keeps reusing a dead address, remove the runtime file:

Terminal window
rm -f "${XDG_RUNTIME_DIR:-/tmp}/doorbell-popup.address"