Revert to pure userspace; fix chordal hold thumb keys and add layer-tap override

- Remove qmk_firmware submodule, restore CI to build against external Keebart repo
- Fix chordal_hold_layout: thumbs marked 'L'/'R' (not '*') so same-hand
  fast typing resolves as tap, cross-hand resolves as hold
- Add get_chordal_hold() override: layer-taps always hold (for same-hand
  layer access), mod-taps use default cross-hand logic
- Simplify README back to standard userspace overlay

Agent-Logs-Url: https://github.com/timfee/qmk_userspace/sessions/2bf6f380-de28-4523-a92b-40d4f1aa2c25

Co-authored-by: timfee <3246342+timfee@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-04-14 19:16:13 +00:00 committed by GitHub
commit d1339355fd
Failed to generate hash of commit
5 changed files with 26 additions and 70 deletions

View file

@ -9,8 +9,9 @@ jobs:
build:
name: 'QMK Userspace Build'
uses: qmk/.github/.github/workflows/qmk_userspace_build.yml@main
# Firmware lives in qmk_firmware/ submodule — no external repo needed.
# The reusable workflow detects the submodule and skips its own clone.
with:
qmk_repo: Keebart/vial-qmk-corne-choc-pro
qmk_ref: vial
publish:
name: 'QMK Userspace Publish'

4
.gitmodules vendored
View file

@ -1,4 +0,0 @@
[submodule "qmk_firmware"]
path = qmk_firmware
url = https://github.com/Keebart/vial-qmk-corne-choc-pro.git
branch = vial

View file

@ -1,14 +1,7 @@
# QMK Userspace — Keebart Corne Choc Pro
Self-contained repo: firmware (Keebart's QMK fork) is embedded as a submodule at `qmk_firmware/`.
No waiting on upstream — cherry-pick, merge, or patch anything you want right here.
## Quick start
```bash
git clone --recursive https://github.com/timfee/qmk_userspace.git
cd qmk_userspace
```
QMK userspace overlay for the Keebart Corne Choc Pro. Builds against
[Keebart/vial-qmk-corne-choc-pro](https://github.com/Keebart/vial-qmk-corne-choc-pro) (vial branch).
GitHub Actions builds the `.uf2` automatically on push — download from the **Releases** tab.
@ -18,54 +11,6 @@ Flash: hold **Q** while plugging in the left half, drag `.uf2` onto `RPI-RP2`. R
```bash
pip install qmk
qmk setup -H qmk_firmware # point QMK at the submodule
qmk setup -H . --home $(pwd)/qmk_firmware
qmk compile -kb keebart/corne_choc_pro/standard -km timfee
```
## Pulling upstream changes
The submodule tracks the `vial` branch of `Keebart/vial-qmk-corne-choc-pro`.
```bash
# Pull latest from Keebart
cd qmk_firmware
git fetch origin
git merge origin/vial # or: git rebase origin/vial
cd ..
git add qmk_firmware
git commit -m "Update firmware submodule"
```
### Cherry-picking from other repos (e.g. Keebart/vial-qmk-keebart, qmk/qmk_firmware)
```bash
cd qmk_firmware
# Add any upstream remote once
git remote add upstream-qmk https://github.com/qmk/qmk_firmware.git
git remote add keebart-full https://github.com/Keebart/vial-qmk-keebart.git
# Fetch and cherry-pick
git fetch keebart-full
git cherry-pick <commit-sha> # e.g. OLED SSD1312 support
cd ..
git add qmk_firmware
git commit -m "Cherry-pick: <description>"
```
### Switching to your own firmware fork
If you fork `Keebart/vial-qmk-corne-choc-pro` to your own GitHub account:
```bash
cd qmk_firmware
git remote set-url origin https://github.com/YOUR_USER/vial-qmk-corne-choc-pro.git
git push origin vial # push your changes to your fork
cd ..
# Update .gitmodules to point at your fork
git config -f .gitmodules submodule.qmk_firmware.url \
https://github.com/YOUR_USER/vial-qmk-corne-choc-pro.git
git add .gitmodules qmk_firmware
git commit -m "Point submodule at my firmware fork"
```

@ -1 +0,0 @@
Subproject commit 4649f864f15ba9f540ee83d66b50cb9fcd4f7e59

View file

@ -7,21 +7,36 @@
// ── Chordal Hold layout ──
// Defines hand assignments for the "opposite hands" tap-hold rule.
// 'L' = left hand, 'R' = right hand, '*' = either (thumb keys).
// 'L' = left hand, 'R' = right hand.
// Thumbs are assigned to their physical hand so that same-hand fast
// typing (e.g. backspace → A) resolves as tap, while cross-hand
// shortcuts (e.g. left-thumb CMD + right-hand key) resolve as hold.
// Matrix: 8 rows × 7 cols (4 rows per half, split keyboard).
// Rows 0-2: left finger rows Rows 4-6: right finger rows
// Row 3: left thumb Row 7: right thumb
const char chordal_hold_layout[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
{'L', 'L', 'L', 'L', 'L', 'L', 'L'}, // row 0: left top
{'L', 'L', 'L', 'L', 'L', 'L', 'L'}, // row 1: left mid
{'L', 'L', 'L', 'L', 'L', 'L', 0 }, // row 2: left bot
{ 0, 0, 0, '*', '*', '*', 0 }, // row 3: left thumb
{'L', 'L', 'L', 'L', 'L', 'L', 0 }, // row 2: left bot
{ 0, 0, 0, 'L', 'L', 'L', 0 }, // row 3: left thumb
{'R', 'R', 'R', 'R', 'R', 'R', 'R'}, // row 4: right top
{'R', 'R', 'R', 'R', 'R', 'R', 'R'}, // row 5: right mid
{'R', 'R', 'R', 'R', 'R', 'R', 0 }, // row 6: right bot
{ 0, 0, 0, '*', '*', '*', 0 }, // row 7: right thumb
{'R', 'R', 'R', 'R', 'R', 'R', 0 }, // row 6: right bot
{ 0, 0, 0, 'R', 'R', 'R', 0 }, // row 7: right thumb
};
// ── Chordal Hold per-key override ──
// Layer-tap keys (ESC_L2, MIN_L1) must always resolve as hold when
// another key is pressed so the layer activates — even for same-hand keys.
// Mod-tap keys use the default layout-based logic (cross-hand = hold).
bool get_chordal_hold(uint16_t tap_hold_keycode, keyrecord_t *tap_hold_record,
uint16_t other_keycode, keyrecord_t *other_record) {
if (IS_QK_LAYER_TAP(tap_hold_keycode)) {
return true;
}
return get_chordal_hold_default(tap_hold_record, other_record);
}
// ── Combos (matching Vial config) ──
const uint16_t PROGMEM lparen_combo[] = {KC_R, KC_T, COMBO_END};
const uint16_t PROGMEM rparen_combo[] = {KC_Y, KC_U, COMBO_END};