I encountered the same issue, so I created a simple app that switches input sources with just a single click of the Fn button, without any pop-ups or delays. You can find the app on GitHub: https://github.com/Nikeev/LangSwitch.
Previously, I used the Karabiner-Elements app to achieve this goal. I added a custom rule to the Complex Modifications that allowed me to switch between Russian and English input sources (although it could be any input source)
"rules": [
{
"description": "Fn to russian <-> english",
"manipulators": [
{
"conditions": [
{
"input_sources": [
{
"input_source_id": "^com\\.apple\\.keylayout\\.ABC$"
}
],
"type": "input_source_if"
}
],
"from": {
"apple_vendor_top_case_key_code": "keyboard_fn",
"modifiers": {
"optional": [
"any"
]
}
},
"to": [
{
"select_input_source": {
"input_source_id": "^com\\.apple\\.keylayout\\.Russian$"
}
}
],
"type": "basic"
},
{
"conditions": [
{
"input_sources": [
{
"input_source_id": "^com\\.apple\\.keylayout\\.Russian$"
}
],
"type": "input_source_if"
}
],
"from": {
"apple_vendor_top_case_key_code": "keyboard_fn",
"modifiers": {
"optional": [
"any"
]
}
},
"to": [
{
"select_input_source": {
"input_source_id": "^com\\.apple\\.keylayout\\.ABC$"
}
}
],
"type": "basic"
}
]
}
]
},