# System76 Launch 3 Custom Firmware Custom QMK firmware for the [System76 Launch 3](https://system76.com/accessories/launch) 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](https://nixos.org/) with flakes enabled. ```sh 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 ```sh 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 ```