# simple green background
output * background #559911 solid_color
-# keyboard layout
-input * xkb_layout "us"
+# keyboard layout – to be switched with ~/.profile.d/kb
+input * xkb_layout "us,de"
# deactivate t490s touchpad
input 1267:47:Elan_Touchpad events disabled
#!/usr/bin/env python3
'Sway bar status line generator.'
from datetime import datetime
-from json import dumps as json_dumps
+from json import dumps as json_dumps, loads as json_loads
from pathlib import Path
from re import compile as re_compile
from subprocess import run as subprocess_run
CLIP_LEN_MAX = 32
MSG_CLIPBOARD_EMPTY = 'Nothing is copied'
+KB_LAYOUTS = ('us', 'de') # keep in sync with sway config's xkb_layout
+
AUDIO_DEVS_LABELS = (('sink', 'vol'),
('source', '--mic'))
return datetime.now().astimezone().strftime('%Y-%m-%d %H:%M:%S %z/%Z')
+def info_layout(
+ ) -> str:
+ 'Produce two-character name of active keyboard layout.'
+ inputs = json_loads(subprocess_run(('swaymsg', '-t', 'get_inputs', '-r'),
+ capture_output=True,
+ check=True).stdout)
+ indices = {dev['xkb_active_layout_index']
+ for dev in inputs if 'xkb_active_layout_index' in dev}
+ assert len(indices) == 1
+ return KB_LAYOUTS[indices.pop()]
+
+
def info_network(
) -> tuple[str, ...]:
'Produce one status block full_text per connected ethernet/wifi interface.'
info_battery(),
info_thermal(),
info_datetime(),
+ info_layout(),
info_audio())]),
end=',\n', flush=True)
sleep(1)