Skip to content

Linux utility for binding keyboard. mouse, touchpad and touchscreen actions to system actions

License

Notifications You must be signed in to change notification settings

taj-ny/InputActions

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

722 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

InputActions

Linux utility for binding keyboard shortcuts, mouse gestures, touchpad gestures and touchscreen gestures to system actions, created with flexibility in mind.

Supported environments: Plasma 6, Hyprland, GNOME, other Wayland compositors (availability of extra features depends on implemented protocols), X11 (base features only)

Installation & getting started | Wiki repository

Features

  • Supported device types: keyboard, mouse, touchpad, touchscreen
  • Input event filtering
  • Uses libinput, which handles device quirks
  • Complementary evdev input backend for better touchpad support (may be disabled in case of issues)
  • Conditional triggers
  • Built-in action for simulating keyboard and mouse input
Example configuration
device_rules:
  # ignore a device
  - conditions: $name contains YubiKey
    ignore: true

keyboard:
  gestures:
    # shift + meta + q -> kill window under pointer
    - type: shortcut
      shortcut: [ leftshift, leftmeta, q ]

      actions:
        - on: begin
          command: kill -9 $window_under_pointer_pid

mouse:
  gestures:
    # right + draw circle clockwise -> open dolphin
    - type: stroke
      strokes: [ 'Gw4A/DELBwxLFRAZWiUXJWM6HzBkSyRKWlQpYShYOasISUXHACVR6Q8WWP0zEmQA' ]
      mouse_buttons: [ right ]

      actions:
        - command: dolphin

    # trigger group - condition is applied to all subtriggers specified in 'gestures'
    - conditions: $window_class == firefox
      gestures:
        # meta + vertical wheel -> volume control
        - type: wheel
          direction: up_down

          conditions: $keyboard_modifiers == meta

          actions:
            - on: update
              interval: '+'
              input:
                - keyboard: [ volumedown ]

            - on: update
              interval: '-'
              input:
                - keyboard: [ volumeup ]

    # this trigger will override the one below due to higher priority, but only if firefox is focused
    - type: press
      mouse_buttons: [ middle ]
      instant: true

      conditions: $window_class == firefox

      actions:
        - on: end
          # ...

    - type: press
      mouse_buttons: [ middle ]
      instant: true

      actions:
        - on: end
          # ...

touchpad:
  gestures:
    # place 2 fingers, at least 1 on the top/bottom edge, then move in circular motion -> circular scrolling
    - type: circle
      fingers: 2
      direction: any

      conditions:
        any:
          - $finger_1_initial_position_percentage_y <= 0.05
          - $finger_2_initial_position_percentage_y <= 0.05
          - $finger_1_initial_position_percentage_y >= 0.95
          - $finger_2_initial_position_percentage_y >= 0.95

      actions:
        - on: update
          interval: -0.5
          input:
            - mouse: [ wheel 0 -1 ]

        - on: update
          interval: 0.5
          input:
            - mouse: [ wheel 0 1 ]

    # place 2 fingers on the left half, then click -> naviate back
    - type: click
      fingers: 2

      conditions:
        - $finger_1_position_percentage_x <= 0.5
        - $finger_2_position_percentage_x <= 0.5

      actions:
        - on: begin
          input:
            - mouse: [ back ]

    # move 3 fingers -> drag window
    - type: swipe
      fingers: 3
      direction: any
      resume_timeout: 500 # optional: allow lifting fingers for 500 ms

      actions:
        - on: begin
          input:
            - keyboard: [ +leftmeta ]
            - mouse: [ +left ]

        - on: update
          input:
            - mouse: [ move_by_delta ]

        - on: end_cancel
          input:
            - keyboard: [ -leftmeta ]
            - mouse: [ -left ]

Acknowledgements

About

Linux utility for binding keyboard. mouse, touchpad and touchscreen actions to system actions

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

  •  

Packages

No packages published

Contributors 5