├── layouts └── .keep ├── users └── .keep ├── keyboards ├── .keep ├── ymdk │ └── yd60mq │ │ └── keymaps │ │ └── claclups_mirrored │ │ ├── rules.mk │ │ ├── config.h │ │ └── keymap.c ├── clackups │ └── xtips_x3s │ │ ├── original_firmware │ │ ├── X3S_orig_firmware._bin │ │ ├── via-x3.json │ │ └── x_tips_x3_keyboard.layout.json │ │ ├── keymaps │ │ ├── t1 │ │ │ └── keymap.c │ │ └── default │ │ │ └── keymap.json │ │ ├── readme.md │ │ ├── config.h │ │ ├── halconf.h │ │ ├── chconf.h │ │ └── keyboard.json └── kprepublic │ └── cstc40 │ └── single_pcb │ └── keymaps │ ├── clackups_1hl │ └── keymap.c │ └── clackups_1hr │ └── keymap.c ├── cstc40_clackups_1hr_1hl.jpg ├── .gitignore ├── YMDK_YD60MQ_one-handed_layout_Ukrainian.pdf ├── qmk.json ├── .clangd ├── .vscode └── extensions.json ├── .github └── workflows │ └── build_binaries.yaml ├── Makefile ├── .devcontainer ├── setup.sh └── devcontainer.json ├── .editorconfig ├── README.md ├── .clang-format ├── ONE_HANDED_CSTC40.md └── LICENSE /layouts/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /users/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /keyboards/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /keyboards/ymdk/yd60mq/keymaps/claclups_mirrored/rules.mk: -------------------------------------------------------------------------------- 1 | RGBLIGHT_ENABLE = no 2 | -------------------------------------------------------------------------------- /keyboards/ymdk/yd60mq/keymaps/claclups_mirrored/config.h: -------------------------------------------------------------------------------- 1 | #define ONESHOT_TIMEOUT 2000 2 | -------------------------------------------------------------------------------- /cstc40_clackups_1hr_1hl.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clackups/qmk_userspace/HEAD/cstc40_clackups_1hr_1hl.jpg -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Junk files 2 | *.bak 3 | *.swp 4 | *~ 5 | .DS_Store 6 | ._* 7 | 8 | # Firmware files 9 | *.hex 10 | *.bin 11 | *.uf2 12 | -------------------------------------------------------------------------------- /YMDK_YD60MQ_one-handed_layout_Ukrainian.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clackups/qmk_userspace/HEAD/YMDK_YD60MQ_one-handed_layout_Ukrainian.pdf -------------------------------------------------------------------------------- /qmk.json: -------------------------------------------------------------------------------- 1 | { 2 | "userspace_version": "1.1", 3 | "build_targets": [ 4 | ["kprepublic/cstc40/single_pcb", "clackups_1hr"] 5 | ] 6 | } -------------------------------------------------------------------------------- /keyboards/clackups/xtips_x3s/original_firmware/X3S_orig_firmware._bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clackups/qmk_userspace/HEAD/keyboards/clackups/xtips_x3s/original_firmware/X3S_orig_firmware._bin -------------------------------------------------------------------------------- /.clangd: -------------------------------------------------------------------------------- 1 | CompileFlags: 2 | Add: [-Wno-unknown-attributes, -Wno-maybe-uninitialized, -Wno-unknown-warning-option] 3 | Remove: [-W*, -mmcu=*, -mcpu=*, -mfpu=*, -mfloat-abi=*, -mno-unaligned-access, -mno-thumb-interwork, -mcall-prologues] 4 | Compiler: clang 5 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | // Suggested extensions 2 | { 3 | "recommendations": [ 4 | "amodio.toggle-excluded-files", 5 | "EditorConfig.EditorConfig", 6 | "xaver.clang-format", 7 | "llvm-vs-code-extensions.vscode-clangd", 8 | "bierner.github-markdown-preview", 9 | "donjayamanne.git-extension-pack", 10 | "ms-vscode-remote.remote-containers" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /keyboards/clackups/xtips_x3s/keymaps/t1/keymap.c: -------------------------------------------------------------------------------- 1 | #include QMK_KEYBOARD_H 2 | 3 | 4 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 5 | [0] = LAYOUT_1( 6 | KC_Q, KC_W, KC_E, KC_R, KC_T, KC_1, KC_Y, KC_U, KC_I, KC_O, KC_P, 7 | KC_A, KC_S, KC_D, KC_F, KC_G, KC_2, KC_H, KC_J, KC_K, KC_L, KC_QUOT, 8 | KC_Z, KC_X, KC_C, KC_V, KC_B, KC_3, KC_N, KC_M, KC_COMM, KC_DOT, KC_4, 9 | /* */ KC_5, KC_6, KC_7, KC_8, KC_9, KC_LBRC, KC_RBRC 10 | ) 11 | }; 12 | -------------------------------------------------------------------------------- /.github/workflows/build_binaries.yaml: -------------------------------------------------------------------------------- 1 | name: Build QMK firmware 2 | 3 | on: [push, workflow_dispatch] 4 | 5 | permissions: 6 | contents: write 7 | 8 | jobs: 9 | build: 10 | name: 'QMK Userspace Build' 11 | uses: qmk/.github/.github/workflows/qmk_userspace_build.yml@main 12 | with: 13 | qmk_repo: qmk/qmk_firmware 14 | qmk_ref: master 15 | 16 | publish: 17 | name: 'QMK Userspace Publish' 18 | uses: qmk/.github/.github/workflows/qmk_userspace_publish.yml@main 19 | if: always() && !cancelled() 20 | needs: build 21 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .SILENT: 2 | 3 | MAKEFLAGS += --no-print-directory 4 | 5 | QMK_USERSPACE := $(patsubst %/,%,$(dir $(shell realpath "$(lastword $(MAKEFILE_LIST))"))) 6 | ifeq ($(QMK_USERSPACE),) 7 | QMK_USERSPACE := $(shell pwd) 8 | endif 9 | 10 | QMK_FIRMWARE_ROOT = $(shell qmk config -ro user.qmk_home | cut -d= -f2 | sed -e 's@^None$$@@g') 11 | ifeq ($(QMK_FIRMWARE_ROOT),) 12 | $(error Cannot determine qmk_firmware location. `qmk config -ro user.qmk_home` is not set) 13 | endif 14 | 15 | %: 16 | +$(MAKE) -C $(QMK_FIRMWARE_ROOT) $(MAKECMDGOALS) QMK_USERSPACE=$(QMK_USERSPACE) 17 | -------------------------------------------------------------------------------- /keyboards/clackups/xtips_x3s/readme.md: -------------------------------------------------------------------------------- 1 | # X.Tips X3S (clackups mod) 2 | 3 | This is a hack on X.Tips X3S (also known as X3) keyboard, available on Aliexpress: 4 | 5 | * https://www.aliexpress.com/item/1005006852421562.html 6 | * https://www.aliexpress.com/item/1005007537782649.html 7 | * https://www.aliexpress.com/item/1005007511030713.html 8 | 9 | 10 | The `original_firmware/` folder contains a copy of the vendor's firmware and VIA design JSON. 11 | 12 | This mod changes the USB device ID. The origial firmware exposes 13 | `idVendor=5262, idProduct=4e4b`. This firware exposes `idVendor=5262, 14 | idProduct=5e4b`. -------------------------------------------------------------------------------- /.devcontainer/setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eEuo pipefail 4 | 5 | wget https://bootstrap.pypa.io/get-pip.py 6 | python3 get-pip.py 7 | python3 -m pip install qmk 8 | rm get-pip.py 9 | 10 | python3 -m pip install --upgrade milc 11 | 12 | userspacePath="$1" 13 | 14 | git config --global --add safe.directory "$userspacePath" 15 | git submodule update --init --recursive 16 | 17 | [ -d /workspaces/qmk_firmware ] || git clone https://github.com/qmk/qmk_firmware.git /workspaces/qmk_firmware 18 | git config --global --add safe.directory /workspaces/qmk_firmware 19 | 20 | qmk config user.qmk_home=/workspaces/qmk_firmware 21 | qmk config user.overlay_dir="$userspacePath" 22 | 23 | qmk git-submodule 24 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent coding styles between different editors and IDEs 2 | # editorconfig.org 3 | root = true 4 | 5 | [*] 6 | indent_style = space 7 | indent_size = 4 8 | 9 | # We recommend you to keep these unchanged 10 | charset = utf-8 11 | trim_trailing_whitespace = true 12 | insert_final_newline = true 13 | 14 | [*.md] 15 | trim_trailing_whitespace = false 16 | indent_size = 4 17 | 18 | [{qmk,*.py}] 19 | charset = utf-8 20 | max_line_length = 200 21 | 22 | # Make these match what we have in .gitattributes 23 | [*.mk] 24 | end_of_line = lf 25 | indent_style = tab 26 | 27 | [Makefile] 28 | end_of_line = lf 29 | indent_style = tab 30 | 31 | [*.sh] 32 | end_of_line = lf 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # clackups keyboard projects 2 | 3 | ## Mirrored keyboard for one-handed input 4 | 5 | * **[CSTC40 planck keyboard (before November 6 | 2024)](ONE_HANDED_CSTC40.md)**, redesigned for one-handed input. 7 | 8 | * **YMDK YD60MQ**, optimized for one-handed input: [description in 9 | Ukrainian](YMDK_YD60MQ_one-handed_layout_Ukrainian.pdf), 10 | [keymap.c](keyboards/ymdk/yd60mq/keymaps/claclups_mirrored/keymap.c). 11 | 12 | 13 | ## Reverse-engineered X.Tips X3S (aka X3) 14 | 15 | The keyboard is sold as "X3 Wired Corne Keyboard" on Aliexpress, and 16 | it declares itself as "X.Tips X3S" in USB. 17 | 18 | See more details [in the project 19 | folder](keyboards/clackups/xtips_x3s). 20 | 21 | 22 | # Copyright and license 23 | 24 | This work is published and distributed under the [GNU GPL](LICENSE) 25 | terms and conditions. 26 | 27 | clackups@gmail.com 28 | 29 | Fediverse: [@clackups@social.noleron.com](https://social.noleron.com/@clackups) -------------------------------------------------------------------------------- /.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | BasedOnStyle: Google 3 | AlignAfterOpenBracket: Align 4 | AlignConsecutiveAssignments: 'true' 5 | AlignConsecutiveDeclarations: 'true' 6 | AlignOperands: 'true' 7 | AllowAllParametersOfDeclarationOnNextLine: 'false' 8 | AllowShortCaseLabelsOnASingleLine: 'false' 9 | AllowShortFunctionsOnASingleLine: Empty 10 | AllowShortLoopsOnASingleLine: 'false' 11 | AlwaysBreakAfterDefinitionReturnType: None 12 | AlwaysBreakAfterReturnType: None 13 | AlwaysBreakBeforeMultilineStrings: 'false' 14 | BinPackArguments: 'true' 15 | BinPackParameters: 'true' 16 | ColumnLimit: '1000' 17 | IndentCaseLabels: 'true' 18 | IndentPPDirectives: AfterHash 19 | IndentWidth: '4' 20 | MaxEmptyLinesToKeep: '1' 21 | PointerAlignment: Right 22 | SortIncludes: 'false' 23 | SpaceBeforeAssignmentOperators: 'true' 24 | SpaceBeforeParens: ControlStatements 25 | SpaceInEmptyParentheses: 'false' 26 | SpacesBeforeTrailingComments: 1 27 | TabWidth: '4' 28 | UseTab: Never 29 | 30 | ... 31 | -------------------------------------------------------------------------------- /keyboards/clackups/xtips_x3s/config.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2015 Jun Wako 3 | 4 | This program is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU General Public License as published by 6 | the Free Software Foundation, either version 2 of the License, or 7 | (at your option) any later version. 8 | 9 | This program is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public License 15 | along with this program. If not, see . 16 | */ 17 | 18 | #pragma once 19 | 20 | #define GRAVE_ESC_CTRL_OVERRIDE 21 | 22 | /* 23 | * Feature disable options 24 | * These options are also useful to firmware size reduction. 25 | */ 26 | 27 | /* disable debug print */ 28 | //#define NO_DEBUG` 29 | 30 | /* disable print */ 31 | //#define NO_PRINT 32 | 33 | /* disable action features */ 34 | //#define NO_ACTION_LAYER 35 | //#define NO_ACTION_TAPPING 36 | //#define NO_ACTION_ONESHOT 37 | -------------------------------------------------------------------------------- /keyboards/clackups/xtips_x3s/halconf.h: -------------------------------------------------------------------------------- 1 | /* Copyright 2020 QMK 2 | * 3 | * This program is free software: you can redistribute it and/or modify 4 | * it under the terms of the GNU General Public License as published by 5 | * the Free Software Foundation, either version 2 of the License, or 6 | * (at your option) any later version. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | */ 16 | 17 | /* 18 | * This file was auto-generated by: 19 | * `qmk chibios-confmigrate -i keyboards/esca/getawayvan/halconf.h -r platforms/chibios/common/configs/halconf.h` 20 | */ 21 | 22 | #pragma once 23 | 24 | #define HAL_USE_SERIAL_USB TRUE 25 | 26 | #define ADC_USE_WAIT FALSE 27 | 28 | #define ADC_USE_MUTUAL_EXCLUSION FALSE 29 | 30 | #define SERIAL_USB_BUFFERS_SIZE 256 31 | 32 | #define SPI_USE_WAIT FALSE 33 | 34 | #define SPI_USE_MUTUAL_EXCLUSION FALSE 35 | 36 | #include_next 37 | 38 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the 2 | // README at: https://github.com/devcontainers/templates/tree/main/src/debian 3 | { 4 | "name": "QMK CLI", 5 | // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile 6 | "image": "ghcr.io/qmk/qmk_cli", 7 | "customizations": { 8 | "vscode": { 9 | "extensions": [ 10 | "amodio.toggle-excluded-files", 11 | "EditorConfig.EditorConfig", 12 | "xaver.clang-format", 13 | "llvm-vs-code-extensions.vscode-clangd", 14 | "bierner.github-markdown-preview", 15 | "donjayamanne.git-extension-pack", 16 | "ms-vscode-remote.remote-containers" 17 | ] 18 | } 19 | }, 20 | "postCreateCommand": "${containerWorkspaceFolder}/.devcontainer/setup.sh ${containerWorkspaceFolder}" 21 | 22 | // Features to add to the dev container. More info: https://containers.dev/features. 23 | // "features": {}, 24 | 25 | // Use 'forwardPorts' to make a list of ports inside the container available locally. 26 | // "forwardPorts": [], 27 | 28 | // Configure tool-specific properties. 29 | // "customizations": {}, 30 | 31 | // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. 32 | // "remoteUser": "root" 33 | } 34 | -------------------------------------------------------------------------------- /keyboards/clackups/xtips_x3s/chconf.h: -------------------------------------------------------------------------------- 1 | /* Copyright 2020 QMK 2 | * 3 | * This program is free software: you can redistribute it and/or modify 4 | * it under the terms of the GNU General Public License as published by 5 | * the Free Software Foundation, either version 2 of the License, or 6 | * (at your option) any later version. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | */ 16 | 17 | /* 18 | * This file was auto-generated by: 19 | * `qmk chibios-confmigrate -i keyboards/esca/getawayvan/chconf.h -r platforms/chibios/common/configs/chconf.h` 20 | */ 21 | 22 | #pragma once 23 | 24 | #define CH_CFG_ST_FREQUENCY 10000 25 | 26 | #define CH_CFG_USE_REGISTRY TRUE 27 | 28 | #define CH_CFG_USE_WAITEXIT TRUE 29 | 30 | #define CH_CFG_USE_CONDVARS TRUE 31 | 32 | #define CH_CFG_USE_MESSAGES TRUE 33 | 34 | #define CH_CFG_USE_MAILBOXES TRUE 35 | 36 | #define CH_CFG_USE_HEAP TRUE 37 | 38 | #define CH_CFG_USE_MEMPOOLS TRUE 39 | 40 | #define CH_CFG_USE_OBJ_FIFOS TRUE 41 | 42 | #define CH_CFG_USE_PIPES TRUE 43 | 44 | #define CH_CFG_USE_DYNAMIC TRUE 45 | 46 | #define CH_CFG_USE_FACTORY TRUE 47 | 48 | #define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE 49 | 50 | #define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE 51 | 52 | #define CH_CFG_FACTORY_SEMAPHORES TRUE 53 | 54 | #define CH_CFG_FACTORY_MAILBOXES TRUE 55 | 56 | #define CH_CFG_FACTORY_OBJ_FIFOS TRUE 57 | 58 | #define CH_CFG_FACTORY_PIPES TRUE 59 | 60 | #include_next 61 | 62 | -------------------------------------------------------------------------------- /keyboards/clackups/xtips_x3s/keyboard.json: -------------------------------------------------------------------------------- 1 | { 2 | "keyboard_name": "X.Tips X3S", 3 | "manufacturer": "X.Tips", 4 | "url": "", 5 | "maintainer": "clackups", 6 | "usb": { 7 | "vid": "0x5262", 8 | "pid": "0x5E4B", 9 | "device_version": "2.0.1" 10 | }, 11 | "build": { 12 | "lto": true 13 | }, 14 | "features": { 15 | "bootmagic": true, 16 | "command": false, 17 | "console": false, 18 | "extrakey": true, 19 | "mousekey": false, 20 | "nkro": true, 21 | "rgblight": true 22 | }, 23 | "matrix_pins": { 24 | "cols": ["B4", "B5", "B6", "B7", "B8", "B9", "B10", "B11", "B12", "B13", "B14"], 25 | "rows": ["A0", "A1", "A2", "A3"] 26 | }, 27 | "diode_direction": "COL2ROW", 28 | "ws2812": { 29 | "pin": "A13" 30 | }, 31 | "rgblight": { 32 | "hue_steps": 20, 33 | "led_count": 2, 34 | "max_brightness": 128, 35 | "animations": { 36 | "breathing": true, 37 | "rainbow_mood": true, 38 | "rainbow_swirl": true, 39 | "snake": true, 40 | "knight": true, 41 | "christmas": true, 42 | "static_gradient": true, 43 | "rgb_test": true, 44 | "alternating": true, 45 | "twinkle": true 46 | } 47 | }, 48 | "processor": "STM32F072", 49 | "bootloader": "stm32-dfu", 50 | "layouts": { 51 | "LAYOUT_1": { 52 | "layout": [ 53 | {"matrix": [0, 0], "x": 0, "y": 0}, 54 | {"matrix": [0, 1], "x": 1, "y": 0}, 55 | {"matrix": [0, 2], "x": 2, "y": 0}, 56 | {"matrix": [0, 3], "x": 3, "y": 0}, 57 | {"matrix": [0, 4], "x": 4, "y": 0}, 58 | 59 | {"matrix": [0, 5], "x": 6, "y": 0}, 60 | 61 | {"matrix": [0, 6], "x": 8, "y": 0}, 62 | {"matrix": [0, 7], "x": 9, "y": 0}, 63 | {"matrix": [0, 8], "x": 10, "y": 0}, 64 | {"matrix": [0, 9], "x": 11, "y": 0}, 65 | {"matrix": [0, 10], "x": 12, "y": 0}, 66 | 67 | {"matrix": [1, 0], "x": 0, "y": 1}, 68 | {"matrix": [1, 1], "x": 1, "y": 1}, 69 | {"matrix": [1, 2], "x": 2, "y": 1}, 70 | {"matrix": [1, 3], "x": 3, "y": 1}, 71 | {"matrix": [1, 4], "x": 4, "y": 1}, 72 | 73 | {"matrix": [1, 5], "x": 6, "y": 1}, 74 | 75 | {"matrix": [1, 6], "x": 8, "y": 1}, 76 | {"matrix": [1, 7], "x": 9, "y": 1}, 77 | {"matrix": [1, 8], "x": 10, "y": 1}, 78 | {"matrix": [1, 9], "x": 11, "y": 1}, 79 | {"matrix": [1, 10], "x": 12, "y": 1}, 80 | 81 | {"matrix": [2, 0], "x": 0, "y": 2}, 82 | {"matrix": [2, 1], "x": 1, "y": 2}, 83 | {"matrix": [2, 2], "x": 2, "y": 2}, 84 | {"matrix": [2, 3], "x": 3, "y": 2}, 85 | {"matrix": [2, 4], "x": 4, "y": 2}, 86 | 87 | {"matrix": [2, 5], "x": 4.5, "y": 2}, 88 | 89 | {"matrix": [2, 6], "x": 8, "y": 2}, 90 | {"matrix": [2, 7], "x": 9, "y": 2}, 91 | {"matrix": [2, 8], "x": 10, "y": 2}, 92 | {"matrix": [2, 9], "x": 11, "y": 2}, 93 | {"matrix": [2, 10], "x": 12, "y": 2}, 94 | 95 | {"matrix": [3, 2], "x": 2, "y": 3}, 96 | {"matrix": [3, 3], "x": 3, "y": 3}, 97 | {"matrix": [3, 4], "x": 4, "y": 3}, 98 | 99 | {"matrix": [3, 5], "x": 5.5, "y": 2}, 100 | 101 | {"matrix": [3, 6], "x": 8, "y": 3}, 102 | {"matrix": [3, 7], "x": 9, "y": 3}, 103 | {"matrix": [3, 8], "x": 10, "y": 3} 104 | ] 105 | } 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /keyboards/clackups/xtips_x3s/original_firmware/via-x3.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "X.Tips X3 Keyboard", 3 | "vendorId": "0x5262", 4 | "productId": "0x4E4B", 5 | "keycodes": ["qmk_lighting"], 6 | "menus": ["qmk_rgb_matrix"], 7 | "matrix": {"rows": 4, "cols": 11}, 8 | "layouts": { 9 | "LAYOUT_1": [ 10 | [ 11 | { 12 | "y": 2.5, 13 | "x": 6 14 | }, 15 | "0,5" 16 | ], 17 | [ 18 | { 19 | "x": 6 20 | }, 21 | "1,5" 22 | ], 23 | [ 24 | { 25 | "x": 5.5 26 | }, 27 | "2,5", 28 | "3,5" 29 | ], 30 | [ 31 | { 32 | "r": 15, 33 | "y": -5.5, 34 | "x": 3 35 | }, 36 | "0,2" 37 | ], 38 | [ 39 | { 40 | "y": -0.75, 41 | "x": 2 42 | }, 43 | "0,1", 44 | { 45 | "x": 1 46 | }, 47 | "0,3" 48 | ], 49 | [ 50 | { 51 | "y": -0.75, 52 | "x": 1 53 | }, 54 | "0,0", 55 | { 56 | "x": 3 57 | }, 58 | "0,4" 59 | ], 60 | [ 61 | { 62 | "y": -0.5, 63 | "x": 3 64 | }, 65 | "1,2" 66 | ], 67 | [ 68 | { 69 | "y": -0.75, 70 | "x": 2 71 | }, 72 | "1,1", 73 | { 74 | "x": 1 75 | }, 76 | "1,3" 77 | ], 78 | [ 79 | { 80 | "y": -0.75, 81 | "x": 1 82 | }, 83 | "1,0", 84 | { 85 | "x": 3 86 | }, 87 | "1,4" 88 | ], 89 | [ 90 | { 91 | "y": -0.5, 92 | "x": 3 93 | }, 94 | "2,2" 95 | ], 96 | [ 97 | { 98 | "y": -0.75, 99 | "x": 2 100 | }, 101 | "2,1", 102 | { 103 | "x": 1 104 | }, 105 | "2,3" 106 | ], 107 | [ 108 | { 109 | "y": -0.75, 110 | "x": 1 111 | }, 112 | "2,0", 113 | { 114 | "x": 3 115 | }, 116 | "2,4" 117 | ], 118 | [ 119 | { 120 | "x": 3.5 121 | }, 122 | "3,2" 123 | ], 124 | [ 125 | { 126 | "r": 30, 127 | "y": -2.25, 128 | "x": 5.55 129 | }, 130 | "3,3" 131 | ], 132 | [ 133 | { 134 | "r": 45, 135 | "y": -3, 136 | "x": 7.25, 137 | "h": 1.25 138 | }, 139 | "3,4" 140 | ], 141 | [ 142 | { 143 | "r": -45, 144 | "y": 7.9, 145 | "x": 1, 146 | "h": 1.25 147 | }, 148 | "3,6" 149 | ], 150 | [ 151 | { 152 | "r": -30, 153 | "y": -1.75, 154 | "x": 4.75 155 | }, 156 | "3,7" 157 | ], 158 | [ 159 | { 160 | "r": -15, 161 | "y": -6.15, 162 | "x": 8.5 163 | }, 164 | "0,8" 165 | ], 166 | [ 167 | { 168 | "y": -0.75, 169 | "x": 7.5 170 | }, 171 | "0,7", 172 | { 173 | "x": 1 174 | }, 175 | "0,9" 176 | ], 177 | [ 178 | { 179 | "y": -0.75, 180 | "x": 6.5 181 | }, 182 | "0,6", 183 | { 184 | "x": 3 185 | }, 186 | "0,10" 187 | ], 188 | [ 189 | { 190 | "y": -0.5, 191 | "x": 8.5 192 | }, 193 | "1,8" 194 | ], 195 | [ 196 | { 197 | "y": -0.75, 198 | "x": 7.5 199 | }, 200 | "1,7", 201 | { 202 | "x": 1 203 | }, 204 | "1,9" 205 | ], 206 | [ 207 | { 208 | "y": -0.75, 209 | "x": 6.5 210 | }, 211 | "1,6", 212 | { 213 | "x": 3 214 | }, 215 | "1,10" 216 | ], 217 | [ 218 | { 219 | "y": -0.5, 220 | "x": 8.5 221 | }, 222 | "2,8" 223 | ], 224 | [ 225 | { 226 | "y": -0.75, 227 | "x": 7.5 228 | }, 229 | "2,7", 230 | { 231 | "x": 1 232 | }, 233 | "2,9" 234 | ], 235 | [ 236 | { 237 | "y": -0.75, 238 | "x": 6.5 239 | }, 240 | "2,6", 241 | { 242 | "x": 3 243 | }, 244 | "2,10" 245 | ], 246 | [ 247 | { 248 | "y": -0.11000000000000032, 249 | "x": 8.15 250 | }, 251 | "3,8" 252 | ] 253 | ] 254 | } 255 | } 256 | -------------------------------------------------------------------------------- /keyboards/kprepublic/cstc40/single_pcb/keymaps/clackups_1hl/keymap.c: -------------------------------------------------------------------------------- 1 | /* 2 | Mirrored keyboard for one-hand typing (left hand). 3 | Author: clackups 4 | 5 | ALT, SHIFT and CTRL are sticky keys. 6 | */ 7 | 8 | #include QMK_KEYBOARD_H 9 | 10 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 11 | 12 | /* Primary layer 13 | * ,-----------------------------------------------------------------------------------. 14 | * | 7 | 8 | 9 | ~ | Q | W | E | R | T | [ | ] | Bksp | 15 | * |------+------+------+------+------+------+------+------+------+------+------+------| 16 | * | 4 | 5 | 6 | Esc | A | S | D | F | G | " | Enter| Enter| 17 | * |------+------+------+------+------+------+------+------+------+------+------+------| 18 | * | 1 | 2 | 3 | Tab | Z | X | C | V | B | \ | Up | Left | 19 | * |------+------+------+------+------+------+------+------+------+------+------+------| 20 | * | WIN | 0 | Shift| Ctrl | Alt | Space | Space|Space |Space | Down |Right | 21 | * `-----------------------------------------------------------------------------------' 22 | */ 23 | [0] = LAYOUT_planck_mit( 24 | KC_7, KC_8, KC_9, KC_TILD, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_BSPC, 25 | KC_4, KC_5, KC_6, KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_QUOT, KC_ENT, KC_ENT, 26 | KC_1, KC_2, KC_3, KC_TAB, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BSLS, KC_UP, KC_LEFT, 27 | KC_LWIN, KC_0, OSM(MOD_LSFT),OSM(MOD_LCTL),OSM(MOD_RALT),LT(1,KC_SPC), LT(1,KC_SPC), LT(1,KC_SPC), LT(1,KC_SPC), KC_DOWN, KC_RGHT 28 | ), 29 | 30 | /* Secondary layer, activated by holding the space key 31 | * ,-----------------------------------------------------------------------------------. 32 | * | F7 | F8 | F9 | | P | O | I | U | Y | = | Ins | Home | 33 | * |------+------+------+------+------+------+------+------+------+------+------+------| 34 | * | F4 | F5 | F6 | | ; | L | K | J | H | - | Del | End | 35 | * |------+------+------+------+------+------+------+------+------+------+------+------| 36 | * | F1 | F3 | F3 | | / | . | , | M | N | \ | PgUp | | 37 | * |------+------+------+------+------+------+------+------+------+------+------+------| 38 | * | | | | | | | | | | | PgDn | | 39 | * `-----------------------------------------------------------------------------------' 40 | */ 41 | [1] = LAYOUT_planck_mit( 42 | KC_F7, KC_F8, KC_F9, XXXXXXX, KC_P, KC_O, KC_I, KC_U, KC_Y, KC_EQL, KC_INS, KC_HOME, 43 | KC_F4, KC_F5, KC_F6, XXXXXXX, KC_SCLN, KC_L, KC_K, KC_J, KC_H, KC_MINS, KC_DEL, KC_END, 44 | KC_F1, KC_F2, KC_F3, XXXXXXX, KC_SLSH, KC_DOT, KC_COMM, KC_M, KC_N, KC_NUBS, KC_PGUP, XXXXXXX, 45 | XXXXXXX, DF(2), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, XXXXXXX 46 | ), 47 | 48 | 49 | /* Mouse control layer, activated by Space+0. 50 | Arrow keys in the bottom right corner remain as arrow keys. 51 | "0" switches back to default layer. 52 | * ,-----------------------------------------------------------------------------------. 53 | * | | | | | | BTN1 | UP | BTN2 | WH-U | | | | 54 | * |------+------+------+------+------+------+------+------+------+------+------+------| 55 | * | | | | | | LEFT | DOWN | RIGHT| WH-D | | | | 56 | * |------+------+------+------+------+------+------+------+------+------+------+------| 57 | * | | | | | | WH-L | | WH-R | | | Up | | 58 | * |------+------+------+------+------+------+------+------+------+------+------+------| 59 | * | | L0 | L0 | | | | | BTN1 | | Left | Down | Right| 60 | * `-----------------------------------------------------------------------------------' 61 | */ 62 | [2] = LAYOUT_planck_mit( 63 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, XXXXXXX, XXXXXXX, XXXXXXX, 64 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, XXXXXXX, XXXXXXX, XXXXXXX, 65 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, XXXXXXX, KC_WH_R, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, 66 | XXXXXXX, DF(0), DF(0), XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT 67 | ), 68 | 69 | 70 | }; 71 | 72 | 73 | 74 | 75 | void keyboard_post_init_user(void) { 76 | rgblight_disable(); 77 | } 78 | -------------------------------------------------------------------------------- /keyboards/kprepublic/cstc40/single_pcb/keymaps/clackups_1hr/keymap.c: -------------------------------------------------------------------------------- 1 | /* 2 | Mirrored keyboard for one-hand typing (right hand). 3 | Author: clackups 4 | 5 | ALT, SHIFT and CTRL are sticky keys. 6 | */ 7 | 8 | #include QMK_KEYBOARD_H 9 | 10 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 11 | 12 | /* Primary layer 13 | * ,-----------------------------------------------------------------------------------. 14 | * | 7 | 8 | 9 | ~ | Y | U | I | O | P | [ | ] | Bksp | 15 | * |------+------+------+------+------+------+------+------+------+------+------+------| 16 | * | 4 | 5 | 6 | Esc | H | J | K | L | ; | " | Enter| Enter| 17 | * |------+------+------+------+------+------+------+------+------+------+------+------| 18 | * | 1 | 2 | 3 | Tab | N | M | , | . | / | \ | Up | Left | 19 | * |------+------+------+------+------+------+------+------+------+------+------+------| 20 | * | WIN | 0 | Space| Space| Space| Space | Alt |Ctrl | Shift| Down |Right | 21 | * `-----------------------------------------------------------------------------------' 22 | */ 23 | [0] = LAYOUT_planck_mit( 24 | KC_7, KC_8, KC_9, KC_TILD, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, 25 | KC_4, KC_5, KC_6, KC_ESC, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, 26 | KC_1, KC_2, KC_3, KC_TAB, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS, KC_UP, KC_LEFT, 27 | KC_LWIN, KC_0, LT(1,KC_SPC),LT(1,KC_SPC), LT(1,KC_SPC), LT(1,KC_SPC),OSM(MOD_RALT), OSM(MOD_RCTL), OSM(MOD_RSFT), KC_DOWN, KC_RGHT 28 | ), 29 | 30 | /* Secondary layer, activated by holding the space key 31 | * ,-----------------------------------------------------------------------------------. 32 | * | F7 | F8 | F9 | | T | R | E | W | Q | = | Ins | Home | 33 | * |------+------+------+------+------+------+------+------+------+------+------+------| 34 | * | F4 | F5 | F6 | | G | F | D | S | A | - | Del | End | 35 | * |------+------+------+------+------+------+------+------+------+------+------+------| 36 | * | F1 | F3 | F3 | | B | V | C | X | Z | \ | PgUp | | 37 | * |------+------+------+------+------+------+------+------+------+------+------+------| 38 | * | | | | | | | | | | | PgDn | | 39 | * `-----------------------------------------------------------------------------------' 40 | */ 41 | [1] = LAYOUT_planck_mit( 42 | KC_F7, KC_F8, KC_F9, XXXXXXX, KC_T, KC_R, KC_E, KC_W, KC_Q, KC_EQL, KC_INS, KC_HOME, 43 | KC_F4, KC_F5, KC_F6, XXXXXXX, KC_G, KC_F, KC_D, KC_S, KC_A, KC_MINS, KC_DEL, KC_END, 44 | KC_F1, KC_F2, KC_F3, XXXXXXX, KC_B, KC_V, KC_C, KC_X, KC_Z, KC_NUBS, KC_PGUP, XXXXXXX, 45 | XXXXXXX, DF(2), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, XXXXXXX 46 | ), 47 | 48 | 49 | /* Mouse control layer, activated by Space+0. 50 | Arrow keys in the bottom right corner remain as arrow keys. 51 | "0" switches back to default layer. 52 | * ,-----------------------------------------------------------------------------------. 53 | * | | | | | | BTN1 | UP | BTN2 | WH-U | | | | 54 | * |------+------+------+------+------+------+------+------+------+------+------+------| 55 | * | | | | | | LEFT | DOWN | RIGHT| WH-D | | | | 56 | * |------+------+------+------+------+------+------+------+------+------+------+------| 57 | * | | | | | | WH-L | | WH-R | | | Up | | 58 | * |------+------+------+------+------+------+------+------+------+------+------+------| 59 | * | | L0 | L0 | | BTN1 | | | | | Left | Down | Right| 60 | * `-----------------------------------------------------------------------------------' 61 | */ 62 | [2] = LAYOUT_planck_mit( 63 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, XXXXXXX, XXXXXXX, XXXXXXX, 64 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, XXXXXXX, XXXXXXX, XXXXXXX, 65 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, XXXXXXX, KC_WH_R, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, 66 | XXXXXXX, DF(0), DF(0), XXXXXXX, KC_BTN1, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT 67 | ), 68 | 69 | 70 | }; 71 | 72 | 73 | 74 | 75 | void keyboard_post_init_user(void) { 76 | rgblight_disable(); 77 | } 78 | -------------------------------------------------------------------------------- /keyboards/clackups/xtips_x3s/keymaps/default/keymap.json: -------------------------------------------------------------------------------- 1 | { 2 | "keyboard": "clackups/xtips_x3s", 3 | "keymap": "via2json", 4 | "layout": "LAYOUT_1", 5 | "layers": [ 6 | [ 7 | "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "C(KC_Z)", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "C(KC_V)", "KC_H", "KC_J", "KC_K", "KC_L", "KC_ENT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "C(KC_C)", "KC_N", "KC_M", "LT(3,KC_COMM)", "LT(4,KC_DOT)", "KC_BSPC", "MT(MOD_LCTL,KC_ESC)", "LT(1,KC_SPC)", "KC_LSFT", "C(KC_X)", "KC_RSFT", "LT(2,KC_SPC)", "MT(MOD_LGUI,KC_DEL)" 8 | ], 9 | [ 10 | "KC_7", "KC_8", "KC_9", "KC_PDOT", "KC_PPLS", "C(KC_Y)", "KC_PAST", "S(KC_4)", "S(KC_SCLN)", "S(KC_BSLS)", "KC_GRV", "KC_4", "KC_5", "KC_6", "KC_0", "KC_PMNS", "KC_ESC", "KC_PSLS", "S(KC_3)", "S(KC_LBRC)", "S(KC_RBRC)", "KC_SCLN", "KC_1", "KC_2", "KC_3", "KC_BSPC", "KC_EQL", "KC_DEL", "KC_BSLS", "S(KC_7)", "S(KC_COMM)", "S(KC_DOT)", "KC_QUOT", "KC_LCTL", "TO(0)", "MT(MOD_LSFT,KC_PENT)", "KC_TAB", "KC_LALT", "G(KC_SPC)", "KC_LGUI" 11 | ], 12 | [ 13 | "S(KC_GRV)", "S(KC_5)", "S(KC_MINS)", "S(KC_6)", "S(KC_EQL)", "G(KC_EQL)", "S(KC_8)", "KC_HOME", "KC_UP", "KC_END", "KC_PGUP", "S(KC_2)", "S(KC_QUOT)", "S(KC_1)", "S(KC_SLSH)", "KC_MINS", "G(KC_MINS)", "KC_SLSH", "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_PGDN", "KC_LBRC", "KC_RBRC", "S(KC_9)", "S(KC_0)", "KC_EQL", "G(KC_ESC)", "KC_BSLS", "MEH(KC_SLSH)", "KC_ESC", "KC_TAB", "KC_DEL", "KC_RCTL", "KC_CAPS", "KC_RSFT", "G(KC_ESC)", "KC_RALT", "TO(0)", "KC_RGUI" 14 | ], 15 | [ 16 | "LCAG(KC_P)", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "C(S(KC_EQL))", "KC_VOLD", "KC_VOLU", "KC_INS", "KC_APP", "KC_NLCK", "LCAG(KC_ENT)", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "C(KC_MINS)", "KC_MPRV", "KC_MNXT", "KC_PAUS", "KC_PSCR", "KC_SLCK", "LCAG(KC_BSPC)", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "C(KC_0)", "KC_MUTE", "KC_MPLY", "TO(0)", "RCS(KC_X)", "RCS(KC_O)", "KC_RCTL", "TT(6)", "KC_RSFT", "G(KC_ESC)", "KC_RALT", "MO(5)", "KC_RGUI" 17 | ], 18 | [ 19 | "MEH(KC_Q)", "MEH(KC_W)", "MEH(KC_E)", "MEH(KC_R)", "MEH(KC_T)", "KC_NO", "MEH(KC_Y)", "MEH(KC_U)", "MEH(KC_I)", "MEH(KC_O)", "MEH(KC_P)", "MEH(KC_A)", "MEH(KC_S)", "MEH(KC_D)", "MEH(KC_F)", "MEH(KC_G)", "KC_NO", "MEH(KC_H)", "MEH(KC_J)", "MEH(KC_K)", "MEH(KC_L)", "MEH(KC_ENT)", "MEH(KC_Z)", "MEH(KC_X)", "MEH(KC_C)", "MEH(KC_V)", "MEH(KC_B)", "KC_NO", "MEH(KC_N)", "MEH(KC_M)", "MEH(KC_COMM)", "TO(0)", "MEH(KC_BSPC)", "RGB_HUI", "RGB_SAI", "RGB_VAI", "KC_NO", "RGB_MOD", "RGB_SPI", "RGB_TOG" 20 | ], 21 | [ 22 | "RGB_HUI", "RGB_MOD", "HYPR(KC_E)", "HYPR(KC_R)", "HYPR(KC_T)", "KC_NO", "A(KC_F4)", "A(KC_TAB)", "KC_MS_BTN1", "KC_MS_UP", "KC_MS_BTN2", "RGB_SAI", "RGB_SPI", "HYPR(KC_D)", "HYPR(KC_F)", "HYPR(KC_G)", "KC_NO", "C(KC_W)", "C(KC_T)", "KC_MS_LEFT", "KC_MS_DOWN", "KC_MS_RIGHT", "RGB_VAI", "RGB_TOG", "HYPR(KC_C)", "HYPR(KC_V)", "HYPR(KC_B)", "KC_NO", "RCS(KC_TAB)", "C(KC_TAB)", "KC_MS_BTN4", "KC_MS_BTN5", "KC_MS_BTN3", "HYPR(KC_3)", "HYPR(KC_4)", "HYPR(KC_5)", "KC_NO", "RESET", "TO(0)", "MEH(KC_RBRC)" 23 | ], 24 | [ 25 | "LCAG(KC_Q)", "KC_F21", "KC_F22", "KC_F23", "KC_F24", "C(KC_Z)", "KC_PPLS", "KC_P7", "KC_P8", "KC_P9", "KC_PDOT", "LCAG(KC_A)", "KC_F17", "KC_F18", "KC_F19", "KC_F20", "C(KC_V)", "KC_PMNS", "KC_P4", "KC_P5", "KC_P6", "KC_P0", "LCAG(KC_Z)", "KC_F13", "KC_F14", "KC_F15", "KC_F16", "C(KC_C)", "KC_PAST", "KC_P1", "KC_P2", "KC_P3", "KC_BSPC", "MT(MOD_LCTL,KC_ESC)", "TO(0)", "MT(MOD_LSFT,KC_TAB)", "C(KC_X)", "MT(MOD_LALT,KC_PSLS)", "MT(MOD_LSFT,KC_SPC)", "KC_PENT" 26 | ], 27 | [ 28 | "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS" 29 | ], 30 | [ 31 | "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS" 32 | ] 33 | ] 34 | } 35 | 36 | -------------------------------------------------------------------------------- /ONE_HANDED_CSTC40.md: -------------------------------------------------------------------------------- 1 | # Mirrored keyboard for one-handed input 2 | 3 | **WARNING:** Starting November 2024, KPrepublic started selling a 4 | different model of the keyboard under the same name, so this 5 | firmware would not work on it. As of today, no replacement or 6 | solution is found. 7 | 8 | 9 | ## Overview 10 | 11 | The goal of the project is to build an inexpensive keyboard for 12 | one-handed users, mainly targeting Ukrainians injured in the war. 13 | 14 | The design is based on the [publication of Edgar 15 | Matias](https://www.billbuxton.com/matias93.html), utilising the 16 | [CSTC40 keyboard by 17 | KPrepublic](https://kprepublic.com/products/cstc40-40-rgb-40-hot-swappable-mechanical-keyboard-pcb-programmed-qmk-via-vial-firmware-rgb-switch-underglow-type-c-planck). 18 | 19 | The layout is still a work in progress, so sugestions are very much 20 | welcome. 21 | 22 | The four keys in the bottom row, spannig the double-size space bar 23 | (yellow and grey on the photo below) are all acting as a space bar and 24 | a layer switcher. You hold the space bar and tap the keys from the 25 | mirrored half (on the right-hand keyboard on the photo, Space+L would 26 | produce the letter "s", or Ukrainian "i"). 27 | 28 | ALT, SHIFT and CTRL are made sticky: you can tap and leave the key, 29 | and proceed with the letter. So, tapping SHIFT, then Space+H on the 30 | right-hand keyboard will produce the capital G or Ukrainian capital 31 | "Pe". 32 | 33 | Space+0 switches the keyboard into the mouse control mode. The "I" key 34 | moves the mouse pointer up. The keys to the left and right from it act 35 | as mouse buttons. The three keys below are used for navigating the 36 | mouse pointer to the left, down, and right. In addition, the key to 37 | the left from double-sized space bar on the right-handed layout (or 38 | the one to the right from the space bar on the left-handed layout) 39 | acts as a mouse button. "0" returns the keyboard into the default 40 | mode. The arrow keys remain with their function for cursor movements. 41 | 42 | 43 | On the photo, the right-handed keyboard is at the top, and the 44 | left-handed one is at the bottom: 45 | 46 | ![CSTC40 keyboard for one-handed typing with hand-written 47 | keycap markings for ASCII and Ukrainian](cstc40_clackups_1hr_1hl.jpg) 48 | 49 | The keymap files for the 50 | [right](keyboards/kprepublic/cstc40/single_pcb/keymaps/clackups_1hr/keymap.c) 51 | and 52 | [left](keyboards/kprepublic/cstc40/single_pcb/keymaps/clackups_1hl/keymap.c) 53 | hands will help if you need to customize it or build your own 54 | keyboard. 55 | 56 | 57 | 58 | ## Building it 59 | 60 | 61 | ### Parts needed: 62 | 63 | * A CSTC40 keyboard from 64 | [AliExpress](https://www.aliexpress.com/item/1005004702079962.html) 65 | or 66 | [KPrepublic](https://kprepublic.com/products/cstc40-40-rgb-40-hot-swappable-mechanical-keyboard-pcb-programmed-qmk-via-vial-firmware-rgb-switch-underglow-type-c-planck). Take 67 | the Kit2 or Kit3 (Kit3 comes with an USB cable). 68 | 69 | * A set of XDA keycaps. The top one on the photo is using [this 70 | set](https://www.aliexpress.com/item/1005006164294060.html), but any 71 | other full set will work fine. 72 | 73 | * A few blank XDA keycaps. [This 74 | set](https://www.aliexpress.com/item/1005006562057208.html), for 75 | example, is convenient because it has both 1u and 2u keycaps. 76 | 77 | * 0.3 or 0.4mm permanent markers. For example, [edding 8407 cable 78 | marker](https://www.edding.com/products/edding-8407-cable-marker/). 79 | 80 | * corrector pen, in case if you make a mistake in labeling. 81 | 82 | 83 | ### Installation instructions: 84 | 85 | You need a Linux computer with a USB port. MacOS and Windows should also work, in theory. 86 | 87 | 1. Follow the [installation 88 | instructions](https://docs.qmk.fm/newbs_getting_started) for the QMK 89 | firmware suite. 90 | 91 | 2. Clone the clackups sources from Github: 92 | 93 | ``` 94 | cd 95 | git clone https://github.com/clackups/qmk_userspace.git 96 | ``` 97 | 98 | 3. Add the userspace to the QMK suite: 99 | 100 | ``` 101 | qmk config user.overlay_dir=${HOME}/qmk_userspace 102 | ``` 103 | 104 | 4. Compile the firmware 105 | 106 | ``` 107 | # right-handed keymap 108 | qmk compile -kb kprepublic/cstc40/single_pcb -km clackups_1hr 109 | 110 | # left-handed keymap 111 | qmk compile -kb kprepublic/cstc40/single_pcb -km clackups_1hl 112 | ``` 113 | 114 | 5. Flash the firmware onto the keyboard 115 | 116 | If the compilation finished without errors, disconnect the CSTC40 117 | keyboard from USB, press and hold the key in the upper left corner, 118 | connect the USB cable, then release the key after a second or two. If 119 | the flasher can't connect, repeat the procedure. 120 | 121 | ``` 122 | # flash the right-handed keymap 123 | qmk flash -kb kprepublic/cstc40/single_pcb -km clackups_1hr 124 | 125 | # flash the left-handed keymap 126 | qmk flash -kb kprepublic/cstc40/single_pcb -km clackups_1hl 127 | ``` 128 | 129 | 6. Use the keyboard at your convenience. All the feedback will be 130 | highly apreciated. 131 | 132 | 133 | # Copyright and license 134 | 135 | This work is published and distributed under the [GNU GPL](LICENSE) 136 | terms and conditions. 137 | 138 | clackups@gmail.com 139 | 140 | Fediverse: [@clackups@social.noleron.com](https://social.noleron.com/@clackups) -------------------------------------------------------------------------------- /keyboards/ymdk/yd60mq/keymaps/claclups_mirrored/keymap.c: -------------------------------------------------------------------------------- 1 | /* Copyright 2020 ec965 2 | * Copyright 2024 clackups 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | /* 19 | This layout is designed for YMDK YD60MQ keyboard, sold as "YMDK 67 20 | Keys Minila Layout" on Aliexpress: 21 | 22 | https://www.aliexpress.com/item/1005003436953795.html 23 | https://www.aliexpress.com/item/3256804272845896.html 24 | 25 | This is a derivation from 26 | keyboards/ymdk/yd60mq/keymaps/64key/keymap.c in QMK master branch. 27 | 28 | This layout optimizes the work for a one-handed user: Space+letter 29 | produces a letter from the opposite side of the keyboard, mirrored 30 | along the TGB-YHN axis. 31 | 32 | The RGB LEDs are turned off and all LED control combinations are 33 | removed. 34 | 35 | The original layout lists KC_NUBS between the left shift and Z, and 36 | also KC_NUHS between double-quote and Enter, but these keys are not 37 | wired on the PCB. 38 | 39 | ALT, Ctrl, and Shift are all made sticky. 40 | 41 | Left-handed input: 42 | ------------------ 43 | 44 | * Space+Caps or Fn+Caps are equivalent to the Enter key. 45 | 46 | * Fn with Q, W, E, A are equivalent to the symbol keys from the 47 | right side of keyboard. 48 | 49 | * Fn+Z is mapped to non-US backslash (Ge in Ukrainian layout for 50 | Windows). 51 | 52 | * Space+TAB switches the keyboard to cursor and mouse control mode: 53 | WASD for cursor movement, R-F for page up and down, YGHJ for mouse 54 | movements, T and U for mouse clicks, I-K and B-M for 55 | scrolling. Tapping Esc sends the "Ctrl-Alt-Del" combination. Tapping 56 | Fn or Space returns it to the normal mode. 57 | 58 | Right-handed input: 59 | ------------------- 60 | 61 | * Fn with right Shift, arrows and Del turn into the standard 6-key 62 | block (ins-del, home-end, PgUp-PgDn). 63 | 64 | * Fn+Enter is equivalent to Tab key. 65 | 66 | * Space+Backspace is equivalent to Esc key. 67 | 68 | * Space+Backslash is mapped to non-US backslash. (Ge in Ukrainian 69 | layout for Windows). 70 | 71 | * Space+Tilde switches to the cursor and mouse control mode, as 72 | described above. 73 | 74 | */ 75 | 76 | #include QMK_KEYBOARD_H 77 | 78 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 79 | 80 | [0] = LAYOUT_all( 81 | QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, 82 | KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, 83 | KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, 84 | OSM(MOD_LSFT), XXXXXXX,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, OSM(MOD_RSFT),KC_UP, KC_DEL, 85 | OSM(MOD_LCTL), KC_LGUI, OSM(MOD_LALT), MO(1), LT(2,KC_SPC), MO(1), OSM(MOD_RALT), KC_APP, KC_LEFT, KC_DOWN, KC_RGHT 86 | ), 87 | [1] = LAYOUT_all( 88 | QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, 89 | XXXXXXX, KC_BSLS, KC_RBRC, KC_LBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, KC_SCRL, KC_PAUS, KC_GRV, 90 | KC_ENT, KC_QUOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, KC_TAB, 91 | XXXXXXX, XXXXXXX, KC_NUBS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, KC_INS, KC_HOME, KC_PGUP, 92 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL, KC_END, KC_PGDN 93 | ), 94 | [2] = LAYOUT_all( 95 | XXXXXXX, KC_0, KC_9, KC_8, KC_7, KC_6, KC_5, KC_4, KC_3, KC_2, KC_1, XXXXXXX, XXXXXXX, DF(3), QK_GESC, 96 | DF(3), KC_P, KC_O, KC_I, KC_U, KC_Y, KC_T, KC_R, KC_E, KC_W, KC_Q, XXXXXXX, XXXXXXX, KC_NUBS, 97 | KC_ENT, KC_SCLN, KC_L, KC_K, KC_J, KC_H, KC_G, KC_F, KC_D, KC_S, KC_A, XXXXXXX, XXXXXXX, XXXXXXX, 98 | XXXXXXX, XXXXXXX, KC_SLSH, KC_DOT, KC_COMM, KC_M, KC_N, KC_B, KC_V, KC_C, KC_X, KC_Z, XXXXXXX, XXXXXXX, XXXXXXX, 99 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX 100 | ), 101 | [3] = LAYOUT_all( 102 | LALT(LCTL(KC_DEL)), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 103 | XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, KC_PGUP, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 104 | XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 105 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, XXXXXXX, KC_WH_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, 106 | XXXXXXX, XXXXXXX, XXXXXXX, DF(0), DF(0), DF(0), XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT 107 | ), 108 | 109 | }; 110 | -------------------------------------------------------------------------------- /keyboards/clackups/xtips_x3s/original_firmware/x_tips_x3_keyboard.layout.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "X.Tips X3 Keyboard", 3 | "vendorProductId": 1382174283, 4 | "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], 5 | "layers": [ 6 | [ 7 | "KC_Q", 8 | "KC_W", 9 | "KC_E", 10 | "KC_R", 11 | "KC_T", 12 | "C(KC_Z)", 13 | "KC_Y", 14 | "KC_U", 15 | "KC_I", 16 | "KC_O", 17 | "KC_P", 18 | "KC_A", 19 | "KC_S", 20 | "KC_D", 21 | "KC_F", 22 | "KC_G", 23 | "C(KC_V)", 24 | "KC_H", 25 | "KC_J", 26 | "KC_K", 27 | "KC_L", 28 | "KC_ENT", 29 | "KC_Z", 30 | "KC_X", 31 | "KC_C", 32 | "KC_V", 33 | "KC_B", 34 | "C(KC_C)", 35 | "KC_N", 36 | "KC_M", 37 | "LT(3,KC_COMM)", 38 | "LT(4,KC_DOT)", 39 | "KC_BSPC", 40 | "KC_NO", 41 | "KC_NO", 42 | "MT(MOD_LCTL,KC_ESC)", 43 | "LT(1,KC_SPC)", 44 | "KC_LSFT", 45 | "C(KC_X)", 46 | "KC_RSFT", 47 | "LT(2,KC_SPC)", 48 | "MT(MOD_LGUI,KC_DEL)", 49 | "KC_NO", 50 | "KC_NO" 51 | ], 52 | [ 53 | "KC_7", 54 | "KC_8", 55 | "KC_9", 56 | "KC_PDOT", 57 | "KC_PPLS", 58 | "C(KC_Y)", 59 | "KC_PAST", 60 | "S(KC_4)", 61 | "S(KC_SCLN)", 62 | "S(KC_BSLS)", 63 | "KC_GRV", 64 | "KC_4", 65 | "KC_5", 66 | "KC_6", 67 | "KC_0", 68 | "KC_PMNS", 69 | "KC_ESC", 70 | "KC_PSLS", 71 | "S(KC_3)", 72 | "S(KC_LBRC)", 73 | "S(KC_RBRC)", 74 | "KC_SCLN", 75 | "KC_1", 76 | "KC_2", 77 | "KC_3", 78 | "KC_BSPC", 79 | "KC_EQL", 80 | "KC_DEL", 81 | "KC_BSLS", 82 | "S(KC_7)", 83 | "S(KC_COMM)", 84 | "S(KC_DOT)", 85 | "KC_QUOT", 86 | "KC_NO", 87 | "KC_NO", 88 | "KC_LCTL", 89 | "TO(0)", 90 | "MT(MOD_LSFT,KC_PENT)", 91 | "KC_TAB", 92 | "KC_LALT", 93 | "G(KC_SPC)", 94 | "KC_LGUI", 95 | "KC_NO", 96 | "KC_NO" 97 | ], 98 | [ 99 | "S(KC_GRV)", 100 | "S(KC_5)", 101 | "S(KC_MINS)", 102 | "S(KC_6)", 103 | "S(KC_EQL)", 104 | "G(KC_EQL)", 105 | "S(KC_8)", 106 | "KC_HOME", 107 | "KC_UP", 108 | "KC_END", 109 | "KC_PGUP", 110 | "S(KC_2)", 111 | "S(KC_QUOT)", 112 | "S(KC_1)", 113 | "S(KC_SLSH)", 114 | "KC_MINS", 115 | "G(KC_MINS)", 116 | "KC_SLSH", 117 | "KC_LEFT", 118 | "KC_DOWN", 119 | "KC_RGHT", 120 | "KC_PGDN", 121 | "KC_LBRC", 122 | "KC_RBRC", 123 | "S(KC_9)", 124 | "S(KC_0)", 125 | "KC_EQL", 126 | "G(KC_ESC)", 127 | "KC_BSLS", 128 | "MEH(KC_SLSH)", 129 | "KC_ESC", 130 | "KC_TAB", 131 | "KC_DEL", 132 | "KC_NO", 133 | "KC_NO", 134 | "KC_RCTL", 135 | "KC_CAPS", 136 | "KC_RSFT", 137 | "G(KC_ESC)", 138 | "KC_RALT", 139 | "TO(0)", 140 | "KC_RGUI", 141 | "KC_NO", 142 | "KC_NO" 143 | ], 144 | [ 145 | "LCAG(KC_P)", 146 | "KC_F9", 147 | "KC_F10", 148 | "KC_F11", 149 | "KC_F12", 150 | "C(S(KC_EQL))", 151 | "KC_VOLD", 152 | "KC_VOLU", 153 | "KC_INS", 154 | "KC_APP", 155 | "KC_NLCK", 156 | "LCAG(KC_ENT)", 157 | "KC_F5", 158 | "KC_F6", 159 | "KC_F7", 160 | "KC_F8", 161 | "C(KC_MINS)", 162 | "KC_MPRV", 163 | "KC_MNXT", 164 | "KC_PAUS", 165 | "KC_PSCR", 166 | "KC_SLCK", 167 | "LCAG(KC_BSPC)", 168 | "KC_F1", 169 | "KC_F2", 170 | "KC_F3", 171 | "KC_F4", 172 | "C(KC_0)", 173 | "KC_MUTE", 174 | "KC_MPLY", 175 | "TO(0)", 176 | "RCS(KC_X)", 177 | "RCS(KC_O)", 178 | "KC_NO", 179 | "KC_NO", 180 | "KC_RCTL", 181 | "TT(6)", 182 | "KC_RSFT", 183 | "G(KC_ESC)", 184 | "KC_RALT", 185 | "MO(5)", 186 | "KC_RGUI", 187 | "KC_NO", 188 | "KC_NO" 189 | ], 190 | [ 191 | "MEH(KC_Q)", 192 | "MEH(KC_W)", 193 | "MEH(KC_E)", 194 | "MEH(KC_R)", 195 | "MEH(KC_T)", 196 | "KC_NO", 197 | "MEH(KC_Y)", 198 | "MEH(KC_U)", 199 | "MEH(KC_I)", 200 | "MEH(KC_O)", 201 | "MEH(KC_P)", 202 | "MEH(KC_A)", 203 | "MEH(KC_S)", 204 | "MEH(KC_D)", 205 | "MEH(KC_F)", 206 | "MEH(KC_G)", 207 | "KC_NO", 208 | "MEH(KC_H)", 209 | "MEH(KC_J)", 210 | "MEH(KC_K)", 211 | "MEH(KC_L)", 212 | "MEH(KC_ENT)", 213 | "MEH(KC_Z)", 214 | "MEH(KC_X)", 215 | "MEH(KC_C)", 216 | "MEH(KC_V)", 217 | "MEH(KC_B)", 218 | "KC_NO", 219 | "MEH(KC_N)", 220 | "MEH(KC_M)", 221 | "MEH(KC_COMM)", 222 | "TO(0)", 223 | "MEH(KC_BSPC)", 224 | "KC_NO", 225 | "KC_NO", 226 | "RGB_HUI", 227 | "RGB_SAI", 228 | "RGB_VAI", 229 | "KC_NO", 230 | "RGB_MOD", 231 | "RGB_SPI", 232 | "RGB_TOG", 233 | "KC_NO", 234 | "KC_NO" 235 | ], 236 | [ 237 | "RGB_HUI", 238 | "RGB_MOD", 239 | "HYPR(KC_E)", 240 | "HYPR(KC_R)", 241 | "HYPR(KC_T)", 242 | "KC_NO", 243 | "A(KC_F4)", 244 | "A(KC_TAB)", 245 | "KC_MS_BTN1", 246 | "KC_MS_UP", 247 | "KC_MS_BTN2", 248 | "RGB_SAI", 249 | "RGB_SPI", 250 | "HYPR(KC_D)", 251 | "HYPR(KC_F)", 252 | "HYPR(KC_G)", 253 | "KC_NO", 254 | "C(KC_W)", 255 | "C(KC_T)", 256 | "KC_MS_LEFT", 257 | "KC_MS_DOWN", 258 | "KC_MS_RIGHT", 259 | "RGB_VAI", 260 | "RGB_TOG", 261 | "HYPR(KC_C)", 262 | "HYPR(KC_V)", 263 | "HYPR(KC_B)", 264 | "KC_NO", 265 | "RCS(KC_TAB)", 266 | "C(KC_TAB)", 267 | "KC_MS_BTN4", 268 | "KC_MS_BTN5", 269 | "KC_MS_BTN3", 270 | "HYPR(KC_1)", 271 | "HYPR(KC_2)", 272 | "HYPR(KC_3)", 273 | "HYPR(KC_4)", 274 | "HYPR(KC_5)", 275 | "KC_NO", 276 | "RESET", 277 | "TO(0)", 278 | "MEH(KC_RBRC)", 279 | "KC_NO", 280 | "KC_NO" 281 | ], 282 | [ 283 | "LCAG(KC_Q)", 284 | "KC_F21", 285 | "KC_F22", 286 | "KC_F23", 287 | "KC_F24", 288 | "C(KC_Z)", 289 | "KC_PPLS", 290 | "KC_P7", 291 | "KC_P8", 292 | "KC_P9", 293 | "KC_PDOT", 294 | "LCAG(KC_A)", 295 | "KC_F17", 296 | "KC_F18", 297 | "KC_F19", 298 | "KC_F20", 299 | "C(KC_V)", 300 | "KC_PMNS", 301 | "KC_P4", 302 | "KC_P5", 303 | "KC_P6", 304 | "KC_P0", 305 | "LCAG(KC_Z)", 306 | "KC_F13", 307 | "KC_F14", 308 | "KC_F15", 309 | "KC_F16", 310 | "C(KC_C)", 311 | "KC_PAST", 312 | "KC_P1", 313 | "KC_P2", 314 | "KC_P3", 315 | "KC_BSPC", 316 | "KC_NO", 317 | "KC_NO", 318 | "MT(MOD_LCTL,KC_ESC)", 319 | "TO(0)", 320 | "MT(MOD_LSFT,KC_TAB)", 321 | "C(KC_X)", 322 | "MT(MOD_LALT,KC_PSLS)", 323 | "MT(MOD_LSFT,KC_SPC)", 324 | "KC_PENT", 325 | "KC_NO", 326 | "KC_NO" 327 | ], 328 | [ 329 | "KC_TRNS", 330 | "KC_TRNS", 331 | "KC_TRNS", 332 | "KC_TRNS", 333 | "KC_TRNS", 334 | "KC_TRNS", 335 | "KC_TRNS", 336 | "KC_TRNS", 337 | "KC_TRNS", 338 | "KC_TRNS", 339 | "KC_TRNS", 340 | "KC_TRNS", 341 | "KC_TRNS", 342 | "KC_TRNS", 343 | "KC_TRNS", 344 | "KC_TRNS", 345 | "KC_TRNS", 346 | "KC_TRNS", 347 | "KC_TRNS", 348 | "KC_TRNS", 349 | "KC_TRNS", 350 | "KC_TRNS", 351 | "KC_TRNS", 352 | "KC_TRNS", 353 | "KC_TRNS", 354 | "KC_TRNS", 355 | "KC_TRNS", 356 | "KC_TRNS", 357 | "KC_TRNS", 358 | "KC_TRNS", 359 | "KC_TRNS", 360 | "KC_TRNS", 361 | "KC_TRNS", 362 | "KC_TRNS", 363 | "KC_TRNS", 364 | "KC_TRNS", 365 | "KC_TRNS", 366 | "KC_TRNS", 367 | "KC_TRNS", 368 | "KC_TRNS", 369 | "KC_TRNS", 370 | "KC_TRNS", 371 | "KC_TRNS", 372 | "KC_TRNS" 373 | ], 374 | [ 375 | "KC_TRNS", 376 | "KC_TRNS", 377 | "KC_TRNS", 378 | "KC_TRNS", 379 | "KC_TRNS", 380 | "KC_TRNS", 381 | "KC_TRNS", 382 | "KC_TRNS", 383 | "KC_TRNS", 384 | "KC_TRNS", 385 | "KC_TRNS", 386 | "KC_TRNS", 387 | "KC_TRNS", 388 | "KC_TRNS", 389 | "KC_TRNS", 390 | "KC_TRNS", 391 | "KC_TRNS", 392 | "KC_TRNS", 393 | "KC_TRNS", 394 | "KC_TRNS", 395 | "KC_TRNS", 396 | "KC_TRNS", 397 | "KC_TRNS", 398 | "KC_TRNS", 399 | "KC_TRNS", 400 | "KC_TRNS", 401 | "KC_TRNS", 402 | "KC_TRNS", 403 | "KC_TRNS", 404 | "KC_TRNS", 405 | "KC_TRNS", 406 | "KC_TRNS", 407 | "KC_TRNS", 408 | "KC_TRNS", 409 | "KC_TRNS", 410 | "KC_TRNS", 411 | "KC_TRNS", 412 | "KC_TRNS", 413 | "KC_TRNS", 414 | "KC_TRNS", 415 | "KC_TRNS", 416 | "KC_TRNS", 417 | "KC_TRNS", 418 | "KC_TRNS" 419 | ] 420 | ], 421 | "encoders": [] 422 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | 294 | Copyright (C) 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | , 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | --------------------------------------------------------------------------------