{"id":19150606,"url":"https://github.com/night-crawler/dechat-rs","last_synced_at":"2026-04-15T23:32:50.374Z","repository":{"id":217533092,"uuid":"744040503","full_name":"night-crawler/dechat-rs","owner":"night-crawler","description":"A utility for keyboard de-chattering / debouncing","archived":false,"fork":false,"pushed_at":"2024-02-14T13:27:25.000Z","size":50,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-22T20:46:44.047Z","etag":null,"topics":["chattering","debounce","evdev","keyboard","linux"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/night-crawler.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-16T14:14:37.000Z","updated_at":"2024-02-14T15:57:04.000Z","dependencies_parsed_at":"2024-11-09T08:12:38.066Z","dependency_job_id":"22c25bbb-f859-49b2-8818-ec5fdd64e20f","html_url":"https://github.com/night-crawler/dechat-rs","commit_stats":null,"previous_names":["night-crawler/dechat-rs"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/night-crawler/dechat-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/night-crawler%2Fdechat-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/night-crawler%2Fdechat-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/night-crawler%2Fdechat-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/night-crawler%2Fdechat-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/night-crawler","download_url":"https://codeload.github.com/night-crawler/dechat-rs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/night-crawler%2Fdechat-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31865067,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"ssl_error","status_checked_at":"2026-04-15T15:24:39.138Z","response_time":63,"last_error":"SSL_read: 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":["chattering","debounce","evdev","keyboard","linux"],"created_at":"2024-11-09T08:12:32.681Z","updated_at":"2026-04-15T23:32:50.344Z","avatar_url":"https://github.com/night-crawler.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dechat-rs\n\n`dechat-rs` is a tool written in Rust, aimed at reducing keyboard chatter / debouncing.\n\nFeatures:\n- Customizable throttling timeouts for multiple keys or key ranges.\n- Enhanced handling for repeated chatter scenarios.\n\nMost de-chatter solutions simply block the next input if it matches the previous key code and immediately forget that\nkey if it was released. However, that approach doesn't always cut it. There are often cases of multiple subsequent \nbounces, like in \"retr**t**ack\", \"plau**l**sible\", \"pottery**y**\", etc.\n\nThis approach ensures that no key code repeats within a predefined time frame.\n\n## Installation\n\n## Latest Debian releases (GitHub releases)\n\n```bash\ncurl https://api.github.com/repos/night-crawler/dechat-rs/releases/latest | \\\n  jq '.assets[] | select(.name | contains(\"deb\")) | .browser_download_url' | \\\n  tr -d \\\" | \\\n  wget -qi -\nsudo dpkg -i dechat-rs_*.deb\n```\n\n## Latest Arch Linux releases (GitHub releases)\n\n```bash\ncurl https://api.github.com/repos/night-crawler/dechat-rs/releases/latest | \\\n  jq '.assets[] | select(.name | contains(\"pkg.tar.zst\")) | .browser_download_url' | \\\n  tr -d \\\" | \\\n  wget -qi -\nsudo pacman -U dechat-rs-*.pkg.tar.zst\n````\n\n## From sources (arch)\n\nInstall rust:\n\n```bash\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n```\n\nInstall [cargo-arch](https://github.com/wdv4758h/cargo-arch)\n\n```bash \ncargo install cargo-arch\n```\n\nCheckout the repository:\n\n```bash\ngit clone https://github.com/night-crawler/dechat-rs/\ncd dechat-rs\n````\n\nRun build:\n\n```bash\ncargo arch\n```\n\nInstall the package:\n\n```bash\nsudo pacman -U dechat-rs-*.pkg.tar.zst\n```\n\n## Usage\n\nRoot access is required.\n\n### List devices\n\nDevices are sorted by bus, vendor, product, version, name, and path for consistent order.\n\n```bash\nUsage: dechat-rs list [OPTIONS]\n\nOptions:\n  -p, --path           Show the path to the input device\n  -P, --physical-path  Show the physical path to the input device\n  -n, --name           Show the name of the input device\n  -i, --id             Show the bus, vendor, product, and version of the input device\n  -k, --keys           Show all keys supported by the input device\n  -a, --all            Enable all flags: (-Ppnik)\n  -h, --help           Print help\n  -V, --version        Print version\n```\n\nList all devices: \n\n```bash\nsudo dechat-rs list\n```\n```\npath=/dev/input/event9 physical_path=ALSA\npath=/dev/input/event11 physical_path=ALSA\npath=/dev/input/event10 physical_path=ALSA\npath=/dev/input/event4 physical_path=usb-0000:04:00.3-3/input0\npath=/dev/input/event5 physical_path=usb-0000:04:00.3-3/input2\npath=/dev/input/event12 physical_path=?\n```\n\nList all devices with names and supported keys:\n\n```bash\nsudo dechat-rs list -Ppnik\n# or \nsudo dechat-rs list -a\n```\n\n```\npath=/dev/input/event3 physical_path=LNXVIDEO/video/input0 name=Video Bus bus=Host bus_id=0x19 vendor=0x0 product=0x6 version=0x0\n        Keys: KEY_BRIGHTNESSDOWN=224, KEY_BRIGHTNESSUP=225, KEY_SWITCHVIDEOMODE=227, KEY_VIDEO_NEXT=241, KEY_VIDEO_PREV=242, KEY_BRIGHTNESS_CYCLE=243, KEY_BRIGHTNESS_AUTO=244, KEY_DISPLAY_OFF=245\npath=/dev/input/event6 physical_path=asus-wireless/input0 name=Asus Wireless Radio Control bus=Host bus_id=0x19 vendor=0x1043 product=0x0 version=0x0\n        Keys: KEY_RFKILL=247\n```\n\n### Start de-chattering\n\nTo de-chatter a specific device, use filters based on the device name. \nIf multiple devices share a name, use these filters for distinction:\n- `s:` - starts with (i.e. `de-chatter -t 0:1000:70 -n s:'Asus Keyboard' -P 'usb-0000:04:00.3-3/input2'`)\n- `e:` or no prefix - equals \n- `c:` - contains\n\nIf filters aren't sufficient, use `--id` or `-i` to select by device index as shown in the de-chatter sub-command output:\n\n```bash\nsudo dechat-rs de-chatter -t 0:1000:70 -n s:'Asus'\n[2024-01-30T17:18:43Z INFO  dechat_rs::execute] A device with index=0 after applying filters: Asus Keyboard (/dev/input/event4)\n[2024-01-30T17:18:43Z INFO  dechat_rs::execute] A device with index=1 after applying filters: Asus Keyboard (/dev/input/event5)\n[2024-01-30T17:18:43Z INFO  dechat_rs::execute] A device with index=2 after applying filters: Asus WMI hotkeys (/dev/input/event8)\n[2024-01-30T17:18:43Z INFO  dechat_rs::execute] A device with index=3 after applying filters: Asus Wireless Radio Control (/dev/input/event6)\n```\n\nPass throttling timeouts with key codes to filter. Format: `start_code_inclusive:end_code_inclusive:timeout`, e.g.:\n\n```bash\nsudo -E dechat-rs de-chatter -t 0:1000:70 -n 'Asus Keyboard' -P 'usb-0000:04:00.3-3/input2'\n```\n\nIf the specified range is too large, it will be adjusted to the maximum supported range.\n\nPeriodically, the tool will display statistics about the number of throttled events:\n\n``` \n[2024-01-30T16:58:33Z INFO  dechat_rs::key_filter] Throttled: KEY_BACKSPACE:14x13, KEY_E:18x2, KEY_Y:21x2, KEY_O:24x2, KEY_ENTER:28x10, KEY_LEFTCTRL:29x135, KEY_LEFTSHIFT:42x73, KEY_N:49x2, KEY_LEFTALT:56x6, KEY_UP:103x44, KEY_LEFT:105x10, KEY_RIGHT:106x19, KEY_DOWN:108x223\n```\n\n### Systemd service\n\nCopy the dechat-rs service unit to the systemd directory:\n\n```bash\nsudo curl https://raw.githubusercontent.com/night-crawler/dechat-rs/main/dechat.service -o /lib/systemd/system/dechat.service\n```\n\nOr create a new file with the following content:\n\n```\n[Unit]\nDescription=Keyboard DeChattering Service\n\n[Service]\nExecStart=/usr/bib/dechat-rs de-chatter -t 0:1000:70 -n s:'Asus Keyboard' -P 'usb-0000:04:00.3-3/input2'\n\nRestart=always\nRestartSec=10\n\n[Install]\nWantedBy=multi-user.target\n```\n\nFind out the right keyboard you are using and edit the service file accordingly:\n\n```bash\nsudo systemctl edit dechat.service\n```\n\nRun de-chattering:\n\n```bash\nsudo systemctl enable dechat --now\n```\n\nCheck if the service is running:\n\n```bash\nsudo systemctl status dechat\n```\n\n```bash \njournalctl -xefu dechat.service\n```\n\n### Udev \n\nTODO","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnight-crawler%2Fdechat-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnight-crawler%2Fdechat-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnight-crawler%2Fdechat-rs/lists"}