mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-01-19 08:05:01 +00:00
16 lines
6.1 KiB
JavaScript
16 lines
6.1 KiB
JavaScript
import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.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('<h1 id="introduction" tabindex="-1">Introduction <a class="header-anchor" href="#introduction" aria-label="Permalink to "Introduction""></a></h1><p>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.</p><h2 id="basic-qmk-structure" tabindex="-1">Basic QMK Structure <a class="header-anchor" href="#basic-qmk-structure" aria-label="Permalink to "Basic QMK Structure""></a></h2><p>QMK is a fork of <a href="https://github.com/tmk" target="_blank" rel="noreferrer">Jun Wako</a>'s <a href="https://github.com/tmk/tmk_keyboard" target="_blank" rel="noreferrer">tmk_keyboard</a> project. The original TMK code, with modifications, can be found in the <code>tmk_core</code> folder. The QMK additions to the project may be found in the <code>quantum</code> folder. Keyboard projects may be found in the <code>keyboards</code> folder.</p><h3 id="userspace-structure" tabindex="-1">Userspace Structure <a class="header-anchor" href="#userspace-structure" aria-label="Permalink to "Userspace Structure""></a></h3><p>Within the folder <code>users</code> 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 <a href="./feature_userspace">Userspace feature</a> for more information.</p><h3 id="keyboard-project-structure" tabindex="-1">Keyboard Project Structure <a class="header-anchor" href="#keyboard-project-structure" aria-label="Permalink to "Keyboard Project Structure""></a></h3><p>Within the folder <code>keyboards</code>, its subfolder <code>handwired</code> and its vendor and manufacture subdirectories e.g. <code>clueboard</code> is a directory for each keyboard project, for example <code>qmk_firmware/keyboards/clueboard/2x1800</code>. Within it, you'll find the following structure:</p><ul><li><code>keymaps/</code>: Different keymaps that can be built</li><li><code>rules.mk</code>: The file that sets the default "make" options. Do not edit this file directly, instead use a keymap specific <code>rules.mk</code>.</li><li><code>config.h</code>: The file that sets the default compile time options. Do not edit this file directly, instead use a keymap specific <code>config.h</code>.</li><li><code>info.json</code>: The file used for setting layout for QMK Configurator. See <a href="./reference_configurator_support">Configurator Support</a> for more information.</li><li><code>readme.md</code>: A brief overview of the keyboard.</li><li><code><keyboardName>.h</code>: This file is where the keyboard layout is defined against the keyboard's switch matrix.</li><li><code><keyboardName>.c</code>: This file is where you can find custom code for the keyboard.</li></ul><p>For more information on project structure, see <a href="./hardware_keyboard_guidelines">QMK Keyboard Guidelines</a>.</p><h3 id="keymap-structure" tabindex="-1">Keymap Structure <a class="header-anchor" href="#keymap-structure" aria-label="Permalink to "Keymap Structure""></a></h3><p>In every keymap folder, the following files may be found. Only <code>keymap.c</code> is required, and if the rest of the files are not found the default options will be chosen.</p><ul><li><code>config.h</code>: the options to configure your keymap</li><li><code>keymap.c</code>: all of your keymap code, required</li><li><code>rules.mk</code>: the features of QMK that are enabled</li><li><code>readme.md</code>: a description of your keymap, how others might use it, and explanations of features. Please upload images to a service like imgur.</li></ul><h1 id="the-config-h-file" tabindex="-1">The <code>config.h</code> File <a class="header-anchor" href="#the-config-h-file" aria-label="Permalink to "The `config.h` File""></a></h1><p>There are 3 possible <code>config.h</code> locations:</p><ul><li>keyboard (<code>/keyboards/<keyboard>/config.h</code>)</li><li>userspace (<code>/users/<user>/config.h</code>)</li><li>keymap (<code>/keyboards/<keyboard>/keymaps/<keymap>/config.h</code>)</li></ul><p>The build system automatically picks up the config files in the above order. If you wish to override any setting set by a previous <code>config.h</code> you will need to first include some boilerplate code for the settings you wish to change.</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>#pragma once</span></span></code></pre></div><p>Then to override a setting from the previous <code>config.h</code> file you must <code>#undef</code> and then <code>#define</code> the setting again.</p><p>The boilerplate code and setting look like this together:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>#pragma once</span></span>\n<span class="line"><span></span></span>\n<span class="line"><span>// overrides go here!</span></span>\n<span class="line"><span>#undef MY_SETTING</span></span>\n<span class="line"><span>#define MY_SETTING 4</span></span></code></pre></div>', 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
|
||
};
|