inpmap 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. inpmap-0.2.0/CHANGELOG.md +35 -0
  2. inpmap-0.2.0/LICENSE +21 -0
  3. inpmap-0.2.0/MANIFEST.in +5 -0
  4. inpmap-0.2.0/PKG-INFO +157 -0
  5. inpmap-0.2.0/README.md +124 -0
  6. inpmap-0.2.0/docs/configuration.md +1173 -0
  7. inpmap-0.2.0/docs/development.md +129 -0
  8. inpmap-0.2.0/docs/installation.md +223 -0
  9. inpmap-0.2.0/docs/manual-tests.md +106 -0
  10. inpmap-0.2.0/docs/roadmap.md +125 -0
  11. inpmap-0.2.0/docs/usage.md +473 -0
  12. inpmap-0.2.0/pyproject.toml +72 -0
  13. inpmap-0.2.0/setup.cfg +4 -0
  14. inpmap-0.2.0/src/inpmap/__init__.py +3 -0
  15. inpmap-0.2.0/src/inpmap/__main__.py +5 -0
  16. inpmap-0.2.0/src/inpmap/_linux_codes.py +1275 -0
  17. inpmap-0.2.0/src/inpmap/axes.py +92 -0
  18. inpmap-0.2.0/src/inpmap/axis_triggers.py +119 -0
  19. inpmap-0.2.0/src/inpmap/backends/__init__.py +1 -0
  20. inpmap-0.2.0/src/inpmap/backends/linux.py +178 -0
  21. inpmap-0.2.0/src/inpmap/backends/linux_input.py +656 -0
  22. inpmap-0.2.0/src/inpmap/backends/linux_service.py +105 -0
  23. inpmap-0.2.0/src/inpmap/backends/linux_setup.py +208 -0
  24. inpmap-0.2.0/src/inpmap/cli.py +829 -0
  25. inpmap-0.2.0/src/inpmap/codes.py +96 -0
  26. inpmap-0.2.0/src/inpmap/config.py +828 -0
  27. inpmap-0.2.0/src/inpmap/config_macros.py +545 -0
  28. inpmap-0.2.0/src/inpmap/data/example.inpmap +95 -0
  29. inpmap-0.2.0/src/inpmap/data/syntax/inpmap.nanorc +20 -0
  30. inpmap-0.2.0/src/inpmap/data/syntax/inpmap.xml +115 -0
  31. inpmap-0.2.0/src/inpmap/data_files.py +19 -0
  32. inpmap-0.2.0/src/inpmap/detect.py +86 -0
  33. inpmap-0.2.0/src/inpmap/dsl/__init__.py +0 -0
  34. inpmap-0.2.0/src/inpmap/dsl/compiler.py +1079 -0
  35. inpmap-0.2.0/src/inpmap/dsl/formatter.py +491 -0
  36. inpmap-0.2.0/src/inpmap/dsl/inpmap.lark +112 -0
  37. inpmap-0.2.0/src/inpmap/dsl/parser.py +131 -0
  38. inpmap-0.2.0/src/inpmap/engine.py +501 -0
  39. inpmap-0.2.0/src/inpmap/input.py +103 -0
  40. inpmap-0.2.0/src/inpmap/input_config.py +472 -0
  41. inpmap-0.2.0/src/inpmap/loading.py +25 -0
  42. inpmap-0.2.0/src/inpmap/macro_runtime.py +540 -0
  43. inpmap-0.2.0/src/inpmap/macros.py +287 -0
  44. inpmap-0.2.0/src/inpmap/models.py +265 -0
  45. inpmap-0.2.0/src/inpmap/modifiers.py +82 -0
  46. inpmap-0.2.0/src/inpmap/output.py +197 -0
  47. inpmap-0.2.0/src/inpmap/profiles.py +48 -0
  48. inpmap-0.2.0/src/inpmap/runtime.py +388 -0
  49. inpmap-0.2.0/src/inpmap/state.py +46 -0
  50. inpmap-0.2.0/src/inpmap/trace.py +176 -0
  51. inpmap-0.2.0/src/inpmap.egg-info/PKG-INFO +157 -0
  52. inpmap-0.2.0/src/inpmap.egg-info/SOURCES.txt +84 -0
  53. inpmap-0.2.0/src/inpmap.egg-info/dependency_links.txt +1 -0
  54. inpmap-0.2.0/src/inpmap.egg-info/entry_points.txt +2 -0
  55. inpmap-0.2.0/src/inpmap.egg-info/requires.txt +8 -0
  56. inpmap-0.2.0/src/inpmap.egg-info/top_level.txt +1 -0
  57. inpmap-0.2.0/tests/data/json_era_example.inpmap +69 -0
  58. inpmap-0.2.0/tests/fakes.py +210 -0
  59. inpmap-0.2.0/tests/golden_example_traces.py +322 -0
  60. inpmap-0.2.0/tests/test_axis_triggers.py +159 -0
  61. inpmap-0.2.0/tests/test_blocks.py +109 -0
  62. inpmap-0.2.0/tests/test_cli.py +336 -0
  63. inpmap-0.2.0/tests/test_codes.py +59 -0
  64. inpmap-0.2.0/tests/test_config.py +393 -0
  65. inpmap-0.2.0/tests/test_config_macros.py +403 -0
  66. inpmap-0.2.0/tests/test_detect.py +50 -0
  67. inpmap-0.2.0/tests/test_docs.py +95 -0
  68. inpmap-0.2.0/tests/test_dsl_compiler.py +356 -0
  69. inpmap-0.2.0/tests/test_dsl_parser.py +146 -0
  70. inpmap-0.2.0/tests/test_engine.py +375 -0
  71. inpmap-0.2.0/tests/test_example.py +59 -0
  72. inpmap-0.2.0/tests/test_formatter.py +152 -0
  73. inpmap-0.2.0/tests/test_input_config.py +353 -0
  74. inpmap-0.2.0/tests/test_layers.py +166 -0
  75. inpmap-0.2.0/tests/test_linux_backend.py +228 -0
  76. inpmap-0.2.0/tests/test_linux_input.py +957 -0
  77. inpmap-0.2.0/tests/test_linux_service.py +53 -0
  78. inpmap-0.2.0/tests/test_linux_setup.py +98 -0
  79. inpmap-0.2.0/tests/test_macro_runtime.py +660 -0
  80. inpmap-0.2.0/tests/test_modifiers.py +338 -0
  81. inpmap-0.2.0/tests/test_output.py +187 -0
  82. inpmap-0.2.0/tests/test_profiles.py +22 -0
  83. inpmap-0.2.0/tests/test_runtime.py +750 -0
  84. inpmap-0.2.0/tests/test_state.py +32 -0
  85. inpmap-0.2.0/tests/test_trace.py +154 -0
  86. inpmap-0.2.0/tools/gen_codes.py +93 -0
@@ -0,0 +1,35 @@
1
+ # Changelog
2
+
3
+ All notable changes to InpMap. Versions follow [semantic versioning](https://semver.org/);
4
+ before 1.0, minor versions may change the configuration language (the
5
+ `version` line in configuration files guards against incompatible changes).
6
+
7
+ ## 0.2.0 (first public release)
8
+
9
+ InpMap is a configuration-driven input remapper for Linux: one key or
10
+ button can drive keys, buttons and sticks on several virtual devices at
11
+ once.
12
+
13
+ - **Configuration language** (`.inpmap` files, version 1), with errors
14
+ reported as `FILE:LINE:COLUMN` before any device is touched.
15
+ - **Virtual keyboard and gamepad** outputs (buttons, D-pad, sticks,
16
+ triggers); unmapped input passes through unchanged; LEDs keep working;
17
+ devices that are unplugged are picked up again.
18
+ - **Mappings:** hold, tap, chords, sequences with waits and random waits,
19
+ loops, autofire, toggles, parallel branches, stick movements with ramps,
20
+ variables, conditions (tap vs. hold, double tap, long press, "pressed
21
+ alone", lock LEDs), modifiers (`modifiers(ctrl, shift)`), mappings for one
22
+ device or for every input, `disable`.
23
+ - **Sticks, analog triggers and the D-pad as triggers**
24
+ (`map pad.ABS_RZ above 0.5`), including two-stage triggers.
25
+ - **Layers** (`layer NAME { … }`, `hold layer`, `layer NAME toggle`) and
26
+ **reusable blocks** (`block` / `call`).
27
+ - **Profiles** in `~/.config/inpmap/`; a systemd **user service**
28
+ (`inpmap@NAME`); an **emergency stop** (Backspace + Escape + Enter).
29
+ - **Tools:** `input-config` (pick devices, also by pressing a key; starts
30
+ from the built-in example for the profile `example`), `detect` (presses
31
+ shown as triggers), `axes`, `codes`, `check`, `macro-trace`, `fmt`,
32
+ `devices`, `udev-rules`, `service-unit`, `syntax-file`, `test-outputs`.
33
+
34
+ Tested on CachyOS with KDE Plasma (Wayland); other distributions and
35
+ desktops are not tested yet.
inpmap-0.2.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 unoctanium
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,5 @@
1
+ # The source distribution: everything needed to build, read and test InpMap.
2
+ include CHANGELOG.md
3
+ recursive-include docs configuration.md installation.md usage.md development.md roadmap.md manual-tests.md
4
+ recursive-include tests *.py *.inpmap
5
+ include tools/gen_codes.py
inpmap-0.2.0/PKG-INFO ADDED
@@ -0,0 +1,157 @@
1
+ Metadata-Version: 2.4
2
+ Name: inpmap
3
+ Version: 0.2.0
4
+ Summary: Configuration-driven input remapper (own configuration language, multiple virtual output devices)
5
+ Author: unoctanium
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/unoctanium/InpMap
8
+ Project-URL: Documentation, https://github.com/unoctanium/InpMap/blob/main/docs/usage.md
9
+ Project-URL: Changelog, https://github.com/unoctanium/InpMap/blob/main/CHANGELOG.md
10
+ Project-URL: Issues, https://github.com/unoctanium/InpMap/issues
11
+ Keywords: input,remapper,keyboard,gamepad,evdev,uinput,macros,linux
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: End Users/Desktop
15
+ Classifier: Operating System :: POSIX :: Linux
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
21
+ Classifier: Topic :: Games/Entertainment
22
+ Classifier: Topic :: System :: Hardware
23
+ Classifier: Topic :: Utilities
24
+ Requires-Python: >=3.11
25
+ Description-Content-Type: text/markdown
26
+ License-File: LICENSE
27
+ Requires-Dist: lark<2,>=1.2
28
+ Requires-Dist: evdev; sys_platform == "linux"
29
+ Provides-Extra: dev
30
+ Requires-Dist: pytest; extra == "dev"
31
+ Requires-Dist: ruff; extra == "dev"
32
+ Dynamic: license-file
33
+
34
+ # InpMap
35
+
36
+ [![CI](https://github.com/unoctanium/InpMap/actions/workflows/ci.yml/badge.svg)](https://github.com/unoctanium/InpMap/actions/workflows/ci.yml)
37
+
38
+ InpMap is an input remapper for Linux. It takes over your physical keyboard
39
+ or gamepad and turns its keys and buttons into whatever you describe in a
40
+ small configuration file: other keys, gamepad buttons, stick movements, or
41
+ whole timed sequences ("macros"). One key can act on **several virtual
42
+ devices at once**, for example press a keyboard key and a gamepad button
43
+ together.
44
+
45
+ ```inpmap
46
+ version 1
47
+ input kbd { path = "/dev/input/by-id/usb-4348_2.4G_Dongle-event-kbd" }
48
+ output keyboard { type = keyboard }
49
+ output gamepad { type = gamepad }
50
+
51
+ map KEY_X { # X = keyboard Y + gamepad A
52
+ hold KEY_Y
53
+ hold BTN_SOUTH
54
+ }
55
+
56
+ map KEY_F10 { # tap, double tap, long press
57
+ on tap { tap KEY_1 }
58
+ on double_tap { tap KEY_2 }
59
+ on long_press { tap KEY_3 }
60
+ }
61
+
62
+ map KEY_CAPSLOCK { # Caps Lock alone = Esc, with another key = Ctrl
63
+ if single { tap KEY_ESC } else { hold KEY_LEFTCTRL }
64
+ }
65
+ ```
66
+
67
+ ## Why InpMap?
68
+
69
+ [Input Remapper](https://github.com/sezanzeb/input-remapper) is the
70
+ established remapper for Linux and served as the functional reference.
71
+ InpMap was started for needs it covers less well:
72
+
73
+ - **Several virtual output devices per mapping.** A key can drive a
74
+ virtual keyboard and a virtual gamepad (or two gamepads) at the same time
75
+ — e.g. for games that expect a gamepad.
76
+ - **Configuration as a readable text file** instead of a GUI: easy to write
77
+ in any editor, to compare, to keep in git and to copy to other PCs.
78
+ Errors are reported with file, line and column before any device is
79
+ touched.
80
+ - **Predictable behaviour**: exact rules for modifiers (Shift+A stays a
81
+ capital A unless you map it), reference-counted outputs, and a guarantee
82
+ that no key is ever left stuck — on release, on errors, on unplugging and
83
+ on shutdown.
84
+ - **A portable core.** The mapping engine is independent of Linux; a
85
+ Windows version is planned.
86
+
87
+ ## Features
88
+
89
+ - Keyboard keys and gamepad buttons as triggers, optionally with modifiers
90
+ (`modifiers(ctrl, shift)`), from any number of physical devices. A
91
+ mapping applies to every configured device that has the key, or to one
92
+ device only (`pad.BTN_EAST`). Keys can be disabled.
93
+ - Sticks, analog triggers and the D-pad as buttons (`map pad.ABS_RZ above
94
+ 0.5`), also two-stage triggers; `inpmap axes` shows their live values.
95
+ - Virtual keyboards and gamepads (buttons, D-pad, sticks, triggers).
96
+ - Hold, tap, chords (`ctrl + KEY_C`), sequences with waits and random
97
+ waits, loops, autofire, toggles, parallel branches, stick movements with
98
+ ramps.
99
+ - Conditions: tap vs. hold, double tap, long press, "pressed alone",
100
+ Caps/Num/Scroll Lock state, variables.
101
+ - Layers: groups of mappings switched on while a key is held or toggled,
102
+ e.g. Caps Lock + WASD as arrow keys, or a flight-sim layer on the gamepad.
103
+ - Reusable blocks: write a sequence once (`block close_dialog { … }`) and
104
+ `call` it from several mappings.
105
+ - Unmapped keys pass through unchanged; LEDs keep working; devices that
106
+ are unplugged and plugged in again are picked up automatically.
107
+ - `inpmap input-config` finds your devices for you: press a key on the
108
+ keyboard or gamepad you want, and it is added to the configuration.
109
+ - `inpmap fmt` lays out configuration files consistently, without ever
110
+ changing what they mean.
111
+ - `inpmap macro-trace` shows the exact timeline of a mapping without
112
+ touching any device.
113
+ - Runs in the foreground or as a systemd user service that starts at
114
+ login. Profiles (e.g. one per game) are switched with `systemctl --user`.
115
+ Holding Backspace + Escape + Enter always stops it (emergency stop).
116
+
117
+ Not yet: mouse output, a GUI, Windows, a system-wide service.
118
+
119
+ ## Documentation
120
+
121
+ | Document | Contents |
122
+ |---|---|
123
+ | [docs/installation.md](https://github.com/unoctanium/InpMap/blob/main/docs/installation.md) | requirements, installation, device permissions, user service, uninstall |
124
+ | [docs/usage.md](https://github.com/unoctanium/InpMap/blob/main/docs/usage.md) | first configuration step by step, all commands and options, troubleshooting |
125
+ | [docs/configuration.md](https://github.com/unoctanium/InpMap/blob/main/docs/configuration.md) | **reference** of the configuration language: every feature with examples |
126
+ | [docs/development.md](https://github.com/unoctanium/InpMap/blob/main/docs/development.md) | for contributors: tests, architecture, releases |
127
+ | [docs/roadmap.md](https://github.com/unoctanium/InpMap/blob/main/docs/roadmap.md) | goals, requirements, milestones and what comes next |
128
+ | [CHANGELOG.md](https://github.com/unoctanium/InpMap/blob/main/CHANGELOG.md) | changes per version |
129
+
130
+ ## Quick start
131
+
132
+ ```sh
133
+ sudo pacman -S --needed python python-evdev python-pipx # Arch; other distributions: see installation.md
134
+ pipx install --system-site-packages inpmap
135
+
136
+ inpmap input-config example # the example with your keyboard (press i, then a key)
137
+ inpmap run example --timeout 60 # try F1-F8, Caps Lock, Insert
138
+ inpmap input-config # your own profile: ~/.config/inpmap/default.inpmap
139
+ inpmap detect # press keys: see how to write them in a mapping
140
+ ```
141
+
142
+ Device permissions may be needed first: see
143
+ [installation.md §3](https://github.com/unoctanium/InpMap/blob/main/docs/installation.md#3-device-permissions).
144
+ To work on InpMap itself, install it from the source code
145
+ ([installation.md §2b](https://github.com/unoctanium/InpMap/blob/main/docs/installation.md#2b-from-the-source-code-for-development)).
146
+
147
+ ## Status
148
+
149
+ Version 0.2, Linux only. Verified on CachyOS / KDE Plasma (Wayland) with a
150
+ real keyboard and gamepad: remapping, suppression of the original keys,
151
+ passthrough, macros, modifiers, axes as triggers, the configuration
152
+ language and the user service. Later: Windows, then GUIs.
153
+
154
+ ## License
155
+
156
+ MIT, see [LICENSE](https://github.com/unoctanium/InpMap/blob/main/LICENSE). Input Remapper (GPL-3.0) served as a
157
+ functional reference only; InpMap contains no code from it.
inpmap-0.2.0/README.md ADDED
@@ -0,0 +1,124 @@
1
+ # InpMap
2
+
3
+ [![CI](https://github.com/unoctanium/InpMap/actions/workflows/ci.yml/badge.svg)](https://github.com/unoctanium/InpMap/actions/workflows/ci.yml)
4
+
5
+ InpMap is an input remapper for Linux. It takes over your physical keyboard
6
+ or gamepad and turns its keys and buttons into whatever you describe in a
7
+ small configuration file: other keys, gamepad buttons, stick movements, or
8
+ whole timed sequences ("macros"). One key can act on **several virtual
9
+ devices at once**, for example press a keyboard key and a gamepad button
10
+ together.
11
+
12
+ ```inpmap
13
+ version 1
14
+ input kbd { path = "/dev/input/by-id/usb-4348_2.4G_Dongle-event-kbd" }
15
+ output keyboard { type = keyboard }
16
+ output gamepad { type = gamepad }
17
+
18
+ map KEY_X { # X = keyboard Y + gamepad A
19
+ hold KEY_Y
20
+ hold BTN_SOUTH
21
+ }
22
+
23
+ map KEY_F10 { # tap, double tap, long press
24
+ on tap { tap KEY_1 }
25
+ on double_tap { tap KEY_2 }
26
+ on long_press { tap KEY_3 }
27
+ }
28
+
29
+ map KEY_CAPSLOCK { # Caps Lock alone = Esc, with another key = Ctrl
30
+ if single { tap KEY_ESC } else { hold KEY_LEFTCTRL }
31
+ }
32
+ ```
33
+
34
+ ## Why InpMap?
35
+
36
+ [Input Remapper](https://github.com/sezanzeb/input-remapper) is the
37
+ established remapper for Linux and served as the functional reference.
38
+ InpMap was started for needs it covers less well:
39
+
40
+ - **Several virtual output devices per mapping.** A key can drive a
41
+ virtual keyboard and a virtual gamepad (or two gamepads) at the same time
42
+ — e.g. for games that expect a gamepad.
43
+ - **Configuration as a readable text file** instead of a GUI: easy to write
44
+ in any editor, to compare, to keep in git and to copy to other PCs.
45
+ Errors are reported with file, line and column before any device is
46
+ touched.
47
+ - **Predictable behaviour**: exact rules for modifiers (Shift+A stays a
48
+ capital A unless you map it), reference-counted outputs, and a guarantee
49
+ that no key is ever left stuck — on release, on errors, on unplugging and
50
+ on shutdown.
51
+ - **A portable core.** The mapping engine is independent of Linux; a
52
+ Windows version is planned.
53
+
54
+ ## Features
55
+
56
+ - Keyboard keys and gamepad buttons as triggers, optionally with modifiers
57
+ (`modifiers(ctrl, shift)`), from any number of physical devices. A
58
+ mapping applies to every configured device that has the key, or to one
59
+ device only (`pad.BTN_EAST`). Keys can be disabled.
60
+ - Sticks, analog triggers and the D-pad as buttons (`map pad.ABS_RZ above
61
+ 0.5`), also two-stage triggers; `inpmap axes` shows their live values.
62
+ - Virtual keyboards and gamepads (buttons, D-pad, sticks, triggers).
63
+ - Hold, tap, chords (`ctrl + KEY_C`), sequences with waits and random
64
+ waits, loops, autofire, toggles, parallel branches, stick movements with
65
+ ramps.
66
+ - Conditions: tap vs. hold, double tap, long press, "pressed alone",
67
+ Caps/Num/Scroll Lock state, variables.
68
+ - Layers: groups of mappings switched on while a key is held or toggled,
69
+ e.g. Caps Lock + WASD as arrow keys, or a flight-sim layer on the gamepad.
70
+ - Reusable blocks: write a sequence once (`block close_dialog { … }`) and
71
+ `call` it from several mappings.
72
+ - Unmapped keys pass through unchanged; LEDs keep working; devices that
73
+ are unplugged and plugged in again are picked up automatically.
74
+ - `inpmap input-config` finds your devices for you: press a key on the
75
+ keyboard or gamepad you want, and it is added to the configuration.
76
+ - `inpmap fmt` lays out configuration files consistently, without ever
77
+ changing what they mean.
78
+ - `inpmap macro-trace` shows the exact timeline of a mapping without
79
+ touching any device.
80
+ - Runs in the foreground or as a systemd user service that starts at
81
+ login. Profiles (e.g. one per game) are switched with `systemctl --user`.
82
+ Holding Backspace + Escape + Enter always stops it (emergency stop).
83
+
84
+ Not yet: mouse output, a GUI, Windows, a system-wide service.
85
+
86
+ ## Documentation
87
+
88
+ | Document | Contents |
89
+ |---|---|
90
+ | [docs/installation.md](https://github.com/unoctanium/InpMap/blob/main/docs/installation.md) | requirements, installation, device permissions, user service, uninstall |
91
+ | [docs/usage.md](https://github.com/unoctanium/InpMap/blob/main/docs/usage.md) | first configuration step by step, all commands and options, troubleshooting |
92
+ | [docs/configuration.md](https://github.com/unoctanium/InpMap/blob/main/docs/configuration.md) | **reference** of the configuration language: every feature with examples |
93
+ | [docs/development.md](https://github.com/unoctanium/InpMap/blob/main/docs/development.md) | for contributors: tests, architecture, releases |
94
+ | [docs/roadmap.md](https://github.com/unoctanium/InpMap/blob/main/docs/roadmap.md) | goals, requirements, milestones and what comes next |
95
+ | [CHANGELOG.md](https://github.com/unoctanium/InpMap/blob/main/CHANGELOG.md) | changes per version |
96
+
97
+ ## Quick start
98
+
99
+ ```sh
100
+ sudo pacman -S --needed python python-evdev python-pipx # Arch; other distributions: see installation.md
101
+ pipx install --system-site-packages inpmap
102
+
103
+ inpmap input-config example # the example with your keyboard (press i, then a key)
104
+ inpmap run example --timeout 60 # try F1-F8, Caps Lock, Insert
105
+ inpmap input-config # your own profile: ~/.config/inpmap/default.inpmap
106
+ inpmap detect # press keys: see how to write them in a mapping
107
+ ```
108
+
109
+ Device permissions may be needed first: see
110
+ [installation.md §3](https://github.com/unoctanium/InpMap/blob/main/docs/installation.md#3-device-permissions).
111
+ To work on InpMap itself, install it from the source code
112
+ ([installation.md §2b](https://github.com/unoctanium/InpMap/blob/main/docs/installation.md#2b-from-the-source-code-for-development)).
113
+
114
+ ## Status
115
+
116
+ Version 0.2, Linux only. Verified on CachyOS / KDE Plasma (Wayland) with a
117
+ real keyboard and gamepad: remapping, suppression of the original keys,
118
+ passthrough, macros, modifiers, axes as triggers, the configuration
119
+ language and the user service. Later: Windows, then GUIs.
120
+
121
+ ## License
122
+
123
+ MIT, see [LICENSE](https://github.com/unoctanium/InpMap/blob/main/LICENSE). Input Remapper (GPL-3.0) served as a
124
+ functional reference only; InpMap contains no code from it.