using System;
using Artemis.Core.Services;
using Artemis.UI.Linux.Providers.Input;

namespace Artemis.UI.Linux.Utilities;

public static class InputUtilities
{
    public static KeyboardKey KeyFromKeyCode(LinuxKeyboardKeyCodes code)
    {
        return code switch
        {
            LinuxKeyboardKeyCodes.KEY_ESC => KeyboardKey.Escape,
            LinuxKeyboardKeyCodes.KEY_1 => KeyboardKey.D1,
            LinuxKeyboardKeyCodes.KEY_2 => KeyboardKey.D2,
            LinuxKeyboardKeyCodes.KEY_3 => KeyboardKey.D3,
            LinuxKeyboardKeyCodes.KEY_4 => KeyboardKey.D4,
            LinuxKeyboardKeyCodes.KEY_5 => KeyboardKey.D5,
            LinuxKeyboardKeyCodes.KEY_6 => KeyboardKey.D6,
            LinuxKeyboardKeyCodes.KEY_7 => KeyboardKey.D7,
            LinuxKeyboardKeyCodes.KEY_8 => KeyboardKey.D8,
            LinuxKeyboardKeyCodes.KEY_9 => KeyboardKey.D9,
            LinuxKeyboardKeyCodes.KEY_0 => KeyboardKey.D0,
            LinuxKeyboardKeyCodes.KEY_MINUS => KeyboardKey.OemMinus,
            LinuxKeyboardKeyCodes.KEY_EQUAL => KeyboardKey.OemPlus,
            LinuxKeyboardKeyCodes.KEY_BACKSPACE => KeyboardKey.Backspace,
            LinuxKeyboardKeyCodes.KEY_TAB => KeyboardKey.Tab,
            LinuxKeyboardKeyCodes.KEY_Q => KeyboardKey.Q,
            LinuxKeyboardKeyCodes.KEY_W => KeyboardKey.W,
            LinuxKeyboardKeyCodes.KEY_E => KeyboardKey.E,
            LinuxKeyboardKeyCodes.KEY_R => KeyboardKey.R,
            LinuxKeyboardKeyCodes.KEY_T => KeyboardKey.T,
            LinuxKeyboardKeyCodes.KEY_Y => KeyboardKey.Y,
            LinuxKeyboardKeyCodes.KEY_U => KeyboardKey.U,
            LinuxKeyboardKeyCodes.KEY_I => KeyboardKey.I,
            LinuxKeyboardKeyCodes.KEY_O => KeyboardKey.O,
            LinuxKeyboardKeyCodes.KEY_P => KeyboardKey.P,
            LinuxKeyboardKeyCodes.KEY_LEFTBRACE => KeyboardKey.OemOpenBrackets,
            LinuxKeyboardKeyCodes.KEY_RIGHTBRACE => KeyboardKey.OemCloseBrackets,
            LinuxKeyboardKeyCodes.KEY_ENTER => KeyboardKey.Enter,
            LinuxKeyboardKeyCodes.KEY_LEFTCTRL => KeyboardKey.LeftCtrl,
            LinuxKeyboardKeyCodes.KEY_A => KeyboardKey.A,
            LinuxKeyboardKeyCodes.KEY_S => KeyboardKey.S,
            LinuxKeyboardKeyCodes.KEY_D => KeyboardKey.D,
            LinuxKeyboardKeyCodes.KEY_F => KeyboardKey.F,
            LinuxKeyboardKeyCodes.KEY_G => KeyboardKey.G,
            LinuxKeyboardKeyCodes.KEY_H => KeyboardKey.H,
            LinuxKeyboardKeyCodes.KEY_J => KeyboardKey.J,
            LinuxKeyboardKeyCodes.KEY_K => KeyboardKey.K,
            LinuxKeyboardKeyCodes.KEY_L => KeyboardKey.L,
            LinuxKeyboardKeyCodes.KEY_SEMICOLON => KeyboardKey.OemSemicolon,
            LinuxKeyboardKeyCodes.KEY_APOSTROPHE => KeyboardKey.OemQuotes,
            LinuxKeyboardKeyCodes.KEY_GRAVE => KeyboardKey.OemTilde,
            LinuxKeyboardKeyCodes.KEY_LEFTSHIFT => KeyboardKey.LeftShift,
            LinuxKeyboardKeyCodes.KEY_BACKSLASH => KeyboardKey.OemPipe,
            LinuxKeyboardKeyCodes.KEY_Z => KeyboardKey.Z,
            LinuxKeyboardKeyCodes.KEY_X => KeyboardKey.X,
            LinuxKeyboardKeyCodes.KEY_C => KeyboardKey.C,
            LinuxKeyboardKeyCodes.KEY_V => KeyboardKey.V,
            LinuxKeyboardKeyCodes.KEY_B => KeyboardKey.B,
            LinuxKeyboardKeyCodes.KEY_N => KeyboardKey.N,
            LinuxKeyboardKeyCodes.KEY_M => KeyboardKey.M,
            LinuxKeyboardKeyCodes.KEY_COMMA => KeyboardKey.OemComma,
            LinuxKeyboardKeyCodes.KEY_DOT => KeyboardKey.OemPeriod,
            LinuxKeyboardKeyCodes.KEY_SLASH => KeyboardKey.OemQuestion,
            LinuxKeyboardKeyCodes.KEY_RIGHTSHIFT => KeyboardKey.RightShift,
            //LinuxKeyboardKeyCodes.KEY_KPASTERISK => ,
            LinuxKeyboardKeyCodes.KEY_LEFTALT => KeyboardKey.LeftAlt,
            LinuxKeyboardKeyCodes.KEY_SPACE => KeyboardKey.Space,
            LinuxKeyboardKeyCodes.KEY_CAPSLOCK => KeyboardKey.CapsLock,
            LinuxKeyboardKeyCodes.KEY_F1 => KeyboardKey.F1,
            LinuxKeyboardKeyCodes.KEY_F2 => KeyboardKey.F2,
            LinuxKeyboardKeyCodes.KEY_F3 => KeyboardKey.F3,
            LinuxKeyboardKeyCodes.KEY_F4 => KeyboardKey.F4,
            LinuxKeyboardKeyCodes.KEY_F5 => KeyboardKey.F5,
            LinuxKeyboardKeyCodes.KEY_F6 => KeyboardKey.F6,
            LinuxKeyboardKeyCodes.KEY_F7 => KeyboardKey.F7,
            LinuxKeyboardKeyCodes.KEY_F8 => KeyboardKey.F8,
            LinuxKeyboardKeyCodes.KEY_F9 => KeyboardKey.F9,
            LinuxKeyboardKeyCodes.KEY_F10 => KeyboardKey.F10,
            LinuxKeyboardKeyCodes.KEY_NUMLOCK => KeyboardKey.NumLock,
            LinuxKeyboardKeyCodes.KEY_SCROLLLOCK => KeyboardKey.ScrollLock,
            LinuxKeyboardKeyCodes.KEY_KP7 => KeyboardKey.NumPad7,
            LinuxKeyboardKeyCodes.KEY_KP8 => KeyboardKey.NumPad8,
            LinuxKeyboardKeyCodes.KEY_KP9 => KeyboardKey.NumPad9,
            LinuxKeyboardKeyCodes.KEY_KPMINUS => KeyboardKey.NumPadSubtract,
            LinuxKeyboardKeyCodes.KEY_KP4 => KeyboardKey.NumPad4,
            LinuxKeyboardKeyCodes.KEY_KP5 => KeyboardKey.NumPad5,
            LinuxKeyboardKeyCodes.KEY_KP6 => KeyboardKey.NumPad6,
            LinuxKeyboardKeyCodes.KEY_KPPLUS => KeyboardKey.NumPadAdd,
            LinuxKeyboardKeyCodes.KEY_KP1 => KeyboardKey.NumPad1,
            LinuxKeyboardKeyCodes.KEY_KP2 => KeyboardKey.NumPad2,
            LinuxKeyboardKeyCodes.KEY_KP3 => KeyboardKey.NumPad3,
            LinuxKeyboardKeyCodes.KEY_KP0 => KeyboardKey.NumPad0,
            LinuxKeyboardKeyCodes.KEY_KPDOT => KeyboardKey.NumPadDecimal,
            // LinuxKeyboardKeyCodes.KEY_ZENKAKUHANKAKU => expr,
            LinuxKeyboardKeyCodes.KEY_102ND => KeyboardKey.OemBackslash,
            LinuxKeyboardKeyCodes.KEY_F11 => KeyboardKey.F11,
            LinuxKeyboardKeyCodes.KEY_F12 => KeyboardKey.F12,
            //LinuxKeyboardKeyCodes.KEY_RO => expr,
            // LinuxKeyboardKeyCodes.KEY_KATAKANA => expr,
            // LinuxKeyboardKeyCodes.KEY_HIRAGANA => expr,
            // LinuxKeyboardKeyCodes.KEY_HENKAN => expr,
            // LinuxKeyboardKeyCodes.KEY_KATAKANAHIRAGANA => expr,
            // LinuxKeyboardKeyCodes.KEY_MUHENKAN => expr,
            // LinuxKeyboardKeyCodes.KEY_KPJPCOMMA => expr,
            LinuxKeyboardKeyCodes.KEY_KPENTER => KeyboardKey.NumPadEnter,
            LinuxKeyboardKeyCodes.KEY_RIGHTCTRL => KeyboardKey.RightCtrl,
            LinuxKeyboardKeyCodes.KEY_KPSLASH => KeyboardKey.NumPadDivide,
            LinuxKeyboardKeyCodes.KEY_SYSRQ => KeyboardKey.PrintScreen,
            LinuxKeyboardKeyCodes.KEY_RIGHTALT => KeyboardKey.RightAlt,
            LinuxKeyboardKeyCodes.KEY_HOME => KeyboardKey.Home,
            LinuxKeyboardKeyCodes.KEY_UP => KeyboardKey.ArrowUp,
            LinuxKeyboardKeyCodes.KEY_PAGEUP => KeyboardKey.PageUp,
            LinuxKeyboardKeyCodes.KEY_LEFT => KeyboardKey.ArrowLeft,
            LinuxKeyboardKeyCodes.KEY_RIGHT => KeyboardKey.ArrowRight,
            LinuxKeyboardKeyCodes.KEY_END => KeyboardKey.End,
            LinuxKeyboardKeyCodes.KEY_DOWN => KeyboardKey.ArrowDown,
            LinuxKeyboardKeyCodes.KEY_PAGEDOWN => KeyboardKey.PageDown,
            LinuxKeyboardKeyCodes.KEY_INSERT => KeyboardKey.Insert,
            LinuxKeyboardKeyCodes.KEY_DELETE => KeyboardKey.Delete,
            // LinuxKeyboardKeyCodes.KEY_MACRO => KeyboardKey.macro,
            LinuxKeyboardKeyCodes.KEY_MUTE => KeyboardKey.VolumeMute,
            LinuxKeyboardKeyCodes.KEY_VOLUMEDOWN => KeyboardKey.VolumeDown,
            LinuxKeyboardKeyCodes.KEY_VOLUMEUP => KeyboardKey.VolumeUp,
            // LinuxKeyboardKeyCodes.KEY_POWER => KeyboardKey.power,
            LinuxKeyboardKeyCodes.KEY_KPEQUAL => KeyboardKey.NumPadEnter, //todo: ?
            // LinuxKeyboardKeyCodes.KEY_KPPLUSMINUS => KeyboardKey.numpad,
            LinuxKeyboardKeyCodes.KEY_PAUSE => KeyboardKey.PauseBreak,
            // LinuxKeyboardKeyCodes.KEY_SCALE => KeyboardKey.scal,
            // LinuxKeyboardKeyCodes.KEY_KPCOMMA => KeyboardKey.ke,
            // LinuxKeyboardKeyCodes.KEY_HANGEUL => expr,
            // LinuxKeyboardKeyCodes.KEY_HANJA => expr,
            // LinuxKeyboardKeyCodes.KEY_YEN => expr,
            LinuxKeyboardKeyCodes.KEY_LEFTMETA => KeyboardKey.LeftWin,
            LinuxKeyboardKeyCodes.KEY_RIGHTMETA => KeyboardKey.RightWin,
            LinuxKeyboardKeyCodes.KEY_COMPOSE => KeyboardKey.Application,
            LinuxKeyboardKeyCodes.KEY_STOP => KeyboardKey.MediaStop,
            // LinuxKeyboardKeyCodes.KEY_AGAIN => ,
            // LinuxKeyboardKeyCodes.KEY_PROPS => expr,
            // LinuxKeyboardKeyCodes.KEY_UNDO => expr,
            // LinuxKeyboardKeyCodes.KEY_FRONT => expr,
            // LinuxKeyboardKeyCodes.KEY_COPY => expr,
            // LinuxKeyboardKeyCodes.KEY_OPEN => expr,
            // LinuxKeyboardKeyCodes.KEY_PASTE => expr,
            // LinuxKeyboardKeyCodes.KEY_FIND => expr,
            // LinuxKeyboardKeyCodes.KEY_CUT => expr,
            // LinuxKeyboardKeyCodes.KEY_HELP => expr,
            // LinuxKeyboardKeyCodes.KEY_MENU => expr,
            // LinuxKeyboardKeyCodes.KEY_CALC => expr,
            // LinuxKeyboardKeyCodes.KEY_SETUP => expr,
            // LinuxKeyboardKeyCodes.KEY_SLEEP => expr,
            // LinuxKeyboardKeyCodes.KEY_WAKEUP => expr,
            // LinuxKeyboardKeyCodes.KEY_FILE => expr,
            // LinuxKeyboardKeyCodes.KEY_SENDFILE => expr,
            // LinuxKeyboardKeyCodes.KEY_DELETEFILE => expr,
            // LinuxKeyboardKeyCodes.KEY_XFER => expr,
            // LinuxKeyboardKeyCodes.KEY_PROG1 => expr,
            // LinuxKeyboardKeyCodes.KEY_PROG2 => expr,
            // LinuxKeyboardKeyCodes.KEY_WWW => expr,
            // LinuxKeyboardKeyCodes.KEY_MSDOS => expr,
            // LinuxKeyboardKeyCodes.KEY_COFFEE => expr,
            // LinuxKeyboardKeyCodes.KEY_ROTATE_DISPLAY => expr,
            // LinuxKeyboardKeyCodes.KEY_CYCLEWINDOWS => expr,
            // LinuxKeyboardKeyCodes.KEY_MAIL => expr,
            // LinuxKeyboardKeyCodes.KEY_BOOKMARKS => expr,
            // LinuxKeyboardKeyCodes.KEY_COMPUTER => expr,
            // LinuxKeyboardKeyCodes.KEY_BACK => expr,
            // LinuxKeyboardKeyCodes.KEY_FORWARD => expr,
            // LinuxKeyboardKeyCodes.KEY_CLOSECD => expr,
            // LinuxKeyboardKeyCodes.KEY_EJECTCD => expr,
            // LinuxKeyboardKeyCodes.KEY_EJECTCLOSECD => expr,
            // LinuxKeyboardKeyCodes.KEY_NEXTSONG => expr,
            // LinuxKeyboardKeyCodes.KEY_PLAYPAUSE => expr,
            // LinuxKeyboardKeyCodes.KEY_PREVIOUSSONG => expr,
            // LinuxKeyboardKeyCodes.KEY_STOPCD => expr,
            // LinuxKeyboardKeyCodes.KEY_RECORD => expr,
            // LinuxKeyboardKeyCodes.KEY_REWIND => expr,
            // LinuxKeyboardKeyCodes.KEY_PHONE => expr,
            // LinuxKeyboardKeyCodes.KEY_ISO => expr,
            // LinuxKeyboardKeyCodes.KEY_CONFIG => expr,
            // LinuxKeyboardKeyCodes.KEY_HOMEPAGE => expr,
            // LinuxKeyboardKeyCodes.KEY_REFRESH => expr,
            // LinuxKeyboardKeyCodes.KEY_EXIT => expr,
            // LinuxKeyboardKeyCodes.KEY_MOVE => expr,
            // LinuxKeyboardKeyCodes.KEY_EDIT => expr,
            // LinuxKeyboardKeyCodes.KEY_SCROLLUP => expr,
            // LinuxKeyboardKeyCodes.KEY_SCROLLDOWN => expr,
            // LinuxKeyboardKeyCodes.KEY_KPLEFTPAREN => expr,
            // LinuxKeyboardKeyCodes.KEY_KPRIGHTPAREN => expr,
            // LinuxKeyboardKeyCodes.KEY_NEW => expr,
            // LinuxKeyboardKeyCodes.KEY_REDO => expr,
            // LinuxKeyboardKeyCodes.KEY_F13 => expr,
            // LinuxKeyboardKeyCodes.KEY_F14 => expr,
            // LinuxKeyboardKeyCodes.KEY_F15 => expr,
            // LinuxKeyboardKeyCodes.KEY_F16 => expr,
            // LinuxKeyboardKeyCodes.KEY_F17 => expr,
            // LinuxKeyboardKeyCodes.KEY_F18 => expr,
            // LinuxKeyboardKeyCodes.KEY_F19 => expr,
            // LinuxKeyboardKeyCodes.KEY_F20 => expr,
            // LinuxKeyboardKeyCodes.KEY_F21 => expr,
            // LinuxKeyboardKeyCodes.KEY_F22 => expr,
            // LinuxKeyboardKeyCodes.KEY_F23 => expr,
            // LinuxKeyboardKeyCodes.KEY_F24 => expr,
            // LinuxKeyboardKeyCodes.KEY_PLAYCD => expr,
            // LinuxKeyboardKeyCodes.KEY_PAUSECD => expr,
            // LinuxKeyboardKeyCodes.KEY_PROG3 => expr,
            // LinuxKeyboardKeyCodes.KEY_PROG4 => expr,
            // LinuxKeyboardKeyCodes.KEY_DASHBOARD => expr,
            // LinuxKeyboardKeyCodes.KEY_SUSPEND => expr,
            // LinuxKeyboardKeyCodes.KEY_CLOSE => expr,
            // LinuxKeyboardKeyCodes.KEY_PLAY => expr,
            // LinuxKeyboardKeyCodes.KEY_FASTFORWARD => expr,
            // LinuxKeyboardKeyCodes.KEY_BASSBOOST => expr,
            // LinuxKeyboardKeyCodes.KEY_PRINT => expr,
            // LinuxKeyboardKeyCodes.KEY_HP => expr,
            // LinuxKeyboardKeyCodes.KEY_CAMERA => expr,
            // LinuxKeyboardKeyCodes.KEY_SOUND => expr,
            // LinuxKeyboardKeyCodes.KEY_QUESTION => expr,
            // LinuxKeyboardKeyCodes.KEY_EMAIL => expr,
            // LinuxKeyboardKeyCodes.KEY_CHAT => expr,
            // LinuxKeyboardKeyCodes.KEY_SEARCH => expr,
            // LinuxKeyboardKeyCodes.KEY_CONNECT => expr,
            // LinuxKeyboardKeyCodes.KEY_FINANCE => expr,
            // LinuxKeyboardKeyCodes.KEY_SPORT => expr,
            // LinuxKeyboardKeyCodes.KEY_SHOP => expr,
            // LinuxKeyboardKeyCodes.KEY_ALTERASE => expr,
            // LinuxKeyboardKeyCodes.KEY_CANCEL => expr,
            // LinuxKeyboardKeyCodes.KEY_BRIGHTNESSDOWN => expr,
            // LinuxKeyboardKeyCodes.KEY_BRIGHTNESSUP => expr,
            // LinuxKeyboardKeyCodes.KEY_MEDIA => expr,
            // LinuxKeyboardKeyCodes.KEY_SWITCHVIDEOMODE => expr,
            // LinuxKeyboardKeyCodes.KEY_KBDILLUMTOGGLE => expr,
            // LinuxKeyboardKeyCodes.KEY_KBDILLUMDOWN => expr,
            // LinuxKeyboardKeyCodes.KEY_KBDILLUMUP => expr,
            // LinuxKeyboardKeyCodes.KEY_SEND => expr,
            // LinuxKeyboardKeyCodes.KEY_REPLY => expr,
            // LinuxKeyboardKeyCodes.KEY_FORWARDMAIL => expr,
            // LinuxKeyboardKeyCodes.KEY_SAVE => expr,
            // LinuxKeyboardKeyCodes.KEY_DOCUMENTS => expr,
            // LinuxKeyboardKeyCodes.KEY_BATTERY => expr,
            // LinuxKeyboardKeyCodes.KEY_BLUETOOTH => expr,
            // LinuxKeyboardKeyCodes.KEY_WLAN => expr,
            // LinuxKeyboardKeyCodes.KEY_UWB => expr,
            // LinuxKeyboardKeyCodes.KEY_UNKNOWN => expr,
            // LinuxKeyboardKeyCodes.KEY_VIDEO_NEXT => expr,
            // LinuxKeyboardKeyCodes.KEY_VIDEO_PREV => expr,
            // LinuxKeyboardKeyCodes.KEY_BRIGHTNESS_CYCLE => expr,
            // LinuxKeyboardKeyCodes.KEY_BRIGHTNESS_AUTO => expr,
            // LinuxKeyboardKeyCodes.KEY_WWAN => expr,
            // LinuxKeyboardKeyCodes.KEY_RFKILL => expr,
            // LinuxKeyboardKeyCodes.KEY_MICMUTE => expr,
            // LinuxKeyboardKeyCodes.BTN_MISC => expr,
            // LinuxKeyboardKeyCodes.BTN_1 => expr,
            // LinuxKeyboardKeyCodes.BTN_2 => expr,
            // LinuxKeyboardKeyCodes.BTN_3 => expr,
            // LinuxKeyboardKeyCodes.BTN_4 => expr,
            // LinuxKeyboardKeyCodes.BTN_5 => expr,
            // LinuxKeyboardKeyCodes.BTN_6 => expr,
            // LinuxKeyboardKeyCodes.BTN_7 => expr,
            // LinuxKeyboardKeyCodes.BTN_8 => expr,
            // LinuxKeyboardKeyCodes.BTN_9 => expr,
            // LinuxKeyboardKeyCodes.BTN_MOUSE => expr,
            // LinuxKeyboardKeyCodes.BTN_RIGHT => expr,
            // LinuxKeyboardKeyCodes.BTN_MIDDLE => expr,
            // LinuxKeyboardKeyCodes.BTN_SIDE => expr,
            // LinuxKeyboardKeyCodes.BTN_EXTRA => expr,
            // LinuxKeyboardKeyCodes.BTN_FORWARD => expr,
            // LinuxKeyboardKeyCodes.BTN_BACK => expr,
            // LinuxKeyboardKeyCodes.BTN_TASK => expr,
            // LinuxKeyboardKeyCodes.BTN_JOYSTICK => expr,
            // LinuxKeyboardKeyCodes.BTN_THUMB => expr,
            // LinuxKeyboardKeyCodes.BTN_THUMB2 => expr,
            // LinuxKeyboardKeyCodes.BTN_TOP => expr,
            // LinuxKeyboardKeyCodes.BTN_TOP2 => expr,
            // LinuxKeyboardKeyCodes.BTN_PINKIE => expr,
            // LinuxKeyboardKeyCodes.BTN_BASE => expr,
            // LinuxKeyboardKeyCodes.BTN_BASE2 => expr,
            // LinuxKeyboardKeyCodes.BTN_BASE3 => expr,
            // LinuxKeyboardKeyCodes.BTN_BASE4 => expr,
            // LinuxKeyboardKeyCodes.BTN_BASE5 => expr,
            // LinuxKeyboardKeyCodes.BTN_BASE6 => expr,
            // LinuxKeyboardKeyCodes.BTN_DEAD => expr,
            // LinuxKeyboardKeyCodes.BTN_GAMEPAD => expr,
            // LinuxKeyboardKeyCodes.BTN_EAST => expr,
            // LinuxKeyboardKeyCodes.BTN_C => expr,
            // LinuxKeyboardKeyCodes.BTN_NORTH => expr,
            // LinuxKeyboardKeyCodes.BTN_WEST => expr,
            // LinuxKeyboardKeyCodes.BTN_Z => expr,
            // LinuxKeyboardKeyCodes.BTN_TL => expr,
            // LinuxKeyboardKeyCodes.BTN_TR => expr,
            // LinuxKeyboardKeyCodes.BTN_TL2 => expr,
            // LinuxKeyboardKeyCodes.BTN_TR2 => expr,
            // LinuxKeyboardKeyCodes.BTN_SELECT => expr,
            // LinuxKeyboardKeyCodes.BTN_START => expr,
            // LinuxKeyboardKeyCodes.BTN_MODE => expr,
            // LinuxKeyboardKeyCodes.BTN_THUMBL => expr,
            // LinuxKeyboardKeyCodes.BTN_THUMBR => expr,
            // LinuxKeyboardKeyCodes.BTN_DIGI => expr,
            // LinuxKeyboardKeyCodes.BTN_TOOL_RUBBER => expr,
            // LinuxKeyboardKeyCodes.BTN_TOOL_BRUSH => expr,
            // LinuxKeyboardKeyCodes.BTN_TOOL_PENCIL => expr,
            // LinuxKeyboardKeyCodes.BTN_TOOL_AIRBRUSH => expr,
            // LinuxKeyboardKeyCodes.BTN_TOOL_FINGER => expr,
            // LinuxKeyboardKeyCodes.BTN_TOOL_MOUSE => expr,
            // LinuxKeyboardKeyCodes.BTN_TOOL_LENS => expr,
            // LinuxKeyboardKeyCodes.BTN_TOOL_QUINTTAP => expr,
            // LinuxKeyboardKeyCodes.BTN_STYLUS3 => expr,
            // LinuxKeyboardKeyCodes.BTN_TOUCH => expr,
            // LinuxKeyboardKeyCodes.BTN_STYLUS => expr,
            // LinuxKeyboardKeyCodes.BTN_STYLUS2 => expr,
            // LinuxKeyboardKeyCodes.BTN_TOOL_DOUBLETAP => expr,
            // LinuxKeyboardKeyCodes.BTN_TOOL_TRIPLETAP => expr,
            // LinuxKeyboardKeyCodes.BTN_TOOL_QUADTAP => expr,
            // LinuxKeyboardKeyCodes.BTN_WHEEL => expr,
            // LinuxKeyboardKeyCodes.BTN_GEAR_UP => expr,
            // LinuxKeyboardKeyCodes.KEY_OK => expr,
            // LinuxKeyboardKeyCodes.KEY_SELECT => expr,
            // LinuxKeyboardKeyCodes.KEY_GOTO => expr,
            // LinuxKeyboardKeyCodes.KEY_CLEAR => expr,
            // LinuxKeyboardKeyCodes.KEY_POWER2 => expr,
            // LinuxKeyboardKeyCodes.KEY_OPTION => expr,
            // LinuxKeyboardKeyCodes.KEY_INFO => expr,
            // LinuxKeyboardKeyCodes.KEY_TIME => expr,
            // LinuxKeyboardKeyCodes.KEY_VENDOR => expr,
            // LinuxKeyboardKeyCodes.KEY_ARCHIVE => expr,
            // LinuxKeyboardKeyCodes.KEY_PROGRAM => expr,
            // LinuxKeyboardKeyCodes.KEY_CHANNEL => expr,
            // LinuxKeyboardKeyCodes.KEY_FAVORITES => expr,
            // LinuxKeyboardKeyCodes.KEY_EPG => expr,
            // LinuxKeyboardKeyCodes.KEY_PVR => expr,
            // LinuxKeyboardKeyCodes.KEY_MHP => expr,
            // LinuxKeyboardKeyCodes.KEY_LANGUAGE => expr,
            // LinuxKeyboardKeyCodes.KEY_TITLE => expr,
            // LinuxKeyboardKeyCodes.KEY_SUBTITLE => expr,
            // LinuxKeyboardKeyCodes.KEY_ANGLE => expr,
            // LinuxKeyboardKeyCodes.KEY_FULL_SCREEN => expr,
            // LinuxKeyboardKeyCodes.KEY_MODE => expr,
            // LinuxKeyboardKeyCodes.KEY_KEYBOARD => expr,
            // LinuxKeyboardKeyCodes.KEY_ASPECT_RATIO => expr,
            // LinuxKeyboardKeyCodes.KEY_PC => expr,
            // LinuxKeyboardKeyCodes.KEY_TV => expr,
            // LinuxKeyboardKeyCodes.KEY_TV2 => expr,
            // LinuxKeyboardKeyCodes.KEY_VCR => expr,
            // LinuxKeyboardKeyCodes.KEY_VCR2 => expr,
            // LinuxKeyboardKeyCodes.KEY_SAT => expr,
            // LinuxKeyboardKeyCodes.KEY_SAT2 => expr,
            // LinuxKeyboardKeyCodes.KEY_CD => expr,
            // LinuxKeyboardKeyCodes.KEY_TAPE => expr,
            // LinuxKeyboardKeyCodes.KEY_RADIO => expr,
            // LinuxKeyboardKeyCodes.KEY_TUNER => expr,
            // LinuxKeyboardKeyCodes.KEY_PLAYER => expr,
            // LinuxKeyboardKeyCodes.KEY_TEXT => expr,
            // LinuxKeyboardKeyCodes.KEY_DVD => expr,
            // LinuxKeyboardKeyCodes.KEY_AUX => expr,
            // LinuxKeyboardKeyCodes.KEY_MP3 => expr,
            // LinuxKeyboardKeyCodes.KEY_AUDIO => expr,
            // LinuxKeyboardKeyCodes.KEY_VIDEO => expr,
            // LinuxKeyboardKeyCodes.KEY_DIRECTORY => expr,
            // LinuxKeyboardKeyCodes.KEY_LIST => expr,
            // LinuxKeyboardKeyCodes.KEY_MEMO => expr,
            // LinuxKeyboardKeyCodes.KEY_CALENDAR => expr,
            // LinuxKeyboardKeyCodes.KEY_RED => expr,
            // LinuxKeyboardKeyCodes.KEY_GREEN => expr,
            // LinuxKeyboardKeyCodes.KEY_YELLOW => expr,
            // LinuxKeyboardKeyCodes.KEY_BLUE => expr,
            // LinuxKeyboardKeyCodes.KEY_CHANNELUP => expr,
            // LinuxKeyboardKeyCodes.KEY_CHANNELDOWN => expr,
            // LinuxKeyboardKeyCodes.KEY_FIRST => expr,
            // LinuxKeyboardKeyCodes.KEY_LAST => expr,
            // LinuxKeyboardKeyCodes.KEY_AB => expr,
            // LinuxKeyboardKeyCodes.KEY_NEXT => expr,
            // LinuxKeyboardKeyCodes.KEY_RESTART => expr,
            // LinuxKeyboardKeyCodes.KEY_SLOW => expr,
            // LinuxKeyboardKeyCodes.KEY_SHUFFLE => expr,
            // LinuxKeyboardKeyCodes.KEY_BREAK => expr,
            // LinuxKeyboardKeyCodes.KEY_PREVIOUS => expr,
            // LinuxKeyboardKeyCodes.KEY_DIGITS => expr,
            // LinuxKeyboardKeyCodes.KEY_TEEN => expr,
            // LinuxKeyboardKeyCodes.KEY_TWEN => expr,
            // LinuxKeyboardKeyCodes.KEY_VIDEOPHONE => expr,
            // LinuxKeyboardKeyCodes.KEY_GAMES => expr,
            // LinuxKeyboardKeyCodes.KEY_ZOOMIN => expr,
            // LinuxKeyboardKeyCodes.KEY_ZOOMOUT => expr,
            // LinuxKeyboardKeyCodes.KEY_ZOOMRESET => expr,
            // LinuxKeyboardKeyCodes.KEY_WORDPROCESSOR => expr,
            // LinuxKeyboardKeyCodes.KEY_EDITOR => expr,
            // LinuxKeyboardKeyCodes.KEY_SPREADSHEET => expr,
            // LinuxKeyboardKeyCodes.KEY_GRAPHICSEDITOR => expr,
            // LinuxKeyboardKeyCodes.KEY_PRESENTATION => expr,
            // LinuxKeyboardKeyCodes.KEY_DATABASE => expr,
            // LinuxKeyboardKeyCodes.KEY_NEWS => expr,
            // LinuxKeyboardKeyCodes.KEY_VOICEMAIL => expr,
            // LinuxKeyboardKeyCodes.KEY_ADDRESSBOOK => expr,
            // LinuxKeyboardKeyCodes.KEY_MESSENGER => expr,
            // LinuxKeyboardKeyCodes.KEY_DISPLAYTOGGLE => expr,
            // LinuxKeyboardKeyCodes.KEY_SPELLCHECK => expr,
            // LinuxKeyboardKeyCodes.KEY_LOGOFF => expr,
            // LinuxKeyboardKeyCodes.KEY_DOLLAR => expr,
            // LinuxKeyboardKeyCodes.KEY_EURO => expr,
            // LinuxKeyboardKeyCodes.KEY_FRAMEBACK => expr,
            // LinuxKeyboardKeyCodes.KEY_FRAMEFORWARD => expr,
            // LinuxKeyboardKeyCodes.KEY_CONTEXT_MENU => expr,
            // LinuxKeyboardKeyCodes.KEY_MEDIA_REPEAT => expr,
            // LinuxKeyboardKeyCodes.KEY_10CHANNELSUP => expr,
            // LinuxKeyboardKeyCodes.KEY_10CHANNELSDOWN => expr,
            // LinuxKeyboardKeyCodes.KEY_IMAGES => expr,
            // LinuxKeyboardKeyCodes.KEY_NOTIFICATION_CENTER => expr,
            // LinuxKeyboardKeyCodes.KEY_PICKUP_PHONE => expr,
            // LinuxKeyboardKeyCodes.KEY_HANGUP_PHONE => expr,
            // LinuxKeyboardKeyCodes.KEY_DEL_EOL => expr,
            // LinuxKeyboardKeyCodes.KEY_DEL_EOS => expr,
            // LinuxKeyboardKeyCodes.KEY_INS_LINE => expr,
            // LinuxKeyboardKeyCodes.KEY_DEL_LINE => expr,
            // LinuxKeyboardKeyCodes.KEY_FN => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_ESC => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_F1 => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_F2 => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_F3 => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_F4 => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_F5 => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_F6 => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_F7 => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_F8 => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_F9 => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_F10 => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_F11 => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_F12 => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_1 => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_2 => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_D => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_E => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_F => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_S => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_B => expr,
            // LinuxKeyboardKeyCodes.KEY_FN_RIGHT_SHIFT => expr,
            // LinuxKeyboardKeyCodes.KEY_BRL_DOT1 => expr,
            // LinuxKeyboardKeyCodes.KEY_BRL_DOT2 => expr,
            // LinuxKeyboardKeyCodes.KEY_BRL_DOT3 => expr,
            // LinuxKeyboardKeyCodes.KEY_BRL_DOT4 => expr,
            // LinuxKeyboardKeyCodes.KEY_BRL_DOT5 => expr,
            // LinuxKeyboardKeyCodes.KEY_BRL_DOT6 => expr,
            // LinuxKeyboardKeyCodes.KEY_BRL_DOT7 => expr,
            // LinuxKeyboardKeyCodes.KEY_BRL_DOT8 => expr,
            // LinuxKeyboardKeyCodes.KEY_BRL_DOT9 => expr,
            // LinuxKeyboardKeyCodes.KEY_BRL_DOT10 => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_0 => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_1 => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_2 => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_3 => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_4 => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_5 => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_6 => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_7 => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_8 => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_9 => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_STAR => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_POUND => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_A => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_B => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_C => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_D => expr,
            // LinuxKeyboardKeyCodes.KEY_CAMERA_FOCUS => expr,
            // LinuxKeyboardKeyCodes.KEY_WPS_BUTTON => expr,
            // LinuxKeyboardKeyCodes.KEY_TOUCHPAD_TOGGLE => expr,
            // LinuxKeyboardKeyCodes.KEY_TOUCHPAD_ON => expr,
            // LinuxKeyboardKeyCodes.KEY_TOUCHPAD_OFF => expr,
            // LinuxKeyboardKeyCodes.KEY_CAMERA_ZOOMIN => expr,
            // LinuxKeyboardKeyCodes.KEY_CAMERA_ZOOMOUT => expr,
            // LinuxKeyboardKeyCodes.KEY_CAMERA_UP => expr,
            // LinuxKeyboardKeyCodes.KEY_CAMERA_DOWN => expr,
            // LinuxKeyboardKeyCodes.KEY_CAMERA_LEFT => expr,
            // LinuxKeyboardKeyCodes.KEY_CAMERA_RIGHT => expr,
            // LinuxKeyboardKeyCodes.KEY_ATTENDANT_ON => expr,
            // LinuxKeyboardKeyCodes.KEY_ATTENDANT_OFF => expr,
            // LinuxKeyboardKeyCodes.KEY_ATTENDANT_TOGGLE => expr,
            // LinuxKeyboardKeyCodes.KEY_LIGHTS_TOGGLE => expr,
            // LinuxKeyboardKeyCodes.BTN_DPAD_UP => expr,
            // LinuxKeyboardKeyCodes.BTN_DPAD_DOWN => expr,
            // LinuxKeyboardKeyCodes.BTN_DPAD_LEFT => expr,
            // LinuxKeyboardKeyCodes.BTN_DPAD_RIGHT => expr,
            // LinuxKeyboardKeyCodes.KEY_ALS_TOGGLE => expr,
            // LinuxKeyboardKeyCodes.KEY_ROTATE_LOCK_TOGGLE => expr,
            // LinuxKeyboardKeyCodes.KEY_BUTTONCONFIG => expr,
            // LinuxKeyboardKeyCodes.KEY_TASKMANAGER => expr,
            // LinuxKeyboardKeyCodes.KEY_JOURNAL => expr,
            // LinuxKeyboardKeyCodes.KEY_CONTROLPANEL => expr,
            // LinuxKeyboardKeyCodes.KEY_APPSELECT => expr,
            // LinuxKeyboardKeyCodes.KEY_SCREENSAVER => expr,
            // LinuxKeyboardKeyCodes.KEY_VOICECOMMAND => expr,
            // LinuxKeyboardKeyCodes.KEY_ASSISTANT => expr,
            // LinuxKeyboardKeyCodes.KEY_KBD_LAYOUT_NEXT => expr,
            // LinuxKeyboardKeyCodes.KEY_EMOJI_PICKER => expr,
            // LinuxKeyboardKeyCodes.KEY_BRIGHTNESS_MIN => expr,
            // LinuxKeyboardKeyCodes.KEY_BRIGHTNESS_MAX => expr,
            // LinuxKeyboardKeyCodes.KEY_KBDINPUTASSIST_PREV => expr,
            // LinuxKeyboardKeyCodes.KEY_KBDINPUTASSIST_NEXT => expr,
            // LinuxKeyboardKeyCodes.KEY_KBDINPUTASSIST_PREVGROUP => expr,
            // LinuxKeyboardKeyCodes.KEY_KBDINPUTASSIST_NEXTGROUP => expr,
            // LinuxKeyboardKeyCodes.KEY_KBDINPUTASSIST_ACCEPT => expr,
            // LinuxKeyboardKeyCodes.KEY_KBDINPUTASSIST_CANCEL => expr,
            // LinuxKeyboardKeyCodes.KEY_RIGHT_UP => expr,
            // LinuxKeyboardKeyCodes.KEY_RIGHT_DOWN => expr,
            // LinuxKeyboardKeyCodes.KEY_LEFT_UP => expr,
            // LinuxKeyboardKeyCodes.KEY_LEFT_DOWN => expr,
            // LinuxKeyboardKeyCodes.KEY_ROOT_MENU => expr,
            // LinuxKeyboardKeyCodes.KEY_MEDIA_TOP_MENU => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_11 => expr,
            // LinuxKeyboardKeyCodes.KEY_NUMERIC_12 => expr,
            // LinuxKeyboardKeyCodes.KEY_AUDIO_DESC => expr,
            // LinuxKeyboardKeyCodes.KEY_3D_MODE => expr,
            // LinuxKeyboardKeyCodes.KEY_NEXT_FAVORITE => expr,
            // LinuxKeyboardKeyCodes.KEY_STOP_RECORD => expr,
            // LinuxKeyboardKeyCodes.KEY_PAUSE_RECORD => expr,
            // LinuxKeyboardKeyCodes.KEY_VOD => expr,
            // LinuxKeyboardKeyCodes.KEY_UNMUTE => expr,
            // LinuxKeyboardKeyCodes.KEY_FASTREVERSE => expr,
            // LinuxKeyboardKeyCodes.KEY_SLOWREVERSE => expr,
            // LinuxKeyboardKeyCodes.KEY_DATA => expr,
            // LinuxKeyboardKeyCodes.KEY_ONSCREEN_KEYBOARD => expr,
            // LinuxKeyboardKeyCodes.KEY_PRIVACY_SCREEN_TOGGLE => expr,
            // LinuxKeyboardKeyCodes.KEY_SELECTIVE_SCREENSHOT => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO1 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO2 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO3 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO4 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO5 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO6 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO7 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO8 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO9 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO10 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO11 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO12 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO13 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO14 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO15 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO16 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO17 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO18 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO19 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO20 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO21 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO22 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO23 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO24 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO25 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO26 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO27 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO28 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO29 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO30 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO_RECORD_START => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO_RECORD_STOP => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO_PRESET_CYCLE => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO_PRESET1 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO_PRESET2 => expr,
            // LinuxKeyboardKeyCodes.KEY_MACRO_PRESET3 => expr,
            // LinuxKeyboardKeyCodes.KEY_KBD_LCD_MENU1 => expr,
            // LinuxKeyboardKeyCodes.KEY_KBD_LCD_MENU2 => expr,
            // LinuxKeyboardKeyCodes.KEY_KBD_LCD_MENU3 => expr,
            // LinuxKeyboardKeyCodes.KEY_KBD_LCD_MENU4 => expr,
            // LinuxKeyboardKeyCodes.KEY_KBD_LCD_MENU5 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY2 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY3 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY4 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY5 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY6 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY7 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY8 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY9 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY10 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY11 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY12 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY13 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY14 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY15 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY16 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY17 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY18 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY19 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY20 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY21 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY22 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY23 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY24 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY25 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY26 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY27 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY28 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY29 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY30 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY31 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY32 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY33 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY34 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY35 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY36 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY37 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY38 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY39 => expr,
            // LinuxKeyboardKeyCodes.BTN_TRIGGER_HAPPY40 => expr,
            _ => KeyboardKey.None
        };
    }


    public static MouseButton MouseButtonFromButtonCode(LinuxKeyboardKeyCodes eCode)
    {
        return eCode switch
        {
            LinuxKeyboardKeyCodes.BTN_LEFT => MouseButton.Left,
            LinuxKeyboardKeyCodes.BTN_RIGHT => MouseButton.Right,
            LinuxKeyboardKeyCodes.BTN_MIDDLE => MouseButton.Middle,
            //todo: figure these out
            // LinuxKeyboardKeyCodes.BTN_SIDE => expr,
            // LinuxKeyboardKeyCodes.BTN_EXTRA => expr,
            // LinuxKeyboardKeyCodes.BTN_FORWARD => expr,
            // LinuxKeyboardKeyCodes.BTN_BACK => expr,
            // LinuxKeyboardKeyCodes.BTN_TASK => expr,
            _ => throw new ArgumentOutOfRangeException(nameof(eCode), eCode, null)
        };
    }
}