diff options
Diffstat (limited to 'cros-keyboard-map.py')
-rwxr-xr-x | cros-keyboard-map.py | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/cros-keyboard-map.py b/cros-keyboard-map.py new file mode 100755 index 0000000..fb27a06 --- /dev/null +++ b/cros-keyboard-map.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 + +def vivaldi_scancode_to_keyd(scancode): + match scancode: + case "90": + return "previoussong" + case "91": + return "zoom" + case "92": + return "scale" + case "93": + return "print" + case "94": + return "brightnessdown" + case "95": + return "brightnessup" + case "97": + return "kbdillumdown" + case "98": + return "kbdillumup" + case "99": + return "nextsong" + case "9A": + return "playpause" + case "9B": + return "micmute" + case "9E": + return "kbdillumtoggle" + case "A0": + return "mute" + case "AE": + return "volumedown" + case "B0": + return "volumeup" + case "E9": + return "forward" + case "EA": + return "back" + case "E7": + return "refresh" + +def load_physmap_data(): + try: + with open("/sys/bus/platform/devices/i8042/serio0/function_row_physmap", "r") as file: + return file.read().strip().split() + except FileNotFoundError: + return "" + +def create_keyd_config(physmap): + config = "" + config += """[ids] +0001:0001 + +[main] +""" + # make fn keys act like vivaldi keys when super isn't held + i = 0 + for scancode in physmap: + i += 1 + config += f"f{i} = {vivaldi_scancode_to_keyd(scancode)}\n" + config += "\n" + + # make vivaldi keys act like vivaldi keys when super isn't held + i = 0 + for scancode in physmap: + i += 1 + config += f"{vivaldi_scancode_to_keyd(scancode)} = {vivaldi_scancode_to_keyd(scancode)}\n" + + # make fn keys act like fn keys when super is held + i = 0 + config += "\n[meta]\n" + for scancode in physmap: + i += 1 + config += f"f{i} = f{i}\n" + + # make vivaldi keys act like like fn keys when super is held + i = 0 + config += "\n" + for scancode in physmap: + i += 1 + config += f"{vivaldi_scancode_to_keyd(scancode)} = f{i}\n" + + # Add various extra shortcuts + config += """\n[alt] +backspace = delete +meta = capslock +brightnessdown = kbdillumdown +brightnessup = kbdillumup +f6 = kbdillumdown +f7 = kbdillumup + +[control] +f5 = print +scale = print + +[control+alt] +backspace = C-A-delete""" + + return config + +def main(): + physmap = load_physmap_data() + if not physmap: + print("no function row mapping found, using default mapping") + physmap = ['EA', 'E9', 'E7', '91', '92', '94', '95', 'A0', 'AE', 'B0'] + + config = create_keyd_config(physmap) + with open("cros.conf", "w") as conf: + conf.write(config) + +main() |