{"id":30358132,"url":"https://github.com/wachin/xinput-plus","last_synced_at":"2026-05-16T18:31:11.097Z","repository":{"id":309809420,"uuid":"1037632599","full_name":"wachin/xinput-plus","owner":"wachin","description":"🖱️ A simple GUI tool for adjusting mouse and touchpad speed in X11 Linux window managers like Openbox, JWM, iceWM, and Fluxbox. Perfect for external keyboards with integrated touchpads (like Logitech K400) and laptop touchpads","archived":false,"fork":false,"pushed_at":"2026-05-13T19:26:18.000Z","size":694,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-13T21:27:52.285Z","etag":null,"topics":["fluxbox","gui","icewm","jwm","libinput","mouse","openbox","pyqt6","python","python3","qt6","touchpad","x11","xinput"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wachin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-13T22:00:38.000Z","updated_at":"2026-05-13T19:26:26.000Z","dependencies_parsed_at":"2025-08-14T00:10:36.930Z","dependency_job_id":"f73e26f9-5db6-4055-8e61-c4c0dd896b73","html_url":"https://github.com/wachin/xinput-plus","commit_stats":null,"previous_names":["wachin/xinput-plus"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/wachin/xinput-plus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wachin%2Fxinput-plus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wachin%2Fxinput-plus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wachin%2Fxinput-plus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wachin%2Fxinput-plus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wachin","download_url":"https://codeload.github.com/wachin/xinput-plus/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wachin%2Fxinput-plus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33114130,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T04:41:52.686Z","status":"ssl_error","status_checked_at":"2026-05-16T04:41:52.009Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fluxbox","gui","icewm","jwm","libinput","mouse","openbox","pyqt6","python","python3","qt6","touchpad","x11","xinput"],"created_at":"2025-08-19T09:16:56.152Z","updated_at":"2026-05-16T18:31:11.088Z","avatar_url":"https://github.com/wachin.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🖱️ xinput-plus\n\n## Adjust your mouse or touchpad speed (very easy!)\n\nThis program is for **Linux** and allows you to **change the pointer speed** (mouse or touchpad cursor) graphically for use in X11 Window Managers such as: Openbox, JWM, iceWM, Fluxbox, and other minimalist window managers where there's no GUI program to do this, without having to type complicated commands. It's ideal if you use external keyboards that come with **integrated touchpad keyboard**, like the **Logitech K400**, or even for your laptop's touchpad if you feel the cursor moves too slowly.\n\n---\n\n## What is it for?\n\n- ✅ Increase or decrease mouse or touchpad speed.\n- ✅ Save configuration so it doesn't get lost when restarting.\n- ✅ Works with devices like:\n  - Keyboards with touchpad (e.g.: Logitech K400)\n  - USB mice\n  - Laptop touchpads\n\n---\n\n## 🖥Requirements\n\nBefore using it, make sure you have the following installed on your Linux computer:\n\n```bash\nsudo apt install xinput libinput-tools python3-pyqt6 python3-pyqt6.qtsvg\n```\n\n1. ⚠️ This program only works on **X11**, not on Wayland.  \n2. It's only for X11 WM like Openbox, JWM, iceWM, Fluxbox, Xubuntu, etc\n3. In 2025, for example in GNOME, KDE, before logging in you can select X11 to enter instead of Wayland.\n\n---\n\n## How to use the program\n\n### **1st OPTION: Download the repository**\nAt:\n\n[https://github.com/wachin/xinput-plus](https://github.com/wachin/xinput-plus)\n\nclick on the arrow-like dropdown in Code:\n\n**\u003c\u003e  Code ▼**\n\nand click on:\n\n**Download ZIP**\n\ndecompress it, and there inside the folder is the `xinput-plus.py` file.\n\nor you can clone it:\n\n### **2nd OPTION: Clone the repository**\n\n**1.-** Since we already have git installed, enter in a terminal in a folder where you have Linux programs:\n\n```bash\ngit clone https://github.com/wachin/xinput-plus\n```\n\n**2.-** Give it execution permissions\n\nIt can be done by right-clicking in the **file manager** and in the \"**Permissions**\" tab verify that it's marked as executable\n\nor from the terminal with:\n\n```bash\nchmod +x xinput-plus.py\n```\n\n## Running with Launcher.sh\n\nMake sure the `Launcher.sh` script is executable, in the file manager right-click on it and in the \"**Permissions**\" tab make sure \"**is executable**\" is checked\n\nDouble-click the `Launcher.sh` script and click `Execute`\n\n👉 A window will open:\n\n## Running xinput-plus\n\n**1.-** **Open a terminal**\n**2.-** **Go to the folder** where the `xinput-plus.py` file is, or open a terminal there from your file manager\n**3.-** **Run the program** with this command:\n\n```bash\npython3 xinput-plus.py\n```\n\nand it will open:\n\n![](assets/images/01-xinput-plus-light-theme.png)\n\n\u003e 💡 On some Linux distributions you can right-click on the `xinput-plus.py` file and open with python.\n\n---\n\n## 🎛How to use it\n\n1. When opening the program.\n2. In the left list, **click on your device** (for example: \"Logitech K400\").\n3. Use the slider to change the speed:\n   - ← Slower (down to -1.0)\n   - → Faster (up to 1.0 by default; up to 2.0 in extended CTM mode)\n4. **Enable extra speed (optional)**: Check the box labeled \"Extra speed (for slow devices)\" to allow the slider to go up to 2.0, which provides significantly faster cursor movement for devices like the Logitech K400. This mode uses the `Coordinate Transformation Matrix` to scale pointer movement beyond the standard range.\n5. The configuration saves automatically as you move the slider — no button press needed.\n\n✅ Done! The change applies instantly and saves automatically. After restarting your computer, open the program and the saved settings (including extended speed mode) will be applied automatically.\n\n---\n\n## Where is the configuration saved?\n\nThe program saves your settings in this file (don't delete it if you don't want to lose the configuration):\n\n```\n~/.config/xinput-plus.json\n```\n\n---\n\n## Using the system Dark Theme (Qt6 + Kvantum)\n\n**xinput-plus** is a **PyQt6** app, so it follows your **Qt6** theme. To use a dark theme system-wide via **Kvantum**:\n\n### Debian 12 (Bookworm)\n\n1. **Install Qt6 theming tools**\n\n```bash\nsudo apt install qt6ct qt6-style-kvantum\n```\n\n2. **Select the style in Qt6 Settings**\n\n* Open **qt6ct** → **Appearance / Style** → choose **Kvantum**.\n* (Optional) Open **Kvantum Manager** and pick your favorite **dark** theme.\n\n3. **Restart xinput-plus**\n   No app changes are required—xinput-plus will automatically adopt the system dark theme.\n\n\u003e **Note (LXQt on Debian 12):** As you observed, **no environment variables** were needed—LXQt already exposes the Qt6 platform theme correctly.\n\n![](assets/images/02-xinput-plus%20dark%20theme.png)\n\n### Other desktops / window managers\n\nSome environments don’t expose the Qt6 platform theme by default. If the dark theme doesn’t apply after the steps above, set these **environment variables** (pick *one* place, e.g. your `Launcher.sh`, `~/.profile`, or the app’s `.desktop` file):\n\n```bash\nexport QT_QPA_PLATFORMTHEME=qt6ct\nexport QT_STYLE_OVERRIDE=kvantum\n```\n\nThen log out/in or restart the app.\n\n\u003e **Heads-up:** `qt5ct` only affects **Qt5** applications. For **PyQt6/Qt6** apps like xinput-plus, you need **qt6ct** (and `qt6-style-kvantum`).\n\n---\n\n## How does it work internally?\n\nIt uses Linux commands with `xinput` to change the device speed in real time. For standard speed adjustments, it modifies the `libinput Accel Speed` property. For extended speed mode (up to 2.0), it uses the `Coordinate Transformation Matrix` to scale pointer movement, allowing higher sensitivity for devices that need it. The interface does everything for you!\n\n---\n\n## Building and testing the .deb with pbuilder\n\n`pbuilder` builds the package inside a clean, minimal Debian unstable chroot —\nthe same way Debian's build servers do. If the build passes here, you can be\nconfident no build dependency is missing from `debian/control`.\n\n### Install pbuilder\n\n```bash\nsudo apt install pbuilder\n```\n\n### Build steps\n\nRun these commands from inside the project directory\n(`~/Dev/xinput-plus-dev/xinput-plus`):\n\n```bash\n# 1. Create the pbuilder unstable chroot (only needed once)\nsudo pbuilder create --distribution unstable\n\n# 2. Create the upstream orig tarball (required by the 3.0 (quilt) source format)\ntar --exclude=./debian --exclude=./.git -czf ../xinput-plus_6.6.4.orig.tar.gz .\n\n# 3. Build the source package\ndebuild -us -uc -S\n\n# 4. Build the binary package inside the clean chroot\nsudo pbuilder build --distribution unstable ../xinput-plus_6.6.4-1.dsc\n```\n\nAfter a successful build the parent directory (`~/Dev/xinput-plus-dev/`) will\ncontain:\n\n```\nxinput-plus/                        ← source tree\nxinput-plus_6.6.4-1.dsc\nxinput-plus_6.6.4-1.debian.tar.xz\nxinput-plus_6.6.4-1_source.build\nxinput-plus_6.6.4-1_source.buildinfo\nxinput-plus_6.6.4-1_source.changes\nxinput-plus_6.6.4.orig.tar.gz\n```\n\nThe built `.deb` and related files are placed under pbuilder's result\ndirectory:\n\n```\n/var/cache/pbuilder/result/xinput-plus_6.6.4-1.dsc\n/var/cache/pbuilder/result/xinput-plus_6.6.4-1_all.deb\n/var/cache/pbuilder/result/xinput-plus_6.6.4-1_amd64.buildinfo\n/var/cache/pbuilder/result/xinput-plus_6.6.4-1_amd64.changes\n/var/cache/pbuilder/result/xinput-plus_6.6.4-1.debian.tar.xz\n/var/cache/pbuilder/result/xinput-plus_6.6.4-1_source.changes\n/var/cache/pbuilder/result/xinput-plus_6.6.4.orig.tar.gz\n```\n\n### Install and test\n\n```bash\nsudo apt install /var/cache/pbuilder/result/xinput-plus_6.6.4-1_all.deb\n```\n\nRun the program:\n\n```bash\nxinput-plus\n```\n\nForce a specific language (e.g. Spanish):\n\n```bash\nxinput-plus --lang=es\n```\n\nRead the man page:\n\n```bash\nman xinput-plus\n```\n\nUninstall:\n\n```bash\nsudo apt purge xinput-plus\n```\n\n---\n\n## Developer documentation\n\nThe `docs/debian/` folder contains guides for developers who want to build,\ntest, or publish this package:\n\n| Guide | Language | Description |\n|-------|----------|-------------|\n| [compile-and-test-deb.md](docs/debian/compile-and-test-deb.md) | English | How to build the `.deb` locally and test it on your machine |\n| [compilar-y-probar-deb_ES.md](docs/debian/compilar-y-probar-deb_ES.md) | Español | Cómo compilar el `.deb` localmente y probarlo en tu ordenador |\n| [how-to-publish-on-debian.md](docs/debian/how-to-publish-on-debian.md) | English | Full guide to getting the package accepted into packages.debian.org |\n| [como-publicar-en-debian.md](docs/debian/como-publicar-en-debian.md) | Español | Guía completa para publicar el paquete en packages.debian.org |\n\n---\n\n## Want to improve this program?\n\nThis code is made in Python with PyQt6, perfect for students who want to learn about:\n- Graphical interfaces\n- Linux automation\n- Hardware control\n\nFeel free to modify it, improve it, or use it in your projects!\n\n---\n\n## Troubleshooting\n\n### **\"Permission denied\" errors when running the program**\n\nIf the program not working when running from terminal you see errors like:\n\n`Failed to open /dev/input/eventX (Permission denied)`\n\nwhen running `xinput-plus.py`, it means your user lacks permission to access input devices. This is common in minimal Linux installations (e.g., Debian netinstall). To fix it:\n    \n1. **Add your user to the `input` group**:\n\n```bash\nsudo usermod -aG input $USER\n```\n\n   Log out and back in, or reboot, to apply the change.\n\n2. **Verify permissions**:\n   Check that `/dev/input/event*` files are accessible:\n   \n```bash\nls -l /dev/input/event*\n```\n\n   They should have group `input` and permissions like \n   \n**Restart**\n\n---\n\n# Internationalization (i18n) Guide\n\nThis app supports translations with Qt **`.ts` → `.qm`** files. Follow these steps to add **any language** (Spanish shown as example).\n\n---\n\n## Requirements\n\n* **Qt Creator** installed on your Linux OS\n* **PyQt6 dev tools** (provides `pylupdate6`)\n\n```bash\nsudo apt install pyqt6-dev-tools\n```\n* Qt Linguist \u0026 lrelease from Qt5 (work fine for app translations):\n\n```bash\nsudo apt install qttools5-dev-tools\n```\n\n* Create the translations folder:\n\n```bash\nmkdir -p i18n\n```\n\n\u003e The app loads compiled files from **`./i18n/`** (same directory as `xinput-plus.py`), e.g. `i18n/xinput-plus_es.qm`.\n\n---\n\n## Spanish example (es)\n\n### 1) Extract source strings → `.ts`\n\n```bash\npylupdate6 --ts i18n/xinput-plus_es.ts xinput-plus.py\n```\n\n### 2) Translate with Qt Linguist\n\n* **From Qt Creator**: right-click `xinput-plus_es.ts` → open with Linguist → translate → mark entries as **Finished** → Save.\n* **From terminal**:\n\n  ```bash\n  linguist i18n/xinput-plus_es.ts\n  ```\n\n### 3) Compile `.ts` → `.qm` in `i18n/`\nYou can do this from the \"Qt Linguist\" tool from Qt Creator by clicking on \"File - Distribute As\" and saving as .qm, or from terminal.\n\nOn Debian/MX Linux, `lrelease-qt6` is not installed by default. The package\n`qttools5-dev-tools` installs it simply as `lrelease`, which works perfectly\nfor both Qt5 and Qt6 `.ts` files:\n\n```bash\nsudo apt install qttools5-dev-tools\n```\n\nThen compile:\n\n```bash\nlrelease i18n/xinput-plus_es.ts -qm i18n/xinput-plus_es.qm\n```\n\nYou should see output like:\n\n```\nUpdating 'i18n/xinput-plus_es.qm'...\n    Generated 21 translation(s) (21 finished and 0 unfinished)\n```\n\nIf for some reason `lrelease` is not found, this fallback finds whichever\nvariant is available on your system:\n\n```bash\nLREL=$(command -v lrelease-qt6 || command -v lrelease || echo /usr/lib/qt5/bin/lrelease)\n$LREL i18n/xinput-plus_es.ts -qm i18n/xinput-plus_es.qm\n```\n\n### 4) Run the app in Spanish\n\n```bash\npython3 xinput-plus.py --lang=es\n```\n\n---\n\n## Any other language\n\nReplace the language code:\n\n```bash\n# French (fr)\npylupdate6 --ts i18n/xinput-plus_fr.ts xinput-plus.py\nlinguist i18n/xinput-plus_fr.ts\n$LREL i18n/xinput-plus_fr.ts -qm i18n/xinput-plus_fr.qm\npython3 xinput-plus.py --lang=fr\n\n# Brazilian Portuguese (pt_BR)\npylupdate6 --ts i18n/xinput-plus_pt_BR.ts xinput-plus.py\nlinguist i18n/xinput-plus_pt_BR.ts\n$LREL i18n/xinput-plus_pt_BR.ts -qm i18n/xinput-plus_pt_BR.qm\npython3 xinput-plus.py --lang=pt_BR\n```\n\n**File naming:** the loader tries common patterns like `xinput-plus_es.qm`, `xinput-plus_es_ES.qm`, and `xinput-plus_es-ES.qm`. Putting `xinput-plus_\u003clang\u003e.qm` inside `./i18n` is sufficient.\n\n---\n\n## Important notes for translations\n\n### 1) Use the canonical filename when extracting strings\n\nThe extraction command assumes your main file is named **`xinput-plus.py`**:\n\n```bash\npylupdate6 --ts i18n/xinput-plus_es.ts xinput-plus.py\n```\n\n* **Do NOT** change `xinput-plus.py` to another filename while developing the program.\n  During development, new UI strings are added frequently; if you point `pylupdate6` at some other file, those new strings **won’t** be picked up and **won’t** appear in the `.ts` for translation.\n* If you really want to experiment with a differently named file (e.g., a versioned copy), do it in a **separate folder** and treat it as a separate exercise—not the one you use to develop and extract strings from.\n\n**If you must use multiple source files**, pass **all** of them to `pylupdate6`:\n\n```bash\npylupdate6 --ts i18n/xinput-plus_es.ts xinput-plus.py other_module.py optional_extras.py\n```\n\nThis ensures every translatable string is included in the `.ts`.\n\n---\n\n### 2) Translating safely in Qt Linguist (placeholders!)\n\nWhen you open the `.ts` in **Qt Linguist (Qt 5 Linguist)**, be careful with strings that include **placeholders**. You may **translate only the normal words**, **not** the placeholders inside braces.\n\n**Examples:**\n\n* Source:\n\n  ```\n  Device: {name} (id {id})\n  ```\n\n  ✅ Correct Spanish:\n\n  ```\n  Dispositivo: {name} (id {id})\n  ```\n  \n![](assets/images/03-Qt-5-Linguist-when-you-go-to-translate-the-program-to-the-spanish.png)\n\n  (translate only “Device” → “Dispositivo”; keep `{name}` and `{id}` exactly as they are)\n\n* Source:\n\n  ```\n  Device: {name}\n  ```\n\n  ✅ Correct Spanish:\n\n  ```\n  Dispositivo: {name}\n  ```\n\n* Source:\n\n  ```\n  Speed: {val:.2f}\n  ```\n\n  ✅ Correct Spanish:\n\n  ```\n  Velocidad: {val:.2f}\n  ```\n\n\u003e **Never change** the content inside `{ ... }` (names, formats, punctuation).\n\u003e If you alter `{name}`, `{id}`, or `{val:.2f}`, the program won’t work correctly at runtime.\n\n---\n\n### 3) Compile after translating\n\nAfter updating translations in Linguist (and marking them as **Finished**),\ncompile to `.qm`. On Debian/MX Linux, use `lrelease` from `qttools5-dev-tools`\n(it handles Qt6 `.ts` files just fine — `lrelease-qt6` is not needed):\n\n```bash\nlrelease i18n/xinput-plus_es.ts -qm i18n/xinput-plus_es.qm\n```\n\nIf `lrelease` is not found, install it first:\n\n```bash\nsudo apt install qttools5-dev-tools\n```\n\nIf you need a fallback that works across different systems:\n\n```bash\nLREL=$(command -v lrelease-qt6 || command -v lrelease || echo /usr/lib/qt5/bin/lrelease)\n$LREL i18n/xinput-plus_es.ts -qm i18n/xinput-plus_es.qm\n```\n\nor you can compile from Qt 5 Linguist  \n\nFile - Distribute as...\n\nand save example to: xinput-plus_es.qm\n\nThen run the app:\n\n```bash\npython3 xinput-plus.py --lang=es\n```\n\nalso you can launch in other languages, example:\n\n```bash\npython3 xinput-plus.py --lang=en\n```\n\nYou should see Spanish UI and, on recent versions, a console line like:\n\n```\n[i18n] Loaded app translation: xinput-plus_es.qm\n```\n\n---\n\n## 4) Keeping the .ts file clean after source changes\n\nWhenever you rename, remove, or reword a UI string in `xinput-plus.py`,\nthe old string becomes **obsolete** in the `.ts` file. Qt Linguist marks\nit as `vanished` but cannot delete it — you have to do that from the\ncommand line.\n\n**Step 1 — Regenerate the `.ts` and discard obsolete entries:**\n\n```bash\npylupdate6 --no-obsolete --ts i18n/xinput-plus_es.ts xinput-plus.py\n```\n\nThe `--no-obsolete` flag removes any string that no longer exists in the\nsource. Without it, `pylupdate6` keeps old entries forever.\n\nYou will see a summary like:\n\n```\nSummary of changes to i18n/xinput-plus_es.ts:\n    21 existing messages were found\n    3 obsolete messages were discarded\n```\n\n**Step 2 — Translate any new strings that appeared:**\n\nAfter regenerating, open the `.ts` in Linguist and look for entries marked\nas **unfinished** (shown in yellow). These are strings that were added or\nchanged in the source and have no translation yet. Translate them and mark\nthem as **Finished**.\n\nAlternatively, you can add translations directly in the `.ts` file by\nchanging:\n\n```xml\n\u003ctranslation type=\"unfinished\" /\u003e\n```\n\nto:\n\n```xml\n\u003ctranslation\u003eYour translation here\u003c/translation\u003e\n```\n\n**Step 3 — Recompile:**\n\n```bash\nlrelease i18n/xinput-plus_es.ts -qm i18n/xinput-plus_es.qm\n```\n\nThe output should show **0 unfinished**:\n\n```\nUpdating 'i18n/xinput-plus_es.qm'...\n    Generated 20 translation(s) (20 finished and 0 unfinished)\n```\n\n\u003e **When to do this:** run `pylupdate6 --no-obsolete` before every release,\n\u003e or any time you change a UI string in the Python source.\n\n---\n\n## Developer note\n\n* Source strings in `xinput-plus.py` are wrapped in `self.tr(\"…\")` so `pylupdate6` can extract them.\n* The app’s i18n loader **keeps `QTranslator` references alive** to avoid Python GC, ensuring translations apply from startup.\n\n---\n\n## About this program\n\nCreated by: **Washington Indacochea Delgado**\nLicense: **GNU GPL3** (free and open source)\n\n✨ Thanks for using `xinput-plus`!  \n\nFor those who love X11 and minimalist window managers. 👀💙\n\n---\n\n\u003e 🌟 If it helped you, give it a star ⭐ on GitHub. It helps a lot!\n\nGod bless you\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwachin%2Fxinput-plus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwachin%2Fxinput-plus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwachin%2Fxinput-plus/lists"}