Yeah, I don't think there's anything guaranteeing that the groups will end up on different screens. I think what you're seeing is undefined behavior. If kitty and qutebrowser are assigned to different specific groups, you could add a few lines in your `startup_once` function that would move the groups to different screens. Something like:
import libqtile
qtile = libqtile.qtile
group_kitty = qtile.group_map['name of kitty group']
group_qutebrowser = qtile.group_map['name of qutebrowser group']
if ( (len(qtile.screens) > 1) and # there are more than 1 screens
(group_kitty.screen != None or group_qutebrowser.screen != None) and # at least one of them is on a screen
(group_kitty.screen == group_qutebrowser.screen) ): # they're on the same screen
for screen in qtile.screens:
if screen not in [group_kitty.screen, group_qutebrowser.screen]:
if screen != group_kitty.screen:
group_kitty.to_screen(screen)
elif screen != group_qutebrowser.screen:
group_qutebrowser.to_screen(screen)
should work I think.
Thanks,