{"id":25765352,"url":"https://github.com/psychoducktech/psychos","last_synced_at":"2026-05-02T08:33:51.660Z","repository":{"id":264213303,"uuid":"892716724","full_name":"PsychoDuckTech/PsychOS","owner":"PsychoDuckTech","description":"Lightweight, modular keyboard firmware for ESP32 devices","archived":false,"fork":false,"pushed_at":"2025-02-24T22:37:27.000Z","size":986,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-02-24T23:28:57.241Z","etag":null,"topics":["cpp","esp32-s3","kernel","keyboard","modular","os","platformio"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PsychoDuckTech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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-11-22T16:31:56.000Z","updated_at":"2025-02-24T22:37:30.000Z","dependencies_parsed_at":"2024-12-21T14:21:55.807Z","dependency_job_id":"eb7dd605-a700-480a-8b21-cc757f9e4d66","html_url":"https://github.com/PsychoDuckTech/PsychOS","commit_stats":null,"previous_names":["psychoducktech/psychos"],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PsychoDuckTech%2FPsychOS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PsychoDuckTech%2FPsychOS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PsychoDuckTech%2FPsychOS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PsychoDuckTech%2FPsychOS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PsychoDuckTech","download_url":"https://codeload.github.com/PsychoDuckTech/PsychOS/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240941514,"owners_count":19882063,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["cpp","esp32-s3","kernel","keyboard","modular","os","platformio"],"created_at":"2025-02-26T22:18:13.872Z","updated_at":"2026-05-02T08:33:51.641Z","avatar_url":"https://github.com/PsychoDuckTech.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PsychOS\n\nA feature-rich firmware for custom mechanical keyboards, built on ESP32-S3.\n\n## Supported Matrix Hardware Setups\n|   Device    |           Status           |       Notes        |\n| :---------: |  :----------------------:  |  :-------------:   |\n| Prototype 0 |   ![alt text][supported]   |  Actively tweaked  |\n| 2x2 Matrix  |  ![alt text][development]  | Temporarily halted |\n\n[supported]: https://img.shields.io/badge/-supported-green \"supported\"\n[preview]: https://img.shields.io/badge/-preview-orange \"preview\"\n[development]: https://img.shields.io/badge/-unsupported-red \"in development\"\n\n## Core Features\n\n|              Feature              |     Status      |                    Notes                    |\n| :------------------------------: | :-------------: | :-----------------------------------------: |\n|       Matrix Key Scanning        |    Supported    |     High-performance scanning with debounce  |\n|    USB HID Communication        |    Supported    |       Full keyboard and consumer input       |\n|    Bluetooth Module Support     |    Supported    |   Wireless numpad module connectivity       |\n|     Display Interface          |    Supported    |    ILI9341-based UI with custom screens    |\n|     Rotary Encoder            |    Supported    |    Volume control with press detection     |\n|     RGB Underglow             |    Supported    |    Customizable effects and colors        |\n|     WPM Counter              |    Supported    |    Real-time typing speed monitoring      |\n|     Multi-tasking            |    Supported    |    FreeRTOS-based task management        |\n|     Settings System          |    Supported    |    On-device configuration menus         |\n|     Audio Feedback           |    Supported    |    Programmable buzzer tones             |\n|     Clock                    |    Supported    |    Real-time clock with sync            |\n|     Layer System             |       WIP       |    Multiple keymap layer support         |\n|     Macro Support            |   Planned    |    Custom macro programming              |\n| Screen Pixel Flushing | Supported | Clean up stuck or burned pixels in under 1 minute! |\n\n## Technical Features\n- **Task Management**: FreeRTOS-based multitasking system\n- **Communication**:\n  - USB HID for keyboard and consumer controls\n  - Bluetooth LE for wireless module support\n  - Serial interface for configuration and debugging\n- **Input Processing**:\n  - Advanced matrix scanning with hardware multiplexing\n  - Rotary encoder with acceleration and button detection\n  - Real-time WPM calculation\n- **Output Systems**:\n  - TFT display with custom UI components\n  - RGB LED control with multiple effects\n  - Buzzer feedback system\n- **Configuration**:\n  - Non-volatile settings storage (not functional at the moment)\n  - Real-time clock synchronization\n  - On-device settings menu\n\n## Serial Commands\nThe firmware supports the following commands:\n- `connectionStatus [0/1/?]` - Get/set connection state\n- `caps [0/1/?]` - Get/set caps lock status\n- `time.hours [0-23]` - Set hours\n- `time.minutes [0-59]` - Set minutes\n- `time.seconds [0-59]` - Set seconds\n\n## Installation\n\n### Hardware Requirements\n- ESP32-S3 microcontroller\n- Key matrix setup (compatible with standard mechanical switches)\n- ILI9341 display (optional)\n- Rotary encoder (optional)\n- RGB LEDs (optional)\n- Buzzer (optional)\n\n### Flashing Instructions\n1. Download the latest `firmware.bin` from the releases page\n2. Install esptool: `pip install esptool`\n3. Put your ESP32-S3 into bootloader mode\n4. Flash using esptool\n\n## Development\n\n### Adding Translations\nTranslations are managed through two main files:\n- `source/include/translations.h`: Declares all translatable strings\n- `source/src/translations.cpp`: Implements the translations\n\nTo add a new language:\n1. Define a new language identifier (e.g., `USE_FR_FR` for French)\n2. Add translations in `translations.cpp` under the new language condition\n3. Keep the string declarations in `translations.h` unchanged\n\nExample:\n```cpp\n#ifdef USE_FR_FR\n// System messages\nconst char *task_clock_started = \"Tâche d'horloge démarrée.\";\n// ... more translations ...\n#endif\n```\n\nContributions for new languages are welcome! Please maintain the existing structure when adding translations.\n\n### Versioning\nFollowing Semantic Versioning 2.0.0:\n- Format: `MAJOR.MINOR.PATCH-PRERELEASE+BUILD`\n- Pre-release stages: `alpha` \u003c `beta` \u003c `rc`\n- Build metadata: Date (YYYYMMDD) and CI run number\n\n## Project Activity\n![Alt](https://repobeats.axiom.co/api/embed/41e28f23eb43e17ac67db3d966de3dd565079220.svg \"Repobeats analytics image\")\n\n## License\nLicensed under [LGPL-2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) unless otherwise noted.\nThird-party components (e.g., FreeRTOS) maintain their respective licenses.\n\n## Commercial Use\nThis firmware is provided \"AS IS\" without commercial support. You may:\n- Distribute links to this firmware\n- Ship hardware with this firmware pre-installed\n\nPlease link to this repository rather than redistributing the files to ensure users always get the latest version.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpsychoducktech%2Fpsychos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpsychoducktech%2Fpsychos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpsychoducktech%2Fpsychos/lists"}