get_active_profile should be a profile_is_active() instead. Better than
comparing pointers for equality.

resolutions have a "default" and an "active" setting, we currently treat
them the same.

resolution is currently a single value, some mice have x/y resolution
separate.

resolution bits need a has_capability() for changing report rate and
changing x/y separately.

buttons need a couple of has_capability() functions to check which action
types and actions are possible

light support:
- on/off
- color
- patterns

some epollfd-like thing for the caller to check if events are available.
Needed for notification when the mouse changes through someone else
manipulating settings.
