# This file is part of systemd.
#
# The lookup keys are composed in:
#   60-input-id.rules
#
# Note: The format of the "input-id:" prefix match key is a contract between
# the rules file and the hardware data, it might change in later revisions to
# support more or better matches, it is not necessarily expected to be a stable
# ABI.
#
# 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

# UC-Logic TABLET 1060N Pad
id-input:modalias:input:b0003v5543p0081*
 ID_INPUT_TABLET=1
 ID_INPUT_TABLET_PAD=1

# 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 
