import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.DyMmIvSC.js"; const __pageData = JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"getting_started_introduction.md","filePath":"getting_started_introduction.md"}'); const _sfc_main = { name: "getting_started_introduction.md" }; const _hoisted_1 = /* @__PURE__ */ createStaticVNode('

Introduction

This page attempts to explain the basic information you need to know to work with the QMK project. It assumes that you are familiar with navigating a Unix shell, but does not assume you are familiar with C or with compiling using make.

Basic QMK Structure

QMK is a fork of Jun Wako's tmk_keyboard project. The original TMK code, with modifications, can be found in the tmk_core folder. The QMK additions to the project may be found in the quantum folder. Keyboard projects may be found in the keyboards folder.

Userspace Structure

Within the folder users is a directory for each user. This is a place for users to put code that they might use between keyboards. See the docs for Userspace feature for more information.

Keyboard Project Structure

Within the folder keyboards, its subfolder handwired and its vendor and manufacture subdirectories e.g. clueboard is a directory for each keyboard project, for example qmk_firmware/keyboards/clueboard/2x1800. Within it, you'll find the following structure:

For more information on project structure, see QMK Keyboard Guidelines.

Keymap Structure

In every keymap folder, the following files may be found. Only keymap.c is required, and if the rest of the files are not found the default options will be chosen.

The config.h File

There are 3 possible config.h locations:

The build system automatically picks up the config files in the above order. If you wish to override any setting set by a previous config.h you will need to first include some boilerplate code for the settings you wish to change.

#pragma once

Then to override a setting from the previous config.h file you must #undef and then #define the setting again.

The boilerplate code and setting look like this together:

#pragma once\n\n// overrides go here!\n#undef MY_SETTING\n#define MY_SETTING 4
', 21); const _hoisted_22 = [ _hoisted_1 ]; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("div", null, _hoisted_22); } const getting_started_introduction = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]); export { __pageData, getting_started_introduction as default };