Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: Bug Report
description: Something is wrong or outdated
labels: [bug]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to report an issue. Fill in as much detail as you can.

- type: textarea
id: description
attributes:
label: What happened?
description: A clear description of the issue.
validations:
required: true

- type: dropdown
id: keyboard
attributes:
label: Keyboard model
options:
- K2
- K6
- Other
validations:
required: true

- type: textarea
id: expected
attributes:
label: Expected behavior
description: What should the documentation say instead?
validations:
required: true

- type: textarea
id: context
attributes:
label: Additional context
description: OS, distro, firmware version, or anything else relevant.
validations:
required: false
40 changes: 40 additions & 0 deletions .github/ISSUE_TEMPLATE/feature.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Feature Request
description: Suggest an improvement or new section
labels: [enhancement]
body:
- type: markdown
attributes:
value: |
Got an idea? Describe it below.

- type: textarea
id: description
attributes:
label: What do you want?
description: A clear description of the content you are requesting.
validations:
required: true

- type: textarea
id: use_case
attributes:
label: Use case
description: What problem does this solve? Who benefits?
validations:
required: true

- type: textarea
id: solution
attributes:
label: Proposed solution
description: How might this work? Rough ideas welcome.
validations:
required: false

- type: textarea
id: alternatives
attributes:
label: Alternatives considered
description: Any workarounds you have tried or other approaches you thought about.
validations:
required: false
13 changes: 13 additions & 0 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
k2:
- changed-files:
- any-glob-to-any-file: "k2.md"

k6:
- changed-files:
- any-glob-to-any-file: "k6.md"

docs:
- changed-files:
- any-glob-to-any-file:
- "*.md"
- "docs/**"
22 changes: 22 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
## Summary

<!-- What does this PR change? Why? -->

-
-

## Keyboard model

<!-- Which keyboard does this apply to? -->

- [ ] K2
- [ ] K6
- [ ] General

## Verification

<!-- How did you verify the info is correct? -->

- [ ] Tested on actual hardware
- [ ] Confirmed against official documentation
- [ ] Other (describe below)
16 changes: 16 additions & 0 deletions .github/workflows/labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Labeler
on:
pull_request_target:
types: [opened, synchronize]

permissions:
contents: read
pull-requests: write

jobs:
label:
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v5
with:
configuration-path: .github/labeler.yml
25 changes: 25 additions & 0 deletions .github/workflows/stale.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Stale
on:
schedule:
- cron: "0 0 * * *"

permissions:
issues: write
pull-requests: write

jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
stale-issue-message: "This issue has been inactive for 60 days. It will be closed in 14 days unless there is new activity."
stale-pr-message: "This PR has been inactive for 30 days. It will be closed in 14 days unless there is new activity."
days-before-issue-stale: 60
days-before-pr-stale: 30
days-before-issue-close: 14
days-before-pr-close: 14
stale-issue-label: stale
stale-pr-label: stale
exempt-issue-labels: pinned,keep
exempt-pr-labels: pinned,keep
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# ===========================
# Local
# ===========================
AGENTS.md
CLAUDE.md
PLAN.md
.claude/
.worktrees/
51 changes: 45 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,47 @@
# keychron
Settings for Keychron keyboards
# Keychron on Linux

## K2
[Keychron K2](https://github.com/IulianDita/keychron/blob/master/k2.md) page
Community-maintained guides for using Keychron keyboards on Linux.

## K6
[Keychron K6](https://github.com/IulianDita/keychron/blob/master/k6.md) page
## Keyboards

- **[Keychron K2](k2.md)** -- 75% layout, compact with function row
- **[Keychron K6](k6.md)** -- 65% layout, no function row

## Quick Start

Most issues boil down to three things:

1. **Set the physical switch to Windows/Android mode** (back of keyboard)
2. **Function keys should work out of the box on kernel 5.19+** thanks to `fnmode=3` auto-detection
3. **Bluetooth reconnection problems?** See the Bluetooth section in your keyboard's page

## Original vs Pro (QMK) Models

Keychron ships two variants of many keyboards. They have very different Linux experiences:

| | Original | Pro (QMK) |
|---|---|---|
| Kernel driver | `hid-apple` | `hid-generic` |
| Function keys | `fnmode` parameter | Configured via VIA/Launcher |
| Firmware updates | Windows only | Linux via Keychron Launcher |
| Key remapping | `keyd`, `xremap`, XKB | VIA, Keychron Launcher |
| RGB control | Hardware shortcuts only | VIA/Launcher (wired) |

If you have a Pro model, the `hid_apple` kernel module parameters (`fnmode`, `swap_opt_cmd`, etc.) **do not apply** to you. Use [Keychron Launcher](https://launcher.keychron.com/) or [VIA](https://usevia.app/) instead (Chromium required, wired connection only).

## Contributing

Pull requests welcome. If you have a tip, fix, or workaround, open a PR or file an issue.

## Resources

- [andrebrait's Keychron Linux guide](https://gist.github.com/andrebrait/961cefe730f4a2c41f57911e6195e444) -- the most comprehensive community resource
- [Arch Wiki: Apple Keyboard](https://wiki.archlinux.org/title/Apple_Keyboard) -- covers `hid_apple` parameters
- [Arch Wiki: Bluetooth keyboard](https://wiki.archlinux.org/title/Bluetooth_keyboard) -- generic BT pairing/troubleshooting
- [keyd](https://github.com/rvaiya/keyd) -- system-wide key remapping daemon (X11, Wayland, TTY)
- [Keychron Launcher](https://launcher.keychron.com/) -- web-based configuration for QMK boards
- [r/Keychron](https://www.reddit.com/r/Keychron/) -- community subreddit

## License

[MIT](LICENSE) -- originally by [kurgol](https://github.com/kurgol/keychron).
Loading