2026-03-15 16:14:14 -07:00
2026-03-15 16:14:14 -07:00
2026-03-15 16:14:14 -07:00
2026-03-15 17:29:42 -07:00
2026-03-15 16:14:14 -07:00
2026-03-15 17:29:42 -07:00
2026-03-15 16:14:14 -07:00

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

  1. Put the keyboard into bootloader mode (press the reset button on the bottom)
  2. Copy the .uf2 file 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
Description
System76 Launch 3 Custom Firmware
Readme MIT 131 KiB
Languages
C 80.8%
Python 7.9%
Nix 6.7%
Shell 4.4%
Makefile 0.2%