# This file is part of systemd.
#
# The lookup keys are composed in:
#   60-input-id.rules
#
# Match string formats:
# id-input:modalias:<modalias>
#
# To add local entries, create a new file
#   /etc/udev/hwdb.d/61-input-id-local.hwdb
# and add your rules there. To load the new rules execute (as root):
#   systemd-hwdb update
#   udevadm trigger /dev/input/eventXX
# where /dev/input/eventXX is the device in question. If in
# doubt, simply use /dev/input/event* to reload all input rules.
#
# If your changes are generally applicable, preferably send them as a pull
# request to
#   https://github.com/systemd/systemd
# or create a bug report on https://github.com/systemd/systemd/issues and
# include your new rules, a description of the device, and the output of
#   udevadm info /dev/input/eventXX.
#
# This file must only be used where the input_id builtin assigns the wrong
# properties or lacks the assignment of some properties. This is almost always
# caused by a device not adhering to the standard of the device's type.
#
# Allowed properties are:
#    ID_INPUT, ID_INPUT_ACCELEROMETER, ID_INPUT_MOUSE, ID_INPUT_POINTINGSTICK,
#    ID_INPUT_TOUCHSCREEN, ID_INPUT_TOUCHPAD, ID_INPUT_TABLET,
#    ID_INPUT_TABLET_PAD, ID_INPUT_JOYSTICK, ID_INPUT_KEY, ID_INPUT_KEYBOARD,
#    ID_INPUT_SWITCH, ID_INPUT_TRACKBALL
#
#    ID_INPUT
#       * MUST be set when ANY of ID_INPUT_* is set
#       * MUST be unset when ALL of ID_INPUT_*  are unset
#
#    ID_INPUT_TABLET
#       * MUST be set when setting ID_INPUT_TABLET_PAD
#
# Allowed values are 1 and 0 to set or unset, respectively.
#
# NOT allowed in this file are:
#    ID_INPUT_WIDTH_MM, ID_INPUT_HEIGHT_MM, ID_INPUT_TOUCHPAD_INTEGRATION
#

# Example:
# id-input:modalias:input:b0003v1234pABCD*
#  ID_INPUT_TOUCHPAD=1
#  ID_INPUT=1

# Sort by brand, model

# XP-PEN STAR 06
id-input:modalias:input:b0003v28bdp0078*
 ID_INPUT_TABLET=1

# Lite-On Tech IBM USB Travel Keyboard with Ultra Nav Mouse
id-input:modalias:input:b0003v04B3p301Ee0100-e0,1,2,4*
 ID_INPUT_POINTINGSTICK=1

# Logitech Ultrathin Touch Mouse
id-input:modalias:input:b0005v046DpB00De0700*
 ID_INPUT_MOUSE=1

# Logitech MX Keys
id-input:modalias:input:b0003v046Dp408Ae0111*
 ID_INPUT_MOUSE=0

# Logitech Craft Keyboard
id-input:modalias:input:b0003v046Dp4066e0111*
 ID_INPUT_MOUSE=0

# CH Products Pro Pedals
id-input:modalias:input:b0003v068Ep00F2e0100*
 ID_INPUT_ACCELEROMETER=0
 ID_INPUT_JOYSTICK=1
