applying per-key rules, so Ctrl+key combos still remap correctly Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
System76 Launch 3 Custom Firmware
Custom QMK firmware for the System76 Launch 3 keyboard, built with Nix.
Features
OS Mode
The keyboard auto-detects the host OS on plug-in and rewrites shortcuts so that muscle memory from Linux (Ctrl-based shortcuts) works on macOS. Mode can also be cycled manually with FN+Del.
Four modes, indicated by RGB flash color:
| Mode | Color | Behavior |
|---|---|---|
| None | Red | No rewrites, all keys pass through |
| Linux | Green | Super+Up → Super+W (KDE overview) |
| Mac | Yellow | Full Ctrl→Cmd rewrite (see table below) |
| Windows | Blue | Super+Up → Super+Tab (Task View) |
Mac Mode Shortcut Rewrites
| Input (Linux muscle memory) | Output (macOS) | Action |
|---|---|---|
| Ctrl+C/V | Cmd+C/V | Copy/Paste |
| Ctrl+Shift+C/V | Cmd+C/V | Terminal copy/paste |
| Ctrl+X/A/S/F | Cmd+X/A/S/F | Cut, Select All, Save, Find |
| Ctrl+W/L/R | Cmd+W/L/R | Close tab, Address bar, Reload |
| Ctrl+Z/T/N | Cmd+Z/T/N | Undo, New tab, New window |
| Ctrl+Shift+Z/T/N | Cmd+Shift+Z/T/N | Redo, Reopen tab, Incognito |
| Ctrl+Left/Right | Alt+Left/Right | Word navigation |
| Ctrl+Alt+Left/Right | Ctrl+Left/Right | Switch workspace |
| Ctrl+Backspace | Alt+Backspace | Delete word |
| Home/End | Cmd+Left/Right | Line start/end |
| Alt+F4 | Cmd+Q | Quit app |
| Alt+Tab | Cmd+Tab | App switcher |
| Super tap | Cmd+Space | Spotlight |
| Super+Up | Ctrl+Up | Mission Control |
Layer Override
When any modifier is held (in any mode except None), the FN layer is bypassed — keys always resolve from Layer 0. This allows bypassing shortcut rewrites when wanted. For example, if you want to send Ctrl+c on mac (which is normally rewritten to cmd+c), simply use fn+Ctrl+c instead.
Layer 1 (FN Layer)
| Key | FN+ |
|---|---|
| ESC | Print Screen |
| F1/F2/F3 | Mute / Vol Down / Vol Up |
| 1/2/3 | Play-Pause / Prev / Next |
| 0/-/= | LED Toggle / LED Down / LED Up |
| Del | Cycle OS Mode |
| Arrows | Home / PgDn / PgUp / End |
Modifier keys (Shift, Ctrl, GUI, Alt) cannot be rebound on Layer 1 due to the layer override behavior.
Building
Requires Nix with flakes enabled.
nix build
The .uf2 firmware file is output to ./result/.
Flashing
- Put the keyboard into bootloader mode (press the reset button on the bottom)
- Copy the
.uf2file to the mounted USB drive
Development Shell
nix develop
qmk compile -kb system76/launch_3 -km custom
Project Structure
keymaps/custom/
├── keymap.c # Keymaps, shortcut rewrites, layer override
├── os_detect.c # OS auto-detection, RGB flash indicator
├── os_mode.h # OS mode enum and shared state
└── rules.mk # QMK build flags
qmk_firmware/ # System76 QMK fork (git submodule)
flake.nix # Nix build system