Compare commits
117 Commits
cmake-expe
...
docusaurus
Author | SHA1 | Date | |
---|---|---|---|
![]() |
711e8b968b | ||
![]() |
3c10cf81ee | ||
![]() |
e28bc93a0c | ||
![]() |
6d53f61608 | ||
![]() |
d154237847 | ||
![]() |
6e2d02852c | ||
![]() |
bdcf3c69c9 | ||
![]() |
37fcefb0e8 | ||
![]() |
21e231ef48 | ||
![]() |
708d7f03b4 | ||
![]() |
d9cf993f1c | ||
![]() |
0b62a4ef72 | ||
![]() |
c55c7fed83 | ||
![]() |
40380c2684 | ||
![]() |
a68b620112 | ||
![]() |
aa7628641c | ||
![]() |
ea4136bc2b | ||
![]() |
cdf640578b | ||
![]() |
7138fa4582 | ||
![]() |
ccb37b155c | ||
![]() |
64b84385cd | ||
![]() |
e90d9fcfff | ||
![]() |
d61a5f4343 | ||
![]() |
713427c086 | ||
![]() |
e1afcda1c0 | ||
![]() |
ab4013a69e | ||
![]() |
974c01b4f8 | ||
![]() |
f2d4dace06 | ||
![]() |
387b64a79b | ||
![]() |
9dc53f6cd2 | ||
![]() |
6d8a1aa676 | ||
![]() |
7ce0874617 | ||
![]() |
fc5eb10822 | ||
![]() |
952cdc7be5 | ||
![]() |
db9f5c6013 | ||
![]() |
fff2249a7c | ||
![]() |
f48a88fc72 | ||
![]() |
29f2e9f19a | ||
![]() |
d2c755c3dd | ||
![]() |
40a4ee5114 | ||
![]() |
bb8c5cd54a | ||
![]() |
2cef3465e8 | ||
![]() |
e0a09ff728 | ||
![]() |
990ee8075e | ||
![]() |
697f53a154 | ||
![]() |
cefef18ceb | ||
![]() |
6e5ff018e3 | ||
![]() |
75b7140cbd | ||
![]() |
28c11ed348 | ||
![]() |
d732b0b849 | ||
![]() |
6d965d486c | ||
![]() |
ce417226b2 | ||
![]() |
0382a25e35 | ||
![]() |
83dcbefeed | ||
![]() |
18335ddda5 | ||
![]() |
051485c579 | ||
![]() |
5012dfd719 | ||
![]() |
641698d356 | ||
![]() |
75edefe541 | ||
![]() |
7e6eba674a | ||
![]() |
26b35a54cf | ||
![]() |
38700f7e3f | ||
![]() |
ed72c423be | ||
![]() |
bc6db2823c | ||
![]() |
fb706f42a2 | ||
![]() |
9132c64389 | ||
![]() |
6e0acf0548 | ||
![]() |
2c375e6478 | ||
![]() |
a5e68e5f74 | ||
![]() |
e9b36bebb2 | ||
![]() |
df7b56e0ea | ||
![]() |
2e766a9c7a | ||
![]() |
4ba3fdfad2 | ||
![]() |
655c24d29d | ||
![]() |
eab2b8faa0 | ||
![]() |
d058091d0b | ||
![]() |
596319c92f | ||
![]() |
4d17fe2a99 | ||
![]() |
1d045e854b | ||
![]() |
f7176f070f | ||
![]() |
687883cf7d | ||
![]() |
f56cf93fa1 | ||
![]() |
1fd30b3391 | ||
![]() |
37f205ec1a | ||
![]() |
26e0bfd494 | ||
![]() |
a434507ab4 | ||
![]() |
ee8c86702e | ||
![]() |
246cf99b4b | ||
![]() |
eb52984a94 | ||
![]() |
a5272a1575 | ||
![]() |
d06ce0153b | ||
![]() |
c58610bea3 | ||
![]() |
12de0297ed | ||
![]() |
4992df56b8 | ||
![]() |
f3f0bf6dbe | ||
![]() |
8a5e8ed88e | ||
![]() |
fb6557acf1 | ||
![]() |
2d7240f730 | ||
![]() |
1d1c407e4e | ||
![]() |
9152928f02 | ||
![]() |
15a106b1ef | ||
![]() |
ac9f9f9efb | ||
![]() |
ec83c0b185 | ||
![]() |
d300811009 | ||
![]() |
27e6e27d3a | ||
![]() |
5687fc7646 | ||
![]() |
ebe36ea83c | ||
![]() |
6b205c3064 | ||
![]() |
b5d0c44690 | ||
![]() |
d0e0b9e583 | ||
![]() |
b0dc99fbd8 | ||
![]() |
5b8dae0d61 | ||
![]() |
fd56a2a1dc | ||
![]() |
be9f6e679b | ||
![]() |
b53356f7ab | ||
![]() |
c402bac023 | ||
![]() |
a030e8094f |
2
.github/workflows/auto_tag.yml
vendored
@ -31,7 +31,7 @@ jobs:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Bump version and push tag
|
||||
uses: anothrNick/github-tag-action@1.61.0
|
||||
uses: anothrNick/github-tag-action@1.62.0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
DEFAULT_BUMP: 'patch'
|
||||
|
28
.github/workflows/ci_builds.yml
vendored
@ -4,22 +4,27 @@ permissions:
|
||||
contents: read
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master, develop]
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 0,12 * * *'
|
||||
inputs:
|
||||
branch:
|
||||
type: choice
|
||||
description: 'Branch to build'
|
||||
options: [master, develop]
|
||||
|
||||
concurrency: ci_build-${{ github.event.inputs.branch || github.ref_name }}
|
||||
|
||||
jobs:
|
||||
ci_builds:
|
||||
if: github.repository == 'qmk/qmk_firmware'
|
||||
name: "CI Build"
|
||||
runs-on: self-hosted
|
||||
timeout-minutes: 1380
|
||||
|
||||
if: github.repository == 'qmk/qmk_firmware'
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branch: [master, develop]
|
||||
keymap: [default, via]
|
||||
|
||||
container: qmkfm/qmk_cli
|
||||
@ -31,7 +36,7 @@ jobs:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: recursive
|
||||
ref: ${{ matrix.branch }}
|
||||
ref: ${{ github.event.inputs.branch || github.ref }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements.txt
|
||||
@ -51,10 +56,19 @@ jobs:
|
||||
uses: actions/upload-artifact@v3
|
||||
if: always()
|
||||
with:
|
||||
name: artifacts-${{ matrix.branch }}-${{ matrix.keymap }}
|
||||
name: artifacts-${{ github.event.inputs.branch || github.ref_name }}-${{ matrix.keymap }}
|
||||
if-no-files-found: ignore
|
||||
path: |
|
||||
*.bin
|
||||
*.hex
|
||||
*.uf2
|
||||
.build/failed.*
|
||||
|
||||
- name: 'CI Discord Notification'
|
||||
if: always()
|
||||
working-directory: util/ci/
|
||||
env:
|
||||
DISCORD_WEBHOOK: ${{ secrets.CI_DISCORD_WEBHOOK }}
|
||||
run: |
|
||||
python3 -m pip install -r requirements.txt
|
||||
python3 ./discord-results.py --branch ${{ github.event.inputs.branch || github.ref_name }} --keymap ${{ matrix.keymap }} --url ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||
|
10
.github/workflows/docs.yml
vendored
@ -27,12 +27,16 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
cache: npm
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
apt-get update && apt-get install -y rsync nodejs npm doxygen
|
||||
npm install -g moxygen
|
||||
|
||||
- name: Build docs
|
||||
- name: Build doxygen docs
|
||||
run: |
|
||||
qmk --verbose generate-docs
|
||||
|
||||
@ -42,5 +46,5 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
BASE_BRANCH: master
|
||||
BRANCH: gh-pages
|
||||
FOLDER: .build/docs
|
||||
FOLDER: .build/docs/build
|
||||
GIT_CONFIG_EMAIL: hello@qmk.fm
|
||||
|
2
.github/workflows/format_push.yml
vendored
@ -47,7 +47,7 @@ jobs:
|
||||
git config user.email 'hello@qmk.fm'
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v4
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
if: ${{ github.repository == 'qmk/qmk_firmware'}}
|
||||
with:
|
||||
token: ${{ secrets.QMK_BOT_TOKEN }}
|
||||
|
2
.github/workflows/regen_push.yml
vendored
@ -34,7 +34,7 @@ jobs:
|
||||
git config user.email 'hello@qmk.fm'
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v4
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
if: ${{ github.repository == 'qmk/qmk_firmware'}}
|
||||
with:
|
||||
token: ${{ secrets.QMK_BOT_TOKEN }}
|
||||
|
3
.gitignore
vendored
@ -30,6 +30,9 @@ quantum/version.h
|
||||
*.qmk
|
||||
*.uf2
|
||||
|
||||
# DD config at wrong location
|
||||
/keyboards/**/keymaps/*/info.json
|
||||
|
||||
# Old-style QMK Makefiles
|
||||
/keyboards/**/Makefile
|
||||
|
||||
|
5
.vscode/extensions.json
vendored
@ -1,10 +1,11 @@
|
||||
// Suggested extensions
|
||||
{
|
||||
"recommendations": [
|
||||
"EditorConfig.EditorConfig",
|
||||
"editorconfig.editorconfig",
|
||||
"xaver.clang-format",
|
||||
"ms-vscode.cpptools",
|
||||
"bierner.github-markdown-preview",
|
||||
"donjayamanne.git-extension-pack"
|
||||
"donjayamanne.git-extension-pack",
|
||||
"kevgo.vscode-markdown-ide"
|
||||
]
|
||||
}
|
||||
|
13
Doxyfile
@ -21,7 +21,7 @@ DOXYFILE_ENCODING = UTF-8
|
||||
PROJECT_NAME = "QMK Firmware"
|
||||
PROJECT_NUMBER = https://github.com/qmk/qmk_firmware
|
||||
PROJECT_BRIEF = "Keyboard controller firmware for Atmel AVR and ARM USB families"
|
||||
OUTPUT_DIRECTORY = .build/doxygen
|
||||
OUTPUT_DIRECTORY = docs/static
|
||||
ALLOW_UNICODE_NAMES = NO
|
||||
OUTPUT_LANGUAGE = English
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
@ -183,7 +183,7 @@ IGNORE_PREFIX =
|
||||
# Configuration options related to disabled outputs
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
GENERATE_HTML = NO
|
||||
GENERATE_HTML = YES
|
||||
GENERATE_LATEX = NO
|
||||
GENERATE_RTF = NO
|
||||
GENERATE_MAN = NO
|
||||
@ -191,11 +191,18 @@ GENERATE_DOCBOOK = NO
|
||||
GENERATE_AUTOGEN_DEF = NO
|
||||
GENERATE_PERLMOD = NO
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the HTML output
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
HTML_OUTPUT = doxygen
|
||||
# HTML_FILE_EXTENSION =
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the XML output
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
GENERATE_XML = YES
|
||||
GENERATE_XML = NO
|
||||
XML_OUTPUT = xml
|
||||
XML_PROGRAMLISTING = YES
|
||||
|
||||
|
21
builddefs/docs/.gitignore
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
# Dependencies
|
||||
/node_modules
|
||||
|
||||
# Production
|
||||
/build
|
||||
/static/doxygen
|
||||
|
||||
# Generated files
|
||||
.docusaurus
|
||||
.cache-loader
|
||||
|
||||
# Misc
|
||||
.DS_Store
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
3
builddefs/docs/babel.config.js
Normal file
@ -0,0 +1,3 @@
|
||||
module.exports = {
|
||||
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
|
||||
};
|
285
builddefs/docs/docusaurus.config.js
Normal file
@ -0,0 +1,285 @@
|
||||
// @ts-check
|
||||
// Note: type annotations allow type checking and IDEs autocompletion
|
||||
|
||||
const lightCodeTheme = require("prism-react-renderer/themes/github");
|
||||
const darkCodeTheme = require("prism-react-renderer/themes/dracula");
|
||||
|
||||
/** @type {import('@docusaurus/types').Config} */
|
||||
const config = {
|
||||
title: "QMK Firmware",
|
||||
tagline: "The full documentation of the open-source firmware",
|
||||
favicon: "img/favicon.ico",
|
||||
url: "https://docs.qmk.fm",
|
||||
baseUrl: "/",
|
||||
organizationName: "qmk",
|
||||
projectName: "qmk_firmware",
|
||||
deploymentBranch: "gh-pages",
|
||||
onBrokenLinks: "warn",
|
||||
onBrokenMarkdownLinks: "warn",
|
||||
i18n: {
|
||||
defaultLocale: "en",
|
||||
locales: ["en"], //, 'ja', 'zh-cn'],
|
||||
},
|
||||
themes: [
|
||||
[
|
||||
"classic",
|
||||
{
|
||||
customCss: require.resolve("./src/css/custom.css"),
|
||||
}
|
||||
],
|
||||
[
|
||||
require.resolve("@easyops-cn/docusaurus-search-local"),
|
||||
{
|
||||
indexBlog: false,
|
||||
docsRouteBasePath: '/',
|
||||
searchResultLimits: 12,
|
||||
searchBarShortcut: false,
|
||||
},
|
||||
],
|
||||
],
|
||||
plugins: [
|
||||
[
|
||||
"@docusaurus/plugin-content-docs",
|
||||
{
|
||||
sidebarPath: require.resolve("./sidebars.js"),
|
||||
path: "../../docs",
|
||||
routeBasePath: "/",
|
||||
exclude: [
|
||||
"node_modules",
|
||||
"src",
|
||||
"static",
|
||||
"ja",
|
||||
"zh-cn",
|
||||
"gitbook",
|
||||
// "ChangeLog"
|
||||
],
|
||||
editUrl:
|
||||
"https://github.com/qmk/qmk_firmware/edit/master/docs/",
|
||||
},
|
||||
],
|
||||
[
|
||||
"@docusaurus/plugin-client-redirects",
|
||||
{
|
||||
// fromExtensions: ['md', 'html'],
|
||||
redirects: [
|
||||
// from index.html
|
||||
{
|
||||
from: '/adding_a_keyboard_to_qmk',
|
||||
to: '/hardware_keyboard_guidelines',
|
||||
},
|
||||
{
|
||||
from: '/build_environment_setup',
|
||||
to: '/newbs_getting_started',
|
||||
},
|
||||
{
|
||||
from: '/cli_dev_configuration',
|
||||
to: '/cli_configuration',
|
||||
},
|
||||
{
|
||||
from: '/dynamic_macros',
|
||||
to: '/feature_dynamic_macros',
|
||||
},
|
||||
{
|
||||
from: '/feature_common_shortcuts',
|
||||
to: '/feature_advanced_keycodes',
|
||||
},
|
||||
{
|
||||
from: '/glossary',
|
||||
to: '/reference_glossary',
|
||||
},
|
||||
{
|
||||
from: '/key_lock',
|
||||
to: '/feature_key_lock',
|
||||
},
|
||||
{
|
||||
from: '/make_instructions',
|
||||
to: '/getting_started_make_guide',
|
||||
},
|
||||
{
|
||||
from: ['/space_cadet_shift', '/feature_space_cadet_shift'],
|
||||
to: '/feature_space_cadet',
|
||||
},
|
||||
{
|
||||
from: '/getting_started_getting_help',
|
||||
to: '/support',
|
||||
},
|
||||
{
|
||||
from: '/tap_dance',
|
||||
to: '/feature_tap_dance',
|
||||
},
|
||||
{
|
||||
from: '/unicode',
|
||||
to: '/feature_unicode',
|
||||
},
|
||||
{
|
||||
from: '/python_development',
|
||||
to: '/cli_development',
|
||||
},
|
||||
{
|
||||
from: '/getting_started_build_tools',
|
||||
to: '/newbs_getting_started',
|
||||
},
|
||||
{
|
||||
from: '/tutorial',
|
||||
to: '/newbs',
|
||||
},
|
||||
// from redirects.json
|
||||
// {
|
||||
// from: "/adding_a_keyboard_to_qmk",
|
||||
// to: "/hardware_keyboard_guidelines"
|
||||
// },
|
||||
// {
|
||||
// from: "/build_environment_setup",
|
||||
// to: "/getting_started_build_tools"
|
||||
// },
|
||||
// {
|
||||
// from: "/dynamic_macros",
|
||||
// to: "/feature_dynamic_macros"
|
||||
// },
|
||||
// {
|
||||
// from: "/feature_common_shortcuts",
|
||||
// to: "/feature_advanced_keycodes"
|
||||
// },
|
||||
// {
|
||||
// from: "/glossary",
|
||||
// to: "/reference_glossary"
|
||||
// },
|
||||
// {
|
||||
// from: "/key_lock",
|
||||
// to: "/feature_key_lock"
|
||||
// },
|
||||
// {
|
||||
// from: "/make_instructions",
|
||||
// to: "/getting_started_make_guide"
|
||||
// },
|
||||
// {
|
||||
// from: "/porting_your_keyboard_to_qmk",
|
||||
// to: "/hardware_avr"
|
||||
// },
|
||||
// {
|
||||
// from: "/space_cadet_shift",
|
||||
// to: "/feature_space_cadet_shift"
|
||||
// },
|
||||
// {
|
||||
// from: "/tap_dance",
|
||||
// to: "/feature_tap_dance"
|
||||
// },
|
||||
// {
|
||||
// from: "/unicode",
|
||||
// to: "/feature_unicode"
|
||||
// },
|
||||
// {
|
||||
// from: "/python_development",
|
||||
// to: "/cli_development"
|
||||
// }
|
||||
],
|
||||
},
|
||||
],
|
||||
],
|
||||
|
||||
themeConfig:
|
||||
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
|
||||
({
|
||||
image: "img/qmk-social-card.jpg",
|
||||
navbar: {
|
||||
title: "QMK Firmware Docs",
|
||||
logo: {
|
||||
alt: "QMK Firmware",
|
||||
src: "img/qmk-new-light.svg",
|
||||
srcDark: "img/qmk-new-dark.svg",
|
||||
width: 32,
|
||||
height: 32,
|
||||
},
|
||||
items: [
|
||||
// {
|
||||
// type: 'localeDropdown',
|
||||
// position: 'right',
|
||||
// },
|
||||
{
|
||||
href: "https://github.com/qmk/qmk_firmware",
|
||||
label: "GitHub",
|
||||
position: "right",
|
||||
},
|
||||
],
|
||||
},
|
||||
docs: {
|
||||
sidebar: {
|
||||
autoCollapseCategories: false,
|
||||
},
|
||||
},
|
||||
footer: {
|
||||
style: "dark",
|
||||
links: [
|
||||
{
|
||||
title: "Docs",
|
||||
items: [
|
||||
{
|
||||
label: "Docs",
|
||||
to: "/",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Community",
|
||||
items: [
|
||||
{
|
||||
label: "Discord",
|
||||
href: "https://discord.gg/Uq7gcHh",
|
||||
},
|
||||
{
|
||||
label: "Reddit",
|
||||
href: "https://reddit.com/r/olkb",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "More",
|
||||
items: [
|
||||
{
|
||||
label: "GitHub",
|
||||
href: "https://github.com/qmk/qmk_firmware",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
copyright: `Copyright © ${new Date().getFullYear()} QMK. Built with Docusaurus.`,
|
||||
},
|
||||
prism: {
|
||||
theme: lightCodeTheme,
|
||||
darkTheme: darkCodeTheme,
|
||||
},
|
||||
// applied for - will fill out once we hear back
|
||||
//
|
||||
// algolia: {
|
||||
// // The application ID provided by Algolia
|
||||
// appId: 'YOUR_APP_ID',
|
||||
|
||||
// // Public API key: it is safe to commit it
|
||||
// apiKey: 'YOUR_SEARCH_API_KEY',
|
||||
|
||||
// indexName: 'YOUR_INDEX_NAME',
|
||||
|
||||
// // Optional: see doc section below
|
||||
// contextualSearch: true,
|
||||
|
||||
// // Optional: Specify domains where the navigation should occur through window.location instead on history.push. Useful when our Algolia config crawls multiple documentation sites and we want to navigate with window.location.href to them.
|
||||
// externalUrlRegex: 'external\\.com|domain\\.com',
|
||||
|
||||
// // Optional: Replace parts of the item URLs from Algolia. Useful when using the same search index for multiple deployments using a different baseUrl. You can use regexp or string in the `from` param. For example: localhost:3000 vs myCompany.com/docs
|
||||
// replaceSearchResultPathname: {
|
||||
// from: '/docs/', // or as RegExp: /\/docs\//
|
||||
// to: '/',
|
||||
// },
|
||||
|
||||
// // Optional: Algolia search parameters
|
||||
// searchParameters: {},
|
||||
|
||||
// // Optional: path for search page that enabled by default (`false` to disable it)
|
||||
// searchPagePath: 'search',
|
||||
|
||||
// //... other Algolia params
|
||||
// },
|
||||
}),
|
||||
};
|
||||
|
||||
module.exports = config;
|
12974
builddefs/docs/package-lock.json
generated
Normal file
45
builddefs/docs/package.json
Normal file
@ -0,0 +1,45 @@
|
||||
{
|
||||
"name": "qmk_firmware_docs",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"docusaurus": "docusaurus",
|
||||
"start": "docusaurus start --host 0.0.0.0 --port 8936",
|
||||
"build": "docusaurus build",
|
||||
"swizzle": "docusaurus swizzle",
|
||||
"deploy": "docusaurus deploy",
|
||||
"clear": "docusaurus clear",
|
||||
"serve": "docusaurus serve --host 0.0.0.0 --port 8936",
|
||||
"write-translations": "docusaurus write-translations",
|
||||
"write-heading-ids": "docusaurus write-heading-ids"
|
||||
},
|
||||
"dependencies": {
|
||||
"@docusaurus/core": "2.4.0",
|
||||
"@docusaurus/plugin-client-redirects": "^2.4.0",
|
||||
"@docusaurus/preset-classic": "2.4.0",
|
||||
"@easyops-cn/docusaurus-search-local": "^0.35.0",
|
||||
"@mdx-js/react": "^1.6.22",
|
||||
"clsx": "^1.2.1",
|
||||
"prism-react-renderer": "^1.3.5",
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@docusaurus/module-type-aliases": "2.4.0"
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.5%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.14"
|
||||
}
|
||||
}
|
349
builddefs/docs/sidebars.js
Normal file
22
builddefs/docs/src/components/DocsifyForwarder.js
Normal file
@ -0,0 +1,22 @@
|
||||
import React, { useEffect } from 'react';
|
||||
import { useHistory } from 'react-router-dom';
|
||||
|
||||
function removeHashSlash(url) {
|
||||
return url.replace(/\/#\//, '/');
|
||||
}
|
||||
|
||||
export default function DocsifyForwarder(props) {
|
||||
const history = useHistory();
|
||||
|
||||
useEffect(() => {
|
||||
const currentUrl = window.location.href;
|
||||
if (currentUrl.includes('/#/')) {
|
||||
const newUrl = removeHashSlash(currentUrl);
|
||||
window.history.replaceState({}, '', newUrl);
|
||||
const relativePath = new URL(newUrl).pathname;
|
||||
history.push(relativePath);
|
||||
}
|
||||
}, [history]);
|
||||
|
||||
return "";
|
||||
}
|
30
builddefs/docs/src/css/custom.css
Normal file
@ -0,0 +1,30 @@
|
||||
/**
|
||||
* Any CSS included here will be global. The classic template
|
||||
* bundles Infima by default. Infima is a CSS framework designed to
|
||||
* work well for content-centric websites.
|
||||
*/
|
||||
|
||||
/* You can override the default Infima variables here. */
|
||||
:root {
|
||||
--ifm-color-primary: #2d6fc5;
|
||||
--ifm-color-primary-dark: #294e78;
|
||||
--ifm-color-primary-darker: #274d71;
|
||||
--ifm-color-primary-darkest: #20355d;
|
||||
--ifm-color-primary-light: #335c92;
|
||||
--ifm-color-primary-lighter: #355899;
|
||||
--ifm-color-primary-lightest: #3c60ad;
|
||||
--ifm-code-font-size: 95%;
|
||||
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
/* For readability concerns, you should choose a lighter palette in dark mode. */
|
||||
[data-theme='dark'] {
|
||||
--ifm-color-primary: #c26e25;
|
||||
--ifm-color-primary-dark: #af7621;
|
||||
--ifm-color-primary-darker: #a5641f;
|
||||
--ifm-color-primary-darkest: #885a1a;
|
||||
--ifm-color-primary-light: #d58229;
|
||||
--ifm-color-primary-lighter: #d88232;
|
||||
--ifm-color-primary-lightest: #dd964f;
|
||||
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
|
||||
}
|
23
builddefs/docs/src/pages/index.module.css
Normal file
@ -0,0 +1,23 @@
|
||||
/**
|
||||
* CSS files with the .module.css suffix will be treated as CSS modules
|
||||
* and scoped locally.
|
||||
*/
|
||||
|
||||
.heroBanner {
|
||||
padding: 4rem 0;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 996px) {
|
||||
.heroBanner {
|
||||
padding: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.buttons {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 793 B After Width: | Height: | Size: 793 B |
15
builddefs/docs/static/img/qmk-new-dark.svg
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 281 281" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<g transform="matrix(1,0,0,1,-597.647,-5630.35)">
|
||||
<g id="qmk-new-dark" transform="matrix(0.632083,0,0,0.627831,726.192,4200.78)">
|
||||
<rect x="-203.366" y="2277" width="443" height="446" style="fill:none;"/>
|
||||
<g transform="matrix(1.58207,0,0,1.59279,-651.083,-6690.94)">
|
||||
<path d="M342,5738.86L321.5,5738.86C317.361,5738.86 314,5735.49 314,5731.36C314,5727.22 317.361,5723.86 321.5,5723.86L342,5723.86L342,5715.47C342,5700.78 353.924,5688.86 368.61,5688.86L376.567,5688.86L376.567,5668.86C376.567,5664.75 379.897,5661.42 384,5661.42C388.103,5661.42 391.433,5664.75 391.433,5668.86L391.433,5688.86L416.067,5688.86L416.067,5668.86C416.067,5664.75 419.397,5661.42 423.5,5661.42C427.603,5661.42 430.933,5664.75 430.933,5668.86L430.933,5688.86L454.567,5688.86L454.567,5668.86C454.567,5664.75 457.897,5661.42 462,5661.42C466.103,5661.42 469.433,5664.75 469.433,5668.86L469.433,5688.86L477.39,5688.86C492.076,5688.86 504,5700.78 504,5715.47L504,5723.86L524.5,5723.86C528.639,5723.86 532,5727.22 532,5731.36C532,5735.49 528.639,5738.86 524.5,5738.86L504,5738.86L504,5762.36L524.5,5762.36C528.639,5762.36 532,5765.72 532,5769.86C532,5773.99 528.639,5777.36 524.5,5777.36L504,5777.36L504,5801.86L524.5,5801.86C528.639,5801.86 532,5805.22 532,5809.36C532,5813.49 528.639,5816.86 524.5,5816.86L504,5816.86L504,5824.25C504,5838.93 492.076,5850.86 477.39,5850.86L469.5,5850.86L469.5,5871.86C469.5,5875.99 466.139,5879.36 462,5879.36C457.861,5879.36 454.5,5875.99 454.5,5871.86L454.5,5850.86L431,5850.86L431,5871.86C431,5875.99 427.639,5879.36 423.5,5879.36C419.361,5879.36 416,5875.99 416,5871.86L416,5850.86L391.5,5850.86L391.5,5871.86C391.5,5875.99 388.139,5879.36 384,5879.36C379.861,5879.36 376.5,5875.99 376.5,5871.86L376.5,5850.86L368.61,5850.86C353.924,5850.86 342,5838.93 342,5824.25L342,5816.86L321.5,5816.86C317.361,5816.86 314,5813.49 314,5809.36C314,5805.22 317.361,5801.86 321.5,5801.86L342,5801.86L342,5777.36L321.5,5777.36C317.361,5777.36 314,5773.99 314,5769.86C314,5765.72 317.361,5762.36 321.5,5762.36L342,5762.36L342,5738.86Z" style="fill:white;"/>
|
||||
</g>
|
||||
<g transform="matrix(1.58207,0,0,1.59279,-651.083,-6690.94)">
|
||||
<path d="M416.067,5800.49C402.166,5799.34 393.38,5795 387.738,5790.24C376.29,5780.57 376.567,5768.36 376.567,5768.36L376.567,5731.36C376.567,5727.25 379.897,5723.92 384,5723.92C388.103,5723.92 391.433,5727.25 391.433,5731.36L391.433,5768.36C391.434,5768.36 391.712,5774.14 397.326,5778.88C401.148,5782.1 407.068,5784.67 416.067,5785.57L416.067,5731.36C416.067,5727.25 419.397,5723.92 423.5,5723.92C427.603,5723.92 430.933,5727.25 430.933,5731.36L430.933,5785.55C439.5,5784.63 445.157,5782.11 448.818,5778.94C454.317,5774.18 454.567,5768.36 454.567,5768.36L454.567,5731.36C454.567,5727.25 457.897,5723.92 462,5723.92C466.103,5723.92 469.433,5727.25 469.433,5731.36L469.433,5768.36C469.433,5768.36 469.685,5780.53 458.55,5790.18C453.039,5794.95 444.473,5799.3 430.933,5800.48L430.933,5809.36C430.933,5813.46 427.603,5816.79 423.5,5816.79C419.397,5816.79 416.067,5813.46 416.067,5809.36L416.067,5800.49Z" style="fill:rgb(16,16,16);"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
15
builddefs/docs/static/img/qmk-new-light.svg
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 281 281" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<g transform="matrix(1,0,0,1,-282.994,-5630.35)">
|
||||
<g id="qmk-new-light" transform="matrix(0.632083,0,0,0.627831,411.538,4200.78)">
|
||||
<rect x="-203.366" y="2277" width="443" height="446" style="fill:none;"/>
|
||||
<g transform="matrix(1.58207,0,0,1.59279,-651.083,-6690.94)">
|
||||
<path d="M342,5738.86L321.5,5738.86C317.361,5738.86 314,5735.49 314,5731.36C314,5727.22 317.361,5723.86 321.5,5723.86L342,5723.86L342,5715.47C342,5700.78 353.924,5688.86 368.61,5688.86L376.567,5688.86L376.567,5668.86C376.567,5664.75 379.897,5661.42 384,5661.42C388.103,5661.42 391.433,5664.75 391.433,5668.86L391.433,5688.86L416.067,5688.86L416.067,5668.86C416.067,5664.75 419.397,5661.42 423.5,5661.42C427.603,5661.42 430.933,5664.75 430.933,5668.86L430.933,5688.86L454.567,5688.86L454.567,5668.86C454.567,5664.75 457.897,5661.42 462,5661.42C466.103,5661.42 469.433,5664.75 469.433,5668.86L469.433,5688.86L477.39,5688.86C492.076,5688.86 504,5700.78 504,5715.47L504,5723.86L524.5,5723.86C528.639,5723.86 532,5727.22 532,5731.36C532,5735.49 528.639,5738.86 524.5,5738.86L504,5738.86L504,5762.36L524.5,5762.36C528.639,5762.36 532,5765.72 532,5769.86C532,5773.99 528.639,5777.36 524.5,5777.36L504,5777.36L504,5801.86L524.5,5801.86C528.639,5801.86 532,5805.22 532,5809.36C532,5813.49 528.639,5816.86 524.5,5816.86L504,5816.86L504,5824.25C504,5838.93 492.076,5850.86 477.39,5850.86L469.5,5850.86L469.5,5871.86C469.5,5875.99 466.139,5879.36 462,5879.36C457.861,5879.36 454.5,5875.99 454.5,5871.86L454.5,5850.86L431,5850.86L431,5871.86C431,5875.99 427.639,5879.36 423.5,5879.36C419.361,5879.36 416,5875.99 416,5871.86L416,5850.86L391.5,5850.86L391.5,5871.86C391.5,5875.99 388.139,5879.36 384,5879.36C379.861,5879.36 376.5,5875.99 376.5,5871.86L376.5,5850.86L368.61,5850.86C353.924,5850.86 342,5838.93 342,5824.25L342,5816.86L321.5,5816.86C317.361,5816.86 314,5813.49 314,5809.36C314,5805.22 317.361,5801.86 321.5,5801.86L342,5801.86L342,5777.36L321.5,5777.36C317.361,5777.36 314,5773.99 314,5769.86C314,5765.72 317.361,5762.36 321.5,5762.36L342,5762.36L342,5738.86Z" style="fill:rgb(16,16,16);"/>
|
||||
</g>
|
||||
<g transform="matrix(1.58207,0,0,1.59279,-651.083,-6690.94)">
|
||||
<path d="M416.067,5800.49C402.166,5799.34 393.38,5795 387.738,5790.24C376.29,5780.57 376.567,5768.36 376.567,5768.36L376.567,5731.36C376.567,5727.25 379.897,5723.92 384,5723.92C388.103,5723.92 391.433,5727.25 391.433,5731.36L391.433,5768.36C391.434,5768.36 391.712,5774.14 397.326,5778.88C401.148,5782.1 407.068,5784.67 416.067,5785.57L416.067,5731.36C416.067,5727.25 419.397,5723.92 423.5,5723.92C427.603,5723.92 430.933,5727.25 430.933,5731.36L430.933,5785.55C439.5,5784.63 445.157,5782.11 448.818,5778.94C454.317,5774.18 454.567,5768.36 454.567,5768.36L454.567,5731.36C454.567,5727.25 457.897,5723.92 462,5723.92C466.103,5723.92 469.433,5727.25 469.433,5731.36L469.433,5768.36C469.433,5768.36 469.685,5780.53 458.55,5790.18C453.039,5794.95 444.473,5799.3 430.933,5800.48L430.933,5809.36C430.933,5813.46 427.603,5816.79 423.5,5816.79C419.397,5816.79 416.067,5813.46 416.067,5809.36L416.067,5800.49Z" style="fill:white;"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
BIN
builddefs/docs/static/img/qmk-social-card.jpg
vendored
Normal file
After Width: | Height: | Size: 40 KiB |
@ -236,4 +236,4 @@ Old `fn_actions` action | New QMK keycode
|
||||
`ACTION_LAYER_TOGGLE(layer)` | `TG(layer)`
|
||||
`ACTION_MODS_ONESHOT(mod)` | `OSM(mod)`
|
||||
`ACTION_MODS_TAP_KEY(mod, kc)` | `MT(mod, kc)`
|
||||
`ACTION_MODS_KEY(mod, kc)`<br>e.g. `ACTION_MODS_KEY(MOD_LCTL, KC_0)` | `MOD(kc)`<br>e.g. `LCTL(KC_0)`
|
||||
`ACTION_MODS_KEY(mod, kc)`<br />e.g. `ACTION_MODS_KEY(MOD_LCTL, KC_0)` | `MOD(kc)`<br />e.g. `LCTL(KC_0)`
|
||||
|
@ -3,9 +3,9 @@
|
||||
Four times a year QMK runs a process for merging Breaking Changes. A Breaking Change is any change which modifies how QMK behaves in a way that is incompatible or potentially dangerous. We limit these changes to 4 times per year so that users can have confidence that updating their QMK tree will not break their keymaps.
|
||||
|
||||
|
||||
## Changes Requiring User Action :id=changes-requiring-user-action
|
||||
## Changes Requiring User Action {#changes-requiring-user-action}
|
||||
|
||||
### Relocated Keyboards :id=relocated-keyboards
|
||||
### Relocated Keyboards {#relocated-keyboards}
|
||||
|
||||
#### The Key Company project consolidation ([#9547](https://github.com/qmk/qmk_firmware/pull/9547))
|
||||
#### relocating boards by flehrad to flehrad/ folder ([#9635](https://github.com/qmk/qmk_firmware/pull/9635))
|
||||
@ -24,7 +24,7 @@ handwired/numbrero | flehrad/numbrero
|
||||
snagpad | flehrad/snagpad
|
||||
handwired/tradestation | flehrad/tradestation
|
||||
|
||||
### Updated Keyboard Codebases :id=keyboard-updates
|
||||
### Updated Keyboard Codebases {#keyboard-updates}
|
||||
|
||||
#### Keebio RGB wiring update ([#7754](https://github.com/qmk/qmk_firmware/pull/7754))
|
||||
|
||||
@ -46,7 +46,7 @@ This change affects:
|
||||
* Quefrency rev1
|
||||
* Viterbi, revs. 1 and 2
|
||||
|
||||
### Changes to Core Functionality :id=core-updates
|
||||
### Changes to Core Functionality {#core-updates}
|
||||
|
||||
* Bigger Combo index ([#9318](https://github.com/qmk/qmk_firmware/pull/9318))
|
||||
|
||||
@ -58,14 +58,14 @@ Any fork that uses `process_combo_event` needs to update the function's first ar
|
||||
* New function: `void process_combo_event(uint16_t combo_index, bool pressed)`
|
||||
|
||||
|
||||
## Core Changes :id=core-changes
|
||||
## Core Changes {#core-changes}
|
||||
|
||||
### Fixes :id=core-fixes
|
||||
### Fixes {#core-fixes}
|
||||
|
||||
* Mousekeys: scrolling acceleration is no longer coupled to mouse movement acceleration ([#9174](https://github.com/qmk/qmk_firmware/pull/9174))
|
||||
* Keymap Extras: correctly assign Question Mark in Czech layout ([#9987](https://github.com/qmk/qmk_firmware/pull/9987))
|
||||
|
||||
### Additions and Enhancements :id=core-additions
|
||||
### Additions and Enhancements {#core-additions}
|
||||
|
||||
* allow for WS2812 PWM to work on DMAMUX-capable devices ([#9471](https://github.com/qmk/qmk_firmware/pull/9471))
|
||||
* Newer STM32 MCUs have a DMAMUX peripheral, which allows mapping of DMAs to different DMA streams, rather than hard-defining the target streams in silicon.
|
||||
@ -109,7 +109,7 @@ Any fork that uses `process_combo_event` needs to update the function's first ar
|
||||
* The K-Type has been refactored to use QMK's native matrix scanning routine, and now has partial support for the RGB Matrix feature.
|
||||
* Joysticks can now be used without defining analog pins ([#10169](https://github.com/qmk/qmk_firmware/pull/10169))
|
||||
|
||||
### Clean-ups and Optimizations :id=core-optimizations
|
||||
### Clean-ups and Optimizations {#core-optimizations}
|
||||
|
||||
* iWRAP protocol removed ([#9284](https://github.com/qmk/qmk_firmware/pull/9284))
|
||||
* work begun for consolidation of ChibiOS platform files ([#8327](https://github.com/qmk/qmk_firmware/pull/8327) and [#9315](https://github.com/qmk/qmk_firmware/pull/9315))
|
||||
@ -140,7 +140,7 @@ Any fork that uses `process_combo_event` needs to update the function's first ar
|
||||
* remove support for Adafruit EZ Key Bluetooth controller ([#10103](https://github.com/qmk/qmk_firmware/pull/10103))
|
||||
|
||||
|
||||
## QMK Infrastructure and Internals :id=qmk-internals
|
||||
## QMK Infrastructure and Internals {#qmk-internals}
|
||||
|
||||
* Attempt to fix CI for non-master branches. ([#9308](https://github.com/qmk/qmk_firmware/pull/9308))
|
||||
* Actually fetch the branch we're attempting to compare against.
|
||||
|
@ -3,9 +3,9 @@
|
||||
Four times a year QMK runs a process for merging Breaking Changes. A Breaking Change is any change which modifies how QMK behaves in a way that is incompatible or potentially dangerous. We limit these changes to 4 times per year so that users can have confidence that updating their QMK tree will not break their keymaps.
|
||||
|
||||
|
||||
## Changes Requiring User Action :id=changes-requiring-user-action
|
||||
## Changes Requiring User Action {#changes-requiring-user-action}
|
||||
|
||||
### Relocated Keyboards :id=relocated-keyboards
|
||||
### Relocated Keyboards {#relocated-keyboards}
|
||||
|
||||
#### Reduce Helix keyboard build variation ([#8669](https://github.com/qmk/qmk_firmware/pull/8669))
|
||||
|
||||
@ -88,21 +88,21 @@ The Valor and Dawn60 keyboards by Xelus22 both now require their revisions to be
|
||||
| xelus/valor | xelus/valor/rev1 |
|
||||
|
||||
|
||||
### Updated Keyboard Codebases :id=keyboard-updates
|
||||
### Updated Keyboard Codebases {#keyboard-updates}
|
||||
|
||||
#### AEboards EXT65 Refactor ([#10820](https://github.com/qmk/qmk_firmware/pull/10820))
|
||||
|
||||
The EXT65 codebase has been reworked so keymaps can be used with either revision.
|
||||
|
||||
|
||||
## Core Changes :id=core-changes
|
||||
## Core Changes {#core-changes}
|
||||
|
||||
### Fixes :id=core-fixes
|
||||
### Fixes {#core-fixes}
|
||||
|
||||
* Reconnect the USB if users wake up a computer from the keyboard to restore the USB state ([#10088](https://github.com/qmk/qmk_firmware/pull/10088))
|
||||
* Fix cursor position bug in oled_write_raw functions ([#10800](https://github.com/qmk/qmk_firmware/pull/10800))
|
||||
|
||||
### Additions and Enhancements :id=core-additions
|
||||
### Additions and Enhancements {#core-additions}
|
||||
|
||||
* Allow MATRIX_ROWS to be greater than 32 ([#10183](https://github.com/qmk/qmk_firmware/pull/10183))
|
||||
* Add support for soft serial to ATmega32U2 ([#10204](https://github.com/qmk/qmk_firmware/pull/10204))
|
||||
@ -119,7 +119,7 @@ The EXT65 codebase has been reworked so keymaps can be used with either revision
|
||||
* Add AT90USB support for serial.c ([#10706](https://github.com/qmk/qmk_firmware/pull/10706))
|
||||
* Auto shift: support repeats and early registration (#9826)
|
||||
|
||||
### Clean-ups and Optimizations :id=core-optimizations
|
||||
### Clean-ups and Optimizations {#core-optimizations}
|
||||
|
||||
* Haptic and solenoid cleanup ([#9700](https://github.com/qmk/qmk_firmware/pull/9700))
|
||||
* XD75 cleanup ([#10524](https://github.com/qmk/qmk_firmware/pull/10524))
|
||||
@ -129,7 +129,7 @@ The EXT65 codebase has been reworked so keymaps can be used with either revision
|
||||
* Remove references to HD44780 ([#10735](https://github.com/qmk/qmk_firmware/pull/10735))
|
||||
|
||||
|
||||
## QMK Infrastructure and Internals :id=qmk-internals
|
||||
## QMK Infrastructure and Internals {#qmk-internals}
|
||||
|
||||
* Add ability to build a subset of all keyboards based on platform. ([#10420](https://github.com/qmk/qmk_firmware/pull/10420))
|
||||
* Initialise EEPROM drivers at startup, instead of upon first execution ([#10438](https://github.com/qmk/qmk_firmware/pull/10438))
|
||||
|
@ -1,30 +1,30 @@
|
||||
# QMK Breaking Changes - 2021 May 29 Changelog
|
||||
|
||||
## Notable Changes :id=notable-changes
|
||||
## Notable Changes {#notable-changes}
|
||||
|
||||
### RGB Matrix support for split common ([#11055](https://github.com/qmk/qmk_firmware/pull/11055)) :id=rgb-matrix-split-common
|
||||
### RGB Matrix support for split common ([#11055](https://github.com/qmk/qmk_firmware/pull/11055)) {#rgb-matrix-split-common}
|
||||
|
||||
Split boards can now use RGB Matrix without defining a custom matrix.
|
||||
|
||||
### Teensy 3.6 support ([#12258](https://github.com/qmk/qmk_firmware/pull/12258)) :id=teensy-3-6-support
|
||||
### Teensy 3.6 support ([#12258](https://github.com/qmk/qmk_firmware/pull/12258)) {#teensy-3-6-support}
|
||||
|
||||
Added support for MK66F18 (Teensy 3.6) microcontroller.
|
||||
|
||||
### New command: qmk console ([#12828](https://github.com/qmk/qmk_firmware/pull/12828)) :id=new-command-qmk-console
|
||||
### New command: qmk console ([#12828](https://github.com/qmk/qmk_firmware/pull/12828)) {#new-command-qmk-console}
|
||||
|
||||
A new `qmk console` command has been added for attaching to your keyboard's console. It operates similiarly to QMK Toolbox by allowing you to connect to one or more keyboard consoles to display debugging messages.
|
||||
|
||||
### Improved command: qmk config :id=improve-command-qmk-config
|
||||
### Improved command: qmk config {#improve-command-qmk-config}
|
||||
|
||||
We've updated the `qmk config` command to show only the configuration items you have actually set. You can now display (almost) all of the available configuration options, along with their default values, using `qmk config -a`.
|
||||
|
||||
### LED Matrix Improvements ([#12509](https://github.com/qmk/qmk_firmware/pull/12509), [#12580](https://github.com/qmk/qmk_firmware/pull/12580), [#12588](https://github.com/qmk/qmk_firmware/pull/12588), [#12633](https://github.com/qmk/qmk_firmware/pull/12633), [#12651](https://github.com/qmk/qmk_firmware/pull/12651), [#12685](https://github.com/qmk/qmk_firmware/pull/12685)) :id=led-matrix-improvements
|
||||
### LED Matrix Improvements ([#12509](https://github.com/qmk/qmk_firmware/pull/12509), [#12580](https://github.com/qmk/qmk_firmware/pull/12580), [#12588](https://github.com/qmk/qmk_firmware/pull/12588), [#12633](https://github.com/qmk/qmk_firmware/pull/12633), [#12651](https://github.com/qmk/qmk_firmware/pull/12651), [#12685](https://github.com/qmk/qmk_firmware/pull/12685)) {#led-matrix-improvements}
|
||||
|
||||
LED Matrix has been improved with effects, CIE1931 curves, and a task system.
|
||||
|
||||
## Changes Requiring User Action :id=changes-requiring-user-action
|
||||
## Changes Requiring User Action {#changes-requiring-user-action}
|
||||
|
||||
### Updated Keyboard Codebases :id=updated-keyboard-codebases
|
||||
### Updated Keyboard Codebases {#updated-keyboard-codebases}
|
||||
|
||||
* Durgod keyboard refactor in preparation for adding additional durgod keyboards ([#11978](https://github.com/qmk/qmk_firmware/pull/11978))
|
||||
* Updated Function96 with V2 files and removed chconf.h and halconf.h ([#12613](https://github.com/qmk/qmk_firmware/pull/12613))
|
||||
@ -52,7 +52,7 @@ The codebase for the [Durgod K320](https://github.com/qmk/qmk_firmware/tree/0.13
|
||||
|
||||
Additionally, the `crkbd/rev1/legacy` keyboard has been removed.
|
||||
|
||||
### Bootmagic Deprecation and Refactor ([#12172](https://github.com/qmk/qmk_firmware/pull/12172)) :id=bootmagic-deprecation-and-refactor
|
||||
### Bootmagic Deprecation and Refactor ([#12172](https://github.com/qmk/qmk_firmware/pull/12172)) {#bootmagic-deprecation-and-refactor}
|
||||
|
||||
QMK has decided to deprecate the full Bootmagic feature and leave Bootmagic Lite as the only remaining option.
|
||||
|
||||
@ -68,11 +68,11 @@ This is the current planned roadmap for the behavior of `BOOTMAGIC_ENABLE`:
|
||||
- From 2021 Aug 28, `BOOTMAGIC_ENABLE` must be either `yes`, `lite`, or `no` – setting `BOOTMAGIC_ENABLE = full` will cause compilation to fail.
|
||||
- From 2021 Nov 27, `BOOTMAGIC_ENABLE` must be either `yes` or `no` – setting `BOOTMAGIC_ENABLE = lite` will cause compilation to fail.
|
||||
|
||||
### Removal of LAYOUT_kc ([#12160](https://github.com/qmk/qmk_firmware/pull/12160)) :id=removal-of-layout-kc
|
||||
### Removal of LAYOUT_kc ([#12160](https://github.com/qmk/qmk_firmware/pull/12160)) {#removal-of-layout-kc}
|
||||
|
||||
We've removed support for `LAYOUT_kc` macros, if your keymap uses one you will need to update it use a regular `LAYOUT` macro.
|
||||
|
||||
### Encoder callbacks are now boolean ([#12805](https://github.com/qmk/qmk_firmware/pull/12805), [#12985](https://github.com/qmk/qmk_firmware/pull/12985)) :id=encoder-callback-boolean
|
||||
### Encoder callbacks are now boolean ([#12805](https://github.com/qmk/qmk_firmware/pull/12805), [#12985](https://github.com/qmk/qmk_firmware/pull/12985)) {#encoder-callback-boolean}
|
||||
|
||||
To allow for keyboards to override (or not) keymap level code the `encoder_update_kb` function has been changed from `void` to `bool`. You will need to update your function definition to reflect this and ensure that you return a `true` or `false` value.
|
||||
|
||||
@ -127,9 +127,9 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
|
||||
}
|
||||
```
|
||||
|
||||
## Core Changes :id=core-changes
|
||||
## Core Changes {#core-changes}
|
||||
|
||||
### Fixes :id=core-fixes
|
||||
### Fixes {#core-fixes}
|
||||
|
||||
* Fix connection issue in split keyboards when slave and OLED display are connected via I2C (fixes #9335) ([#11487](https://github.com/qmk/qmk_firmware/pull/11487))
|
||||
* Terrazzo: Fix wrong LED Matrix function names ([#12561](https://github.com/qmk/qmk_firmware/pull/12561))
|
||||
@ -147,7 +147,7 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
|
||||
* [Keyboard] Fix Terrazzo build failure ([#12977](https://github.com/qmk/qmk_firmware/pull/12977))
|
||||
* Do not hard set config in CPTC files ([#11864](https://github.com/qmk/qmk_firmware/pull/11864))
|
||||
|
||||
### Additions and Enhancements :id=core-additions
|
||||
### Additions and Enhancements {#core-additions}
|
||||
|
||||
* ARM - Refactor SLEEP_LED to support more platforms ([#8403](https://github.com/qmk/qmk_firmware/pull/8403))
|
||||
* Add ability to toggle One Shot functionality ([#4198](https://github.com/qmk/qmk_firmware/pull/4198))
|
||||
@ -193,7 +193,7 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
|
||||
* Backlight: add defines for default level and breathing state ([#12560](https://github.com/qmk/qmk_firmware/pull/12560), [#13024](https://github.com/qmk/qmk_firmware/pull/13024))
|
||||
* Add dire message about LUFA mass storage bootloader ([#13014](https://github.com/qmk/qmk_firmware/pull/13014))
|
||||
|
||||
### Clean-ups and Optimizations :id=core-optimizations
|
||||
### Clean-ups and Optimizations {#core-optimizations}
|
||||
|
||||
* Overhaul bootmagic logic to have single entrypoint ([#8532](https://github.com/qmk/qmk_firmware/pull/8532))
|
||||
* Refactor of USB code within split_common ([#11890](https://github.com/qmk/qmk_firmware/pull/11890))
|
||||
@ -218,7 +218,7 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
|
||||
* Deprecate `send_unicode_hex_string()` ([#12602](https://github.com/qmk/qmk_firmware/pull/12602))
|
||||
* [Keyboard] Remove redundant legacy and common headers for crkbd ([#13023](https://github.com/qmk/qmk_firmware/pull/13023))
|
||||
|
||||
### QMK Infrastructure and Internals :id=qmk-internals
|
||||
### QMK Infrastructure and Internals {#qmk-internals}
|
||||
|
||||
* trivial change to trigger api update ([`b15288fb87`](https://github.com/qmk/qmk_firmware/commit/b15288fb87))
|
||||
* fix some references to bin/qmk that slipped in ([#12832](https://github.com/qmk/qmk_firmware/pull/12832))
|
||||
|
@ -1,14 +1,14 @@
|
||||
# QMK Breaking Changes - 2021 August 28 Changelog
|
||||
|
||||
## Notable Features :id=notable-features
|
||||
## Notable Features {#notable-features}
|
||||
|
||||
### Combo processing improvements ([#8591](https://github.com/qmk/qmk_firmware/pull/8591)) :id=combo-processing-improvements
|
||||
### Combo processing improvements ([#8591](https://github.com/qmk/qmk_firmware/pull/8591)) {#combo-processing-improvements}
|
||||
|
||||
Combo processing has been reordered with respect to keypress handling, allowing for much better compatibility with mod taps.
|
||||
|
||||
It is also now possible to define combos that have keys overlapping with other combos, triggering only one. For example, a combo of `A`, `B` can coexist with a longer combo of `A`, `B`, `C` -- previous functionality would trigger both combos if all three keys were pressed.
|
||||
|
||||
### Key Overrides ([#11422](https://github.com/qmk/qmk_firmware/pull/11422)) :id=key-overrides
|
||||
### Key Overrides ([#11422](https://github.com/qmk/qmk_firmware/pull/11422)) {#key-overrides}
|
||||
|
||||
QMK now has a new feature: [key overrides](https://docs.qmk.fm/#/feature_key_overrides). This feature allows for overriding the output of key combinations involving modifiers. As an example, pressing <kbd>Shift+2</kbd> normally results in an <kbd>@</kbd> on US-ANSI keyboard layouts -- the new key overrides allow for adding similar functionality, but for any <kbd>modifier + key</kbd> press.
|
||||
|
||||
@ -20,9 +20,9 @@ There's far more to describe that what lives in this changelog, so head over to
|
||||
|
||||
QMK gained the ability to pretend to be a digitizer device -- much like a tablet device. A mouse uses delta-coordinates -- move up, move right -- but a digitizer works with absolute coordinates -- top left, bottom right.
|
||||
|
||||
## Changes Requiring User Action :id=changes-requiring-user-action
|
||||
## Changes Requiring User Action {#changes-requiring-user-action}
|
||||
|
||||
### Updated Keyboard Codebases :id=updated-keyboard-codebases
|
||||
### Updated Keyboard Codebases {#updated-keyboard-codebases}
|
||||
|
||||
The following keyboards have had their source moved within QMK:
|
||||
|
||||
@ -69,7 +69,7 @@ xd84pro | xiudi/xd84pro
|
||||
xd87 | xiudi/xd87
|
||||
xd96 | xiudi/xd96
|
||||
|
||||
### Bootmagic Full Removal ([#13846](https://github.com/qmk/qmk_firmware/pull/13846)) :id=bootmagic-full-removal
|
||||
### Bootmagic Full Removal ([#13846](https://github.com/qmk/qmk_firmware/pull/13846)) {#bootmagic-full-removal}
|
||||
|
||||
As noted during last breaking changes cycle, QMK has decided to deprecate the full Bootmagic feature and leave Bootmagic Lite as the only remaining option.
|
||||
|
||||
@ -85,7 +85,7 @@ This is the current roadmap for the behavior of `BOOTMAGIC_ENABLE`:
|
||||
- (now) From 2021 Aug 28, `BOOTMAGIC_ENABLE` must be either `yes`, `lite`, or `no` – setting `BOOTMAGIC_ENABLE = full` will cause compilation to fail.
|
||||
- (next) From 2021 Nov 27, `BOOTMAGIC_ENABLE` must be either `yes` or `no` – setting `BOOTMAGIC_ENABLE = lite` will cause compilation to fail.
|
||||
|
||||
### DIP switch callbacks are now boolean ([#13399](https://github.com/qmk/qmk_firmware/pull/13399)) :id=dip-switch-boolean
|
||||
### DIP switch callbacks are now boolean ([#13399](https://github.com/qmk/qmk_firmware/pull/13399)) {#dip-switch-boolean}
|
||||
|
||||
To match the encoder change last breaking changes cycle, DIP switch callbacks now return `bool`, too.
|
||||
|
||||
@ -149,9 +149,9 @@ bool dip_switch_update_mask_user(uint32_t state) {
|
||||
}
|
||||
```
|
||||
|
||||
## Notable core changes :id=notable-core
|
||||
## Notable core changes {#notable-core}
|
||||
|
||||
### Split transport improvements :id=split-transport-improvements
|
||||
### Split transport improvements {#split-transport-improvements}
|
||||
|
||||
Split keyboards gained a significant amount of improvements during this breaking changes cycle, specifically:
|
||||
|
||||
@ -160,9 +160,13 @@ Split keyboards gained a significant amount of improvements during this breaking
|
||||
* Make solo half of split keyboards (more) usable. ([#13523](https://github.com/qmk/qmk_firmware/pull/13523)) -- allows the slave to be disconnected, enabling one-handed use.
|
||||
* Switch split_common to CRC subsystem ([#13418](https://github.com/qmk/qmk_firmware/pull/13418))
|
||||
|
||||
!> If you're updating your split keyboard, you will need to flash both sides of the split with the your firmware.
|
||||
:::caution
|
||||
|
||||
### Teensy 4.x support ([#13056](https://github.com/qmk/qmk_firmware/pull/13056), [#13076](https://github.com/qmk/qmk_firmware/pull/13076), [#13077](https://github.com/qmk/qmk_firmware/pull/13077)) :id=teensy-4-x-support
|
||||
If you're updating your split keyboard, you will need to flash both sides of the split with the your firmware.
|
||||
|
||||
:::
|
||||
|
||||
### Teensy 4.x support ([#13056](https://github.com/qmk/qmk_firmware/pull/13056), [#13076](https://github.com/qmk/qmk_firmware/pull/13076), [#13077](https://github.com/qmk/qmk_firmware/pull/13077)) {#teensy-4-x-support}
|
||||
|
||||
Updated ChibiOS and ChibiOS-Contrib, which brought in support for Teensy 4.x dev boards, running NXP i.MX1062.
|
||||
|
||||
@ -243,7 +247,7 @@ We've added dozens of new keys to `info.json` so that you can configure more tha
|
||||
* `usb.force_nkro`, `usb.max_power`, `usb.no_startup_check`, `usb.polling_interval`, `usb.shared_endpoint.keyboard`, `usb.shared_endpoint.mouse`, `usb.suspend_wakeup_delay`, `usb.wait_for`
|
||||
* `qmk.keys_per_scan`, `qmk.tap_keycode_delay`, `qmk.tap_capslock_delay`
|
||||
|
||||
### Codebase restructure and cleanup :id=codebase-restructure
|
||||
### Codebase restructure and cleanup {#codebase-restructure}
|
||||
|
||||
QMK was originally based on TMK, and has grown in size considerably since its first inception. To keep moving things forward, restructure of some of the core areas of the code is needed to support new concepts and new hardware, and progress is happening along those lines:
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# QMK Breaking Changes - 2021 November 27 Changelog
|
||||
|
||||
## 2000 keyboards! :id=qmk-2000th-keyboard
|
||||
## 2000 keyboards! {#qmk-2000th-keyboard}
|
||||
|
||||
QMK had it's 2000th keyboard submitted during this breaking changes cycle.... and it only _just_ made the cut-off!
|
||||
|
||||
@ -11,9 +11,9 @@ QMK had it's 2000th keyboard submitted during this breaking changes cycle.... an
|
||||
|
||||
From the whole QMK team, a major thankyou to the community for embracing QMK as your preferred keyboard firmware!
|
||||
|
||||
## Notable Features :id=notable-features
|
||||
## Notable Features {#notable-features}
|
||||
|
||||
### Expanded Pointing Device support ([#14343](https://github.com/qmk/qmk_firmware/pull/14343)) :id=expanded-pointing-device
|
||||
### Expanded Pointing Device support ([#14343](https://github.com/qmk/qmk_firmware/pull/14343)) {#expanded-pointing-device}
|
||||
|
||||
Pointing device support has been reworked and reimplemented to allow for easier integration of new peripherals.
|
||||
|
||||
@ -33,7 +33,7 @@ QMK now has core-supplied support for the following pointing device peripherals:
|
||||
|
||||
See the new documentation for the [Pointing Device](../feature_pointing_device.md) feature for more information on specific configuration for each driver.
|
||||
|
||||
### Dynamic Tapping Term ([#11036](https://github.com/qmk/qmk_firmware/pull/11036)) :id=dynamic-tapping-term
|
||||
### Dynamic Tapping Term ([#11036](https://github.com/qmk/qmk_firmware/pull/11036)) {#dynamic-tapping-term}
|
||||
|
||||
For people who are starting out with tapping keys, or for people who think tapping keys don't "feel right", it's sometimes quite difficult to determine what duration of tapping term to use to make things seem natural.
|
||||
|
||||
@ -47,7 +47,7 @@ If you're in this stage of discovery, you can now add `DYNAMIC_TAPPING_TERM_ENAB
|
||||
|
||||
Coupled with the use of `qmk console` or QMK Toolbox to show console output from your keyboard, you can tweak the tapping term dynamically in order to narrow down what "feels right" to you. Once you're happy, drop in the resulting number into your keymap's `config.h` and you're good to go!
|
||||
|
||||
### Macros in JSON keymaps ([#14374](https://github.com/qmk/qmk_firmware/pull/14374)) :id=macros-in-keymap-json
|
||||
### Macros in JSON keymaps ([#14374](https://github.com/qmk/qmk_firmware/pull/14374)) {#macros-in-keymap-json}
|
||||
|
||||
You can now define up to 32 macros in your `keymap.json` file, as used by [QMK Configurator](newbs_building_firmware_configurator.md), and `qmk compile`. You can define these macros in a list under the `macros` keyword, like this:
|
||||
|
||||
@ -83,9 +83,9 @@ You can now define up to 32 macros in your `keymap.json` file, as used by [QMK C
|
||||
|
||||
In due course, [QMK Configurator](https://config.qmk.fm/) will pick up support for defining these in its UI, but for now the json is the only way to define macros.
|
||||
|
||||
## Changes Requiring User Action :id=changes-requiring-user-action
|
||||
## Changes Requiring User Action {#changes-requiring-user-action}
|
||||
|
||||
### Updated Keyboard Codebases :id=updated-keyboard-codebases
|
||||
### Updated Keyboard Codebases {#updated-keyboard-codebases}
|
||||
|
||||
The following keyboards have had their source moved within QMK:
|
||||
|
||||
@ -104,13 +104,13 @@ The following keyboards have had their source moved within QMK:
|
||||
| signum/3_0/elitec | signum/3_0 |
|
||||
| tgr/jane | tgr/jane/v2 |
|
||||
|
||||
### Squeezing space out of AVR ([#15243](https://github.com/qmk/qmk_firmware/pull/15243)) :id=squeezing-space-from-avr
|
||||
### Squeezing space out of AVR ([#15243](https://github.com/qmk/qmk_firmware/pull/15243)) {#squeezing-space-from-avr}
|
||||
|
||||
The AVR platform has been problematic for some time, in the sense that it is severely resource-constrained -- this makes life difficult for anyone attempting to add new functionality such as display panels to their keymap code. The illustrious Drashna has contributed some newer documentation on how to attempt to free up some space on AVR-based keyboards that are in short supply.
|
||||
|
||||
Of course, there are much fewer constraints with ARM chips... ;)
|
||||
|
||||
### Require explicit enabling of RGB Matrix modes ([#15018](https://github.com/qmk/qmk_firmware/pull/15018)) :id=explicit-rgb-modes
|
||||
### Require explicit enabling of RGB Matrix modes ([#15018](https://github.com/qmk/qmk_firmware/pull/15018)) {#explicit-rgb-modes}
|
||||
|
||||
Related to the previous section -- RGB Matrix modes have now been made to be opt-in, rather than opt-out. As these animations are now opt-in, you may find that your keyboard no longer has all the RGB modes you're expecting -- you may need to configure and recompile your firmware and enable your animations of choice... with any luck they'll still fit in the space available.
|
||||
|
||||
@ -118,7 +118,7 @@ Most keyboards keep their original functionality, but over time the QMK maintain
|
||||
|
||||
The full list of configurables to turn specific animations back on can be found at on the [RGB Matrix documentation](feature_rgb_matrix.md#rgb-matrix-effects) page.
|
||||
|
||||
### OLED task refactoring ([#14864](https://github.com/qmk/qmk_firmware/pull/14864)) :id=oled-task-refactor
|
||||
### OLED task refactoring ([#14864](https://github.com/qmk/qmk_firmware/pull/14864)) {#oled-task-refactor}
|
||||
|
||||
OLED display code was traditionally difficult to override in keymaps as they did not follow the standard pattern of `bool *_kb()` deferring to `bool *_user()` functions, allowing signalling to the higher level that processing had already been done.
|
||||
|
||||
@ -152,7 +152,7 @@ bool oled_task_kb(void) {
|
||||
}
|
||||
```
|
||||
|
||||
### Bootmagic Full Removal ([#15002](https://github.com/qmk/qmk_firmware/pull/15002)) :id=bootmagic-full-removal
|
||||
### Bootmagic Full Removal ([#15002](https://github.com/qmk/qmk_firmware/pull/15002)) {#bootmagic-full-removal}
|
||||
|
||||
As noted during previous breaking changes cycles, QMK decided to deprecate the full Bootmagic feature and leave Bootmagic Lite as the only remaining option.
|
||||
|
||||
@ -170,13 +170,13 @@ This is the historical timeline for the behavior of `BOOTMAGIC_ENABLE`:
|
||||
- (done) From 2021 Aug 28, `BOOTMAGIC_ENABLE` must be either `yes`, `lite`, or `no` – setting `BOOTMAGIC_ENABLE = full` will cause compilation to fail.
|
||||
- (now) From 2021 Nov 27, `BOOTMAGIC_ENABLE` must be either `yes` or `no` – setting `BOOTMAGIC_ENABLE = lite` will cause compilation to fail.
|
||||
|
||||
### Remove QWIIC_DRIVERS ([#14174](https://github.com/qmk/qmk_firmware/pull/14174)) :id=remove-qwiic
|
||||
### Remove QWIIC_DRIVERS ([#14174](https://github.com/qmk/qmk_firmware/pull/14174)) {#remove-qwiic}
|
||||
|
||||
Due to minimal QWIIC adoption and other options for similar functionality, the QWIIC drivers were removed from QMK. Existing OLED usages have been migrated across to the normal QMK OLED driver instead.
|
||||
|
||||
## Notable core changes :id=notable-core
|
||||
## Notable core changes {#notable-core}
|
||||
|
||||
### New MCU Support :id=new-mcu-support
|
||||
### New MCU Support {#new-mcu-support}
|
||||
|
||||
QMK firmware picked up support for a handful of new MCU families, potentially making it a bit easier to source components.
|
||||
|
||||
@ -187,7 +187,7 @@ QMK firmware is now no longer limited to AVR and ARM - it also picked up support
|
||||
* Westberrytech pr ([#14422](https://github.com/qmk/qmk_firmware/pull/14422))
|
||||
* Initial pass of F405 support ([#14584](https://github.com/qmk/qmk_firmware/pull/14584))
|
||||
|
||||
### EEPROM Changes :id=eeprom-changes
|
||||
### EEPROM Changes {#eeprom-changes}
|
||||
|
||||
There were a few EEPROM-related changes that landed during this breaking changes cycle, most prominently the long-awaited ability for the Drop boards to gain persistent storage. Any users of the Drop CTRL or Drop ALT should update QMK Toolbox as well -- coupled with a QMK firmware update settings should now be saved.
|
||||
|
||||
@ -197,7 +197,7 @@ There were a few EEPROM-related changes that landed during this breaking changes
|
||||
* Further tidy up of STM32 eeprom emulation ([#14591](https://github.com/qmk/qmk_firmware/pull/14591))
|
||||
* Enable eeprom with F401xE ld ([#14752](https://github.com/qmk/qmk_firmware/pull/14752))
|
||||
|
||||
### Compilation Database :id=compile-commands
|
||||
### Compilation Database {#compile-commands}
|
||||
|
||||
A clang-compatible compilation database generator has been added as an option in order to help development environments such as Visual Studio Code.
|
||||
|
||||
@ -208,7 +208,7 @@ Do note that switching keyboards will require re-generation of this file.
|
||||
* New CLI subcommand to create clang-compatible compilation database (`compile_commands.json`) ([#14370](https://github.com/qmk/qmk_firmware/pull/14370))
|
||||
* compiledb: query include paths from gcc directly. ([#14462](https://github.com/qmk/qmk_firmware/pull/14462))
|
||||
|
||||
### Codebase restructure and cleanup :id=codebase-restructure
|
||||
### Codebase restructure and cleanup {#codebase-restructure}
|
||||
|
||||
QMK continues on its restructuring journey, in order to make it easier to integrate newer features and add support for new hardware. This quarter's batch of changes include:
|
||||
|
||||
|