### Description
This patch adds river-control-unstable-v1 support to dwl.
This protocol allows sending args to dwl to execute functions via the included dwlctl.
This is used to allow changing rules and binds, at runtime via dwlctl.

Most of this patch is stored in river-control.h, It contains a list of functions which can be called via dwlctl so adding support for new functions is as simple as adding them to the list.
Also Note this is also the case for keys in keybinds so you may need to modify that list as well if you use a layout that uses a diffrent keycode, or just a key not included in that list.

This patches main intended use case is to have a startup script that calls dwlctl a bunch to add all the binds/rules you want, without the need of restarting dwl if you make any changes to the list of binds/rules.

### dwlctl syntax example
```
dwlctl clear-binds

dwlctl bind super,shift Return spawn kitty tmux

dwlctl bind supershift q killclient

dwlctl clear-rules

dwlctl rule-add -appid steam -title steam float tags $((1 << 2))

dwlctl rule-add -appid kitty float

dwlctl rule-add -title firefox float

dwlctl spawn kitty tmux

dwlctl setlayout 2

dwlctl togglefullscreen
```

### Download
- [git branch](/zuki/dwl-ctl/src/main) 
- [0.7](/dwl/dwl-patches/raw/branch/main/patches/riverctl/riverctl.patch)
- [main 2025-07-29](/dwl/dwl-patches/raw/branch/main/patches/riverctl/riverctl.patch)
### Authors - latest at top [Codeberg nick is mandatory; other contact methods optional]
- [zuki](https://codeberg.org/zuki)
  zukirust@gmail.com
  zuki at [Libera IRC dwl channel](https://web.libera.chat/?channels=#dwl)
  #zukigay at [dwl Discord](https://discord.gg/jJxZnrGPWN)
