From 1638f5da2bc312b2be3df3a275ccd381ff0c735f Mon Sep 17 00:00:00 2001 From: Rogier Spieker Date: Mon, 1 Sep 2025 06:47:39 +0200 Subject: [PATCH] Added Keychron Q9 Plus vial keymap (#928) Co-authored-by: Rogier Spieker --- .../ansi_encoder/keymaps/vial/config.h | 8 + .../ansi_encoder/keymaps/vial/keymap.c | 164 ++++++++++++++++ .../ansi_encoder/keymaps/vial/rules.mk | 5 + .../ansi_encoder/keymaps/vial/vial.json | 185 ++++++++++++++++++ 4 files changed, 362 insertions(+) create mode 100644 keyboards/keychron/q9_plus/ansi_encoder/keymaps/vial/config.h create mode 100755 keyboards/keychron/q9_plus/ansi_encoder/keymaps/vial/keymap.c create mode 100755 keyboards/keychron/q9_plus/ansi_encoder/keymaps/vial/rules.mk create mode 100644 keyboards/keychron/q9_plus/ansi_encoder/keymaps/vial/vial.json diff --git a/keyboards/keychron/q9_plus/ansi_encoder/keymaps/vial/config.h b/keyboards/keychron/q9_plus/ansi_encoder/keymaps/vial/config.h new file mode 100644 index 0000000000..0d151f52a2 --- /dev/null +++ b/keyboards/keychron/q9_plus/ansi_encoder/keymaps/vial/config.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#define VIAL_KEYBOARD_UID {0x74, 0x8F, 0x33, 0x91, 0x5F, 0x20, 0x08, 0x70} + +#define VIAL_UNLOCK_COMBO_ROWS { 0, 1 } +#define VIAL_UNLOCK_COMBO_COLS { 0, 13 } diff --git a/keyboards/keychron/q9_plus/ansi_encoder/keymaps/vial/keymap.c b/keyboards/keychron/q9_plus/ansi_encoder/keymaps/vial/keymap.c new file mode 100755 index 0000000000..00d9c375c2 --- /dev/null +++ b/keyboards/keychron/q9_plus/ansi_encoder/keymaps/vial/keymap.c @@ -0,0 +1,164 @@ +/* Based on Keychron Q9 Vial by Keychron (https://www.keychron.com) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +enum layers{ + MAC_BASE, + WIN_BASE, + MAC_FN1, + WIN_FN1, + FN2, +}; + +#define KC_TASK LGUI(KC_TAB) +#define KC_FLXP LGUI(KC_E) +#define MO_MAC MO(MAC_FN1) +#define MO_WIN MO(WIN_FN1) +#define MO_FN2 MO(FN2) + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // +------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+------------+ ******** + // | | | | | | | | | | | | | | | * * + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | * MUTE * + // | | | | | | | | | | | | | | | * * + // +------------+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+------------+ ******** + // | | | | | | | | | | | | | | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | +--------+ + // | | | | | | | | | | | | | | | | + // +---------------+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---------+--------+ | HOME | + // | | | | | | | | | | | | | | | | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | UP | +--------+ + // | | | | | | | | | | | | | | + // +----------+--------+-+------+---+----+-----+--+--------+--------+--------+--------+-----+--+-----+--+-----+--+-----+--------+--------+--------+ + // | | | | | | | | | | | | | + // | CNTL | OPT | CMD | MAC_FN | SPC | SPC | CMD | MAC_FN | FN2 | LEFT | DOWN | RGHT | + // | | | | | | | | | | | | | + // +----------+----------+----------+----------+--------------------+-----------------------+--------+--------+--------+--------+--------+--------+ + [MAC_BASE] = LAYOUT_54_ansi( + 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 , KC_MUTE, + KC_CAPS , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_HOME, + KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL , KC_LOPT , KC_LCMD, MO_MAC , KC_SPC , KC_SPC , KC_RCMD, MO_MAC , MO_FN2 , KC_LEFT, KC_DOWN ,KC_RGHT + ), + + // +------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+------------+ ******** + // | | | | | | | | | | | | | | | * * + // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | * MUTE * + // | | | | | | | | | | | | | | | * * + // +------------+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+------------+ ******** + // | | | | | | | | | | | | | | + // | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | +--------+ + // | | | | | | | | | | | | | | | | + // +---------------+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---------+--------+ | HOME | + // | | | | | | | | | | | | | | | | + // | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | UP | +--------+ + // | | | | | | | | | | | | | | + // +----------+--------+-+------+---+----+-----+--+--------+--------+--------+--------+-----+--+-----+--+-----+--+-----+--------+--------+--------+ + // | | | | | | | | | | | | | + // | CNTL | WIN | ALT | WIN_FN | SPC | SPC | ALT | WIN_FN | FN2 | LEFT | DOWN | RGHT | + // | | | | | | | | | | | | | + // +----------+----------+----------+----------+--------------------+-----------------------+--------+--------+--------+--------+--------+--------+ + [WIN_BASE] = LAYOUT_54_ansi( + 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 , KC_MUTE, + KC_CAPS , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_HOME, + KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL , KC_LWIN , KC_LALT, MO_WIN , KC_SPC , KC_SPC , KC_RALT, MO_WIN , MO_FN2 , KC_LEFT, KC_DOWN, KC_RGHT + ), + + // +------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+------------+ ******** + // | | | | | | | | | | | | | | | * * + // | ` | SCR- | SCR+ | MCTL | LPAD | BRI- | BRI+ | PREV | PLAY | NEXT | VOL- | VOL+ | | | * RGBTGL * + // | | | | | | | | | | | | | | | * * + // +------------+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+------------+ ******** + // | | | | | | | | | | | | | | + // | RGBTGL | RMNEXT | BRI+ | HUE+ | SAT+ | SPD+ | | | | | | | | +--------+ + // | | | | | | | | | | | | | | | | + // +---------------+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---------+--------+ | | + // | | | | | | | | | | | | | | | | + // | | RMPREV | BRI- | HEU- | SAT- | SPD- | NKTGL | | | | | | | +--------+ + // | | | | | | | | | | | | | | + // +----------+--------+-+------+---+----+-----+--+--------+--------+--------+--------+-----+--+-----+--+-----+--+-----+--------+--------+--------+ + // | | | | | | | | | | | | | + // | | | | | | | | | | | | | + // | | | | | | | | | | | | | + // +----------+----------+----------+----------+--------------------+-----------------------+--------+--------+--------+--------+--------+--------+ + [MAC_FN1] = LAYOUT_54_ansi( + KC_GRV , KC_BRID , KC_BRIU, KC_MCTL, KC_LPAD, RM_VALD, RM_VALU, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______ , RM_TOGG, + RM_TOGG , RM_NEXT , RM_VALU, RM_HUEU, RM_SATU ,RM_SPDU, _______, _______, _______, _______, _______, _______, _______ , _______, + _______ , RM_PREV , RM_VALD, RM_HUED, RM_SATD, RM_SPDD, NK_TOGG, _______, _______, _______, _______, _______, _______, + _______ , _______ , _______, _______, _______ , _______ , _______, _______, _______, _______, _______, _______ + ), + + // +------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+------------+ ******** + // | | | | | | | | | | | | | | | * * + // | ` | SCR- | SCR+ | TASK | FILE | BRI- | BRI+ | PREV | PLAY | NEXT | VOL- | VOL+ | | | * RGBTGL * + // | | | | | | | | | | | | | | | * * + // +------------+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+------------+ ******** + // | | | | | | | | | | | | | | + // | RGBTGL | RMNEXT | BRI+ | HUE+ | SAT+ | SPD+ | | | | | | | | +--------+ + // | | | | | | | | | | | | | | | | + // +---------------+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---------+--------+ | | + // | | | | | | | | | | | | | | | | + // | | RMPREV | BRI- | HEU- | SAT- | SPD- | NKTGL | | | | | | | +--------+ + // | | | | | | | | | | | | | | + // +----------+--------+-+------+---+----+-----+--+--------+--------+--------+--------+-----+--+-----+--+-----+--+-----+--------+--------+--------+ + // | | | | | | | | | | | | | + // | | | | | | | | | | | | | + // | | | | | | | | | | | | | + // +----------+----------+----------+----------+--------------------+-----------------------+--------+--------+--------+--------+--------+--------+ + [WIN_FN1] = LAYOUT_54_ansi( + KC_GRV , KC_BRID , KC_BRIU, KC_TASK, KC_FLXP, RM_VALD, RM_VALU, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______ , RM_TOGG, + RM_TOGG , RM_NEXT , RM_VALU, RM_HUEU, RM_SATU, RM_SPDU, _______, _______, _______, _______, _______, _______, _______ , _______, + _______ , RM_PREV , RM_VALD, RM_HUED, RM_SATD, RM_SPDD, NK_TOGG, _______, _______, _______, _______, _______, _______, + _______ , _______ , _______, _______, _______ , _______ , _______, _______, _______, _______, _______, _______ + ), + + // +------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+------------+ ******** + // | | | | | | | | | | | | | | | * * + // | ~ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | BACK | * * + // | | | | | | | | | | | | | | | * * + // +------------+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+--+-----+------------+ ******** + // | | | | | | | | | | | | | | + // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | +--------+ + // | | | | | | | | | | | | | | | | + // +---------------+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---+----+---------+--------+ | | + // | | | | | | | | | | | | | | | | + // | | | | | | | | | | | | | | +--------+ + // | | | | | | | | | | | | | | + // +----------+--------+-+------+---+----+-----+--+--------+--------+--------+--------+-----+--+-----+--+-----+--+-----+--------+--------+--------+ + // | | | | | | | | | | | | | + // | | | | | | | | | | | | | + // | | | | | | | | | | | | | + // +----------+----------+----------+----------+--------------------+-----------------------+--------+--------+--------+--------+--------+--------+ + [FN2] = LAYOUT_54_ansi( + KC_TILD , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 ,KC_BSPC , _______, + KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , _______, _______ , _______, + _______ , _______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______ , _______ , _______, _______, _______ , _______ , _______, _______, _______, _______, _______, _______ + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [MAC_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, + [WIN_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, + [MAC_FN1] = {ENCODER_CCW_CW(RM_VALD, RM_VALU)}, + [WIN_FN1] = {ENCODER_CCW_CW(RM_VALD, RM_VALU)}, + [FN2] = {ENCODER_CCW_CW(RM_HUED, RM_HUEU)} +}; +#endif diff --git a/keyboards/keychron/q9_plus/ansi_encoder/keymaps/vial/rules.mk b/keyboards/keychron/q9_plus/ansi_encoder/keymaps/vial/rules.mk new file mode 100755 index 0000000000..9a67a1220b --- /dev/null +++ b/keyboards/keychron/q9_plus/ansi_encoder/keymaps/vial/rules.mk @@ -0,0 +1,5 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes +VIALRGB_ENABLE = yes +ENCODER_MAP_ENABLE = yes + diff --git a/keyboards/keychron/q9_plus/ansi_encoder/keymaps/vial/vial.json b/keyboards/keychron/q9_plus/ansi_encoder/keymaps/vial/vial.json new file mode 100644 index 0000000000..6ab2c84148 --- /dev/null +++ b/keyboards/keychron/q9_plus/ansi_encoder/keymaps/vial/vial.json @@ -0,0 +1,185 @@ +{ + "name": "Keychron Q9 Plus", + "lighting": "vialrgb", + "matrix": { + "rows": 4, + "cols": 15 + }, + "customKeycodes": [ + { + "name": "Mission Control", + "title": "Mission Control in macOS", + "shortName": "Mission Control" + }, + { + "name": "Launch Pad", + "title": "Launch Pad in macOS", + "shortName": "Launch Pad" + }, + { + "name": "Left Option", + "title": "Left Option in macOS", + "shortName": "Left Option" + }, + { + "name": "Right Option", + "title": "Right Option in macOS", + "shortName": "Right Option" + }, + { + "name": "Left Cmd", + "title": "Left Command in macOS", + "shortName": "Left Command" + }, + { + "name": "Right Cmd", + "title": "Right Command in macOS", + "shortName": "Right Command" + }, + { + "name": "Task View", + "title": "Task View in windows", + "shortName": "Task View" + }, + { + "name": "File Explorer", + "title": "File Explorer in windows", + "shortName": "File Explorer" + } + ], + "layouts": { + "keymap": [ + [ + { + "x": 15.25, + "c": "#aaaaaa" + }, + "0,14", + { + "x": 0.25 + }, + "0,0\n\n\n\n\n\n\n\n\ne", + "0,1\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "w": 1.5 + }, + "0, 0", + "0, 1", + "0, 2", + "0, 3", + "0, 4", + "0, 5", + "0, 6", + "0, 7", + "0, 8", + "0, 9", + "0, 10", + "0, 11", + "0, 12", + { + "w": 1.5 + }, + "0, 13", + { + "x": 0.25, + "c": "#000000", + "t": "#cccccc" + }, + "0, 14" + ], + [ + { + "c": "#cccccc", + "t": "#000000", + "w": 1.75 + }, + "1, 0", + "1, 1", + "1, 2", + "1, 3", + "1, 4", + "1, 5", + "1, 6", + "1, 7", + "1, 8", + "1, 9", + "1, 10", + "1, 11", + { + "w": 2.25 + }, + "1, 13" + ], + [ + { + "y": -0.75, + "x": 15.25 + }, + "1, 14" + ], + [ + { + "y": -0.25, + "w": 2.25 + }, + "2, 0", + "2, 2", + "2, 3", + "2, 4", + "2, 5", + "2, 6", + "2, 7", + "2, 8", + "2, 9", + "2, 10", + "2, 11", + { + "w": 1.75 + }, + "2, 13", + { + "c": "#bbbbbb" + }, + "2, 14" + ], + [ + { + "c": "#cccccc", + "w": 1.25 + }, + "3, 0", + { + "w": 1.25 + }, + "3, 1", + { + "w": 1.25 + }, + "3, 2", + { + "w": 1.25 + }, + "3, 3", + { + "w": 2.25 + }, + "3, 6", + { + "w": 2.75 + }, + "3, 9", + "3, 10", + "3, 11", + "3, 12", + { + "c": "#bbbbbb" + }, + "3, 13", + "3, 14", + "1, 12" + ] + ] + } +} \ No newline at end of file