Copy disabled (too large)
Download .txt
Showing preview only (84,859K chars total). Download the full file to get everything.
Repository: sekigon-gonnoc/qmk_firmware
Branch: dev/ble_micro_pro
Commit: 5fb8c7ea2f11
Files: 27595
Total size: 73.6 MB
Directory structure:
gitextract_fia8uxcq/
├── .clang-format
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── config.yml
│ │ ├── feature_request.md
│ │ ├── other_issues.md
│ │ └── zzz_blank.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── labeler.yml
│ ├── stale.yml
│ └── workflows/
│ ├── api.yml
│ ├── auto_tag.yaml
│ ├── build_bmp_default.yml
│ ├── cli.yml
│ ├── develop_api.yml
│ ├── develop_update.yml
│ ├── docs.yml
│ ├── format.yaml
│ ├── labeler.yml
│ └── lint.yml
├── .gitignore
├── .gitmodules
├── .vscode/
│ ├── extensions.json
│ └── settings.json
├── Dockerfile
├── Doxyfile
├── LICENSE
├── Makefile
├── Vagrantfile
├── api_data/
│ ├── _config.yml
│ └── readme.md
├── bin/
│ └── qmk
├── book.json
├── bootloader.mk
├── build_full_test.mk
├── build_json.mk
├── build_keyboard.mk
├── build_layout.mk
├── build_test.mk
├── common.mk
├── common_features.mk
├── data/
│ ├── mappings/
│ │ ├── info_config.json
│ │ ├── info_rules.json
│ │ └── keyboard_aliases.json
│ ├── schemas/
│ │ ├── api_keyboard.jsonschema
│ │ ├── definitions.jsonschema
│ │ ├── false.jsonschema
│ │ ├── keyboard.jsonschema
│ │ ├── keymap.jsonschema
│ │ └── true.jsonschema
│ └── templates/
│ ├── avr/
│ │ ├── config.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── base/
│ │ ├── info.json
│ │ ├── keyboard.c
│ │ ├── keyboard.h
│ │ └── keymaps/
│ │ └── default/
│ │ ├── keymap.c
│ │ └── readme.md
│ ├── nrf/
│ │ ├── config.h
│ │ ├── ld/
│ │ │ └── nrf52840_ao.ld
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ └── template.c
│ └── ps2avrgb/
│ ├── config.h
│ ├── readme.md
│ └── rules.mk
├── disable_features.mk
├── docs/
│ ├── .nojekyll
│ ├── CNAME
│ ├── ChangeLog/
│ │ ├── 20190830.md
│ │ ├── 20200229.md
│ │ ├── 20200530.md
│ │ ├── 20200829.md
│ │ ├── 20201128.md
│ │ ├── 20210227.md
│ │ ├── 20210529.md
│ │ └── 20210828.md
│ ├── README.md
│ ├── _langs.md
│ ├── _summary.md
│ ├── adc_driver.md
│ ├── api_development_environment.md
│ ├── api_development_overview.md
│ ├── api_docs.md
│ ├── api_overview.md
│ ├── arm_debugging.md
│ ├── audio_driver.md
│ ├── breaking_changes.md
│ ├── breaking_changes_history.md
│ ├── breaking_changes_instructions.md
│ ├── chibios_upgrade_instructions.md
│ ├── cli.md
│ ├── cli_commands.md
│ ├── cli_configuration.md
│ ├── cli_development.md
│ ├── cli_tab_complete.md
│ ├── coding_conventions_c.md
│ ├── coding_conventions_python.md
│ ├── compatible_microcontrollers.md
│ ├── config_options.md
│ ├── configurator_architecture.md
│ ├── configurator_default_keymaps.md
│ ├── configurator_diagram.drawio
│ ├── configurator_step_by_step.md
│ ├── configurator_troubleshooting.md
│ ├── contributing.md
│ ├── custom_matrix.md
│ ├── custom_quantum_functions.md
│ ├── data_driven_config.md
│ ├── de/
│ │ ├── README.md
│ │ ├── _summary.md
│ │ ├── cli.md
│ │ ├── driver_installation_zadig.md
│ │ ├── newbs.md
│ │ ├── newbs_building_firmware.md
│ │ ├── newbs_flashing.md
│ │ ├── newbs_getting_started.md
│ │ ├── newbs_learn_more_resources.md
│ │ └── newbs_testing_debugging.md
│ ├── documentation_best_practices.md
│ ├── documentation_templates.md
│ ├── driver_installation_zadig.md
│ ├── easy_maker.md
│ ├── eeprom_driver.md
│ ├── es/
│ │ ├── README.md
│ │ ├── _summary.md
│ │ ├── hardware.md
│ │ ├── hardware_avr.md
│ │ ├── hardware_drivers.md
│ │ ├── hardware_keyboard_guidelines.md
│ │ ├── newbs.md
│ │ ├── newbs_best_practices.md
│ │ ├── newbs_building_firmware.md
│ │ ├── newbs_building_firmware_configurator.md
│ │ ├── newbs_flashing.md
│ │ ├── newbs_getting_started.md
│ │ ├── newbs_learn_more_resources.md
│ │ └── newbs_testing_debugging.md
│ ├── faq_build.md
│ ├── faq_debug.md
│ ├── faq_general.md
│ ├── faq_keymap.md
│ ├── faq_misc.md
│ ├── feature_advanced_keycodes.md
│ ├── feature_audio.md
│ ├── feature_auto_shift.md
│ ├── feature_backlight.md
│ ├── feature_bluetooth.md
│ ├── feature_bootmagic.md
│ ├── feature_combo.md
│ ├── feature_command.md
│ ├── feature_debounce_type.md
│ ├── feature_digitizer.md
│ ├── feature_dip_switch.md
│ ├── feature_dynamic_macros.md
│ ├── feature_encoders.md
│ ├── feature_grave_esc.md
│ ├── feature_haptic_feedback.md
│ ├── feature_hd44780.md
│ ├── feature_joystick.md
│ ├── feature_key_lock.md
│ ├── feature_key_overrides.md
│ ├── feature_layers.md
│ ├── feature_layouts.md
│ ├── feature_leader_key.md
│ ├── feature_led_indicators.md
│ ├── feature_led_matrix.md
│ ├── feature_macros.md
│ ├── feature_midi.md
│ ├── feature_mouse_keys.md
│ ├── feature_oled_driver.md
│ ├── feature_pointing_device.md
│ ├── feature_ps2_mouse.md
│ ├── feature_rawhid.md
│ ├── feature_rgb_matrix.md
│ ├── feature_rgblight.md
│ ├── feature_sequencer.md
│ ├── feature_space_cadet.md
│ ├── feature_split_keyboard.md
│ ├── feature_st7565.md
│ ├── feature_stenography.md
│ ├── feature_swap_hands.md
│ ├── feature_tap_dance.md
│ ├── feature_terminal.md
│ ├── feature_thermal_printer.md
│ ├── feature_unicode.md
│ ├── feature_userspace.md
│ ├── feature_velocikey.md
│ ├── feature_wpm.md
│ ├── flashing.md
│ ├── flashing_bootloadhid.md
│ ├── fr-fr/
│ │ ├── ChangeLog/
│ │ │ └── 20190830.md
│ │ ├── README.md
│ │ ├── _summary.md
│ │ ├── breaking_changes.md
│ │ ├── cli.md
│ │ ├── cli_configuration.md
│ │ ├── contributing.md
│ │ ├── driver_installation_zadig.md
│ │ ├── faq.md
│ │ ├── faq_build.md
│ │ ├── faq_debug.md
│ │ ├── faq_general.md
│ │ ├── faq_keymap.md
│ │ ├── flashing.md
│ │ ├── getting_started_getting_help.md
│ │ ├── getting_started_github.md
│ │ ├── getting_started_introduction.md
│ │ ├── newbs.md
│ │ ├── newbs_best_practices.md
│ │ ├── newbs_building_firmware.md
│ │ ├── newbs_building_firmware_configurator.md
│ │ ├── newbs_flashing.md
│ │ ├── newbs_getting_started.md
│ │ ├── newbs_learn_more_resources.md
│ │ └── newbs_testing_debugging.md
│ ├── fuse.txt
│ ├── getting_started_docker.md
│ ├── getting_started_github.md
│ ├── getting_started_introduction.md
│ ├── getting_started_make_guide.md
│ ├── getting_started_vagrant.md
│ ├── hand_wire.md
│ ├── hardware_avr.md
│ ├── hardware_drivers.md
│ ├── hardware_keyboard_guidelines.md
│ ├── he-il/
│ │ ├── README.md
│ │ ├── _summary.md
│ │ ├── documentation_best_practices.md
│ │ ├── faq.md
│ │ ├── faq_general.md
│ │ ├── getting_started_getting_help.md
│ │ ├── getting_started_github.md
│ │ ├── getting_started_introduction.md
│ │ ├── hardware.md
│ │ ├── newbs_learn_more_resources.md
│ │ ├── proton_c_conversion.md
│ │ └── quantum_keycodes.md
│ ├── how_a_matrix_works.md
│ ├── how_keyboards_work.md
│ ├── i2c_driver.md
│ ├── index.html
│ ├── internals_defines.md
│ ├── internals_gpio_control.md
│ ├── internals_input_callback_reg.md
│ ├── internals_midi_device.md
│ ├── internals_midi_device_setup_process.md
│ ├── internals_midi_util.md
│ ├── internals_send_functions.md
│ ├── internals_sysex_tools.md
│ ├── isp_flashing_guide.md
│ ├── ja/
│ │ ├── README.md
│ │ ├── _summary.md
│ │ ├── adc_driver.md
│ │ ├── api_development_environment.md
│ │ ├── api_development_overview.md
│ │ ├── api_docs.md
│ │ ├── api_overview.md
│ │ ├── arm_debugging.md
│ │ ├── breaking_changes.md
│ │ ├── breaking_changes_instructions.md
│ │ ├── cli.md
│ │ ├── cli_commands.md
│ │ ├── cli_configuration.md
│ │ ├── cli_development.md
│ │ ├── coding_conventions_c.md
│ │ ├── coding_conventions_python.md
│ │ ├── compatible_microcontrollers.md
│ │ ├── config_options.md
│ │ ├── configurator_step_by_step.md
│ │ ├── configurator_troubleshooting.md
│ │ ├── contributing.md
│ │ ├── custom_matrix.md
│ │ ├── custom_quantum_functions.md
│ │ ├── data_driven_config.md
│ │ ├── documentation_best_practices.md
│ │ ├── documentation_templates.md
│ │ ├── driver_installation_zadig.md
│ │ ├── faq_build.md
│ │ ├── faq_debug.md
│ │ ├── faq_general.md
│ │ ├── faq_keymap.md
│ │ ├── faq_misc.md
│ │ ├── feature_advanced_keycodes.md
│ │ ├── feature_audio.md
│ │ ├── feature_auto_shift.md
│ │ ├── feature_backlight.md
│ │ ├── feature_bluetooth.md
│ │ ├── feature_bootmagic.md
│ │ ├── feature_combo.md
│ │ ├── feature_command.md
│ │ ├── feature_debounce_type.md
│ │ ├── feature_dip_switch.md
│ │ ├── feature_dynamic_macros.md
│ │ ├── feature_encoders.md
│ │ ├── feature_grave_esc.md
│ │ ├── feature_haptic_feedback.md
│ │ ├── feature_hd44780.md
│ │ ├── feature_key_lock.md
│ │ ├── feature_layers.md
│ │ ├── feature_layouts.md
│ │ ├── feature_leader_key.md
│ │ ├── feature_led_indicators.md
│ │ ├── feature_led_matrix.md
│ │ ├── feature_macros.md
│ │ ├── feature_mouse_keys.md
│ │ ├── feature_pointing_device.md
│ │ ├── feature_ps2_mouse.md
│ │ ├── feature_rawhid.md
│ │ ├── feature_split_keyboard.md
│ │ ├── feature_stenography.md
│ │ ├── feature_swap_hands.md
│ │ ├── feature_tap_dance.md
│ │ ├── feature_terminal.md
│ │ ├── feature_thermal_printer.md
│ │ ├── feature_unicode.md
│ │ ├── feature_userspace.md
│ │ ├── feature_velocikey.md
│ │ ├── feature_wpm.md
│ │ ├── flashing.md
│ │ ├── flashing_bootloadhid.md
│ │ ├── getting_started_docker.md
│ │ ├── getting_started_github.md
│ │ ├── getting_started_introduction.md
│ │ ├── getting_started_make_guide.md
│ │ ├── getting_started_vagrant.md
│ │ ├── hardware_avr.md
│ │ ├── hardware_drivers.md
│ │ ├── hardware_keyboard_guidelines.md
│ │ ├── how_a_matrix_works.md
│ │ ├── how_keyboards_work.md
│ │ ├── i2c_driver.md
│ │ ├── internals_defines.md
│ │ ├── internals_gpio_control.md
│ │ ├── internals_input_callback_reg.md
│ │ ├── internals_midi_device.md
│ │ ├── internals_midi_device_setup_process.md
│ │ ├── internals_midi_util.md
│ │ ├── internals_send_functions.md
│ │ ├── internals_sysex_tools.md
│ │ ├── isp_flashing_guide.md
│ │ ├── keycodes.md
│ │ ├── keycodes_basic.md
│ │ ├── keymap.md
│ │ ├── mod_tap.md
│ │ ├── newbs.md
│ │ ├── newbs_building_firmware.md
│ │ ├── newbs_building_firmware_configurator.md
│ │ ├── newbs_flashing.md
│ │ ├── newbs_getting_started.md
│ │ ├── newbs_git_best_practices.md
│ │ ├── newbs_git_resolving_merge_conflicts.md
│ │ ├── newbs_git_resynchronize_a_branch.md
│ │ ├── newbs_git_using_your_master_branch.md
│ │ ├── newbs_learn_more_resources.md
│ │ ├── newbs_testing_debugging.md
│ │ ├── one_shot_keys.md
│ │ ├── other_eclipse.md
│ │ ├── other_vscode.md
│ │ ├── pr_checklist.md
│ │ ├── proton_c_conversion.md
│ │ ├── quantum_keycodes.md
│ │ ├── ref_functions.md
│ │ ├── reference_configurator_support.md
│ │ ├── reference_glossary.md
│ │ ├── reference_info_json.md
│ │ ├── reference_keymap_extras.md
│ │ ├── serial_driver.md
│ │ ├── support.md
│ │ ├── syllabus.md
│ │ ├── tap_hold.md
│ │ ├── translating.md
│ │ └── understanding_qmk.md
│ ├── keycodes.md
│ ├── keycodes_basic.md
│ ├── keycodes_magic.md
│ ├── keycodes_us_ansi_shifted.md
│ ├── keymap.md
│ ├── ko-kr/
│ │ ├── README.md
│ │ ├── getting_started_build_tools.md
│ │ ├── getting_started_getting_help.md
│ │ └── getting_started_github.md
│ ├── mod_tap.md
│ ├── newbs.md
│ ├── newbs_building_firmware.md
│ ├── newbs_building_firmware_configurator.md
│ ├── newbs_flashing.md
│ ├── newbs_getting_started.md
│ ├── newbs_git_best_practices.md
│ ├── newbs_git_resolving_merge_conflicts.md
│ ├── newbs_git_resynchronize_a_branch.md
│ ├── newbs_git_using_your_master_branch.md
│ ├── newbs_learn_more_resources.md
│ ├── newbs_testing_debugging.md
│ ├── one_shot_keys.md
│ ├── other_eclipse.md
│ ├── other_vscode.md
│ ├── platformdev_chibios_earlyinit.md
│ ├── platformdev_selecting_arm_mcu.md
│ ├── power.txt
│ ├── pr_checklist.md
│ ├── proton_c_conversion.md
│ ├── pt-br/
│ │ ├── README.md
│ │ └── _summary.md
│ ├── qmk.css
│ ├── qmk_custom_dark.css
│ ├── qmk_custom_light.css
│ ├── quantum_keycodes.md
│ ├── redirects.json
│ ├── ref_functions.md
│ ├── reference_configurator_support.md
│ ├── reference_glossary.md
│ ├── reference_info_json.md
│ ├── reference_keymap_extras.md
│ ├── ru-ru/
│ │ ├── README.md
│ │ ├── _summary.md
│ │ ├── getting_started_build_tools.md
│ │ ├── getting_started_getting_help.md
│ │ ├── getting_started_github.md
│ │ ├── getting_started_introduction.md
│ │ ├── newbs.md
│ │ └── newbs_getting_started.md
│ ├── serial_driver.md
│ ├── spi_driver.md
│ ├── support.md
│ ├── sw.js
│ ├── syllabus.md
│ ├── tap_hold.md
│ ├── translating.md
│ ├── uart_driver.md
│ ├── understanding_qmk.md
│ ├── unit_testing.md
│ ├── usb_nkro.txt
│ ├── ws2812_driver.md
│ └── zh-cn/
│ ├── README.md
│ ├── _summary.md
│ ├── contributing.md
│ ├── custom_quantum_functions.md
│ ├── faq.md
│ ├── faq_build.md
│ ├── faq_debug.md
│ ├── faq_general.md
│ ├── faq_keymap.md
│ ├── getting_started_getting_help.md
│ ├── getting_started_github.md
│ ├── getting_started_introduction.md
│ ├── newbs.md
│ ├── newbs_best_practices.md
│ ├── newbs_building_firmware.md
│ ├── newbs_flashing.md
│ ├── newbs_getting_started.md
│ ├── newbs_learn_more_resources.md
│ ├── newbs_testing_debugging.md
│ └── reference_glossary.md
├── doxygen-todo
├── drivers/
│ ├── eeprom/
│ │ ├── eeprom_custom.c-template
│ │ ├── eeprom_driver.c
│ │ ├── eeprom_driver.h
│ │ ├── eeprom_i2c.c
│ │ ├── eeprom_i2c.h
│ │ ├── eeprom_spi.c
│ │ ├── eeprom_spi.h
│ │ ├── eeprom_transient.c
│ │ └── eeprom_transient.h
│ ├── gpio/
│ │ ├── pca9555.c
│ │ └── pca9555.h
│ ├── haptic/
│ │ ├── DRV2605L.c
│ │ ├── DRV2605L.h
│ │ ├── solenoid.c
│ │ └── solenoid.h
│ ├── lcd/
│ │ ├── st7565.c
│ │ └── st7565.h
│ ├── led/
│ │ ├── apa102.c
│ │ ├── apa102.h
│ │ ├── aw20216.c
│ │ ├── aw20216.h
│ │ └── issi/
│ │ ├── is31fl3218.c
│ │ ├── is31fl3218.h
│ │ ├── is31fl3731-simple.c
│ │ ├── is31fl3731-simple.h
│ │ ├── is31fl3731.c
│ │ ├── is31fl3731.h
│ │ ├── is31fl3733.c
│ │ ├── is31fl3733.h
│ │ ├── is31fl3736.c
│ │ ├── is31fl3736.h
│ │ ├── is31fl3737.c
│ │ ├── is31fl3737.h
│ │ ├── is31fl3741.c
│ │ └── is31fl3741.h
│ ├── nrf52/
│ │ ├── i2c_master.c
│ │ ├── i2c_master.h
│ │ ├── uart.h
│ │ ├── ws2812.c
│ │ └── ws2812.h
│ ├── oled/
│ │ ├── glcdfont.c
│ │ ├── licenses.txt
│ │ ├── oled_driver.h
│ │ └── ssd1306_sh1106.c
│ ├── qwiic/
│ │ ├── micro_oled.c
│ │ ├── micro_oled.h
│ │ ├── qwiic.c
│ │ ├── qwiic.h
│ │ ├── qwiic.mk
│ │ └── util/
│ │ ├── font5x7.h
│ │ └── font8x16.h
│ ├── sensors/
│ │ ├── adns5050.c
│ │ ├── adns5050.h
│ │ ├── adns9800.c
│ │ ├── adns9800.h
│ │ ├── adns9800_srom_A6.h
│ │ ├── pimoroni_trackball.c
│ │ ├── pimoroni_trackball.h
│ │ ├── pmw3360.c
│ │ ├── pmw3360.h
│ │ └── pmw3360_firmware.h
│ ├── serial.h
│ ├── ugfx/
│ │ └── gdisp/
│ │ ├── is31fl3731c/
│ │ │ ├── board_is31fl3731c_template.h
│ │ │ ├── driver.mk
│ │ │ ├── gdisp_is31fl3731c.c
│ │ │ └── gdisp_lld_config.h
│ │ └── st7565/
│ │ ├── board_st7565_template.h
│ │ ├── driver.mk
│ │ ├── gdisp_lld_ST7565.c
│ │ ├── gdisp_lld_config.h
│ │ └── st7565.h
│ ├── usbpd.h
│ └── ws2812.h
├── keyboards/
│ ├── 0_sixty/
│ │ ├── 0_sixty.c
│ │ ├── 0_sixty.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── ven0mtr0n/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ └── via/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── 0xc7/
│ │ └── 61key/
│ │ ├── 61key.c
│ │ ├── 61key.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── 0xcb/
│ │ ├── 1337/
│ │ │ ├── 1337.c
│ │ │ ├── 1337.h
│ │ │ ├── config.h
│ │ │ ├── gfxfont.c
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── conor/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── jakob/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── static/
│ │ ├── config.h
│ │ ├── gfxfont.c
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── bongocat/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── static.c
│ │ └── static.h
│ ├── 10bleoledhub/
│ │ ├── .noci
│ │ ├── 10bleoledhub.c
│ │ ├── 10bleoledhub.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── lib/
│ │ │ └── glcdfont.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── 1upkeyboards/
│ │ ├── 1up60hse/
│ │ │ ├── 1up60hse.c
│ │ │ ├── 1up60hse.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── via/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ └── vosechu/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── 1up60hte/
│ │ │ ├── 1up60hte.c
│ │ │ ├── 1up60hte.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── badger/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── hhkb/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── 1up60rgb/
│ │ │ ├── 1up60rgb.c
│ │ │ ├── 1up60rgb.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── badger/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── iso/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── mdyevimnav/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── raffle/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── tsangan/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── super16/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── 15game/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── ahk_companion/
│ │ │ │ │ ├── ahk_companion.ahk
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── nblyumberg/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── super16.c
│ │ │ └── super16.h
│ │ └── sweet16/
│ │ ├── .noci
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── dlaroe/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── ridingintraffic/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── sebas/
│ │ │ │ └── keymap.c
│ │ │ ├── switchtester/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ ├── rules.mk
│ │ │ │ ├── switches.c
│ │ │ │ └── switches.h
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── sweet16.c
│ │ ├── sweet16.h
│ │ ├── v1/
│ │ │ ├── config.h
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── v1.c
│ │ │ └── v1.h
│ │ └── v2/
│ │ ├── promicro/
│ │ │ ├── config.h
│ │ │ ├── promicro.c
│ │ │ ├── promicro.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── proton_c/
│ │ ├── config.h
│ │ ├── proton_c.c
│ │ ├── proton_c.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── 2key2crawl/
│ │ ├── 2key2crawl.c
│ │ ├── 2key2crawl.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── tabs/
│ │ │ │ └── keymap.c
│ │ │ └── vol/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── 30wer/
│ │ ├── 30wer.c
│ │ ├── 30wer.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── 3w6/
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── manna-harbour_miryoku/
│ │ │ ├── config.h
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ ├── rev1/
│ │ │ ├── config.h
│ │ │ ├── matrix.c
│ │ │ ├── readme.md
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ └── rev2/
│ │ ├── config.h
│ │ ├── keymaps/
│ │ │ └── default_pimoroni/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ ├── pimoroni_trackball.c
│ │ │ ├── pimoroni_trackball.h
│ │ │ └── rules.mk
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ ├── rev2.c
│ │ ├── rev2.h
│ │ └── rules.mk
│ ├── 40percentclub/
│ │ ├── 25/
│ │ │ ├── 25.c
│ │ │ ├── 25.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── macro/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── 4pack/
│ │ │ ├── 4pack.c
│ │ │ ├── 4pack.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── 4x4/
│ │ │ ├── 4x4.c
│ │ │ ├── 4x4.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── 5x5/
│ │ │ ├── 5x5.c
│ │ │ ├── 5x5.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── 6lit/
│ │ │ ├── 6lit.c
│ │ │ ├── 6lit.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── macro/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── foobar/
│ │ │ ├── config.h
│ │ │ ├── foobar.c
│ │ │ ├── foobar.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── macro/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── gherkin/
│ │ │ ├── config.h
│ │ │ ├── gherkin.c
│ │ │ ├── gherkin.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── bbaserdem/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── itsaferbie/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── michel/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── midi/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── mjt/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── pierrec83/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.json
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── steno/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── stevexyz/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ └── talljoe-gherkin/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── half_n_half/
│ │ │ ├── config.h
│ │ │ ├── half_n_half.c
│ │ │ ├── half_n_half.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── Boy_314/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ └── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── i75/
│ │ │ ├── config.h
│ │ │ ├── i75.c
│ │ │ ├── i75.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── promicro/
│ │ │ │ ├── config.h
│ │ │ │ ├── promicro.c
│ │ │ │ ├── promicro.h
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ └── teensy2/
│ │ │ ├── config.h
│ │ │ ├── rules.mk
│ │ │ ├── teensy2.c
│ │ │ └── teensy2.h
│ │ ├── luddite/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── luddite.c
│ │ │ ├── luddite.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── mf68/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── 68keys/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── andyjack/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── delivrance/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── emdarcher/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── mf68_ble/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mf68.c
│ │ │ ├── mf68.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── nano/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── drashna/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ └── spooka/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── nano.c
│ │ │ ├── nano.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── nein/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── nein.c
│ │ │ ├── nein.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── nori/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── macro/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── nori.c
│ │ │ ├── nori.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── sixpack/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── fkeys/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── sixpack.c
│ │ │ └── sixpack.h
│ │ ├── tomato/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── tomato.c
│ │ │ └── tomato.h
│ │ └── ut47/
│ │ ├── LED_controls.ino
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── non-us/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── nordic/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── rgb/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── led.c
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── ut47.c
│ │ └── ut47.h
│ ├── 45_ats/
│ │ ├── 45_ats.c
│ │ ├── 45_ats.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── 4by3/
│ │ ├── 4by3.c
│ │ ├── 4by3.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── arrowpad/
│ │ │ │ └── keymap.c
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── funcpad_horizontal/
│ │ │ │ └── keymap.c
│ │ │ ├── funcpad_vertical/
│ │ │ │ └── keymap.c
│ │ │ ├── numpad_horizontal/
│ │ │ │ └── keymap.c
│ │ │ └── numpad_vertical/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── 4pplet/
│ │ ├── aekiso60/
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rev_a/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── rev_a.c
│ │ │ ├── rev_a.h
│ │ │ └── rules.mk
│ │ ├── bootleg/
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rev_a/
│ │ │ ├── config.h
│ │ │ ├── readme.md
│ │ │ ├── rev_a.c
│ │ │ ├── rev_a.h
│ │ │ └── rules.mk
│ │ ├── eagle_viper_rep/
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rev_a/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ ├── rev_a.c
│ │ │ ├── rev_a.h
│ │ │ └── rules.mk
│ │ ├── steezy60/
│ │ │ ├── keymaps/
│ │ │ │ ├── 4pplet/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rev_a/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── rev_a.c
│ │ │ ├── rev_a.h
│ │ │ └── rules.mk
│ │ └── waffling60/
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rev_a/
│ │ │ ├── .noci
│ │ │ ├── config.h
│ │ │ ├── readme.md
│ │ │ ├── rev_a.c
│ │ │ ├── rev_a.h
│ │ │ └── rules.mk
│ │ └── rev_b/
│ │ ├── config.h
│ │ ├── readme.md
│ │ ├── rev_b.c
│ │ ├── rev_b.h
│ │ └── rules.mk
│ ├── 6ball/
│ │ ├── 6ball.c
│ │ ├── 6ball.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── 7c8/
│ │ └── framework/
│ │ ├── config.h
│ │ ├── framework.c
│ │ ├── framework.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── steven/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ └── via/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── 7skb/
│ │ ├── .noci
│ │ ├── 7skb.c
│ │ ├── 7skb.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── salicylic/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rev1/
│ │ │ ├── config.h
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ └── rules.mk
│ ├── 7splus/
│ │ ├── 7splus.c
│ │ ├── 7splus.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── salicylic/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ └── via/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── 8pack/
│ │ ├── .noci
│ │ ├── 8pack.c
│ │ ├── 8pack.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ ├── rev11/
│ │ │ ├── .noci
│ │ │ ├── config.h
│ │ │ ├── rev11.c
│ │ │ ├── rev11.h
│ │ │ └── rules.mk
│ │ ├── rev12/
│ │ │ ├── config.h
│ │ │ ├── rev12.c
│ │ │ ├── rev12.h
│ │ │ └── rules.mk
│ │ └── rules.mk
│ ├── 9key/
│ │ ├── 9key.c
│ │ ├── 9key.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── bcat/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── tap_dance/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── abacus/
│ │ ├── abacus.c
│ │ ├── abacus.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.json
│ │ │ └── unicodemap/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── absinthe/
│ │ ├── absinthe.c
│ │ ├── absinthe.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── ansi/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── abstract/
│ │ └── ellipse/
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── abstractkb/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ └── default/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rev1/
│ │ ├── config.h
│ │ ├── rev1.c
│ │ ├── rev1.h
│ │ └── rules.mk
│ ├── acekeyboard/
│ │ └── titan60/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── iso/
│ │ │ │ └── keymap.c
│ │ │ ├── tsangan/
│ │ │ │ └── keymap.c
│ │ │ ├── utilitarian/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── titan60.c
│ │ └── titan60.h
│ ├── acheron/
│ │ ├── arctic/
│ │ │ ├── arctic.c
│ │ │ ├── arctic.h
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── austin/
│ │ │ ├── austin.c
│ │ │ ├── austin.h
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── elongate/
│ │ │ ├── config.h
│ │ │ ├── elongate.c
│ │ │ ├── elongate.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── keebspcb/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keebspcb.c
│ │ │ ├── keebspcb.h
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── lasgweloth/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── xoxotus/
│ │ │ │ └── keymap.c
│ │ │ ├── lasgweloth.c
│ │ │ ├── lasgweloth.h
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── shark/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── ajp10304/
│ │ │ │ └── readme.md
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── shark.c
│ │ └── shark.h
│ ├── acr60/
│ │ ├── acr60.c
│ │ ├── acr60.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── mitch/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── adelheid/
│ │ ├── adelheid.c
│ │ ├── adelheid.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── floookay/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── adkb96/
│ │ ├── .noci
│ │ ├── adkb96.c
│ │ ├── adkb96.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── config.h
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ ├── rev1/
│ │ │ ├── config.h
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ └── rules.mk
│ ├── aeboards/
│ │ ├── aegis/
│ │ │ ├── aegis.c
│ │ │ ├── aegis.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── constellation/
│ │ │ ├── constellation.c
│ │ │ ├── constellation.h
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rev1/
│ │ │ │ ├── config.h
│ │ │ │ ├── info.json
│ │ │ │ ├── readme.md
│ │ │ │ ├── rev1.c
│ │ │ │ ├── rev1.h
│ │ │ │ └── rules.mk
│ │ │ ├── rev2/
│ │ │ │ ├── config.h
│ │ │ │ ├── halconf.h
│ │ │ │ ├── info.json
│ │ │ │ ├── mcuconf.h
│ │ │ │ ├── readme.md
│ │ │ │ ├── rev2.c
│ │ │ │ ├── rev2.h
│ │ │ │ └── rules.mk
│ │ │ └── rules.mk
│ │ └── ext65/
│ │ ├── .noci
│ │ ├── config.h
│ │ ├── ext65.c
│ │ ├── ext65.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rev1/
│ │ │ ├── .noci
│ │ │ ├── config.h
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ ├── rev2/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── mcuconf.h
│ │ │ ├── rev2.c
│ │ │ ├── rev2.h
│ │ │ └── rules.mk
│ │ └── rules.mk
│ ├── afternoonlabs/
│ │ ├── breeze/
│ │ │ ├── breeze.c
│ │ │ ├── breeze.h
│ │ │ ├── config.h
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── eithanshavit/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── rev0/
│ │ │ │ ├── config.h
│ │ │ │ ├── info.json
│ │ │ │ ├── readme.md
│ │ │ │ ├── rev0.c
│ │ │ │ ├── rev0.h
│ │ │ │ └── rules.mk
│ │ │ └── rev1/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── readme.md
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ ├── gust/
│ │ │ ├── config.h
│ │ │ ├── gust.c
│ │ │ ├── gust.h
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── rev1/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── readme.md
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ ├── oceanbreeze/
│ │ │ ├── config.h
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── oceanbreeze.c
│ │ │ ├── oceanbreeze.h
│ │ │ └── rev1/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── readme.md
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ ├── southern_breeze/
│ │ │ ├── config.h
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── rev1/
│ │ │ │ ├── config.h
│ │ │ │ ├── info.json
│ │ │ │ ├── readme.md
│ │ │ │ ├── rev1.c
│ │ │ │ ├── rev1.h
│ │ │ │ └── rules.mk
│ │ │ ├── southern_breeze.c
│ │ │ └── southern_breeze.h
│ │ └── summer_breeze/
│ │ ├── config.h
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── rev1/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── readme.md
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ ├── summer_breeze.c
│ │ └── summer_breeze.h
│ ├── ai03/
│ │ ├── andromeda/
│ │ │ ├── andromeda.c
│ │ │ ├── andromeda.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── equinox/
│ │ │ ├── config.h
│ │ │ ├── equinox.c
│ │ │ ├── equinox.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── crd/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rev0/
│ │ │ │ ├── .noci
│ │ │ │ ├── config.h
│ │ │ │ └── rules.mk
│ │ │ └── rev1/
│ │ │ ├── config.h
│ │ │ └── rules.mk
│ │ ├── lunar/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── muzfuz/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── lunar.c
│ │ │ ├── lunar.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── orbit/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── matrix.c
│ │ │ ├── orbit.c
│ │ │ ├── orbit.h
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── serial.c
│ │ │ ├── serial.h
│ │ │ ├── split_flags.c
│ │ │ ├── split_flags.h
│ │ │ ├── split_util.c
│ │ │ ├── split_util.h
│ │ │ ├── transport.c
│ │ │ └── transport.h
│ │ ├── orbit_x/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── orbit_x.c
│ │ │ ├── orbit_x.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── polaris/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── default_ansi_tsangan/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── mekberg/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── testing/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── polaris.c
│ │ │ ├── polaris.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── quasar/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── ai03/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── quasar.c
│ │ │ ├── quasar.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── soyuz/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── 1U/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── soyuz.c
│ │ │ └── soyuz.h
│ │ ├── vega/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── vega.c
│ │ │ └── vega.h
│ │ └── voyager60_alps/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── voyager60_alps.c
│ │ └── voyager60_alps.h
│ ├── ajisai74/
│ │ ├── ajisai74.c
│ │ ├── ajisai74.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── jis/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── salicylic/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ └── via/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── akb/
│ │ ├── eb46/
│ │ │ ├── config.h
│ │ │ ├── eb46.c
│ │ │ ├── eb46.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── raine/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── mehadviceguy/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── raine.c
│ │ ├── raine.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── akegata_denki/
│ │ └── device_one/
│ │ ├── .noci
│ │ ├── chconf.h
│ │ ├── config.h
│ │ ├── device_one.c
│ │ ├── device_one.h
│ │ ├── halconf.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── ansi_arrow_keys/
│ │ │ │ └── keymap.c
│ │ │ ├── ansi_split_backspace/
│ │ │ │ └── keymap.c
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── iso/
│ │ │ └── keymap.c
│ │ ├── mcuconf.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── al1/
│ │ ├── al1.c
│ │ ├── al1.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── splitbs/
│ │ │ └── keymap.c
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── aleblazer/
│ │ └── zodiark/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── slimoled/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ └── via/
│ │ │ ├── config.h
│ │ │ ├── encoder.c
│ │ │ ├── keymap.c
│ │ │ ├── oled.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── zodiark.c
│ │ └── zodiark.h
│ ├── aleth42/
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rev0/
│ │ │ ├── config.h
│ │ │ ├── readme.md
│ │ │ ├── rev0.c
│ │ │ ├── rev0.h
│ │ │ └── rules.mk
│ │ ├── rev1/
│ │ │ ├── config.h
│ │ │ ├── readme.md
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ └── rules.mk
│ ├── alf/
│ │ ├── dc60/
│ │ │ ├── config.h
│ │ │ ├── dc60.c
│ │ │ ├── dc60.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── x11/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── x11.c
│ │ │ └── x11.h
│ │ └── x2/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── hhkb_60/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── x2.c
│ │ └── x2.h
│ ├── alfredslab/
│ │ └── swift65/
│ │ └── solder/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── solder.c
│ │ └── solder.h
│ ├── allison/
│ │ ├── allison.c
│ │ ├── allison.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── allison_numpad/
│ │ ├── allison_numpad.c
│ │ ├── allison_numpad.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── alpha/
│ │ ├── alpha.c
│ │ ├── alpha.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── hvp/
│ │ │ │ └── keymap.c
│ │ │ └── vderm/
│ │ │ ├── README.md
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── alpine65/
│ │ ├── alpine65.c
│ │ ├── alpine65.h
│ │ ├── chconf.h
│ │ ├── config.h
│ │ ├── halconf.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── mcuconf.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── alps64/
│ │ ├── alps64.c
│ │ ├── alps64.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── crd/
│ │ │ │ └── keymap.c
│ │ │ ├── dbroqua/
│ │ │ │ └── keymap.c
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── mechmerlin/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── alu84/
│ │ ├── alu84.c
│ │ ├── alu84.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── turbomech/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── amag23/
│ │ ├── amag23.c
│ │ ├── amag23.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── qwert/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── amj40/
│ │ ├── amj40.c
│ │ ├── amj40.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── default_625u_space/
│ │ │ │ └── keymap.c
│ │ │ ├── default_ortho_275u_space/
│ │ │ │ └── keymap.c
│ │ │ ├── default_ortho_600u_space/
│ │ │ │ └── keymap.c
│ │ │ ├── fabian/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── jetpacktuxedo/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ └── myee/
│ │ │ ├── build.sh
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ └── updatemerge.sh
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── amj60/
│ │ ├── amj60.c
│ │ ├── amj60.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── amj96/
│ │ ├── amj96.c
│ │ ├── amj96.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── amjkeyboard/
│ │ └── amj66/
│ │ ├── amj66.c
│ │ ├── amj66.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── amjpad/
│ │ ├── amjpad.c
│ │ ├── amjpad.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── max/
│ │ │ │ └── keymap.c
│ │ │ ├── ortho_left/
│ │ │ │ └── keymap.c
│ │ │ └── ortho_right/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── anavi/
│ │ └── macropad8/
│ │ ├── config.h
│ │ ├── glcdfont.c
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── git/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── kicad/
│ │ │ │ └── keymap.c
│ │ │ ├── kodi/
│ │ │ │ └── keymap.c
│ │ │ ├── obs/
│ │ │ │ └── keymap.c
│ │ │ └── zoom/
│ │ │ └── keymap.c
│ │ ├── macropad8.c
│ │ ├── macropad8.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── angel17/
│ │ ├── .noci
│ │ ├── alpha/
│ │ │ ├── .noci
│ │ │ ├── alpha.c
│ │ │ ├── alpha.h
│ │ │ ├── config.h
│ │ │ └── rules.mk
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ ├── rev1/
│ │ │ ├── config.h
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ └── rules.mk
│ ├── angel64/
│ │ ├── .noci
│ │ ├── alpha/
│ │ │ ├── .noci
│ │ │ ├── alpha.c
│ │ │ ├── alpha.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── matrix.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rev1/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── kakunpc/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── matrix.c
│ │ │ ├── readme.md
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ └── rules.mk
│ ├── anomalykb/
│ │ └── a65i/
│ │ ├── a65i.c
│ │ ├── a65i.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── ansi_splitbs/
│ │ │ │ └── keymap.c
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── iso/
│ │ │ │ └── keymap.c
│ │ │ ├── iso_splitbs/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── aos/
│ │ └── tkl/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── aholland909/
│ │ │ │ └── keymap.c
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── tkl.c
│ │ └── tkl.h
│ ├── aozora/
│ │ └── hotswap/
│ │ ├── config.h
│ │ ├── hotswap.c
│ │ ├── hotswap.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── aplyard/
│ │ └── aplx6/
│ │ ├── info.json
│ │ ├── rev1/
│ │ │ ├── config.h
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ └── rev2/
│ │ ├── config.h
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ ├── rev2.c
│ │ ├── rev2.h
│ │ └── rules.mk
│ ├── arabica37/
│ │ ├── arabica37.c
│ │ ├── arabica37.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── lib/
│ │ │ └── glcdfont.c
│ │ ├── readme.md
│ │ └── rev1/
│ │ ├── .noci
│ │ ├── config.h
│ │ ├── rev1.c
│ │ ├── rev1.h
│ │ └── rules.mk
│ ├── arch_36/
│ │ ├── arch_36.c
│ │ ├── arch_36.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── obosob/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── ares/
│ │ ├── ares.c
│ │ ├── ares.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── arisu/
│ │ ├── arisu.c
│ │ ├── arisu.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── fate/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── kresnak/
│ │ │ │ └── keymap.c
│ │ │ ├── stanrc85/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── arrayperipherals/
│ │ ├── 1x4p1/
│ │ │ ├── 1x4p1.c
│ │ │ ├── 1x4p1.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── readme.md
│ ├── ash1800/
│ │ ├── ash1800.c
│ │ ├── ash1800.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── ash_xiix/
│ │ ├── ash_xiix.c
│ │ ├── ash_xiix.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── ashpil/
│ │ └── modelm_usbc/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── ashpil/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── modelm_usbc.c
│ │ ├── modelm_usbc.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── at101_bh/
│ │ ├── at101_bh.c
│ │ ├── at101_bh.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── at_at/
│ │ └── 660m/
│ │ ├── 660m.c
│ │ ├── 660m.h
│ │ ├── chconf.h
│ │ ├── config.h
│ │ ├── halconf.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── mcuconf.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── atomic/
│ │ ├── atomic.c
│ │ ├── atomic.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── abienz/
│ │ │ │ └── keymap.c
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── michelle/
│ │ │ │ └── keymap.c
│ │ │ ├── pvc/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ └── twolayer/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── atreus/
│ │ ├── astar/
│ │ │ ├── astar.c
│ │ │ ├── astar.h
│ │ │ ├── config.h
│ │ │ └── rules.mk
│ │ ├── astar_mirrored/
│ │ │ ├── astar_mirrored.c
│ │ │ ├── astar_mirrored.h
│ │ │ ├── config.h
│ │ │ └── rules.mk
│ │ ├── atreus.c
│ │ ├── atreus.h
│ │ ├── config.h
│ │ ├── feather/
│ │ │ ├── config.h
│ │ │ ├── feather.c
│ │ │ ├── feather.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── clash/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── classic/
│ │ │ │ └── keymap.c
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── dvorak_42_key/
│ │ │ │ ├── README.md
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── erlandsona/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── gerb/
│ │ │ │ └── keymap.c
│ │ │ ├── henxing/
│ │ │ │ ├── Readme.md
│ │ │ │ └── keymap.c
│ │ │ ├── ibnuda/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── jeremy/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── kejadlen/
│ │ │ │ ├── README.md
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── khitsule/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── manna-harbour_miryoku/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── nojjan/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── ptillemans/
│ │ │ │ └── keymap.c
│ │ │ ├── replicaJunction/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── ridingqwerty/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── talljoe/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── workman/
│ │ │ │ ├── README.md
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── xk/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── xyverz/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── yttyx/
│ │ │ ├── README.md
│ │ │ ├── config.h
│ │ │ └── keymap.c
│ │ ├── promicro/
│ │ │ ├── config.h
│ │ │ ├── promicro.c
│ │ │ ├── promicro.h
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ └── teensy2/
│ │ ├── config.h
│ │ ├── rules.mk
│ │ ├── teensy2.c
│ │ └── teensy2.h
│ ├── atreus62/
│ │ ├── atreus62.c
│ │ ├── atreus62.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── 194h/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── d4mation/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── hvp/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── jarred/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── mfluid/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── mneme/
│ │ │ │ ├── README.md
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── rules.mk
│ │ │ │ └── unicode
│ │ │ ├── pcewing/
│ │ │ │ └── keymap.c
│ │ │ ├── scheiklp/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ └── xyverz/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── atxkb/
│ │ ├── 1894/
│ │ │ ├── 1894.c
│ │ │ ├── 1894.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── default_ansi_tsangan/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── readme.md
│ ├── aves65/
│ │ ├── aves65.c
│ │ ├── aves65.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── axolstudio/
│ │ ├── helpo/
│ │ │ ├── config.h
│ │ │ ├── helpo.c
│ │ │ ├── helpo.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── yeti/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── yeti.c
│ │ └── yeti.h
│ ├── baguette/
│ │ ├── baguette.c
│ │ ├── baguette.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── iso/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── bakeneko60/
│ │ ├── bakeneko60.c
│ │ ├── bakeneko60.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── bakeneko65/
│ │ ├── rev2/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rev2.c
│ │ │ ├── rev2.h
│ │ │ └── rules.mk
│ │ └── rev3/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rev3.c
│ │ ├── rev3.h
│ │ └── rules.mk
│ ├── bakeneko80/
│ │ ├── bakeneko80.c
│ │ ├── bakeneko80.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── bantam44/
│ │ ├── bantam44.c
│ │ ├── bantam44.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── barleycorn/
│ │ ├── barleycorn.c
│ │ ├── barleycorn.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── iso/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── barleycorn_smd/
│ │ ├── barleycorn_smd.c
│ │ ├── barleycorn_smd.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── iso/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── barracuda/
│ │ ├── barracuda.c
│ │ ├── barracuda.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── basekeys/
│ │ ├── slice/
│ │ │ ├── config.h
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ └── keymap.c
│ │ │ │ └── default_split_left_space/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ ├── rev1/
│ │ │ │ ├── .noci
│ │ │ │ ├── config.h
│ │ │ │ ├── info.json
│ │ │ │ ├── keymaps/
│ │ │ │ │ ├── 2moons/
│ │ │ │ │ │ ├── config.h
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── rules.mk
│ │ │ │ │ ├── default_all/
│ │ │ │ │ │ ├── config.h
│ │ │ │ │ │ └── keymap.c
│ │ │ │ │ ├── default_split_backspace/
│ │ │ │ │ │ ├── config.h
│ │ │ │ │ │ └── keymap.c
│ │ │ │ │ └── via/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── rev1.c
│ │ │ │ ├── rev1.h
│ │ │ │ └── rules.mk
│ │ │ ├── rev1_rgb/
│ │ │ │ ├── config.h
│ │ │ │ ├── info.json
│ │ │ │ ├── keymaps/
│ │ │ │ │ ├── 2moons_rgb/
│ │ │ │ │ │ ├── config.h
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── rules.mk
│ │ │ │ │ └── via/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── rev1_rgb.c
│ │ │ │ ├── rev1_rgb.h
│ │ │ │ └── rules.mk
│ │ │ ├── slice.c
│ │ │ ├── slice.h
│ │ │ └── slice_font.c
│ │ └── trifecta/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── trifecta.c
│ │ └── trifecta.h
│ ├── basketweave/
│ │ ├── basketweave.c
│ │ ├── basketweave.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── bastardkb/
│ │ ├── scylla/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── cykedev/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── german_gaming/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ └── xyverz/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── scylla.c
│ │ │ └── scylla.h
│ │ ├── skeletyl/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── skeletyl.c
│ │ │ └── skeletyl.h
│ │ ├── tbk/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── german_gaming/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ └── xyverz/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── tbk.c
│ │ │ └── tbk.h
│ │ └── tbkmini/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── tbkmini.c
│ │ └── tbkmini.h
│ ├── bat43/
│ │ ├── .noci
│ │ ├── bat43.c
│ │ ├── bat43.h
│ │ ├── config.h
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rev1/
│ │ │ ├── .noci
│ │ │ ├── info.json
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ ├── rev2/
│ │ │ ├── .noci
│ │ │ ├── info.json
│ │ │ ├── rev2.c
│ │ │ ├── rev2.h
│ │ │ └── rules.mk
│ │ └── rules.mk
│ ├── bear_face/
│ │ ├── .noci
│ │ ├── bear_face.c
│ │ ├── bear_face.h
│ │ ├── config.h
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── v1/
│ │ │ ├── .noci
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── v1.c
│ │ │ └── v1.h
│ │ └── v2/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── default_iso/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── rules.mk
│ │ ├── v2.c
│ │ └── v2.h
│ ├── beatervan/
│ │ ├── beatervan.c
│ │ ├── beatervan.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── oj/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── bemeier/
│ │ └── bmek/
│ │ ├── bmek.c
│ │ ├── bmek.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── README.md
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── README.md
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rev1/
│ │ │ ├── .noci
│ │ │ ├── config.h
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ ├── rev2/
│ │ │ ├── .noci
│ │ │ ├── config.h
│ │ │ ├── rev2.c
│ │ │ ├── rev2.h
│ │ │ └── rules.mk
│ │ └── rev3/
│ │ ├── config.h
│ │ ├── rev3.c
│ │ ├── rev3.h
│ │ └── rules.mk
│ ├── bfake/
│ │ ├── bfake.c
│ │ ├── bfake.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── mechmerlin/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── bigseries/
│ │ ├── 1key/
│ │ │ ├── .noci
│ │ │ ├── 1key.c
│ │ │ ├── 1key.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── 8ball/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── ctrl-alt-del/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── dudeofawesome/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── leddance/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── lock/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── tester/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── 2key/
│ │ │ ├── .noci
│ │ │ ├── 2key.c
│ │ │ ├── 2key.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── lock/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── tester/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── 3key/
│ │ │ ├── .noci
│ │ │ ├── 3key.c
│ │ │ ├── 3key.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── ctrl-alt-del/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── tester/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── 4key/
│ │ │ ├── 4key.c
│ │ │ ├── 4key.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── tester/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── readme.md
│ ├── binepad/
│ │ └── bn003/
│ │ ├── bn003.c
│ │ ├── bn003.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── bioi/
│ │ ├── ble.c
│ │ ├── ble.h
│ │ ├── g60/
│ │ │ ├── config.h
│ │ │ ├── g60.c
│ │ │ ├── g60.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── g60ble/
│ │ │ ├── config.h
│ │ │ ├── g60ble.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── main.c
│ │ ├── morgan65/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── morgan65.c
│ │ │ ├── morgan65.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── s65/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── s65.c
│ │ │ └── s65.h
│ │ ├── usart.c
│ │ └── usart.h
│ ├── blackplum/
│ │ ├── blackplum.c
│ │ ├── blackplum.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── blank_tehnologii/
│ │ └── manibus/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── samurai/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── manibus.c
│ │ ├── manibus.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── ble_micro_pro/
│ │ ├── ble_micro_pro.c
│ │ ├── ble_micro_pro.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── bto_tb/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── paw3204.c
│ │ │ │ ├── paw3204.h
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── lpme_tester/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── no_msc/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── safemode/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── tb_module/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── ld/
│ │ │ └── nrf52840_ao.ld
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── blockey/
│ │ ├── blockey.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── eucalyn/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── boardrun/
│ │ ├── bizarre/
│ │ │ ├── bizarre.c
│ │ │ ├── bizarre.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── nopunin10did/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── classic/
│ │ ├── classic.c
│ │ ├── classic.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── boardsource/
│ │ ├── 3x4/
│ │ │ ├── 3x4.c
│ │ │ ├── 3x4.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── 4x12/
│ │ │ ├── 4x12.c
│ │ │ ├── 4x12.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── codecoffeecode/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── 5x12/
│ │ │ ├── 5x12.c
│ │ │ ├── 5x12.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── beiwagon/
│ │ │ ├── beiwagon.c
│ │ │ ├── beiwagon.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── holiday/
│ │ │ └── spooky/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── rip_mx/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ └── rip_my_wallet/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── spooky.c
│ │ │ └── spooky.h
│ │ ├── microdox/
│ │ │ ├── .noci
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── cole/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── microdox.c
│ │ │ ├── microdox.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── technik_o/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── technik_o.c
│ │ │ └── technik_o.h
│ │ ├── technik_s/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── technik_s.c
│ │ │ └── technik_s.h
│ │ └── the_mark/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── default_ansi/
│ │ │ │ └── keymap.c
│ │ │ ├── default_iso/
│ │ │ │ └── keymap.c
│ │ │ ├── stanrc85/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── the_mark.c
│ │ └── the_mark.h
│ ├── boardwalk/
│ │ ├── boardwalk.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── brendanwr/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── default_2u_arrow/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── default_2x2u/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── default_625u_arrow/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── default_ortho_7u/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── default_ortho_hhkb/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── mcallaster/
│ │ │ │ └── keymap.c
│ │ │ ├── nchristus/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── niclake/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── bop/
│ │ ├── bop.c
│ │ ├── bop.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── boston/
│ │ ├── boston.c
│ │ ├── boston.h
│ │ ├── chconf.h
│ │ ├── config.h
│ │ ├── halconf.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── rgb-light-layers/
│ │ │ └── keymap.c
│ │ ├── mcuconf.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── boston_meetup/
│ │ ├── 2019/
│ │ │ ├── 2019.c
│ │ │ ├── 2019.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── boston_meetup.c
│ │ ├── boston_meetup.h
│ │ ├── config.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── botanicalkeyboards/
│ │ └── fm2u/
│ │ ├── config.h
│ │ ├── fm2u.c
│ │ ├── fm2u.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── box75/
│ │ ├── box75.c
│ │ ├── box75.h
│ │ ├── chconf.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── mcuconf.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── bpiphany/
│ │ ├── frosty_flake/
│ │ │ ├── config.h
│ │ │ ├── frosty_flake.c
│ │ │ ├── frosty_flake.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── QFR_JM/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── nikchi/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ ├── rules.mk
│ │ │ │ │ └── variableTapDance.md
│ │ │ │ └── tkl/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── matrix.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── kitten_paw/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── ickerwx/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── kitten_paw.c
│ │ │ ├── kitten_paw.h
│ │ │ ├── matrix.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── pegasushoof/
│ │ │ ├── .noci
│ │ │ ├── 2013/
│ │ │ │ ├── .noci
│ │ │ │ ├── 2013.c
│ │ │ │ ├── 2013.h
│ │ │ │ ├── config.h
│ │ │ │ ├── matrix.c
│ │ │ │ └── rules.mk
│ │ │ ├── 2015/
│ │ │ │ ├── 2015.c
│ │ │ │ ├── 2015.h
│ │ │ │ ├── config.h
│ │ │ │ ├── matrix.c
│ │ │ │ └── rules.mk
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── blowrak/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── citadel/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ └── default_jis/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── sixshooter/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── sixshooter.c
│ │ │ └── sixshooter.h
│ │ ├── tiger_lily/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── default_ansi/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ └── via/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── matrix.c
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── tiger_lily.c
│ │ │ └── tiger_lily.h
│ │ └── unloved_bastard/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.json
│ │ │ ├── default_ansi/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── default_iso/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── unloved_bastard.c
│ │ └── unloved_bastard.h
│ ├── bt66tech/
│ │ └── bt66tech60/
│ │ ├── bt66tech60.c
│ │ ├── bt66tech60.h
│ │ ├── chconf.h
│ │ ├── config.h
│ │ ├── halconf.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── mcuconf.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── bthlabs/
│ │ └── geekpad/
│ │ ├── .noci
│ │ ├── config.h
│ │ ├── geekpad.c
│ │ ├── geekpad.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── config.h
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── buildakb/
│ │ ├── potato65/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── potato65.c
│ │ │ ├── potato65.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── potato65hs/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── potato65hs.c
│ │ ├── potato65hs.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── business_card/
│ │ ├── .noci
│ │ ├── alpha/
│ │ │ ├── .noci
│ │ │ ├── alpha.c
│ │ │ ├── alpha.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── rules.mk
│ │ ├── beta/
│ │ │ ├── beta.c
│ │ │ ├── beta.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── rules.mk
│ │ ├── business_card.c
│ │ ├── business_card.h
│ │ ├── config.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── butterstick/
│ │ ├── butterstick.c
│ │ ├── butterstick.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── dennytom/
│ │ │ ├── README.md
│ │ │ ├── keymap.c
│ │ │ ├── keymap_def.json
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── sten.c
│ │ └── sten.h
│ ├── c39/
│ │ ├── c39.c
│ │ ├── c39.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── drashna/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ └── kuchosauronad0/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── caffeinated/
│ │ └── serpent65/
│ │ ├── chconf.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── serpent65.c
│ │ └── serpent65.h
│ ├── cannonkeys/
│ │ ├── aella/
│ │ │ ├── aella.c
│ │ │ ├── aella.h
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── an_c/
│ │ │ ├── an_c.c
│ │ │ ├── an_c.h
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── tsangan/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── atlas/
│ │ │ ├── atlas.c
│ │ │ ├── atlas.h
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── atlas_alps/
│ │ │ ├── atlas_alps.c
│ │ │ ├── atlas_alps.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── balance/
│ │ │ ├── balance.c
│ │ │ ├── balance.h
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── chimera65/
│ │ │ ├── chconf.h
│ │ │ ├── chimera65.c
│ │ │ ├── chimera65.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── db60/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── db60.c
│ │ │ ├── db60.h
│ │ │ ├── halconf.h
│ │ │ ├── hotswap/
│ │ │ │ ├── config.h
│ │ │ │ ├── hotswap.h
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── info.json
│ │ │ ├── j02/
│ │ │ │ ├── config.h
│ │ │ │ ├── j02.h
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── iso/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── tsangan/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ ├── rev2/
│ │ │ │ ├── config.h
│ │ │ │ ├── readme.md
│ │ │ │ ├── rev2.h
│ │ │ │ └── rules.mk
│ │ │ └── rules.mk
│ │ ├── devastatingtkl/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── devastatingtkl.c
│ │ │ ├── devastatingtkl.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── instant60/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── instant60.c
│ │ │ ├── instant60.h
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── tsangan/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── via/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ └── via_standard/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── instant65/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── instant65.c
│ │ │ ├── instant65.h
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── iron165/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── iron165.c
│ │ │ ├── iron165.h
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── obliterated75/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── obliterated75.c
│ │ │ ├── obliterated75.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── onyx/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── onyx.c
│ │ │ ├── onyx.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── ortho48/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── ortho48.c
│ │ │ ├── ortho48.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── ortho60/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── ortho60.c
│ │ │ ├── ortho60.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── ortho75/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── mcuconf.h
│ │ │ ├── ortho75.c
│ │ │ ├── ortho75.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── practice60/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── practice60.c
│ │ │ ├── practice60.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── practice65/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── mcuconf.h
│ │ │ ├── practice65.c
│ │ │ ├── practice65.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── rekt1800/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ ├── rekt1800.c
│ │ │ ├── rekt1800.h
│ │ │ └── rules.mk
│ │ ├── sagittarius/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── sagittarius.c
│ │ │ └── sagittarius.h
│ │ ├── satisfaction75/
│ │ │ ├── .noci
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── keymaps/
│ │ │ │ ├── boy_314/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── jae/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── tester/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── led.c
│ │ │ ├── led_custom.h
│ │ │ ├── mcuconf.h
│ │ │ ├── prototype/
│ │ │ │ ├── .noci
│ │ │ │ ├── info.json
│ │ │ │ ├── prototype.h
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rev1/
│ │ │ │ ├── info.json
│ │ │ │ ├── rev1.h
│ │ │ │ └── rules.mk
│ │ │ ├── rules.mk
│ │ │ ├── satisfaction75.c
│ │ │ ├── satisfaction75.h
│ │ │ ├── satisfaction_encoder.c
│ │ │ └── satisfaction_oled.c
│ │ ├── savage65/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── savage65.c
│ │ │ └── savage65.h
│ │ ├── tmov2/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── brandonschlack/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── tmov2.c
│ │ │ └── tmov2.h
│ │ ├── tsukuyomi/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── tsukuyomi.c
│ │ │ └── tsukuyomi.h
│ │ └── vicious40/
│ │ ├── chconf.h
│ │ ├── config.h
│ │ ├── halconf.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── mcuconf.h
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── vicious40.c
│ │ └── vicious40.h
│ ├── capsunlocked/
│ │ ├── cu65/
│ │ │ ├── config.h
│ │ │ ├── cu65.c
│ │ │ ├── cu65.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── iso/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── iso_split_bs/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── cu7/
│ │ │ ├── config.h
│ │ │ ├── cu7.c
│ │ │ ├── cu7.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── cu80/
│ │ │ ├── v2_ansi/
│ │ │ │ ├── config.h
│ │ │ │ ├── info.json
│ │ │ │ ├── keymaps/
│ │ │ │ │ ├── default/
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ └── via/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── readme.md
│ │ │ │ ├── rgb/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── info.json
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── rules.mk
│ │ │ │ ├── v2_ansi.c
│ │ │ │ └── v2_ansi.h
│ │ │ └── v2_iso/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rgb/
│ │ │ │ ├── config.h
│ │ │ │ ├── info.json
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── rules.mk
│ │ │ ├── v2_iso.c
│ │ │ └── v2_iso.h
│ │ └── readme.md
│ ├── carbo65/
│ │ ├── carbo65.c
│ │ ├── carbo65.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── cassette42/
│ │ ├── cassette42.c
│ │ ├── cassette42.h
│ │ ├── common/
│ │ │ ├── glcdfont.c
│ │ │ ├── oled_helper.c
│ │ │ └── oled_helper.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── catch22/
│ │ ├── catch22.c
│ │ ├── catch22.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── centromere/
│ │ ├── centromere.c
│ │ ├── centromere.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── default_u2/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mattly/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mini/
│ │ │ │ └── keymap.c
│ │ │ └── mini_bom/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── cest73/
│ │ └── tkm/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── tkm.c
│ │ └── tkm.h
│ ├── charue/
│ │ └── sunsetter/
│ │ ├── chconf.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── default_all/
│ │ │ │ └── keymap.c
│ │ │ ├── default_iso/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── mcuconf.h
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── sunsetter.c
│ │ └── sunsetter.h
│ ├── chavdai40/
│ │ ├── board.h
│ │ ├── chconf.h
│ │ ├── halconf.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── 42keys-dvorak/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── 42keys-eucalyn/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── 42keys-qwerty/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── 44keys-dvorak/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── 44keys-eucalyn/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── 44keys-qwerty/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ └── default/
│ │ │ ├── config.h
│ │ │ └── keymap.c
│ │ ├── mcuconf.h
│ │ ├── readme.md
│ │ ├── rev1/
│ │ │ ├── .noci
│ │ │ ├── config.h
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ └── rev2/
│ │ ├── config.h
│ │ ├── rev2.c
│ │ ├── rev2.h
│ │ └── rules.mk
│ ├── checkerboards/
│ │ ├── axon40/
│ │ │ ├── axon40.c
│ │ │ ├── axon40.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── npspears/
│ │ │ │ │ ├── config.h
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── candybar_ortho/
│ │ │ ├── candybar_ortho.c
│ │ │ ├── candybar_ortho.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── 2x3u/
│ │ │ │ │ ├── config.h
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── 7u/
│ │ │ │ │ ├── config.h
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── g_idb60/
│ │ │ ├── config.h
│ │ │ ├── g_idb60.c
│ │ │ ├── g_idb60.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── nop60/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── 7u/
│ │ │ │ │ ├── config.h
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── nop60.c
│ │ │ ├── nop60.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── quark_squared/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── 2u/
│ │ │ │ │ ├── config.h
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── quark_squared.c
│ │ │ ├── quark_squared.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── ud40_ortho_alt/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── 2x3u_alt/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── 600u/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── 600u_alt/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── 700u/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── npspears/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── ud40_ortho_alt.c
│ │ └── ud40_ortho_alt.h
│ ├── cherrybstudio/
│ │ ├── cb1800/
│ │ │ ├── cb1800.c
│ │ │ ├── cb1800.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── cb87/
│ │ ├── cb87.c
│ │ ├── cb87.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── cheshire/
│ │ └── curiosity/
│ │ ├── chconf.h
│ │ ├── config.h
│ │ ├── curiosity.c
│ │ ├── curiosity.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── crd/
│ │ │ │ └── keymap.c
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── madhatter/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── chidori/
│ │ ├── .noci
│ │ ├── board.c
│ │ ├── board.h
│ │ ├── chidori.c
│ │ ├── chidori.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── extended/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── oled_sample/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── chili/
│ │ ├── chili.c
│ │ ├── chili.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── chimera_ergo/
│ │ ├── chimera_ergo.c
│ │ ├── chimera_ergo.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── chimera_ls/
│ │ ├── chimera_ls.c
│ │ ├── chimera_ls.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── chimera_ortho/
│ │ ├── chimera_ortho.c
│ │ ├── chimera_ortho.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── config.h
│ │ │ └── keymap.c
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── chimera_ortho_plus/
│ │ ├── chimera_ortho_plus.c
│ │ ├── chimera_ortho_plus.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── config.h
│ │ │ └── keymap.c
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── chlx/
│ │ └── merro60/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── ansi/
│ │ │ │ └── keymap.c
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── hhkb/
│ │ │ │ └── keymap.c
│ │ │ ├── iso/
│ │ │ │ └── keymap.c
│ │ │ ├── tsangan/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── merro60.c
│ │ ├── merro60.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── choc_taro/
│ │ ├── choc_taro.c
│ │ ├── choc_taro.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── choco60/
│ │ ├── choco60.c
│ │ ├── choco60.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rev1/
│ │ │ ├── .noci
│ │ │ ├── config.h
│ │ │ ├── readme.md
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ ├── rev2/
│ │ │ ├── config.h
│ │ │ ├── readme.md
│ │ │ ├── rev2.c
│ │ │ ├── rev2.h
│ │ │ └── rules.mk
│ │ └── rules.mk
│ ├── christmas_tree/
│ │ ├── .noci
│ │ ├── V2017/
│ │ │ ├── V2017.c
│ │ │ ├── V2017.h
│ │ │ ├── config.h
│ │ │ └── rules.mk
│ │ ├── christmas_tree.c
│ │ ├── christmas_tree.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── ck60i/
│ │ ├── chconf.h
│ │ ├── ck60i.c
│ │ ├── ck60i.h
│ │ ├── config.h
│ │ ├── halconf.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── mcuconf.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── ckeys/
│ │ ├── handwire_101/
│ │ │ ├── config.h
│ │ │ ├── handwire_101.c
│ │ │ ├── handwire_101.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── nakey/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── nakey.c
│ │ │ ├── nakey.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── obelus/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── obelus.c
│ │ │ ├── obelus.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── thedora/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── thedora.c
│ │ │ └── thedora.h
│ │ └── washington/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── washington.c
│ │ └── washington.h
│ ├── claw44/
│ │ ├── .noci
│ │ ├── claw44.c
│ │ ├── claw44.h
│ │ ├── config.h
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── oled/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ └── via/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── lib/
│ │ │ └── glcdfont.c
│ │ ├── readme.md
│ │ ├── rev1/
│ │ │ ├── .noci
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── readme.md
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ └── rules.mk
│ ├── clawsome/
│ │ ├── bookerboard/
│ │ │ ├── bookerboard.c
│ │ │ ├── bookerboard.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── coupe/
│ │ │ ├── config.h
│ │ │ ├── coupe.c
│ │ │ ├── coupe.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── doodle/
│ │ │ ├── config.h
│ │ │ ├── doodle.c
│ │ │ ├── doodle.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ └── rules.mk
│ │ ├── fightpad/
│ │ │ ├── config.h
│ │ │ ├── fightpad.c
│ │ │ ├── fightpad.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── gamebuddy/
│ │ │ ├── v1_0/
│ │ │ │ ├── config.h
│ │ │ │ ├── info.json
│ │ │ │ ├── keymaps/
│ │ │ │ │ └── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ ├── rules.mk
│ │ │ │ ├── v1_0.c
│ │ │ │ └── v1_0.h
│ │ │ └── v1_m/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── v1_m.c
│ │ │ └── v1_m.h
│ │ ├── hatchback/
│ │ │ ├── config.h
│ │ │ ├── hatchback.c
│ │ │ ├── hatchback.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── luggage_rack/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── luggage_rack.c
│ │ │ ├── luggage_rack.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── numeros/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── numeros.c
│ │ │ ├── numeros.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── roadster/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ ├── roadster.c
│ │ │ ├── roadster.h
│ │ │ └── rules.mk
│ │ ├── sedan/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── sedan.c
│ │ │ └── sedan.h
│ │ ├── sidekick/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── sidekick.c
│ │ │ └── sidekick.h
│ │ └── suv/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── suv.c
│ │ └── suv.h
│ ├── clueboard/
│ │ ├── 17/
│ │ │ ├── .noci
│ │ │ ├── 17.c
│ │ │ ├── 17.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── 2x1800/
│ │ │ ├── 2018/
│ │ │ │ ├── .noci
│ │ │ │ ├── 2018.c
│ │ │ │ ├── 2018.h
│ │ │ │ ├── config.h
│ │ │ │ ├── info.json
│ │ │ │ ├── keymaps/
│ │ │ │ │ ├── default/
│ │ │ │ │ │ ├── config.h
│ │ │ │ │ │ ├── keymap.json
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ ├── default_4u/
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ ├── default_7u/
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ ├── macroboard/
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ ├── mouseboard_left/
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ └── mouseboard_right/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── 2019/
│ │ │ │ ├── 2019.c
│ │ │ │ ├── 2019.h
│ │ │ │ ├── config.h
│ │ │ │ ├── info.json
│ │ │ │ ├── keymaps/
│ │ │ │ │ ├── default/
│ │ │ │ │ │ ├── keymap.json
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ ├── default_1u_ansi/
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ ├── default_1u_iso/
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ ├── default_2u_ansi/
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ ├── default_2u_iso/
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ ├── default_4u_ansi/
│ │ │ │ │ │ ├── config.h
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ ├── default_4u_iso/
│ │ │ │ │ │ ├── config.h
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ ├── default_7u_ansi/
│ │ │ │ │ │ ├── config.h
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ └── default_7u_iso/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── 2021/
│ │ │ │ ├── .noci
│ │ │ │ ├── 2021.c
│ │ │ │ ├── 2021.h
│ │ │ │ ├── config.h
│ │ │ │ ├── font.h
│ │ │ │ ├── info.json
│ │ │ │ ├── keymaps/
│ │ │ │ │ ├── default/
│ │ │ │ │ │ └── keymap.json
│ │ │ │ │ ├── default_4u/
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ ├── default_7u/
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ └── signboard/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── max7219.c
│ │ │ │ ├── max7219.h
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── info.json
│ │ │ └── readme.md
│ │ ├── 60/
│ │ │ ├── .noci
│ │ │ ├── 60.c
│ │ │ ├── 60.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── default_aek/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── led.c
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── 66/
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── 66_ansi/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── 66_iso/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── badger/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── bloodlvst/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── caps_fn/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── colemak/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── jokrik/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── mac_optimized/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── magicmonty/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── manofinterests/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── maximised/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── mouse_keys/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── mrscooty/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── muzfuz/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── serubin/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── shift_fn/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── smt/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── tetris/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ ├── rules.mk
│ │ │ │ │ ├── tetris_text.c
│ │ │ │ │ └── tetris_text.h
│ │ │ │ ├── unix_optimized/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── via/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ └── win_optimized/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ ├── rev1/
│ │ │ │ ├── .noci
│ │ │ │ ├── config.h
│ │ │ │ ├── info.json
│ │ │ │ ├── readme.md
│ │ │ │ ├── rev1.c
│ │ │ │ ├── rev1.h
│ │ │ │ └── rules.mk
│ │ │ ├── rev2/
│ │ │ │ ├── .noci
│ │ │ │ ├── config.h
│ │ │ │ ├── info.json
│ │ │ │ ├── readme.md
│ │ │ │ ├── rev2.c
│ │ │ │ ├── rev2.h
│ │ │ │ └── rules.mk
│ │ │ ├── rev3/
│ │ │ │ ├── config.h
│ │ │ │ ├── info.json
│ │ │ │ ├── readme.md
│ │ │ │ ├── rev3.c
│ │ │ │ ├── rev3.h
│ │ │ │ └── rules.mk
│ │ │ └── rev4/
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── keymap.c
│ │ │ │ └── mine/
│ │ │ │ └── keymap.c
│ │ │ ├── mcuconf.h
│ │ │ ├── mine/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ ├── rev4.c
│ │ │ ├── rev4.h
│ │ │ └── rules.mk
│ │ ├── 66_hotswap/
│ │ │ ├── 66_hotswap.c
│ │ │ ├── 66_hotswap.h
│ │ │ ├── config.h
│ │ │ ├── gen1/
│ │ │ │ ├── config.h
│ │ │ │ ├── gen1.c
│ │ │ │ ├── gen1.h
│ │ │ │ ├── halconf.h
│ │ │ │ ├── info.json
│ │ │ │ ├── keymaps/
│ │ │ │ │ ├── 66_ansi/
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ ├── default/
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ └── json/
│ │ │ │ │ └── keymap.json
│ │ │ │ ├── mcuconf.h
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── prototype/
│ │ │ │ ├── .noci
│ │ │ │ ├── config.h
│ │ │ │ ├── info.json
│ │ │ │ ├── keymaps/
│ │ │ │ │ ├── 66_ansi/
│ │ │ │ │ │ ├── keymap.c
│ │ │ │ │ │ └── readme.md
│ │ │ │ │ └── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── prototype.c
│ │ │ │ ├── prototype.h
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ └── readme.md
│ │ ├── california/
│ │ │ ├── california.c
│ │ │ ├── california.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── keymap.json
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── card/
│ │ │ ├── .noci
│ │ │ ├── card.c
│ │ │ ├── card.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ └── rgb_effects/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── info.json
│ │ └── readme.md
│ ├── cmm_studio/
│ │ └── saka68/
│ │ ├── hotswap/
│ │ │ ├── config.h
│ │ │ ├── hotswap.c
│ │ │ ├── hotswap.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── solder/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── solder.c
│ │ └── solder.h
│ ├── coarse/
│ │ ├── cordillera/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── cordillera.c
│ │ │ ├── cordillera.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── ixora/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── ixora.c
│ │ │ ├── ixora.h
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── wntrmln/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── vinta/
│ │ ├── chconf.h
│ │ ├── config.h
│ │ ├── halconf.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── vinta.c
│ │ └── vinta.h
│ ├── cocoa40/
│ │ ├── .noci
│ │ ├── cocoa40.c
│ │ ├── cocoa40.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── comet46/
│ │ ├── comet46.c
│ │ ├── comet46.h
│ │ ├── config.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── default-rgbled/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── satt/
│ │ │ ├── action_pseudo_lut.c
│ │ │ ├── action_pseudo_lut.h
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ ├── keymap_jis2us.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── lib/
│ │ │ ├── glcdfont.c
│ │ │ ├── host_led_state_reader.c
│ │ │ ├── keylogger.c
│ │ │ └── modifier_state_reader.c
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── ssd1306.c
│ │ └── ssd1306.h
│ ├── compound/
│ │ ├── compound.c
│ │ ├── compound.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── contra/
│ │ ├── config.h
│ │ ├── contra.c
│ │ ├── contra.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── alper/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── basic/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── bramver/
│ │ │ │ ├── README.md
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── dana/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── deastiny/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── erovia/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── losinggeneration/
│ │ │ │ ├── README.md
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── maxr1998/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── msiu/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── ryanm101/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── converter/
│ │ ├── a1200/
│ │ │ ├── a1200.c
│ │ │ ├── a1200.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── miss1200/
│ │ │ │ ├── config.h
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── teensy2pp/
│ │ │ ├── config.h
│ │ │ └── rules.mk
│ │ ├── adb_usb/
│ │ │ ├── adb_usb.c
│ │ │ ├── adb_usb.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── 13bit/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── led.c
│ │ │ ├── matrix.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── hp_46010a/
│ │ │ ├── config.h
│ │ │ ├── hp_46010a.c
│ │ │ ├── hp_46010a.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── matrix.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── ibm_terminal/
│ │ │ ├── config.h
│ │ │ ├── ibm_terminal.c
│ │ │ ├── ibm_terminal.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── dsanchezseco/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ └── priyadi/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── led.c
│ │ │ ├── matrix.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── m0110_usb/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── m0110_usb.c
│ │ │ ├── m0110_usb.h
│ │ │ ├── matrix.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── modelm101/
│ │ │ ├── .noci
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── iw0rm3r/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── modelm101.c
│ │ │ ├── modelm101.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── modelm_ssk/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── tiltowait/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── modelm_ssk.c
│ │ │ ├── modelm_ssk.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── numeric_keypad_IIe/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── newbold/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── numeric_keypad_IIe.c
│ │ │ ├── numeric_keypad_IIe.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── palm_usb/
│ │ │ ├── config.h
│ │ │ ├── matrix.c
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ └── stowaway/
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── rules.mk
│ │ │ └── stowaway.h
│ │ ├── periboard_512/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── periboard_512.c
│ │ │ ├── periboard_512.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── siemens_tastatur/
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── halconf.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── matrix.c
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── siemens_tastatur.c
│ │ │ └── siemens_tastatur.h
│ │ ├── sun_usb/
│ │ │ ├── .noci
│ │ │ ├── command_extra.c
│ │ │ ├── config.h
│ │ │ ├── led.c
│ │ │ ├── matrix.c
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── type3/
│ │ │ │ ├── .noci
│ │ │ │ ├── info.json
│ │ │ │ ├── keymaps/
│ │ │ │ │ └── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── rules.mk
│ │ │ │ └── type3.h
│ │ │ └── type5/
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── sigma/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── rules.mk
│ │ │ └── type5.h
│ │ ├── usb_usb/
│ │ │ ├── ble/
│ │ │ │ ├── ble.c
│ │ │ │ ├── ble.h
│ │ │ │ ├── config.h
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── config.h
│ │ │ ├── custom_matrix.cpp
│ │ │ ├── hasu/
│ │ │ │ ├── hasu.c
│ │ │ │ ├── hasu.h
│ │ │ │ └── rules.mk
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── ble/
│ │ │ │ │ ├── config.h
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── chriskopher/
│ │ │ │ │ ├── combo.c
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ ├── rules.mk
│ │ │ │ │ ├── shared_enum.h
│ │ │ │ │ └── tap_dance.c
│ │ │ │ ├── coloneljesus/
│ │ │ │ │ ├── config.h
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ └── keymap.c
│ │ │ │ └── narze/
│ │ │ │ ├── README.md
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── main.c
│ │ │ ├── matrix.c
│ │ │ ├── pro_micro/
│ │ │ │ ├── pro_micro.c
│ │ │ │ ├── pro_micro.h
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── usb_usb.c
│ │ │ └── usb_usb.h
│ │ └── xt_usb/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── xt_usb.c
│ │ └── xt_usb.h
│ ├── cool836a/
│ │ ├── config.h
│ │ ├── cool836a.c
│ │ ├── cool836a.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── copenhagen_click/
│ │ └── click_pad_v1/
│ │ ├── click_pad_v1.c
│ │ ├── click_pad_v1.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── coseyfannitutti/
│ │ ├── discipad/
│ │ │ ├── config.h
│ │ │ ├── discipad.c
│ │ │ ├── discipad.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── discipline/
│ │ │ ├── config.h
│ │ │ ├── discipline.c
│ │ │ ├── discipline.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── brandonschlack/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── iso/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── noroadsleft/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ ├── osx/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── mullet/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── alternate/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── mullet.c
│ │ │ ├── mullet.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── mulletpad/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── mulletpad.c
│ │ │ ├── mulletpad.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── mysterium/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── ansi_7u/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ ├── iso/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mysterium.c
│ │ │ ├── mysterium.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── romeo/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── brandonschlack/
│ │ │ │ └── keymap.c
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── romeo.c
│ │ ├── romeo.h
│ │ └── rules.mk
│ ├── cozykeys/
│ │ ├── bloomer/
│ │ │ ├── bloomer.c
│ │ │ ├── bloomer.h
│ │ │ ├── config.h
│ │ │ ├── readme.md
│ │ │ ├── v2/
│ │ │ │ ├── config.h
│ │ │ │ ├── info.json
│ │ │ │ ├── keymaps/
│ │ │ │ │ └── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── readme.md
│ │ │ │ ├── rules.mk
│ │ │ │ ├── v2.c
│ │ │ │ └── v2.h
│ │ │ └── v3/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── v3.c
│ │ │ └── v3.h
│ │ └── speedo/
│ │ ├── readme.md
│ │ ├── speedo.c
│ │ ├── speedo.h
│ │ ├── v2/
│ │ │ ├── .noci
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── v2.c
│ │ │ └── v2.h
│ │ └── v3/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── rules.mk
│ │ ├── v3.c
│ │ └── v3.h
│ ├── craftwalk/
│ │ ├── config.h
│ │ ├── craftwalk.c
│ │ ├── craftwalk.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── crawlpad/
│ │ ├── config.h
│ │ ├── crawlpad.c
│ │ ├── crawlpad.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── crazy_keyboard_68/
│ │ ├── config.h
│ │ ├── crazy_keyboard_68.c
│ │ ├── crazy_keyboard_68.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── crbn/
│ │ ├── config.h
│ │ ├── crbn.c
│ │ ├── crbn.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── crin/
│ │ ├── config.h
│ │ ├── crin.c
│ │ ├── crin.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── crkbd/
│ │ ├── .noci
│ │ ├── config.h
│ │ ├── crkbd.c
│ │ ├── crkbd.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── armand1m/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── curry/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── davidrambo/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── devdev/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── dsanchezseco/
│ │ │ │ ├── README.md
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── logo_reader.c
│ │ │ │ └── rules.mk
│ │ │ ├── edvorakjp/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── oled.c
│ │ │ │ ├── oled.h
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── gotham/
│ │ │ │ ├── README.md
│ │ │ │ ├── config.h
│ │ │ │ ├── glcdfont.c
│ │ │ │ ├── keycodes.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── oled.c
│ │ │ │ ├── rgb.c
│ │ │ │ └── rules.mk
│ │ │ ├── hvp/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── jarred/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── kidbrazil/
│ │ │ │ ├── README.md
│ │ │ │ ├── config.h
│ │ │ │ ├── enums.h
│ │ │ │ ├── glcdfont.c
│ │ │ │ ├── keymap.c
│ │ │ │ ├── kidbrazil.json
│ │ │ │ ├── layer.c
│ │ │ │ ├── layer.h
│ │ │ │ ├── logo_reader.c
│ │ │ │ └── rules.mk
│ │ │ ├── madhatter/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcrown/
│ │ │ │ ├── config.h
│ │ │ │ ├── glcdfont.c
│ │ │ │ ├── keymap.c
│ │ │ │ ├── mcrown.h
│ │ │ │ ├── oled.c
│ │ │ │ ├── oled.h
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── ninjonas/
│ │ │ │ ├── README.md
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── oled_sample/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── oo/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── rarick/
│ │ │ │ ├── config.h
│ │ │ │ ├── glcdfont.c
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── rjhilgefort/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── rpbaptist/
│ │ │ │ ├── config.h
│ │ │ │ ├── glcdfont.c
│ │ │ │ ├── glcdfont_godspeed.c
│ │ │ │ ├── glcdfont_laser.c
│ │ │ │ ├── glcdfont_pulse.c
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── rs/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── oled.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── snowe/
│ │ │ │ ├── config.h
│ │ │ │ ├── keycode_aliases.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── soundmonster/
│ │ │ │ ├── README.md
│ │ │ │ ├── config.h
│ │ │ │ ├── glcdfont.c
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── sulrich/
│ │ │ │ ├── README.md
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── thumb_ctrl/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── tominabox1/
│ │ │ │ └── keymap.c
│ │ │ ├── vayashiko/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── via/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── vlukash_trackpad_left/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── vlukash_trackpad_right/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ ├── rules.mk
│ │ │ │ ├── trackpad.c
│ │ │ │ └── trackpad.h
│ │ │ ├── vxid/
│ │ │ │ ├── README.md
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ └── xyverz/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── lib/
│ │ │ ├── glcdfont.c
│ │ │ ├── host_led_state_reader.c
│ │ │ ├── i2c.c
│ │ │ ├── i2c.h
│ │ │ ├── keylogger.c
│ │ │ ├── layer_state_reader.c
│ │ │ ├── logo_reader.c
│ │ │ ├── mode_icon_reader.c
│ │ │ ├── rgb_state_reader.c
│ │ │ └── timelogger.c
│ │ ├── post_config.h
│ │ ├── readme.md
│ │ ├── rev1/
│ │ │ ├── common/
│ │ │ │ ├── .noci
│ │ │ │ └── rules.mk
│ │ │ ├── config.h
│ │ │ ├── legacy/
│ │ │ │ ├── .noci
│ │ │ │ └── rules.mk
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ └── rules.mk
│ ├── crkbd_ecwl/
│ │ ├── bmp/
│ │ │ ├── bmp.c
│ │ │ ├── config.h
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── no_msc/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── rules.mk
│ │ ├── config.h
│ │ ├── crkbd_ecwl.c
│ │ ├── crkbd_ecwl.h
│ │ ├── info.json
│ │ ├── ld/
│ │ │ └── nrf52840_ao.ld
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── cu24/
│ │ ├── config.h
│ │ ├── cu24.c
│ │ ├── cu24.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── cu75/
│ │ ├── .noci
│ │ ├── config.h
│ │ ├── cu75.c
│ │ ├── cu75.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ └── iso/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── cu80/
│ │ ├── config.h
│ │ ├── cu80.c
│ │ ├── cu80.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── custommk/
│ │ └── genesis/
│ │ ├── config.h
│ │ ├── readme.md
│ │ ├── rev1/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── numpad/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rev1.c
│ │ │ ├── rev1.h
│ │ │ └── rules.mk
│ │ ├── rev2/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── numpad/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rev2.c
│ │ │ ├── rev2.h
│ │ │ └── rules.mk
│ │ └── rules.mk
│ ├── cutie_club/
│ │ ├── borsdorf/
│ │ │ ├── borsdorf.c
│ │ │ ├── borsdorf.h
│ │ │ ├── chconf.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mcuconf.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── giant_macro_pad/
│ │ │ ├── config.h
│ │ │ ├── giant_macro_pad.c
│ │ │ ├── giant_macro_pad.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ └── keymap.c
│ │ │ │ └── via/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── wraith/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── amber/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── timer/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── wraith.c
│ │ └── wraith.h
│ ├── cx60/
│ │ ├── config.h
│ │ ├── cx60.c
│ │ ├── cx60.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ └── via_caps/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── cybergear/
│ │ └── macro25/
│ │ ├── LICENSE
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── macro25.c
│ │ ├── macro25.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── daji/
│ │ └── seis_cinco/
│ │ ├── chconf.h
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── split_backspace/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── mcuconf.h
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── seis_cinco.c
│ │ └── seis_cinco.h
│ ├── db/
│ │ └── db63/
│ │ ├── config.h
│ │ ├── db63.c
│ │ ├── db63.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── dc01/
│ │ ├── arrow/
│ │ │ ├── arrow.c
│ │ │ ├── arrow.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── matrix.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── left/
│ │ │ ├── config.h
│ │ │ ├── i2c.c
│ │ │ ├── i2c.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── left.c
│ │ │ ├── left.h
│ │ │ ├── matrix.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── numpad/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── ortho_5x4/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── matrix.c
│ │ │ ├── numpad.c
│ │ │ ├── numpad.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── right/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ ├── right.c
│ │ ├── right.h
│ │ └── rules.mk
│ ├── dekunukem/
│ │ └── duckypad/
│ │ ├── chconf.h
│ │ ├── config.h
│ │ ├── duckypad.c
│ │ ├── duckypad.h
│ │ ├── halconf.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── m4cs/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ ├── rules.mk
│ │ │ │ └── sysinfo.py
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── mcuconf.h
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── delikeeb/
│ │ ├── flatbread60/
│ │ │ ├── config.h
│ │ │ ├── flatbread60.c
│ │ │ ├── flatbread60.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── vaguettelite/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── default_625u_universal/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── noclew/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── vaguettelite.c
│ │ │ └── vaguettelite.h
│ │ ├── vanana/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rev1/
│ │ │ │ ├── config.h
│ │ │ │ ├── rev1.c
│ │ │ │ ├── rev1.h
│ │ │ │ └── rules.mk
│ │ │ ├── rev2/
│ │ │ │ ├── config.h
│ │ │ │ ├── rev2.c
│ │ │ │ ├── rev2.h
│ │ │ │ └── rules.mk
│ │ │ └── rules.mk
│ │ ├── vaneela/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── vaneela.c
│ │ │ └── vaneela.h
│ │ ├── vaneelaex/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── vaneelaex.c
│ │ │ └── vaneelaex.h
│ │ └── waaffle/
│ │ ├── config.h
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rev3/
│ │ ├── config.h
│ │ ├── elite_c/
│ │ │ └── rules.mk
│ │ ├── info.json
│ │ ├── pro_micro/
│ │ │ └── rules.mk
│ │ ├── rev3.c
│ │ ├── rev3.h
│ │ └── rules.mk
│ ├── delilah/
│ │ ├── config.h
│ │ ├── delilah.c
│ │ ├── delilah.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── deltasplit75/
│ │ ├── deltasplit75.c
│ │ ├── deltasplit75.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── itsaferbie/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── mbsurfer/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── protosplit/
│ │ │ ├── config.h
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ └── v2/
│ │ ├── config.h
│ │ ├── rules.mk
│ │ ├── v2.c
│ │ └── v2.h
│ ├── dichotomy/
│ │ ├── config.h
│ │ ├── dichotomy.c
│ │ ├── dichotomy.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── alairock/
│ │ │ │ └── keymap.c
│ │ │ ├── beat/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── dinofizz/
│ │ └── fnrow/
│ │ └── v1/
│ │ ├── chconf.h
│ │ ├── config.h
│ │ ├── halconf.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── mcuconf.h
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── v1.c
│ │ └── v1.h
│ ├── diverge3/
│ │ ├── config.h
│ │ ├── diverge3.c
│ │ ├── diverge3.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── iso_uk/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ └── workman/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── divergetm2/
│ │ ├── config.h
│ │ ├── divergetm2.c
│ │ ├── divergetm2.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── xtonhasvim/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── dk60/
│ │ ├── config.h
│ │ ├── dk60.c
│ │ ├── dk60.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ └── keymap.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── dm9records/
│ │ ├── ergoinu/
│ │ │ ├── .noci
│ │ │ ├── config.h
│ │ │ ├── ergoinu.c
│ │ │ ├── ergoinu.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ └── default_jis/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── matrix.c
│ │ │ ├── readme.md
│ │ │ ├── rules.mk
│ │ │ ├── serial.c
│ │ │ ├── serial.h
│ │ │ ├── serial_config.h
│ │ │ ├── split_util.c
│ │ │ └── split_util.h
│ │ ├── plaid/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── brickbots/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── gipsy-king/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── stephen-huan/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── thehalfdeafchef/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── plaid.c
│ │ │ ├── plaid.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── tartan/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── tartan.c
│ │ └── tartan.h
│ ├── dmqdesign/
│ │ └── spin/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── codecoffeecode/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── encoderlayers/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── gorbachev/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── spidey3_pad/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── spin.c
│ │ └── spin.h
│ ├── do60/
│ │ ├── config.h
│ │ ├── do60.c
│ │ ├── do60.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── crd/
│ │ │ │ └── keymap.c
│ │ │ ├── default/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── test/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── donutcables/
│ │ ├── budget96/
│ │ │ ├── budget96.c
│ │ │ ├── budget96.h
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── donut/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ ├── readme.md
│ │ │ │ │ └── rules.mk
│ │ │ │ └── via/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── scrabblepad/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── random/
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rules.mk
│ │ ├── scrabblepad.c
│ │ └── scrabblepad.h
│ ├── doodboard/
│ │ ├── duckboard/
│ │ │ ├── config.h
│ │ │ ├── duckboard.c
│ │ │ ├── duckboard.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ └── default/
│ │ │ │ └── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ └── duckboard_r2/
│ │ ├── config.h
│ │ ├── duckboard_r2.c
│ │ ├── duckboard_r2.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── doppelganger/
│ │ ├── config.h
│ │ ├── doppelganger.c
│ │ ├── doppelganger.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ └── default/
│ │ │ ├── keymap.c
│ │ │ └── readme.md
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── doro67/
│ │ ├── multi/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── default_iso/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── default_multi/
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ ├── konstantin/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── rules.mk
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── multi.c
│ │ │ ├── multi.h
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── regular/
│ │ │ ├── config.h
│ │ │ ├── info.json
│ │ │ ├── keymaps/
│ │ │ │ ├── default/
│ │ │ │ │ ├── config.h
│ │ │ │ │ ├── keymap.c
│ │ │ │ │ └── readme.md
│ │ │ │ └── via/
│ │ │ │ ├── keymap.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ ├── readme.md
│ │ │ ├── regular.c
│ │ │ ├── regular.h
│ │ │ └── rules.mk
│ │ └── rgb/
│ │ ├── config.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ ├── readme.md
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ ├── rgb.c
│ │ ├── rgb.h
│ │ └── rules.mk
│ ├── dozen0/
│ │ ├── config.h
│ │ ├── dozen0.c
│ │ ├── dozen0.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ ├── config.h
│ │ │ │ ├── keymap.c
│ │ │ │ └── readme.md
│ │ │ ├── f12/
│ │ │ │ ├── config.h
│ │ │ │ └── keymap.c
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── dp60/
│ │ ├── config.h
│ │ ├── dp60.c
│ │ ├── dp60.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── allleds/
│ │ │ │ ├── keymap.c
│ │ │ │ └── rules.mk
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ ├── indicator/
│ │ │ │ ├── config.h
│ │ │ │ ├── indicator.c
│ │ │ │ ├── keymap.c
│ │ │ │ ├── led_driver.c
│ │ │ │ ├── readme.md
│ │ │ │ └── rules.mk
│ │ │ └── via/
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── matrix.c
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── draculad/
│ │ ├── config.h
│ │ ├── draculad.c
│ │ ├── draculad.h
│ │ ├── info.json
│ │ ├── keymaps/
│ │ │ ├── default/
│ │ │ │ └── keymap.c
│ │ │ └── pimoroni/
│ │ │ ├── config.h
│ │ │ ├── keymap.c
│ │ │ └── rules.mk
│ │ ├── readme.md
│ │ └── rules.mk
│ ├── draytronics/
│ │ ├── daisy/
│ │ │ ├── config.h
│ │ │ ├── daisy.c
================================================
FILE CONTENTS
================================================
================================================
FILE: .clang-format
================================================
---
BasedOnStyle: Google
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: 'true'
AlignConsecutiveDeclarations: 'true'
AlignOperands: 'true'
AllowAllParametersOfDeclarationOnNextLine: 'false'
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: 'false'
BinPackArguments: 'true'
BinPackParameters: 'true'
ColumnLimit: '80'
IndentCaseLabels: 'true'
IndentPPDirectives: AfterHash
IndentWidth: '4'
MaxEmptyLinesToKeep: '1'
PointerAlignment: Right
SortIncludes: 'false'
SpaceBeforeAssignmentOperators: 'true'
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: 'false'
TabWidth: '4'
UseTab: Never
...
================================================
FILE: .editorconfig
================================================
# EditorConfig helps developers define and maintain consistent coding styles between different editors and IDEs
# editorconfig.org
root = true
[*]
indent_style = space
indent_size = 4
# We recommend you to keep these unchanged
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false
indent_size = 4
[{qmk,*.py}]
charset = utf-8
max_line_length = 200
# Make these match what we have in .gitattributes
[*.mk]
end_of_line = lf
indent_style = tab
[Makefile]
end_of_line = lf
indent_style = tab
[*.sh]
end_of_line = lf
# The gitattributes file will handle the line endings conversion properly according to the operating system settings for other files
# We don't have gitattributes properly for these
# So if the user have for example core.autocrlf set to true
# the line endings would be wrong.
[lib/**]
end_of_line = unset
================================================
FILE: .gitattributes
================================================
# auto for anything unspecified
* text=auto
# sources
*.c text
*.cc text
*.cxx text
*.cpp text
*.c++ text
*.hpp text
*.h text
*.h++ text
*.hh text
*.bat text
*.coffee text
*.css text
*.htm text
*.html text
*.inc text
*.ini text
*.js text
*.jsx text
*.json text
*.less text
*.php text
*.pl text
*.py text
*.rb text
*.sass text
*.scm text
*.scss text
*.sh text
*.sql text
*.styl text
*.ts text
*.xml text
*.xhtml text
# make files (need to always use lf for compatibility with Windows 10 bash)
Makefile eol=lf
*.mk eol=lf
# make files (need to always use lf for compatibility with Windows 10 bash)
*.sh eol=lf
# documentation
*.markdown text
*.md text
*.mdwn text
*.mdown text
*.mkd text
*.mkdn text
*.mdtxt text
*.mdtext text
*.txt text
AUTHORS text
CHANGELOG text
CHANGES text
CONTRIBUTING text
COPYING text
INSTALL text
license text
LICENSE text
NEWS text
readme text
*README* text
TODO text
GRAPHICS
*.ai binary
*.bmp binary
*.eps binary
*.gif binary
*.ico binary
*.jng binary
*.jp2 binary
*.jpg binary
*.jpeg binary
*.jpx binary
*.jxr binary
*.pdf binary
*.png binary
*.psb binary
*.psd binary
*.svg text
*.svgz binary
*.tif binary
*.tiff binary
*.wbmp binary
*.webp binary
# hex files
*.hex binary
*.eep binary
nix/sources.nix linguist-generated=true
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve QMK Firmware.
title: "[Bug] "
labels: bug, help wanted
assignees: ''
---
<!-- Provide a general summary of the bug in the title above. -->
<!--- This template is entirely optional and can be removed, but is here to help both you and us. -->
<!--- Anything on lines wrapped in comments like these will not show up in the final text. -->
## Describe the Bug
<!-- A clear and concise description of what the bug is. -->
## System Information
- Keyboard:
- Revision (if applicable):
- Operating system:
- AVR GCC version:
<!-- Run `avr-gcc --version` to find this out. -->
- ARM GCC version:
<!-- Run `arm-none-eabi-gcc --version` to find this out. -->
- QMK Firmware version:
<!-- Run `git describe --abbrev=0 --tags` to find this out. -->
- Any keyboard related software installed?
- [ ] AutoHotKey
- [ ] Karabiner
- [ ] Other:
## Additional Context
<!-- Add any other relevant information about the problem here. -->
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: QMK Discord
url: https://discord.gg/Uq7gcHh
about: Ask questions, discuss issues and features. Chill.
- name: OLKB Subreddit
url: https://www.reddit.com/r/olkb
about: All things OLKB and QMK.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest a new feature or changes to existing features.
title: "[Feature Request] "
labels: enhancement, help wanted
assignees: ''
---
<!--- Provide a general summary of the changes you want in the title above. -->
<!--- This template is entirely optional and can be removed, but is here to help both you and us. -->
<!--- Anything on lines wrapped in comments like these will not show up in the final text. -->
## Feature Request Type
- [ ] Core functionality
- [ ] Add-on hardware support (eg. audio, RGB, OLED screen, etc.)
- [ ] Alteration (enhancement/optimization) of existing feature(s)
- [ ] New behavior
## Description
<!-- A few sentences describing what it is that you'd like to see in QMK. Additional information (such as links to spec sheets, licensing info, other related issues or PRs, etc) would be helpful. -->
================================================
FILE: .github/ISSUE_TEMPLATE/other_issues.md
================================================
---
name: Other issues
about: Anything else that doesn't fall into the above categories.
title: ''
labels: help wanted, question
assignees: ''
---
<!--- Provide a general summary of the changes you want in the title above. -->
<!--- Anything on lines wrapped in comments like these will not show up in the final text. -->
<!-- Please check https://docs.qmk.fm/#/support for additional resources first. If that doesn't answer your question, choose the bug report template instead, as that may be more appropriate. -->
================================================
FILE: .github/ISSUE_TEMPLATE/zzz_blank.md
================================================
---
name: Blank issue
about: If you're 100% sure that you don't need one of the other issue templates, use
this one instead.
title: ''
labels: help wanted, question
assignees: ''
---
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--- Provide a general summary of your changes in the title above. -->
<!--- This template is entirely optional and can be removed, but is here to help both you and us. -->
<!--- Anything on lines wrapped in comments like these will not show up in the final text. -->
## Description
<!--- Describe your changes in detail here. -->
## Types of Changes
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply. -->
- [ ] Core
- [ ] Bugfix
- [ ] New feature
- [ ] Enhancement/optimization
- [ ] Keyboard (addition or update)
- [ ] Keymap/layout/userspace (addition or update)
- [ ] Documentation
## Issues Fixed or Closed by This PR
*
## Checklist
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [ ] My code follows the code style of this project: [**C**](https://docs.qmk.fm/#/coding_conventions_c), [**Python**](https://docs.qmk.fm/#/coding_conventions_python)
- [ ] I have read the [**PR Checklist** document](https://docs.qmk.fm/#/pr_checklist) and have made the appropriate changes.
- [ ] My change requires a change to the documentation.
- [ ] I have updated the documentation accordingly.
- [ ] I have read the [**CONTRIBUTING** document](https://docs.qmk.fm/#/contributing).
- [ ] I have added tests to cover my changes.
- [ ] I have tested the changes and verified that they work and don't break anything (as well as I can manage).
================================================
FILE: .github/labeler.yml
================================================
core:
- quantum/**/*
- tmk_core/**/*
- drivers/**/*
- tests/**/*
- util/**/*
- platforms/**/*
- Makefile
- '*.mk'
dependencies:
- any:
- 'lib/**/*'
- '!lib/python/**/*'
keyboard:
- any:
- 'keyboards/**/*'
- '!keyboards/**/keymaps/**/*'
keymap:
- users/**/*
- layouts/**/*
- keyboards/**/keymaps/**/*
via:
- keyboards/**/keymaps/via/*
cli:
- bin/qmk
- requirements.txt
- lib/python/**/*
python:
- '**/*.py'
documentation:
- docs/**/*
translation:
- docs/fr-fr/**/*
- docs/es/**/*
- docs/ja/**/*
- docs/he-il/**/*
- docs/pt-br/**/*
- docs/zh-cn/**/*
- docs/de/**/*
- docs/ru-ru/**/*
CI:
- .github/**/*
================================================
FILE: .github/stale.yml
================================================
# Configuration for probot-stale - https://github.com/probot/stale
# General configuration
# Pull request specific configuration
pulls:
staleLabel: awaiting changes
# Number of days of inactivity before an Issue or Pull Request becomes stale
daysUntilStale: 45
# Number of days of inactivity before a stale Issue or Pull Request is closed.
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
daysUntilClose: 30
# Comment to post when marking as stale. Set to `false` to disable
markComment: >
Thank you for your contribution!
This pull request has been automatically marked as stale because it has not had
activity in the last 45 days. It will be closed in 30 days if no further activity occurs.
Please feel free to give a status update now, or re-open when it's ready.
For maintainers: Please label with `awaiting review`, `breaking_change`, `in progress`, or `on hold` to prevent
the issue from being re-flagged.
# Comment to post when closing a stale Issue or Pull Request.
closeComment: >
Thank you for your contribution!
This pull request has been automatically closed because it has not had activity in the last 30 days.
Please feel free to give a status update now, ping for review, or re-open when it's ready.
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 30
exemptLabels:
- awaiting review
- breaking_change
- in progress
- on hold
# Issue specific configuration
issues:
staleLabel: stale
limitPerRun: 10
daysUntilStale: 90
daysUntilClose: 30
markComment: >
This issue has been automatically marked as stale because it has not had activity in the
last 90 days. It will be closed in the next 30 days unless it is tagged properly or other activity
occurs.
For maintainers: Please label with `bug`, `in progress`, `on hold`, `discussion` or `to do` to prevent
the issue from being re-flagged.
closeComment: >
This issue has been automatically closed because it has not had activity in the last 30 days.
If this issue is still valid, re-open the issue and let us know.
exemptLabels:
- bug
- in progress
- on hold
- discussion
- to do
================================================
FILE: .github/workflows/api.yml
================================================
name: Update API Data
on:
push:
branches:
- master
paths:
- 'keyboards/**'
- 'layouts/community/**'
workflow_dispatch:
jobs:
api_data:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
# protect against those who develop with their fork on master
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
persist-credentials: false
- name: Generate API Data
run: qmk generate-api
- name: Upload API Data
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --follow-symlinks --delete
env:
AWS_S3_BUCKET: ${{ secrets.API_SPACE_MASTER }}
AWS_ACCESS_KEY_ID: ${{ secrets.SPACES_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SPACES_SECRET_KEY }}
AWS_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
SOURCE_DIR: 'api_data'
================================================
FILE: .github/workflows/auto_tag.yaml
================================================
name: Essential files modified
on:
push:
branches:
- master
paths:
- quantum/**/*
- tmk_core/**/*
- drivers/**/*
- tests/**/*
- util/**/*
- platforms/**/*
- Makefile
- '*.mk'
jobs:
tag:
runs-on: ubuntu-latest
# protect against those who develop with their fork on master
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Bump version and push tag
uses: anothrNick/github-tag-action@1.26.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DEFAULT_BUMP: 'patch'
================================================
FILE: .github/workflows/build_bmp_default.yml
================================================
# This is a basic workflow to help you get started with Actions
name: Build default firmware for BLE Micro Pro
# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the dev/ble_micro_pro branch
push:
branches: [ dev/ble_micro_pro ]
pull_request:
branches: [ dev/ble_micro_pro ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
container: qmkfm/base_container
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
- name: Install dependencies
run: python3 -m pip install qmk
# Runs a single command using the runners shell
- name: git config
run: git config --global --add safe.directory /__w/qmk_firmware/qmk_firmware
- name: Build ble_micro_pro firmware
run: make ble_micro_pro:default:uf2
- name: Build keyboard_quantizer_b firmware
run: make keyboard_quantizer/kqb:default:uf2
- uses: actions/upload-artifact@v2
with:
name: default_firmware_uf2
path: ./*.uf2
================================================
FILE: .github/workflows/cli.yml
================================================
name: CLI CI
on:
push:
branches:
- master
- future
pull_request:
paths:
- 'lib/python/**'
- 'bin/qmk'
- 'requirements.txt'
- '.github/workflows/cli.yml'
jobs:
test:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
steps:
- uses: actions/checkout@v2
with:
submodules: recursive
- name: Install dependencies
run: pip3 install -r requirements-dev.txt
- name: Run tests
run: qmk pytest
================================================
FILE: .github/workflows/develop_api.yml
================================================
name: Update Develop API Data
on:
push:
branches:
- develop
paths:
- 'keyboards/**'
- 'layouts/community/**'
workflow_dispatch:
jobs:
api_data:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
# protect against those who work in their fork on develop
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
persist-credentials: false
- name: Generate API Data
run: qmk generate-api
- name: Upload API Data
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --follow-symlinks --delete
env:
AWS_S3_BUCKET: ${{ secrets.API_SPACE_DEVELOP }}
AWS_ACCESS_KEY_ID: ${{ secrets.SPACES_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SPACES_SECRET_KEY }}
AWS_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
SOURCE_DIR: 'api_data'
================================================
FILE: .github/workflows/develop_update.yml
================================================
name: Update develop after master merge
on:
push:
branches:
- master
jobs:
develop_update:
runs-on: ubuntu-latest
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Checkout develop
run: |
git fetch origin master develop
git checkout develop
- name: Check if branch locked
id: check_locked
uses: andstor/file-existence-action@v1
with:
files: ".locked"
- name: Update develop from master
if: steps.check_locked.outputs.files_exists == 'false'
run: |
git config --global user.name "QMK Bot"
git config --global user.email "hello@qmk.fm"
git merge origin/master
git push origin develop
================================================
FILE: .github/workflows/docs.yml
================================================
name: Generate Docs
on:
push:
branches:
- master
paths:
- 'tmk_core/**'
- 'quantum/**'
- 'platforms/**'
- 'docs/**'
- '.github/workflows/docs.yml'
jobs:
generate:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
# protect against those who develop with their fork on master
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- name: Install dependencies
run: |
apt-get update && apt-get install -y rsync nodejs npm doxygen
npm install -g moxygen
- name: Build docs
run: |
qmk --verbose generate-docs
- name: Deploy
uses: JamesIves/github-pages-deploy-action@3.7.1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BASE_BRANCH: master
BRANCH: gh-pages
FOLDER: .build/docs
GIT_CONFIG_EMAIL: hello@qmk.fm
================================================
FILE: .github/workflows/format.yaml
================================================
name: PR Lint Format
on:
pull_request:
paths:
- 'drivers/**'
- 'lib/arm_atsam/**'
- 'lib/lib8tion/**'
- 'lib/python/**'
- 'platforms/**'
- 'quantum/**'
- 'tests/**'
- 'tmk_core/**'
jobs:
lint:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
steps:
- uses: rlespinasse/github-slug-action@v3.x
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: trilom/file-changes-action@v1.2.4
id: file_changes
with:
output: ' '
fileOutput: ' '
- name: Run qmk format-c and qmk format-python
shell: 'bash {0}'
run: |
qmk format-c --core-only -n $(< ~/files.txt)
format_c_exit=$?
qmk format-python -n
format_python_exit=$?
exit $((format_c_exit + format_python_exit))
================================================
FILE: .github/workflows/labeler.yml
================================================
name: "Pull Request Labeler"
on:
pull_request_target:
types: [opened, synchronize, reopened, ready_for_review, locked]
jobs:
triage:
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@main
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
configuration-path: '.github/labeler.yml'
================================================
FILE: .github/workflows/lint.yml
================================================
name: PR Lint keyboards
on:
pull_request:
paths:
- 'keyboards/**'
jobs:
lint:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: trilom/file-changes-action@v1.2.4
id: file_changes
with:
output: '\n'
- name: Print info
run: |
git rev-parse --short HEAD
echo ${{ github.event.pull_request.base.sha }}
echo '${{ steps.file_changes.outputs.files}}'
- name: Run qmk lint
shell: 'bash {0}'
run: |
QMK_CHANGES=$(echo -e '${{ steps.file_changes.outputs.files}}')
QMK_KEYBOARDS=$(qmk list-keyboards)
exit_code=0
for KB in $QMK_KEYBOARDS; do
KEYBOARD_CHANGES=$(echo "$QMK_CHANGES" | grep -E '^(keyboards/'${KB}'/)')
if [[ -z "$KEYBOARD_CHANGES" ]]; then
# skip as no changes for this keyboard
continue
fi
KEYMAP_ONLY=$(echo "$KEYBOARD_CHANGES" | grep -cv /keymaps/)
if [[ $KEYMAP_ONLY -gt 0 ]]; then
echo "linting ${KB}"
qmk lint --keyboard ${KB} && qmk info -l --keyboard ${KB}
exit_code=$(($exit_code + $?))
fi
done
if [[ $exit_code -gt 255 ]]; then
exit 255
fi
exit $exit_code
================================================
FILE: .gitignore
================================================
# Junk files
*.bak
*.swp
*~
.DS_Store
# Build artifacts
.clang_complete
.build/
*.elf
*.log
*.lss
*.lst
*.map
*.o
*.stackdump
*.sym
# QMK-specific
api_data/v1
doxygen/
quantum/version.h
*.bin
*.eep
*.hex
*.qmk
*.uf2
# Old-style QMK Makefiles
/keyboards/*/Makefile
/keyboards/*/*/Makefile
/keyboards/*/*/*/Makefile
/keyboards/*/*/*/*/Makefile
/keyboards/*/*/*/*/*/Makefile
/keyboards/*/keymaps/Makefile
/keyboards/*/*/keymaps/Makefile
/keyboards/*/*/*/keymaps/Makefile
/keyboards/*/*/*/*/keymaps/Makefile
/keyboards/*/*/*/*/*/keymaps/Makefile
# Eclipse/PyCharm/Other IDE Settings
*.iml
.browse.VC.db*
.cproject
.idea
.idea/
.project
.settings/
.vagrant/
# ?
.dep
.history/
build/
cmake-build-debug
CMakeLists.txt
# Let these ones be user specific, since we have so many different configurations
*.code-workspace
.stfolder
.tags
.vscode/c_cpp_properties.json
.vscode/ipch/
.vscode/last.sql
.vscode/launch.json
.vscode/tasks.json
.vscode/temp.sql
tags
# Ignore image files
*.gif
*.jpg
*.png
# Things Travis sees
/.vs
id_rsa_*
secrets.tar
# Python things
__pycache__
.python-version
# Prerequisites for updating ChibiOS
/util/fmpp*
# Allow to exist but don't include it in the repo
user_song_list.h
================================================
FILE: .gitmodules
================================================
[submodule "lib/chibios"]
path = lib/chibios
url = https://github.com/qmk/ChibiOS
branch = master
[submodule "lib/chibios-contrib"]
path = lib/chibios-contrib
url = https://github.com/qmk/ChibiOS-Contrib
branch = master
[submodule "lib/ugfx"]
path = lib/ugfx
url = https://github.com/qmk/uGFX
branch = master
[submodule "lib/googletest"]
path = lib/googletest
url = https://github.com/qmk/googletest
[submodule "lib/lufa"]
path = lib/lufa
url = https://github.com/qmk/lufa
[submodule "lib/vusb"]
path = lib/vusb
url = https://github.com/qmk/v-usb
[submodule "lib/printf"]
path = lib/printf
url = https://github.com/qmk/printf
================================================
FILE: .vscode/extensions.json
================================================
// Suggested extensions
{
"recommendations": [
"EditorConfig.EditorConfig",
"xaver.clang-format",
"ms-vscode.cpptools",
"bierner.github-markdown-preview",
"donjayamanne.git-extension-pack",
"CoenraadS.bracket-pair-colorizer-2"
]
}
================================================
FILE: .vscode/settings.json
================================================
// Place your settings in this file to overwrite default and user settings.
{
// Unofficially, QMK uses spaces for indentation
"editor.insertSpaces": true,
// Configure glob patterns for excluding files and folders.
"files.exclude": {
"**/.build": true,
"**/*.hex": true,
"**/*.bin": true
},
"files.associations": {
"*.h": "c",
"*.c": "c",
"*.inc": "c",
"*.cpp": "cpp",
"*.hpp": "cpp",
"xstddef": "c",
"type_traits": "c",
"utility": "c",
"ranges": "c"
},
"[markdown]": {
"editor.trimAutoWhitespace": false,
"files.trimTrailingWhitespace": false
},
"python.formatting.provider": "yapf",
"[json]": {
"editor.formatOnSave": false
}
,
"C_Cpp.files.exclude": {
"**/.vscode": true,
"**/.clangd": true,
"**/.cache": true,
"**/.git": true,
"**/.build": true,
}
}
================================================
FILE: Dockerfile
================================================
FROM qmkfm/qmk_cli
VOLUME /qmk_firmware
WORKDIR /qmk_firmware
CMD qmk compile -kb all -km default
================================================
FILE: Doxyfile
================================================
# Doxyfile 1.8.14
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for qmk_firmware (github.com/qmk/qmk_firmware)
#
# All text after a double hash (##) is considered a comment and is placed in
# front of the TAG it is preceding.
#
# All text after a single hash (#) is considered a comment and will be ignored.
# The format is:
# TAG = value [value, ...]
# For lists, items can also be appended using:
# TAG += value [value, ...]
# Values that contain spaces should be placed between quotes (\" \").
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
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 = doxygen
ALLOW_UNICODE_NAMES = NO
OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF = "The $name class" \
"The $name widget" \
"The $name file" \
is \
provides \
specifies \
contains \
represents \
a \
an \
the
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
STRIP_FROM_PATH =
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 4
ALIASES =
TCL_SUBST =
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
EXTENSION_MAPPING =
MARKDOWN_SUPPORT = YES
TOC_INCLUDE_HEADINGS = 2
AUTOLINK_SUPPORT = YES
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
IDL_PROPERTY_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO
GROUP_NESTED_COMPOUNDS = NO
SUBGROUPING = YES
INLINE_GROUPED_CLASSES = NO
INLINE_SIMPLE_STRUCTS = NO
TYPEDEF_HIDES_STRUCT = NO
LOOKUP_CACHE_SIZE = 0
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = NO
EXTRACT_PRIVATE = NO
EXTRACT_PACKAGE = NO
EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = NO
HIDE_SCOPE_NAMES = YES
HIDE_COMPOUND_REFERENCE= NO
SHOW_INCLUDE_FILES = YES
SHOW_GROUPED_MEMB_INC = NO
FORCE_LOCAL_INCLUDES = NO
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
SORT_MEMBERS_CTORS_1ST = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
STRICT_PROTO_MATCHING = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_FILES = YES
SHOW_NAMESPACES = YES
FILE_VERSION_FILTER =
LAYOUT_FILE =
CITE_BIB_FILES =
#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_AS_ERROR = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
# Configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = tmk_core quantum drivers
INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.c \
*.cc \
*.cxx \
*.cpp \
*.c++ \
*.h \
*.hh \
*.hxx \
*.hpp \
*.h++
RECURSIVE = YES
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO
IMAGE_PATH =
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
FILTER_SOURCE_PATTERNS =
USE_MDFILE_AS_MAINPAGE =
#---------------------------------------------------------------------------
# Configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = NO
REFERENCES_RELATION = NO
REFERENCES_LINK_SOURCE = YES
SOURCE_TOOLTIPS = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = YES
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to disabled outputs
#---------------------------------------------------------------------------
GENERATE_HTML = NO
GENERATE_LATEX = NO
GENERATE_RTF = NO
GENERATE_MAN = NO
GENERATE_DOCBOOK = NO
GENERATE_AUTOGEN_DEF = NO
GENERATE_PERLMOD = NO
#---------------------------------------------------------------------------
# Configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = YES
XML_OUTPUT = xml
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED =
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration options related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
EXTERNAL_PAGES = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
MSCGEN_PATH =
DIA_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = NO
DOT_NUM_THREADS = 0
DOT_FONTNAME = Helvetica
DOT_FONTSIZE = 10
DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
UML_LIMIT_NUM_FIELDS = 10
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
INTERACTIVE_SVG = NO
DOT_PATH =
DOTFILE_DIRS =
MSCFILE_DIRS =
DIAFILE_DIRS =
PLANTUML_JAR_PATH =
PLANTUML_CFG_FILE =
PLANTUML_INCLUDE_PATH =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
================================================
FILE: Makefile
================================================
ifndef VERBOSE
.SILENT:
endif
# Never run this makefile in parallel, as it could screw things up
# It won't affect the submakes, so you still get the speedup from specifying -jx
.NOTPARALLEL:
# Allow the silent with lower caps to work the same way as upper caps
ifdef silent
SILENT = $(silent)
endif
ifdef SILENT
SUB_IS_SILENT := $(SILENT)
endif
# We need to make sure that silent is always turned off at the top level
# Otherwise the [OK], [ERROR] and [WARN] messages won't be displayed correctly
override SILENT := false
ifndef SUB_IS_SILENT
ifndef SKIP_GIT
QMK_VERSION := $(shell git describe --abbrev=0 --tags 2>/dev/null)
endif
ifneq ($(QMK_VERSION),)
$(info QMK Firmware $(QMK_VERSION))
endif
endif
# Determine which qmk cli to use
ifeq (,$(shell which qmk))
QMK_BIN = bin/qmk
else
QMK_BIN = qmk
endif
# avoid 'Entering|Leaving directory' messages
MAKEFLAGS += --no-print-directory
ON_ERROR := error_occurred=1
BREAK_ON_ERRORS = no
STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST))
ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST))
ROOT_DIR := $(dir $(ROOT_MAKEFILE))
ifeq ($(ROOT_DIR),)
ROOT_DIR := .
endif
ABS_STARTING_MAKEFILE := $(abspath $(STARTING_MAKEFILE))
ABS_ROOT_MAKEFILE := $(abspath $(ROOT_MAKEFILE))
ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE))
ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE))
STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR))
BUILD_DIR := $(ROOT_DIR)/.build
TEST_DIR := $(BUILD_DIR)/test
ERROR_FILE := $(BUILD_DIR)/error_occurred
MAKEFILE_INCLUDED=yes
# Helper function to process the newt element of a space separated path
# It works a bit like the traditional functional head tail
# so the CURRENT_PATH_ELEMENT will become the new head
# and the PATH_ELEMENTS are the rest that are still unprocessed
define NEXT_PATH_ELEMENT
$$(eval CURRENT_PATH_ELEMENT := $$(firstword $$(PATH_ELEMENTS)))
$$(eval PATH_ELEMENTS := $$(wordlist 2,9999,$$(PATH_ELEMENTS)))
endef
# We change the / to spaces so that we more easily can work with the elements
# separately
PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR))
# Initialize the path elements list for further processing
$(eval $(call NEXT_PATH_ELEMENT))
# Phony targets to enable a few simple make commands outside the main processing below.
.PHONY: list-keyboards
list-keyboards:
util/list_keyboards.sh | sort -u | tr '\n' ' '
.PHONY: generate-keyboards-file
generate-keyboards-file:
util/list_keyboards.sh | sort -u
.PHONY: clean
clean:
echo -n 'Deleting .build/ ... '
rm -rf $(BUILD_DIR)
echo 'done.'
.PHONY: distclean
distclean: clean
echo -n 'Deleting *.bin, *.hex, and *.uf2 ... '
rm -f *.bin *.hex *.uf2
echo 'done.'
#Compatibility with the old make variables, anything you specify directly on the command line
# always overrides the detected folders
ifdef keyboard
KEYBOARD := $(keyboard)
endif
ifdef keymap
KEYMAP := $(keymap)
endif
# Uncomment these for debugging
# $(info Keyboard: $(KEYBOARD))
# $(info Keymap: $(KEYMAP))
# Set the default goal depending on where we are running make from
# this handles the case where you run make without any arguments
.DEFAULT_GOAL := all:all
ifneq ($(KEYMAP),)
.DEFAULT_GOAL := $(KEYBOARD):$(KEYMAP)
else ifneq ($(KEYBOARD),)
# Inside a keyboard folder, build all keymaps for all subprojects
# Note that this is different from the old behaviour, which would
# build only the default keymap of the default keyboard
.DEFAULT_GOAL := $(KEYBOARD):all
endif
# Compare the start of the RULE variable with the first argument($1)
# If the rules equals $1 or starts with $1:, RULE_FOUND is set to true
# and $1 is removed from the RULE variable
# Otherwise the RULE_FOUND variable is set to false, and RULE left as it was
# The function is a bit tricky, since there's no built in $(startswith) function
define COMPARE_AND_REMOVE_FROM_RULE_HELPER
ifeq ($1,$$(RULE))
RULE:=
RULE_FOUND := true
else
STARTCOLON_REMOVED=$$(subst START$1:,,START$$(RULE))
ifneq ($$(STARTCOLON_REMOVED),START$$(RULE))
RULE_FOUND := true
RULE := $$(STARTCOLON_REMOVED)
else
RULE_FOUND := false
endif
endif
endef
# This makes it easier to call COMPARE_AND_REMOVE_FROM_RULE, since it makes it behave like
# a function that returns the value
COMPARE_AND_REMOVE_FROM_RULE = $(eval $(call COMPARE_AND_REMOVE_FROM_RULE_HELPER,$1))$(RULE_FOUND)
# Recursively try to find a match for the start of the rule to be checked
# $1 The list to be checked
# If a match is found, then RULE_FOUND is set to true
# and MATCHED_ITEM to the item that was matched
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER3
ifneq ($1,)
ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1)),true)
MATCHED_ITEM := $$(firstword $1)
else
$$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$$(wordlist 2,9999,$1)))
endif
endif
endef
# A recursive helper function for finding the longest match
# $1 The list to be checked
# It works by always removing the currently matched item from the list
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2
# Stop the recursion when the list is empty
ifneq ($1,)
RULE_BEFORE := $$(RULE)
$$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$1))
# If a match is found in the current list, otherwise just return what we had before
ifeq ($$(RULE_FOUND),true)
# Save the best match so far and call itself recursively
BEST_MATCH := $$(MATCHED_ITEM)
BEST_MATCH_RULE := $$(RULE)
RULE_FOUND := false
RULE := $$(RULE_BEFORE)
$$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER2,$$(filter-out $$(MATCHED_ITEM),$1)))
endif
endif
endef
# Recursively try to find the longest match for the start of the rule to be checked
# $1 The list to be checked
# If a match is found, then RULE_FOUND is set to true
# and MATCHED_ITEM to the item that was matched
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER
BEST_MATCH :=
$$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER2,$1))
ifneq ($$(BEST_MATCH),)
RULE_FOUND := true
RULE := $$(BEST_MATCH_RULE)
MATCHED_ITEM := $$(BEST_MATCH)
else
RULE_FOUND := false
MATCHED_ITEM :=
endif
endef
# Make it easier to call TRY_TO_MATCH_RULE_FROM_LIST
TRY_TO_MATCH_RULE_FROM_LIST = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$1))$(RULE_FOUND)
define ALL_IN_LIST_LOOP
OLD_RULE$1 := $$(RULE)
$$(eval $$(call $1,$$(ITEM$1)))
RULE := $$(OLD_RULE$1)
endef
define PARSE_ALL_IN_LIST
$$(foreach ITEM$1,$2,$$(eval $$(call ALL_IN_LIST_LOOP,$1)))
endef
# The entry point for rule parsing
# parses a rule in the format <keyboard>:<keymap>:<target>
# but this particular function only deals with the first <keyboard> part
define PARSE_RULE
RULE := $1
COMMANDS :=
REQUIRE_PLATFORM_KEY :=
# If the rule starts with all, then continue the parsing from
# PARSE_ALL_KEYBOARDS
ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,all),true)
KEYBOARD_RULE=all
$$(eval $$(call PARSE_ALL_KEYBOARDS))
else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,all-avr),true)
KEYBOARD_RULE=all
REQUIRE_PLATFORM_KEY := avr
$$(eval $$(call PARSE_ALL_KEYBOARDS))
else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,all-chibios),true)
KEYBOARD_RULE=all
REQUIRE_PLATFORM_KEY := chibios
$$(eval $$(call PARSE_ALL_KEYBOARDS))
else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,all-arm_atsam),true)
KEYBOARD_RULE=all
REQUIRE_PLATFORM_KEY := arm_atsam
$$(eval $$(call PARSE_ALL_KEYBOARDS))
else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,test),true)
$$(eval $$(call PARSE_TEST))
# If the rule starts with the name of a known keyboard, then continue
# the parsing from PARSE_KEYBOARD
else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(shell util/list_keyboards.sh | sort -u)),true)
KEYBOARD_RULE=$$(MATCHED_ITEM)
$$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM)))
# Otherwise use the KEYBOARD variable, which is determined either by
# the current directory you run make from, or passed in as an argument
else ifneq ($$(KEYBOARD),)
$$(eval $$(call PARSE_KEYBOARD,$$(KEYBOARD)))
else
$$(info make: *** No rule to make target '$1'. Stop.)
$$(info |)
$$(info | QMK's make format is:)
$$(info | make keyboard_folder:keymap_folder[:target])
$$(info |)
$$(info | Where `keyboard_folder` is the path to the keyboard relative to)
$$(info | `qmk_firmware/keyboards/`, and `keymap_folder` is the name of the)
$$(info | keymap folder under that board's `keymaps/` directory.)
$$(info |)
$$(info | Examples:)
$$(info | keyboards/dz60, keyboards/dz60/keymaps/default)
$$(info | -> make dz60:default)
$$(info | -> qmk compile -kb dz60 -km default)
$$(info | keyboards/planck/rev6, keyboards/planck/keymaps/default)
$$(info | -> make planck/rev6:default:flash)
$$(info | -> qmk flash -kb planck/rev6 -km default)
$$(info |)
endif
endef
# $1 = Keyboard
# Parses a rule in the format <keymap>:<target>
# the keyboard is already known when entering this function
define PARSE_KEYBOARD
# If we want to compile the default subproject, then we need to
# include the correct makefile to determine the actual name of it
CURRENT_KB := $1
# KEYBOARD_FOLDERS := $$(subst /, , $(CURRENT_KB))
DEFAULT_FOLDER := $$(CURRENT_KB)
# We assume that every rules.mk will contain the full default value
$$(eval include $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/rules.mk)
ifneq ($$(DEFAULT_FOLDER),$$(CURRENT_KB))
$$(eval include $(ROOT_DIR)/keyboards/$$(DEFAULT_FOLDER)/rules.mk)
endif
CURRENT_KB := $$(DEFAULT_FOLDER)
# 5/4/3/2/1
KEYBOARD_FOLDER_PATH_1 := $$(CURRENT_KB)
KEYBOARD_FOLDER_PATH_2 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_1)))
KEYBOARD_FOLDER_PATH_3 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_2)))
KEYBOARD_FOLDER_PATH_4 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_3)))
KEYBOARD_FOLDER_PATH_5 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_4)))
KEYMAPS :=
# get a list of all keymaps
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_1)/keymaps/*/.)))
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_2)/keymaps/*/.)))
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_3)/keymaps/*/.)))
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_4)/keymaps/*/.)))
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_5)/keymaps/*/.)))
# this might be needed, but in a different form
#KEYMAPS := $$(sort $$(filter-out $$(KEYBOARD_FOLDER_1) $$(KEYBOARD_FOLDER_2) \
$$(KEYBOARD_FOLDER_3) $$(KEYBOARD_FOLDER_4) $$(KEYBOARD_FOLDER_5), $$(KEYMAPS)))
KEYBOARD_LAYOUTS :=
ifneq ("$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_5)/rules.mk)","")
LAYOUTS :=
$$(eval include $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_5)/rules.mk)
KEYBOARD_LAYOUTS := $$(sort $$(LAYOUTS) $$(KEYBOARD_LAYOUTS))
endif
ifneq ("$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_4)/rules.mk)","")
LAYOUTS :=
$$(eval include $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_4)/rules.mk)
KEYBOARD_LAYOUTS := $$(sort $$(LAYOUTS) $$(KEYBOARD_LAYOUTS))
endif
ifneq ("$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_3)/rules.mk)","")
LAYOUTS :=
$$(eval include $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_3)/rules.mk)
KEYBOARD_LAYOUTS := $$(sort $$(LAYOUTS) $$(KEYBOARD_LAYOUTS))
endif
ifneq ("$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_2)/rules.mk)","")
LAYOUTS :=
$$(eval include $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_2)/rules.mk)
KEYBOARD_LAYOUTS := $$(sort $$(LAYOUTS) $$(KEYBOARD_LAYOUTS))
endif
ifneq ("$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_1)/rules.mk)","")
LAYOUTS :=
$$(eval include $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_1)/rules.mk)
KEYBOARD_LAYOUTS := $$(sort $$(LAYOUTS) $$(KEYBOARD_LAYOUTS))
endif
LAYOUT_KEYMAPS :=
$$(foreach LAYOUT,$$(KEYBOARD_LAYOUTS),$$(eval LAYOUT_KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/layouts/*/$$(LAYOUT)/*/.)))))
KEYMAPS := $$(sort $$(KEYMAPS) $$(LAYOUT_KEYMAPS))
# if the rule after removing the start of it is empty (we haven't specified a kemap or target)
# compile all the keymaps
ifeq ($$(RULE),)
$$(eval $$(call PARSE_ALL_KEYMAPS))
# The same if all was specified
else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,all),true)
$$(eval $$(call PARSE_ALL_KEYMAPS))
# List all keymaps for the given keyboard
else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,list-keymaps),true)
$$(eval $$(call LIST_ALL_KEYMAPS))
# Try to match the specified keyamp with the list of known keymaps
else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true)
$$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM)))
# Otherwise try to match the keymap from the current folder, or arguments to the make command
else ifneq ($$(KEYMAP),)
$$(eval $$(call PARSE_KEYMAP,$$(KEYMAP)))
# Otherwise if we are running make all:<user> just skip
else ifeq ($$(KEYBOARD_RULE),all)
# $$(info Skipping: No user keymap for $$(CURRENT_KB))
# Otherwise, make all keymaps, again this is consistent with how it works without
# any arguments
else
$$(eval $$(call PARSE_ALL_KEYMAPS))
endif
endef
# if we are going to compile all keyboards, match the rest of the rule
# for each of them
define PARSE_ALL_KEYBOARDS
$$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(shell util/list_keyboards.sh noci | sort -u)))
endef
# Prints a list of all known keymaps for the given keyboard
define LIST_ALL_KEYMAPS
COMMAND_true_LIST_KEYMAPS := \
printf "$$(KEYMAPS)\n";
COMMAND_false_LIST_KEYMAPS := \
printf "$$(MSG_AVAILABLE_KEYMAPS)\n"; \
printf "$$(KEYMAPS)\n";
COMMANDS += LIST_KEYMAPS
endef
# $1 Keymap
# This is the meat of compiling a keyboard, when entering this, everything is known
# keyboard, subproject, and keymap
# Note that we are not directly calling the command here, but instead building a list,
# which will later be processed
define PARSE_KEYMAP
CURRENT_KM = $1
# The rest of the rule is the target
# Remove the leading ":" from the target, as it acts as a separator
MAKE_TARGET := $$(patsubst :%,%,$$(RULE))
# We need to generate an unique indentifer to append to the COMMANDS list
CURRENT_KB_UNDER := $$(subst /,_,$$(CURRENT_KB))
COMMAND := COMMAND_KEYBOARD_$$(CURRENT_KB_UNDER)_KEYMAP_$$(CURRENT_KM)
# If we are compiling a keyboard without a subproject, we want to display just the name
# of the keyboard, otherwise keyboard/subproject
KB_SP := $$(CURRENT_KB)
# Format it in bold
KB_SP := $(BOLD)$$(KB_SP)$(NO_COLOR)
# Specify the variables that we are passing forward to submake
MAKE_VARS := KEYBOARD=$$(CURRENT_KB) KEYMAP=$$(CURRENT_KM) REQUIRE_PLATFORM_KEY=$$(REQUIRE_PLATFORM_KEY) QMK_BIN=$$(QMK_BIN)
# And the first part of the make command
MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_TARGET)
# The message to display
MAKE_MSG := $$(MSG_MAKE_KB)
# We run the command differently, depending on if we want more output or not
# The true version for silent output and the false version otherwise
$$(eval $$(call BUILD))
endef
define BUILD
MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR)
COMMANDS += $$(COMMAND)
COMMAND_true_$$(COMMAND) := \
printf "$$(MAKE_MSG)" | \
$$(MAKE_MSG_FORMAT); \
LOG=$$$$($$(MAKE_CMD) $$(MAKE_VARS) SILENT=true 2>&1) ; \
if [ $$$$? -gt 0 ]; \
then $$(PRINT_ERROR_PLAIN); \
elif [ "$$$$LOG" = "skipped" ] ; \
then $$(PRINT_SKIPPED_PLAIN); \
elif [ "$$$$LOG" != "" ] ; \
then $$(PRINT_WARNING_PLAIN); \
else \
$$(PRINT_OK); \
fi;
COMMAND_false_$$(COMMAND) := \
printf "$$(MAKE_MSG)\n\n"; \
$$(MAKE_CMD) $$(MAKE_VARS) SILENT=false; \
if [ $$$$? -gt 0 ]; \
then error_occurred=1; \
fi;
endef
# Just parse all the keymaps for a specific keyboard
define PARSE_ALL_KEYMAPS
$$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS)))
endef
define BUILD_TEST
TEST_NAME := $1
MAKE_TARGET := $2
COMMAND := $1
MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_test.mk $$(MAKE_TARGET)
MAKE_VARS := TEST=$$(TEST_NAME) FULL_TESTS="$$(FULL_TESTS)"
MAKE_MSG := $$(MSG_MAKE_TEST)
$$(eval $$(call BUILD))
ifneq ($$(MAKE_TARGET),clean)
TEST_EXECUTABLE := $$(TEST_DIR)/$$(TEST_NAME).elf
TESTS += $$(TEST_NAME)
TEST_MSG := $$(MSG_TEST)
$$(TEST_NAME)_COMMAND := \
printf "$$(TEST_MSG)\n"; \
$$(TEST_EXECUTABLE); \
if [ $$$$? -gt 0 ]; \
then error_occurred=1; \
fi; \
printf "\n";
endif
endef
define PARSE_TEST
TESTS :=
TEST_NAME := $$(firstword $$(subst :, ,$$(RULE)))
TEST_TARGET := $$(subst $$(TEST_NAME),,$$(subst $$(TEST_NAME):,,$$(RULE)))
ifeq ($$(TEST_NAME),all)
MATCHED_TESTS := $$(TEST_LIST)
else
MATCHED_TESTS := $$(foreach TEST,$$(TEST_LIST),$$(if $$(findstring $$(TEST_NAME),$$(TEST)),$$(TEST),))
endif
$$(foreach TEST,$$(MATCHED_TESTS),$$(eval $$(call BUILD_TEST,$$(TEST),$$(TEST_TARGET))))
endef
# Set the silent mode depending on if we are trying to compile multiple keyboards or not
# By default it's on in that case, but it can be overridden by specifying silent=false
# from the command line
define SET_SILENT_MODE
ifdef SUB_IS_SILENT
SILENT_MODE := $(SUB_IS_SILENT)
else ifeq ($$(words $$(COMMANDS)),1)
SILENT_MODE := false
else
SILENT_MODE := true
endif
endef
include $(ROOT_DIR)/message.mk
ifeq ($(strip $(BREAK_ON_ERRORS)), yes)
HANDLE_ERROR = exit 1
else
HANDLE_ERROR = echo $$error_occurred > $(ERROR_FILE)
endif
# The empty line is important here, as it will force a new shell to be created for each command
# Otherwise the command line will become too long with a lot of keyboards and keymaps
define RUN_COMMAND
+error_occurred=0;\
$(COMMAND_$(SILENT_MODE)_$(COMMAND))\
if [ $$error_occurred -gt 0 ]; then $(HANDLE_ERROR); fi;
endef
define RUN_TEST
+error_occurred=0;\
$($(TEST)_COMMAND)\
if [ $$error_occurred -gt 0 ]; then $(HANDLE_ERROR); fi;
endef
# Catch everything and parse the command line ourselves.
.PHONY: %
%:
# Check if we have the CMP tool installed
cmp $(ROOT_DIR)/Makefile $(ROOT_DIR)/Makefile >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
# Ensure that $(QMK_BIN) works.
if ! $(QMK_BIN) hello 1> /dev/null 2>&1; then printf "$(MSG_PYTHON_MISSING)"; exit 1; fi
# Check if the submodules are dirty, and display a warning if they are
ifndef SKIP_GIT
if [ ! -e lib/chibios ]; then git submodule sync lib/chibios && git submodule update --depth 50 --init lib/chibios; fi
if [ ! -e lib/chibios-contrib ]; then git submodule sync lib/chibios-contrib && git submodule update --depth 50 --init lib/chibios-contrib; fi
if [ ! -e lib/ugfx ]; then git submodule sync lib/ugfx && git submodule update --depth 50 --init lib/ugfx; fi
if [ ! -e lib/lufa ]; then git submodule sync lib/lufa && git submodule update --depth 50 --init lib/lufa; fi
if [ ! -e lib/vusb ]; then git submodule sync lib/vusb && git submodule update --depth 50 --init lib/vusb; fi
if [ ! -e lib/printf ]; then git submodule sync lib/printf && git submodule update --depth 50 --init lib/printf; fi
git submodule status --recursive 2>/dev/null | \
while IFS= read -r x; do \
case "$$x" in \
\ *) ;; \
*) printf "$(MSG_SUBMODULE_DIRTY)";break;; \
esac \
done
endif
rm -f $(ERROR_FILE) > /dev/null 2>&1
$(eval $(call PARSE_RULE,$@))
$(eval $(call SET_SILENT_MODE))
# Run all the commands in the same shell, notice the + at the first line
# it has to be there to allow parallel execution of the submake
# This always tries to compile everything, even if error occurs in the middle
# But we return the error code at the end, to trigger travis failures
# The sort at this point is to remove duplicates
$(foreach COMMAND,$(sort $(COMMANDS)),$(RUN_COMMAND))
if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
$(foreach TEST,$(sort $(TESTS)),$(RUN_TEST))
if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
lib/%:
git submodule sync $?
git submodule update --init $?
.PHONY: git-submodule
git-submodule:
git submodule sync --recursive
git submodule update --init --recursive --progress
# Generate the version.h file
ifdef SKIP_GIT
VERSION_H_FLAGS := --skip-git
endif
ifdef SKIP_VERSION
VERSION_H_FLAGS := --skip-all
SKIP_GIT := yes
endif
$(shell $(QMK_BIN) generate-version-h $(VERSION_H_FLAGS) -q -o quantum/version.h)
include $(ROOT_DIR)/testlist.mk
================================================
FILE: Vagrantfile
================================================
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
# define a name instead of just 'default'
config.vm.define "qmk_firmware"
# VMware/Virtualbox ( and also Hyperv/Parallels) 64 bit
config.vm.box = "generic/debian10"
config.vm.synced_folder '.', '/vagrant'
# This section allows you to customize the Virtualbox VM
# settings, ie showing the GUI or upping the memory
# or cores if desired
config.vm.provider "virtualbox" do |vb|
# Hide the VirtualBox GUI when booting the machine
vb.gui = false
# Uncomment the below lines if you want to program
# your Teensy via the VM rather than your host OS
#vb.customize ['modifyvm', :id, '--usb', 'on']
#vb.customize ['usbfilter', 'add', '0',
# '--target', :id,
# '--name', 'teensy',
# '--vendorid', '0x16c0',
# '--productid','0x0478'
# ]
# Customize the amount of memory on the VM:
vb.memory = "512"
# Uncomment the below lines if you have time sync
# issues with make and incremental builds
#vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 1000 ]
end
# This section allows you to customize the VMware VM
# settings, ie showing the GUI or upping the memory
# or cores if desired
config.vm.provider "vmware_workstation" do |vmw|
# Hide the VMware GUI when booting the machine
vmw.gui = false
# Customize the amount of memory on the VM:
vmw.memory = "512"
end
config.vm.provider "vmware_fusion" do |vmf|
# Hide the vmfare GUI when booting the machine
vmf.gui = false
# Customize the amount of memory on the VM:
vmf.memory = "512"
end
# Docker provider pulls from hub.docker.com respecting docker.image if
# config.vm.box is nil. In this case, we adhoc build util/vagrant/Dockerfile.
# Note that this bind-mounts from the current dir to
# /vagrant in the guest, so unless your UID is 1000 to match vagrant in the
# image, you'll need to: chmod -R a+rw .
config.vm.provider "docker" do |docker, override|
override.vm.box = nil
docker.build_dir = "util/vagrant"
docker.has_ssh = true
end
# Unless we are running the docker container directly
# 1. run container detached on vm
# 2. attach on 'vagrant ssh'
["virtualbox", "vmware_workstation", "vmware_fusion"].each do |type|
config.vm.provider type do |virt, override|
override.vm.provision "docker" do |d|
d.run "qmkfm/qmk_cli",
cmd: "tail -f /dev/null",
args: "--privileged -v /dev:/dev -v '/vagrant:/vagrant'"
end
override.vm.provision "shell", inline: <<-SHELL
echo 'docker restart qmkfm-qmk_cli && exec docker exec -it qmkfm-qmk_cli /bin/bash -l' >> ~vagrant/.bashrc
SHELL
end
end
config.vm.post_up_message = <<-EOT
Log into the environment using 'vagrant ssh'. QMK directory synchronized with
host is located at /vagrant
To compile the .hex files use make command inside this directory, e.g.
cd /vagrant
make <keyboard>:default
Examples:
make planck/rev4:default:dfu
make planck/rev4:default
EOT
end
================================================
FILE: api_data/_config.yml
================================================
theme: jekyll-theme-cayman
================================================
FILE: api_data/readme.md
================================================
# QMK Keyboard Metadata
This directory contains machine parsable data about keyboards supported by QMK. The latest version is always available online at <https://keyboards.qmk.fm>.
Do not edit anything here by hand. It is generated with the `qmk generate-api` command.
================================================
FILE: bin/qmk
================================================
#!/usr/bin/env python3
"""CLI wrapper for running QMK commands.
"""
import os
import sys
from pathlib import Path
# Add the QMK python libs to our path
script_dir = Path(os.path.realpath(__file__)).parent
qmk_dir = script_dir.parent
python_lib_dir = Path(qmk_dir / 'lib' / 'python').resolve()
sys.path.append(str(python_lib_dir))
# Setup the CLI
import milc # noqa
milc.EMOJI_LOGLEVELS['INFO'] = '{fg_blue}Ψ{style_reset_all}'
@milc.cli.entrypoint('QMK Helper Script')
def qmk_main(cli):
"""The function that gets run when no subcommand is provided.
"""
cli.print_help()
def main():
"""Setup our environment and then call the CLI entrypoint.
"""
# Change to the root of our checkout
os.environ['ORIG_CWD'] = os.getcwd()
os.environ['DEPRECATED_BIN_QMK'] = '1'
os.chdir(qmk_dir)
print('Warning: The bin/qmk script is being deprecated. Please install the QMK CLI: python3 -m pip install qmk', file=sys.stderr)
# Import the subcommands
import milc.subcommand.config # noqa
import qmk.cli # noqa
# Execute
return_code = milc.cli()
if return_code is False:
exit(1)
elif return_code is not True and isinstance(return_code, int):
if return_code < 0 or return_code > 255:
milc.cli.log.error('Invalid return_code: %d', return_code)
exit(255)
exit(return_code)
exit(0)
if __name__ == '__main__':
main()
================================================
FILE: book.json
================================================
{
"structure": {
"summary": "_summary.md"
},
"plugins" : [
"edit-link",
"forkmegithub",
"hints",
"page-toc",
"terminal",
"toolbar",
"bulk-redirect"
],
"pluginsConfig": {
"edit-link": {
"base": "https://github.com/qmk/qmk_firmware/edit/master/docs",
"label": "Suggest an edit"
},
"forkmegithub": {
"color": "red",
"url": "https://github.com/qmk/qmk_firmware"
},
"page-toc": {
"selector": ".markdown-section h1, .markdown-section h2"
},
"terminal": {
"copyButtons": true,
"fade": false,
"style": "flat"
},
"toolbar": {
"buttons": [
{
"label": "QMK Firmware",
"icon": "fa fa-github",
"url": "https://github.com/qmk/qmk_firmware"
}
]
},
"bulk-redirect": {
"basepath": "/",
"redirectsFile": "docs/redirects.json"
}
},
"root": "./docs/"
}
================================================
FILE: bootloader.mk
================================================
# Copyright 2017 Jack Humbert
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# If it's possible that multiple bootloaders can be used for one project,
# you can leave this unset, and the correct size will be selected
# automatically.
#
# Sets the bootloader defined in the keyboard's/keymap's rules.mk
# Current options:
#
# AVR:
# halfkay PJRC Teensy
# caterina Pro Micro (Sparkfun/generic)
# atmel-dfu Atmel factory DFU
# lufa-dfu LUFA DFU
# qmk-dfu QMK DFU (LUFA + blinkenlight)
# qmk-hid QMK HID (LUFA + blinkenlight)
# bootloadhid HIDBootFlash compatible (ATmega32A)
# usbasploader USBaspLoader (ATmega328P)
# ARM:
# kiibohd Input:Club Kiibohd bootloader (only used on their boards)
# stm32duino STM32Duino (STM32F103x8)
# stm32-dfu STM32 USB DFU in ROM
# apm32-dfu APM32 USB DFU in ROM
#
# BOOTLOADER_SIZE can still be defined manually, but it's recommended
# you add any possible configuration to this list
ifeq ($(strip $(BOOTLOADER)), atmel-dfu)
OPT_DEFS += -DBOOTLOADER_ATMEL_DFU
OPT_DEFS += -DBOOTLOADER_DFU
ifneq (,$(filter $(MCU), at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647))
BOOTLOADER_SIZE = 4096
endif
ifneq (,$(filter $(MCU), at90usb1286 at90usb1287))
BOOTLOADER_SIZE = 8192
endif
endif
ifeq ($(strip $(BOOTLOADER)), lufa-dfu)
OPT_DEFS += -DBOOTLOADER_LUFA_DFU
OPT_DEFS += -DBOOTLOADER_DFU
ifneq (,$(filter $(MCU), at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647))
BOOTLOADER_SIZE = 4096
endif
ifneq (,$(filter $(MCU), at90usb1286 at90usb1287))
BOOTLOADER_SIZE = 8192
endif
endif
ifeq ($(strip $(BOOTLOADER)), qmk-dfu)
OPT_DEFS += -DBOOTLOADER_QMK_DFU
OPT_DEFS += -DBOOTLOADER_DFU
ifneq (,$(filter $(MCU), at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647))
BOOTLOADER_SIZE = 4096
endif
ifneq (,$(filter $(MCU), at90usb1286 at90usb1287))
BOOTLOADER_SIZE = 8192
endif
endif
ifeq ($(strip $(BOOTLOADER)), qmk-hid)
OPT_DEFS += -DBOOTLOADER_QMK_HID
OPT_DEFS += -DBOOTLOADER_HID
BOOTLOADER_SIZE = 4096
endif
ifeq ($(strip $(BOOTLOADER)), halfkay)
OPT_DEFS += -DBOOTLOADER_HALFKAY
ifeq ($(strip $(MCU)), atmega32u4)
BOOTLOADER_SIZE = 512
endif
ifeq ($(strip $(MCU)), at90usb1286)
BOOTLOADER_SIZE = 1024
endif
endif
ifeq ($(strip $(BOOTLOADER)), caterina)
OPT_DEFS += -DBOOTLOADER_CATERINA
BOOTLOADER_SIZE = 4096
endif
ifneq (,$(filter $(BOOTLOADER), bootloadhid bootloadHID))
OPT_DEFS += -DBOOTLOADER_BOOTLOADHID
BOOTLOADER_SIZE = 4096
endif
ifneq (,$(filter $(BOOTLOADER), usbasploader USBasp))
OPT_DEFS += -DBOOTLOADER_USBASP
BOOTLOADER_SIZE = 4096
endif
ifeq ($(strip $(BOOTLOADER)), lufa-ms)
OPT_DEFS += -DBOOTLOADER_MS
BOOTLOADER_SIZE ?= 8192
FIRMWARE_FORMAT = bin
cpfirmware: lufa_warning
.INTERMEDIATE: lufa_warning
lufa_warning: $(FIRMWARE_FORMAT)
$(info @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)
$(info LUFA MASS STORAGE Bootloader selected)
$(info DO NOT USE THIS BOOTLOADER IN NEW PROJECTS!)
$(info It is extremely prone to bricking, and is only included to support existing boards.)
$(info @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)
endif
ifdef BOOTLOADER_SIZE
OPT_DEFS += -DBOOTLOADER_SIZE=$(strip $(BOOTLOADER_SIZE))
endif
ifeq ($(strip $(BOOTLOADER)), stm32-dfu)
OPT_DEFS += -DBOOTLOADER_STM32_DFU
# Options to pass to dfu-util when flashing
DFU_ARGS ?= -d 0483:DF11 -a 0 -s 0x08000000:leave
DFU_SUFFIX_ARGS ?= -v 0483 -p DF11
endif
ifeq ($(strip $(BOOTLOADER)), apm32-dfu)
OPT_DEFS += -DBOOTLOADER_APM32_DFU
# Options to pass to dfu-util when flashing
DFU_ARGS ?= -d 314B:0106 -a 0 -s 0x08000000:leave
DFU_SUFFIX_ARGS ?= -v 314B -p 0106
endif
ifeq ($(strip $(BOOTLOADER)), kiibohd)
OPT_DEFS += -DBOOTLOADER_KIIBOHD
ifeq ($(strip $(MCU_ORIG)), MK20DX128)
MCU_LDSCRIPT = MK20DX128BLDR4
endif
ifeq ($(strip $(MCU_ORIG)), MK20DX256)
MCU_LDSCRIPT = MK20DX256BLDR8
endif
# Options to pass to dfu-util when flashing
DFU_ARGS = -d 1C11:B007
DFU_SUFFIX_ARGS = -v 1C11 -p B007
endif
ifeq ($(strip $(BOOTLOADER)), stm32duino)
OPT_DEFS += -DBOOTLOADER_STM32DUINO
MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
BOARD = STM32_F103_STM32DUINO
# STM32F103 does NOT have an USB bootloader in ROM (only serial), so setting anything here does not make much sense
STM32_BOOTLOADER_ADDRESS = 0x80000000
# Options to pass to dfu-util when flashing
DFU_ARGS = -d 1EAF:0003 -a 2 -R
DFU_SUFFIX_ARGS = -v 1EAF -p 0003
endif
ifeq ($(strip $(BOOTLOADER)), tinyuf2)
OPT_DEFS += -DBOOTLOADER_TINYUF2
endif
================================================
FILE: build_full_test.mk
================================================
# Copyright 2017 Fred Sundvik
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#include $(TMK_PATH)/protocol.mk
TEST_PATH=tests/$(TEST)
$(TEST)_SRC= \
$(TEST_PATH)/keymap.c \
$(TMK_COMMON_SRC) \
$(QUANTUM_SRC) \
$(SRC) \
tests/test_common/matrix.c \
tests/test_common/test_driver.cpp \
tests/test_common/keyboard_report_util.cpp \
tests/test_common/test_fixture.cpp
$(TEST)_SRC += $(patsubst $(ROOTDIR)/%,%,$(wildcard $(TEST_PATH)/*.cpp))
$(TEST)_DEFS=$(TMK_COMMON_DEFS) $(OPT_DEFS)
$(TEST)_CONFIG=$(TEST_PATH)/config.h
VPATH+=$(TOP_DIR)/tests/test_common
================================================
FILE: build_json.mk
================================================
# Look for a json keymap file
ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.json)","")
KEYMAP_JSON := $(MAIN_KEYMAP_PATH_5)/keymap.json
KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5)
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.json)","")
KEYMAP_JSON := $(MAIN_KEYMAP_PATH_4)/keymap.json
KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4)
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.json)","")
KEYMAP_JSON := $(MAIN_KEYMAP_PATH_3)/keymap.json
KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3)
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.json)","")
KEYMAP_JSON := $(MAIN_KEYMAP_PATH_2)/keymap.json
KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2)
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.json)","")
KEYMAP_JSON := $(MAIN_KEYMAP_PATH_1)/keymap.json
KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
endif
================================================
FILE: build_keyboard.mk
================================================
# Determine what keyboard we are building and setup the build environment.
#
# We support folders up to 5 levels deep below `keyboards/`. This file is
# responsible for determining which folder is being used and doing the
# corresponding environment setup.
ifndef VERBOSE
.SILENT:
endif
.DEFAULT_GOAL := all
include common.mk
# Set the qmk cli to use
QMK_BIN ?= qmk
# Set the filename for the final firmware binary
KEYBOARD_FILESAFE := $(subst /,_,$(KEYBOARD))
TARGET ?= $(KEYBOARD_FILESAFE)_$(KEYMAP)
KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD_FILESAFE)
# Force expansion
TARGET := $(TARGET)
ifneq ($(FORCE_LAYOUT),)
TARGET := $(TARGET)_$(FORCE_LAYOUT)
endif
# Object files and generated keymap directory
# To put object files in current directory, use a dot (.), do NOT make
# this an empty or blank macro!
KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET)
# For split boards we need to set a master half.
MASTER ?= left
ifdef master
MASTER = $(master)
endif
ifeq ($(MASTER),right)
OPT_DEFS += -DMASTER_IS_ON_RIGHT
else
ifneq ($(MASTER),left)
$(error MASTER does not have a valid value(left/right))
endif
endif
ifdef SKIP_VERSION
OPT_DEFS += -DSKIP_VERSION
endif
# Determine which subfolders exist.
KEYBOARD_FOLDER_PATH_1 := $(KEYBOARD)
KEYBOARD_FOLDER_PATH_2 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_1)))
KEYBOARD_FOLDER_PATH_3 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_2)))
KEYBOARD_FOLDER_PATH_4 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_3)))
KEYBOARD_FOLDER_PATH_5 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_4)))
KEYBOARD_FOLDER_1 := $(notdir $(KEYBOARD_FOLDER_PATH_1))
KEYBOARD_FOLDER_2 := $(notdir $(KEYBOARD_FOLDER_PATH_2))
KEYBOARD_FOLDER_3 := $(notdir $(KEYBOARD_FOLDER_PATH_3))
KEYBOARD_FOLDER_4 := $(notdir $(KEYBOARD_FOLDER_PATH_4))
KEYBOARD_FOLDER_5 := $(notdir $(KEYBOARD_FOLDER_PATH_5))
KEYBOARD_PATHS :=
KEYBOARD_PATH_1 := keyboards/$(KEYBOARD_FOLDER_PATH_1)
KEYBOARD_PATH_2 := keyboards/$(KEYBOARD_FOLDER_PATH_2)
KEYBOARD_PATH_3 := keyboards/$(KEYBOARD_FOLDER_PATH_3)
KEYBOARD_PATH_4 := keyboards/$(KEYBOARD_FOLDER_PATH_4)
KEYBOARD_PATH_5 := keyboards/$(KEYBOARD_FOLDER_PATH_5)
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/)","")
KEYBOARD_PATHS += $(KEYBOARD_PATH_5)
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/)","")
KEYBOARD_PATHS += $(KEYBOARD_PATH_4)
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/)","")
KEYBOARD_PATHS += $(KEYBOARD_PATH_3)
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/)","")
KEYBOARD_PATHS += $(KEYBOARD_PATH_2)
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/)","")
KEYBOARD_PATHS += $(KEYBOARD_PATH_1)
endif
# Pull in rules.mk files from all our subfolders
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/rules.mk)","")
include $(KEYBOARD_PATH_5)/rules.mk
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/rules.mk)","")
include $(KEYBOARD_PATH_4)/rules.mk
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/rules.mk)","")
include $(KEYBOARD_PATH_3)/rules.mk
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/rules.mk)","")
include $(KEYBOARD_PATH_2)/rules.mk
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/rules.mk)","")
include $(KEYBOARD_PATH_1)/rules.mk
endif
MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP)
MAIN_KEYMAP_PATH_2 := $(KEYBOARD_PATH_2)/keymaps/$(KEYMAP)
MAIN_KEYMAP_PATH_3 := $(KEYBOARD_PATH_3)/keymaps/$(KEYMAP)
MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP)
MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP)
# Pull in rules from info.json
INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/info_rules.mk)
include $(INFO_RULES_MK)
# Check for keymap.json first, so we can regenerate keymap.c
include build_json.mk
ifeq ("$(wildcard $(KEYMAP_PATH))", "")
# Look through the possible keymap folders until we find a matching keymap.c
ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.c)","")
-include $(MAIN_KEYMAP_PATH_5)/rules.mk
KEYMAP_C := $(MAIN_KEYMAP_PATH_5)/keymap.c
KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5)
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.c)","")
-include $(MAIN_KEYMAP_PATH_4)/rules.mk
KEYMAP_C := $(MAIN_KEYMAP_PATH_4)/keymap.c
KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4)
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.c)","")
-include $(MAIN_KEYMAP_PATH_3)/rules.mk
KEYMAP_C := $(MAIN_KEYMAP_PATH_3)/keymap.c
KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3)
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.c)","")
-include $(MAIN_KEYMAP_PATH_2)/rules.mk
KEYMAP_C := $(MAIN_KEYMAP_PATH_2)/keymap.c
KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2)
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.c)","")
-include $(MAIN_KEYMAP_PATH_1)/rules.mk
KEYMAP_C := $(MAIN_KEYMAP_PATH_1)/keymap.c
KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
else ifneq ($(LAYOUTS),)
# If we haven't found a keymap yet fall back to community layouts
include build_layout.mk
else
$(error Could not find keymap)
# this state should never be reached
endif
endif
# Have we found a keymap.json?
ifneq ("$(wildcard $(KEYMAP_JSON))", "")
KEYMAP_C := $(KEYMAP_OUTPUT)/src/keymap.c
KEYMAP_H := $(KEYMAP_OUTPUT)/src/config.h
# Load the keymap-level rules.mk if exists
-include $(KEYMAP_PATH)/rules.mk
# Load any rules.mk content from keymap.json
INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --keymap $(KEYMAP) --output $(KEYMAP_OUTPUT)/src/rules.mk)
include $(INFO_RULES_MK)
# Add rules to generate the keymap files - indentation here is important
$(KEYMAP_OUTPUT)/src/keymap.c: $(KEYMAP_JSON)
$(QMK_BIN) json2c --quiet --output $(KEYMAP_C) $(KEYMAP_JSON)
$(KEYMAP_OUTPUT)/src/config.h: $(KEYMAP_JSON)
$(QMK_BIN) generate-config-h --quiet --keyboard $(KEYBOARD) --keymap $(KEYMAP) --output $(KEYMAP_H)
generated-files: $(KEYMAP_OUTPUT)/src/config.h $(KEYMAP_OUTPUT)/src/keymap.c
endif
ifeq ($(strip $(CTPC)), yes)
CONVERT_TO_PROTON_C=yes
endif
ifeq ($(strip $(CONVERT_TO_PROTON_C)), yes)
include platforms/chibios/boards/QMK_PROTON_C/convert_to_proton_c.mk
endif
include quantum/mcu_selection.mk
# Find all the C source files to be compiled in subfolders.
KEYBOARD_SRC :=
KEYBOARD_C_1 := $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).c
KEYBOARD_C_2 := $(KEYBOARD_PATH_2)/$(KEYBOARD_FOLDER_2).c
KEYBOARD_C_3 := $(KEYBOARD_PATH_3)/$(KEYBOARD_FOLDER_3).c
KEYBOARD_C_4 := $(KEYBOARD_PATH_4)/$(KEYBOARD_FOLDER_4).c
KEYBOARD_C_5 := $(KEYBOARD_PATH_5)/$(KEYBOARD_FOLDER_5).c
ifneq ("$(wildcard $(KEYBOARD_C_5))","")
KEYBOARD_SRC += $(KEYBOARD_C_5)
endif
ifneq ("$(wildcard $(KEYBOARD_C_4))","")
KEYBOARD_SRC += $(KEYBOARD_C_4)
endif
ifneq ("$(wildcard $(KEYBOARD_C_3))","")
KEYBOARD_SRC += $(KEYBOARD_C_3)
endif
ifneq ("$(wildcard $(KEYBOARD_C_2))","")
KEYBOARD_SRC += $(KEYBOARD_C_2)
endif
ifneq ("$(wildcard $(KEYBOARD_C_1))","")
KEYBOARD_SRC += $(KEYBOARD_C_1)
endif
# Generate KEYBOARD_name_subname for all levels of the keyboard folder
KEYBOARD_FILESAFE_1 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_1)))
KEYBOARD_FILESAFE_2 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_2)))
KEYBOARD_FILESAFE_3 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_3)))
KEYBOARD_FILESAFE_4 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_4)))
KEYBOARD_FILESAFE_5 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_5)))
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/)","")
OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_5)
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/)","")
OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_4)
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/)","")
OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_3)
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/)","")
OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_2)
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/)","")
OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_1)
endif
# Setup the define for QMK_KEYBOARD_H. This is used inside of keymaps so
# that the same keymap may be used on multiple keyboards.
#
# We grab the most top-level include file that we can. That file should
# use #ifdef statements to include all the neccesary subfolder includes,
# as described here:
#
# https://docs.qmk.fm/#/feature_layouts?id=tips-for-making-layouts-keyboard-agnostic
#
QMK_KEYBOARD_H = $(KEYBOARD_OUTPUT)/src/default_keyboard.h
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).h)","")
QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_1).h
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/$(KEYBOARD_FOLDER_2).h)","")
QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_2).h
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/$(KEYBOARD_FOLDER_3).h)","")
QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_3).h
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/$(KEYBOARD_FOLDER_4).h)","")
QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_4).h
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/$(KEYBOARD_FOLDER_5).h)","")
QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_5).h
endif
# Determine and set parameters based on the keyboard's processor family.
# We can assume a ChibiOS target When MCU_FAMILY is defined since it's
# not used for LUFA
ifdef MCU_FAMILY
PLATFORM=CHIBIOS
PLATFORM_KEY=chibios
FIRMWARE_FORMAT?=bin
ifeq ($(MCU_FAMILY),NRF51)
$(info "PLATFORM NRF5")
PLATFORM=NRF_SDK
PLATFORM_KEY=nrf
FIRMWARE_FORMAT=hex
endif
ifeq ($(MCU_FAMILY),NRF52)
$(info "PLATFORM NRF5")
PLATFORM=NRF_SDK
PLATFORM_KEY=nrf
FIRMWARE_FORMAT=hex
endif
OPT_DEFS += -DMCU_$(MCU_FAMILY)
else ifdef ARM_ATSAM
PLATFORM=ARM_ATSAM
PLATFORM_KEY=arm_atsam
FIRMWARE_FORMAT=bin
else
PLATFORM=AVR
PLATFORM_KEY=avr
FIRMWARE_FORMAT?=hex
endif
# Find all of the config.h files and add them to our CONFIG_H define.
CONFIG_H :=
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/config.h)","")
CONFIG_H += $(KEYBOARD_PATH_5)/config.h
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/config.h)","")
CONFIG_H += $(KEYBOARD_PATH_4)/config.h
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/config.h)","")
CONFIG_H += $(KEYBOARD_PATH_3)/config.h
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/config.h)","")
CONFIG_H += $(KEYBOARD_PATH_2)/config.h
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/config.h)","")
CONFIG_H += $(KEYBOARD_PATH_1)/config.h
endif
POST_CONFIG_H :=
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/post_config.h)","")
POST_CONFIG_H += $(KEYBOARD_PATH_1)/post_config.h
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/post_config.h)","")
POST_CONFIG_H += $(KEYBOARD_PATH_2)/post_config.h
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/post_config.h)","")
POST_CONFIG_H += $(KEYBOARD_PATH_3)/post_config.h
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/post_config.h)","")
POST_CONFIG_H += $(KEYBOARD_PATH_4)/post_config.h
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/post_config.h)","")
POST_CONFIG_H += $(KEYBOARD_PATH_5)/post_config.h
endif
# Pull in stuff from info.json
INFO_JSON_FILES :=
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/info.json)","")
INFO_JSON_FILES += $(KEYBOARD_PATH_1)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/info.json)","")
INFO_JSON_FILES += $(KEYBOARD_PATH_2)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/info.json)","")
INFO_JSON_FILES += $(KEYBOARD_PATH_3)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/info.json)","")
INFO_JSON_FILES += $(KEYBOARD_PATH_4)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/info.json)","")
INFO_JSON_FILES += $(KEYBOARD_PATH_5)/info.json
endif
CONFIG_H += $(KEYBOARD_OUTPUT)/src/info_config.h $(KEYBOARD_OUTPUT)/src/layouts.h
$(KEYBOARD_OUTPUT)/src/info_config.h: $(INFO_JSON_FILES)
$(QMK_BIN) generate-config-h --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/info_config.h
$(KEYBOARD_OUTPUT)/src/default_keyboard.h: $(INFO_JSON_FILES)
$(QMK_BIN) generate-keyboard-h --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/default_keyboard.h
$(KEYBOARD_OUTPUT)/src/layouts.h: $(INFO_JSON_FILES)
$(QMK_BIN) generate-layouts --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/layouts.h
generated-files: $(KEYBOARD_OUTPUT)/src/info_config.h $(KEYBOARD_OUTPUT)/src/default_keyboard.h $(KEYBOARD_OUTPUT)/src/layouts.h
.INTERMEDIATE : generated-files
# Userspace setup and definitions
ifeq ("$(USER_NAME)","")
USER_NAME := $(KEYMAP)
endif
USER_PATH := users/$(USER_NAME)
-include $(USER_PATH)/rules.mk
ifneq ("$(wildcard $(USER_PATH)/config.h)","")
CONFIG_H += $(USER_PATH)/config.h
endif
ifneq ("$(wildcard $(USER_PATH)/post_config.h)","")
POST_CONFIG_H += $(USER_PATH)/post_config.h
endif
# Disable features that a keyboard doesn't support
-include disable_features.mk
ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
CONFIG_H += $(KEYMAP_PATH)/config.h
endif
ifneq ("$(KEYMAP_H)","")
CONFIG_H += $(KEYMAP_H)
endif
# project specific files
SRC += \
$(KEYBOARD_SRC) \
$(KEYMAP_C) \
$(QUANTUM_SRC) \
$(QUANTUM_DIR)/main.c \
# Optimize size but this may cause error "relocation truncated to fit"
#EXTRALDFLAGS = -Wl,--relax
# Search Path
VPATH += $(KEYMAP_PATH)
VPATH += $(USER_PATH)
VPATH += $(KEYBOARD_PATHS)
VPATH += $(COMMON_VPATH)
include common_features.mk
include $(TMK_PATH)/protocol.mk
include $(TMK_PATH)/common.mk
include bootloader.mk
SRC += $(patsubst %.c,%.clib,$(LIB_SRC))
SRC += $(patsubst %.c,%.clib,$(QUANTUM_LIB_SRC))
SRC += $(TMK_COMMON_SRC)
OPT_DEFS += $(TMK_COMMON_DEFS)
EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
SKIP_COMPILE := no
ifneq ($(REQUIRE_PLATFORM_KEY),)
ifneq ($(REQUIRE_PLATFORM_KEY),$(PLATFORM_KEY))
SKIP_COMPILE := yes
endif
endif
include $(TMK_PATH)/$(PLATFORM_KEY).mk
ifneq ($(strip $(PROTOCOL)),)
include $(TMK_PATH)/protocol/$(strip $(shell echo $(PROTOCOL) | tr '[:upper:]' '[:lower:]')).mk
else
include $(TMK_PATH)/protocol/$(PLATFORM_KEY).mk
endif
-include $(TOP_DIR)/platforms/$(PLATFORM_KEY)/flash.mk
# TODO: remove this bodge?
PROJECT_DEFS := $(OPT_DEFS)
PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(KEYBOARD_PATHS)
PROJECT_CONFIG := $(CONFIG_H)
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer
VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer
include $(VISUALIZER_PATH)/visualizer.mk
endif
CONFIG_H += $(POST_CONFIG_H)
ALL_CONFIGS := $(PROJECT_CONFIG) $(CONFIG_H)
OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT)
$(KEYMAP_OUTPUT)_SRC := $(SRC)
$(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) $(GFXDEFS) \
-DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYBOARD_H=\"$(QMK_KEYBOARD_H)\" \
-DQMK_KEYMAP=\"$(KEYMAP)\" -DQMK_KEYMAP_H=\"$(KEYMAP).h\" -DQMK_KEYMAP_CONFIG_H=\"$(KEYMAP_PATH)/config.h\" \
-DQMK_SUBPROJECT -DQMK_SUBPROJECT_H -DQMK_SUBPROJECT_CONFIG_H
$(KEYMAP_OUTPUT)_INC := $(VPATH) $(EXTRAINCDIRS)
$(KEYMAP_OUTPUT)_CONFIG := $(CONFIG_H)
$(KEYBOARD_OUTPUT)_SRC := $(CHIBISRC) $(GFXSRC) $(NRFSRC)
$(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS) $(GFXDEFS)
$(KEYBOARD_OUTPUT)_INC := $(PROJECT_INC) $(GFXINC)
$(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG)
# Default target.
ifeq ($(SKIP_COMPILE),no)
all: build check-size
else
all:
echo "skipped" >&2
endif
build: elf cpfirmware
check-size: build
check-md5: build
objs-size: build
include show_options.mk
include $(TMK_PATH)/rules.mk
# Ensure we have generated files available for each of the objects
define GEN_FILES
$1: generated-files
endef
$(foreach O,$(OBJ),$(eval $(call GEN_FILES,$(patsubst %.a,%.o,$(O)))))
================================================
FILE: build_layout.mk
================================================
LAYOUTS_PATH := layouts
LAYOUTS_REPOS := $(patsubst %/,%,$(sort $(dir $(wildcard $(LAYOUTS_PATH)/*/))))
define SEARCH_LAYOUTS_REPO
LAYOUT_KEYMAP_PATH := $$(LAYOUTS_REPO)/$$(LAYOUT)/$$(KEYMAP)
LAYOUT_KEYMAP_JSON := $$(LAYOUT_KEYMAP_PATH)/keymap.json
LAYOUT_KEYMAP_C := $$(LAYOUT_KEYMAP_PATH)/keymap.c
ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_JSON))","")
-include $$(LAYOUT_KEYMAP_PATH)/rules.mk
KEYMAP_JSON := $$(LAYOUT_KEYMAP_JSON)
KEYMAP_PATH := $$(LAYOUT_KEYMAP_PATH)
else ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_C))","")
-include $$(LAYOUT_KEYMAP_PATH)/rules.mk
KEYMAP_C := $$(LAYOUT_KEYMAP_C)
KEYMAP_PATH := $$(LAYOUT_KEYMAP_PATH)
endif
endef
define SEARCH_LAYOUTS
$$(foreach LAYOUTS_REPO,$$(LAYOUTS_REPOS),$$(eval $$(call SEARCH_LAYOUTS_REPO)))
endef
ifneq ($(FORCE_LAYOUT),)
ifneq (,$(findstring $(FORCE_LAYOUT),$(LAYOUTS)))
$(info Forcing layout: $(FORCE_LAYOUT))
LAYOUTS := $(FORCE_LAYOUT)
else
$(error Forced layout does not exist)
endif
endif
$(foreach LAYOUT,$(LAYOUTS),$(eval $(call SEARCH_LAYOUTS)))
================================================
FILE: build_test.mk
================================================
ifndef VERBOSE
.SILENT:
endif
.DEFAULT_GOAL := all
include common.mk
TARGET=test/$(TEST)
GTEST_OUTPUT = $(BUILD_DIR)/gtest
TEST_OBJ = $(BUILD_DIR)/test_obj
OUTPUTS := $(TEST_OBJ)/$(TEST) $(GTEST_OUTPUT)
GTEST_INC := \
$(LIB_PATH)/googletest/googletest/include\
$(LIB_PATH)/googletest/googlemock/include\
GTEST_INTERNAL_INC :=\
$(LIB_PATH)/googletest/googletest\
$(LIB_PATH)/googletest/googlemock
$(GTEST_OUTPUT)_SRC :=\
googletest/src/gtest-all.cc\
googlemock/src/gmock-all.cc
$(GTEST_OUTPUT)_DEFS :=
$(GTEST_OUTPUT)_INC := $(GTEST_INC) $(GTEST_INTERNAL_INC)
LDFLAGS += -lstdc++ -lpthread -shared-libgcc
CREATE_MAP := no
VPATH +=\
$(LIB_PATH)/googletest\
$(LIB_PATH)/googlemock\
$(LIB_PATH)/printf
all: elf
VPATH += $(COMMON_VPATH)
PLATFORM:=TEST
PLATFORM_KEY:=test
ifeq ($(strip $(DEBUG)), 1)
CONSOLE_ENABLE = yes
endif
ifneq ($(filter $(FULL_TESTS),$(TEST)),)
include tests/$(TEST)/rules.mk
endif
include common_features.mk
include $(TMK_PATH)/common.mk
include $(QUANTUM_PATH)/debounce/tests/rules.mk
include $(QUANTUM_PATH)/sequencer/tests/rules.mk
include $(QUANTUM_PATH)/serial_link/tests/rules.mk
include $(TMK_PATH)/common/test/rules.mk
ifneq ($(filter $(FULL_TESTS),$(TEST)),)
include build_full_test.mk
endif
$(TEST)_SRC += \
tests/test_common/main.c \
$(LIB_PATH)/printf/printf.c \
$(QUANTUM_PATH)/logging/print.c
$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC)
$(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC)
$(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS)
$(TEST_OBJ)/$(TEST)_CONFIG := $($(TEST)_CONFIG)
include $(TMK_PATH)/native.mk
include $(TMK_PATH)/rules.mk
$(shell mkdir -p $(BUILD_DIR)/test 2>/dev/null)
$(shell mkdir -p $(TEST_OBJ) 2>/dev/null)
================================================
FILE: common.mk
================================================
include message.mk
# Directory common source files exist
TOP_DIR = .
TMK_DIR = tmk_core
TMK_PATH = $(TMK_DIR)
LIB_PATH = lib
QUANTUM_DIR = quantum
QUANTUM_PATH = $(QUANTUM_DIR)
DRIVER_DIR = drivers
DRIVER_PATH = $(DRIVER_DIR)
PLATFORM_DIR = platforms
PLATFORM_PATH = $(PLATFORM_DIR)
BUILD_DIR := .build
COMMON_VPATH := $(TOP_DIR)
COMMON_VPATH += $(TMK_PATH)
COMMON_VPATH += $(QUANTUM_PATH)
COMMON_VPATH += $(QUANTUM_PATH)/keymap_extras
COMMON_VPATH += $(QUANTUM_PATH)/audio
COMMON_VPATH += $(QUANTUM_PATH)/process_keycode
COMMON_VPATH += $(QUANTUM_PATH)/api
COMMON_VPATH += $(QUANTUM_PATH)/sequencer
COMMON_VPATH += $(DRIVER_PATH)
================================================
FILE: common_features.mk
================================================
# Copyright 2017 Fred Sundvik
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
SERIAL_PATH := $(QUANTUM_PATH)/serial_link
QUANTUM_SRC += \
$(QUANTUM_DIR)/quantum.c \
$(QUANTUM_DIR)/send_string.c \
$(QUANTUM_DIR)/bitwise.c \
$(QUANTUM_DIR)/led.c \
$(QUANTUM_DIR)/action.c \
$(QUANTUM_DIR)/action_layer.c \
$(QUANTUM_DIR)/action_macro.c \
$(QUANTUM_DIR)/action_tapping.c \
$(QUANTUM_DIR)/action_util.c \
$(QUANTUM_DIR)/eeconfig.c \
$(QUANTUM_DIR)/keyboard.c \
$(QUANTUM_DIR)/keymap_common.c \
$(QUANTUM_DIR)/keycode_config.c \
$(QUANTUM_DIR)/logging/debug.c \
$(QUANTUM_DIR)/logging/sendchar.c \
VPATH += $(QUANTUM_DIR)/logging
# Fall back to lib/printf if there is no platform provided print
ifeq ("$(wildcard $(TMK_PATH)/common/$(PLATFORM_KEY)/printf.mk)","")
include $(QUANTUM_PATH)/logging/print.mk
endif
ifeq ($(strip $(DEBUG_MATRIX_SCAN_RATE_ENABLE)), yes)
OPT_DEFS += -DDEBUG_MATRIX_SCAN_RATE
CONSOLE_ENABLE = yes
else ifeq ($(strip $(DEBUG_MATRIX_SCAN_RATE_ENABLE)), api)
OPT_DEFS += -DDEBUG_MATRIX_SCAN_RATE
endif
ifeq ($(strip $(API_SYSEX_ENABLE)), yes)
OPT_DEFS += -DAPI_SYSEX_ENABLE
OPT_DEFS += -DAPI_ENABLE
MIDI_ENABLE=yes
SRC += $(QUANTUM_DIR)/api/api_sysex.c
SRC += $(QUANTUM_DIR)/api.c
endif
ifeq ($(strip $(COMMAND_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/command.c
OPT_DEFS += -DCOMMAND_ENABLE
endif
AUDIO_ENABLE ?= no
ifeq ($(strip $(AUDIO_ENABLE)), yes)
ifeq ($(PLATFORM),CHIBIOS)
AUDIO_DRIVER ?= dac_basic
ifeq ($(strip $(AUDIO_DRIVER)), dac_basic)
OPT_DEFS += -DAUDIO_DRIVER_DAC
else ifeq ($(strip $(AUDIO_DRIVER)), dac_additive)
OPT_DEFS += -DAUDIO_DRIVER_DAC
## stm32f2 and above have a usable DAC unit, f1 do not, and need to use pwm instead
else ifeq ($(strip $(AUDIO_DRIVER)), pwm_software)
OPT_DEFS += -DAUDIO_DRIVER_PWM
else ifeq ($(strip $(AUDIO_DRIVER)), pwm_hardware)
OPT_DEFS += -DAUDIO_DRIVER_PWM
endif
else
# fallback for all other platforms is pwm
AUDIO_DRIVER ?= pwm_hardware
OPT_DEFS += -DAUDIO_DRIVER_PWM
endif
OPT_DEFS += -DAUDIO_ENABLE
MUSIC_ENABLE = yes
SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
SRC += $(QUANTUM_DIR)/process_keycode/process_clicky.c
SRC += $(QUANTUM_DIR)/audio/audio.c ## common audio code, hardware agnostic
SRC += $(QUANTUM_DIR)/audio/driver_$(PLATFORM_KEY)_$(strip $(AUDIO_DRIVER)).c
SRC += $(QUANTUM_DIR)/audio/voices.c
SRC += $(QUANTUM_DIR)/audio/luts.c
endif
ifeq ($(strip $(SEQUENCER_ENABLE)), yes)
OPT_DEFS += -DSEQUENCER_ENABLE
MUSIC_ENABLE = yes
SRC += $(QUANTUM_DIR)/sequencer/sequencer.c
SRC += $(QUANTUM_DIR)/process_keycode/process_sequencer.c
endif
ifeq ($(strip $(MIDI_ENABLE)), yes)
OPT_DEFS += -DMIDI_ENABLE
MUSIC_ENABLE = yes
SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
endif
MUSIC_ENABLE ?= no
ifeq ($(MUSIC_ENABLE), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
endif
ifeq ($(strip $(STENO_ENABLE)), yes)
OPT_DEFS += -DSTENO_ENABLE
VIRTSER_ENABLE ?= yes
SRC += $(QUANTUM_DIR)/process_keycode/process_steno.c
endif
ifeq ($(strip $(VIRTSER_ENABLE)), yes)
OPT_DEFS += -DVIRTSER_ENABLE
endif
ifeq ($(strip $(MOUSEKEY_ENABLE)), yes)
OPT_DEFS += -DMOUSEKEY_ENABLE
MOUSE_ENABLE := yes
SRC += $(QUANTUM_DIR)/mousekey.c
endif
ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
OPT_DEFS += -DPOINTING_DEVICE_ENABLE
MOUSE_ENABLE := yes
SRC += $(QUANTUM_DIR)/pointing_device.c
endif
VALID_EEPROM_DRIVER_TYPES := vendor custom transient i2c spi
EEPROM_DRIVER ?= vendor
ifeq ($(filter $(EEPROM_DRIVER),$(VALID_EEPROM_DRIVER_TYPES)),)
$(error EEPROM_DRIVER="$(EEPROM_DRIVER)" is not a valid EEPROM driver)
else
OPT_DEFS += -DEEPROM_ENABLE
ifeq ($(strip $(EEPROM_DRIVER)), custom)
OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_CUSTOM
COMMON_VPATH += $(DRIVER_PATH)/eeprom
SRC += eeprom_driver.c
else ifeq ($(strip $(EEPROM_DRIVER)), i2c)
OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_I2C
COMMON_VPATH += $(DRIVER_PATH)/eeprom
QUANTUM_LIB_SRC += i2c_master.c
SRC += eeprom_driver.c eeprom_i2c.c
else ifeq ($(strip $(EEPROM_DRIVER)), spi)
OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_SPI
COMMON_VPATH += $(DRIVER_PATH)/eeprom
QUANTUM_LIB_SRC += spi_master.c
SRC += eeprom_driver.c eeprom_spi.c
else ifeq ($(strip $(EEPROM_DRIVER)), transient)
OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_TRANSIENT
COMMON_VPATH += $(DRIVER_PATH)/eeprom
SRC += eeprom_driver.c eeprom_transient.c
else ifeq ($(strip $(EEPROM_DRIVER)), vendor)
OPT_DEFS += -DEEPROM_VENDOR
ifeq ($(PLATFORM),AVR)
# Automatically provided by avr-libc, nothing required
else ifeq ($(PLATFORM),CHIBIOS)
ifeq ($(MCU_SERIES), STM32F3xx)
SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c
SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c
OPT_DEFS += -DEEPROM_EMU_STM32F303xC
OPT_DEFS += -DSTM32_EEPROM_ENABLE
else ifeq ($(MCU_SERIES), STM32F1xx)
SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c
SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c
OPT_DEFS += -DEEPROM_EMU_STM32F103xB
OPT_DEFS += -DSTM32_EEPROM_ENABLE
else ifeq ($(MCU_SERIES)_$(MCU_LDSCRIPT), STM32F0xx_STM32F072xB)
SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c
SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c
OPT_DEFS += -DEEPROM_EMU_STM32F072xB
OPT_DEFS += -DSTM32_EEPROM_ENABLE
else ifeq ($(MCU_SERIES)_$(MCU_LDSCRIPT), STM32F0xx_STM32F042x6)
# Stack sizes: Since this chip has limited RAM capacity, the stack area needs to be reduced.
# This ensures that the EEPROM page buffer fits into RAM
USE_PROCESS_STACKSIZE = 0x600
USE_EXCEPTIONS_STACKSIZE = 0x300
SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c
SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c
OPT_DEFS += -DEEPROM_EMU_STM32F042x6
OPT_DEFS += -DSTM32_EEPROM_ENABLE
else ifneq ($(filter $(MCU_SERIES),STM32L0xx STM32L1xx),)
OPT_DEFS += -DEEPROM_DRIVER
COMMON_VPATH += $(DRIVER_PATH)/eeprom
COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/eeprom
SRC += eeprom_driver.c eeprom_stm32_L0_L1.c
else
# This will effectively work the same as "transient" if not supported by the chip
SRC += $(PLATFORM_COMMON_DIR)/eeprom_teensy.c
endif
else ifeq ($(PLATFORM),ARM_ATSAM)
SRC += $(PLATFORM_COMMON_DIR)/eeprom.c
else ifeq ($(PLATFORM),TEST)
SRC += $(PLATFORM_COMMON_DIR)/eeprom.c
endif
endif
endif
RGBLIGHT_ENABLE ?= no
VALID_RGBLIGHT_TYPES := WS2812 APA102 custom
ifeq ($(strip $(RGBLIGHT_CUSTOM_DRIVER)), yes)
RGBLIGHT_DRIVER ?= custom
endif
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
RGBLIGHT_DRIVER ?= WS2812
ifeq ($(filter $(RGBLIGHT_DRIVER),$(VALID_RGBLIGHT_TYPES)),)
$(error RGBLIGHT_DRIVER="$(RGBLIGHT_DRIVER)" is not a valid RGB type)
else
COMMON_VPATH += $(QUANTUM_DIR)/rgblight
POST_CONFIG_H += $(QUANTUM_DIR)/rgblight/rgblight_post_config.h
OPT_DEFS += -DRGBLIGHT_ENABLE
SRC += $(QUANTUM_DIR)/color.c
SRC += $(QUANTUM_DIR)/rgblight/rgblight.c
CIE1931_CURVE := yes
RGB_KEYCODES_ENABLE := yes
endif
ifeq ($(strip $(RGBLIGHT_DRIVER)), WS2812)
WS2812_DRIVER_REQUIRED := yes
endif
ifeq ($(strip $(RGBLIGHT_DRIVER)), APA102)
APA102_DRIVER_REQUIRED := yes
endif
ifeq ($(strip $(RGBLIGHT_DRIVER)), custom)
OPT_DEFS += -DRGBLIGHT_CUSTOM_DRIVER
endif
endif
LED_MATRIX_ENABLE ?= no
VALID_LED_MATRIX_TYPES := IS31FL3731 custom
# TODO: IS31FL3733 IS31FL3737 IS31FL3741
ifeq ($(strip $(LED_MATRIX_ENABLE)), yes)
ifeq ($(filter $(LED_MATRIX_DRIVER),$(VALID_LED_MATRIX_TYPES)),)
$(error "$(LED_MATRIX_DRIVER)" is not a valid matrix type)
endif
OPT_DEFS += -DLED_MATRIX_ENABLE
ifneq (,$(filter $(MCU), atmega16u2 atmega32u2 at90usb162))
# ATmegaxxU2 does not have hardware MUL instruction - lib8tion must be told to use software multiplication routines
OPT_DEFS += -DLIB8_ATTINY
endif
COMMON_VPATH += $(QUANTUM_DIR)/led_matrix
COMMON_VPATH += $(QUANTUM_DIR)/led_matrix/animations
COMMON_VPATH += $(QUANTUM_DIR)/led_matrix/animations/runners
SRC += $(QUANTUM_DIR)/process_keycode/process_backlight.c
SRC += $(QUANTUM_DIR)/led_matrix/led_matrix.c
SRC += $(QUANTUM_DIR)/led_matrix/led_matrix_drivers.c
SRC += $(LIB_PATH)/lib8tion/lib8tion.c
CIE1931_CURVE := yes
ifeq ($(strip $(LED_MATRIX_DRIVER)), IS31FL3731)
OPT_DEFS += -DIS31FL3731 -DSTM32_I2C -DHAL_USE_I2C=TRUE
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31fl3731-simple.c
QUANTUM_LIB_SRC += i2c_master.c
endif
endif
RGB_MATRIX_ENABLE ?= no
VALID_RGB_MATRIX_TYPES := AW20216 IS31FL3731 IS31FL3733 IS31FL3737 IS31FL3741 WS2812 custom
ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
ifeq ($(filter $(RGB_MATRIX_DRIVER),$(VALID_RGB_MATRIX_TYPES)),)
$(error "$(RGB_MATRIX_DRIVER)" is not a valid matrix type)
endif
OPT_DEFS += -DRGB_MATRIX_ENABLE
ifneq (,$(filter $(MCU), atmega16u2 atmega32u2 at90usb162))
# ATmegaxxU2 does not have hardware MUL instruction - lib8tion must be told to use software multiplication routines
OPT_DEFS += -DLIB8_ATTINY
endif
COMMON_VPATH += $(QUANTUM_DIR)/rgb_matrix
COMMON_VPATH += $(QUANTUM_DIR)/rgb_matrix/animations
COMMON_VPATH += $(QUANTUM_DIR)/rgb_matrix/animations/runners
SRC += $(QUANTUM_DIR)/color.c
SRC += $(QUANTUM_DIR)/rgb_matrix/rgb_matrix.c
SRC += $(QUANTUM_DIR)/rgb_matrix/rgb_matrix_drivers.c
SRC += $(LIB_PATH)/lib8tion/lib8tion.c
CIE1931_CURVE := yes
RGB_KEYCODES_ENABLE := yes
ifeq ($(strip $(RGB_MATRIX_DRIVER)), AW20216)
OPT_DEFS += -DAW20216 -DSTM32_SPI -DHAL_USE_SPI=TRUE
COMMON_VPATH += $(DRIVER_PATH)/led
SRC += aw20216.c
QUANTUM_LIB_SRC += spi_master.c
endif
ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3731)
OPT_DEFS += -DIS31FL3731 -DSTM32_I2C -DHAL_USE_I2C=TRUE
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31fl3731.c
QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3733)
OPT_DEFS += -DIS31FL3733 -DSTM32_I2C -DHAL_USE_I2C=TRUE
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31fl3733.c
QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3737)
OPT_DEFS += -DIS31FL3737 -DSTM32_I2C -DHAL_USE_I2C=TRUE
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31fl3737.c
QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3741)
OPT_DEFS += -DIS31FL3741 -DSTM32_I2C -DHAL_USE_I2C=TRUE
COMMON_VPATH += $(DRIVER_PATH)/led/issi
SRC += is31fl3741.c
QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(RGB_MATRIX_DRIVER)), WS2812)
OPT_DEFS += -DWS2812
WS2812_DRIVER_REQUIRED := yes
endif
ifeq ($(strip $(RGB_MATRIX_DRIVER)), APA102)
OPT_DEFS += -DAPA102
APA102_DRIVER_REQUIRED := yes
endif
ifeq ($(strip $(RGB_MATRIX_CUSTOM_KB)), yes)
OPT_DEFS += -DRGB_MATRIX_CUSTOM_KB
endif
ifeq ($(strip $(RGB_MATRIX_CUSTOM_USER)), yes)
OPT_DEFS += -DRGB_MATRIX_CUSTOM_USER
endif
endif
ifeq ($(strip $(RGB_KEYCODES_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_rgb.c
endif
ifeq ($(strip $(PRINTING_ENABLE)), yes)
OPT_DEFS += -DPRINTING_ENABLE
SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c
SRC += $(TMK_DIR)/protocol/serial_uart.c
endif
ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
SERIAL_SRC := $(wildcard $(SERIAL_PATH)/protocol/*.c)
SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
SERIAL_DEFS += -DSERIAL_LINK_ENABLE
COMMON_VPATH += $(SERIAL_PATH)
SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
OPT_DEFS += $(SERIAL_DEFS)
VAPTH += $(SERIAL_PATH)
endif
VARIABLE_TRACE ?= no
ifneq ($(strip $(VARIABLE_TRACE)),no)
SRC += $(QUANTUM_DIR)/variable_trace.c
OPT_DEFS += -DNUM_TRACED_VARIABLES=$(strip $(VARIABLE_TRACE))
ifneq ($(strip $(MAX_VARIABLE_TRACE_SIZE)),)
OPT_DEFS += -DMAX_VARIABLE_TRACE_SIZE=$(strip $(MAX_VARIABLE_TRACE_SIZE))
endif
endif
ifeq ($(strip $(LCD_ENABLE)), yes)
CIE1931_CURVE := yes
endif
VALID_BACKLIGHT_TYPES := pwm timer software custom
BACKLIGHT_ENABLE ?= no
ifeq ($(strip $(CONVERT_TO_PROTON_C)), yes)
BACKLIGHT_DRIVER ?= software
else
BACKLIGHT_DRIVER ?= pwm
endif
ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
ifeq ($(filter $(BACKLIGHT_DRIVER),$(VALID_BACKLIGHT_TYPES)),)
$(error BACKLIGHT_DRIVER="$(BACKLIGHT_DRIVER)" is not a valid backlight type)
endif
COMMON_VPATH += $(QUANTUM_DIR)/backlight
SRC += $(QUANTUM_DIR)/backlight/backlight.c
SRC += $(QUANTUM_DIR)/process_keycode/process_backlight.c
OPT_DEFS += -DBACKLIGHT_ENABLE
ifeq ($(strip $(BACKLIGHT_DRIVER)), custom)
OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER
else
SRC += $(QUANTUM_DIR)/backlight/backlight_driver_common.c
ifeq ($(strip $(BACKLIGHT_DRIVER)), pwm)
SRC += $(QUANTUM_DIR)/backlight/backlight_$(PLATFORM_KEY).c
else
SRC += $(QUANTUM_DIR)/backlight/backlight_$(strip $(BACKLIGHT_DRIVER)).c
endif
endif
endif
VALID_WS2812_DRIVER_TYPES := bitbang pwm spi i2c
WS2812_DRIVER ?= bitbang
ifeq ($(strip $(WS2812_DRIVER_REQUIRED)), yes)
ifeq ($(filter $(WS2812_DRIVER),$(VALID_WS2812_DRIVER_TYPES)),)
$(error WS2812_DRIVER="$(WS2812_DRIVER)" is not a valid WS2812 driver)
endif
OPT_DEFS += -DWS2812_DRIVER_$(strip $(shell echo $(WS2812_DRIVER) | tr '[:lower:]' '[:upper:]'))
ifeq ($(strip $(WS2812_DRIVER)), bitbang)
SRC += ws2812.c
else
SRC += ws2812_$(strip $(WS2812_DRIVER)).c
ifeq ($(strip $(PLATFORM)), CHIBIOS)
ifeq ($(strip $(WS2812_DRIVER)), pwm)
OPT_DEFS += -DSTM32_DMA_REQUIRED=TRUE
endif
endif
endif
# add extra deps
ifeq ($(strip $(WS2812_DRIVER)), i2c)
QUANTUM_LIB_SRC += i2c_master.c
endif
endif
ifeq ($(strip $(APA102_DRIVER_REQUIRED)), yes)
COMMON_VPATH += $(DRIVER_PATH)/led
SRC += apa102.c
endif
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
CIE1931_CURVE := yes
endif
ifeq ($(strip $(CIE1931_CURVE)), yes)
OPT_DEFS += -DUSE_CIE1931_CURVE
LED_TABLES := yes
endif
ifeq ($(strip $(LED_TABLES)), yes)
SRC += $(QUANTUM_DIR)/led_tables.c
endif
ifeq ($(strip $(TERMINAL_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_terminal.c
OPT_DEFS += -DTERMINAL_ENABLE
OPT_DEFS += -DUSER_PRINT
endif
ifeq ($(strip $(WPM_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/wpm.c
OPT_DEFS += -DWPM_ENABLE
endif
ifeq ($(strip $(ENCODER_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/encoder.c
OPT_DEFS += -DENCODER_ENABLE
endif
ifeq ($(strip $(VELOCIKEY_ENABLE)), yes)
OPT_DEFS += -DVELOCIKEY_ENABLE
SRC += $(QUANTUM_DIR)/velocikey.c
endif
ifeq ($(strip $(VIA_ENABLE)), yes)
DYNAMIC_KEYMAP_ENABLE := yes
RAW_ENABLE := yes
BOOTMAGIC_ENABLE := lite
SRC += $(QUANTUM_DIR)/via.c
OPT_DEFS += -DVIA_ENABLE
endif
ifeq ($(strip $(DYNAMIC_KEYMAP_ENABLE)), yes)
OPT_DEFS += -DDYNAMIC_KEYMAP_ENABLE
SRC += $(QUANTUM_DIR)/dynamic_keymap.c
endif
ifeq ($(strip $(DIP_SWITCH_ENABLE)), yes)
OPT_DEFS += -DDIP_SWITCH_ENABLE
SRC += $(QUANTUM_DIR)/dip_switch.c
endif
VALID_MAGIC_TYPES := yes lite
BOOTMAGIC_ENABLE ?= no
ifneq ($(strip $(BOOTMAGIC_ENABLE)), no)
ifeq ($(filter $(BOOTMAGIC_ENABLE),$(VALID_MAGIC_TYPES)),)
$(error BOOTMAGIC_ENABLE="$(BOOTMAGIC_ENABLE)" is not a valid type of magic)
endif
ifneq ($(strip $(BOOTMAGIC_ENABLE)), no)
OPT_DEFS += -DBOOTMAGIC_LITE
QUANTUM_SRC += $(QUANTUM_DIR)/bootmagic/bootmagic_lite.c
endif
endif
COMMON_VPATH += $(QUANTUM_DIR)/bootmagic
QUANTUM_SRC += $(QUANTUM_DIR)/bootmagic/magic.c
VALID_CUSTOM_MATRIX_TYPES:= yes lite no
CUSTOM_MATRIX ?= no
ifneq ($(strip $(CUSTOM_MATRIX)), yes)
ifeq ($(filter $(CUSTOM_MATRIX),$(VALID_CUSTOM_MATRIX_TYPES)),)
$(error CUSTOM_MATRIX="$(CUSTOM_MATRIX)" is not a valid custom matrix type)
endif
# Include common stuff for all non custom matrix users
QUANTUM_SRC += $(QUANTUM_DIR)/matrix_common.c
# if 'lite' then skip the actual matrix implementation
ifneq ($(strip $(CUSTOM_MATRIX)), lite)
# Include the standard or split matrix code if needed
QUANTUM_SRC += $(QUANTUM_DIR)/matrix.c
endif
endif
# Debounce Modules. Set DEBOUNCE_TYPE=custom if including one manually.
DEBOUNCE_TYPE ?= sym_defer_g
ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
QUANTUM_SRC += $(QUANTUM_DIR)/debounce/$(strip $(DEBOUNCE_TYPE)).c
endif
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
POST_CONFIG_H += $(QUANTUM_DIR)/split_common/post_config.h
OPT_DEFS += -DSPLIT_KEYBOARD
CRC_ENABLE := yes
# Include files used by all split keyboards
QUANTUM_SRC += $(QUANTUM_DIR)/split_common/split_util.c
# Determine which (if any) transport files are required
ifneq ($(strip $(SPLIT_TRANSPORT)), custom)
QUANTUM_SRC += $(QUANTUM_DIR)/split_common/transport.c \
$(QUANTUM_DIR)/split_common/transactions.c
OPT_DEFS += -DSPLIT_COMMON_TRANSACTIONS
# Functions added via QUANTUM_LIB_SRC are only included in the final binary if they're called.
# Unused functions are pruned away, which is why we can add multiple drivers here without bloat.
ifeq ($(PLATFORM),AVR)
ifneq ($(NO_I2C),yes)
QUANTUM_LIB_SRC += i2c_master.c \
i2c_slave.c
endif
endif
SERIAL_DRIVER ?= bitbang
OPT_DEFS += -DSERIAL_DRIVER_$(strip $(shell echo $(SERIAL_DRIVER) | tr '[:lower:]' '[:upper:]'))
ifeq ($(strip $(SERIAL_DRIVER)), bitbang)
QUANTUM_LIB_SRC += serial.c
else
QUANTUM_LIB_SRC += serial_$(strip $(SERIAL_DRIVER)).c
endif
endif
COMMON_VPATH += $(QUANTUM_PATH)/split_common
endif
ifeq ($(strip $(CRC_ENABLE)), yes)
OPT_DEFS += -DCRC_ENABLE
SRC += crc.c
endif
HAPTIC_ENABLE ?= no
ifneq ($(strip $(HAPTIC_ENABLE)),no)
COMMON_VPATH += $(DRIVER_PATH)/haptic
OPT_DEFS += -DHAPTIC_ENABLE
SRC += $(QUANTUM_DIR)/haptic.c
SRC += $(QUANTUM_DIR)/process_keycode/process_haptic.c
endif
ifneq ($(filter DRV2605L, $(HAPTIC_ENABLE)), )
SRC += DRV2605L.c
QUANTUM_LIB_SRC += i2c_master.c
OPT_DEFS += -DDRV2605L
endif
ifneq ($(filter SOLENOID, $(HAPTIC_ENABLE)), )
SRC += solenoid.c
OPT_DEFS += -DSOLENOID_ENABLE
endif
ifeq ($(strip $(HD44780_ENABLE)), yes)
SRC += platforms/avr/drivers/hd44780.c
OPT_DEFS += -DHD44780_ENABLE
endif
VALID_OLED_DRIVER_TYPES := SSD1306 custom
OLED_DRIVER ?= SSD1306
ifeq ($(strip $(OLED_ENABLE)), yes)
ifeq ($(filter $(OLED_DRIVER),$(VALID_OLED_DRIVER_TYPES)),)
$(error OLED_DRIVER="$(OLED_DRIVER)" is not a valid OLED driver)
else
OPT_DEFS += -DOLED_ENABLE
COMMON_VPATH += $(DRIVER_PATH)/oled
OPT_DEFS += -DOLED_DRIVER_$(strip $(shell echo $(OLED_DRIVER) | tr '[:lower:]' '[:upper:]'))
ifeq ($(strip $(OLED_DRIVER)), SSD1306)
SRC += ssd1306_sh1106.c
QUANTUM_LIB_SRC += i2c_master.c
endif
endif
endif
ifeq ($(strip $(ST7565_ENABLE)), yes)
OPT_DEFS += -DST7565_ENABLE
COMMON_VPATH += $(DRIVER_PATH)/oled # For glcdfont.h
COMMON_VPATH += $(DRIVER_PATH)/lcd
QUANTUM_LIB_SRC += spi_master.c
SRC += st7565.c
endif
include $(DRIVER_PATH)/qwiic/qwiic.mk
ifeq ($(strip $(UCIS_ENABLE)), yes)
OPT_DEFS += -DUCIS_ENABLE
UNICODE_COMMON := yes
SRC += $(QUANTUM_DIR)/process_keycode/process_ucis.c
endif
ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
OPT_DEFS += -DUNICODEMAP_ENABLE
UNICODE_COMMON := yes
SRC += $(QUANTUM_DIR)/process_keycode/process_unicodemap.c
endif
ifeq ($(strip $(UNICODE_ENABLE)), yes)
OPT_DEFS += -DUNICODE_ENABLE
UNICODE_COMMON := yes
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
endif
ifeq ($(strip $(UNICODE_COMMON)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c
endif
SPACE_CADET_ENABLE ?= yes
ifeq ($(strip $(SPACE_CADET_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_space_cadet.c
OPT_DEFS += -DSPACE_CADET_ENABLE
endif
MAGIC_ENABLE ?= yes
ifeq ($(strip $(MAGIC_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_magic.c
OPT_DEFS += -DMAGIC_KEYCODE_ENABLE
endif
GRAVE_ESC_ENABLE ?= yes
ifeq ($(strip $(GRAVE_ESC_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_grave_esc.c
OPT_DEFS += -DGRAVE_ESC_ENABLE
endif
ifeq ($(strip $(DYNAMIC_MACRO_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_dynamic_macro.c
OPT_DEFS += -DDYNAMIC_MACRO_ENABLE
endif
ifeq ($(strip $(COMBO_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_combo.c
OPT_DEFS += -DCOMBO_ENABLE
endif
ifeq ($(strip $(KEY_OVERRIDE_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_key_override.c
OPT_DEFS += -DKEY_OVERRIDE_ENABLE
endif
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
OPT_DEFS += -DTAP_DANCE_ENABLE
endif
ifeq ($(strip $(KEY_LOCK_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_key_lock.c
OPT_DEFS += -DKEY_LOCK_ENABLE
endif
ifeq ($(strip $(LEADER_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_leader.c
OPT_DEFS += -DLEADER_ENABLE
endif
ifeq ($(strip $(AUTO_SHIFT_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_auto_shift.c
OPT_DEFS += -DAUTO_SHIFT_ENABLE
ifeq ($(strip $(AUTO_SHIFT_MODIFIERS)), yes)
OPT_DEFS += -DAUTO_SHIFT_MODIFIERS
endif
endif
JOYSTICK_ENABLE ?= no
VALID_JOYSTICK_TYPES := analog digital
JOYSTICK_DRIVER ?= analog
ifeq ($(strip $(JOYSTICK_ENABLE)), yes)
ifeq ($(filter $(JOYSTICK_DRIVER),$(VALID_JOYSTICK_TYPES)),)
$(error "$(JOYSTICK_DRIVER)" is not a valid joystick driver)
endif
OPT_DEFS += -DJOYSTICK_ENABLE
SRC += $(QUANTUM_DIR)/process_keycode/process_joystick.c
SRC += $(QUANTUM_DIR)/joystick.c
ifeq ($(strip $(JOYSTICK_DRIVER)), analog)
OPT_DEFS += -DANALOG_JOYSTICK_ENABLE
SRC += analog.c
endif
ifeq ($(strip $(JOYSTICK_DRIVER)), digital)
OPT_DEFS += -DDIGITAL_JOYSTICK_ENABLE
endif
endif
DIGITIZER_ENABLE ?= no
ifneq ($(strip $(DIGITIZER_ENABLE)), no)
SRC += $(QUANTUM_DIR)/digitizer.c
endif
USBPD_ENABLE ?= no
VALID_USBPD_DRIVER_TYPES = custom vendor
USBPD_DRIVER ?= vendor
ifeq ($(strip $(USBPD_ENABLE)), yes)
ifeq ($(filter $(strip $(USBPD_DRIVER)),$(VALID_USBPD_DRIVER_TYPES)),)
$(error USBPD_DRIVER="$(USBPD_DRIVER)" is not a valid USBPD driver)
else
OPT_DEFS += -DUSBPD_ENABLE
ifeq ($(strip $(USBPD_DRIVER)), vendor)
# Vendor-specific implementations
OPT_DEFS += -DUSBPD_VENDOR
ifeq ($(strip $(MCU_SERIES)), STM32G4xx)
OPT_DEFS += -DUSBPD_STM32G4
SRC += usbpd_stm32g4.c
else
$(error There is no vendor-provided USBPD driver available)
endif
else ifeq ($(strip $(USBPD_DRIVER)), custom)
OPT_DEFS += -DUSBPD_CUSTOM
# Board designers can add their own driver to $(SRC)
endif
endif
endif
================================================
FILE: data/mappings/info_config.json
================================================
# This file maps keys between `config.h` and `info.json`. It is used by QMK
# to correctly and consistently map back and forth between the two systems.
{
# Format:
# <config.h key>: {"info_key": <info.json key>, ["value_type": <value_type>], ["to_json": <true/false>], ["to_c": <true/false>]}
# value_type: one of "array", "array.int", "bool", "int", "hex", "list", "mapping"
# to_json: Default `true`. Set to `false` to exclude this mapping from info.json
# to_c: Default `true`. Set to `false` to exclude this mapping from config.h
# warn_duplicate: Default `true`. Set to `false` to turn off warning when a value exists in both places
"AUDIO_VOICES": {"info_key": "audio.voices", "value_type": "bool"},
"BACKLIGHT_BREATHING": {"info_key": "backlight.breathing", "value_type": "bool"},
"BREATHING_PERIOD": {"info_key": "backlight.breathing_period", "value_type": "int"},
"BACKLIGHT_PIN": {"info_key": "backlight.pin"},
"COMBO_COUNT": {"info_key": "combo.count", "value_type": "int"},
"COMBO_TERM": {"info_key": "combo.term", "value_type": "int"},
"DEBOUNCE": {"info_key": "debounce", "value_type": "int"},
"DEVICE_VER": {"info_key": "usb.device_ver", "value_type": "hex"},
"DESCRIPTION": {"info_key": "keyboard_folder", "to_json": false},
"DIODE_DIRECTION": {"info_key": "diode_direction"},
"FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "bool"},
"DYNAMIC_KEYMAP_EEPROM_MAX_ADDR": {"info_key": "dynamic_keymap.eeprom_max_addr", "value_type": "int"},
"DYNAMIC_KEYMAP_LAYER_COUNT": {"info_key": "dynamic_keymap.layer_count", "value_type": "int"},
"IGNORE_MOD_TAP_INTERRUPT": {"info_key": "tapping.ignore_mod_tap_interrupt", "value_type": "bool"},
"IGNORE_MOD_TAP_INTERRUPT_PER_KEY": {"info_key": "tapping.ignore_mod_tap_interrupt_per_key", "value_type": "bool"},
"LAYOUTS": {"info_key": "layout_aliases", "value_type": "mapping"},
"LEADER_PER_KEY_TIMING": {"info_key": "leader_key.timing", "value_type": "bool"},
"LEADER_KEY_STRICT_KEY_PROCESSING": {"info_key": "leader_key.strict_processing", "value_type": "bool"},
"LEADER_TIMEOUT": {"info_key": "leader_key.timeout", "value_type": "int"},
"LED_CAPS_LOCK_PIN": {"info_key": "indicators.caps_lock"},
"LED_NUM_LOCK_PIN": {"info_key": "indicators.num_lock"},
"LED_SCROLL_LOCK_PIN": {"info_key": "indicators.scroll_lock"},
"MANUFACTURER": {"info_key": "manufacturer"},
"MATRIX_HAS_GHOST": {"info_key": "matrix_pins.ghost", "value_type": "bool"},
"MATRIX_IO_DELAY": {"info_key": "matrix_pins.io_delay", "value_type": "int"},
"MOUSEKEY_DELAY": {"info_key": "mousekey.delay", "value_type": "int"},
"MOUSEKEY_INTERVAL": {"info_key": "mousekey.interval", "value_type": "int"},
"MOUSEKEY_MAX_SPEED": {"info_key": "mousekey.max_speed", "value_type": "int"},
"MOUSEKEY_TIME_TO_MAX": {"info_key": "mousekey.time_to_max", "value_type": "int"},
"MOUSEKEY_WHEEL_DELAY": {"info_key": "mousekey.wheel_delay", "value_type": "int"},
"ONESHOT_TIMEOUT": {"info_key": "oneshot.timeout", "value_type": "int"},
"ONESHOT_TAP_TOGGLE": {"info_key": "oneshot.tap_toggle", "value_type": "int"},
"PERMISSIVE_HOLD": {"info_key": "tapping.permissive_hold", "value_type": "bool"},
"PERMISSIVE_HOLD_PER_KEY": {"info_key": "tapping.permissive_hold_per_key", "value_type": "bool"},
"RETRO_TAPPING": {"info_key": "tapping.retro", "value_type": "bool"},
"RETRO_TAPPING_PER_KEY": {"info_key": "tapping.retro_per_key", "value_type": "bool"},
"RGB_DI_PIN": {"info_key": "rgblight.pin"},
"RGBLED_NUM": {"info_key": "rgblight.led_count", "value_type": "int"},
"RGBLED_SPLIT": {"info_key": "rgblight.split_count", "value_type": "array.int"},
"RGBLIGHT_ANIMATIONS": {"info_key": "rgblight.animations.all", "value_type": "bool"},
"RGBLIGHT_EFFECT_ALTERNATING": {"info_key": "rgblight.animations.alternating", "value_type": "bool"},
"RGBLIGHT_EFFECT_BREATHING": {"info_key": "rgblight.animations.breathing", "value_type": "bool"},
"RGBLIGHT_EFFECT_CHRISTMAS": {"info_key": "rgblight.animations.christmas", "value_type": "bool"},
"RGBLIGHT_EFFECT_KNIGHT": {"info_key": "rgblight.animations.knight", "value_type": "bool"},
"RGBLIGHT_EFFECT_RAINBOW_MOOD": {"info_key": "rgblight.animations.rainbow_mood", "value_type": "bool"},
"RGBLIGHT_EFFECT_RAINBOW_SWIRL": {"info_key": "rgblight.animations.rainbow_swirl", "value_type": "bool"},
"RGBLIGHT_EFFECT_RGB_TEST": {"info_key": "rgblight.animations.rgb_test", "value_type": "bool"},
"RGBLIGHT_EFFECT_SNAKE": {"info_key": "rgblight.animations.snake", "value_type": "bool"},
"RGBLIGHT_EFFECT_STATIC_GRADIENT": {"info_key": "rgblight.animations.static_gradient", "value_type": "bool"},
"RGBLIGHT_EFFECT_TWINKLE": {"info_key": "rgblight.animations.twinkle"},
"RGBLIGHT_LAYER_BLINK": {"info_key": "rgblight.layers.blink", "value_type": "bool"},
"RGBLIGHT_LAYERS": {"info_key": "rgblight.layers.enabled", "value_type": "bool"},
"RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF": {"info_key": "rgblight.layers.override_rgb", "value_type": "bool"},
"RGBLIGHT_LIMIT_VAL": {"info_key": "rgblight.max_brightness", "value_type": "int"},
"RGBLIGHT_MAX_LAYERS": {"info_key": "rgblight.layers.max", "value_type": "int"},
"RGBLIGHT_HUE_STEP": {"info_key": "rgblight.hue_steps", "value_type": "int"},
"RGBLIGHT_SAT_STEP": {"info_key": "rgblight.saturation_steps", "value_type": "int"},
"RGBLIGHT_VAL_STEP": {"info_key": "rgblight.brightness_steps", "value_type": "int"},
"RGBLIGHT_SLEEP": {"info_key": "rgblight.sleep", "value_type": "bool"},
"RGBLIGHT_SPLIT": {"info_key": "rgblight.split", "value_type": "bool"},
"RGBW": {"info_key": "rgblight.rgbw", "value_type": "bool"},
"PRODUCT": {"info_key": "keyboard_folder", "to_json": false},
"PRODUCT_ID": {"info_key": "usb.pid", "value_type": "hex"},
"VENDOR_ID": {"info_key": "usb.vid", "value_type": "hex"},
"QMK_ESC_OUTPUT": {"info_key": "qmk_lufa_bootloader.esc_output"},
"QMK_ESC_INPUT": {"info_key": "qmk_lufa_bootloader.esc_input"},
"QMK_KEYS_PER_SCAN": {"info_key": "qmk.keys_per_scan", "value_type": "int"},
"QMK_LED": {"info_key": "qmk_lufa_bootloader.led"},
"QMK_SPEAKER": {"info_key": "qmk_lufa_bootloader.speaker"},
"SPLIT_MODS_ENABLE": {"info_key": "split.transport.sync_modifiers", "value_type": "bool"},
"SPLIT_TRANSPORT_MIRROR": {"info_key": "split.transport.sync_matrix_state", "value_type": "bool"},
"SPLIT_USB_DETECT": {"info_key": "split.usb_detect.enabled", "value_type": "bool"},
"SPLIT_USB_TIMEOUT": {"info_key": "split.usb_detect.timeout", "value_type": "int"},
"SPLIT_USB_TIMEOUT_POLL": {"info_key": "split.usb_detect.polling_interval", "value_type": "int"},
"SOFT_SERIAL_PIN": {"info_key": "split.soft_serial_pin"},
"SOFT_SERIAL_SPEED": {"info_key": "split.soft_serial_speed"},
"TAP_CODE_DELAY": {"info_key": "qmk.tap_keycode_delay", "value_type": "int"},
"TAP_HOLD_CAPS_DELAY": {"info_key": "qmk.tap_capslock_delay", "value_type": "int"},
"TAPPING_FORCE_HOLD": {"info_key": "tapping.force_hold", "value_type": "bool"},
"TAPPING_FORCE_HOLD_PER_KEY": {"info_key": "tapping.force_hold_per_key", "value_type": "bool"},
"TAPPING_TERM": {"info_key": "tapping.term", "value_type": "int"},
"TAPPING_TERM_PER_KEY": {"info_key": "tapping.term_per_key", "value_type": "bool"},
"TAPPING_TOGGLE": {"info_key": "tapping.toggle", "value_type": "int"},
"USB_MAX_POWER_CONSUMPTION": {"info_key": "usb.max_power", "value_type": "int"},
"USB_POLLING_INTERVAL_MS": {"info_key": "usb.polling_interval", "value_type": "int"},
"USB_SUSPEND_WAKEUP_DELAY": {"info_key": "usb.suspend_wakeup_delay", "value_type": "int"},
}
================================================
FILE: data/mappings/info_rules.json
================================================
# This file maps keys between `rules.mk` and `info.json`. It is used by QMK
# to correctly and consistently map back and forth between the two systems.
{
# Format:
# <rules.mk key>: {"info_key": <info.json key>, ["value_type": <value_type>], ["to_json": <true/false>], ["to_c": <true/false>]}
# value_type: one of "array", "array.int", "bool", "int", "list", "hex", "mapping"
# to_json: Default `true`. Set to `false` to exclude this mapping from info.json
# to_c: Default `true`. Set to `false` to exclude this mapping from rules.mk
# warn_duplicate: Default `true`. Set to `false` to turn off warning when a value exists in both places
"BOARD": {"info_key": "board"},
"BOOTLOADER": {"info_key": "bootloader", "warn_duplicate": false},
"BLUETOOTH": {"info_key": "bluetooth.driver"},
"FIRMWARE_FORMAT": {"info_key": "build.firmware_format"},
"KEYBOARD_SHARED_EP": {"info_key": "usb.shared_endpoint.keyboard", "value_type": "bool"},
"MOUSE_SHARED_EP": {"info_key": "usb.shared_endpoint.mouse", "value_type": "bool"},
"LAYOUTS": {"info_key": "community_layouts", "value_type": "list"},
"LED_MATRIX_DRIVER": {"info_key": "led_matrix.driver"},
"LTO_ENABLE": {"info_key": "build.lto", "value_type": "bool"},
"MCU": {"info_key": "processor", "warn_duplicate": false},
"MOUSEKEY_ENABLE": {"info_key": "mouse_key.enabled", "value_type": "bool"},
"NO_USB_STARTUP_CHECK": {"info_key": "usb.no_startup_check", "value_type": "bool"},
"SPLIT_KEYBOARD": {"info_key": "split.enabled", "value_type": "bool"},
"SPLIT_TRANSPORT": {"info_key": "split.transport.protocol", "value_type": "str", "to_c": false},
"WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"}
}
================================================
FILE: data/mappings/keyboard_aliases.json
================================================
{
# Format for each entry:
# <alias>: {
# target: <keyboard_folder>,
# layouts: {
# <layout_alias>: <layout_target>
# }
# }
#
# Both target and layouts are optional.
'2_milk': {
target: 'spaceman/2_milk'
},
'aeboards/constellation': {
target: 'aeboards/constellation/rev1'
},
'aeboards/ext65': {
target: 'aeboards/ext65/rev1'
},
'ai03/equinox': {
target: 'ai03/equinox/rev1'
},
aleth42: {
target: 'aleth42/rev1'
},
alice: {
target: 'tgr/alice'
},
angel17: {
target: 'angel17/alpha'
},
angel64: {
target: 'angel64/alpha'
},
at101_blackheart: {
target: 'at101_bh'
},
'atom47/rev2': {
target: 'maartenwut/atom47/rev2'
},
'atom47/rev3': {
target: 'maartenwut/atom47/rev3'
},
bakeneko65: {
target: 'bakeneko65/rev2'
},
bear_face: {
target: 'bear_face/v1'
},
bm16a: {
target: 'kprepublic/bm16a'
},
bm16s: {
target: 'kprepublic/bm16s'
},
bm40hsrgb: {
target: 'kprepublic/bm40hsrgb'
},
bm43a: {
target: 'kprepublic/bm43a'
},
bm60poker: {
target: 'kprepublic/bm60poker'
},
bm60rgb: {
target: 'kprepublic/bm60rgb'
},
bm60rgb_iso: {
target: 'kprepublic/bm60rgb_iso'
},
bm68rgb: {
target: 'kprepublic/bm68rgb'
},
'bpiphany/pegasushoof': {
target: 'bpiphany/pegasushoof/2013'
},
chavdai40: {
target: 'chavdai40/rev1'
},
'candybar/lefty': {
target: 'tkc/candybar/lefty'
},
'candybar/righty': {
target: 'tkc/candybar/righty'
},
canoe: {
target: 'percent/canoe'
},
'clawsome/gamebuddy': {
target: 'clawsome/gamebuddy/v1_0'
},
'cmm_studio/saka68': {
target: 'cmm_studio/saka68/solder'
},
'cospad': {
target: 'kprepublic/cospad'
},
'crkbd/rev1/legacy': {
target: 'crkbd/rev1'
},
'crkbd/rev1/common': {
target: 'crkbd/rev1'
},
'custommk/genesis': {
target: 'custommk/genesis/rev1'
},
'daisy': {
target: 'ktec/daisy'
},
'doro67/multi': {
layouts: {
LAYOUT_ansi: 'LAYOUT_65_ansi_blocker'
}
},
'doro67/regular': {
layouts: {
LAYOUT: 'LAYOUT_65_ansi_blocker'
}
},
'doro67/rgb': {
layouts: {
LAYOUT: 'LAYOUT_65_ansi_blocker'
}
},
drakon: {
target: 'jagdpietr/drakon'
},
'durgod/k320': {
target: 'durgod/k3x0/k320'
},
'dztech/dz60rgb': {
target: 'dztech/dz60rgb/v1'
},
'dztech/dz60rgb_ansi': {
target: 'dztech/dz60rgb_ansi/v1'
},
'dztech/dz60rgb_wkl': {
target: 'dztech/dz60rgb_wkl/v1'
},
'dztech/dz65rgb': {
target: 'dztech/dz65rgb/v1'
},
'dztech/volcano660': {
target: 'ilumkb/volcano660'
},
eek: {
target: 'eek/silk_down'
},
'ergodone': {
target: 'ktec/ergodone'
},
ergoinu: {
target: 'dm9records/ergoinu'
},
'exclusive/e85': {
target: 'exclusive/e85/hotswap'
},
gh60: {
target: 'gh60/revc'
},
'gmmk/pro': {
target: 'gmmk/pro/ansi'
},
'handwired/ferris': {
target: 'ferris/0_1'
},
'handwired/p1800fl': {
target: 'team0110/p1800fl'
},
'helix/pico/sc/back': {
target: 'helix/pico/sc'
},
'helix/pico/sc/under': {
target: 'helix/pico/sc'
},
'helix/rev2/back/oled': {
target: 'helix/rev2/back'
},
'helix/rev2/oled': {
target: 'helix/rev2'
},
'helix/rev2/oled/back': {
target: 'helix/rev2/back'
},
'helix/rev2/oled/under': {
target: 'helix/rev2/under'
},
'helix/rev2/sc/back': {
target: 'helix/rev2/sc'
},
'helix/rev2/sc/oled': {
target: 'helix/rev2/sc'
},
'helix/rev2/sc/oledback': {
target: 'helix/rev2/sc'
},
'helix/rev2/sc/oledunder': {
target: 'helix/rev2/sc'
},
'helix/rev2/sc/under': {
target: 'helix/rev2/sc'
},
'helix/rev2/under': {
target: 'helix/rev2/sc'
},
'helix/rev2/under/oled': {
target: 'helix/rev2/under'
},
id80: {
target: 'id80/ansi'
},
idb_60: {
target: 'idb/idb_60',
layouts: {
LAYOUT: 'LAYOUT_all'
}
},
'jj40': {
target: 'kprepublic/jj40'
},
'jj4x4': {
target: 'kprepublic/jj4x4'
},
'jj50': {
target: 'kprepublic/jj50'
},
jones: {
target: 'jones/v03_1'
},
katana60: {
target: 'rominronin/katana60/rev1'
},
'kbdfans/kbd67mkiirgb': {
target: 'kbdfans/kbd67/mkiirgb',
layouts: {
LAYOUT: 'LAYOUT_65_ansi_blocker'
}
},
'kbdfans/kbd67/mkiirgb': {
target: 'kbdfans/kbd67/mkiirgb/v1'
},
'keebio/dsp40': {
target: 'keebio/dsp40/rev1'
},
'keycapsss/plaid_pad': {
target: 'keycapsss/plaid_pad/rev1'
},
kudox: {
target: 'kudox/rev1'
},
'kyria': {
target: 'splitkb/kyria'
},
'lazydesigners/the60': {
target: 'lazydesigners/the60/rev1'
},
'lfkeyboards/lfk78': {
target: 'lfkeyboards/lfk78/revj'
},
'lfkeyboards/smk65': {
target: 'lfkeyboards/smk65/revb'
},
'maartenwut/atom47/rev2': {
target: 'evyd13/atom47/rev2'
},
'maartenwut/atom47/rev3': {
target: 'evyd13/atom47/rev3'
},
'maartenwut/eon40': {
target: 'evyd13/eon40'
},
'maartenwut/eon65': {
target: 'evyd13/eon65'
},
'maartenwut/eon75': {
target: 'evyd13/eon75'
},
'maartenwut/eon87': {
target: 'evyd13/eon87'
},
'maartenwut/eon95': {
target: 'evyd13/eon95'
},
'maartenwut/gh80_1800': {
target: 'evyd13/gh80_1800'
},
'maartenwut/gh80_3700': {
target: 'evyd13/gh80_3700'
},
'maartenwut/minitomic': {
target: 'evyd13/minitomic'
},
'maartenwut/mx5160': {
target: 'evyd13/mx5160'
},
'maartenwut/nt660': {
target: 'evyd13/nt660'
},
'maartenwut/omrontkl': {
target: 'evyd13/omrontkl'
},
'maartenwut/plain60': {
target: 'evyd13/plain60'
},
'maartenwut/pockettype': {
target: 'evyd13/pockettype'
},
'maartenwut/quackfire': {
target: 'evyd13/quackfire'
},
'maartenwut/solheim68': {
target: 'evyd13/solheim68'
},
'maartenwut/ta65': {
target: 'evyd13/ta65'
},
'maartenwut/wasdat': {
target: 'evyd13/wasdat'
},
'maartenwut/wasdat_code': {
target: 'evyd13/wasdat_code'
},
'maartenwut/wonderland': {
target: 'evyd13/wonderland'
},
'matrix/m12og': {
target: 'matrix/m12og/rev1'
},
'mechlovin/hannah910': {
target: 'mechlovin/hannah910/rev1'
},
'mechlovin/adelais/rgb_led': {
target: 'mechlovin/adelais/rgb_led/rev1'
},
'mechlovin/adelais/standard_led': {
target: 'mechlovin/adelais/standard_led/rev2'
},
'mechlovin/delphine': {
target: 'mechlovin/delphine/mono_led'
},
'mechlovin/hannah60rgb': {
target: 'mechlovin/hannah60rgb/rev1'
},
'mechlovin/hannah65/mechlovin9': {
target: 'mechlovin/mechlovin9/rev1'
},
'melgeek/z70ultra': {
target: 'melgeek/z70ultra/rev1'
},
'mechlovin/hannah65': {
target: 'mechlovin/hannah65/rev1'
},
model01: {
target: 'keyboardio/model01'
},
m0lly: {
target: 'tkc/m0lly'
},
'montsinger/rebound': {
target: 'montsinger/rebound/rev1'
},
nomu30: {
target: 'nomu30/rev1'
},
'noxary/268_2': {
layouts: {
LAYOUT: 'LAYOUT_65_ansi_blocker'
}
},
oddball: {
target: 'oddball/v1'
},
omnikey_blackheart: {
target: 'omnikey_bh'
},
'pabile/p20': {
target: 'pabile/p20/ver1'
},
'pancake/feather': {
target: 'spaceman/pancake/feather'
},
'pancake/promicro': {
target: 'spaceman/pancake/promicro'
},
'peiorisboards/ixora': {
target: 'coarse/ixora'
},
'percent/canoe': {
layouts: {
LAYOUT_iso: 'LAYOUT_65_iso_blocker'
}
},
plaid: {
target: 'dm9records/plaid'
},
plain60: {
target: 'maartenwut/plain60'
},
'ploopyco/trackball': {
target: 'ploopyco/trackball/rev1_005'
},
polilla: {
target: 'polilla/rev1'
},
'preonic/rev1': {
layouts: {
LAYOUT_preonic_grid: 'LAYOUT_ortho_5x12'
}
},
'preonic/rev2': {
layouts: {
LAYOUT_preonic_grid: 'LAYOUT_ortho_5x12'
}
},
'preonic/rev3': {
layouts: {
LAYOUT_preonic_grid: 'LAYOUT_ortho_5x12'
}
},
'primekb/prime_l': {
target: 'primekb/prime_l/v1'
},
'primekb/prime_l_v2': {
target: 'primekb/prime_l/v2'
},
'projectkb/alice': {
target: 'projectkb/alice/rev1'
},
'rama/koyu': {
target: 'wilba_tech/rama_works_koyu'
},
'rama/m6_a': {
target: 'wilba_tech/rama_works_m6_a'
},
'rama/m6_b': {
target: 'wilba_tech/rama_works_m6_b'
},
'rama/m10_b': {
target: 'wilba_tech/rama_works_m10_b'
},
'rama/m60_a': {
target: 'wilba_tech/rama_works_m60_a'
},
'rama/u80_a': {
target: 'wilba_tech/rama_works_u80_a'
},
'ramonimbao/herringbone': {
target: 'ramonimbao/herringbone/v1'
},
'ramonimbao/mona': {
target: 'ramonimbao/mona/v1'
},
'rgbkb/pan': {
target: 'rgbkb/pan/rev1/32a'
},
'rgbkb/pan/rev1': {
target: 'rgbkb/pan/rev1/32a'
},
romac: {
target: 'kingly_keys/romac'
},
ropro: {
target: 'kingly_keys/ropro'
},
satan: {
target: 'gh60/satan'
},
skog: {
target: 'percent/skog'
},
speedo: {
target: 'cozykeys/speedo/v2'
},
'staryu': {
target: 'ktec/staryu'
},
stoutgat: {
target: 'tkw/stoutgat/v1'
},
suihankey: {
target: 'suihankey/split/alpha'
},
ta65: {
target: 'maartenwut/ta65'
},
tartan: {
target: 'dm9records/tartan'
},
tkc1800: {
target: 'tkc/tkc1800'
},
'tkw/stoutgat/v2': {
target: 'tkw/stoutgat/v2/f411'
},
'tokyo60': {
target: 'tokyokeyboard/tokyo60'
},
underscore33: {
target: 'underscore33/rev1'
},
vinta: {
target: 'coarse/vinta',
layouts: {
LAYOUT_67_ansi: 'LAYOUT_65_ansi_blocker'
}
},
wasdat: {
target: 'maartenwut/wasdat'
},
'westfoxtrot/cypher': {
target: 'westfoxtrot/cypher/rev1'
},
'whale/sk': {
target: 'whale/sk/v3'
},
'xd002': {
target: 'xiudi/xd002'
},
'xd004': {
target: 'xiudi/xd004'
},
'xd60': {
target: 'xiudi/xd60'
},
'xd68': {
target: 'xiudi/xd68'
},
'xd75': {
target: 'xiudi/xd75'
},
'xd84': {
target: 'xiudi/xd84'
},
'xd84pro': {
target: 'xiudi/xd84pro'
},
'xd87': {
target: 'xiudi/xd87'
},
'xd96': {
target: 'xiudi/xd96'
},
'xelus/dawn60': {
target: 'xelus/dawn60/rev1'
},
'xelus/valor': {
target: 'xelus/valor/rev1'
},
yd60mq: {
target: 'yd60mq/12led'
},
ymd75: {
target: 'ymd75/rev1'
},
z150_blackheart: {
target: 'z150_bh'
},
zeal60: {
target: 'wilba_tech/zeal60'
},
zeal65: {
target: 'wilba_tech/zeal65'
}
}
================================================
FILE: data/schemas/api_keyboard.jsonschema
================================================
{
"$id": "qmk.api.keyboard.v1",
"allOf": [
{"$ref": "qmk.keyboard.v1"},
{
"properties": {
"keymaps": {
"type": "object",
"properties": {
"url": {"type": "string"}
}
},
"parse_errors": {"$ref": "qmk.definitions.v1#/string_array"},
"parse_warnings": {"$ref": "qmk.definitions.v1#/string_array"},
"processor_type": {"type": "string"},
"protocol": {"type": "string"},
"keyboard_folder": {"type": "string"},
"platform": {"type": "string"}
}
}
]
}
================================================
FILE: data/schemas/definitions.jsonschema
================================================
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "qmk.definitions.v1",
"title": "Common definitions used across QMK's jsonschemas.",
"type": "object",
"boolean_array": {
"type": "object",
"additionalProperties": {"type": "boolean"}
},
"filename": {
"type": "string",
"minLength": 1,
"pattern": "^[0-9a-z_]*$"
},
"hex_number_2d": {
"type": "string",
"pattern": "^0x[0-9A-F]{2}$"
},
"hex_number_4d": {
"type": "string",
"pattern": "^0x[0-9A-F]{4}$"
},
"text_identifier": {
"type": "string",
"minLength": 1,
"maxLength": 250
},
"layout_macro": {
"oneOf": [
{
"type": "string",
"enum": ["LAYOUT", "LAYOUT_planck_1x2uC"]
},
{
"type": "string",
"pattern": "^LAYOUT_[0-9a-z_]*$"
}
]
},
"key_unit": {
"type": "number",
"min": 0.25
},
"mcu_pin_array": {
"type": "array",
"items": {"$ref": "#/mcu_pin"}
},
"mcu_pin": {
"oneOf": [
{
"type": "string",
"pattern": "^[A-K]\\d{1,2}$"
},
{
"type": "string",
"pattern": "^LINE_PIN\\d{1,2}$"
},
{
"type": "number",
"multipleOf": 1
},
{
"type": "null"
}
]
},
"signed_decimal": {
"type": "number"
},
"signed_int": {
"type": "number",
"multipleOf": 1
}
"signed_int_8": {
"type": "number",
"min": -127,
"max": 127,
"multipleOf": 1
}
"string_array": {
"type": "array",
"items": {
"type": "string"
}
},
"string_object": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"unsigned_decimal": {
"type": "number",
"min": 0
},
"unsigned_int": {
"type": "number",
"min": 0,
"multipleOf": 1
}
"unsigned_int_8": {
"type": "number",
"min": 0,
"max": 255,
"multipleOf": 1
}
}
================================================
FILE: data/schemas/false.jsonschema
================================================
false
================================================
FILE: data/schemas/keyboard.jsonschema
================================================
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "qmk.keyboard.v1",
"title": "Keyboard Information",
"type": "object",
"properties": {
"keyboard_name": {"$ref": "qmk.definitions.v1#/text_identifier"},
"maintainer": {"$ref": "qmk.definitions.v1#/text_identifier"},
"manufacturer": {"$ref": "qmk.definitions.v1#/text_identifier"},
"url": {
"type": "string",
"format": "uri"
},
"processor": {
"type": "string",
"enum": ["cortex-m0", "cortex-m0plus", "cortex-m3", "cortex-m4", "MKL26Z64", "MK20DX128", "MK20DX256", "MK66F18", "STM32F042", "STM32F072", "STM32F103", "STM32F303", "STM32F401", "STM32F407", "STM32F411", "STM32F446", "STM32G431", "STM32G474", "STM32L412", "STM32L422", "STM32L433", "STM32L443", "atmega16u2", "atmega32u2", "atmega16u4", "atmega32u4", "at90usb162", "at90usb646", "at90usb647", "at90usb1286", "at90usb1287", "atmega32a", "atmega328p", "atmega328", "attiny85", "unknown"]
},
"audio": {
"type": "object",
"additionalProperties": false,
"properties": {
"pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"},
"voices": {"type": "boolean"}
}
},
"backlight": {
"type": "object",
"additionalProperties": false,
"properties": {
"breathing": {"type": "boolean"},
"breathing_period": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"levels": {
"type": "number",
"min": 1,
"max": 31,
"multipleOf": 1
},
"pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}
}
},
"bluetooth": {
"type": "object",
"additionalProperties": false,
"properties": {
"driver": {
"type": "string",
"enum": ["AdafruitBLE", "RN42"]
},
"lto": {"type": "boolean"},
}
},
"board": {
"type": "string",
"minLength": 2,
"pattern": "^[a-zA-Z_][0-9a-zA-Z_]*$"
},
"bootloader": {
"type": "string",
"enum": ["atmel-dfu", "bootloadhid", "bootloadHID", "caterina", "halfkay", "kiibohd", "lufa-dfu", "lufa-ms", "micronucleus", "qmk-dfu", "qmk-hid", "stm32-dfu", "stm32duino", "unknown", "usbasploader", "USBasp", "tinyuf2"],
},
"bootloader_instructions": {
"type": "string",
"description": "Instructions for putting the keyboard into a mode that allows for firmware flashing."
},
"build": {
"type": "object",
"additionalProperties": false,
"properties": {
"debounce_type": {
"type": "string",
"enum": ["custom", "eager_pk", "eager_pr", "sym_defer_pk", "sym_eager_pk"]
},
"firmware_format": {
"type": "string",
"enum": ["bin", "hex", "uf2"]
},
"lto": {"type": "boolean"},
}
},
"diode_direction": {
"type": "string",
"enum": ["COL2ROW", "ROW2COL"]
},
"debounce": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"combo": {
"type": "object",
"properties": {
"count": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"term": {"$ref": "qmk.definitions.v1#/unsigned_int"}
}
},
"community_layouts": {
"type": "array",
"items": {"$ref": "qmk.definitions.v1#/filename"}
},
"features": {"$ref": "qmk.definitions.v1#/boolean_array"},
"indicators": {
"type": "object",
"properties": {
"caps_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"num_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"scroll_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}
}
},
"layout_aliases": {
"type": "object",
"additionalProperties": {"$ref": "qmk.definitions.v1#/layout_macro"}
},
"layouts": {
"type": "object",
"additionalProperties": {
"type": "object",
"additionalProperties": false,
"properties": {
"filename": {
"type": "string"
},
"c_macro": {
"type": "boolean"
},
"key_count": {"$ref": "qmk.definitions.v1#/key_unit"},
"layout": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"label": {"type": "string"},
"matrix": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"type": "number",
"min": 0,
"multipleOf": 1
}
},
"key_count": {"$ref": "qmk.definitions.v1#/key_unit"},
"r": {"$ref": "qmk.definitions.v1#/unsigned_decimal"},
"rx": {"$ref": "qmk.definitions.v1#/unsigned_decimal"},
"ry": {"$ref": "qmk.definitions.v1#/unsigned_decimal"},
"h": {"$ref": "qmk.definitions.v1#/key_unit"},
"w": {"$ref": "qmk.definitions.v1#/key_unit"},
"x": {"$ref": "qmk.definitions.v1#/key_unit"},
"y": {"$ref": "qmk.definitions.v1#/key_unit"}
}
}
}
}
}
},
"leader_key": {
"type": "object",
"properties": {
"timing": {"type": "boolean"},
"strict_processing": {"type": "boolean"},
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}
}
},
"matrix_pins": {
"type": "object",
"additionalProperties": false,
"properties": {
"custom": {"type": "boolean"},
"custom_lite": {"type": "boolean"},
"ghost": {"type": "boolean"},
"io_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"direct": {
"type": "array",
"items": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}
},
"cols": {"$ref": "qmk.definitions.v1#/mcu_pin_array"},
"rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"},
"unused": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}
}
},
"mouse_key": {
"type": "object",
"properties": {
"enabled": {"type": "boolean"},
"delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
"interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
"max_speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
"time_to_max": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
"wheel_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
}
},
"oneshot": {
"type": "object",
"properties": {
"tap_toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}
}
},
"rgblight": {
"type": "object",
"additionalProperties": false,
"properties": {
"animations": {
"type": "object",
"additionalProperties": {
"type": "boolean"
}
},
"brightness_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"hue_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"layers": {
"type": "object",
"additionalProperties": false,
"properties": {
"blink": {"type": "boolean"},
"enabled": {"type": "boolean"},
"max": {
"type": "number",
"min": 1,
"max": 32,
"multipleOf": 1
},
"override_rgb": {"type": "boolean"}
}
},
"led_count": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"max_brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"rgbw": {"type": "boolean"},
"saturation_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"sleep": {"type": "boolean"},
"split": {"type": "boolean"},
"split_count": {
"type": "array",
"minLength": 2,
"maxLength": 2,
"items": {"$ref": "qmk.definitions.v1#/unsigned_int"}
}
}
},
"split": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled": {"type": "boolean"},
"matrix_grid": {
"type": "array",
"items": {"$ref": "qmk.definitions.v1#/mcu_pin"}
},
"matrix_pins": {
"type": "object",
"additionalProperties": false,
"properties": {
"right": {
"type": "object",
"additionalProperties": false,
"properties": {
"direct": {
"type": "array",
"items": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}
},
"cols": {"$ref": "qmk.definitions.v1#/mcu_pin_array"},
"rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"},
"unused": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}
}
}
}
},
"main": {
"type": "string",
"enum": ["eeprom", "left", "matrix_grid", "pin", "right"]
},
"soft_serial_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"soft_serial_speed": {
"type": "number",
"min": 0,
"max": 5,
"multipleOf": 1
},
"transport": {
"type": "object",
"additionalProperties": false,
"properties": {
"protocol": {
"type": "string",
"enum": ["custom", "i2c", "serial", "serial_usart"]
},
"sync_matrix_state": {"type": "boolean"},
"sync_modifiers": {"type": "boolean"}
}
},
"usb_detect": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled": {"type": "boolean"},
"polling_interval": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}
}
}
}
},
"tags": {
"type": "array",
"items": {"type": "string"}
},
"tapping": {
"type": "object",
"properties": {
"force_hold": {"type": "boolean"},
"force_hold_per_key": {"type": "boolean"},
"ignore_mod_tap_interrupt": {"type": "boolean"},
"ignore_mod_tap_interrupt_per_key": {"type": "boolean"},
"permissive_hold": {"type": "boolean"},
"permissive_hold_per_key": {"type": "boolean"},
"retro": {"type": "boolean"},
"retro_per_key": {"type": "boolean"},
"term": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"term_per_key": {"type": "boolean"},
"toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"},
}
},
"usb": {
"type": "object",
"additionalProperties": false,
"properties": {
"device_ver": {"$ref": "qmk.definitions.v1#/hex_number_4d"},
"force_nkro": {"type": "boolean"},
"pid": {"$ref": "qmk.definitions.v1#/hex_number_4d"},
"vid": {"$ref": "qmk.definitions.v1#/hex_number_4d"},
"max_power": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"no_startup_check": {"type": "boolean"},
"polling_interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"shared_endpoint": {
"type": "object",
"additionalProperties": false,
"properties": {
"keyboard": {"type": "boolean"},
"mouse": {"type": "boolean"}
}
},
"suspend_wakeup_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"wait_for": {"type": "boolean"},
}
},
"qmk": {
"type": "object",
"additionalProperties": false,
"properties": {
"keys_per_scan": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"tap_keycode_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"tap_capslock_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
}
},
"qmk_lufa_bootloader": {
"type": "object",
"additionalProperties": false,
"properties": {
"esc_output": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"esc_input": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"led": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"speaker": {"$ref": "qmk.definitions.v1#/mcu_pin"}
}
}
}
}
================================================
FILE: data/schemas/keymap.jsonschema
================================================
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "qmk.keymap.v1",
"title": "Keymap Information",
"type": "object",
"properties": {
"author": {"type": "string"},
"keyboard": {"$ref": "qmk.definitions.v1#/text_identifier"},
"keymap": {"$ref": "qmk.definitions.v1#/text_identifier"},
"layout": {"$ref": "qmk.definitions.v1#/layout_macro"},
"layers": {
"type": "array",
"items": {
"type": "array",
"items": {"type": "string"}
}
},
"config": {"$ref": "qmk.keyboard.v1"},
"notes": {
"type": "string",
"description": "asdf"
}
}
}
================================================
FILE: data/schemas/true.jsonschema
================================================
true
================================================
FILE: data/templates/avr/config.h
================================================
/*
Copyright %YEAR% %YOUR_NAME%
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x0000
#define DEVICE_VER 0x0001
#define MANUFACTURER %YOUR_NAME%
#define PRODUCT %KEYBOARD%
/* key matrix size */
#define MATRIX_ROWS 2
#define MATRIX_COLS 3
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { D0, D5 }
#define MATRIX_COL_PINS { F1, F0, B0 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL */
#define DIODE_DIRECTION COL2ROW
/*
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
*/
#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
//#define LED_NUM_LOCK_PIN B0
//#define LED_CAPS_LOCK_PIN B1
//#define LED_SCROLL_LOCK_PIN B2
//#define LED_COMPOSE_PIN B3
//#define LED_KANA_PIN B4
//#define BACKLIGHT_PIN B7
//#define BACKLIGHT_LEVELS 3
//#define BACKLIGHT_BREATHING
//#define RGB_DI_PIN E2
//#ifdef RGB_DI_PIN
//# define RGBLED_NUM 16
//# define RGBLIGHT_HUE_STEP 8
//# define RGBLIGHT_SAT_STEP 8
//# define RGBLIGHT_VAL_STEP 8
//# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
//# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
/*== all animations enable ==*/
//# define RGBLIGHT_ANIMATIONS
/*== or choose animations ==*/
//# define RGBLIGHT_EFFECT_BREATHING
//# define RGBLIGHT_EFFECT_RAINBOW_MOOD
//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
//# define RGBLIGHT_EFFECT_SNAKE
//# define RGBLIGHT_EFFECT_KNIGHT
//# define RGBLIGHT_EFFECT_CHRISTMAS
//# define RGBLIGHT_EFFECT_STATIC_GRADIENT
//# define RGBLIGHT_EFFECT_RGB_TEST
//# define RGBLIGHT_EFFECT_ALTERNATING
/*== customize breathing effect ==*/
/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
//# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
/*==== use exp() and sin() ====*/
//# define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
//# define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
//#endif
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
* This is useful for the Windows task manager shortcut (ctrl+shift+esc).
*/
//#define GRAVE_ESC_CTRL_OVERRIDE
/*
* Force NKRO
*
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
* makefile for this to work.)
*
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
* until the next keyboard reset.
*
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
* fully operational during normal computer usage.
*
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
* power-up.
*
*/
//#define FORCE_NKRO
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
/* disable these deprecated features by default */
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
/* Bootmagic Lite key configuration */
//#define BOOTMAGIC_LITE_ROW 0
//#define BOOTMAGIC_LITE_COLUMN 0
================================================
FILE: data/templates/avr/readme.md
================================================
# %KEYBOARD%

*A short description of the keyboard/project*
* Keyboard Maintainer: [%YOUR_NAME%](https://github.com/yourusername)
* Hardware Supported: *The PCBs, controllers supported*
* Hardware Availability: *Links to where you can find this hardware*
Make example for this keyboard (after setting up your build environment):
make %KEYBOARD%:default
Flashing example for this keyboard:
make %KEYBOARD%:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `RESET` if it is available
================================================
FILE: data/templates/avr/rules.mk
================================================
# MCU name
MCU = atmega32u4
# Bootloader selection
BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = no # Audio output
================================================
FILE: data/templates/base/info.json
================================================
{
"keyboard_name": "%KEYBOARD%",
"url": "",
"maintainer": "%YOUR_NAME%",
"width": 3,
"height": 2,
"layouts": {
"LAYOUT": {
"layout": [
{"label": "k00", "x": 0, "y": 0},
{"label": "k01", "x": 1, "y": 0},
{"label": "k02", "x": 2, "y": 0},
{"label": "k10", "x": 0, "y": 1, "w": 1.5},
{"label": "k12", "x": 1.5, "y": 1, "w": 1.5}
]
}
}
}
================================================
FILE: data/templates/base/keyboard.c
================================================
/* Copyright %YEAR% %YOUR_NAME%
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "%KEYBOARD%.h"
================================================
FILE: data/templates/base/keyboard.h
================================================
/* Copyright %YEAR% %YOUR_NAME%
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
/* This is a shortcut to help you visually see your layout.
*
* The first section contains all of the arguments representing the physical
* layout of the board and position of the keys.
*
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
#define LAYOUT( \
k00, k01, k02, \
k10, k12 \
) { \
{ k00, k01, k02 }, \
{ k10, KC_NO, k12 } \
}
================================================
FILE: data/templates/base/keymaps/default/keymap.c
================================================
/* Copyright %YEAR% %YOUR_NAME%
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// Defines names for use in layer keycodes and the keymap
enum layer_names {
_BASE,
_FN
};
// Defines the keycodes used by our macros in process_record_user
enum custom_keycodes {
QMKBEST = SAFE_RANGE,
QMKURL
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
[_BASE] = LAYOUT(
KC_A, KC_1, MO(_FN),
KC_TAB, KC_SPC
),
[_FN] = LAYOUT(
QMKBEST, QMKURL, _______,
RESET, XXXXXXX
)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QMKBEST:
if (record->event.pressed) {
// when keycode QMKBEST is pressed
SEND_STRING("QMK is the best thing ever!");
} else {
// when keycode QMKBEST is released
}
break;
case QMKURL:
if (record->event.pressed) {
// when keycode QMKURL is pressed
SEND_STRING("https://qmk.fm/\n");
} else {
// when keycode QMKURL is released
}
break;
}
return true;
}
================================================
FILE: data/templates/base/keymaps/default/readme.md
================================================
# The default keymap for %KEYBOARD%
================================================
FILE: data/templates/nrf/config.h
================================================
/*
Copyright %YEAR% %YOUR_NAME%
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#ifndef __ASSEMBLER__
#include "config_common.h"
#include "apidef.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x0000
#define DEVICE_VER 0x0001
#define MANUFACTURER %YOUR_NAME%
#define PRODUCT %KEYBOARD%
#define DESCRIPTION A custom keyboard
#define BMP_BOOTPIN_AS_RESET
#define TAPPING_TERM_PER_KEY
#define PERMISSIVE_HOLD
#define PREVENT_STUCK_MODIFIERS
#define IGNORE_MOD_TAP_INTERRUPT
#define TAPPING_TERM 200
/* key matrix size */
#define MATRIX_ROWS_DEFAULT 1
#define MATRIX_COLS_DEFAULT 3
#define THIS_DEVICE_ROWS 1
#define THIS_DEVICE_COLS 3
#define IS_LEFT_HAND true
#define BMP_DEFAULT_MODE SPLIT_MASTER
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { 255 }
#define MATRIX_COL_PINS { 1, 2, 3 }
#define MATRIX_LAYOUT {1,2,3,255}
#define KEYMAP_PRIOR_LOCALE 0
#define KEYMAP_ASCII 0
#define DEBUG_ACTION
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
#define RGBLIGHT_SPLIT
#define RGB_DI_PIN 255
#ifdef RGB_DI_PIN
#define RGBLED_NUM_DEFAULT 128
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
#define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
#define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
/*== all animations enable ==*/
#define RGBLIGHT_ANIMATIONS
/*== or choose animations ==*/
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_KNIGHT
#define RGBLIGHT_EFFECT_CHRISTMAS
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
/*== customize breathing effect ==*/
/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
#define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
/*==== use exp() and sin() ====*/
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
#define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
#endif
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 1
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
*/
// #define GRAVE_ESC_CTRL_OVERRIDE
/*
* Magic Key Options
*
* Magic keys are hotkey commands that allow control over firmware functions of
* the keyboard. They are best used in combination with the HID Listen program,
* found here: https://www.pjrc.com/teensy/hid_listen.html
*
* The options below allow the magic key functionality to be changed. This is
* useful if your keyboard/keypad is missing keys and you want magic key support.
*
*/
/* key combination for magic key command */
/* defined by default; to change, uncomment and set to the combination you want */
// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
/* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
/* override magic key keymap */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
//#define MAGIC_KEY_HELP H
//#define MAGIC_KEY_HELP_ALT SLASH
//#define MAGIC_KEY_DEBUG D
//#define MAGIC_KEY_DEBUG_MATRIX X
//#define MAGIC_KEY_DEBUG_KBD K
//#define MAGIC_KEY_DEBUG_MOUSE M
//#define MAGIC_KEY_VERSION V
//#define MAGIC_KEY_STATUS S
//#define MAGIC_KEY_CONSOLE C
//#define MAGIC_KEY_LAYER0 0
//#define MAGIC_KEY_LAYER0_ALT GRAVE
//#define MAGIC_KEY_LAYER1 1
//#define MAGIC_KEY_LAYER2 2
//#define MAGIC_KEY_LAYER3 3
//#define MAGIC_KEY_LAYER4 4
//#define MAGIC_KEY_LAYER5 5
//#define MAGIC_KEY_LAYER6 6
//#define MAGIC_KEY_LAYER7 7
//#define MAGIC_KEY_LAYER8 8
//#define MAGIC_KEY_LAYER9 9
//#define MAGIC_KEY_BOOTLOADER B
//#define MAGIC_KEY_BOOTLOADER_ALT ESC
//#define MAGIC_KEY_LOCK CAPS
//#define MAGIC_KEY_EEPROM E
//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
//#define MAGIC_KEY_NKRO N
//#define MAGIC_KEY_SLEEP_LED Z
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
/*
* MIDI options
*/
/* Prevent use of disabled MIDI features in the keymap */
//#define MIDI_ENABLE_STRICT 1
/* enable basic MIDI features:
- MIDI notes can be sent when in Music mode is on
*/
//#define MIDI_BASIC
/* enable advanced MIDI features:
- MIDI notes can be added to the keymap
- Octave shift and transpose
- Virtual sustain, portamento, and modulation wheel
- etc.
*/
//#define MIDI_ADVANCED
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
/*
* HD44780 LCD Display Configuration
*/
/*
#define LCD_LINES 2 //< number of visible lines of the display
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
#if LCD_IO_MODE
#define LCD_PORT PORTB //< port for the LCD lines
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
#define LCD_RS_PORT LCD_PORT //< port for RS line
#define LCD_RS_PIN 3 //< pin for RS line
#define LCD_RW_PORT LCD_PORT //< port for RW line
#define LCD_RW_PIN 2 //< pin for RW line
#define LCD_E_PORT LCD_PORT //< port for Enable line
#define LCD_E_PIN 1 //< pin for Enable line
#endif
*/
/* Bootmagic Lite key configuration */
// #define BOOTMAGIC_LITE_ROW 0
// #define BOOTMAGIC_LITE_COLUMN 0
//
#endif /*__ASSEMBLER__*/
================================================
FILE: data/templates/nrf/ld/nrf52840_ao.ld
================================================
/* Linker script to configure memory regions. */
SEARCH_DIR(.)
GROUP(-lgcc -lc -lnosys)
MEMORY
{
FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xba000
/* RAM (rwx) : ORIGIN = 0x2000BC70, LENGTH = 0x34390 */
RAM (rwx) : ORIGIN = 0x20018000, LENGTH = 0x28000
}
SECTIONS
{
}
SECTIONS
{
. = ALIGN(4);
.mem_section_dummy_ram :
{
}
.log_dynamic_data :
{
PROVIDE(__start_log_dynamic_data = .);
KEEP(*(SORT(.log_dynamic_data*)))
PROVIDE(__stop_log_dynamic_data = .);
} > RAM
.fs_data :
{
PROVIDE(__start_fs_data = .);
KEEP(*(.fs_data))
PROVIDE(__stop_fs_data = .);
} > RAM
.cli_sorted_cmd_ptrs :
{
PROVIDE(__start_cli_sorted_cmd_ptrs = .);
KEEP(*(.cli_sorted_cmd_ptrs))
PROVIDE(__stop_cli_sorted_cmd_ptrs = .);
} > RAM
} INSERT AFTER .data;
SECTIONS
{
.mem_section_dummy_rom :
{
}
.sdh_soc_observers :
{
PROVIDE(__start_sdh_soc_observers = .);
KEEP(*(SORT(.sdh_soc_observers*)))
PROVIDE(__stop_sdh_soc_observers = .);
} > FLASH
.sdh_ble_observers :
{
PROVIDE(__start_sdh_ble_observers = .);
KEEP(*(SORT(.sdh_ble_observers*)))
PROVIDE(__stop_sdh_ble_observers = .);
} > FLASH
.pwr_mgmt_data :
{
PROVIDE(__start_pwr_mgmt_data = .);
KEEP(*(SORT(.pwr_mgmt_data*)))
PROVIDE(__stop_pwr_mgmt_data = .);
} > FLASH
.log_const_data :
{
PROVIDE(__start_log_const_data = .);
KEEP(*(SORT(.log_const_data*)))
PROVIDE(__stop_log_const_data = .);
} > FLASH
.nrf_balloc :
{
PROVIDE(__start_nrf_balloc = .);
KEEP(*(.nrf_balloc))
PROVIDE(__stop_nrf_balloc = .);
} > FLASH
.sdh_state_observers :
{
PROVIDE(__start_sdh_state_observers = .);
KEEP(*(SORT(.sdh_state_observers*)))
PROVIDE(__stop_sdh_state_observers = .);
} > FLASH
.sdh_stack_observers :
{
PROVIDE(__start_sdh_stack_observers = .);
KEEP(*(SORT(.sdh_stack_observers*)))
PROVIDE(__stop_sdh_stack_observers = .);
} > FLASH
.sdh_req_observers :
{
PROVIDE(__start_sdh_req_observers = .);
KEEP(*(SORT(.sdh_req_observers*)))
PROVIDE(__stop_sdh_req_observers = .);
} > FLASH
.nrf_queue :
{
PROVIDE(__start_nrf_queue = .);
KEEP(*(.nrf_queue))
PROVIDE(__stop_nrf_queue = .);
} > FLASH
.cli_command :
{
PROVIDE(__start_cli_command = .);
KEEP(*(.cli_command))
PROVIDE(__stop_cli_command = .);
} > FLASH
.crypto_data :
{
PROVIDE(__start_crypto_data = .);
KEEP(*(SORT(.crypto_data*)))
PROVIDE(__stop_crypto_data = .);
} > FLASH
} INSERT AFTER .text
INCLUDE "nrf_common.ld"
================================================
FILE: data/templates/nrf/readme.md
================================================
# %KEYBOARD%

A short description of the keyboard/project
Keyboard Maintainer: [%YOUR_NAME%](https://github.com/yourusername)
Hardware Supported: The PCBs, controllers supported
Hardware Availability: links to where you can find this hardware
Make example for this keyboard (after setting up your build environment):
make %KEYBOARD%:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
================================================
FILE: data/templates/nrf/rules.mk
================================================
# MCU name
MCU_FAMILY = NRF52
MCU_SERIES = NRF52840
MCU_LDSCRIPT = nrf52840_ao
MCU = cortex-m4
CUSTOM_MATRIX = yes # This flag should be on for nrf52
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
MOUSE_SHARED_EP = no # Should be disabled for BLE Micro Pro
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see he
Showing preview only (1,504K chars total). Download the full file or copy to clipboard to get everything.
gitextract_fia8uxcq/ ├── .clang-format ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── config.yml │ │ ├── feature_request.md │ │ ├── other_issues.md │ │ └── zzz_blank.md │ ├── PULL_REQUEST_TEMPLATE.md │ ├── labeler.yml │ ├── stale.yml │ └── workflows/ │ ├── api.yml │ ├── auto_tag.yaml │ ├── build_bmp_default.yml │ ├── cli.yml │ ├── develop_api.yml │ ├── develop_update.yml │ ├── docs.yml │ ├── format.yaml │ ├── labeler.yml │ └── lint.yml ├── .gitignore ├── .gitmodules ├── .vscode/ │ ├── extensions.json │ └── settings.json ├── Dockerfile ├── Doxyfile ├── LICENSE ├── Makefile ├── Vagrantfile ├── api_data/ │ ├── _config.yml │ └── readme.md ├── bin/ │ └── qmk ├── book.json ├── bootloader.mk ├── build_full_test.mk ├── build_json.mk ├── build_keyboard.mk ├── build_layout.mk ├── build_test.mk ├── common.mk ├── common_features.mk ├── data/ │ ├── mappings/ │ │ ├── info_config.json │ │ ├── info_rules.json │ │ └── keyboard_aliases.json │ ├── schemas/ │ │ ├── api_keyboard.jsonschema │ │ ├── definitions.jsonschema │ │ ├── false.jsonschema │ │ ├── keyboard.jsonschema │ │ ├── keymap.jsonschema │ │ └── true.jsonschema │ └── templates/ │ ├── avr/ │ │ ├── config.h │ │ ├── readme.md │ │ └── rules.mk │ ├── base/ │ │ ├── info.json │ │ ├── keyboard.c │ │ ├── keyboard.h │ │ └── keymaps/ │ │ └── default/ │ │ ├── keymap.c │ │ └── readme.md │ ├── nrf/ │ │ ├── config.h │ │ ├── ld/ │ │ │ └── nrf52840_ao.ld │ │ ├── readme.md │ │ ├── rules.mk │ │ └── template.c │ └── ps2avrgb/ │ ├── config.h │ ├── readme.md │ └── rules.mk ├── disable_features.mk ├── docs/ │ ├── .nojekyll │ ├── CNAME │ ├── ChangeLog/ │ │ ├── 20190830.md │ │ ├── 20200229.md │ │ ├── 20200530.md │ │ ├── 20200829.md │ │ ├── 20201128.md │ │ ├── 20210227.md │ │ ├── 20210529.md │ │ └── 20210828.md │ ├── README.md │ ├── _langs.md │ ├── _summary.md │ ├── adc_driver.md │ ├── api_development_environment.md │ ├── api_development_overview.md │ ├── api_docs.md │ ├── api_overview.md │ ├── arm_debugging.md │ ├── audio_driver.md │ ├── breaking_changes.md │ ├── breaking_changes_history.md │ ├── breaking_changes_instructions.md │ ├── chibios_upgrade_instructions.md │ ├── cli.md │ ├── cli_commands.md │ ├── cli_configuration.md │ ├── cli_development.md │ ├── cli_tab_complete.md │ ├── coding_conventions_c.md │ ├── coding_conventions_python.md │ ├── compatible_microcontrollers.md │ ├── config_options.md │ ├── configurator_architecture.md │ ├── configurator_default_keymaps.md │ ├── configurator_diagram.drawio │ ├── configurator_step_by_step.md │ ├── configurator_troubleshooting.md │ ├── contributing.md │ ├── custom_matrix.md │ ├── custom_quantum_functions.md │ ├── data_driven_config.md │ ├── de/ │ │ ├── README.md │ │ ├── _summary.md │ │ ├── cli.md │ │ ├── driver_installation_zadig.md │ │ ├── newbs.md │ │ ├── newbs_building_firmware.md │ │ ├── newbs_flashing.md │ │ ├── newbs_getting_started.md │ │ ├── newbs_learn_more_resources.md │ │ └── newbs_testing_debugging.md │ ├── documentation_best_practices.md │ ├── documentation_templates.md │ ├── driver_installation_zadig.md │ ├── easy_maker.md │ ├── eeprom_driver.md │ ├── es/ │ │ ├── README.md │ │ ├── _summary.md │ │ ├── hardware.md │ │ ├── hardware_avr.md │ │ ├── hardware_drivers.md │ │ ├── hardware_keyboard_guidelines.md │ │ ├── newbs.md │ │ ├── newbs_best_practices.md │ │ ├── newbs_building_firmware.md │ │ ├── newbs_building_firmware_configurator.md │ │ ├── newbs_flashing.md │ │ ├── newbs_getting_started.md │ │ ├── newbs_learn_more_resources.md │ │ └── newbs_testing_debugging.md │ ├── faq_build.md │ ├── faq_debug.md │ ├── faq_general.md │ ├── faq_keymap.md │ ├── faq_misc.md │ ├── feature_advanced_keycodes.md │ ├── feature_audio.md │ ├── feature_auto_shift.md │ ├── feature_backlight.md │ ├── feature_bluetooth.md │ ├── feature_bootmagic.md │ ├── feature_combo.md │ ├── feature_command.md │ ├── feature_debounce_type.md │ ├── feature_digitizer.md │ ├── feature_dip_switch.md │ ├── feature_dynamic_macros.md │ ├── feature_encoders.md │ ├── feature_grave_esc.md │ ├── feature_haptic_feedback.md │ ├── feature_hd44780.md │ ├── feature_joystick.md │ ├── feature_key_lock.md │ ├── feature_key_overrides.md │ ├── feature_layers.md │ ├── feature_layouts.md │ ├── feature_leader_key.md │ ├── feature_led_indicators.md │ ├── feature_led_matrix.md │ ├── feature_macros.md │ ├── feature_midi.md │ ├── feature_mouse_keys.md │ ├── feature_oled_driver.md │ ├── feature_pointing_device.md │ ├── feature_ps2_mouse.md │ ├── feature_rawhid.md │ ├── feature_rgb_matrix.md │ ├── feature_rgblight.md │ ├── feature_sequencer.md │ ├── feature_space_cadet.md │ ├── feature_split_keyboard.md │ ├── feature_st7565.md │ ├── feature_stenography.md │ ├── feature_swap_hands.md │ ├── feature_tap_dance.md │ ├── feature_terminal.md │ ├── feature_thermal_printer.md │ ├── feature_unicode.md │ ├── feature_userspace.md │ ├── feature_velocikey.md │ ├── feature_wpm.md │ ├── flashing.md │ ├── flashing_bootloadhid.md │ ├── fr-fr/ │ │ ├── ChangeLog/ │ │ │ └── 20190830.md │ │ ├── README.md │ │ ├── _summary.md │ │ ├── breaking_changes.md │ │ ├── cli.md │ │ ├── cli_configuration.md │ │ ├── contributing.md │ │ ├── driver_installation_zadig.md │ │ ├── faq.md │ │ ├── faq_build.md │ │ ├── faq_debug.md │ │ ├── faq_general.md │ │ ├── faq_keymap.md │ │ ├── flashing.md │ │ ├── getting_started_getting_help.md │ │ ├── getting_started_github.md │ │ ├── getting_started_introduction.md │ │ ├── newbs.md │ │ ├── newbs_best_practices.md │ │ ├── newbs_building_firmware.md │ │ ├── newbs_building_firmware_configurator.md │ │ ├── newbs_flashing.md │ │ ├── newbs_getting_started.md │ │ ├── newbs_learn_more_resources.md │ │ └── newbs_testing_debugging.md │ ├── fuse.txt │ ├── getting_started_docker.md │ ├── getting_started_github.md │ ├── getting_started_introduction.md │ ├── getting_started_make_guide.md │ ├── getting_started_vagrant.md │ ├── hand_wire.md │ ├── hardware_avr.md │ ├── hardware_drivers.md │ ├── hardware_keyboard_guidelines.md │ ├── he-il/ │ │ ├── README.md │ │ ├── _summary.md │ │ ├── documentation_best_practices.md │ │ ├── faq.md │ │ ├── faq_general.md │ │ ├── getting_started_getting_help.md │ │ ├── getting_started_github.md │ │ ├── getting_started_introduction.md │ │ ├── hardware.md │ │ ├── newbs_learn_more_resources.md │ │ ├── proton_c_conversion.md │ │ └── quantum_keycodes.md │ ├── how_a_matrix_works.md │ ├── how_keyboards_work.md │ ├── i2c_driver.md │ ├── index.html │ ├── internals_defines.md │ ├── internals_gpio_control.md │ ├── internals_input_callback_reg.md │ ├── internals_midi_device.md │ ├── internals_midi_device_setup_process.md │ ├── internals_midi_util.md │ ├── internals_send_functions.md │ ├── internals_sysex_tools.md │ ├── isp_flashing_guide.md │ ├── ja/ │ │ ├── README.md │ │ ├── _summary.md │ │ ├── adc_driver.md │ │ ├── api_development_environment.md │ │ ├── api_development_overview.md │ │ ├── api_docs.md │ │ ├── api_overview.md │ │ ├── arm_debugging.md │ │ ├── breaking_changes.md │ │ ├── breaking_changes_instructions.md │ │ ├── cli.md │ │ ├── cli_commands.md │ │ ├── cli_configuration.md │ │ ├── cli_development.md │ │ ├── coding_conventions_c.md │ │ ├── coding_conventions_python.md │ │ ├── compatible_microcontrollers.md │ │ ├── config_options.md │ │ ├── configurator_step_by_step.md │ │ ├── configurator_troubleshooting.md │ │ ├── contributing.md │ │ ├── custom_matrix.md │ │ ├── custom_quantum_functions.md │ │ ├── data_driven_config.md │ │ ├── documentation_best_practices.md │ │ ├── documentation_templates.md │ │ ├── driver_installation_zadig.md │ │ ├── faq_build.md │ │ ├── faq_debug.md │ │ ├── faq_general.md │ │ ├── faq_keymap.md │ │ ├── faq_misc.md │ │ ├── feature_advanced_keycodes.md │ │ ├── feature_audio.md │ │ ├── feature_auto_shift.md │ │ ├── feature_backlight.md │ │ ├── feature_bluetooth.md │ │ ├── feature_bootmagic.md │ │ ├── feature_combo.md │ │ ├── feature_command.md │ │ ├── feature_debounce_type.md │ │ ├── feature_dip_switch.md │ │ ├── feature_dynamic_macros.md │ │ ├── feature_encoders.md │ │ ├── feature_grave_esc.md │ │ ├── feature_haptic_feedback.md │ │ ├── feature_hd44780.md │ │ ├── feature_key_lock.md │ │ ├── feature_layers.md │ │ ├── feature_layouts.md │ │ ├── feature_leader_key.md │ │ ├── feature_led_indicators.md │ │ ├── feature_led_matrix.md │ │ ├── feature_macros.md │ │ ├── feature_mouse_keys.md │ │ ├── feature_pointing_device.md │ │ ├── feature_ps2_mouse.md │ │ ├── feature_rawhid.md │ │ ├── feature_split_keyboard.md │ │ ├── feature_stenography.md │ │ ├── feature_swap_hands.md │ │ ├── feature_tap_dance.md │ │ ├── feature_terminal.md │ │ ├── feature_thermal_printer.md │ │ ├── feature_unicode.md │ │ ├── feature_userspace.md │ │ ├── feature_velocikey.md │ │ ├── feature_wpm.md │ │ ├── flashing.md │ │ ├── flashing_bootloadhid.md │ │ ├── getting_started_docker.md │ │ ├── getting_started_github.md │ │ ├── getting_started_introduction.md │ │ ├── getting_started_make_guide.md │ │ ├── getting_started_vagrant.md │ │ ├── hardware_avr.md │ │ ├── hardware_drivers.md │ │ ├── hardware_keyboard_guidelines.md │ │ ├── how_a_matrix_works.md │ │ ├── how_keyboards_work.md │ │ ├── i2c_driver.md │ │ ├── internals_defines.md │ │ ├── internals_gpio_control.md │ │ ├── internals_input_callback_reg.md │ │ ├── internals_midi_device.md │ │ ├── internals_midi_device_setup_process.md │ │ ├── internals_midi_util.md │ │ ├── internals_send_functions.md │ │ ├── internals_sysex_tools.md │ │ ├── isp_flashing_guide.md │ │ ├── keycodes.md │ │ ├── keycodes_basic.md │ │ ├── keymap.md │ │ ├── mod_tap.md │ │ ├── newbs.md │ │ ├── newbs_building_firmware.md │ │ ├── newbs_building_firmware_configurator.md │ │ ├── newbs_flashing.md │ │ ├── newbs_getting_started.md │ │ ├── newbs_git_best_practices.md │ │ ├── newbs_git_resolving_merge_conflicts.md │ │ ├── newbs_git_resynchronize_a_branch.md │ │ ├── newbs_git_using_your_master_branch.md │ │ ├── newbs_learn_more_resources.md │ │ ├── newbs_testing_debugging.md │ │ ├── one_shot_keys.md │ │ ├── other_eclipse.md │ │ ├── other_vscode.md │ │ ├── pr_checklist.md │ │ ├── proton_c_conversion.md │ │ ├── quantum_keycodes.md │ │ ├── ref_functions.md │ │ ├── reference_configurator_support.md │ │ ├── reference_glossary.md │ │ ├── reference_info_json.md │ │ ├── reference_keymap_extras.md │ │ ├── serial_driver.md │ │ ├── support.md │ │ ├── syllabus.md │ │ ├── tap_hold.md │ │ ├── translating.md │ │ └── understanding_qmk.md │ ├── keycodes.md │ ├── keycodes_basic.md │ ├── keycodes_magic.md │ ├── keycodes_us_ansi_shifted.md │ ├── keymap.md │ ├── ko-kr/ │ │ ├── README.md │ │ ├── getting_started_build_tools.md │ │ ├── getting_started_getting_help.md │ │ └── getting_started_github.md │ ├── mod_tap.md │ ├── newbs.md │ ├── newbs_building_firmware.md │ ├── newbs_building_firmware_configurator.md │ ├── newbs_flashing.md │ ├── newbs_getting_started.md │ ├── newbs_git_best_practices.md │ ├── newbs_git_resolving_merge_conflicts.md │ ├── newbs_git_resynchronize_a_branch.md │ ├── newbs_git_using_your_master_branch.md │ ├── newbs_learn_more_resources.md │ ├── newbs_testing_debugging.md │ ├── one_shot_keys.md │ ├── other_eclipse.md │ ├── other_vscode.md │ ├── platformdev_chibios_earlyinit.md │ ├── platformdev_selecting_arm_mcu.md │ ├── power.txt │ ├── pr_checklist.md │ ├── proton_c_conversion.md │ ├── pt-br/ │ │ ├── README.md │ │ └── _summary.md │ ├── qmk.css │ ├── qmk_custom_dark.css │ ├── qmk_custom_light.css │ ├── quantum_keycodes.md │ ├── redirects.json │ ├── ref_functions.md │ ├── reference_configurator_support.md │ ├── reference_glossary.md │ ├── reference_info_json.md │ ├── reference_keymap_extras.md │ ├── ru-ru/ │ │ ├── README.md │ │ ├── _summary.md │ │ ├── getting_started_build_tools.md │ │ ├── getting_started_getting_help.md │ │ ├── getting_started_github.md │ │ ├── getting_started_introduction.md │ │ ├── newbs.md │ │ └── newbs_getting_started.md │ ├── serial_driver.md │ ├── spi_driver.md │ ├── support.md │ ├── sw.js │ ├── syllabus.md │ ├── tap_hold.md │ ├── translating.md │ ├── uart_driver.md │ ├── understanding_qmk.md │ ├── unit_testing.md │ ├── usb_nkro.txt │ ├── ws2812_driver.md │ └── zh-cn/ │ ├── README.md │ ├── _summary.md │ ├── contributing.md │ ├── custom_quantum_functions.md │ ├── faq.md │ ├── faq_build.md │ ├── faq_debug.md │ ├── faq_general.md │ ├── faq_keymap.md │ ├── getting_started_getting_help.md │ ├── getting_started_github.md │ ├── getting_started_introduction.md │ ├── newbs.md │ ├── newbs_best_practices.md │ ├── newbs_building_firmware.md │ ├── newbs_flashing.md │ ├── newbs_getting_started.md │ ├── newbs_learn_more_resources.md │ ├── newbs_testing_debugging.md │ └── reference_glossary.md ├── doxygen-todo ├── drivers/ │ ├── eeprom/ │ │ ├── eeprom_custom.c-template │ │ ├── eeprom_driver.c │ │ ├── eeprom_driver.h │ │ ├── eeprom_i2c.c │ │ ├── eeprom_i2c.h │ │ ├── eeprom_spi.c │ │ ├── eeprom_spi.h │ │ ├── eeprom_transient.c │ │ └── eeprom_transient.h │ ├── gpio/ │ │ ├── pca9555.c │ │ └── pca9555.h │ ├── haptic/ │ │ ├── DRV2605L.c │ │ ├── DRV2605L.h │ │ ├── solenoid.c │ │ └── solenoid.h │ ├── lcd/ │ │ ├── st7565.c │ │ └── st7565.h │ ├── led/ │ │ ├── apa102.c │ │ ├── apa102.h │ │ ├── aw20216.c │ │ ├── aw20216.h │ │ └── issi/ │ │ ├── is31fl3218.c │ │ ├── is31fl3218.h │ │ ├── is31fl3731-simple.c │ │ ├── is31fl3731-simple.h │ │ ├── is31fl3731.c │ │ ├── is31fl3731.h │ │ ├── is31fl3733.c │ │ ├── is31fl3733.h │ │ ├── is31fl3736.c │ │ ├── is31fl3736.h │ │ ├── is31fl3737.c │ │ ├── is31fl3737.h │ │ ├── is31fl3741.c │ │ └── is31fl3741.h │ ├── nrf52/ │ │ ├── i2c_master.c │ │ ├── i2c_master.h │ │ ├── uart.h │ │ ├── ws2812.c │ │ └── ws2812.h │ ├── oled/ │ │ ├── glcdfont.c │ │ ├── licenses.txt │ │ ├── oled_driver.h │ │ └── ssd1306_sh1106.c │ ├── qwiic/ │ │ ├── micro_oled.c │ │ ├── micro_oled.h │ │ ├── qwiic.c │ │ ├── qwiic.h │ │ ├── qwiic.mk │ │ └── util/ │ │ ├── font5x7.h │ │ └── font8x16.h │ ├── sensors/ │ │ ├── adns5050.c │ │ ├── adns5050.h │ │ ├── adns9800.c │ │ ├── adns9800.h │ │ ├── adns9800_srom_A6.h │ │ ├── pimoroni_trackball.c │ │ ├── pimoroni_trackball.h │ │ ├── pmw3360.c │ │ ├── pmw3360.h │ │ └── pmw3360_firmware.h │ ├── serial.h │ ├── ugfx/ │ │ └── gdisp/ │ │ ├── is31fl3731c/ │ │ │ ├── board_is31fl3731c_template.h │ │ │ ├── driver.mk │ │ │ ├── gdisp_is31fl3731c.c │ │ │ └── gdisp_lld_config.h │ │ └── st7565/ │ │ ├── board_st7565_template.h │ │ ├── driver.mk │ │ ├── gdisp_lld_ST7565.c │ │ ├── gdisp_lld_config.h │ │ └── st7565.h │ ├── usbpd.h │ └── ws2812.h ├── keyboards/ │ ├── 0_sixty/ │ │ ├── 0_sixty.c │ │ ├── 0_sixty.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── ven0mtr0n/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ └── via/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── 0xc7/ │ │ └── 61key/ │ │ ├── 61key.c │ │ ├── 61key.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── 0xcb/ │ │ ├── 1337/ │ │ │ ├── 1337.c │ │ │ ├── 1337.h │ │ │ ├── config.h │ │ │ ├── gfxfont.c │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── conor/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── jakob/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── static/ │ │ ├── config.h │ │ ├── gfxfont.c │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── bongocat/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── static.c │ │ └── static.h │ ├── 10bleoledhub/ │ │ ├── .noci │ │ ├── 10bleoledhub.c │ │ ├── 10bleoledhub.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── lib/ │ │ │ └── glcdfont.c │ │ ├── readme.md │ │ └── rules.mk │ ├── 1upkeyboards/ │ │ ├── 1up60hse/ │ │ │ ├── 1up60hse.c │ │ │ ├── 1up60hse.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── via/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ └── vosechu/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── 1up60hte/ │ │ │ ├── 1up60hte.c │ │ │ ├── 1up60hte.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── badger/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── hhkb/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── 1up60rgb/ │ │ │ ├── 1up60rgb.c │ │ │ ├── 1up60rgb.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── badger/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── iso/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── mdyevimnav/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── raffle/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── tsangan/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── super16/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── 15game/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── ahk_companion/ │ │ │ │ │ ├── ahk_companion.ahk │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── nblyumberg/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── super16.c │ │ │ └── super16.h │ │ └── sweet16/ │ │ ├── .noci │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── dlaroe/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── ridingintraffic/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── sebas/ │ │ │ │ └── keymap.c │ │ │ ├── switchtester/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ ├── rules.mk │ │ │ │ ├── switches.c │ │ │ │ └── switches.h │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── sweet16.c │ │ ├── sweet16.h │ │ ├── v1/ │ │ │ ├── config.h │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── v1.c │ │ │ └── v1.h │ │ └── v2/ │ │ ├── promicro/ │ │ │ ├── config.h │ │ │ ├── promicro.c │ │ │ ├── promicro.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── proton_c/ │ │ ├── config.h │ │ ├── proton_c.c │ │ ├── proton_c.h │ │ ├── readme.md │ │ └── rules.mk │ ├── 2key2crawl/ │ │ ├── 2key2crawl.c │ │ ├── 2key2crawl.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── tabs/ │ │ │ │ └── keymap.c │ │ │ └── vol/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── 30wer/ │ │ ├── 30wer.c │ │ ├── 30wer.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── 3w6/ │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── manna-harbour_miryoku/ │ │ │ ├── config.h │ │ │ └── keymap.c │ │ ├── readme.md │ │ ├── rev1/ │ │ │ ├── config.h │ │ │ ├── matrix.c │ │ │ ├── readme.md │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ └── rev2/ │ │ ├── config.h │ │ ├── keymaps/ │ │ │ └── default_pimoroni/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ ├── pimoroni_trackball.c │ │ │ ├── pimoroni_trackball.h │ │ │ └── rules.mk │ │ ├── matrix.c │ │ ├── readme.md │ │ ├── rev2.c │ │ ├── rev2.h │ │ └── rules.mk │ ├── 40percentclub/ │ │ ├── 25/ │ │ │ ├── 25.c │ │ │ ├── 25.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── macro/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── 4pack/ │ │ │ ├── 4pack.c │ │ │ ├── 4pack.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── 4x4/ │ │ │ ├── 4x4.c │ │ │ ├── 4x4.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── 5x5/ │ │ │ ├── 5x5.c │ │ │ ├── 5x5.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── 6lit/ │ │ │ ├── 6lit.c │ │ │ ├── 6lit.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── macro/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── foobar/ │ │ │ ├── config.h │ │ │ ├── foobar.c │ │ │ ├── foobar.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── macro/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── gherkin/ │ │ │ ├── config.h │ │ │ ├── gherkin.c │ │ │ ├── gherkin.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── bbaserdem/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── itsaferbie/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ ├── michel/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ ├── midi/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── mjt/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ ├── pierrec83/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.json │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── steno/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── stevexyz/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ └── talljoe-gherkin/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── half_n_half/ │ │ │ ├── config.h │ │ │ ├── half_n_half.c │ │ │ ├── half_n_half.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── Boy_314/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ └── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── i75/ │ │ │ ├── config.h │ │ │ ├── i75.c │ │ │ ├── i75.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── promicro/ │ │ │ │ ├── config.h │ │ │ │ ├── promicro.c │ │ │ │ ├── promicro.h │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ └── teensy2/ │ │ │ ├── config.h │ │ │ ├── rules.mk │ │ │ ├── teensy2.c │ │ │ └── teensy2.h │ │ ├── luddite/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── luddite.c │ │ │ ├── luddite.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── mf68/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── 68keys/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── andyjack/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── delivrance/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── emdarcher/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── mf68_ble/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mf68.c │ │ │ ├── mf68.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── nano/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ ├── drashna/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ └── spooka/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── nano.c │ │ │ ├── nano.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── nein/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── nein.c │ │ │ ├── nein.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── nori/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── macro/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── nori.c │ │ │ ├── nori.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── sixpack/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── fkeys/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── sixpack.c │ │ │ └── sixpack.h │ │ ├── tomato/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── tomato.c │ │ │ └── tomato.h │ │ └── ut47/ │ │ ├── LED_controls.ino │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── non-us/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── nordic/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── rgb/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── led.c │ │ ├── matrix.c │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── ut47.c │ │ └── ut47.h │ ├── 45_ats/ │ │ ├── 45_ats.c │ │ ├── 45_ats.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── 4by3/ │ │ ├── 4by3.c │ │ ├── 4by3.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── arrowpad/ │ │ │ │ └── keymap.c │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── funcpad_horizontal/ │ │ │ │ └── keymap.c │ │ │ ├── funcpad_vertical/ │ │ │ │ └── keymap.c │ │ │ ├── numpad_horizontal/ │ │ │ │ └── keymap.c │ │ │ └── numpad_vertical/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── 4pplet/ │ │ ├── aekiso60/ │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rev_a/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── rev_a.c │ │ │ ├── rev_a.h │ │ │ └── rules.mk │ │ ├── bootleg/ │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rev_a/ │ │ │ ├── config.h │ │ │ ├── readme.md │ │ │ ├── rev_a.c │ │ │ ├── rev_a.h │ │ │ └── rules.mk │ │ ├── eagle_viper_rep/ │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rev_a/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ ├── rev_a.c │ │ │ ├── rev_a.h │ │ │ └── rules.mk │ │ ├── steezy60/ │ │ │ ├── keymaps/ │ │ │ │ ├── 4pplet/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rev_a/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── rev_a.c │ │ │ ├── rev_a.h │ │ │ └── rules.mk │ │ └── waffling60/ │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rev_a/ │ │ │ ├── .noci │ │ │ ├── config.h │ │ │ ├── readme.md │ │ │ ├── rev_a.c │ │ │ ├── rev_a.h │ │ │ └── rules.mk │ │ └── rev_b/ │ │ ├── config.h │ │ ├── readme.md │ │ ├── rev_b.c │ │ ├── rev_b.h │ │ └── rules.mk │ ├── 6ball/ │ │ ├── 6ball.c │ │ ├── 6ball.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── 7c8/ │ │ └── framework/ │ │ ├── config.h │ │ ├── framework.c │ │ ├── framework.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── steven/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ └── via/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── 7skb/ │ │ ├── .noci │ │ ├── 7skb.c │ │ ├── 7skb.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── salicylic/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rev1/ │ │ │ ├── config.h │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ └── rules.mk │ ├── 7splus/ │ │ ├── 7splus.c │ │ ├── 7splus.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── salicylic/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ └── via/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── 8pack/ │ │ ├── .noci │ │ ├── 8pack.c │ │ ├── 8pack.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ ├── rev11/ │ │ │ ├── .noci │ │ │ ├── config.h │ │ │ ├── rev11.c │ │ │ ├── rev11.h │ │ │ └── rules.mk │ │ ├── rev12/ │ │ │ ├── config.h │ │ │ ├── rev12.c │ │ │ ├── rev12.h │ │ │ └── rules.mk │ │ └── rules.mk │ ├── 9key/ │ │ ├── 9key.c │ │ ├── 9key.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── bcat/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── tap_dance/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── abacus/ │ │ ├── abacus.c │ │ ├── abacus.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.json │ │ │ └── unicodemap/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── absinthe/ │ │ ├── absinthe.c │ │ ├── absinthe.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── ansi/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── abstract/ │ │ └── ellipse/ │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── abstractkb/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ └── default/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rev1/ │ │ ├── config.h │ │ ├── rev1.c │ │ ├── rev1.h │ │ └── rules.mk │ ├── acekeyboard/ │ │ └── titan60/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── iso/ │ │ │ │ └── keymap.c │ │ │ ├── tsangan/ │ │ │ │ └── keymap.c │ │ │ ├── utilitarian/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── titan60.c │ │ └── titan60.h │ ├── acheron/ │ │ ├── arctic/ │ │ │ ├── arctic.c │ │ │ ├── arctic.h │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── austin/ │ │ │ ├── austin.c │ │ │ ├── austin.h │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── elongate/ │ │ │ ├── config.h │ │ │ ├── elongate.c │ │ │ ├── elongate.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── keebspcb/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keebspcb.c │ │ │ ├── keebspcb.h │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── lasgweloth/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── xoxotus/ │ │ │ │ └── keymap.c │ │ │ ├── lasgweloth.c │ │ │ ├── lasgweloth.h │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── shark/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── ajp10304/ │ │ │ │ └── readme.md │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── shark.c │ │ └── shark.h │ ├── acr60/ │ │ ├── acr60.c │ │ ├── acr60.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── mitch/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── adelheid/ │ │ ├── adelheid.c │ │ ├── adelheid.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── floookay/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── adkb96/ │ │ ├── .noci │ │ ├── adkb96.c │ │ ├── adkb96.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── config.h │ │ │ └── keymap.c │ │ ├── readme.md │ │ ├── rev1/ │ │ │ ├── config.h │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ └── rules.mk │ ├── aeboards/ │ │ ├── aegis/ │ │ │ ├── aegis.c │ │ │ ├── aegis.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── constellation/ │ │ │ ├── constellation.c │ │ │ ├── constellation.h │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rev1/ │ │ │ │ ├── config.h │ │ │ │ ├── info.json │ │ │ │ ├── readme.md │ │ │ │ ├── rev1.c │ │ │ │ ├── rev1.h │ │ │ │ └── rules.mk │ │ │ ├── rev2/ │ │ │ │ ├── config.h │ │ │ │ ├── halconf.h │ │ │ │ ├── info.json │ │ │ │ ├── mcuconf.h │ │ │ │ ├── readme.md │ │ │ │ ├── rev2.c │ │ │ │ ├── rev2.h │ │ │ │ └── rules.mk │ │ │ └── rules.mk │ │ └── ext65/ │ │ ├── .noci │ │ ├── config.h │ │ ├── ext65.c │ │ ├── ext65.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rev1/ │ │ │ ├── .noci │ │ │ ├── config.h │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ ├── rev2/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── mcuconf.h │ │ │ ├── rev2.c │ │ │ ├── rev2.h │ │ │ └── rules.mk │ │ └── rules.mk │ ├── afternoonlabs/ │ │ ├── breeze/ │ │ │ ├── breeze.c │ │ │ ├── breeze.h │ │ │ ├── config.h │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── eithanshavit/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── rev0/ │ │ │ │ ├── config.h │ │ │ │ ├── info.json │ │ │ │ ├── readme.md │ │ │ │ ├── rev0.c │ │ │ │ ├── rev0.h │ │ │ │ └── rules.mk │ │ │ └── rev1/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── readme.md │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ ├── gust/ │ │ │ ├── config.h │ │ │ ├── gust.c │ │ │ ├── gust.h │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── rev1/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── readme.md │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ ├── oceanbreeze/ │ │ │ ├── config.h │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── oceanbreeze.c │ │ │ ├── oceanbreeze.h │ │ │ └── rev1/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── readme.md │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ ├── southern_breeze/ │ │ │ ├── config.h │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── rev1/ │ │ │ │ ├── config.h │ │ │ │ ├── info.json │ │ │ │ ├── readme.md │ │ │ │ ├── rev1.c │ │ │ │ ├── rev1.h │ │ │ │ └── rules.mk │ │ │ ├── southern_breeze.c │ │ │ └── southern_breeze.h │ │ └── summer_breeze/ │ │ ├── config.h │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── rev1/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── readme.md │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ ├── summer_breeze.c │ │ └── summer_breeze.h │ ├── ai03/ │ │ ├── andromeda/ │ │ │ ├── andromeda.c │ │ │ ├── andromeda.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── equinox/ │ │ │ ├── config.h │ │ │ ├── equinox.c │ │ │ ├── equinox.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── crd/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rev0/ │ │ │ │ ├── .noci │ │ │ │ ├── config.h │ │ │ │ └── rules.mk │ │ │ └── rev1/ │ │ │ ├── config.h │ │ │ └── rules.mk │ │ ├── lunar/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── muzfuz/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── lunar.c │ │ │ ├── lunar.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── orbit/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── matrix.c │ │ │ ├── orbit.c │ │ │ ├── orbit.h │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── serial.c │ │ │ ├── serial.h │ │ │ ├── split_flags.c │ │ │ ├── split_flags.h │ │ │ ├── split_util.c │ │ │ ├── split_util.h │ │ │ ├── transport.c │ │ │ └── transport.h │ │ ├── orbit_x/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── orbit_x.c │ │ │ ├── orbit_x.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── polaris/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── default_ansi_tsangan/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── mekberg/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── testing/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── polaris.c │ │ │ ├── polaris.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── quasar/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── ai03/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── quasar.c │ │ │ ├── quasar.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── soyuz/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── 1U/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── soyuz.c │ │ │ └── soyuz.h │ │ ├── vega/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── vega.c │ │ │ └── vega.h │ │ └── voyager60_alps/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── voyager60_alps.c │ │ └── voyager60_alps.h │ ├── ajisai74/ │ │ ├── ajisai74.c │ │ ├── ajisai74.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── jis/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── salicylic/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ └── via/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── akb/ │ │ ├── eb46/ │ │ │ ├── config.h │ │ │ ├── eb46.c │ │ │ ├── eb46.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── raine/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── mehadviceguy/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── raine.c │ │ ├── raine.h │ │ ├── readme.md │ │ └── rules.mk │ ├── akegata_denki/ │ │ └── device_one/ │ │ ├── .noci │ │ ├── chconf.h │ │ ├── config.h │ │ ├── device_one.c │ │ ├── device_one.h │ │ ├── halconf.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── ansi_arrow_keys/ │ │ │ │ └── keymap.c │ │ │ ├── ansi_split_backspace/ │ │ │ │ └── keymap.c │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── iso/ │ │ │ └── keymap.c │ │ ├── mcuconf.h │ │ ├── readme.md │ │ └── rules.mk │ ├── al1/ │ │ ├── al1.c │ │ ├── al1.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── splitbs/ │ │ │ └── keymap.c │ │ ├── matrix.c │ │ ├── readme.md │ │ └── rules.mk │ ├── aleblazer/ │ │ └── zodiark/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── slimoled/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ └── via/ │ │ │ ├── config.h │ │ │ ├── encoder.c │ │ │ ├── keymap.c │ │ │ ├── oled.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── zodiark.c │ │ └── zodiark.h │ ├── aleth42/ │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rev0/ │ │ │ ├── config.h │ │ │ ├── readme.md │ │ │ ├── rev0.c │ │ │ ├── rev0.h │ │ │ └── rules.mk │ │ ├── rev1/ │ │ │ ├── config.h │ │ │ ├── readme.md │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ └── rules.mk │ ├── alf/ │ │ ├── dc60/ │ │ │ ├── config.h │ │ │ ├── dc60.c │ │ │ ├── dc60.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── x11/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── x11.c │ │ │ └── x11.h │ │ └── x2/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── hhkb_60/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── x2.c │ │ └── x2.h │ ├── alfredslab/ │ │ └── swift65/ │ │ └── solder/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── solder.c │ │ └── solder.h │ ├── allison/ │ │ ├── allison.c │ │ ├── allison.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── allison_numpad/ │ │ ├── allison_numpad.c │ │ ├── allison_numpad.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── alpha/ │ │ ├── alpha.c │ │ ├── alpha.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── hvp/ │ │ │ │ └── keymap.c │ │ │ └── vderm/ │ │ │ ├── README.md │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── alpine65/ │ │ ├── alpine65.c │ │ ├── alpine65.h │ │ ├── chconf.h │ │ ├── config.h │ │ ├── halconf.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── mcuconf.h │ │ ├── readme.md │ │ └── rules.mk │ ├── alps64/ │ │ ├── alps64.c │ │ ├── alps64.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── crd/ │ │ │ │ └── keymap.c │ │ │ ├── dbroqua/ │ │ │ │ └── keymap.c │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── mechmerlin/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── alu84/ │ │ ├── alu84.c │ │ ├── alu84.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── turbomech/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── amag23/ │ │ ├── amag23.c │ │ ├── amag23.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── qwert/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── amj40/ │ │ ├── amj40.c │ │ ├── amj40.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── default_625u_space/ │ │ │ │ └── keymap.c │ │ │ ├── default_ortho_275u_space/ │ │ │ │ └── keymap.c │ │ │ ├── default_ortho_600u_space/ │ │ │ │ └── keymap.c │ │ │ ├── fabian/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── jetpacktuxedo/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ └── myee/ │ │ │ ├── build.sh │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ └── updatemerge.sh │ │ ├── readme.md │ │ └── rules.mk │ ├── amj60/ │ │ ├── amj60.c │ │ ├── amj60.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── amj96/ │ │ ├── amj96.c │ │ ├── amj96.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── matrix.c │ │ ├── readme.md │ │ └── rules.mk │ ├── amjkeyboard/ │ │ └── amj66/ │ │ ├── amj66.c │ │ ├── amj66.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── amjpad/ │ │ ├── amjpad.c │ │ ├── amjpad.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── max/ │ │ │ │ └── keymap.c │ │ │ ├── ortho_left/ │ │ │ │ └── keymap.c │ │ │ └── ortho_right/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── anavi/ │ │ └── macropad8/ │ │ ├── config.h │ │ ├── glcdfont.c │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── git/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── kicad/ │ │ │ │ └── keymap.c │ │ │ ├── kodi/ │ │ │ │ └── keymap.c │ │ │ ├── obs/ │ │ │ │ └── keymap.c │ │ │ └── zoom/ │ │ │ └── keymap.c │ │ ├── macropad8.c │ │ ├── macropad8.h │ │ ├── readme.md │ │ └── rules.mk │ ├── angel17/ │ │ ├── .noci │ │ ├── alpha/ │ │ │ ├── .noci │ │ │ ├── alpha.c │ │ │ ├── alpha.h │ │ │ ├── config.h │ │ │ └── rules.mk │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ ├── rev1/ │ │ │ ├── config.h │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ └── rules.mk │ ├── angel64/ │ │ ├── .noci │ │ ├── alpha/ │ │ │ ├── .noci │ │ │ ├── alpha.c │ │ │ ├── alpha.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── matrix.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rev1/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── kakunpc/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── matrix.c │ │ │ ├── readme.md │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ └── rules.mk │ ├── anomalykb/ │ │ └── a65i/ │ │ ├── a65i.c │ │ ├── a65i.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── ansi_splitbs/ │ │ │ │ └── keymap.c │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── iso/ │ │ │ │ └── keymap.c │ │ │ ├── iso_splitbs/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── aos/ │ │ └── tkl/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── aholland909/ │ │ │ │ └── keymap.c │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── tkl.c │ │ └── tkl.h │ ├── aozora/ │ │ └── hotswap/ │ │ ├── config.h │ │ ├── hotswap.c │ │ ├── hotswap.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── aplyard/ │ │ └── aplx6/ │ │ ├── info.json │ │ ├── rev1/ │ │ │ ├── config.h │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ └── rev2/ │ │ ├── config.h │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ ├── rev2.c │ │ ├── rev2.h │ │ └── rules.mk │ ├── arabica37/ │ │ ├── arabica37.c │ │ ├── arabica37.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── lib/ │ │ │ └── glcdfont.c │ │ ├── readme.md │ │ └── rev1/ │ │ ├── .noci │ │ ├── config.h │ │ ├── rev1.c │ │ ├── rev1.h │ │ └── rules.mk │ ├── arch_36/ │ │ ├── arch_36.c │ │ ├── arch_36.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── obosob/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── ares/ │ │ ├── ares.c │ │ ├── ares.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── arisu/ │ │ ├── arisu.c │ │ ├── arisu.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── fate/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── kresnak/ │ │ │ │ └── keymap.c │ │ │ ├── stanrc85/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── arrayperipherals/ │ │ ├── 1x4p1/ │ │ │ ├── 1x4p1.c │ │ │ ├── 1x4p1.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── readme.md │ ├── ash1800/ │ │ ├── ash1800.c │ │ ├── ash1800.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── ash_xiix/ │ │ ├── ash_xiix.c │ │ ├── ash_xiix.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── ashpil/ │ │ └── modelm_usbc/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── ashpil/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── modelm_usbc.c │ │ ├── modelm_usbc.h │ │ ├── readme.md │ │ └── rules.mk │ ├── at101_bh/ │ │ ├── at101_bh.c │ │ ├── at101_bh.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── at_at/ │ │ └── 660m/ │ │ ├── 660m.c │ │ ├── 660m.h │ │ ├── chconf.h │ │ ├── config.h │ │ ├── halconf.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── mcuconf.h │ │ ├── readme.md │ │ └── rules.mk │ ├── atomic/ │ │ ├── atomic.c │ │ ├── atomic.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── abienz/ │ │ │ │ └── keymap.c │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── michelle/ │ │ │ │ └── keymap.c │ │ │ ├── pvc/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ └── twolayer/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── atreus/ │ │ ├── astar/ │ │ │ ├── astar.c │ │ │ ├── astar.h │ │ │ ├── config.h │ │ │ └── rules.mk │ │ ├── astar_mirrored/ │ │ │ ├── astar_mirrored.c │ │ │ ├── astar_mirrored.h │ │ │ ├── config.h │ │ │ └── rules.mk │ │ ├── atreus.c │ │ ├── atreus.h │ │ ├── config.h │ │ ├── feather/ │ │ │ ├── config.h │ │ │ ├── feather.c │ │ │ ├── feather.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── clash/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── classic/ │ │ │ │ └── keymap.c │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── dvorak_42_key/ │ │ │ │ ├── README.md │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── erlandsona/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── gerb/ │ │ │ │ └── keymap.c │ │ │ ├── henxing/ │ │ │ │ ├── Readme.md │ │ │ │ └── keymap.c │ │ │ ├── ibnuda/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── jeremy/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── kejadlen/ │ │ │ │ ├── README.md │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── khitsule/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── manna-harbour_miryoku/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── nojjan/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── ptillemans/ │ │ │ │ └── keymap.c │ │ │ ├── replicaJunction/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── ridingqwerty/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── talljoe/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── workman/ │ │ │ │ ├── README.md │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── xk/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── xyverz/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── yttyx/ │ │ │ ├── README.md │ │ │ ├── config.h │ │ │ └── keymap.c │ │ ├── promicro/ │ │ │ ├── config.h │ │ │ ├── promicro.c │ │ │ ├── promicro.h │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ └── teensy2/ │ │ ├── config.h │ │ ├── rules.mk │ │ ├── teensy2.c │ │ └── teensy2.h │ ├── atreus62/ │ │ ├── atreus62.c │ │ ├── atreus62.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── 194h/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── d4mation/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── hvp/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── jarred/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── mfluid/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── mneme/ │ │ │ │ ├── README.md │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── rules.mk │ │ │ │ └── unicode │ │ │ ├── pcewing/ │ │ │ │ └── keymap.c │ │ │ ├── scheiklp/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ └── xyverz/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── atxkb/ │ │ ├── 1894/ │ │ │ ├── 1894.c │ │ │ ├── 1894.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── default_ansi_tsangan/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── readme.md │ ├── aves65/ │ │ ├── aves65.c │ │ ├── aves65.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── axolstudio/ │ │ ├── helpo/ │ │ │ ├── config.h │ │ │ ├── helpo.c │ │ │ ├── helpo.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── yeti/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── yeti.c │ │ └── yeti.h │ ├── baguette/ │ │ ├── baguette.c │ │ ├── baguette.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── iso/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── bakeneko60/ │ │ ├── bakeneko60.c │ │ ├── bakeneko60.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── bakeneko65/ │ │ ├── rev2/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rev2.c │ │ │ ├── rev2.h │ │ │ └── rules.mk │ │ └── rev3/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rev3.c │ │ ├── rev3.h │ │ └── rules.mk │ ├── bakeneko80/ │ │ ├── bakeneko80.c │ │ ├── bakeneko80.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── bantam44/ │ │ ├── bantam44.c │ │ ├── bantam44.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── barleycorn/ │ │ ├── barleycorn.c │ │ ├── barleycorn.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── iso/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── matrix.c │ │ ├── readme.md │ │ └── rules.mk │ ├── barleycorn_smd/ │ │ ├── barleycorn_smd.c │ │ ├── barleycorn_smd.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── iso/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── matrix.c │ │ ├── readme.md │ │ └── rules.mk │ ├── barracuda/ │ │ ├── barracuda.c │ │ ├── barracuda.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── basekeys/ │ │ ├── slice/ │ │ │ ├── config.h │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ └── keymap.c │ │ │ │ └── default_split_left_space/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ ├── rev1/ │ │ │ │ ├── .noci │ │ │ │ ├── config.h │ │ │ │ ├── info.json │ │ │ │ ├── keymaps/ │ │ │ │ │ ├── 2moons/ │ │ │ │ │ │ ├── config.h │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── rules.mk │ │ │ │ │ ├── default_all/ │ │ │ │ │ │ ├── config.h │ │ │ │ │ │ └── keymap.c │ │ │ │ │ ├── default_split_backspace/ │ │ │ │ │ │ ├── config.h │ │ │ │ │ │ └── keymap.c │ │ │ │ │ └── via/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ ├── rev1.c │ │ │ │ ├── rev1.h │ │ │ │ └── rules.mk │ │ │ ├── rev1_rgb/ │ │ │ │ ├── config.h │ │ │ │ ├── info.json │ │ │ │ ├── keymaps/ │ │ │ │ │ ├── 2moons_rgb/ │ │ │ │ │ │ ├── config.h │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── rules.mk │ │ │ │ │ └── via/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ ├── rev1_rgb.c │ │ │ │ ├── rev1_rgb.h │ │ │ │ └── rules.mk │ │ │ ├── slice.c │ │ │ ├── slice.h │ │ │ └── slice_font.c │ │ └── trifecta/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── trifecta.c │ │ └── trifecta.h │ ├── basketweave/ │ │ ├── basketweave.c │ │ ├── basketweave.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── bastardkb/ │ │ ├── scylla/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── cykedev/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── german_gaming/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ └── xyverz/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── scylla.c │ │ │ └── scylla.h │ │ ├── skeletyl/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── skeletyl.c │ │ │ └── skeletyl.h │ │ ├── tbk/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── german_gaming/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ └── xyverz/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── tbk.c │ │ │ └── tbk.h │ │ └── tbkmini/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── tbkmini.c │ │ └── tbkmini.h │ ├── bat43/ │ │ ├── .noci │ │ ├── bat43.c │ │ ├── bat43.h │ │ ├── config.h │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rev1/ │ │ │ ├── .noci │ │ │ ├── info.json │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ ├── rev2/ │ │ │ ├── .noci │ │ │ ├── info.json │ │ │ ├── rev2.c │ │ │ ├── rev2.h │ │ │ └── rules.mk │ │ └── rules.mk │ ├── bear_face/ │ │ ├── .noci │ │ ├── bear_face.c │ │ ├── bear_face.h │ │ ├── config.h │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── v1/ │ │ │ ├── .noci │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── rules.mk │ │ │ ├── v1.c │ │ │ └── v1.h │ │ └── v2/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── default_iso/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── rules.mk │ │ ├── v2.c │ │ └── v2.h │ ├── beatervan/ │ │ ├── beatervan.c │ │ ├── beatervan.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── oj/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── bemeier/ │ │ └── bmek/ │ │ ├── bmek.c │ │ ├── bmek.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── README.md │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── README.md │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rev1/ │ │ │ ├── .noci │ │ │ ├── config.h │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ ├── rev2/ │ │ │ ├── .noci │ │ │ ├── config.h │ │ │ ├── rev2.c │ │ │ ├── rev2.h │ │ │ └── rules.mk │ │ └── rev3/ │ │ ├── config.h │ │ ├── rev3.c │ │ ├── rev3.h │ │ └── rules.mk │ ├── bfake/ │ │ ├── bfake.c │ │ ├── bfake.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── mechmerlin/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── bigseries/ │ │ ├── 1key/ │ │ │ ├── .noci │ │ │ ├── 1key.c │ │ │ ├── 1key.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── 8ball/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── ctrl-alt-del/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── dudeofawesome/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ ├── leddance/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ ├── lock/ │ │ │ │ │ └── keymap.c │ │ │ │ └── tester/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── 2key/ │ │ │ ├── .noci │ │ │ ├── 2key.c │ │ │ ├── 2key.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── lock/ │ │ │ │ │ └── keymap.c │ │ │ │ └── tester/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── 3key/ │ │ │ ├── .noci │ │ │ ├── 3key.c │ │ │ ├── 3key.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── ctrl-alt-del/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── tester/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── 4key/ │ │ │ ├── 4key.c │ │ │ ├── 4key.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── tester/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── readme.md │ ├── binepad/ │ │ └── bn003/ │ │ ├── bn003.c │ │ ├── bn003.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── bioi/ │ │ ├── ble.c │ │ ├── ble.h │ │ ├── g60/ │ │ │ ├── config.h │ │ │ ├── g60.c │ │ │ ├── g60.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── g60ble/ │ │ │ ├── config.h │ │ │ ├── g60ble.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── main.c │ │ ├── morgan65/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── morgan65.c │ │ │ ├── morgan65.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── s65/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── s65.c │ │ │ └── s65.h │ │ ├── usart.c │ │ └── usart.h │ ├── blackplum/ │ │ ├── blackplum.c │ │ ├── blackplum.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── blank_tehnologii/ │ │ └── manibus/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── samurai/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── manibus.c │ │ ├── manibus.h │ │ ├── readme.md │ │ └── rules.mk │ ├── ble_micro_pro/ │ │ ├── ble_micro_pro.c │ │ ├── ble_micro_pro.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── bto_tb/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── paw3204.c │ │ │ │ ├── paw3204.h │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── lpme_tester/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── no_msc/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── safemode/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── tb_module/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── ld/ │ │ │ └── nrf52840_ao.ld │ │ ├── readme.md │ │ └── rules.mk │ ├── blockey/ │ │ ├── blockey.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── eucalyn/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── boardrun/ │ │ ├── bizarre/ │ │ │ ├── bizarre.c │ │ │ ├── bizarre.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── nopunin10did/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── classic/ │ │ ├── classic.c │ │ ├── classic.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── boardsource/ │ │ ├── 3x4/ │ │ │ ├── 3x4.c │ │ │ ├── 3x4.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── 4x12/ │ │ │ ├── 4x12.c │ │ │ ├── 4x12.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── codecoffeecode/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── 5x12/ │ │ │ ├── 5x12.c │ │ │ ├── 5x12.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── beiwagon/ │ │ │ ├── beiwagon.c │ │ │ ├── beiwagon.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── holiday/ │ │ │ └── spooky/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── rip_mx/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ └── rip_my_wallet/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── spooky.c │ │ │ └── spooky.h │ │ ├── microdox/ │ │ │ ├── .noci │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── cole/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── microdox.c │ │ │ ├── microdox.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── technik_o/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── technik_o.c │ │ │ └── technik_o.h │ │ ├── technik_s/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── technik_s.c │ │ │ └── technik_s.h │ │ └── the_mark/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── default_ansi/ │ │ │ │ └── keymap.c │ │ │ ├── default_iso/ │ │ │ │ └── keymap.c │ │ │ ├── stanrc85/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── the_mark.c │ │ └── the_mark.h │ ├── boardwalk/ │ │ ├── boardwalk.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── brendanwr/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── default_2u_arrow/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── default_2x2u/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── default_625u_arrow/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── default_ortho_7u/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── default_ortho_hhkb/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── mcallaster/ │ │ │ │ └── keymap.c │ │ │ ├── nchristus/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── niclake/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── bop/ │ │ ├── bop.c │ │ ├── bop.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── boston/ │ │ ├── boston.c │ │ ├── boston.h │ │ ├── chconf.h │ │ ├── config.h │ │ ├── halconf.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── rgb-light-layers/ │ │ │ └── keymap.c │ │ ├── mcuconf.h │ │ ├── readme.md │ │ └── rules.mk │ ├── boston_meetup/ │ │ ├── 2019/ │ │ │ ├── 2019.c │ │ │ ├── 2019.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── boston_meetup.c │ │ ├── boston_meetup.h │ │ ├── config.h │ │ ├── readme.md │ │ └── rules.mk │ ├── botanicalkeyboards/ │ │ └── fm2u/ │ │ ├── config.h │ │ ├── fm2u.c │ │ ├── fm2u.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── box75/ │ │ ├── box75.c │ │ ├── box75.h │ │ ├── chconf.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── mcuconf.h │ │ ├── readme.md │ │ └── rules.mk │ ├── bpiphany/ │ │ ├── frosty_flake/ │ │ │ ├── config.h │ │ │ ├── frosty_flake.c │ │ │ ├── frosty_flake.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── QFR_JM/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── nikchi/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ ├── rules.mk │ │ │ │ │ └── variableTapDance.md │ │ │ │ └── tkl/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── matrix.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── kitten_paw/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── ickerwx/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── kitten_paw.c │ │ │ ├── kitten_paw.h │ │ │ ├── matrix.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── pegasushoof/ │ │ │ ├── .noci │ │ │ ├── 2013/ │ │ │ │ ├── .noci │ │ │ │ ├── 2013.c │ │ │ │ ├── 2013.h │ │ │ │ ├── config.h │ │ │ │ ├── matrix.c │ │ │ │ └── rules.mk │ │ │ ├── 2015/ │ │ │ │ ├── 2015.c │ │ │ │ ├── 2015.h │ │ │ │ ├── config.h │ │ │ │ ├── matrix.c │ │ │ │ └── rules.mk │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── blowrak/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ ├── citadel/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ └── default_jis/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── sixshooter/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── sixshooter.c │ │ │ └── sixshooter.h │ │ ├── tiger_lily/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── default_ansi/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ └── via/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── matrix.c │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── tiger_lily.c │ │ │ └── tiger_lily.h │ │ └── unloved_bastard/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.json │ │ │ ├── default_ansi/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── default_iso/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── matrix.c │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── unloved_bastard.c │ │ └── unloved_bastard.h │ ├── bt66tech/ │ │ └── bt66tech60/ │ │ ├── bt66tech60.c │ │ ├── bt66tech60.h │ │ ├── chconf.h │ │ ├── config.h │ │ ├── halconf.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── mcuconf.h │ │ ├── readme.md │ │ └── rules.mk │ ├── bthlabs/ │ │ └── geekpad/ │ │ ├── .noci │ │ ├── config.h │ │ ├── geekpad.c │ │ ├── geekpad.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── config.h │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── buildakb/ │ │ ├── potato65/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── potato65.c │ │ │ ├── potato65.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── potato65hs/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── potato65hs.c │ │ ├── potato65hs.h │ │ ├── readme.md │ │ └── rules.mk │ ├── business_card/ │ │ ├── .noci │ │ ├── alpha/ │ │ │ ├── .noci │ │ │ ├── alpha.c │ │ │ ├── alpha.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── rules.mk │ │ ├── beta/ │ │ │ ├── beta.c │ │ │ ├── beta.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── rules.mk │ │ ├── business_card.c │ │ ├── business_card.h │ │ ├── config.h │ │ ├── readme.md │ │ └── rules.mk │ ├── butterstick/ │ │ ├── butterstick.c │ │ ├── butterstick.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── dennytom/ │ │ │ ├── README.md │ │ │ ├── keymap.c │ │ │ ├── keymap_def.json │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── sten.c │ │ └── sten.h │ ├── c39/ │ │ ├── c39.c │ │ ├── c39.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── drashna/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ └── kuchosauronad0/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── caffeinated/ │ │ └── serpent65/ │ │ ├── chconf.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── serpent65.c │ │ └── serpent65.h │ ├── cannonkeys/ │ │ ├── aella/ │ │ │ ├── aella.c │ │ │ ├── aella.h │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── an_c/ │ │ │ ├── an_c.c │ │ │ ├── an_c.h │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── tsangan/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── atlas/ │ │ │ ├── atlas.c │ │ │ ├── atlas.h │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── atlas_alps/ │ │ │ ├── atlas_alps.c │ │ │ ├── atlas_alps.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── balance/ │ │ │ ├── balance.c │ │ │ ├── balance.h │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── chimera65/ │ │ │ ├── chconf.h │ │ │ ├── chimera65.c │ │ │ ├── chimera65.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── db60/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── db60.c │ │ │ ├── db60.h │ │ │ ├── halconf.h │ │ │ ├── hotswap/ │ │ │ │ ├── config.h │ │ │ │ ├── hotswap.h │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── info.json │ │ │ ├── j02/ │ │ │ │ ├── config.h │ │ │ │ ├── j02.h │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── iso/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── tsangan/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ ├── rev2/ │ │ │ │ ├── config.h │ │ │ │ ├── readme.md │ │ │ │ ├── rev2.h │ │ │ │ └── rules.mk │ │ │ └── rules.mk │ │ ├── devastatingtkl/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── devastatingtkl.c │ │ │ ├── devastatingtkl.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── instant60/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── instant60.c │ │ │ ├── instant60.h │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── tsangan/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── via/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ └── via_standard/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── instant65/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── instant65.c │ │ │ ├── instant65.h │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── iron165/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── iron165.c │ │ │ ├── iron165.h │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── obliterated75/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── obliterated75.c │ │ │ ├── obliterated75.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── onyx/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── onyx.c │ │ │ ├── onyx.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── ortho48/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── ortho48.c │ │ │ ├── ortho48.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── ortho60/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── ortho60.c │ │ │ ├── ortho60.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── ortho75/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── mcuconf.h │ │ │ ├── ortho75.c │ │ │ ├── ortho75.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── practice60/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── practice60.c │ │ │ ├── practice60.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── practice65/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── mcuconf.h │ │ │ ├── practice65.c │ │ │ ├── practice65.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── rekt1800/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ ├── rekt1800.c │ │ │ ├── rekt1800.h │ │ │ └── rules.mk │ │ ├── sagittarius/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── sagittarius.c │ │ │ └── sagittarius.h │ │ ├── satisfaction75/ │ │ │ ├── .noci │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── keymaps/ │ │ │ │ ├── boy_314/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── jae/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── tester/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── led.c │ │ │ ├── led_custom.h │ │ │ ├── mcuconf.h │ │ │ ├── prototype/ │ │ │ │ ├── .noci │ │ │ │ ├── info.json │ │ │ │ ├── prototype.h │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rev1/ │ │ │ │ ├── info.json │ │ │ │ ├── rev1.h │ │ │ │ └── rules.mk │ │ │ ├── rules.mk │ │ │ ├── satisfaction75.c │ │ │ ├── satisfaction75.h │ │ │ ├── satisfaction_encoder.c │ │ │ └── satisfaction_oled.c │ │ ├── savage65/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── savage65.c │ │ │ └── savage65.h │ │ ├── tmov2/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── brandonschlack/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── tmov2.c │ │ │ └── tmov2.h │ │ ├── tsukuyomi/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── tsukuyomi.c │ │ │ └── tsukuyomi.h │ │ └── vicious40/ │ │ ├── chconf.h │ │ ├── config.h │ │ ├── halconf.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── mcuconf.h │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── vicious40.c │ │ └── vicious40.h │ ├── capsunlocked/ │ │ ├── cu65/ │ │ │ ├── config.h │ │ │ ├── cu65.c │ │ │ ├── cu65.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── iso/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── iso_split_bs/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── cu7/ │ │ │ ├── config.h │ │ │ ├── cu7.c │ │ │ ├── cu7.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── cu80/ │ │ │ ├── v2_ansi/ │ │ │ │ ├── config.h │ │ │ │ ├── info.json │ │ │ │ ├── keymaps/ │ │ │ │ │ ├── default/ │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ └── via/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ ├── readme.md │ │ │ │ ├── rgb/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── info.json │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── rules.mk │ │ │ │ ├── v2_ansi.c │ │ │ │ └── v2_ansi.h │ │ │ └── v2_iso/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rgb/ │ │ │ │ ├── config.h │ │ │ │ ├── info.json │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── rules.mk │ │ │ ├── v2_iso.c │ │ │ └── v2_iso.h │ │ └── readme.md │ ├── carbo65/ │ │ ├── carbo65.c │ │ ├── carbo65.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── cassette42/ │ │ ├── cassette42.c │ │ ├── cassette42.h │ │ ├── common/ │ │ │ ├── glcdfont.c │ │ │ ├── oled_helper.c │ │ │ └── oled_helper.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── catch22/ │ │ ├── catch22.c │ │ ├── catch22.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── centromere/ │ │ ├── centromere.c │ │ ├── centromere.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── default_u2/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mattly/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mini/ │ │ │ │ └── keymap.c │ │ │ └── mini_bom/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── matrix.c │ │ ├── readme.md │ │ └── rules.mk │ ├── cest73/ │ │ └── tkm/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── tkm.c │ │ └── tkm.h │ ├── charue/ │ │ └── sunsetter/ │ │ ├── chconf.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── default_all/ │ │ │ │ └── keymap.c │ │ │ ├── default_iso/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── mcuconf.h │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── sunsetter.c │ │ └── sunsetter.h │ ├── chavdai40/ │ │ ├── board.h │ │ ├── chconf.h │ │ ├── halconf.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── 42keys-dvorak/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── 42keys-eucalyn/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── 42keys-qwerty/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── 44keys-dvorak/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── 44keys-eucalyn/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── 44keys-qwerty/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ └── default/ │ │ │ ├── config.h │ │ │ └── keymap.c │ │ ├── mcuconf.h │ │ ├── readme.md │ │ ├── rev1/ │ │ │ ├── .noci │ │ │ ├── config.h │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ └── rev2/ │ │ ├── config.h │ │ ├── rev2.c │ │ ├── rev2.h │ │ └── rules.mk │ ├── checkerboards/ │ │ ├── axon40/ │ │ │ ├── axon40.c │ │ │ ├── axon40.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── npspears/ │ │ │ │ │ ├── config.h │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── candybar_ortho/ │ │ │ ├── candybar_ortho.c │ │ │ ├── candybar_ortho.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── 2x3u/ │ │ │ │ │ ├── config.h │ │ │ │ │ └── keymap.c │ │ │ │ ├── 7u/ │ │ │ │ │ ├── config.h │ │ │ │ │ └── keymap.c │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── g_idb60/ │ │ │ ├── config.h │ │ │ ├── g_idb60.c │ │ │ ├── g_idb60.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── nop60/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── 7u/ │ │ │ │ │ ├── config.h │ │ │ │ │ └── keymap.c │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── nop60.c │ │ │ ├── nop60.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── quark_squared/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── 2u/ │ │ │ │ │ ├── config.h │ │ │ │ │ └── keymap.c │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── quark_squared.c │ │ │ ├── quark_squared.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── ud40_ortho_alt/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── 2x3u_alt/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── 600u/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── 600u_alt/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── 700u/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── npspears/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── ud40_ortho_alt.c │ │ └── ud40_ortho_alt.h │ ├── cherrybstudio/ │ │ ├── cb1800/ │ │ │ ├── cb1800.c │ │ │ ├── cb1800.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── cb87/ │ │ ├── cb87.c │ │ ├── cb87.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── cheshire/ │ │ └── curiosity/ │ │ ├── chconf.h │ │ ├── config.h │ │ ├── curiosity.c │ │ ├── curiosity.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── crd/ │ │ │ │ └── keymap.c │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── madhatter/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── chidori/ │ │ ├── .noci │ │ ├── board.c │ │ ├── board.h │ │ ├── chidori.c │ │ ├── chidori.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── extended/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── oled_sample/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── matrix.c │ │ ├── readme.md │ │ └── rules.mk │ ├── chili/ │ │ ├── chili.c │ │ ├── chili.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── chimera_ergo/ │ │ ├── chimera_ergo.c │ │ ├── chimera_ergo.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── matrix.c │ │ ├── readme.md │ │ └── rules.mk │ ├── chimera_ls/ │ │ ├── chimera_ls.c │ │ ├── chimera_ls.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── matrix.c │ │ ├── readme.md │ │ └── rules.mk │ ├── chimera_ortho/ │ │ ├── chimera_ortho.c │ │ ├── chimera_ortho.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── config.h │ │ │ └── keymap.c │ │ ├── matrix.c │ │ ├── readme.md │ │ └── rules.mk │ ├── chimera_ortho_plus/ │ │ ├── chimera_ortho_plus.c │ │ ├── chimera_ortho_plus.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── config.h │ │ │ └── keymap.c │ │ ├── matrix.c │ │ ├── readme.md │ │ └── rules.mk │ ├── chlx/ │ │ └── merro60/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── ansi/ │ │ │ │ └── keymap.c │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── hhkb/ │ │ │ │ └── keymap.c │ │ │ ├── iso/ │ │ │ │ └── keymap.c │ │ │ ├── tsangan/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── merro60.c │ │ ├── merro60.h │ │ ├── readme.md │ │ └── rules.mk │ ├── choc_taro/ │ │ ├── choc_taro.c │ │ ├── choc_taro.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── matrix.c │ │ ├── readme.md │ │ └── rules.mk │ ├── choco60/ │ │ ├── choco60.c │ │ ├── choco60.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rev1/ │ │ │ ├── .noci │ │ │ ├── config.h │ │ │ ├── readme.md │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ ├── rev2/ │ │ │ ├── config.h │ │ │ ├── readme.md │ │ │ ├── rev2.c │ │ │ ├── rev2.h │ │ │ └── rules.mk │ │ └── rules.mk │ ├── christmas_tree/ │ │ ├── .noci │ │ ├── V2017/ │ │ │ ├── V2017.c │ │ │ ├── V2017.h │ │ │ ├── config.h │ │ │ └── rules.mk │ │ ├── christmas_tree.c │ │ ├── christmas_tree.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── ck60i/ │ │ ├── chconf.h │ │ ├── ck60i.c │ │ ├── ck60i.h │ │ ├── config.h │ │ ├── halconf.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── mcuconf.h │ │ ├── readme.md │ │ └── rules.mk │ ├── ckeys/ │ │ ├── handwire_101/ │ │ │ ├── config.h │ │ │ ├── handwire_101.c │ │ │ ├── handwire_101.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── nakey/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── nakey.c │ │ │ ├── nakey.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── obelus/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── obelus.c │ │ │ ├── obelus.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── thedora/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── thedora.c │ │ │ └── thedora.h │ │ └── washington/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── washington.c │ │ └── washington.h │ ├── claw44/ │ │ ├── .noci │ │ ├── claw44.c │ │ ├── claw44.h │ │ ├── config.h │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── oled/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ └── via/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── lib/ │ │ │ └── glcdfont.c │ │ ├── readme.md │ │ ├── rev1/ │ │ │ ├── .noci │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── readme.md │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ └── rules.mk │ ├── clawsome/ │ │ ├── bookerboard/ │ │ │ ├── bookerboard.c │ │ │ ├── bookerboard.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── coupe/ │ │ │ ├── config.h │ │ │ ├── coupe.c │ │ │ ├── coupe.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── doodle/ │ │ │ ├── config.h │ │ │ ├── doodle.c │ │ │ ├── doodle.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ └── rules.mk │ │ ├── fightpad/ │ │ │ ├── config.h │ │ │ ├── fightpad.c │ │ │ ├── fightpad.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── gamebuddy/ │ │ │ ├── v1_0/ │ │ │ │ ├── config.h │ │ │ │ ├── info.json │ │ │ │ ├── keymaps/ │ │ │ │ │ └── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── readme.md │ │ │ │ ├── rules.mk │ │ │ │ ├── v1_0.c │ │ │ │ └── v1_0.h │ │ │ └── v1_m/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── v1_m.c │ │ │ └── v1_m.h │ │ ├── hatchback/ │ │ │ ├── config.h │ │ │ ├── hatchback.c │ │ │ ├── hatchback.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── luggage_rack/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── luggage_rack.c │ │ │ ├── luggage_rack.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── numeros/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── numeros.c │ │ │ ├── numeros.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── roadster/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ ├── roadster.c │ │ │ ├── roadster.h │ │ │ └── rules.mk │ │ ├── sedan/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── sedan.c │ │ │ └── sedan.h │ │ ├── sidekick/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── sidekick.c │ │ │ └── sidekick.h │ │ └── suv/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── suv.c │ │ └── suv.h │ ├── clueboard/ │ │ ├── 17/ │ │ │ ├── .noci │ │ │ ├── 17.c │ │ │ ├── 17.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── 2x1800/ │ │ │ ├── 2018/ │ │ │ │ ├── .noci │ │ │ │ ├── 2018.c │ │ │ │ ├── 2018.h │ │ │ │ ├── config.h │ │ │ │ ├── info.json │ │ │ │ ├── keymaps/ │ │ │ │ │ ├── default/ │ │ │ │ │ │ ├── config.h │ │ │ │ │ │ ├── keymap.json │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── default_4u/ │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── default_7u/ │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── macroboard/ │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── mouseboard_left/ │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ └── mouseboard_right/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── 2019/ │ │ │ │ ├── 2019.c │ │ │ │ ├── 2019.h │ │ │ │ ├── config.h │ │ │ │ ├── info.json │ │ │ │ ├── keymaps/ │ │ │ │ │ ├── default/ │ │ │ │ │ │ ├── keymap.json │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── default_1u_ansi/ │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── default_1u_iso/ │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── default_2u_ansi/ │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── default_2u_iso/ │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── default_4u_ansi/ │ │ │ │ │ │ ├── config.h │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── default_4u_iso/ │ │ │ │ │ │ ├── config.h │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── default_7u_ansi/ │ │ │ │ │ │ ├── config.h │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ └── default_7u_iso/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── 2021/ │ │ │ │ ├── .noci │ │ │ │ ├── 2021.c │ │ │ │ ├── 2021.h │ │ │ │ ├── config.h │ │ │ │ ├── font.h │ │ │ │ ├── info.json │ │ │ │ ├── keymaps/ │ │ │ │ │ ├── default/ │ │ │ │ │ │ └── keymap.json │ │ │ │ │ ├── default_4u/ │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── default_7u/ │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ └── signboard/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── max7219.c │ │ │ │ ├── max7219.h │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── info.json │ │ │ └── readme.md │ │ ├── 60/ │ │ │ ├── .noci │ │ │ ├── 60.c │ │ │ ├── 60.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── default_aek/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── led.c │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── 66/ │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── 66_ansi/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── 66_iso/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── badger/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── bloodlvst/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── caps_fn/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── colemak/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── jokrik/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── mac_optimized/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── magicmonty/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── manofinterests/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── maximised/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── mouse_keys/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── mrscooty/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── muzfuz/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── serubin/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ ├── shift_fn/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── smt/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── tetris/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ ├── rules.mk │ │ │ │ │ ├── tetris_text.c │ │ │ │ │ └── tetris_text.h │ │ │ │ ├── unix_optimized/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── via/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ └── win_optimized/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ ├── rev1/ │ │ │ │ ├── .noci │ │ │ │ ├── config.h │ │ │ │ ├── info.json │ │ │ │ ├── readme.md │ │ │ │ ├── rev1.c │ │ │ │ ├── rev1.h │ │ │ │ └── rules.mk │ │ │ ├── rev2/ │ │ │ │ ├── .noci │ │ │ │ ├── config.h │ │ │ │ ├── info.json │ │ │ │ ├── readme.md │ │ │ │ ├── rev2.c │ │ │ │ ├── rev2.h │ │ │ │ └── rules.mk │ │ │ ├── rev3/ │ │ │ │ ├── config.h │ │ │ │ ├── info.json │ │ │ │ ├── readme.md │ │ │ │ ├── rev3.c │ │ │ │ ├── rev3.h │ │ │ │ └── rules.mk │ │ │ └── rev4/ │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── keymap.c │ │ │ │ └── mine/ │ │ │ │ └── keymap.c │ │ │ ├── mcuconf.h │ │ │ ├── mine/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ ├── rev4.c │ │ │ ├── rev4.h │ │ │ └── rules.mk │ │ ├── 66_hotswap/ │ │ │ ├── 66_hotswap.c │ │ │ ├── 66_hotswap.h │ │ │ ├── config.h │ │ │ ├── gen1/ │ │ │ │ ├── config.h │ │ │ │ ├── gen1.c │ │ │ │ ├── gen1.h │ │ │ │ ├── halconf.h │ │ │ │ ├── info.json │ │ │ │ ├── keymaps/ │ │ │ │ │ ├── 66_ansi/ │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── default/ │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ └── json/ │ │ │ │ │ └── keymap.json │ │ │ │ ├── mcuconf.h │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── prototype/ │ │ │ │ ├── .noci │ │ │ │ ├── config.h │ │ │ │ ├── info.json │ │ │ │ ├── keymaps/ │ │ │ │ │ ├── 66_ansi/ │ │ │ │ │ │ ├── keymap.c │ │ │ │ │ │ └── readme.md │ │ │ │ │ └── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── prototype.c │ │ │ │ ├── prototype.h │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ └── readme.md │ │ ├── california/ │ │ │ ├── california.c │ │ │ ├── california.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── keymap.json │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── card/ │ │ │ ├── .noci │ │ │ ├── card.c │ │ │ ├── card.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ └── rgb_effects/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── info.json │ │ └── readme.md │ ├── cmm_studio/ │ │ └── saka68/ │ │ ├── hotswap/ │ │ │ ├── config.h │ │ │ ├── hotswap.c │ │ │ ├── hotswap.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── solder/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── solder.c │ │ └── solder.h │ ├── coarse/ │ │ ├── cordillera/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── cordillera.c │ │ │ ├── cordillera.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── ixora/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── ixora.c │ │ │ ├── ixora.h │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── wntrmln/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── vinta/ │ │ ├── chconf.h │ │ ├── config.h │ │ ├── halconf.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── vinta.c │ │ └── vinta.h │ ├── cocoa40/ │ │ ├── .noci │ │ ├── cocoa40.c │ │ ├── cocoa40.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── comet46/ │ │ ├── comet46.c │ │ ├── comet46.h │ │ ├── config.h │ │ ├── i2c.c │ │ ├── i2c.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── default-rgbled/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── satt/ │ │ │ ├── action_pseudo_lut.c │ │ │ ├── action_pseudo_lut.h │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ ├── keymap_jis2us.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── lib/ │ │ │ ├── glcdfont.c │ │ │ ├── host_led_state_reader.c │ │ │ ├── keylogger.c │ │ │ └── modifier_state_reader.c │ │ ├── matrix.c │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── ssd1306.c │ │ └── ssd1306.h │ ├── compound/ │ │ ├── compound.c │ │ ├── compound.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── contra/ │ │ ├── config.h │ │ ├── contra.c │ │ ├── contra.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── alper/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── basic/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── bramver/ │ │ │ │ ├── README.md │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── dana/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── deastiny/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── erovia/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── losinggeneration/ │ │ │ │ ├── README.md │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── maxr1998/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── msiu/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── ryanm101/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── converter/ │ │ ├── a1200/ │ │ │ ├── a1200.c │ │ │ ├── a1200.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── miss1200/ │ │ │ │ ├── config.h │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── teensy2pp/ │ │ │ ├── config.h │ │ │ └── rules.mk │ │ ├── adb_usb/ │ │ │ ├── adb_usb.c │ │ │ ├── adb_usb.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── 13bit/ │ │ │ │ │ └── keymap.c │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── led.c │ │ │ ├── matrix.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── hp_46010a/ │ │ │ ├── config.h │ │ │ ├── hp_46010a.c │ │ │ ├── hp_46010a.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── matrix.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── ibm_terminal/ │ │ │ ├── config.h │ │ │ ├── ibm_terminal.c │ │ │ ├── ibm_terminal.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ ├── dsanchezseco/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ └── priyadi/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── led.c │ │ │ ├── matrix.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── m0110_usb/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── m0110_usb.c │ │ │ ├── m0110_usb.h │ │ │ ├── matrix.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── modelm101/ │ │ │ ├── .noci │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── iw0rm3r/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── modelm101.c │ │ │ ├── modelm101.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── modelm_ssk/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── tiltowait/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── modelm_ssk.c │ │ │ ├── modelm_ssk.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── numeric_keypad_IIe/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── newbold/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── numeric_keypad_IIe.c │ │ │ ├── numeric_keypad_IIe.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── palm_usb/ │ │ │ ├── config.h │ │ │ ├── matrix.c │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ └── stowaway/ │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── rules.mk │ │ │ └── stowaway.h │ │ ├── periboard_512/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── periboard_512.c │ │ │ ├── periboard_512.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── siemens_tastatur/ │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── halconf.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── matrix.c │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── siemens_tastatur.c │ │ │ └── siemens_tastatur.h │ │ ├── sun_usb/ │ │ │ ├── .noci │ │ │ ├── command_extra.c │ │ │ ├── config.h │ │ │ ├── led.c │ │ │ ├── matrix.c │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── type3/ │ │ │ │ ├── .noci │ │ │ │ ├── info.json │ │ │ │ ├── keymaps/ │ │ │ │ │ └── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── rules.mk │ │ │ │ └── type3.h │ │ │ └── type5/ │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── sigma/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── rules.mk │ │ │ └── type5.h │ │ ├── usb_usb/ │ │ │ ├── ble/ │ │ │ │ ├── ble.c │ │ │ │ ├── ble.h │ │ │ │ ├── config.h │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── config.h │ │ │ ├── custom_matrix.cpp │ │ │ ├── hasu/ │ │ │ │ ├── hasu.c │ │ │ │ ├── hasu.h │ │ │ │ └── rules.mk │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── ble/ │ │ │ │ │ ├── config.h │ │ │ │ │ └── keymap.c │ │ │ │ ├── chriskopher/ │ │ │ │ │ ├── combo.c │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ ├── rules.mk │ │ │ │ │ ├── shared_enum.h │ │ │ │ │ └── tap_dance.c │ │ │ │ ├── coloneljesus/ │ │ │ │ │ ├── config.h │ │ │ │ │ └── keymap.c │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ └── keymap.c │ │ │ │ └── narze/ │ │ │ │ ├── README.md │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── main.c │ │ │ ├── matrix.c │ │ │ ├── pro_micro/ │ │ │ │ ├── pro_micro.c │ │ │ │ ├── pro_micro.h │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── usb_usb.c │ │ │ └── usb_usb.h │ │ └── xt_usb/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── matrix.c │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── xt_usb.c │ │ └── xt_usb.h │ ├── cool836a/ │ │ ├── config.h │ │ ├── cool836a.c │ │ ├── cool836a.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── copenhagen_click/ │ │ └── click_pad_v1/ │ │ ├── click_pad_v1.c │ │ ├── click_pad_v1.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── coseyfannitutti/ │ │ ├── discipad/ │ │ │ ├── config.h │ │ │ ├── discipad.c │ │ │ ├── discipad.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── discipline/ │ │ │ ├── config.h │ │ │ ├── discipline.c │ │ │ ├── discipline.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── brandonschlack/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── iso/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── noroadsleft/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ ├── osx/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── mullet/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── alternate/ │ │ │ │ │ └── keymap.c │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── mullet.c │ │ │ ├── mullet.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── mulletpad/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── mulletpad.c │ │ │ ├── mulletpad.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── mysterium/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── ansi_7u/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ ├── iso/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mysterium.c │ │ │ ├── mysterium.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── romeo/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── brandonschlack/ │ │ │ │ └── keymap.c │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── romeo.c │ │ ├── romeo.h │ │ └── rules.mk │ ├── cozykeys/ │ │ ├── bloomer/ │ │ │ ├── bloomer.c │ │ │ ├── bloomer.h │ │ │ ├── config.h │ │ │ ├── readme.md │ │ │ ├── v2/ │ │ │ │ ├── config.h │ │ │ │ ├── info.json │ │ │ │ ├── keymaps/ │ │ │ │ │ └── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── readme.md │ │ │ │ ├── rules.mk │ │ │ │ ├── v2.c │ │ │ │ └── v2.h │ │ │ └── v3/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── v3.c │ │ │ └── v3.h │ │ └── speedo/ │ │ ├── readme.md │ │ ├── speedo.c │ │ ├── speedo.h │ │ ├── v2/ │ │ │ ├── .noci │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── rules.mk │ │ │ ├── v2.c │ │ │ └── v2.h │ │ └── v3/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── rules.mk │ │ ├── v3.c │ │ └── v3.h │ ├── craftwalk/ │ │ ├── config.h │ │ ├── craftwalk.c │ │ ├── craftwalk.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── crawlpad/ │ │ ├── config.h │ │ ├── crawlpad.c │ │ ├── crawlpad.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── crazy_keyboard_68/ │ │ ├── config.h │ │ ├── crazy_keyboard_68.c │ │ ├── crazy_keyboard_68.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── crbn/ │ │ ├── config.h │ │ ├── crbn.c │ │ ├── crbn.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── crin/ │ │ ├── config.h │ │ ├── crin.c │ │ ├── crin.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── crkbd/ │ │ ├── .noci │ │ ├── config.h │ │ ├── crkbd.c │ │ ├── crkbd.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── armand1m/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── curry/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── davidrambo/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── devdev/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── dsanchezseco/ │ │ │ │ ├── README.md │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── logo_reader.c │ │ │ │ └── rules.mk │ │ │ ├── edvorakjp/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── oled.c │ │ │ │ ├── oled.h │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── gotham/ │ │ │ │ ├── README.md │ │ │ │ ├── config.h │ │ │ │ ├── glcdfont.c │ │ │ │ ├── keycodes.h │ │ │ │ ├── keymap.c │ │ │ │ ├── oled.c │ │ │ │ ├── rgb.c │ │ │ │ └── rules.mk │ │ │ ├── hvp/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── jarred/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── kidbrazil/ │ │ │ │ ├── README.md │ │ │ │ ├── config.h │ │ │ │ ├── enums.h │ │ │ │ ├── glcdfont.c │ │ │ │ ├── keymap.c │ │ │ │ ├── kidbrazil.json │ │ │ │ ├── layer.c │ │ │ │ ├── layer.h │ │ │ │ ├── logo_reader.c │ │ │ │ └── rules.mk │ │ │ ├── madhatter/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcrown/ │ │ │ │ ├── config.h │ │ │ │ ├── glcdfont.c │ │ │ │ ├── keymap.c │ │ │ │ ├── mcrown.h │ │ │ │ ├── oled.c │ │ │ │ ├── oled.h │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── ninjonas/ │ │ │ │ ├── README.md │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── oled_sample/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── oo/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── rarick/ │ │ │ │ ├── config.h │ │ │ │ ├── glcdfont.c │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── rjhilgefort/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── rpbaptist/ │ │ │ │ ├── config.h │ │ │ │ ├── glcdfont.c │ │ │ │ ├── glcdfont_godspeed.c │ │ │ │ ├── glcdfont_laser.c │ │ │ │ ├── glcdfont_pulse.c │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── rs/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── oled.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── snowe/ │ │ │ │ ├── config.h │ │ │ │ ├── keycode_aliases.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── soundmonster/ │ │ │ │ ├── README.md │ │ │ │ ├── config.h │ │ │ │ ├── glcdfont.c │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── sulrich/ │ │ │ │ ├── README.md │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── thumb_ctrl/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── tominabox1/ │ │ │ │ └── keymap.c │ │ │ ├── vayashiko/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── via/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── vlukash_trackpad_left/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── vlukash_trackpad_right/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ ├── rules.mk │ │ │ │ ├── trackpad.c │ │ │ │ └── trackpad.h │ │ │ ├── vxid/ │ │ │ │ ├── README.md │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ └── xyverz/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── lib/ │ │ │ ├── glcdfont.c │ │ │ ├── host_led_state_reader.c │ │ │ ├── i2c.c │ │ │ ├── i2c.h │ │ │ ├── keylogger.c │ │ │ ├── layer_state_reader.c │ │ │ ├── logo_reader.c │ │ │ ├── mode_icon_reader.c │ │ │ ├── rgb_state_reader.c │ │ │ └── timelogger.c │ │ ├── post_config.h │ │ ├── readme.md │ │ ├── rev1/ │ │ │ ├── common/ │ │ │ │ ├── .noci │ │ │ │ └── rules.mk │ │ │ ├── config.h │ │ │ ├── legacy/ │ │ │ │ ├── .noci │ │ │ │ └── rules.mk │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ └── rules.mk │ ├── crkbd_ecwl/ │ │ ├── bmp/ │ │ │ ├── bmp.c │ │ │ ├── config.h │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── no_msc/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── rules.mk │ │ ├── config.h │ │ ├── crkbd_ecwl.c │ │ ├── crkbd_ecwl.h │ │ ├── info.json │ │ ├── ld/ │ │ │ └── nrf52840_ao.ld │ │ ├── readme.md │ │ └── rules.mk │ ├── cu24/ │ │ ├── config.h │ │ ├── cu24.c │ │ ├── cu24.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── cu75/ │ │ ├── .noci │ │ ├── config.h │ │ ├── cu75.c │ │ ├── cu75.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ └── iso/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── cu80/ │ │ ├── config.h │ │ ├── cu80.c │ │ ├── cu80.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── custommk/ │ │ └── genesis/ │ │ ├── config.h │ │ ├── readme.md │ │ ├── rev1/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── numpad/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rev1.c │ │ │ ├── rev1.h │ │ │ └── rules.mk │ │ ├── rev2/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── numpad/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rev2.c │ │ │ ├── rev2.h │ │ │ └── rules.mk │ │ └── rules.mk │ ├── cutie_club/ │ │ ├── borsdorf/ │ │ │ ├── borsdorf.c │ │ │ ├── borsdorf.h │ │ │ ├── chconf.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mcuconf.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── giant_macro_pad/ │ │ │ ├── config.h │ │ │ ├── giant_macro_pad.c │ │ │ ├── giant_macro_pad.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ └── keymap.c │ │ │ │ └── via/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── wraith/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── amber/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── timer/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── wraith.c │ │ └── wraith.h │ ├── cx60/ │ │ ├── config.h │ │ ├── cx60.c │ │ ├── cx60.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ └── via_caps/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── cybergear/ │ │ └── macro25/ │ │ ├── LICENSE │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── macro25.c │ │ ├── macro25.h │ │ ├── readme.md │ │ └── rules.mk │ ├── daji/ │ │ └── seis_cinco/ │ │ ├── chconf.h │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── split_backspace/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── mcuconf.h │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── seis_cinco.c │ │ └── seis_cinco.h │ ├── db/ │ │ └── db63/ │ │ ├── config.h │ │ ├── db63.c │ │ ├── db63.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── dc01/ │ │ ├── arrow/ │ │ │ ├── arrow.c │ │ │ ├── arrow.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── matrix.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── left/ │ │ │ ├── config.h │ │ │ ├── i2c.c │ │ │ ├── i2c.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── left.c │ │ │ ├── left.h │ │ │ ├── matrix.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── numpad/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── ortho_5x4/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── matrix.c │ │ │ ├── numpad.c │ │ │ ├── numpad.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── right/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── matrix.c │ │ ├── readme.md │ │ ├── right.c │ │ ├── right.h │ │ └── rules.mk │ ├── dekunukem/ │ │ └── duckypad/ │ │ ├── chconf.h │ │ ├── config.h │ │ ├── duckypad.c │ │ ├── duckypad.h │ │ ├── halconf.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── m4cs/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ ├── rules.mk │ │ │ │ └── sysinfo.py │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── mcuconf.h │ │ ├── readme.md │ │ └── rules.mk │ ├── delikeeb/ │ │ ├── flatbread60/ │ │ │ ├── config.h │ │ │ ├── flatbread60.c │ │ │ ├── flatbread60.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── vaguettelite/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── default_625u_universal/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── noclew/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── vaguettelite.c │ │ │ └── vaguettelite.h │ │ ├── vanana/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rev1/ │ │ │ │ ├── config.h │ │ │ │ ├── rev1.c │ │ │ │ ├── rev1.h │ │ │ │ └── rules.mk │ │ │ ├── rev2/ │ │ │ │ ├── config.h │ │ │ │ ├── rev2.c │ │ │ │ ├── rev2.h │ │ │ │ └── rules.mk │ │ │ └── rules.mk │ │ ├── vaneela/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── vaneela.c │ │ │ └── vaneela.h │ │ ├── vaneelaex/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── vaneelaex.c │ │ │ └── vaneelaex.h │ │ └── waaffle/ │ │ ├── config.h │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rev3/ │ │ ├── config.h │ │ ├── elite_c/ │ │ │ └── rules.mk │ │ ├── info.json │ │ ├── pro_micro/ │ │ │ └── rules.mk │ │ ├── rev3.c │ │ ├── rev3.h │ │ └── rules.mk │ ├── delilah/ │ │ ├── config.h │ │ ├── delilah.c │ │ ├── delilah.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── deltasplit75/ │ │ ├── deltasplit75.c │ │ ├── deltasplit75.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── itsaferbie/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── mbsurfer/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── protosplit/ │ │ │ ├── config.h │ │ │ └── keymap.c │ │ ├── readme.md │ │ ├── rules.mk │ │ └── v2/ │ │ ├── config.h │ │ ├── rules.mk │ │ ├── v2.c │ │ └── v2.h │ ├── dichotomy/ │ │ ├── config.h │ │ ├── dichotomy.c │ │ ├── dichotomy.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── alairock/ │ │ │ │ └── keymap.c │ │ │ ├── beat/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── matrix.c │ │ ├── readme.md │ │ └── rules.mk │ ├── dinofizz/ │ │ └── fnrow/ │ │ └── v1/ │ │ ├── chconf.h │ │ ├── config.h │ │ ├── halconf.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── mcuconf.h │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── v1.c │ │ └── v1.h │ ├── diverge3/ │ │ ├── config.h │ │ ├── diverge3.c │ │ ├── diverge3.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── iso_uk/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ └── workman/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── divergetm2/ │ │ ├── config.h │ │ ├── divergetm2.c │ │ ├── divergetm2.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── xtonhasvim/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── dk60/ │ │ ├── config.h │ │ ├── dk60.c │ │ ├── dk60.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ └── keymap.c │ │ ├── readme.md │ │ └── rules.mk │ ├── dm9records/ │ │ ├── ergoinu/ │ │ │ ├── .noci │ │ │ ├── config.h │ │ │ ├── ergoinu.c │ │ │ ├── ergoinu.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ └── default_jis/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── matrix.c │ │ │ ├── readme.md │ │ │ ├── rules.mk │ │ │ ├── serial.c │ │ │ ├── serial.h │ │ │ ├── serial_config.h │ │ │ ├── split_util.c │ │ │ └── split_util.h │ │ ├── plaid/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── brickbots/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── gipsy-king/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── stephen-huan/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── thehalfdeafchef/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── plaid.c │ │ │ ├── plaid.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── tartan/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── tartan.c │ │ └── tartan.h │ ├── dmqdesign/ │ │ └── spin/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── codecoffeecode/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── encoderlayers/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── gorbachev/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── spidey3_pad/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── spin.c │ │ └── spin.h │ ├── do60/ │ │ ├── config.h │ │ ├── do60.c │ │ ├── do60.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── crd/ │ │ │ │ └── keymap.c │ │ │ ├── default/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── test/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── donutcables/ │ │ ├── budget96/ │ │ │ ├── budget96.c │ │ │ ├── budget96.h │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── donut/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ ├── readme.md │ │ │ │ │ └── rules.mk │ │ │ │ └── via/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── scrabblepad/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── random/ │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rules.mk │ │ ├── scrabblepad.c │ │ └── scrabblepad.h │ ├── doodboard/ │ │ ├── duckboard/ │ │ │ ├── config.h │ │ │ ├── duckboard.c │ │ │ ├── duckboard.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ └── duckboard_r2/ │ │ ├── config.h │ │ ├── duckboard_r2.c │ │ ├── duckboard_r2.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── doppelganger/ │ │ ├── config.h │ │ ├── doppelganger.c │ │ ├── doppelganger.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ └── default/ │ │ │ ├── keymap.c │ │ │ └── readme.md │ │ ├── readme.md │ │ └── rules.mk │ ├── doro67/ │ │ ├── multi/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── default_iso/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── default_multi/ │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ ├── konstantin/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── rules.mk │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── multi.c │ │ │ ├── multi.h │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── regular/ │ │ │ ├── config.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ ├── default/ │ │ │ │ │ ├── config.h │ │ │ │ │ ├── keymap.c │ │ │ │ │ └── readme.md │ │ │ │ └── via/ │ │ │ │ ├── keymap.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ ├── readme.md │ │ │ ├── regular.c │ │ │ ├── regular.h │ │ │ └── rules.mk │ │ └── rgb/ │ │ ├── config.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ ├── readme.md │ │ │ └── rules.mk │ │ ├── readme.md │ │ ├── rgb.c │ │ ├── rgb.h │ │ └── rules.mk │ ├── dozen0/ │ │ ├── config.h │ │ ├── dozen0.c │ │ ├── dozen0.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ ├── config.h │ │ │ │ ├── keymap.c │ │ │ │ └── readme.md │ │ │ ├── f12/ │ │ │ │ ├── config.h │ │ │ │ └── keymap.c │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── dp60/ │ │ ├── config.h │ │ ├── dp60.c │ │ ├── dp60.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── allleds/ │ │ │ │ ├── keymap.c │ │ │ │ └── rules.mk │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ ├── indicator/ │ │ │ │ ├── config.h │ │ │ │ ├── indicator.c │ │ │ │ ├── keymap.c │ │ │ │ ├── led_driver.c │ │ │ │ ├── readme.md │ │ │ │ └── rules.mk │ │ │ └── via/ │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── matrix.c │ │ ├── readme.md │ │ └── rules.mk │ ├── draculad/ │ │ ├── config.h │ │ ├── draculad.c │ │ ├── draculad.h │ │ ├── info.json │ │ ├── keymaps/ │ │ │ ├── default/ │ │ │ │ └── keymap.c │ │ │ └── pimoroni/ │ │ │ ├── config.h │ │ │ ├── keymap.c │ │ │ └── rules.mk │ │ ├── readme.md │ │ └── rules.mk │ ├── draytronics/ │ │ ├── daisy/ │ │ │ ├── config.h │ │ │ ├── daisy.c │ │ │ ├── daisy.h │ │ │ ├── info.json │ │ │ ├── keymaps/ │ │ │ │ └── default/ │ │ │ │ └── keymap.c │ │
Showing preview only (2,042K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (22688 symbols across 4775 files)
FILE: data/templates/base/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
type custom_keycodes (line 25) | enum custom_keycodes {
function process_record_user (line 42) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: docs/sw.js
constant RUNTIME (line 9) | const RUNTIME = 'docsify'
constant HOSTNAME_WHITELIST (line 10) | const HOSTNAME_WHITELIST = [
FILE: drivers/eeprom/eeprom_driver.c
function eeprom_read_byte (line 22) | uint8_t eeprom_read_byte(const uint8_t *addr) {
function eeprom_read_word (line 28) | uint16_t eeprom_read_word(const uint16_t *addr) {
function eeprom_read_dword (line 34) | uint32_t eeprom_read_dword(const uint32_t *addr) {
function eeprom_write_byte (line 40) | void eeprom_write_byte(uint8_t *addr, uint8_t value) { eeprom_write_bloc...
function eeprom_write_word (line 42) | void eeprom_write_word(uint16_t *addr, uint16_t value) { eeprom_write_bl...
function eeprom_write_dword (line 44) | void eeprom_write_dword(uint32_t *addr, uint32_t value) { eeprom_write_b...
function eeprom_update_block (line 46) | void eeprom_update_block(const void *buf, void *addr, size_t len) {
function eeprom_update_byte (line 54) | void eeprom_update_byte(uint8_t *addr, uint8_t value) {
function eeprom_update_word (line 61) | void eeprom_update_word(uint16_t *addr, uint16_t value) {
function eeprom_update_dword (line 68) | void eeprom_update_dword(uint32_t *addr, uint32_t value) {
FILE: drivers/eeprom/eeprom_i2c.c
function fill_target_address (line 48) | static inline void fill_target_address(uint8_t *buffer, const void *addr) {
function eeprom_driver_init (line 56) | void eeprom_driver_init(void) {
function eeprom_driver_erase (line 65) | void eeprom_driver_erase(void) {
function eeprom_read_block (line 81) | void eeprom_read_block(void *buf, const void *addr, size_t len) {
function eeprom_write_block (line 97) | void eeprom_write_block(const void *buf, void *addr, size_t len) {
FILE: drivers/eeprom/eeprom_spi.c
function spi_eeprom_start (line 55) | static bool spi_eeprom_start(void) { return spi_start(EXTERNAL_EEPROM_SP...
function spi_status_t (line 57) | static spi_status_t spi_eeprom_wait_while_busy(int timeout) {
function spi_eeprom_transmit_address (line 70) | static void spi_eeprom_transmit_address(uintptr_t addr) {
function eeprom_driver_init (line 83) | void eeprom_driver_init(void) { spi_init(); }
function eeprom_driver_erase (line 85) | void eeprom_driver_erase(void) {
function eeprom_read_block (line 101) | void eeprom_read_block(void *buf, const void *addr, size_t len) {
function eeprom_write_block (line 143) | void eeprom_write_block(const void *buf, void *addr, size_t len) {
FILE: drivers/eeprom/eeprom_transient.c
function clamp_length (line 25) | size_t clamp_length(intptr_t offset, size_t len) {
function eeprom_driver_init (line 33) | void eeprom_driver_init(void) { eeprom_driver_erase(); }
function eeprom_driver_erase (line 35) | void eeprom_driver_erase(void) { memset(transientBuffer, 0x00, TRANSIENT...
function eeprom_read_block (line 37) | void eeprom_read_block(void *buf, const void *addr, size_t len) {
function eeprom_write_block (line 46) | void eeprom_write_block(const void *buf, void *addr, size_t len) {
FILE: drivers/gpio/pca9555.c
function pca9555_init (line 35) | void pca9555_init(uint8_t slave_addr) {
function pca9555_set_config (line 48) | void pca9555_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf) {
function pca9555_set_output (line 58) | void pca9555_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf) {
function pca9555_readPins (line 68) | uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port) {
function pca9555_readAllPins (line 80) | uint16_t pca9555_readAllPins(uint8_t slave_addr) {
FILE: drivers/haptic/DRV2605L.c
function DRV_write (line 26) | void DRV_write(uint8_t drv_register, uint8_t settings) {
function DRV_read (line 32) | uint8_t DRV_read(uint8_t regaddress) {
function DRV_init (line 38) | void DRV_init(void) {
function DRV_rtp_init (line 107) | void DRV_rtp_init(void) {
function DRV_amplitude (line 114) | void DRV_amplitude(uint8_t amplitude) { DRV_write(DRV_RTP_INPUT, amplitu...
function DRV_pulse (line 116) | void DRV_pulse(uint8_t sequence) {
FILE: drivers/haptic/DRV2605L.h
type DRV_EFFECT (line 177) | typedef enum DRV_EFFECT {
type DRVREG_STATUS (line 307) | typedef union DRVREG_STATUS { /* register 0x00 */
type DRVREG_MODE (line 324) | typedef union DRVREG_MODE { /* register 0x01 */
type DRVREG_WAIT (line 333) | typedef union DRVREG_WAIT {
type DRVREG_FBR (line 341) | typedef union DRVREG_FBR { /* register 0x1A */
type DRVREG_CTRL1 (line 351) | typedef union DRVREG_CTRL1 { /* register 0x1B */
type DRVREG_CTRL2 (line 361) | typedef union DRVREG_CTRL2 { /* register 0x1C */
type DRVREG_CTRL3 (line 372) | typedef union DRVREG_CTRL3 { /* register 0x1D */
type DRVREG_CTRL4 (line 385) | typedef union DRVREG_CTRL4 { /* register 0x1E */
type DRVREG_CTRL5 (line 397) | typedef union DRVREG_CTRL5 { /* register 0x1F */
FILE: drivers/haptic/solenoid.c
function solenoid_buzz_on (line 30) | void solenoid_buzz_on(void) { haptic_set_buzz(1); }
function solenoid_buzz_off (line 32) | void solenoid_buzz_off(void) { haptic_set_buzz(0); }
function solenoid_set_buzz (line 34) | void solenoid_set_buzz(int buzz) { haptic_set_buzz(buzz); }
function solenoid_set_dwell (line 36) | void solenoid_set_dwell(uint8_t dwell) { solenoid_dwell = dwell; }
function solenoid_stop (line 38) | void solenoid_stop(void) {
function solenoid_fire (line 44) | void solenoid_fire(void) {
function solenoid_check (line 54) | void solenoid_check(void) {
function solenoid_setup (line 83) | void solenoid_setup(void) {
function solenoid_shutdown (line 88) | void solenoid_shutdown(void) { writePinLow(SOLENOID_PIN); }
FILE: drivers/lcd/st7565.c
function InvertCharacter (line 86) | static void InvertCharacter(uint8_t *cursor) {
function st7565_init (line 94) | bool st7565_init(display_rotation_t rotation) {
function display_rotation_t (line 141) | __attribute__((weak)) display_rotation_t st7565_init_user(display_rotati...
function st7565_clear (line 143) | void st7565_clear(void) {
function crot (line 149) | uint8_t crot(uint8_t a, int8_t n) {
function st7565_render (line 155) | void st7565_render(void) {
function st7565_set_cursor (line 195) | void st7565_set_cursor(uint8_t col, uint8_t line) {
function st7565_advance_page (line 206) | void st7565_advance_page(bool clearPageRemainder) {
function st7565_advance_char (line 227) | void st7565_advance_char(void) {
function st7565_write_char (line 246) | void st7565_write_char(const char data, bool invert) {
function st7565_write (line 291) | void st7565_write(const char *data, bool invert) {
function st7565_write_ln (line 299) | void st7565_write_ln(const char *data, bool invert) {
function st7565_pan (line 304) | void st7565_pan(bool left) {
function display_buffer_reader_t (line 322) | display_buffer_reader_t st7565_read_raw(uint16_t start_index) {
function st7565_write_raw_byte (line 330) | void st7565_write_raw_byte(const char data, uint16_t index) {
function st7565_write_raw (line 337) | void st7565_write_raw(const char *data, uint16_t size) {
function st7565_write_pixel (line 348) | void st7565_write_pixel(uint8_t x, uint8_t y, bool on) {
function st7565_write_P (line 369) | void st7565_write_P(const char *data, bool invert) {
function st7565_write_ln_P (line 377) | void st7565_write_ln_P(const char *data, bool invert) {
function st7565_write_raw_P (line 382) | void st7565_write_raw_P(const char *data, uint16_t size) {
function st7565_on (line 394) | bool st7565_on(void) {
function st7565_on_user (line 413) | __attribute__((weak)) void st7565_on_user(void) {}
function st7565_off (line 415) | bool st7565_off(void) {
function st7565_off_user (line 430) | __attribute__((weak)) void st7565_off_user(void) {}
function st7565_is_on (line 432) | bool st7565_is_on(void) { return st7565_active; }
function st7565_invert (line 434) | bool st7565_invert(bool invert) {
function st7565_max_chars (line 448) | uint8_t st7565_max_chars(void) { return ST7565_DISPLAY_WIDTH / ST7565_FO...
function st7565_max_lines (line 450) | uint8_t st7565_max_lines(void) { return ST7565_DISPLAY_HEIGHT / ST7565_F...
function st7565_task (line 452) | void st7565_task(void) {
function st7565_task_user (line 479) | __attribute__((weak)) void st7565_task_user(void) {}
function st7565_reset (line 481) | void st7565_reset(void) {
function spi_status_t (line 488) | spi_status_t st7565_send_cmd(uint8_t cmd) {
function spi_status_t (line 493) | spi_status_t st7565_send_data(uint8_t *data, uint16_t length) {
FILE: drivers/lcd/st7565.h
type display_buffer_reader_t (line 91) | typedef struct __attribute__((__packed__)) {
type display_rotation_t (line 97) | typedef enum { DISPLAY_ROTATION_0, DISPLAY_ROTATION_180 } display_rotati...
FILE: drivers/led/apa102.c
function apa102_setleds (line 64) | void apa102_setleds(LED_TYPE *start_led, uint16_t num_leds) {
function rgblight_call_driver (line 75) | void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds) { apa10...
function apa102_init (line 77) | void static apa102_init(void) {
function apa102_set_brightness (line 85) | void apa102_set_brightness(uint8_t brightness) {
function apa102_send_frame (line 95) | void static apa102_send_frame(uint8_t red, uint8_t green, uint8_t blue, ...
function apa102_start_frame (line 102) | void static apa102_start_frame(void) {
function apa102_end_frame (line 109) | void static apa102_end_frame(uint16_t num_leds) {
function apa102_send_byte (line 142) | void static apa102_send_byte(uint8_t byte) {
FILE: drivers/led/aw20216.c
function AW20216_write (line 63) | bool AW20216_write(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t* dat...
function AW20216_write_register (line 88) | static inline bool AW20216_write_register(pin_t cs_pin, uint8_t page, ui...
function AW20216_init_scaling (line 93) | static void AW20216_init_scaling(pin_t cs_pin) {
function AW20216_init_current_limit (line 100) | static inline void AW20216_init_current_limit(pin_t cs_pin) {
function AW20216_soft_enable (line 105) | static inline void AW20216_soft_enable(pin_t cs_pin) {
function AW20216_init (line 110) | void AW20216_init(pin_t cs_pin, pin_t en_pin) {
function AW20216_set_color (line 121) | void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t bl...
function AW20216_set_color_all (line 130) | void AW20216_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
function AW20216_update_pwm_buffers (line 136) | void AW20216_update_pwm_buffers(pin_t cs_pin, uint8_t index) {
FILE: drivers/led/aw20216.h
type aw_led (line 24) | typedef struct aw_led {
FILE: drivers/led/issi/is31fl3218.c
function IS31FL3218_write_register (line 40) | void IS31FL3218_write_register(uint8_t reg, uint8_t data) {
function IS31FL3218_write_pwm_buffer (line 46) | void IS31FL3218_write_pwm_buffer(uint8_t *pwm_buffer) {
function IS31FL3218_init (line 55) | void IS31FL3218_init(void) {
function IS31FL3218_set_color (line 76) | void IS31FL3218_set_color(int index, uint8_t red, uint8_t green, uint8_t...
function IS31FL3218_set_color_all (line 83) | void IS31FL3218_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
function IS31FL3218_update_pwm_buffers (line 89) | void IS31FL3218_update_pwm_buffers(void) {
FILE: drivers/led/issi/is31fl3731-simple.c
function IS31FL3731_write_register (line 94) | void IS31FL3731_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
function IS31FL3731_write_pwm_buffer (line 109) | void IS31FL3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
function IS31FL3731_init (line 136) | void IS31FL3731_init(uint8_t addr) {
function IS31FL3731_set_value (line 188) | void IS31FL3731_set_value(int index, uint8_t value) {
function IS31FL3731_set_value_all (line 198) | void IS31FL3731_set_value_all(uint8_t value) {
function IS31FL3731_set_led_control_register (line 204) | void IS31FL3731_set_led_control_register(uint8_t index, bool value) {
function IS31FL3731_update_pwm_buffers (line 219) | void IS31FL3731_update_pwm_buffers(uint8_t addr, uint8_t index) {
function IS31FL3731_update_led_control_registers (line 226) | void IS31FL3731_update_led_control_registers(uint8_t addr, uint8_t index) {
FILE: drivers/led/issi/is31fl3731-simple.h
type is31_led (line 25) | typedef struct is31_led {
FILE: drivers/led/issi/is31fl3731.c
function IS31FL3731_write_register (line 84) | void IS31FL3731_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
function IS31FL3731_write_pwm_buffer (line 97) | void IS31FL3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
function IS31FL3731_init (line 124) | void IS31FL3731_init(uint8_t addr) {
function IS31FL3731_set_color (line 176) | void IS31FL3731_set_color(int index, uint8_t red, uint8_t green, uint8_t...
function IS31FL3731_set_color_all (line 188) | void IS31FL3731_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
function IS31FL3731_set_led_control_register (line 194) | void IS31FL3731_set_led_control_register(uint8_t index, bool red, bool g...
function IS31FL3731_update_pwm_buffers (line 223) | void IS31FL3731_update_pwm_buffers(uint8_t addr, uint8_t index) {
function IS31FL3731_update_led_control_registers (line 230) | void IS31FL3731_update_led_control_registers(uint8_t addr, uint8_t index) {
FILE: drivers/led/issi/is31fl3731.h
type is31_led (line 24) | typedef struct is31_led {
FILE: drivers/led/issi/is31fl3733.c
function IS31FL3733_write_register (line 74) | bool IS31FL3733_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
function IS31FL3733_write_pwm_buffer (line 93) | bool IS31FL3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
function IS31FL3733_init (line 124) | void IS31FL3733_init(uint8_t addr, uint8_t sync) {
function IS31FL3733_set_color (line 166) | void IS31FL3733_set_color(int index, uint8_t red, uint8_t green, uint8_t...
function IS31FL3733_set_color_all (line 177) | void IS31FL3733_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
function IS31FL3733_set_led_control_register (line 183) | void IS31FL3733_set_led_control_register(uint8_t index, bool red, bool g...
function IS31FL3733_update_pwm_buffers (line 212) | void IS31FL3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
function IS31FL3733_update_led_control_registers (line 227) | void IS31FL3733_update_led_control_registers(uint8_t addr, uint8_t index) {
FILE: drivers/led/issi/is31fl3733.h
type is31_led (line 25) | typedef struct is31_led {
FILE: drivers/led/issi/is31fl3736.c
function IS31FL3736_write_register (line 72) | void IS31FL3736_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
function IS31FL3736_write_pwm_buffer (line 85) | void IS31FL3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
function IS31FL3736_init (line 111) | void IS31FL3736_init(uint8_t addr) {
function IS31FL3736_set_color (line 152) | void IS31FL3736_set_color(int index, uint8_t red, uint8_t green, uint8_t...
function IS31FL3736_set_color_all (line 163) | void IS31FL3736_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
function IS31FL3736_set_led_control_register (line 169) | void IS31FL3736_set_led_control_register(uint8_t index, bool red, bool g...
function IS31FL3736_mono_set_brightness (line 212) | void IS31FL3736_mono_set_brightness(int index, uint8_t value) {
function IS31FL3736_mono_set_brightness_all (line 222) | void IS31FL3736_mono_set_brightness_all(uint8_t value) {
function IS31FL3736_mono_set_led_control_register (line 228) | void IS31FL3736_mono_set_led_control_register(uint8_t index, bool enable...
function IS31FL3736_update_pwm_buffers (line 246) | void IS31FL3736_update_pwm_buffers(uint8_t addr1, uint8_t addr2) {
function IS31FL3736_update_led_control_registers (line 258) | void IS31FL3736_update_led_control_registers(uint8_t addr1, uint8_t addr...
FILE: drivers/led/issi/is31fl3736.h
type is31_led (line 34) | typedef struct is31_led {
FILE: drivers/led/issi/is31fl3737.c
function IS31FL3737_write_register (line 75) | void IS31FL3737_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
function IS31FL3737_write_pwm_buffer (line 88) | void IS31FL3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
function IS31FL3737_init (line 114) | void IS31FL3737_init(uint8_t addr) {
function IS31FL3737_set_color (line 155) | void IS31FL3737_set_color(int index, uint8_t red, uint8_t green, uint8_t...
function IS31FL3737_set_color_all (line 166) | void IS31FL3737_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
function IS31FL3737_set_led_control_register (line 172) | void IS31FL3737_set_led_control_register(uint8_t index, bool red, bool g...
function IS31FL3737_update_pwm_buffers (line 201) | void IS31FL3737_update_pwm_buffers(uint8_t addr, uint8_t index) {
function IS31FL3737_update_led_control_registers (line 212) | void IS31FL3737_update_led_control_registers(uint8_t addr, uint8_t index) {
FILE: drivers/led/issi/is31fl3737.h
type is31_led (line 25) | typedef struct is31_led {
FILE: drivers/led/issi/is31fl3741.c
function IS31FL3741_write_register (line 81) | void IS31FL3741_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
function IS31FL3741_write_pwm_buffer (line 94) | bool IS31FL3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
function IS31FL3741_init (line 141) | void IS31FL3741_init(uint8_t addr) {
function IS31FL3741_set_color (line 168) | void IS31FL3741_set_color(int index, uint8_t red, uint8_t green, uint8_t...
function IS31FL3741_set_color_all (line 179) | void IS31FL3741_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
function IS31FL3741_set_led_control_register (line 185) | void IS31FL3741_set_led_control_register(uint8_t index, bool red, bool g...
function IS31FL3741_update_pwm_buffers (line 209) | void IS31FL3741_update_pwm_buffers(uint8_t addr1, uint8_t addr2) {
function IS31FL3741_set_pwm_buffer (line 217) | void IS31FL3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_...
function IS31FL3741_update_led_control_registers (line 225) | void IS31FL3741_update_led_control_registers(uint8_t addr, uint8_t index) {
function IS31FL3741_set_scaling_registers (line 249) | void IS31FL3741_set_scaling_registers(const is31_led *pled, uint8_t red,...
FILE: drivers/led/issi/is31fl3741.h
type is31_led (line 26) | typedef struct is31_led {
FILE: drivers/nrf52/ws2812.c
function ws2812_setleds (line 20) | void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds) {
FILE: drivers/nrf52/ws2812.h
function ws2812_setleds_pin (line 48) | static inline void ws2812_setleds_pin (LED_TYPE *ledarray, uint16_t numb...
FILE: drivers/oled/oled_driver.h
type oled_buffer_reader_t (line 173) | typedef struct __attribute__((__packed__)) {
type oled_rotation_t (line 179) | typedef enum {
FILE: drivers/oled/ssd1306_sh1106.c
function i2c_status_t (line 140) | static i2c_status_t i2c_transmit_P(uint8_t address, const uint8_t *data,...
function InvertCharacter (line 155) | static void InvertCharacter(uint8_t *cursor) {
function oled_init (line 163) | bool oled_init(oled_rotation_t rotation) {
function oled_rotation_t (line 235) | __attribute__((weak)) oled_rotation_t oled_init_user(oled_rotation_t rot...
function oled_clear (line 237) | void oled_clear(void) {
function calc_bounds (line 243) | static void calc_bounds(uint8_t update_start, uint8_t *cmd_array) {
function calc_bounds_90 (line 265) | static void calc_bounds_90(uint8_t update_start, uint8_t *cmd_array) {
function crot (line 273) | uint8_t crot(uint8_t a, int8_t n) {
function rotate_90 (line 279) | static void rotate_90(const uint8_t *src, uint8_t *dest) {
function oled_render (line 288) | void oled_render(void) {
function oled_set_cursor (line 350) | void oled_set_cursor(uint8_t col, uint8_t line) {
function oled_advance_page (line 361) | void oled_advance_page(bool clearPageRemainder) {
function oled_advance_char (line 382) | void oled_advance_char(void) {
function oled_write_char (line 401) | void oled_write_char(const char data, bool invert) {
function oled_write (line 446) | void oled_write(const char *data, bool invert) {
function oled_write_ln (line 454) | void oled_write_ln(const char *data, bool invert) {
function oled_pan (line 459) | void oled_pan(bool left) {
function oled_buffer_reader_t (line 477) | oled_buffer_reader_t oled_read_raw(uint16_t start_index) {
function oled_write_raw_byte (line 485) | void oled_write_raw_byte(const char data, uint16_t index) {
function oled_write_raw (line 492) | void oled_write_raw(const char *data, uint16_t size) {
function oled_write_pixel (line 503) | void oled_write_pixel(uint8_t x, uint8_t y, bool on) {
function oled_write_P (line 524) | void oled_write_P(const char *data, bool invert) {
function oled_write_ln_P (line 532) | void oled_write_ln_P(const char *data, bool invert) {
function oled_write_raw_P (line 537) | void oled_write_raw_P(const char *data, uint16_t size) {
function is_oled_on (line 597) | bool is_oled_on(void) { return oled_active; }
function oled_set_brightness (line 599) | uint8_t oled_set_brightness(uint8_t level) {
function oled_get_brightness (line 615) | uint8_t oled_get_brightness(void) { return oled_brightness; }
function oled_scroll_set_area (line 620) | void oled_scroll_set_area(uint8_t start_line, uint8_t end_line) {
function oled_scroll_set_speed (line 625) | void oled_scroll_set_speed(uint8_t speed) {
function oled_scroll_right (line 642) | bool oled_scroll_right(void) {
function oled_scroll_left (line 660) | bool oled_scroll_left(void) {
function oled_scroll_off (line 678) | bool oled_scroll_off(void) {
function is_oled_scrolling (line 695) | bool is_oled_scrolling(void) { return oled_scrolling; }
function oled_invert (line 697) | bool oled_invert(bool invert) {
function oled_max_chars (line 721) | uint8_t oled_max_chars(void) {
function oled_max_lines (line 728) | uint8_t oled_max_lines(void) {
function oled_task (line 735) | void oled_task(void) {
function oled_task_user (line 779) | __attribute__((weak)) void oled_task_user(void) {}
FILE: drivers/qwiic/micro_oled.c
function micro_oled_init (line 112) | void micro_oled_init(void) {
function send_command (line 174) | void send_command(uint8_t command) {
function send_data (line 180) | void send_data(uint8_t data) {
function set_page_address (line 189) | void set_page_address(uint8_t address) {
function set_column_address (line 197) | void set_column_address(uint8_t address) {
function clear_screen (line 205) | void clear_screen(void) {
function clear_buffer (line 220) | void clear_buffer(void) {
function invert_screen (line 228) | void invert_screen(bool invert) {
function set_contrast (line 239) | void set_contrast(uint8_t contrast) {
function send_buffer (line 247) | void send_buffer(void) {
function draw_pixel (line 273) | void draw_pixel(uint8_t x, uint8_t y, uint8_t color, uint8_t mode) {
function draw_line (line 289) | void draw_line(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t c...
function draw_line_hori (line 331) | void draw_line_hori(uint8_t x, uint8_t y, uint8_t width, uint8_t color, ...
function draw_line_vert (line 336) | void draw_line_vert(uint8_t x, uint8_t y, uint8_t height, bool color, ui...
function draw_rect (line 341) | void draw_rect(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint...
function draw_rect_soft (line 360) | void draw_rect_soft(uint8_t x, uint8_t y, uint8_t width, uint8_t height,...
function draw_rect_filled (line 379) | void draw_rect_filled(uint8_t x, uint8_t y, uint8_t width, uint8_t heigh...
function draw_rect_filled_soft (line 389) | void draw_rect_filled_soft(uint8_t x, uint8_t y, uint8_t width, uint8_t ...
function draw_char (line 402) | void draw_char(uint8_t x, uint8_t y, uint8_t c, uint8_t color, uint8_t m...
function draw_string (line 471) | void draw_string(uint8_t x, uint8_t y, char* string, uint8_t color, uint...
FILE: drivers/qwiic/micro_oled.h
type commCommand_t (line 114) | typedef enum CMD {
FILE: drivers/qwiic/qwiic.c
function qwiic_init (line 18) | void qwiic_init(void) {
function qwiic_task (line 27) | void qwiic_task(void) {
FILE: drivers/sensors/adns5050.c
function print_byte (line 45) | void print_byte(uint8_t byte) { dprintf("%c%c%c%c%c%c%c%c|", (byte & 0x8...
function adns_init (line 49) | void adns_init(void) {
function adns_sync (line 58) | void adns_sync(void) {
function adns_cs_select (line 64) | void adns_cs_select(void) {
function adns_cs_deselect (line 68) | void adns_cs_deselect(void) {
function adns_serial_read (line 72) | uint8_t adns_serial_read(void) {
function adns_serial_write (line 89) | void adns_serial_write(uint8_t data) {
function adns_read_reg (line 116) | uint8_t adns_read_reg(uint8_t reg_addr) {
function adns_write_reg (line 139) | void adns_write_reg(uint8_t reg_addr, uint8_t data) {
function report_adns_t (line 146) | report_adns_t adns_read_burst(void) {
function convert_twoscomp (line 175) | int8_t convert_twoscomp(uint8_t data) {
function adns_set_cpi (line 183) | void adns_set_cpi(uint8_t cpi) {
function adns_check_signature (line 187) | bool adns_check_signature(void) {
FILE: drivers/sensors/adns5050.h
type report_adns_t (line 62) | typedef struct {
FILE: drivers/sensors/adns9800.c
function adns_spi_start (line 84) | void adns_spi_start(void){
function adns_write (line 88) | void adns_write(uint8_t reg_addr, uint8_t data){
function adns_read (line 97) | uint8_t adns_read(uint8_t reg_addr){
function adns_init (line 108) | void adns_init() {
function config_adns_t (line 163) | config_adns_t adns_get_config(void) {
function adns_set_config (line 168) | void adns_set_config(config_adns_t config) {
function convertDeltaToInt (line 173) | static int16_t convertDeltaToInt(uint8_t high, uint8_t low){
function report_adns_t (line 185) | report_adns_t adns_get_report(void) {
FILE: drivers/sensors/adns9800.h
type config_adns_t (line 21) | typedef struct {
type report_adns_t (line 26) | typedef struct {
FILE: drivers/sensors/pimoroni_trackball.c
function trackball_get_precision (line 60) | float trackball_get_precision(void) { return ((float)precision / 128); }
function trackball_set_precision (line 61) | void trackball_set_precision(float floatprecision) { precision = (float...
function trackball_is_scrolling (line 62) | bool trackball_is_scrolling(void) { return scrolling; }
function trackball_set_scrolling (line 63) | void trackball_set_scrolling(bool scroll) { scrolling = scroll; }
function trackball_set_rgbw (line 65) | void trackball_set_rgbw(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
function i2c_status_t (line 73) | i2c_status_t read_pimoroni_trackball(pimoroni_data* data) {
function pointing_device_init (line 81) | __attribute__((weak)) void pointing_device_init(void) {
function trackball_get_offsets (line 86) | int16_t trackball_get_offsets(uint8_t negative_dir, uint8_t positive_dir...
function trackball_adapt_values (line 99) | void trackball_adapt_values(int8_t* mouse, int16_t* offset) {
function trackball_click (line 112) | __attribute__((weak)) void trackball_click(bool pressed, report_mouse_t*...
function pointing_device_task_user (line 122) | __attribute__((weak)) bool pointing_device_task_user(pimoroni_data* trac...
function pointing_device_task (line 124) | __attribute__((weak)) void pointing_device_task() {
FILE: drivers/sensors/pimoroni_trackball.h
type pimoroni_data (line 22) | typedef struct pimoroni_data {
FILE: drivers/sensors/pmw3360.c
function print_byte (line 78) | void print_byte(uint8_t byte) { dprintf("%c%c%c%c%c%c%c%c|", (byte & 0x8...
function spi_start_adv (line 80) | bool spi_start_adv(void) {
function spi_stop_adv (line 86) | void spi_stop_adv(void) {
function spi_status_t (line 91) | spi_status_t spi_write_adv(uint8_t reg_addr, uint8_t data) {
function spi_read_adv (line 110) | uint8_t spi_read_adv(uint8_t reg_addr) {
function pmw_set_cpi (line 127) | void pmw_set_cpi(uint16_t cpi) {
function pmw_get_cpi (line 135) | uint16_t pmw_get_cpi(void) {
function pmw_spi_init (line 140) | bool pmw_spi_init(void) {
function pmw_upload_firmware (line 187) | void pmw_upload_firmware(void) {
function pmw_check_signature (line 214) | bool pmw_check_signature(void) {
function report_pmw_t (line 221) | report_pmw_t pmw_read_burst(void) {
FILE: drivers/sensors/pmw3360.h
type report_pmw_t (line 59) | typedef struct {
FILE: drivers/ugfx/gdisp/is31fl3731c/board_is31fl3731c_template.h
function GFXINLINE (line 64) | static GFXINLINE void init_board(GDisplay* g) {
function GFXINLINE (line 79) | static GFXINLINE void post_init_board(GDisplay* g) { (void)g; }
function GFXINLINE (line 81) | static GFXINLINE const uint8_t* get_led_mask(GDisplay* g) {
function GFXINLINE (line 86) | static GFXINLINE uint8_t get_led_address(GDisplay* g, uint16_t x, uint16...
function GFXINLINE (line 91) | static GFXINLINE void set_hardware_shutdown(GDisplay* g, bool shutdown) {
function GFXINLINE (line 100) | static GFXINLINE void write_data(GDisplay* g, uint8_t* data, uint16_t le...
FILE: drivers/ugfx/gdisp/is31fl3731c/gdisp_is31fl3731c.c
type PrivData (line 106) | typedef struct {
function GFXINLINE (line 120) | static GFXINLINE void write_page(GDisplay *g, uint8_t page) {
function GFXINLINE (line 127) | static GFXINLINE void write_register(GDisplay *g, uint8_t page, uint8_t ...
function GFXINLINE (line 135) | static GFXINLINE void write_ram(GDisplay *g, uint8_t page, uint16_t offs...
function LLDSPEC (line 141) | LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
function LLDSPEC (line 187) | LLDSPEC void gdisp_lld_flush(GDisplay *g) {
function LLDSPEC (line 214) | LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) {
function LLDSPEC (line 234) | LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) {
function LLDSPEC (line 253) | LLDSPEC void gdisp_lld_control(GDisplay *g) {
FILE: drivers/ugfx/gdisp/st7565/board_st7565_template.h
function GFXINLINE (line 47) | static GFXINLINE void acquire_bus(GDisplay *g) {
function GFXINLINE (line 54) | static GFXINLINE void release_bus(GDisplay *g) {
function GFXINLINE (line 61) | static GFXINLINE void init_board(GDisplay *g) {
function GFXINLINE (line 77) | static GFXINLINE void post_init_board(GDisplay *g) { (void)g; }
function GFXINLINE (line 79) | static GFXINLINE void setpin_reset(GDisplay *g, bool_t state) {
function GFXINLINE (line 84) | static GFXINLINE void write_cmd(GDisplay *g, gU8 cmd) {
function GFXINLINE (line 90) | static GFXINLINE void write_data(GDisplay *g, gU8 *data, gU16 length) {
FILE: drivers/ugfx/gdisp/st7565/gdisp_lld_ST7565.c
function LLDSPEC (line 91) | LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
function LLDSPEC (line 152) | LLDSPEC void gdisp_lld_flush(GDisplay *g) {
function LLDSPEC (line 174) | LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) {
function LLDSPEC (line 205) | LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) {
function LLDSPEC (line 232) | LLDSPEC void gdisp_lld_blit_area(GDisplay *g) {
function LLDSPEC (line 260) | LLDSPEC void gdisp_lld_control(GDisplay *g) {
FILE: drivers/usbpd.h
type usbpd_allowance_t (line 19) | typedef enum {
FILE: keyboards/0_sixty/keymaps/default/keymap.c
type zero_sixty_layers (line 19) | enum zero_sixty_layers {
function layer_state_t (line 166) | layer_state_t layer_state_set_user(layer_state_t state) {
FILE: keyboards/0_sixty/keymaps/ven0mtr0n/keymap.c
type zero_sixty_layers (line 19) | enum zero_sixty_layers {
FILE: keyboards/0_sixty/keymaps/via/keymap.c
type zero_sixty_layers (line 20) | enum zero_sixty_layers {
FILE: keyboards/0xcb/1337/1337.c
function eeconfig_init_kb (line 19) | void eeconfig_init_kb(void) {
FILE: keyboards/0xcb/1337/keymaps/conor/keymap.c
type layer_names (line 19) | enum layer_names {
function encoder_update_user (line 52) | bool encoder_update_user(uint8_t index, bool clockwise) {
function oled_rotation_t (line 82) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function render_logo (line 87) | static void render_logo(void) {
function render_logo_font (line 100) | static void render_logo_font(void) {
function render_info (line 111) | static void render_info(void) {
function render_rgbled_status (line 135) | static void render_rgbled_status(bool) {
function oled_task_user (line 171) | void oled_task_user(void) {
FILE: keyboards/0xcb/1337/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
function encoder_update_user (line 52) | bool encoder_update_user(uint8_t index, bool clockwise) {
function oled_rotation_t (line 82) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function render_logo (line 87) | static void render_logo(void) {
function render_logo_font (line 96) | static void render_logo_font(void) {
function render_info (line 102) | static void render_info(void) {
function render_rgbled_status (line 126) | static void render_rgbled_status(void) {
function oled_task_user (line 162) | void oled_task_user(void) {
FILE: keyboards/0xcb/1337/keymaps/jakob/keymap.c
type layer_names (line 19) | enum layer_names {
function encoder_update_user (line 52) | bool encoder_update_user(uint8_t index, bool clockwise) {
function oled_rotation_t (line 82) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function render_logo (line 87) | static void render_logo(void) {
function render_logo_font (line 100) | static void render_logo_font(void) {
function render_info (line 111) | static void render_info(void) {
function render_rgbled_status (line 135) | static void render_rgbled_status(bool) {
function oled_task_user (line 171) | void oled_task_user(void) {
FILE: keyboards/0xcb/1337/keymaps/via/keymap.c
type layer_names (line 19) | enum layer_names {
function encoder_update_user (line 52) | bool encoder_update_user(uint8_t index, bool clockwise) {
function oled_rotation_t (line 82) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function render_logo (line 87) | static void render_logo(void) {
function render_logo_font (line 100) | static void render_logo_font(void) {
function render_info (line 111) | static void render_info(void) {
function render_rgbled_status (line 135) | static void render_rgbled_status(void) {
function oled_task_user (line 171) | void oled_task_user(void) {
FILE: keyboards/0xcb/static/keymaps/bongocat/keymap.c
type my_keycodes (line 19) | enum my_keycodes {
type layer_names (line 22) | enum layer_names {
function process_record_user (line 61) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function layer_state_t (line 73) | layer_state_t layer_state_set_user(layer_state_t state) {
function encoder_update_user (line 79) | bool encoder_update_user(uint8_t index, bool clockwise) {
function oled_rotation_t (line 125) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function render_logo (line 129) | static void render_logo(void) {
function render_layer (line 139) | static void render_layer(void) {
function render_cat (line 224) | static void render_cat(void) {
function oled_task_user (line 265) | void oled_task_user(void) {
function eeconfig_init_kb (line 293) | void eeconfig_init_kb(void) {
FILE: keyboards/0xcb/static/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
function layer_state_t (line 58) | layer_state_t layer_state_set_user(layer_state_t state) {
function encoder_update_user (line 64) | bool encoder_update_user(uint8_t index, bool clockwise) {
function oled_rotation_t (line 98) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function render_logo (line 102) | static void render_logo(void) {
function render_layer (line 112) | static void render_layer(void) {
function oled_task_user (line 178) | void oled_task_user(void) {
FILE: keyboards/0xcb/static/keymaps/via/keymap.c
type layer_names (line 19) | enum layer_names {
function layer_state_t (line 58) | layer_state_t layer_state_set_user(layer_state_t state) {
function encoder_update_user (line 64) | bool encoder_update_user(uint8_t index, bool clockwise) {
function oled_rotation_t (line 98) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function render_logo (line 102) | static void render_logo(void) {
function render_layer (line 112) | static void render_layer(void) {
function oled_task_user (line 178) | void oled_task_user(void) {
function eeconfig_init_kb (line 193) | void eeconfig_init_kb(void) {
FILE: keyboards/10bleoledhub/keymaps/default/keymap.c
function render_logo (line 52) | static void render_logo(void) {
function oled_task_user (line 58) | void oled_task_user(void) { render_logo(); }
function encoder_update_user (line 61) | bool encoder_update_user(uint8_t index, bool clockwise) {
function matrix_init_user (line 73) | void matrix_init_user(void) { render_logo(); }
FILE: keyboards/10bleoledhub/keymaps/via/keymap.c
function render_logo (line 52) | static void render_logo(void) {
function oled_task_user (line 58) | void oled_task_user(void) { render_logo(); }
function encoder_update_user (line 61) | bool encoder_update_user(uint8_t index, bool clockwise) {
function matrix_init_user (line 73) | void matrix_init_user(void) { render_logo(); }
FILE: keyboards/1upkeyboards/1up60rgb/keymaps/default/keymap.c
function led_set_user (line 21) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/1upkeyboards/1up60rgb/keymaps/iso/keymap.c
function led_set_user (line 21) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/1upkeyboards/1up60rgb/keymaps/raffle/keymap.c
type layers (line 11) | enum layers {
function layer_state_t (line 70) | layer_state_t layer_state_set_user(layer_state_t state) {
function matrix_scan_user (line 76) | void matrix_scan_user(void) {
function led_set_user (line 80) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/1upkeyboards/1up60rgb/keymaps/tsangan/keymap.c
function led_set_user (line 21) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/1upkeyboards/super16/keymaps/15game/keymap.c
type my_keycodes (line 17) | enum my_keycodes {
function refresh_leds (line 85) | void refresh_leds(void) {
function keyboard_post_init_user (line 92) | void keyboard_post_init_user(void) {
function process_record_user (line 97) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/1upkeyboards/super16/keymaps/ahk_companion/keymap.c
function process_record_user (line 84) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function post_process_record_user (line 88) | void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
function layer_state_t (line 104) | layer_state_t layer_state_set_user(layer_state_t state) {
function keyboard_post_init_user (line 113) | void keyboard_post_init_user(void) {
function matrix_scan_user (line 119) | void matrix_scan_user(void) {
function eeconfig_init_user (line 132) | void eeconfig_init_user(void) {
FILE: keyboards/1upkeyboards/super16/keymaps/nblyumberg/keymap.c
type my_keycodes (line 9) | enum my_keycodes {
function process_record_user (line 56) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function keyboard_post_init_user (line 85) | void keyboard_post_init_user(void) {
function layer_state_t (line 90) | layer_state_t layer_state_set_user(layer_state_t state) {
FILE: keyboards/1upkeyboards/sweet16/keymaps/default/keymap.c
type custom_keycodes (line 3) | enum custom_keycodes {
function process_record_user (line 16) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function encoder_update_user (line 30) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/1upkeyboards/sweet16/keymaps/dlaroe/keymap.c
type layers (line 3) | enum layers {
FILE: keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/keymap.c
type custom_keycodes (line 10) | enum custom_keycodes {
function process_record_user (line 91) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function tdexample1 (line 158) | void tdexample1(qk_tap_dance_state_t *state, void *user_data) {
function tdexample2 (line 164) | void tdexample2(qk_tap_dance_state_t *state, void *user_data) {
function tdexample3 (line 170) | void tdexample3(qk_tap_dance_state_t *state, void *user_data) {
function tdexample4 (line 176) | void tdexample4(qk_tap_dance_state_t *state, void *user_data) {
function matrix_scan_user (line 191) | void matrix_scan_user(void) {
function layer_state_t (line 198) | layer_state_t layer_state_set_user(layer_state_t state) {
FILE: keyboards/1upkeyboards/sweet16/keymaps/sebas/keymap.c
type layers (line 4) | enum layers {
FILE: keyboards/1upkeyboards/sweet16/keymaps/switchtester/keymap.c
type mechswitch (line 13) | struct mechswitch
function process_record_user (line 20) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.c
type mechswitch (line 70) | struct mechswitch
type mechswitch (line 74) | struct mechswitch
type mechswitch (line 78) | struct mechswitch
function switch_name (line 82) | void switch_name(struct mechswitch ms, char *buf) {
function bitfieldtoi (line 97) | int bitfieldtoi(struct mechswitch ms) {
FILE: keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.h
type mechswitch (line 3) | struct mechswitch
type mechswitch (line 185) | struct mechswitch
type mechswitch (line 186) | struct mechswitch
type mechswitch (line 187) | struct mechswitch
type mechswitch (line 188) | struct mechswitch
type mechswitch (line 189) | struct mechswitch
FILE: keyboards/1upkeyboards/sweet16/v2/promicro/promicro.c
function encoder_update_kb (line 5) | bool encoder_update_kb(uint8_t index, bool clockwise) {
FILE: keyboards/2key2crawl/keymaps/default/keymap.c
function matrix_init_user (line 11) | void matrix_init_user(void) {
function encoder_update_user (line 19) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/2key2crawl/keymaps/tabs/keymap.c
function matrix_init_user (line 11) | void matrix_init_user(void) {
function encoder_update_user (line 17) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/2key2crawl/keymaps/vol/keymap.c
function matrix_init_user (line 11) | void matrix_init_user(void) {
function encoder_update_user (line 17) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/3w6/keymaps/default/keymap.c
type layers (line 19) | enum layers
FILE: keyboards/3w6/rev1/matrix.c
function init_tca9555 (line 50) | uint8_t init_tca9555(void) {
function matrix_init_custom (line 86) | void matrix_init_custom(void) {
function matrix_power_up (line 100) | void matrix_power_up(void) {
function store_matrix_row (line 114) | static inline bool store_matrix_row(matrix_row_t current_matrix[], uint8...
function matrix_scan_custom (line 123) | bool matrix_scan_custom(matrix_row_t current_matrix[]) {
function init_cols (line 158) | static void init_cols(void) {
function matrix_row_t (line 171) | static matrix_row_t read_cols(uint8_t row) {
function unselect_rows (line 215) | static void unselect_rows(void) {
function select_row (line 229) | static void select_row(uint8_t row) {
FILE: keyboards/3w6/rev2/keymaps/default_pimoroni/keymap.c
type layers (line 20) | enum layers
FILE: keyboards/3w6/rev2/keymaps/default_pimoroni/pimoroni_trackball.c
function trackball_set_rgbw (line 39) | void trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_...
function mouse_offset (line 44) | int16_t mouse_offset(uint8_t positive, uint8_t negative, int16_t scale) {
function update_member (line 50) | void update_member(int8_t* member, int16_t* offset) {
function trackball_check_click (line 63) | __attribute__((weak)) void trackball_check_click(bool pressed, report_mo...
function process_record_kb (line 71) | bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
function trackball_register_button (line 100) | void trackball_register_button(bool pressed, enum mouse_buttons button) {
function trackball_get_precision (line 110) | float trackball_get_precision(void) { return precisionSpeed; }
function trackball_set_precision (line 111) | void trackball_set_precision(float precision) { precisionSpeed = precis...
function trackball_is_scrolling (line 112) | bool trackball_is_scrolling(void) { return scrolling; }
function trackball_set_scrolling (line 113) | void trackball_set_scrolling(bool scroll) { scrolling = scroll; }
function pointing_device_init (line 116) | __attribute__((weak)) void pointing_device_init(void) { trackball_set_rg...
function pointing_device_task (line 118) | void pointing_device_task(void) {
FILE: keyboards/3w6/rev2/keymaps/default_pimoroni/pimoroni_trackball.h
type mouse_buttons (line 30) | enum mouse_buttons
FILE: keyboards/3w6/rev2/matrix.c
function init_tca9555 (line 50) | uint8_t init_tca9555(void) {
function matrix_init_custom (line 86) | void matrix_init_custom(void) {
function matrix_power_up (line 100) | void matrix_power_up(void) {
function store_matrix_row (line 114) | static inline bool store_matrix_row(matrix_row_t current_matrix[], uint8...
function matrix_scan_custom (line 123) | bool matrix_scan_custom(matrix_row_t current_matrix[]) {
function init_cols (line 158) | static void init_cols(void) {
function matrix_row_t (line 171) | static matrix_row_t read_cols(uint8_t row) {
function unselect_rows (line 213) | static void unselect_rows(void) {
function select_row (line 227) | static void select_row(uint8_t row) {
FILE: keyboards/40percentclub/25/keymaps/default/keymap.c
type custom_keycodes (line 25) | enum custom_keycodes {
FILE: keyboards/40percentclub/4pack/4pack.c
function matrix_init_kb (line 22) | void matrix_init_kb(void) {
FILE: keyboards/40percentclub/foobar/keymaps/default/keymap.c
type foobar_layers (line 18) | enum foobar_layers {
FILE: keyboards/40percentclub/gherkin/keymaps/bbaserdem/keymap.c
function matrix_init_user (line 24) | void matrix_init_user(void) {
FILE: keyboards/40percentclub/gherkin/keymaps/default/keymap.c
function keyboard_pre_init_user (line 54) | void keyboard_pre_init_user(void) {
function led_set_user (line 62) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c
type custom_keycodes (line 11) | enum custom_keycodes {
function persistent_default_layer_set (line 95) | void persistent_default_layer_set(uint16_t default_layer) {
function matrix_init_user (line 100) | void matrix_init_user(void) {
function matrix_scan_user (line 104) | void matrix_scan_user(void) {
function process_record_user (line 135) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/40percentclub/gherkin/keymaps/midi/keymap.c
type layer_number (line 3) | enum layer_number {
type custom_keycodes (line 14) | enum custom_keycodes {
function process_record_user (line 76) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c
type gherkin_layers (line 18) | enum gherkin_layers {
type gherkin_keycodes (line 28) | enum gherkin_keycodes {
function persistant_default_layer_set (line 80) | void persistant_default_layer_set(uint16_t default_layer) {
function process_record_user (line 85) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function matrix_init_user (line 169) | void matrix_init_user(void) {
function startup_user (line 177) | void startup_user()
function shutdown_user (line 183) | void shutdown_user()
function music_on_user (line 190) | void music_on_user(void)
function music_scale_user (line 195) | void music_scale_user(void)
function matrix_scan_user (line 202) | void matrix_scan_user(void) {
FILE: keyboards/40percentclub/gherkin/keymaps/steno/keymap.c
function matrix_init_user (line 11) | void matrix_init_user() {
FILE: keyboards/40percentclub/gherkin/keymaps/stevexyz/keymap.c
type layers (line 26) | enum layers {
type custom_keycodes (line 36) | enum custom_keycodes {
function matrix_init_user (line 206) | void matrix_init_user(void) {
function matrix_scan_user (line 214) | void matrix_scan_user(void) {
function process_record_user (line 217) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function keyboard_pre_init_user (line 228) | void keyboard_pre_init_user(void) {
function led_update_user (line 234) | bool led_update_user(led_t led_state) {
FILE: keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c
type keyboard_layers (line 7) | enum keyboard_layers {
FILE: keyboards/40percentclub/half_n_half/keymaps/Boy_314/keymap.c
type layers (line 23) | enum layers {
type halfnhalf_keycodes (line 30) | enum halfnhalf_keycodes {
function tap_dance_choose_layer (line 111) | void tap_dance_choose_layer (qk_tap_dance_state_t *state, void *user_dat...
function tap_dance_choose_layer_reset (line 122) | void tap_dance_choose_layer_reset (qk_tap_dance_state_t *state, void *us...
function process_record_user (line 145) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/40percentclub/half_n_half/keymaps/default/keymap.c
type custom_keycodes (line 19) | enum custom_keycodes {
function process_record_user (line 33) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/40percentclub/i75/keymaps/default/keymap.c
type custom_keycodes (line 19) | enum custom_keycodes {
function process_record_user (line 34) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/40percentclub/luddite/keymaps/default/keymap.c
type custom_keycodes (line 10) | enum custom_keycodes {
FILE: keyboards/40percentclub/mf68/keymaps/andyjack/keymap.c
type layers (line 19) | enum layers {
type custom_keycodes (line 35) | enum custom_keycodes {
function process_record_user (line 78) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function keyboard_post_init_user (line 136) | void keyboard_post_init_user(void) {
FILE: keyboards/40percentclub/mf68/keymaps/delivrance/keymap.c
function keyboard_post_init_user (line 86) | void keyboard_post_init_user(void) {
function cie1931 (line 94) | float cie1931(float x) {
function backlight_init_ports (line 108) | void backlight_init_ports(void) {
function backlight_set (line 118) | void backlight_set(uint8_t level) {
function led_blink (line 136) | void led_blink(void) {
function dynamic_macro_record_start_user (line 142) | void dynamic_macro_record_start_user(void) {
function dynamic_macro_play_user (line 146) | void dynamic_macro_play_user(int8_t direction) {
function dynamic_macro_record_key_user (line 150) | void dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record) {
function dynamic_macro_record_end_user (line 154) | void dynamic_macro_record_end_user(int8_t direction) {
function led_set_user (line 161) | void led_set_user(uint8_t usb_led) {
function matrix_scan_user (line 201) | void matrix_scan_user() {
function process_record_user (line 214) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/40percentclub/mf68/keymaps/emdarcher/keymap.c
function led_set_user (line 40) | void led_set_user(uint8_t usb_led){
FILE: keyboards/40percentclub/nano/keymaps/drashna/keymap.c
function axisCoordinate (line 56) | int16_t axisCoordinate(uint8_t pin, uint16_t origin) {
function axisToMouseComponent (line 86) | int8_t axisToMouseComponent(uint8_t pin, int16_t origin, uint8_t maxSpee...
function pointing_device_task (line 100) | void pointing_device_task(void) {
function matrix_init_keymap (line 120) | void matrix_init_keymap(void) {
FILE: keyboards/40percentclub/nori/keymaps/default/keymap.c
type custom_keycodes (line 14) | enum custom_keycodes {
function layer_state_t (line 136) | layer_state_t layer_state_set_user(layer_state_t state) {
function process_record_user (line 140) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/40percentclub/sixpack/sixpack.c
function matrix_init_kb (line 18) | void matrix_init_kb(void) {
FILE: keyboards/40percentclub/ut47/keymaps/default/keymap.c
type custom_keycodes (line 24) | enum custom_keycodes {
function led_chmode (line 110) | void led_chmode(void) {
function led_toggle (line 114) | void led_toggle(void) {
function process_record_user (line 118) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/40percentclub/ut47/keymaps/non-us/keymap.c
type custom_keycodes (line 24) | enum custom_keycodes {
function led_chmode (line 110) | void led_chmode(void) {
function led_toggle (line 114) | void led_toggle(void) {
function process_record_user (line 118) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/40percentclub/ut47/keymaps/nordic/keymap.c
type custom_keycodes (line 29) | enum custom_keycodes {
function led_chmode (line 153) | void led_chmode(void) {
function led_toggle (line 157) | void led_toggle(void) {
function process_record_user (line 161) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/40percentclub/ut47/keymaps/rgb/keymap.c
type custom_keycodes (line 24) | enum custom_keycodes {
function led_chmode (line 62) | void led_chmode(void) {
function led_toggle (line 66) | void led_toggle(void) {
function process_record_user (line 70) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/40percentclub/ut47/led.c
function led_set (line 23) | void led_set(uint8_t usb_led)
FILE: keyboards/40percentclub/ut47/matrix.c
function matrix_rows (line 49) | inline
function matrix_cols (line 55) | inline
function matrix_init (line 61) | void matrix_init(void)
function matrix_scan (line 78) | uint8_t matrix_scan(void)
function matrix_is_modified (line 107) | bool matrix_is_modified(void)
function matrix_is_on (line 113) | inline
function matrix_row_t (line 119) | inline
function matrix_print (line 125) | void matrix_print(void)
function matrix_key_count (line 135) | uint8_t matrix_key_count(void)
function init_cols (line 149) | static void init_cols(void)
function matrix_row_t (line 162) | static matrix_row_t read_cols(void)
function unselect_rows (line 183) | static void unselect_rows(void)
function select_row (line 192) | static void select_row(uint8_t row)
FILE: keyboards/40percentclub/ut47/ut47.c
function process_record_kb (line 21) | bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/45_ats/keymaps/default/keymap.c
type ats_layers (line 22) | enum ats_layers{
function layer_state_t (line 92) | layer_state_t layer_state_set_user(layer_state_t state) {
function encoder_update_user (line 99) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/45_ats/keymaps/via/keymap.c
type ats_layers (line 22) | enum ats_layers{
function layer_state_t (line 92) | layer_state_t layer_state_set_user(layer_state_t state) {
function encoder_update_user (line 99) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/4pplet/eagle_viper_rep/rev_a/rev_a.c
function board_init (line 19) | void board_init(void) {
function led_update_kb (line 26) | bool led_update_kb(led_t led_state) {
function layer_state_t (line 51) | layer_state_t layer_state_set_kb(layer_state_t state) {
function setLayerLed (line 59) | void setLayerLed(layer_state_t state){
FILE: keyboards/4pplet/waffling60/rev_b/rev_b.c
function led_update_kb (line 19) | bool led_update_kb(led_t led_state) {
FILE: keyboards/7c8/framework/keymaps/default/keymap.c
type framework_layers (line 19) | enum framework_layers {
type framework_keycodes (line 27) | enum framework_keycodes {
function encoder_update_user (line 76) | bool encoder_update_user(uint8_t index, bool clockwise) {
function process_record_user (line 126) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/7c8/framework/keymaps/steven/keymap.c
type framework_layers (line 19) | enum framework_layers {
type framework_keycodes (line 27) | enum framework_keycodes {
function matrix_scan_user (line 83) | void matrix_scan_user(void) {
function encoder_update_user (line 120) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/7c8/framework/keymaps/via/keymap.c
type framework_layers (line 19) | enum framework_layers {
type framework_keycodes (line 27) | enum framework_keycodes {
function encoder_update_user (line 81) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/7skb/keymaps/default/keymap.c
type layer_number (line 15) | enum layer_number {
type custom_keycodes (line 21) | enum custom_keycodes {
function layer_state_t (line 71) | layer_state_t layer_state_set_user(layer_state_t state) {
function process_record_user (line 90) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/7skb/keymaps/salicylic/keymap.c
type layer_number (line 16) | enum layer_number {
type custom_keycodes (line 25) | enum custom_keycodes {
type tapdances (line 29) | enum tapdances{
function layer_state_t (line 127) | layer_state_t layer_state_set_user(layer_state_t state) {
function process_record_user (line 156) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/7skb/keymaps/via/keymap.c
type layer_number (line 6) | enum layer_number {
function layer_state_t (line 73) | layer_state_t layer_state_set_user(layer_state_t state) {
FILE: keyboards/7splus/keymaps/default/keymap.c
type layer_number (line 24) | enum layer_number {
type custom_keycodes (line 29) | enum custom_keycodes {
function process_record_user (line 66) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/7splus/keymaps/salicylic/keymap.c
type layer_number (line 24) | enum layer_number {
type custom_keycodes (line 32) | enum custom_keycodes {
type tapdances (line 36) | enum tapdances{
function layer_state_t (line 129) | layer_state_t layer_state_set_user(layer_state_t state) {
function process_record_user (line 133) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/9key/keymaps/bcat/keymap.c
type layer (line 19) | enum layer {
FILE: keyboards/9key/keymaps/tap_dance/keymap.c
type tap_dances (line 4) | enum tap_dances {
type custom_keycodes (line 10) | enum custom_keycodes {
function process_record_user (line 53) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function matrix_init_user (line 68) | void matrix_init_user(void) {
FILE: keyboards/abacus/keymaps/unicodemap/keymap.c
type layer_names (line 22) | enum layer_names {
type custom_keycodes (line 29) | enum custom_keycodes {
type unicode_names (line 34) | enum unicode_names {
function process_record_user (line 86) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function dip_switch_update_user (line 111) | bool dip_switch_update_user(uint8_t index, bool active) {
function matrix_init_user (line 132) | void matrix_init_user(void) {
function encoder_update_user (line 136) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/absinthe/keymaps/default/keymap.c
function encoder_update_user (line 34) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/absinthe/keymaps/via/keymap.c
function encoder_update_user (line 49) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/abstract/ellipse/keymaps/abstractkb/keymap.c
function encoder_update_user (line 30) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/abstract/ellipse/keymaps/default/keymap.c
function encoder_update_user (line 30) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/acheron/austin/austin.c
function keyboard_pre_init_kb (line 3) | void keyboard_pre_init_kb(void) {
function led_update_kb (line 11) | bool led_update_kb(led_t led_state) {
FILE: keyboards/acheron/elongate/elongate.c
function led_update_kb (line 18) | bool led_update_kb(led_t led_state) {
FILE: keyboards/acheron/shark/keymaps/default/keymap.c
type layers (line 18) | enum layers {
function layer_state_t (line 103) | layer_state_t layer_state_set_user(layer_state_t state) {
FILE: keyboards/acheron/shark/keymaps/via/keymap.c
type layers (line 18) | enum layers {
FILE: keyboards/adelheid/keymaps/default/keymap.c
type adelheid_layers (line 18) | enum adelheid_layers {
FILE: keyboards/adelheid/keymaps/floookay/keymap.c
type adelheid_layers (line 18) | enum adelheid_layers {
FILE: keyboards/aeboards/constellation/rev2/rev2.c
function matrix_io_delay (line 19) | void matrix_io_delay(void) {
FILE: keyboards/aeboards/ext65/keymaps/default/keymap.c
function render_layer_state (line 67) | void render_layer_state(void) {
function render_keylock_status (line 75) | void render_keylock_status(led_t led_state) {
function render_mod_status (line 83) | void render_mod_status(uint8_t modifiers) {
function oled_task_user (line 92) | void oled_task_user(void) {
FILE: keyboards/aeboards/ext65/keymaps/via/keymap.c
function render_layer_state (line 67) | void render_layer_state(void) {
function render_keylock_status (line 75) | void render_keylock_status(led_t led_state) {
function render_mod_status (line 83) | void render_mod_status(uint8_t modifiers) {
function oled_task_user (line 92) | void oled_task_user(void) {
FILE: keyboards/aeboards/ext65/rev1/rev1.c
function keyboard_pre_init_user (line 3) | void keyboard_pre_init_user(void) {
function led_update_kb (line 12) | bool led_update_kb(led_t led_state) {
function layer_state_t (line 22) | layer_state_t layer_state_set_kb(layer_state_t state) {
FILE: keyboards/aeboards/ext65/rev2/rev2.c
function matrix_io_delay (line 4) | void matrix_io_delay(void) { __asm__ volatile("nop\nnop\nnop\n"); }
function board_init (line 7) | void board_init(void) {
function oled_rotation_t (line 12) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function keyboard_pre_init_user (line 18) | void keyboard_pre_init_user(void) {
function led_update_kb (line 27) | bool led_update_kb(led_t led_state) {
function layer_state_t (line 37) | layer_state_t layer_state_set_kb(layer_state_t state) {
FILE: keyboards/afternoonlabs/breeze/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/afternoonlabs/breeze/keymaps/eithanshavit/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/afternoonlabs/breeze/keymaps/via/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/afternoonlabs/gust/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/afternoonlabs/oceanbreeze/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/afternoonlabs/southern_breeze/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/afternoonlabs/southern_breeze/keymaps/via/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/afternoonlabs/summer_breeze/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/afternoonlabs/summer_breeze/keymaps/via/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/ai03/andromeda/keymaps/default/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/ai03/andromeda/keymaps/via/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/ai03/lunar/keymaps/default/keymap.c
type custom_keycodes (line 19) | enum custom_keycodes {
function process_record_user (line 58) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/ai03/lunar/keymaps/muzfuz/keymap.c
type custom_keycodes (line 9) | enum custom_keycodes {
function process_record_user (line 38) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/ai03/orbit/keymaps/default/keymap.c
type custom_keycodes (line 19) | enum custom_keycodes {
function process_record_user (line 48) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/ai03/orbit/matrix.c
function matrix_init_kb (line 70) | __attribute__((weak)) void matrix_init_kb(void) { matrix_init_user(); }
function matrix_scan_kb (line 72) | __attribute__((weak)) void matrix_scan_kb(void) { matrix_scan_user(); }
function matrix_init_user (line 74) | __attribute__((weak)) void matrix_init_user(void) {}
function matrix_scan_user (line 76) | __attribute__((weak)) void matrix_scan_user(void) {}
function matrix_slave_scan_user (line 78) | __attribute__((weak)) void matrix_slave_scan_user(void) {}
function matrix_rows (line 82) | inline uint8_t matrix_rows(void) { return MATRIX_ROWS; }
function matrix_cols (line 84) | inline uint8_t matrix_cols(void) { return MATRIX_COLS; }
function matrix_is_modified (line 86) | bool matrix_is_modified(void) {
function matrix_is_on (line 91) | inline bool matrix_is_on(uint8_t row, uint8_t col) { return (matrix[row]...
function matrix_row_t (line 93) | inline matrix_row_t matrix_get_row(uint8_t row) { return matrix[row]; }
function matrix_print (line 95) | void matrix_print(void) {
function matrix_key_count (line 106) | uint8_t matrix_key_count(void) {
function init_pins (line 118) | static void init_pins(void) {
function read_cols_on_row (line 129) | static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t curr...
function select_row (line 145) | static void select_row(uint8_t row) {
function unselect_row (line 150) | static void unselect_row(uint8_t row) { setPinInputHigh(row_pins[row]); }
function unselect_rows (line 152) | static void unselect_rows(void) {
function init_pins (line 158) | static void init_pins(void) {
function read_cols_on_row (line 165) | static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t curr...
function select_col (line 190) | static void select_col(uint8_t col) {
function unselect_col (line 195) | static void unselect_col(uint8_t col) { setPinInputHigh(col_pins[col]); }
function unselect_cols (line 197) | static void unselect_cols(void) {
function init_pins (line 203) | static void init_pins(void) {
function read_rows_on_col (line 210) | static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t curr...
function matrix_init (line 245) | void matrix_init(void) {
function _matrix_scan (line 282) | uint8_t _matrix_scan(void) {
function matrix_scan (line 302) | uint8_t matrix_scan(void) {
FILE: keyboards/ai03/orbit/orbit.c
function led_toggle (line 26) | void led_toggle(int id, bool on) {
function set_all_leds (line 102) | void set_all_leds(bool leds[6]) {
function set_layer_indicators (line 108) | void set_layer_indicators(uint8_t layer) {
function matrix_init_kb (line 146) | void matrix_init_kb(void) {
function led_set_kb (line 175) | void led_set_kb(uint8_t usb_led) {
function layer_state_set_kb (line 193) | uint32_t layer_state_set_kb(uint32_t state) {
FILE: keyboards/ai03/orbit/serial.c
function serial_delay (line 182) | inline static
function serial_delay_half1 (line 188) | inline static
function serial_delay_half2 (line 194) | inline static
function serial_output (line 200) | inline static
function serial_input_with_pullup (line 207) | inline static
function serial_read_pin (line 214) | inline static
function serial_low (line 220) | inline static
function serial_high (line 226) | inline static
function soft_serial_initiator_init (line 231) | void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size)
function soft_serial_target_init (line 239) | void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size)
function sync_recv (line 258) | static
function sync_send (line 269) | static
function serial_read_chunk (line 278) | static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) {
function serial_write_chunk (line 305) | void serial_write_chunk(uint8_t data, uint8_t bit) {
function serial_send_packet (line 324) | static
function serial_recive_packet (line 335) | static
function change_sender2reciver (line 347) | inline static
function change_reciver2sender (line 356) | inline static
function nibble_bits_count (line 365) | static inline uint8_t nibble_bits_count(uint8_t bits)
function ISR (line 373) | ISR(SERIAL_PIN_INTERRUPT) {
function soft_serial_transaction (line 435) | int soft_serial_transaction(int sstd_index) {
function soft_serial_get_and_clean_status (line 521) | int soft_serial_get_and_clean_status(int sstd_index) {
FILE: keyboards/ai03/orbit/serial.h
type SSTD_t (line 25) | typedef struct _SSTD_t {
FILE: keyboards/ai03/orbit/split_util.c
function is_keyboard_left (line 17) | __attribute__((weak))
function is_keyboard_master (line 36) | bool is_keyboard_master(void)
function keyboard_master_setup (line 56) | static void keyboard_master_setup(void) {
function keyboard_slave_setup (line 69) | static void keyboard_slave_setup(void)
function matrix_setup (line 75) | void matrix_setup(void)
FILE: keyboards/ai03/orbit/transport.c
function transport_master (line 34) | bool transport_master(matrix_row_t matrix[]) {
function transport_slave (line 101) | void transport_slave(matrix_row_t matrix[]) {
function transport_master_init (line 139) | void transport_master_init(void) {
function transport_slave_init (line 143) | void transport_slave_init(void) {
function transport_master_init (line 169) | void transport_master_init(void)
function transport_slave_init (line 172) | void transport_slave_init(void)
function transport_master (line 181) | bool transport_master(matrix_row_t matrix[]) {
function transport_slave (line 204) | void transport_slave(matrix_row_t matrix[]) {
FILE: keyboards/ai03/orbit/transport.h
type Serial_s2m_buffer_t (line 7) | typedef struct _Serial_s2m_buffer_t {
type Serial_m2s_buffer_t (line 12) | typedef struct _Serial_m2s_buffer_t {
FILE: keyboards/ai03/orbit_x/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/ai03/orbit_x/keymaps/via/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/ai03/polaris/keymaps/default/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/ai03/polaris/keymaps/default_ansi_tsangan/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/ai03/polaris/keymaps/mekberg/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/ai03/polaris/keymaps/testing/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/ai03/polaris/keymaps/via/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/ai03/quasar/keymaps/ai03/keymap.c
function process_record_user (line 47) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function matrix_init_user (line 51) | void matrix_init_user(void) {
function matrix_scan_user (line 55) | void matrix_scan_user(void) {
function led_set_user (line 59) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/ai03/soyuz/keymaps/1U/keymap.c
type custom_keycodes (line 19) | enum custom_keycodes {
function process_record_user (line 33) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function matrix_init_user (line 47) | void matrix_init_user(void) {
function matrix_scan_user (line 51) | void matrix_scan_user(void) {
function led_set_user (line 55) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/ai03/soyuz/keymaps/via/keymap.c
type layer_names (line 22) | enum layer_names {
FILE: keyboards/ai03/vega/keymaps/default/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/ai03/vega/keymaps/via/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/ai03/vega/vega.c
function matrix_init_kb (line 19) | void matrix_init_kb(void) {
function led_update_kb (line 28) | bool led_update_kb(led_t led_state) {
FILE: keyboards/ajisai74/keymaps/default/keymap.c
type layer_number (line 24) | enum layer_number {
FILE: keyboards/ajisai74/keymaps/jis/keymap.c
type layer_number (line 24) | enum layer_number {
type tapdances (line 29) | enum tapdances{
FILE: keyboards/ajisai74/keymaps/salicylic/keymap.c
type layer_number (line 24) | enum layer_number {
type tapdances (line 30) | enum tapdances{
FILE: keyboards/ajisai74/keymaps/via/keymap.c
type layer_number (line 23) | enum layer_number {
FILE: keyboards/al1/matrix.c
function read_rows (line 5) | static uint8_t read_rows(void) {
function select_col (line 14) | static void select_col(uint8_t col) {
function unselect_cols (line 23) | static void unselect_cols(void) {
function matrix_init_custom (line 27) | void matrix_init_custom(void) {
function matrix_scan_custom (line 71) | bool matrix_scan_custom(matrix_row_t current_matrix[]) {
FILE: keyboards/aleblazer/zodiark/keymaps/default/keymap.c
type sofle_layers (line 16) | enum sofle_layers {
type custom_keycodes (line 25) | enum custom_keycodes {
function render_logo (line 75) | static void render_logo(void) {
function print_status_narrow (line 85) | static void print_status_narrow(void) {
function oled_rotation_t (line 131) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function oled_task_user (line 138) | void oled_task_user(void) {
function process_record_user (line 148) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function encoder_update_user (line 311) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/aleblazer/zodiark/keymaps/slimoled/keymap.c
type sofle_layers (line 19) | enum sofle_layers {
type custom_keycodes (line 28) | enum custom_keycodes {
function render_logo (line 78) | static void render_logo(void) {
function print_status_narrow (line 88) | static void print_status_narrow(void) {
function oled_rotation_t (line 134) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function oled_task_user (line 141) | void oled_task_user(void) {
function process_record_user (line 151) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function encoder_update_user (line 314) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/aleblazer/zodiark/keymaps/via/encoder.c
function encoder_update_user (line 19) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/aleblazer/zodiark/keymaps/via/oled.c
function render_logo (line 17) | static void render_logo(void) {
function print_status_narrow (line 27) | static void print_status_narrow(void) {
function oled_rotation_t (line 63) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function oled_task_user (line 70) | void oled_task_user(void) {
FILE: keyboards/aleth42/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
type custom_keycodes (line 27) | enum custom_keycodes {
function encoder_update_user (line 108) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/aleth42/keymaps/via/keymap.c
type layer_names (line 19) | enum layer_names {
type custom_keycodes (line 27) | enum custom_keycodes {
function encoder_update_user (line 108) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/alf/x2/keymaps/default/keymap.c
function led_set_user (line 22) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/alf/x2/keymaps/hhkb_60/keymap.c
function led_set_user (line 22) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/alpha/keymaps/default/keymap.c
type custom_keycodes (line 8) | enum custom_keycodes {
function process_record_user (line 12) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/alpha/keymaps/hvp/keymap.c
type layer_names (line 3) | enum layer_names {
type custom_keycodes (line 10) | enum custom_keycodes {
function process_record_user (line 14) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function matrix_init_user (line 47) | void matrix_init_user(void) {
function matrix_scan_user (line 50) | void matrix_scan_user(void) {
FILE: keyboards/alpha/keymaps/vderm/keymap.c
function matrix_init_user (line 30) | void matrix_init_user(void) {
function matrix_scan_user (line 33) | void matrix_scan_user(void) {
FILE: keyboards/alps64/keymaps/crd/keymap.c
type keyboard_layers (line 3) | enum keyboard_layers {
FILE: keyboards/alu84/keymaps/default/keymap.c
type layer_names (line 20) | enum layer_names {
FILE: keyboards/amag23/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/amag23/keymaps/qwert/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/amj40/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
type custom_keycodes (line 26) | enum custom_keycodes {
function process_record_user (line 111) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/amj40/keymaps/fabian/keymap.c
type custom_layers (line 34) | enum custom_layers {
type custom_keycodes (line 43) | enum custom_keycodes {
function process_record_user (line 171) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/amj40/keymaps/myee/keymap.c
type custom_keycodes (line 20) | enum custom_keycodes {
function process_record_user (line 59) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/amj60/keymaps/default/keymap.c
type layer_names (line 20) | enum layer_names {
FILE: keyboards/amj96/matrix.c
function matrix_rows (line 48) | inline
function matrix_cols (line 54) | inline
function matrix_init (line 60) | void matrix_init(void)
function matrix_scan (line 82) | uint8_t matrix_scan(void)
function matrix_is_modified (line 111) | bool matrix_is_modified(void)
function matrix_is_on (line 117) | inline
function matrix_row_t (line 123) | inline
function matrix_print (line 129) | void matrix_print(void)
function matrix_key_count (line 139) | uint8_t matrix_key_count(void)
function init_cols (line 152) | static void init_cols(void)
function matrix_row_t (line 172) | static matrix_row_t read_cols(void)
function init_rows (line 200) | static void init_rows(void)
function unselect_rows (line 205) | static void unselect_rows(void)
function select_row (line 213) | static void select_row(uint8_t row)
FILE: keyboards/anavi/macropad8/keymaps/default/keymap.c
function oled_rotation_t (line 21) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function oled_task_user (line 25) | void oled_task_user(void) {
FILE: keyboards/anavi/macropad8/keymaps/git/keymap.c
type custom_keycodes (line 40) | enum custom_keycodes {
function process_record_user (line 50) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function oled_rotation_t (line 104) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function oled_task_user (line 108) | void oled_task_user(void) {
FILE: keyboards/anavi/macropad8/keymaps/kicad/keymap.c
function oled_rotation_t (line 74) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function oled_task_user (line 78) | void oled_task_user(void) {
FILE: keyboards/anavi/macropad8/keymaps/kodi/keymap.c
function oled_rotation_t (line 40) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function oled_task_user (line 44) | void oled_task_user(void) {
FILE: keyboards/anavi/macropad8/keymaps/obs/keymap.c
function oled_rotation_t (line 57) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function oled_task_user (line 61) | void oled_task_user(void) {
FILE: keyboards/anavi/macropad8/keymaps/zoom/keymap.c
function oled_rotation_t (line 56) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function oled_task_user (line 60) | void oled_task_user(void) {
FILE: keyboards/angel17/keymaps/default/keymap.c
type layers (line 18) | enum layers{
FILE: keyboards/angel64/alpha/keymaps/default/keymap.c
type layers (line 18) | enum layers{
function oled_task_user (line 41) | void oled_task_user(void) {
FILE: keyboards/angel64/alpha/matrix.c
function matrix_init_quantum (line 55) | __attribute__ ((weak))
function matrix_scan_quantum (line 60) | __attribute__ ((weak))
function matrix_init_kb (line 65) | __attribute__ ((weak))
function matrix_scan_kb (line 70) | __attribute__ ((weak))
function matrix_init_user (line 75) | __attribute__ ((weak))
function matrix_scan_user (line 79) | __attribute__ ((weak))
function matrix_rows (line 83) | inline
function matrix_cols (line 88) | inline
function matrix_is_modified (line 94) | bool matrix_is_modified(void)
function matrix_is_on (line 100) | inline
function matrix_row_t (line 106) | inline
function matrix_print (line 118) | void matrix_print(void)
function matrix_key_count (line 129) | uint8_t matrix_key_count(void)
function select_row (line 138) | static void select_row(uint8_t row)
function unselect_row (line 144) | static void unselect_row(uint8_t row)
function unselect_rows (line 149) | static void unselect_rows(void)
function select_col (line 156) | static void select_col(uint8_t col)
function unselect_col (line 162) | static void unselect_col(uint8_t col)
function unselect_cols (line 167) | static void unselect_cols(void)
function init_pins (line 174) | static void init_pins(void) {
function read_cols_on_row (line 185) | static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t curr...
function read_rows_on_col (line 213) | static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t curr...
function matrix_init (line 253) | void matrix_init(void) {
function matrix_scan (line 269) | uint8_t matrix_scan(void)
FILE: keyboards/angel64/rev1/keymaps/default/keymap.c
function oled_task_user (line 28) | void oled_task_user(void) {
FILE: keyboards/angel64/rev1/keymaps/kakunpc/keymap.c
type keybuf (line 23) | struct keybuf {
type keybuf (line 27) | struct keybuf
type layers (line 37) | enum layers{
function process_record_user (line 62) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function keyboard_post_init_user (line 77) | void keyboard_post_init_user(void) {
function ToIndex (line 90) | int ToIndex(char _col, char _row) {
function led_ripple_effect (line 94) | void led_ripple_effect(void){
function matrix_scan_user (line 154) | void matrix_scan_user(void) {
function oled_task_user (line 176) | void oled_task_user(void) {
FILE: keyboards/angel64/rev1/matrix.c
function matrix_init_quantum (line 55) | __attribute__ ((weak))
function matrix_scan_quantum (line 60) | __attribute__ ((weak))
function matrix_init_kb (line 65) | __attribute__ ((weak))
function matrix_scan_kb (line 70) | __attribute__ ((weak))
function matrix_init_user (line 75) | __attribute__ ((weak))
function matrix_scan_user (line 79) | __attribute__ ((weak))
function matrix_rows (line 83) | inline
function matrix_cols (line 88) | inline
function matrix_is_modified (line 94) | bool matrix_is_modified(void)
function matrix_is_on (line 100) | inline
function matrix_row_t (line 106) | inline
function matrix_print (line 118) | void matrix_print(void)
function matrix_key_count (line 129) | uint8_t matrix_key_count(void)
function select_row (line 138) | static void select_row(uint8_t row)
function unselect_row (line 144) | static void unselect_row(uint8_t row)
function unselect_rows (line 149) | static void unselect_rows(void)
function select_col (line 156) | static void select_col(uint8_t col)
function unselect_col (line 162) | static void unselect_col(uint8_t col)
function unselect_cols (line 167) | static void unselect_cols(void)
function init_pins (line 174) | static void init_pins(void) {
function read_cols_on_row (line 185) | static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t curr...
function read_rows_on_col (line 213) | static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t curr...
function matrix_init (line 253) | void matrix_init(void) {
function matrix_scan (line 269) | uint8_t matrix_scan(void)
FILE: keyboards/aplyard/aplx6/rev2/keymaps/default/keymap.c
type layer_names (line 18) | enum layer_names {
function render_logo (line 81) | static void render_logo(void) {
function oled_task_user (line 116) | void oled_task_user(void) {
function encoder_update_user (line 121) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/arabica37/keymaps/default/keymap.c
type layers (line 7) | enum layers {
type custom_keycodes (line 14) | enum custom_keycodes {
function keyboard_post_init_user (line 79) | void keyboard_post_init_user(void) {
function process_record_user (line 85) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function oled_rotation_t (line 144) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function oled_task_user (line 152) | void oled_task_user(void) {
FILE: keyboards/arch_36/keymaps/default/keymap.c
type layer_names (line 4) | enum layer_names {
function layer_state_t (line 101) | layer_state_t layer_state_set_user(layer_state_t state) {
function process_record_user (line 108) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function oled_rotation_t (line 127) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function render_default_layer_state (line 131) | void render_default_layer_state(void) {
function render_rgb_state (line 142) | void render_rgb_state(void) {
function render_layer_state (line 181) | void render_layer_state(void) {
function render_keylock_status (line 201) | void render_keylock_status(led_t led_state) {
function render_mod_status (line 208) | void render_mod_status(uint8_t modifiers) {
function render_status (line 219) | static void render_status(void) {
function render_logo (line 230) | static void render_logo(void) {
function oled_task_user (line 301) | void oled_task_user(void) {
FILE: keyboards/arch_36/keymaps/obosob/keymap.c
type layer_names (line 18) | enum layer_names {
type keycodes (line 42) | enum keycodes {
function process_record_user (line 234) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function layer_state_t (line 394) | layer_state_t layer_state_set_user(layer_state_t state) {
function oled_rotation_t (line 413) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function render_default_layer_state (line 417) | void render_default_layer_state(void) {
function render_rgb_state (line 435) | void render_rgb_state(void) {
function render_layer_state (line 474) | void render_layer_state(void) {
function render_keylock_status (line 500) | void render_keylock_status(led_t led_state) {
function render_mod_status (line 507) | void render_mod_status(uint8_t modifiers) {
function render_status (line 518) | static void render_status(void) {
function render_logo (line 529) | static void render_logo(void) {
function oled_task_user (line 810) | void oled_task_user(void) {
FILE: keyboards/ares/keymaps/default/keymap.c
type layer_names (line 20) | enum layer_names {
FILE: keyboards/arisu/keymaps/fate/keymap.c
type arisu_layers (line 18) | enum arisu_layers {
FILE: keyboards/arrayperipherals/1x4p1/keymaps/default/keymap.c
function encoder_update_user (line 20) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/arrayperipherals/1x4p1/keymaps/via/keymap.c
function encoder_update_user (line 20) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/ash1800/ash1800.c
function led_update_kb (line 18) | bool led_update_kb(led_t led_state) {
FILE: keyboards/ash_xiix/ash_xiix.c
function led_update_kb (line 18) | bool led_update_kb(led_t led_state) {
FILE: keyboards/ashpil/modelm_usbc/keymaps/ashpil/keymap.c
type combo_events (line 29) | enum combo_events {
function process_combo_event (line 39) | void process_combo_event(uint16_t combo_index, bool pressed) {
FILE: keyboards/ashpil/modelm_usbc/modelm_usbc.c
function keyboard_pre_init_kb (line 18) | void keyboard_pre_init_kb(void) {
function led_update_kb (line 28) | bool led_update_kb(led_t led_state) {
FILE: keyboards/at101_bh/keymaps/default/keymap.c
function led_set_user (line 22) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/at_at/660m/660m.c
function board_init (line 3) | void board_init(void) {
FILE: keyboards/atomic/atomic.c
function matrix_init_kb (line 19) | void matrix_init_kb(void) {
FILE: keyboards/atomic/keymaps/pvc/keymap.c
type keyboard_layers (line 12) | enum keyboard_layers {
type keyboard_macros (line 20) | enum keyboard_macros {
function persistent_default_layer_set (line 256) | void persistent_default_layer_set(uint16_t default_layer) {
function macro_t (line 261) | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t...
function matrix_init_user (line 526) | void matrix_init_user(void)
function led_set_user (line 533) | void led_set_user(uint8_t usb_led)
function startup_user (line 577) | void startup_user()
function shutdown_user (line 583) | void shutdown_user()
function audio_on_user (line 590) | void audio_on_user(void)
function music_on_user (line 595) | void music_on_user(void)
function music_scale_user (line 600) | void music_scale_user(void)
FILE: keyboards/atreus/keymaps/dvorak_42_key/keymap.c
type custom_keycodes (line 71) | enum custom_keycodes {
function process_record_user (line 132) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/atreus/keymaps/henxing/keymap.c
type custom_keycodes (line 15) | enum custom_keycodes {
function persistent_default_layer_set (line 62) | void persistent_default_layer_set(uint16_t default_layer) {
function process_record_user (line 67) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/atreus/keymaps/kejadlen/keymap.c
type macro_id (line 7) | enum macro_id {
FILE: keyboards/atreus/keymaps/khitsule/keymap.c
type layers (line 5) | enum layers {
FILE: keyboards/atreus/keymaps/replicaJunction/keymap.c
function layer_state_t (line 92) | layer_state_t layer_state_set_user(layer_state_t state) {
FILE: keyboards/atreus/keymaps/workman/keymap.c
type custom_keycodes (line 15) | enum custom_keycodes {
function process_record_user (line 62) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/atreus/keymaps/xk/keymap.c
type custom_keycodes (line 16) | enum custom_keycodes {
function matrix_init_user (line 275) | void matrix_init_user(){
function macro_t (line 279) | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t...
FILE: keyboards/atreus/keymaps/xyverz/keymap.c
type layer_names (line 12) | enum layer_names {
type planck_keycodes (line 22) | enum planck_keycodes {
function layer_state_t (line 165) | layer_state_t layer_state_set_user(layer_state_t state) {
function process_record_user (line 168) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/atreus/keymaps/yttyx/keymap.c
type layers (line 4) | enum layers {
FILE: keyboards/atreus62/keymaps/d4mation/keymap.c
type layer_names (line 4) | enum layer_names {
type keymap_custom_keycodes (line 13) | enum keymap_custom_keycodes {
function eeconfig_init_keymap (line 156) | void eeconfig_init_keymap( void ) {
function process_record_keymap (line 160) | bool process_record_keymap( uint16_t keycode, keyrecord_t *record ) {
FILE: keyboards/atreus62/keymaps/mneme/keymap.c
function m_tapn (line 127) | static void m_tapn (uint8_t code, ...) {
function m_handle_kf (line 141) | static void m_handle_kf (keyrecord_t *record, uint8_t id) {
function macro_t (line 174) | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t...
function process_record_user (line 185) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function dance_eq (line 201) | void dance_eq (qk_tap_dance_state_t *state, void *user_data) {
function dance_fun (line 218) | void dance_fun (qk_tap_dance_state_t *state, void *user_data) {
function matrix_init_user (line 245) | void matrix_init_user(void) {
function matrix_scan_user (line 251) | void matrix_scan_user(void) {
FILE: keyboards/atreus62/keymaps/pcewing/keymap.c
type atreus62_layers (line 6) | enum atreus62_layers {
FILE: keyboards/atreus62/keymaps/xyverz/keymap.c
type layer_names (line 47) | enum layer_names { _DVORAK, _QWERTY, _COLEMAK, _WOW, _DESTINY, _LOWER, _...
type atreus52_keycodes (line 49) | enum atreus52_keycodes { DVORAK = SAFE_RANGE, QWERTY, COLEMAK, WOW, DEST...
function matrix_init_user (line 124) | void matrix_init_user(void) {
function layer_state_t (line 132) | layer_state_t layer_state_set_user(layer_state_t state) {
function process_record_user (line 136) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/atxkb/1894/keymaps/default/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/atxkb/1894/keymaps/default_ansi_tsangan/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/atxkb/1894/keymaps/via/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/aves65/keymaps/default/keymap.c
type layer_names (line 21) | enum layer_names {
FILE: keyboards/aves65/keymaps/via/keymap.c
type layer_names (line 21) | enum layer_names {
FILE: keyboards/baguette/baguette.c
function bootmagic_lite (line 18) | void bootmagic_lite(void)
function matrix_init_kb (line 45) | void matrix_init_kb(void) {
FILE: keyboards/bakeneko60/keymaps/default/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/bakeneko60/keymaps/via/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/bakeneko65/rev2/keymaps/default/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/bakeneko65/rev2/keymaps/via/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/bakeneko65/rev3/keymaps/default/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/bakeneko65/rev3/keymaps/via/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/bakeneko80/keymaps/default/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/barleycorn/barleycorn.c
function keyboard_pre_init_kb (line 18) | void keyboard_pre_init_kb(void) {
function led_update_kb (line 25) | bool led_update_kb(led_t led_state) {
FILE: keyboards/barleycorn/matrix.c
function unselect_rows (line 26) | static void unselect_rows(void) {
function select_row (line 32) | static void select_row(uint8_t row) {
function unselect_row (line 37) | static void unselect_row(uint8_t row) {
function init_pins (line 41) | static void init_pins(void) {
function matrix_init_custom (line 56) | void matrix_init_custom(void) {
function read_cols_on_row (line 66) | static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t curr...
function matrix_scan_custom (line 129) | bool matrix_scan_custom(matrix_row_t current_matrix[]) {
FILE: keyboards/barleycorn_smd/matrix.c
function unselect_rows (line 26) | static void unselect_rows(void) {
function select_row (line 32) | static void select_row(uint8_t row) {
function unselect_row (line 37) | static void unselect_row(uint8_t row) {
function init_pins (line 41) | static void init_pins(void) {
function matrix_init_custom (line 56) | void matrix_init_custom(void) {
function read_cols_on_row (line 66) | static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t curr...
function matrix_scan_custom (line 129) | bool matrix_scan_custom(matrix_row_t current_matrix[]) {
FILE: keyboards/barracuda/keymaps/default/keymap.c
type _layers (line 21) | enum _layers {
FILE: keyboards/barracuda/keymaps/via/keymap.c
type _layers (line 21) | enum _layers {
FILE: keyboards/basekeys/slice/keymaps/default/keymap.c
type layer_number (line 22) | enum layer_number {
type custom_keycodes (line 28) | enum custom_keycodes {
function process_record_user (line 79) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function oled_rotation_t (line 117) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function oled_task_user (line 121) | void oled_task_user(void) {
FILE: keyboards/basekeys/slice/keymaps/default_split_left_space/keymap.c
type layer_number (line 22) | enum layer_number {
type custom_keycodes (line 28) | enum custom_keycodes {
function process_record_user (line 79) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function oled_rotation_t (line 117) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function oled_task_user (line 121) | void oled_task_user(void) {
FILE: keyboards/basekeys/slice/rev1/keymaps/2moons/keymap.c
type layer_number (line 30) | enum layer_number {
type custom_keycodes (line 39) | enum custom_keycodes {
type tapdances (line 43) | enum tapdances{
function layer_state_t (line 141) | layer_state_t layer_state_set_user(layer_state_t state) {
function process_record_user (line 170) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/basekeys/slice/rev1/keymaps/default_all/keymap.c
type layer_number (line 24) | enum layer_number {
type custom_keycodes (line 30) | enum custom_keycodes {
FILE: keyboards/basekeys/slice/rev1/keymaps/default_split_backspace/keymap.c
type layer_number (line 24) | enum layer_number {
type custom_keycodes (line 30) | enum custom_keycodes {
FILE: keyboards/basekeys/slice/rev1/keymaps/via/keymap.c
type layer_number (line 22) | enum layer_number {
FILE: keyboards/basekeys/slice/rev1_rgb/keymaps/2moons_rgb/keymap.c
type layer_number (line 23) | enum layer_number {
type custom_keycodes (line 32) | enum custom_keycodes {
type tapdances (line 36) | enum tapdances{
function layer_state_t (line 134) | layer_state_t layer_state_set_user(layer_state_t state) {
function process_record_user (line 163) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function oled_rotation_t (line 201) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function oled_task_user (line 205) | void oled_task_user(void) {
FILE: keyboards/basekeys/slice/rev1_rgb/keymaps/via/keymap.c
type layer_number (line 22) | enum layer_number {
function render_qmk_logo (line 89) | static void render_qmk_logo(void) {
function oled_rotation_t (line 98) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function oled_task_user (line 102) | void oled_task_user(void) {
FILE: keyboards/basekeys/trifecta/keymaps/default/keymap.c
type layer_names (line 20) | enum layer_names {
function encoder_update_user (line 51) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/basekeys/trifecta/keymaps/via/keymap.c
type layer_names (line 20) | enum layer_names {
function encoder_update_user (line 51) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/basketweave/keymaps/default/keymap.c
function encoder_update_user (line 44) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/basketweave/keymaps/via/keymap.c
function encoder_update_user (line 70) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/bastardkb/scylla/keymaps/cykedev/keymap.c
type layer_names (line 30) | enum layer_names {
function get_ignore_mod_tap_interrupt (line 172) | bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) {
function layer_state_t (line 181) | layer_state_t layer_state_set_user(layer_state_t state) {
FILE: keyboards/bastardkb/scylla/keymaps/german_gaming/keymap.c
type layer_names (line 23) | enum layer_names {
function layer_state_t (line 88) | layer_state_t layer_state_set_user(layer_state_t state) {
FILE: keyboards/bastardkb/scylla/keymaps/xyverz/keymap.c
type layer_names (line 20) | enum layer_names { _WINDOWS, _MAC, _LOWER, _RAISE, _ADJUST }
type custom_keycodes (line 22) | enum custom_keycodes { WINDOWS = SAFE_RANGE, MAC, ADJUST }
function layer_state_t (line 86) | layer_state_t layer_state_set_user(layer_state_t state) { return update_...
function process_record_user (line 88) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/bastardkb/tbk/keymaps/german_gaming/keymap.c
type layer_names (line 23) | enum layer_names {
function layer_state_t (line 88) | layer_state_t layer_state_set_user(layer_state_t state) {
FILE: keyboards/bastardkb/tbk/keymaps/xyverz/keymap.c
type layer_names (line 20) | enum layer_names { _WINDOWS, _MAC, _LOWER, _RAISE, _ADJUST }
type custom_keycodes (line 22) | enum custom_keycodes { WINDOWS = SAFE_RANGE, MAC, ADJUST }
function layer_state_t (line 86) | layer_state_t layer_state_set_user(layer_state_t state) { return update_...
function process_record_user (line 88) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/bat43/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/bat43/keymaps/via/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/bear_face/v1/keymaps/default/keymap.c
type layers (line 20) | enum layers {
type custom_keycodes (line 30) | enum custom_keycodes {
function process_record_user (line 87) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/bear_face/v1/v1.c
function keyboard_pre_init_kb (line 20) | void keyboard_pre_init_kb(void) {
function led_update_kb (line 27) | bool led_update_kb(led_t led_state) {
FILE: keyboards/bear_face/v2/keymaps/default/keymap.c
type layers (line 20) | enum layers {
type custom_keycodes (line 30) | enum custom_keycodes {
function process_record_user (line 87) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/bear_face/v2/keymaps/default_iso/keymap.c
type layers (line 20) | enum layers {
type custom_keycodes (line 30) | enum custom_keycodes {
function process_record_user (line 87) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/bear_face/v2/v2.c
function keyboard_pre_init_kb (line 20) | void keyboard_pre_init_kb(void) {
function led_update_kb (line 27) | bool led_update_kb(led_t led_state) {
FILE: keyboards/beatervan/keymaps/default/keymap.c
type layers (line 18) | enum layers {
type custom_keycodes (line 27) | enum custom_keycodes {
function process_record_user (line 72) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/beatervan/keymaps/oj/keymap.c
type layers (line 18) | enum layers {
type custom_keycodes (line 26) | enum custom_keycodes {
function process_record_user (line 72) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/bemeier/bmek/bmek.c
function shutdown_user (line 18) | __attribute__((weak))
FILE: keyboards/bigseries/1key/1key.c
function matrix_scan_kb (line 19) | void matrix_scan_kb(void) {
FILE: keyboards/bigseries/1key/keymaps/8ball/keymap.c
function matrix_init_user (line 64) | void matrix_init_user(void) {
function matrix_scan_user (line 73) | void matrix_scan_user(void) {
function process_record_user (line 80) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function led_set_user (line 101) | void led_set_user(uint8_t usb_led) {
function reset_rgb (line 135) | void reset_rgb(void) {
FILE: keyboards/bigseries/1key/keymaps/ctrl-alt-del/keymap.c
function matrix_init_user (line 32) | void matrix_init_user(void) {
function matrix_scan_user (line 46) | void matrix_scan_user(void) {
function process_record_user (line 49) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function led_set_user (line 55) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/bigseries/1key/keymaps/default/keymap.c
function matrix_init_user (line 31) | void matrix_init_user(void) {
function process_record_user (line 42) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/bigseries/1key/keymaps/dudeofawesome/keymap.c
type TAP_DANCE (line 20) | enum TAP_DANCE {
function tap_dance (line 28) | void tap_dance (qk_tap_dance_state_t *state, void *user_data) {
FILE: keyboards/bigseries/1key/keymaps/leddance/keymap.c
type custom_keycodes (line 23) | enum custom_keycodes {
type custom_layers (line 27) | enum custom_layers {
function dance_toggle (line 37) | void dance_toggle (qk_tap_dance_state_t *state, void *user_data) {
FILE: keyboards/bigseries/1key/keymaps/lock/keymap.c
function matrix_init_user (line 31) | void matrix_init_user(void) {
function matrix_scan_user (line 45) | void matrix_scan_user(void) {
function process_record_user (line 48) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function led_set_user (line 52) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/bigseries/1key/keymaps/tester/keymap.c
function matrix_init_user (line 31) | void matrix_init_user(void) {
function process_record_user (line 45) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/bigseries/2key/2key.c
function matrix_scan_kb (line 19) | void matrix_scan_kb(void) {
FILE: keyboards/bigseries/2key/keymaps/default/keymap.c
function matrix_init_user (line 31) | void matrix_init_user(void) {
FILE: keyboards/bigseries/2key/keymaps/lock/keymap.c
function matrix_init_user (line 32) | void matrix_init_user(void) {
FILE: keyboards/bigseries/2key/keymaps/tester/keymap.c
function matrix_init_user (line 31) | void matrix_init_user(void) {
FILE: keyboards/bigseries/3key/3key.c
function matrix_scan_kb (line 19) | void matrix_scan_kb(void) {
FILE: keyboards/bigseries/3key/keymaps/ctrl-alt-del/keymap.c
function matrix_init_user (line 32) | void matrix_init_user(void) {
function matrix_scan_user (line 46) | void matrix_scan_user(void) {
function process_record_user (line 49) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function led_set_user (line 55) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/bigseries/3key/keymaps/default/keymap.c
function matrix_init_user (line 30) | void matrix_init_user(void) {
function process_record_user (line 44) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/bigseries/3key/keymaps/tester/keymap.c
function matrix_init_user (line 31) | void matrix_init_user(void) {
FILE: keyboards/bigseries/4key/keymaps/default/keymap.c
function matrix_init_user (line 32) | void matrix_init_user(void) {
function process_record_user (line 43) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/bigseries/4key/keymaps/tester/keymap.c
function matrix_init_user (line 31) | void matrix_init_user(void) {
FILE: keyboards/bioi/ble.c
function send_str (line 47) | void send_str(const char *str)
function serial_send (line 54) | void serial_send(uint8_t data)
function send_bytes (line 59) | void send_bytes(uint8_t data)
function bluefruit_trace_header (line 70) | static void bluefruit_trace_header(void)
function bluefruit_trace_footer (line 77) | static void bluefruit_trace_footer(void)
function bluefruit_serial_send (line 83) | static void bluefruit_serial_send(uint8_t data)
function keyboard_leds (line 112) | static uint8_t keyboard_leds(void)
function send_keyboard (line 117) | static void send_keyboard(report_keyboard_t *report)
function send_mouse (line 141) | static void send_mouse(report_mouse_t *report)
function send_system (line 160) | static void send_system(uint16_t data)
function send_consumer (line 186) | static void send_consumer(uint16_t data)
function usart_init (line 212) | void usart_init(void)
FILE: keyboards/bioi/ble.h
type keyboard_config_t (line 22) | typedef union {
FILE: keyboards/bioi/g60/g60.c
function keyboard_pre_init_kb (line 17) | void keyboard_pre_init_kb(void) {
function led_update_kb (line 23) | bool led_update_kb(led_t led_state) {
FILE: keyboards/bioi/main.c
function raw_hid_task (line 95) | static void raw_hid_task(void)
function setup_mcu (line 129) | static void setup_mcu(void)
function setup_usb (line 139) | static void setup_usb(void)
function power_saving (line 151) | void power_saving(void)
function power_recover (line 163) | void power_recover(void)
function ble_task_init (line 176) | void ble_task_init(void)
function ble_task (line 181) | void ble_task(void)
function main (line 310) | int main(void)
FILE: keyboards/bioi/morgan65/morgan65.c
function keyboard_pre_init_kb (line 17) | void keyboard_pre_init_kb(void) {
function led_update_kb (line 23) | bool led_update_kb(led_t led_state) {
FILE: keyboards/bioi/s65/s65.c
function keyboard_pre_init_kb (line 16) | void keyboard_pre_init_kb(void) {
function led_update_kb (line 22) | bool led_update_kb(led_t led_state) {
FILE: keyboards/bioi/usart.c
function ISR (line 443) | ISR(UART0_RECEIVE_INTERRUPT)
function ISR (line 485) | ISR(UART0_TRANSMIT_INTERRUPT)
function uart0_init (line 512) | void uart0_init(uint16_t baudrate)
function uart0_getc (line 589) | uint16_t uart0_getc(void)
function uart0_peek (line 621) | uint16_t uart0_peek(void)
function uart0_putc (line 647) | void uart0_putc(uint8_t data)
function uart0_puts (line 684) | void uart0_puts(const char *s)
function uart0_puts_p (line 699) | void uart0_puts_p(const char *progmem_s)
function uart0_available (line 717) | uint16_t uart0_available(void)
function uart0_flush (line 733) | void uart0_flush(void)
function ISR (line 751) | ISR(UART1_RECEIVE_INTERRUPT)
function ISR (line 785) | ISR(UART1_TRANSMIT_INTERRUPT)
function uart1_init (line 812) | void uart1_init(uint16_t baudrate)
function uart1_getc (line 847) | uint16_t uart1_getc(void)
function uart1_peek (line 878) | uint16_t uart1_peek(void)
function uart1_putc (line 904) | void uart1_putc(uint8_t data)
function uart1_puts (line 941) | void uart1_puts(const char *s)
function uart1_puts_p (line 956) | void uart1_puts_p(const char *progmem_s)
function uart1_available (line 974) | uint16_t uart1_available(void)
function uart1_flush (line 992) | void uart1_flush(void)
function ISR (line 1010) | ISR(UART2_RECEIVE_INTERRUPT)
function ISR (line 1045) | ISR(UART2_TRANSMIT_INTERRUPT)
function uart2_init (line 1073) | void uart2_init(uint16_t baudrate)
function uart2_getc (line 1108) | uint16_t uart2_getc(void)
function uart2_peek (line 1140) | uint16_t uart2_peek(void)
function uart2_putc (line 1166) | void uart2_putc(uint8_t data)
function uart2_puts (line 1203) | void uart2_puts(const char *s)
function uart2_puts_p (line 1217) | void uart2_puts_p(const char *progmem_s)
function uart2_available (line 1235) | uint16_t uart2_available(void)
function uart2_flush (line 1253) | void uart2_flush(void)
function ISR (line 1271) | ISR(UART3_RECEIVE_INTERRUPT)
function ISR (line 1305) | ISR(UART3_TRANSMIT_INTERRUPT)
function uart3_init (line 1333) | void uart3_init(uint16_t baudrate)
function uart3_getc (line 1368) | uint16_t uart3_getc(void)
function uart3_peek (line 1399) | uint16_t uart3_peek(void)
function uart3_putc (line 1425) | void uart3_putc(uint8_t data)
function uart3_puts (line 1462) | void uart3_puts(const char *s)
function uart3_puts_p (line 1477) | void uart3_puts_p(const char *progmem_s)
function uart3_available (line 1495) | uint16_t uart3_available(void)
function uart3_flush (line 1513) | void uart3_flush(void)
FILE: keyboards/blackplum/keymaps/default/keymap.c
type custom_keycodes (line 12) | enum custom_keycodes {
function process_record_user (line 34) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/blank_tehnologii/manibus/keymaps/default/keymap.c
type custom_keycodes (line 19) | enum custom_keycodes {
FILE: keyboards/blank_tehnologii/manibus/keymaps/samurai/keymap.c
type custom_layers (line 19) | enum custom_layers {
type custom_keycodes (line 30) | enum custom_keycodes {
function led_set_keymap (line 140) | void led_set_keymap(uint8_t usb_led) {
function process_record_user (line 146) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/ble_micro_pro/ble_micro_pro.c
function keyboard_post_init_user (line 19) | void keyboard_post_init_user()
function create_user_file (line 24) | void create_user_file()
FILE: keyboards/ble_micro_pro/keymaps/bto_tb/keymap.c
type custom_keycodes (line 26) | enum custom_keycodes {
type layers (line 33) | enum layers { _BASE, _LOWER, _RAISE, _ADJUST }
function keymaps_len (line 37) | uint32_t keymaps_len() { return sizeof(keymaps) / sizeof(uint16_t); }
function matrix_init_user (line 39) | void matrix_init_user() { init_paw3204(); }
function matrix_scan_user (line 41) | void matrix_scan_user() {
function process_record_user (line 74) | bool process_record_user(uint16_t keycode, keyrecord_t* record) {
FILE: keyboards/ble_micro_pro/keymaps/bto_tb/paw3204.c
function spi_soft_half_duplex (line 41) | int spi_soft_half_duplex(uint8_t *p_tx_buffer, size_t tx_length, uint8_t...
function read_pid_paw3204 (line 72) | uint8_t read_pid_paw3204() {
function init_paw3204 (line 83) | void init_paw3204() {}
function read_paw3204 (line 85) | int read_paw3204(uint8_t *stat, int8_t *x, int8_t *y) {
function read_all_paw3204 (line 110) | void read_all_paw3204(paw3204_all_reg *dat) {
FILE: keyboards/ble_micro_pro/keymaps/bto_tb/paw3204.h
type paw3204_all_reg (line 22) | typedef union {
FILE: keyboards/ble_micro_pro/keymaps/default/keymap.c
type custom_keycodes (line 22) | enum custom_keycodes {
type layers (line 34) | enum layers {
function keymaps_len (line 45) | uint32_t keymaps_len() {
function process_record_user (line 49) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/ble_micro_pro/keymaps/lpme_tester/keymap.c
type custom_keycodes (line 22) | enum custom_keycodes {
type layers (line 34) | enum layers {
function keymaps_len (line 45) | uint32_t keymaps_len() {
function process_record_user (line 49) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function MSCMD_USER_RESULT (line 92) | MSCMD_USER_RESULT usrcmd_lpme_test(MSOPT *msopt, MSCMD_USER_OBJECT usrobj)
FILE: keyboards/ble_micro_pro/keymaps/no_msc/keymap.c
type custom_keycodes (line 22) | enum custom_keycodes {
type layers (line 34) | enum layers {
function keymaps_len (line 45) | uint32_t keymaps_len() {
function process_record_user (line 49) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/ble_micro_pro/keymaps/safemode/keymap.c
type custom_keycodes (line 22) | enum custom_keycodes {
type layers (line 34) | enum layers {
function keymaps_len (line 45) | uint32_t keymaps_len() {
function process_record_user (line 49) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/ble_micro_pro/keymaps/tb_module/keymap.c
function sgn (line 28) | static inline int sgn(int16_t x) {
type custom_keycodes (line 40) | enum custom_keycodes {
type layers (line 52) | enum layers {
function keymaps_len (line 63) | uint32_t keymaps_len() {
type trackball_info_t (line 67) | typedef struct {
function to_tb_info (line 74) | static inline void to_tb_info(trackball_info_t* const tb_info, uint8_t d...
function matrix_init_user (line 80) | void matrix_init_user() {
function matrix_scan_user (line 84) | void matrix_scan_user() {
function process_record_user (line 152) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/blockey/keymaps/eucalyn/keymap.c
function process_record_user (line 41) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function matrix_init_user (line 45) | void matrix_init_user(void) {
function matrix_scan_user (line 49) | void matrix_scan_user(void) {
function led_set_user (line 53) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/boardrun/bizarre/keymaps/default/keymap.c
type layer_names (line 21) | enum layer_names {
FILE: keyboards/boardrun/bizarre/keymaps/nopunin10did/keymap.c
type layer_names (line 27) | enum layer_names {
FILE: keyboards/boardrun/classic/keymaps/default/keymap.c
type layer_names (line 25) | enum layer_names {
FILE: keyboards/boardsource/3x4/keymaps/default/keymap.c
type layers (line 3) | enum layers {
FILE: keyboards/boardsource/4x12/keymaps/codecoffeecode/keymap.c
type layers (line 19) | enum layers {
FILE: keyboards/boardsource/4x12/keymaps/default/keymap.c
type layers (line 3) | enum layers {
FILE: keyboards/boardsource/4x12/keymaps/via/keymap.c
type layers (line 3) | enum layers {
FILE: keyboards/boardsource/5x12/keymaps/default/keymap.c
type layers (line 3) | enum layers {
FILE: keyboards/boardsource/5x12/keymaps/via/keymap.c
type layers (line 3) | enum layers {
FILE: keyboards/boardsource/beiwagon/keymaps/default/keymap.c
type layers (line 19) | enum layers {
FILE: keyboards/boardsource/beiwagon/keymaps/via/keymap.c
type layers (line 19) | enum layers {
FILE: keyboards/boardsource/holiday/spooky/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/boardsource/holiday/spooky/keymaps/rip_mx/keymap.c
type layer_names (line 19) | enum layer_names {
function oled_rotation_t (line 31) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function render_RIP (line 35) | static void render_RIP(void) {
function oled_task_user (line 74) | void oled_task_user(void) {
FILE: keyboards/boardsource/holiday/spooky/keymaps/rip_my_wallet/keymap.c
type layer_names (line 19) | enum layer_names {
function oled_rotation_t (line 31) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function render_RIP (line 35) | static void render_RIP(void) {
function oled_task_user (line 74) | void oled_task_user(void) {
FILE: keyboards/boardsource/microdox/keymaps/cole/keymap.c
type layers (line 21) | enum layers {
function oled_rotation_t (line 62) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function render_logo (line 68) | static void render_logo(void) {
function render_status (line 78) | static void render_status(void) {
function oled_task_user (line 107) | void oled_task_user(void) {
FILE: keyboards/boardsource/microdox/keymaps/default/keymap.c
type layers (line 20) | enum layers {
FILE: keyboards/boardsource/microdox/keymaps/via/keymap.c
function oled_rotation_t (line 50) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
function render_logo (line 56) | static void render_logo(void) {
function render_status (line 66) | static void render_status(void) {
function oled_task_user (line 95) | void oled_task_user(void) {
FILE: keyboards/boardsource/technik_o/keymaps/default/keymap.c
type layers (line 19) | enum layers {
FILE: keyboards/boardsource/technik_o/keymaps/via/keymap.c
type layers (line 19) | enum layers {
FILE: keyboards/boardsource/technik_s/keymaps/default/keymap.c
type layers (line 19) | enum layers {
FILE: keyboards/boardsource/technik_s/keymaps/via/keymap.c
type layers (line 19) | enum layers {
FILE: keyboards/boardsource/the_mark/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/boardsource/the_mark/keymaps/default_ansi/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/boardsource/the_mark/keymaps/default_iso/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/boardsource/the_mark/keymaps/stanrc85/keymap.c
function rgb_matrix_indicators_user (line 53) | void rgb_matrix_indicators_user(void) {
function matrix_init_kb (line 73) | void matrix_init_kb(void){
FILE: keyboards/boardsource/the_mark/the_mark.c
function suspend_power_down_kb (line 40) | void suspend_power_down_kb(void) {
function suspend_wakeup_init_kb (line 45) | void suspend_wakeup_init_kb(void) {
FILE: keyboards/boardwalk/keymaps/brendanwr/keymap.c
type layer (line 18) | enum layer {
FILE: keyboards/boardwalk/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/boardwalk/keymaps/default_2u_arrow/keymap.c
type layer (line 19) | enum layer {
FILE: keyboards/boardwalk/keymaps/default_2x2u/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/boardwalk/keymaps/default_625u_arrow/keymap.c
type layer (line 19) | enum layer {
FILE: keyboards/boardwalk/keymaps/default_ortho_7u/keymap.c
type layer (line 19) | enum layer {
FILE: keyboards/boardwalk/keymaps/default_ortho_hhkb/keymap.c
type layer (line 19) | enum layer {
FILE: keyboards/boardwalk/keymaps/mcallaster/keymap.c
type layer (line 4) | enum layer {
function layer_state_t (line 52) | layer_state_t layer_state_set_user(layer_state_t state) {
FILE: keyboards/boardwalk/keymaps/niclake/keymap.c
type layer_names (line 18) | enum layer_names {
type custom_keycodes (line 26) | enum custom_keycodes {
FILE: keyboards/boardwalk/keymaps/via/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/boston/boston.c
function keyboard_post_init_kb (line 19) | void keyboard_post_init_kb(void) {
FILE: keyboards/boston/keymaps/default/keymap.c
function encoder_update_user (line 45) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/boston/keymaps/rgb-light-layers/keymap.c
function encoder_update_user (line 112) | bool encoder_update_user(uint8_t index, bool clockwise) {
function keyboard_post_init_user (line 202) | void keyboard_post_init_user(void) {
function layer_state_t (line 207) | layer_state_t layer_state_set_user(layer_state_t state) {
function led_update_user (line 220) | bool led_update_user(led_t led_state) {
FILE: keyboards/boston_meetup/2019/2019.c
function draw_ui (line 57) | __attribute__ ((weak))
function led_set_user (line 155) | void led_set_user(uint8_t usb_led) {
function layer_state_set_kb (line 173) | uint32_t layer_state_set_kb(uint32_t state) {
function process_record_kb (line 180) | bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
function encoder_update_kb (line 185) | bool encoder_update_kb(uint8_t index, bool clockwise) {
function matrix_init_kb (line 193) | void matrix_init_kb(void) {
function matrix_scan_kb (line 198) | void matrix_scan_kb(void) {
FILE: keyboards/boston_meetup/2019/keymaps/default/keymap.c
type custom_layers (line 8) | enum custom_layers {
type custom_keycodes (line 15) | enum custom_keycodes {
function layer_state_t (line 111) | layer_state_t layer_state_set_user(layer_state_t state) {
function process_record_user (line 116) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function music_mask_user (line 150) | bool music_mask_user(uint16_t keycode) {
FILE: keyboards/bpiphany/frosty_flake/frosty_flake.c
function keyboard_pre_init_kb (line 3) | void keyboard_pre_init_kb() {
function led_update_kb (line 14) | bool led_update_kb(led_t usb_led) {
FILE: keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/keymap.c
type QFR_layers (line 3) | enum QFR_layers {
type QFR_keycodes (line 11) | enum QFR_keycodes {
type custom_macros (line 19) | enum custom_macros {
function macro_t (line 77) | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t...
function process_record_user (line 95) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/bpiphany/frosty_flake/keymaps/nikchi/keymap.c
function tap (line 14) | void tap(uint16_t keycode){
type taps (line 20) | enum taps{
type unicode_name (line 30) | enum unicode_name {
type my_macros (line 42) | enum my_macros {
function macro_t (line 67) | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t...
function matrix_scan_user (line 135) | void matrix_scan_user(void) {
function matrix_init_user (line 149) | void matrix_init_user(void) {
function cycleAll (line 154) | void cycleAll(qk_tap_dance_state_t *state, void *user_data) {
function cycleEmojis (line 169) | void cycleEmojis(qk_tap_dance_state_t *state, void *user_data) {
function cycleAnimals (line 183) | void cycleAnimals(qk_tap_dance_state_t *state, void *user_data) {
function cycleFoods (line 197) | void cycleFoods(qk_tap_dance_state_t *state, void *user_data) {
function cycleEtc (line 212) | void cycleEtc(qk_tap_dance_state_t *state, void *user_data) {
FILE: keyboards/bpiphany/frosty_flake/matrix.c
function matrix_row_t (line 21) | static matrix_row_t scan_col(void) {
function select_row (line 39) | static void select_row(uint8_t row) {
function matrix_init_custom (line 62) | void matrix_init_custom(void) {
function matrix_scan_custom (line 74) | bool matrix_scan_custom(matrix_row_t current_matrix[]) {
FILE: keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c
type layers (line 3) | enum layers {
FILE: keyboards/bpiphany/kitten_paw/keymaps/ickerwx/keymap.c
type layers (line 8) | enum layers {
type custom_keycodes (line 18) | enum custom_keycodes {
function matrix_scan_user (line 90) | void matrix_scan_user(void) {
function tap_helper (line 109) | void tap_helper(keyrecord_t *record, uint16_t orig_mod, uint16_t macro_m...
function process_record_user (line 133) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/bpiphany/kitten_paw/matrix.c
function matrix_init_kb (line 38) | __attribute__ ((weak))
function matrix_scan_kb (line 43) | __attribute__ ((weak))
function matrix_init_user (line 48) | __attribute__ ((weak))
function matrix_scan_user (line 52) | __attribute__ ((weak))
function matrix_rows (line 56) | inline uint8_t matrix_rows(void) {
function matrix_cols (line 60) | inline uint8_t matrix_cols(void) {
function matrix_init (line 76) | void matrix_init(void) {
function matrix_scan (line 91) | uint8_t matrix_scan(void) {
function matrix_is_modified (line 120) | bool matrix_is_modified(void) {
function matrix_is_on (line 127) | inline bool matrix_is_on(uint8_t row, uint8_t col) {
function matrix_row_t (line 131) | inline matrix_row_t matrix_get_row(uint8_t row) {
function matrix_print (line 135) | void matrix_print(void) {
function matrix_key_count (line 142) | uint8_t matrix_key_count(void) {
function read_rows (line 150) | static uint8_t read_rows(void) {
function select_col (line 162) | static void select_col(uint8_t col) {
FILE: keyboards/bpiphany/pegasushoof/2013/2013.h
function ph_caps_led_off (line 78) | inline void ph_caps_led_off(void) { DDRC &= ~(1<<6); PORTC &= ~(1<<6); }
function ph_sclk_led_on (line 80) | inline void ph_sclk_led_on(void) { DDRC |= (1<<5); PORTC &= ~(1<<5); }
function ph_sclk_led_off (line 81) | inline void ph_sclk_led_off(void) { DDRC &= ~(1<<5); PORTC &= ~(1<<5); }
FILE: keyboards/bpiphany/pegasushoof/2013/matrix.c
function matrix_init_kb (line 36) | __attribute__ ((weak))
function matrix_scan_kb (line 41) | __attribute__ ((weak))
function matrix_init_user (line 46) | __attribute__ ((weak))
function matrix_scan_user (line 50) | __attribute__ ((weak))
function matrix_rows (line 54) | inline uint8_t matrix_rows(void)
function matrix_cols (line 59) | inline uint8_t matrix_cols(void)
function matrix_init (line 64) | void matrix_init(void)
function matrix_scan (line 82) | uint8_t matrix_scan(void)
function matrix_is_modified (line 113) | bool matrix_is_modified(void)
function matrix_is_on (line 120) | inline
function matrix_row_t (line 126) | inline
function matrix_print (line 132) | void matrix_print(void)
function matrix_key_count (line 142) | uint8_t matrix_key_count(void)
function matrix_row_t (line 151) | static matrix_row_t read_cols(void)
function select_row (line 164) | static void select_row(uint8_t col)
FILE: keyboards/bpiphany/pegasushoof/2015/2015.h
function ph_caps_led_off (line 98) | inline void ph_caps_led_off(void) { DDRC &= ~(1<<6); PORTC &= ~(1<<6); }
function ph_sclk_led_on (line 100) | inline void ph_sclk_led_on(void) { DDRC |= (1<<5); PORTC &= ~(1<<5); }
function ph_sclk_led_off (line 101) | inline void ph_sclk_led_off(void) { DDRC &= ~(1<<5); PORTC &= ~(1<<5); }
FILE: keyboards/bpiphany/pegasushoof/2015/matrix.c
function matrix_init_kb (line 38) | __attribute__((weak)) void matrix_init_kb(void) { matrix_init_user(); }
function matrix_scan_kb (line 40) | __attribute__((weak)) void matrix_scan_kb(void) { matrix_scan_user(); }
function matrix_init_user (line 42) | __attribute__((weak)) void matrix_init_user(void) {}
function matrix_scan_user (line 44) | __attribute__((weak)) void matrix_scan_user(void) {}
function matrix_rows (line 48) | inline uint8_t matrix_rows(void)
function matrix_cols (line 53) | inline uint8_t matrix_cols(void)
function matrix_init (line 58) | void matrix_init(void)
function matrix_scan (line 76) | uint8_t matrix_scan(void)
function matrix_row_t (line 98) | inline
function matrix_print (line 104) | void matrix_print(void)
function matrix_key_count (line 114) | uint8_t matrix_key_count(void)
function matrix_row_t (line 123) | static matrix_row_t read_cols(void)
function select_row (line 136) | static void select_row(uint8_t col)
FILE: keyboards/bpiphany/pegasushoof/keymaps/blowrak/keymap.c
function matrix_scan_user (line 78) | void matrix_scan_user(void)
function process_record_user (line 94) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/bpiphany/pegasushoof/keymaps/citadel/keymap.c
type layers (line 31) | enum layers {
type tap_dance (line 37) | enum tap_dance {
function led_set_user (line 120) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/bpiphany/pegasushoof/keymaps/default/keymap.c
function led_set_user (line 44) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/bpiphany/pegasushoof/keymaps/default_jis/keymap.c
function led_set_user (line 42) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/bpiphany/sixshooter/keymaps/default/keymap.c
type custom_keycodes (line 23) | enum custom_keycodes {
function process_record_user (line 52) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function matrix_init_user (line 70) | void matrix_init_user(void) {
FILE: keyboards/bpiphany/sixshooter/sixshooter.h
function sixshooter_led_0_on (line 15) | inline void sixshooter_led_0_on(void) { DDRB |= (1<<6); PORTB |= (1...
function sixshooter_led_1_on (line 16) | inline void sixshooter_led_1_on(void) { DDRC |= (1<<7); PORTC |= (1...
function sixshooter_led_2_on (line 17) | inline void sixshooter_led_2_on(void) { DDRD |= (1<<0); PORTD |= (1...
function sixshooter_led_3_on (line 18) | inline void sixshooter_led_3_on(void) { DDRB |= (1<<5); PORTB |= (1...
function sixshooter_led_4_on (line 19) | inline void sixshooter_led_4_on(void) { DDRD |= (1<<7); PORTD |= (1...
function sixshooter_led_5_on (line 20) | inline void sixshooter_led_5_on(void) { DDRB |= (1<<7); PORTB |= (1...
function sixshooter_led_0_off (line 22) | inline void sixshooter_led_0_off(void) { DDRB &= ~(1<<6); PORTB &= ~(1...
function sixshooter_led_1_off (line 23) | inline void sixshooter_led_1_off(void) { DDRC &= ~(1<<7); PORTC &= ~(1...
function sixshooter_led_2_off (line 24) | inline void sixshooter_led_2_off(void) { DDRD &= ~(1<<0); PORTD &= ~(1...
function sixshooter_led_3_off (line 25) | inline void sixshooter_led_3_off(void) { DDRB &= ~(1<<5); PORTB &= ~(1...
function sixshooter_led_4_off (line 26) | inline void sixshooter_led_4_off(void) { DDRD &= ~(1<<7); PORTD &= ~(1...
function sixshooter_led_5_off (line 27) | inline void sixshooter_led_5_off(void) { DDRB &= ~(1<<7); PORTB &= ~(1...
function sixshooter_led_all_on (line 29) | inline void sixshooter_led_all_on(void) {
function sixshooter_led_all_off (line 37) | inline void sixshooter_led_all_off(void) {
FILE: keyboards/bpiphany/tiger_lily/matrix.c
function matrix_init_kb (line 35) | __attribute__ ((weak))
function matrix_scan_kb (line 40) | __attribute__ ((weak))
function matrix_init_user (line 45) | __attribute__ ((weak))
function matrix_scan_user (line 49) | __attribute__ ((weak))
function matrix_row_t (line 53) | static matrix_row_t scan_col(void) {
function select_col (line 66) | static void select_col(uint8_t col) {
function matrix_init (line 89) | void matrix_init(void) {
function matrix_scan (line 104) | uint8_t matrix_scan(void) {
function matrix_row_t (line 131) | inline matrix_row_t matrix_get_row(uint8_t row) {
function matrix_print (line 135) | void matrix_print(void) {
function matrix_key_count (line 150) | uint8_t matrix_key_count(void) {
FILE: keyboards/bpiphany/unloved_bastard/matrix.c
function matrix_init_kb (line 28) | __attribute__ ((weak))
function matrix_scan_kb (line 33) | __attribute__ ((weak))
function matrix_init_user (line 38) | __attribute__ ((weak))
function matrix_scan_user (line 42) | __attribute__ ((weak))
function matrix_row_t (line 54) | static matrix_row_t scan_col(void) {
function select_col (line 67) | static void select_col(uint8_t col) {
function matrix_init (line 90) | void matrix_init(void) {
function matrix_scan (line 105) | uint8_t matrix_scan(void) {
function matrix_row_t (line 132) | inline matrix_row_t matrix_get_row(uint8_t row) {
function matrix_print (line 136) | void matrix_print(void) {
function matrix_key_count (line 151) | uint8_t matrix_key_count(void) {
FILE: keyboards/bt66tech/bt66tech60/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/buildakb/potato65/keymaps/default/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/buildakb/potato65/keymaps/via/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/buildakb/potato65hs/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/buildakb/potato65hs/keymaps/via/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/business_card/alpha/keymaps/default/keymap.c
function keyboard_post_init_user (line 29) | void keyboard_post_init_user(void) {
function render_logo (line 35) | static void render_logo(void) {
function oled_task_user (line 42) | void oled_task_user(void) { render_logo(); }
FILE: keyboards/business_card/beta/keymaps/default/keymap.c
function matrix_init_user (line 28) | void matrix_init_user(void) {
function render_logo (line 34) | static void render_logo(void) {
function oled_task_user (line 41) | void oled_task_user(void) { render_logo(); }
FILE: keyboards/butterstick/butterstick.c
function matrix_scan_kb (line 18) | void matrix_scan_kb(void) {
FILE: keyboards/butterstick/keymaps/default/keymap.c
function processQwerty (line 45) | uint32_t processQwerty(bool lookup) {
FILE: keyboards/butterstick/keymaps/dennytom/keymap.c
type internal_keycodes (line 36) | enum internal_keycodes {
type pseudolayers (line 43) | enum pseudolayers {
type chord_states (line 68) | enum chord_states {
type Chord (line 84) | struct Chord {
type Chord (line 108) | struct Chord
function handle_US_ANSI_shifted_keys (line 110) | bool handle_US_ANSI_shifted_keys(int16_t keycode, bool in) {
function key_in (line 193) | void key_in(int16_t keycode) {
function key_out (line 215) | void key_out(int16_t keycode) {
function tap_key (line 226) | void tap_key(int16_t keycode) {
function single_dance (line 231) | void single_dance(const struct Chord* self) {
function key_layer_dance (line 248) | void key_layer_dance(const struct Chord* self) {
function key_mod_dance (line 267) | void key_mod_dance(const struct Chord* self) {
function key_key_dance (line 286) | void key_key_dance(const struct Chord* self) {
function autoshift_dance_impl (line 306) | void autoshift_dance_impl(const struct Chord* self) {
function autoshift_dance (line 336) | void autoshift_dance(const struct Chord* self) {
function autoshift_toggle (line 344) | void autoshift_toggle(const struct Chord* self){
function temp_pseudolayer (line 351) | void temp_pseudolayer(const struct Chord* self) {
function perm_pseudolayer (line 368) | void perm_pseudolayer(const struct Chord* self) {
function switch_layer (line 375) | void switch_layer(const struct Chord* self) {
function lock (line 382) | void lock(const struct Chord* self) {
function one_shot_key (line 389) | void one_shot_key(const struct Chord* self) {
function one_shot_layer (line 413) | void one_shot_layer(const struct Chord* self) {
function command (line 437) | void command(const struct Chord* self) {
function identical (line 444) | bool identical(uint16_t* buffer1, uint16_t* buffer2) {
function leader (line 452) | void leader(const struct Chord* self) {
function dynamic_macro_record (line 459) | void dynamic_macro_record(const struct Chord* self) {
function dynamic_macro_next (line 469) | void dynamic_macro_next(const struct Chord* self) {
function dynamic_macro_end (line 479) | void dynamic_macro_end(const struct Chord* self) {
function dynamic_macro_play (line 488) | void dynamic_macro_play(const struct Chord* self) {
type Chord (line 513) | struct Chord
function reset_keyboard_kb (line 515) | void reset_keyboard_kb(void){
function reset (line 524) | void reset(const struct Chord* self) {
type Chord (line 531) | struct Chord
type Chord (line 533) | struct Chord
type Chord (line 535) | struct Chord
type Chord (line 537) | struct Chord
type Chord (line 540) | struct Chord
type Chord (line 543) | struct Chord
type Chord (line 546) | struct Chord
type Chord (line 549) | struct Chord
type Chord (line 552) | struct Chord
type Chord (line 555) | struct Chord
type Chord (line 558) | struct Chord
type Chord (line 561) | struct Chord
type Chord (line 564) | struct Chord
type Chord (line 567) | struct Chord
type Chord (line 570) | struct Chord
type Chord (line 573) | struct Chord
type Chord (line 576) | struct Chord
type Chord (line 579) | struct Chord
type Chord (line 582) | struct Chord
type Chord (line 585) | struct Chord
type Chord (line 588) | struct Chord
type Chord (line 591) | struct Chord
type Chord (line 594) | struct Chord
type Chord (line 597) | struct Chord
type Chord (line 600) | struct Chord
type Chord (line 603) | struct Chord
type Chord (line 606) | struct Chord
type Chord (line 609) | struct Chord
type Chord (line 612) | struct Chord
type Chord (line 615) | struct Chord
type Chord (line 618) | struct Chord
type Chord (line 621) | struct Chord
type Chord (line 624) | struct Chord
type Chord (line 627) | struct Chord
type Chord (line 629) | struct Chord
type Chord (line 631) | struct Chord
type Chord (line 633) | struct Chord
type Chord (line 635) | struct Chord
type Chord (line 637) | struct Chord
type Chord (line 639) | struct Chord
type Chord (line 641) | struct Chord
type Chord (line 643) | struct Chord
type Chord (line 645) | struct Chord
type Chord (line 647) | struct Chord
type Chord (line 649) | struct Chord
type Chord (line 651) | struct Chord
type Chord (line 653) | struct Chord
type Chord (line 655) | struct Chord
type Chord (line 657) | struct Chord
type Chord (line 659) | struct Chord
type Chord (line 661) | struct Chord
type Chord (line 663) | struct Chord
type Chord (line 665) | struct Chord
type Chord (line 667) | struct Chord
type Chord (line 670) | struct Chord
type Chord (line 673) | struct Chord
type Chord (line 676) | struct Chord
type Chord (line 679) | struct Chord
type Chord (line 682) | struct Chord
type Chord (line 685) | struct Chord
type Chord (line 688) | struct Chord
type Chord (line 691) | struct Chord
type Chord (line 694) | struct Chord
type Chord (line 697) | struct Chord
type Chord (line 699) | struct Chord
type Chord (line 701) | struct Chord
type Chord (line 703) | struct Chord
type Chord (line 705) | struct Chord
type Chord (line 707) | struct Chord
type Chord (line 709) | struct Chord
type Chord (line 711) | struct Chord
type Chord (line 713) | struct Chord
type Chord (line 715) | struct Chord
type Chord (line 717) | struct Chord
type Chord (line 720) | struct Chord
type Chord (line 723) | struct Chord
type Chord (line 726) | struct Chord
type Chord (line 729) | struct Chord
type Chord (line 732) | struct Chord
type Chord (line 735) | struct Chord
type Chord (line 738) | struct Chord
type Chord (line 740) | struct Chord
type Chord (line 742) | struct Chord
type Chord (line 744) | struct Chord
type Chord (line 746) | struct Chord
type Chord (line 748) | struct Chord
type Chord (line 750) | struct Chord
type Chord (line 752) | struct Chord
type Chord (line 754) | struct Chord
type Chord (line 756) | struct Chord
type Chord (line 758) | struct Chord
type Chord (line 760) | struct Chord
type Chord (line 762) | struct Chord
type Chord (line 764) | struct Chord
type Chord (line 766) | struct Chord
type Chord (line 768) | struct Chord
type Chord (line 770) | struct Chord
type Chord (line 772) | struct Chord
type Chord (line 774) | struct Chord
type Chord (line 776) | struct Chord
type Chord (line 778) | struct Chord
type Chord (line 780) | struct Chord
type Chord (line 782) | struct Chord
type Chord (line 784) | struct Chord
type Chord (line 786) | struct Chord
type Chord (line 788) | struct Chord
type Chord (line 790) | struct Chord
type Chord (line 792) | struct Chord
type Chord (line 794) | struct Chord
type Chord (line 796) | struct Chord
type Chord (line 798) | struct Chord
type Chord (line 800) | struct Chord
type Chord (line 802) | struct Chord
type Chord (line 804) | struct Chord
type Chord (line 806) | struct Chord
type Chord (line 808) | struct Chord
type Chord (line 810) | struct Chord
type Chord (line 812) | struct Chord
type Chord (line 814) | struct Chord
type Chord (line 816) | struct Chord
type Chord (line 818) | struct Chord
type Chord (line 820) | struct Chord
type Chord (line 822) | struct Chord
type Chord (line 824) | struct Chord
type Chord (line 826) | struct Chord
type Chord (line 828) | struct Chord
type Chord (line 830) | struct Chord
type Chord (line 832) | struct Chord
type Chord (line 834) | struct Chord
type Chord (line 836) | struct Chord
type Chord (line 838) | struct Chord
type Chord (line 840) | struct Chord
type Chord (line 842) | struct Chord
type Chord (line 844) | struct Chord
type Chord (line 846) | struct Chord
type Chord (line 848) | struct Chord
type Chord (line 850) | struct Chord
type Chord (line 852) | struct Chord
type Chord (line 854) | struct Chord
type Chord (line 856) | struct Chord
type Chord (line 858) | struct Chord
type Chord (line 860) | struct Chord
type Chord (line 862) | struct Chord
type Chord (line 864) | struct Chord
type Chord (line 866) | struct Chord
type Chord (line 868) | struct Chord
type Chord (line 870) | struct Chord
type Chord (line 872) | struct Chord
type Chord (line 874) | struct Chord
type Chord (line 876) | struct Chord
type Chord (line 878) | struct Chord
type Chord (line 880) | struct Chord
type Chord (line 882) | struct Chord
type Chord (line 884) | struct Chord
type Chord (line 886) | struct Chord
type Chord (line 888) | struct Chord
type Chord (line 890) | struct Chord
type Chord (line 892) | struct Chord
type Chord (line 894) | struct Chord
type Chord (line 896) | struct Chord
type Chord (line 898) | struct Chord
type Chord (line 900) | struct Chord
type Chord (line 903) | struct Chord
type Chord (line 905) | struct Chord
type Chord (line 907) | struct Chord
type Chord (line 909) | struct Chord
type Chord (line 911) | struct Chord
type Chord (line 913) | struct Chord
type Chord (line 915) | struct Chord
type Chord (line 917) | struct Chord
type Chord (line 919) | struct Chord
type Chord (line 921) | struct Chord
type Chord (line 923) | struct Chord
type Chord (line 925) | struct Chord
type Chord (line 927) | struct Chord
type Chord (line 929) | struct Chord
type Chord (line 931) | struct Chord
type Chord (line 933) | struct Chord
type Chord (line 935) | struct Chord
type Chord (line 937) | struct Chord
type Chord (line 939) | struct Chord
type Chord (line 941) | struct Chord
type Chord (line 943) | struct Chord
type Chord (line 945) | struct Chord
type Chord (line 947) | struct Chord
type Chord (line 949) | struct Chord
type Chord (line 951) | struct Chord
type Chord (line 953) | struct Chord
type Chord (line 955) | struct Chord
type Chord (line 957) | struct Chord
type Chord (line 959) | struct Chord
type Chord (line 961) | struct Chord
type Chord (line 963) | struct Chord
type Chord (line 965) | struct Chord
type Chord (line 967) | struct Chord
type Chord (line 969) | struct Chord
type Chord (line 971) | struct Chord
type Chord (line 973) | struct Chord
type Chord (line 975) | struct Chord
type Chord (line 977) | struct Chord
type Chord (line 979) | struct Chord
type Chord (line 981) | struct Chord
type Chord (line 983) | struct Chord
type Chord (line 985) | struct Chord
type Chord (line 987) | struct Chord
type Chord (line 989) | struct Chord
type Chord (line 991) | struct Chord
type Chord (line 993) | struct Chord
type Chord (line 995) | struct Chord
type Chord (line 997) | struct Chord
type Chord (line 999) | struct Chord
type Chord (line 1001) | struct Chord
type Chord (line 1003) | struct Chord
type Chord (line 1005) | struct Chord
function are_hashed_keycodes_in_sound (line 1015) | bool are_hashed_keycodes_in_sound(HASH_TYPE keycodes_hash, HASH_TYPE sou...
function keycode_to_index (line 1019) | uint8_t keycode_to_index(uint16_t keycode) {
function sound_keycode_array (line 1023) | void sound_keycode_array(uint16_t keycode) {
function silence_keycode_hash_array (line 1029) | void silence_keycode_hash_array(HASH_TYPE keycode_hash) {
function are_hashed_keycodes_in_array (line 1045) | bool are_hashed_keycodes_in_array(HASH_TYPE keycode_hash) {
function kill_one_shots (line 1056) | void kill_one_shots(void) {
function process_finished_dances (line 1076) | void process_finished_dances(void) {
function keycodes_buffer_array_min (line 1113) | uint8_t keycodes_buffer_array_min(uint8_t* first_keycode_index) {
function remove_subchords (line 1125) | void remove_subchords(void) {
function process_ready_chords (line 1164) | void process_ready_chords(void) {
function deactivate_active_chords (line 1256) | void deactivate_active_chords(uint16_t keycode) {
function process_command (line 1302) | void process_command(void) {
function process_leader (line 1323) | void process_leader(void) {
function process_record_user (line 1339) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function matrix_scan_user (line 1356) | void matrix_scan_user(void) {
function clear (line 1379) | void clear(const struct Chord* self) {
FILE: keyboards/butterstick/sten.c
type MODE (line 28) | enum MODE { STENO = 0, QWERTY, COMMAND }
type MODE (line 29) | enum MODE
type MODE (line 32) | enum MODE
type MODE (line 34) | enum MODE
function send_steno_chord_user (line 54) | bool send_steno_chord_user(steno_mode_t mode, uint8_t chord[6]) {
function process_steno_user (line 151) | bool process_steno_user(uint16_t keycode, keyrecord_t *record) {
function matrix_scan_user (line 206) | void matrix_scan_user(void) {
function processFakeSteno (line 230) | uint32_t processFakeSteno(bool lookup) {
function processChord (line 265) | void processChord(bool useFakeSteno) {
function saveState (line 367) | void saveState(uint32_t cleanChord) {
function restoreState (line 373) | void restoreState() {
function SEND (line 381) | void SEND(uint8_t kc) {
function REPEAT (line 394) | void REPEAT(void) {
function SET_STICKY (line 401) | void SET_STICKY(uint32_t stick) {
function SWITCH_LAYER (line 405) | void SWITCH_LAYER(int layer) {
function CLICK_MOUSE (line 409) | void CLICK_MOUSE(uint8_t kc) {
FILE: keyboards/butterstick/sten.h
type ORDER (line 44) | enum ORDER {
FILE: keyboards/c39/keymaps/kuchosauronad0/keymap.c
function matrix_init_keymap (line 123) | void matrix_init_keymap(void) {
FILE: keyboards/cannonkeys/aella/keymaps/default/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/aella/keymaps/via/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/atlas/keymaps/default/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/atlas/keymaps/via/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/balance/balance.c
function encoder_update_kb (line 19) | bool encoder_update_kb(uint8_t index, bool clockwise) {
FILE: keyboards/cannonkeys/balance/keymaps/default/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/balance/keymaps/via/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/db60/keymaps/default/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/db60/keymaps/iso/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/db60/keymaps/tsangan/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/db60/keymaps/via/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/devastatingtkl/keymaps/default/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/cannonkeys/devastatingtkl/keymaps/via/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/cannonkeys/instant60/keymaps/default/keymap.c
type custom_keycodes (line 27) | enum custom_keycodes {
FILE: keyboards/cannonkeys/instant60/keymaps/tsangan/keymap.c
type custom_keycodes (line 28) | enum custom_keycodes {
FILE: keyboards/cannonkeys/instant65/keymaps/default/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/instant65/keymaps/via/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/iron165/keymaps/default/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/iron165/keymaps/via/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/obliterated75/keymaps/default/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/obliterated75/keymaps/via/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/onyx/keymaps/default/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/cannonkeys/onyx/keymaps/via/keymap.c
type layer_names (line 18) | enum layer_names {
FILE: keyboards/cannonkeys/ortho48/keymaps/default/keymap.c
type custom_keycodes (line 28) | enum custom_keycodes {
FILE: keyboards/cannonkeys/ortho60/keymaps/default/keymap.c
type custom_keycodes (line 28) | enum custom_keycodes {
FILE: keyboards/cannonkeys/ortho75/ortho75.c
function layer_state_set_kb (line 8) | uint32_t layer_state_set_kb(uint32_t state) {
function encoder_update_kb (line 14) | bool encoder_update_kb(uint8_t index, bool clockwise) {
FILE: keyboards/cannonkeys/practice60/keymaps/default/keymap.c
type custom_keycodes (line 27) | enum custom_keycodes {
FILE: keyboards/cannonkeys/practice65/keymaps/default/keymap.c
type custom_keycodes (line 27) | enum custom_keycodes {
FILE: keyboards/cannonkeys/rekt1800/keymaps/default/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/rekt1800/keymaps/via/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/sagittarius/keymaps/default/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/sagittarius/keymaps/via/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/satisfaction75/led.c
function cie_lightness (line 53) | static uint16_t cie_lightness(uint16_t v) {
function backlight_init_ports (line 69) | void backlight_init_ports(void) {
function suspend_power_down_user (line 83) | void suspend_power_down_user(void) {
function suspend_wakeup_init_user (line 86) | void suspend_wakeup_init_user(void) {
function backlight_set (line 98) | void backlight_set(uint8_t level) {
function backlight_task (line 114) | void backlight_task(void) {
function is_breathing (line 126) | bool is_breathing(void) {
function breathing_interrupt_enable (line 134) | void breathing_interrupt_enable(void){
function breathing_interrupt_disable (line 151) | void breathing_interrupt_disable(void){
function breathing_enable (line 156) | void breathing_enable(void)
function breathing_pulse (line 163) | void breathing_pulse(void)
function breathing_disable (line 173) | void breathing_disable(void)
function breathing_self_disable (line 180) | void breathing_self_disable(void)
function breathing_toggle (line 188) | void breathing_toggle(void) {
function breathing_period_set (line 196) | void breathing_period_set(uint8_t value)
function breathing_period_default (line 203) | void breathing_period_default(void) {
function breathing_period_inc (line 207) | void breathing_period_inc(void)
function breathing_period_dec (line 212) | void breathing_period_dec(void)
function scale_backlight (line 223) | static inline uint16_t scale_backlight(uint16_t v) {
function breathing_callback (line 227) | static void breathing_callback(PWMDriver *pwmp)
FILE: keyboards/cannonkeys/satisfaction75/satisfaction75.c
function board_init (line 57) | void board_init(void) {
function backlight_get_value (line 64) | void backlight_get_value( uint8_t *data )
function backlight_set_value (line 84) | void backlight_set_value( uint8_t *data )
function raw_hid_receive_kb (line 111) | void raw_hid_receive_kb( uint8_t *data, uint8_t length )
function read_host_led_state (line 222) | void read_host_led_state(void) {
function layer_state_t (line 247) | layer_state_t layer_state_set_kb(layer_state_t state) {
function process_record_kb (line 254) | bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
function encoder_update_kb (line 303) | bool encoder_update_kb(uint8_t index, bool clockwise) {
function custom_config_reset (line 332) | void custom_config_reset(void){
function backlight_config_save (line 342) | void backlight_config_save(){
function custom_config_load (line 346) | void custom_config_load(){
function via_init_kb (line 356) | void via_init_kb(void)
function matrix_init_kb (line 371) | void matrix_init_kb(void)
function housekeeping_task_kb (line 385) | void housekeeping_task_kb(void) {
function via_eeprom_is_valid (line 422) | bool via_eeprom_is_valid(void)
function via_eeprom_set_valid (line 436) | void via_eeprom_set_valid(bool valid)
function via_eeprom_reset (line 448) | void via_eeprom_reset(void)
FILE: keyboards/cannonkeys/satisfaction75/satisfaction75.h
type backlight_config_t (line 20) | typedef union {
type my_keycodes (line 30) | enum my_keycodes {
type s75_keyboard_value_id (line 36) | enum s75_keyboard_value_id {
type encoder_modes (line 43) | enum encoder_modes {
type custom_encoder_behavior (line 56) | enum custom_encoder_behavior {
type oled_modes (line 62) | enum oled_modes {
FILE: keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c
function pre_encoder_mode_change (line 4) | void pre_encoder_mode_change(){
function post_encoder_mode_change (line 19) | void post_encoder_mode_change(){
function change_encoder_mode (line 30) | void change_encoder_mode(bool negative){
function update_time_config (line 49) | void update_time_config(int8_t increment){
function handle_encoder_clockwise (line 89) | uint16_t handle_encoder_clockwise(){
function handle_encoder_ccw (line 134) | uint16_t handle_encoder_ccw(){
function handle_encoder_press (line 180) | uint16_t handle_encoder_press(){
function retrieve_custom_encoder_config (line 222) | uint16_t retrieve_custom_encoder_config(uint8_t encoder_idx, uint8_t beh...
function set_custom_encoder_config (line 234) | void set_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior, ui...
FILE: keyboards/cannonkeys/satisfaction75/satisfaction_oled.c
function draw_ui (line 4) | __attribute__ ((weak))
function draw_encoder (line 29) | void draw_encoder(int8_t startX, int8_t startY, bool show_legend){
function draw_layer_section (line 70) | void draw_layer_section(int8_t startX, int8_t startY, bool show_legend){
function draw_default (line 80) | void draw_default(){
function draw_clock (line 182) | void draw_clock(){
FILE: keyboards/cannonkeys/savage65/keymaps/default/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/savage65/keymaps/via/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/tmov2/keymaps/brandonschlack/keymap.c
function keyboard_post_init_keymap (line 167) | void keyboard_post_init_keymap(void) {
function layer_state_t (line 171) | layer_state_t layer_state_set_keymap(layer_state_t state) {
FILE: keyboards/cannonkeys/tmov2/keymaps/default/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/tmov2/keymaps/via/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/tsukuyomi/keymaps/default/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/tsukuyomi/keymaps/via/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/vicious40/keymaps/default/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/cannonkeys/vicious40/keymaps/via/keymap.c
type layer_names (line 24) | enum layer_names {
FILE: keyboards/capsunlocked/cu7/keymaps/default/keymap.c
function encoder_update_user (line 33) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/capsunlocked/cu80/v2_ansi/v2_ansi.c
function matrix_init_kb (line 22) | void matrix_init_kb(void) {
function rgb_matrix_indicators_kb (line 28) | void rgb_matrix_indicators_kb(void) {
FILE: keyboards/capsunlocked/cu80/v2_iso/v2_iso.c
function matrix_init_kb (line 21) | void matrix_init_kb(void) {
function rgb_matrix_indicators_kb (line 27) | void rgb_matrix_indicators_kb(void) {
FILE: keyboards/carbo65/carbo65.c
function led_init_ports (line 18) | void led_init_ports(void) {
FILE: keyboards/cassette42/common/oled_helper.c
function render_logo (line 6) | void render_logo(void) {
function update_led_status (line 16) | void update_led_status(void) {
function render_led_status (line 23) | void render_led_status(void) { oled_write(led_buf, false); }
FILE: keyboards/cassette42/keymaps/default/keymap.c
type custom_keycodes (line 21) | enum custom_keycodes {
type layer_number (line 26) | enum layer_number {
function process_record_user (line 43) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function render_status (line 78) | void render_status(void) {
function oled_task_user (line 104) | void oled_task_user(void) {
function encoder_update_user (line 113) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/centromere/centromere.c
function led_init (line 3) | void led_init(void) {
function matrix_init_kb (line 27) | void matrix_init_kb(void) {
FILE: keyboards/centromere/keymaps/default/keymap.c
type centromere_layers (line 3) | enum centromere_layers
function matrix_scan_user (line 53) | void matrix_scan_user(void) {
FILE: keyboards/centromere/keymaps/default_u2/keymap.c
type centromere_layers (line 3) | enum centromere_layers
function matrix_scan_user (line 52) | void matrix_scan_user(void) {
FILE: keyboards/centromere/keymaps/mini/keymap.c
type centromere_layers (line 8) | enum centromere_layers
function layer_state_t (line 116) | layer_state_t layer_state_set_user(layer_state_t state) {
FILE: keyboards/centromere/keymaps/mini_bom/keymap.c
type centromere_layers (line 26) | enum centromere_layers
type combo_events (line 33) | enum combo_events {
FILE: keyboards/centromere/matrix.c
function matrix_init_kb (line 52) | __attribute__ ((weak))
function matrix_scan_kb (line 57) | __attribute__ ((weak))
function matrix_init_user (line 62) | __attribute__ ((weak))
function matrix_scan_user (line 66) | __attribute__ ((weak))
function matrix_rows (line 70) | inline
function matrix_cols (line 75) | inline
function matrix_init (line 80) | void matrix_init(void) {
function matrix_scan (line 86) | uint8_t matrix_scan(void)
function matrix_is_on (line 123) | inline
function matrix_row_t (line 129) | inline
function matrix_print (line 135) | void matrix_print(void)
function matrix_key_count (line 146) | uint8_t matrix_key_count(void)
FILE: keyboards/cest73/tkm/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/checkerboards/nop60/keymaps/via/keymap.c
type nop60_layers (line 21) | enum nop60_layers{
FILE: keyboards/cheshire/curiosity/curiosity.c
function matrix_init_board (line 3) | void matrix_init_board(void){
function led_update_kb (line 9) | bool led_update_kb(led_t led_state) {
FILE: keyboards/cheshire/curiosity/keymaps/crd/keymap.c
type keyboard_layers (line 20) | enum keyboard_layers {
FILE: keyboards/cheshire/curiosity/keymaps/default/keymap.c
type my_layers (line 19) | enum my_layers {
FILE: keyboards/cheshire/curiosity/keymaps/madhatter/keymap.c
type my_layers (line 19) | enum my_layers {
function layer_state_t (line 60) | layer_state_t layer_state_set_user(layer_state_t state) {
function led_update_user (line 75) | bool led_update_user(led_t usb_led) {
FILE: keyboards/chidori/board.c
function board_interface_t (line 54) | static board_interface_t* get_interface(board_info_t* board) {
function board_set_master_led (line 61) | static void board_set_master_led(board_info_t* board, uint8_t led_index,...
function board_set_slave_led (line 68) | static void board_set_slave_led(board_info_t* board, uint8_t led_index, ...
function board_merge_led_config (line 76) | static uint8_t board_merge_led_config(board_info_t* board, uint8_t iodir) {
function board_slave_config (line 83) | static bool board_slave_config(board_info_t* board) {
function board_slave_init (line 118) | static void board_slave_init(void) {
function board_is_master (line 137) | inline bool board_is_master(board_info_t* board) {
function matrix2board (line 144) | inline uint8_t matrix2board(uint8_t row) { return row % NUM_ROWS; }
function board_index (line 146) | inline uint8_t board_index(uint8_t row) { return row / NUM_ROWS; }
function board_info_t (line 148) | static board_info_t* get_master_board(void) {
function board_is_initialized (line 160) | inline bool board_is_initialized(board_info_t* board) { return board == ...
function board_info_t (line 162) | static board_info_t* get_board_by_index(uint8_t board_index) {
function board_info_t (line 172) | static board_info_t* get_board(uint8_t row) {
function board_merge_led_status (line 183) | static uint8_t board_merge_led_status(board_info_t* board, uint8_t data) {
function board_read_slave_cols (line 201) | static uint8_t board_read_slave_cols(board_info_t* board) {
function board_select_slave_row (line 210) | static void board_select_slave_row(board_info_t* board, uint8_t board_ro...
function board_unselect_slave_rows (line 221) | static void board_unselect_slave_rows(board_info_t* board) {
function board_unselect_slave_row (line 231) | static void board_unselect_slave_row(board_info_t* board, uint8_t board_...
function board_read_cols_on_slave_row (line 236) | static bool board_read_cols_on_slave_row(board_info_t* board, matrix_row...
function board_select_master_row (line 258) | static void board_select_master_row(board_info_t* board, uint8_t board_r...
function board_unselect_master_row (line 263) | static void board_unselect_master_row(board_info_t* board, uint8_t board...
function board_unselect_master_rows (line 265) | static void board_unselect_master_rows(board_info_t* board) {
function board_read_cols_on_master_row (line 277) | static bool board_read_cols_on_master_row(board_info_t* board, matrix_ro...
function board_master_init (line 294) | static void board_master_init(void) {
function board_setup (line 305) | static void board_setup(void) {
function board_set_led_by_index (line 317) | void board_set_led_by_index(uint8_t board_index, uint8_t led_index, bool...
function board_read_cols_on_row (line 324) | bool board_read_cols_on_row(matrix_row_t current_matrix[], uint8_t row) {
function board_select_row (line 334) | void board_select_row(uint8_t row) {
function board_unselect_row (line 343) | void board_unselect_row(uint8_t row) {
function board_unselect_rows (line 352) | void board_unselect_rows(void) {
function board_init (line 359) | void board_init(void) {
FILE: keyboards/chidori/board.h
type board_info_t (line 25) | typedef struct board_info_t board_info_t;
type board_interface_t (line 26) | typedef struct board_interface_t board_interface_t;
type board_info_t (line 28) | struct board_info_t {
type board_interface_t (line 39) | struct board_interface_t {
FILE: keyboards/chidori/keymaps/default/keymap.c
type layer_number (line 20) | enum layer_number { _QWERTY = 0, _COLEMAK, _DVORAK, _LOWER, _RAISE, _ADJ...
type custom_keycodes (line 23) | enum custom_keycodes { QWERTY = SAFE_RANGE, COLEMAK, DVORAK }
function layer_state_t (line 140) | layer_state_t layer_state_set_user(layer_state_t state) {
function process_record_user (line 144) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function led_update_user (line 165) | bool led_update_user(led_t led_state) {
FILE: keyboards/chidori/keymaps/extended/keymap.c
type layer_number (line 20) | enum layer_number { _QWERTY = 0, _COLEMAK, _DVORAK, _LOWER, _RAISE, _ADJ...
type custom_keycodes (line 23) | enum custom_keycodes { QWERTY = SAFE_RANGE, COLEMAK, DVORAK }
function layer_state_t (line 140) | layer_state_t layer_state_set_user(layer_state_t state) {
function process_record_user (line 144) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function led_update_user (line 165) | bool led_update_user(led_t led_state) {
FILE: keyboards/chidori/keymaps/oled_sample/keymap.c
type layer_number (line 21) | enum layer_number {
type custom_keycodes (line 31) | enum custom_keycodes {
function layer_state_t (line 152) | layer_state_t layer_state_set_user(layer_state_t state) {
function process_record_user (line 156) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function led_update_user (line 177) | bool led_update_user(led_t led_state) {
function oled_write_layer_state (line 186) | void oled_write_layer_state(void) {
function oled_task_user (line 213) | void oled_task_user(void) {
FILE: keyboards/chidori/matrix.c
function matrix_init_custom (line 22) | void matrix_init_custom(void) {
function matrix_scan_custom (line 27) | bool matrix_scan_custom(matrix_row_t current_matrix[]) {
FILE: keyboards/chimera_ergo/chimera_ergo.c
function led_init (line 3) | void led_init(void) {
function matrix_init_kb (line 11) | void matrix_init_kb(void) {
FILE: keyboards/chimera_ergo/keymaps/default/keymap.c
type chimera_ergo_layers (line 10) | enum chimera_ergo_layers
type custom_keycodes (line 20) | enum custom_keycodes {
function process_record_user (line 94) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function matrix_scan_user (line 133) | void matrix_scan_user(void) {
FILE: keyboards/chimera_ergo/matrix.c
function matrix_init_quantum (line 51) | __attribute__ ((weak))
function matrix_scan_quantum (line 56) | __attribute__ ((weak))
function matrix_init_kb (line 61) | __attribute__ ((weak))
function matrix_scan_kb (line 66) | __attribute__ ((weak))
function matrix_init_user (line 71) | __attribute__ ((weak))
function matrix_scan_user (line 75) | __attribute__ ((weak))
function matrix_rows (line 79) | inline
function matrix_cols (line 84) | inline
function matrix_init (line 89) | void matrix_init(void) {
function matrix_scan (line 95) | uint8_t matrix_scan(void)
function matrix_is_on (line 134) | inline
function matrix_row_t (line 140) | inline
function matrix_print (line 146) | void matrix_print(void)
function matrix_key_count (line 157) | uint8_t matrix_key_count(void)
FILE: keyboards/chimera_ls/chimera_ls.c
function led_init (line 3) | void led_init(void) {
function matrix_init_kb (line 11) | void matrix_init_kb(void) {
FILE: keyboards/chimera_ls/keymaps/default/keymap.c
type chimera_lets_split_layers (line 10) | enum chimera_lets_split_layers
type custom_keycodes (line 29) | enum custom_keycodes {
function process_record_user (line 118) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function matrix_scan_user (line 160) | void matrix_scan_user(void) {
FILE: keyboards/chimera_ls/matrix.c
function matrix_init_quantum (line 56) | __attribute__ ((weak))
function matrix_scan_quantum (line 61) | __attribute__ ((weak))
function matrix_init_kb (line 66) | __attribute__ ((weak))
function matrix_scan_kb (line 71) | __attribute__ ((weak))
function matrix_init_user (line 76) | __attribute__ ((weak))
function matrix_scan_user (line 80) | __attribute__ ((weak))
function matrix_rows (line 84) | inline
function matrix_cols (line 89) | inline
function matrix_init (line 94) | void matrix_init(void) {
function matrix_scan (line 99) | uint8_t matrix_scan(void)
function matrix_is_on (line 138) | inline
function matrix_row_t (line 144) | inline
function matrix_print (line 150) | void matrix_print(void)
function matrix_key_count (line 161) | uint8_t matrix_key_count(void)
FILE: keyboards/chimera_ortho/chimera_ortho.c
function led_init (line 3) | void led_init(void) {
function matrix_init_kb (line 11) | void matrix_init_kb(void) {
FILE: keyboards/chimera_ortho/keymaps/default/keymap.c
type chimera_ortho_layers (line 10) | enum chimera_ortho_layers {
type custom_keycodes (line 31) | enum custom_keycodes {
function process_record_user (line 116) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function matrix_scan_user (line 153) | void matrix_scan_user(void) {
FILE: keyboards/chimera_ortho/matrix.c
function matrix_init_kb (line 51) | __attribute__ ((weak))
function matrix_scan_kb (line 56) | __attribute__ ((weak))
function matrix_init_user (line 61) | __attribute__ ((weak))
function matrix_scan_user (line 65) | __attribute__ ((weak))
function matrix_rows (line 69) | inline
function matrix_cols (line 74) | inline
function matrix_init (line 79) | void matrix_init(void) {
function matrix_scan (line 85) | uint8_t matrix_scan(void)
function matrix_is_on (line 124) | inline
function matrix_row_t (line 130) | inline
function matrix_print (line 136) | void matrix_print(void)
function matrix_key_count (line 147) | uint8_t matrix_key_count(void)
FILE: keyboards/chimera_ortho_plus/chimera_ortho_plus.c
function led_init (line 3) | void led_init(void) {
function matrix_init_kb (line 13) | void matrix_init_kb(void) {
FILE: keyboards/chimera_ortho_plus/keymaps/default/keymap.c
type chimera_ortho_plus_layers (line 7) | enum chimera_ortho_plus_layers {
type custom_keycodes (line 28) | enum custom_keycodes {
function process_record_user (line 124) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function matrix_scan_user (line 159) | void matrix_scan_user(void) {
FILE: keyboards/chimera_ortho_plus/matrix.c
function matrix_init_kb (line 51) | __attribute__ ((weak))
function matrix_scan_kb (line 56) | __attribute__ ((weak))
function matrix_init_user (line 61) | __attribute__ ((weak))
function matrix_scan_user (line 65) | __attribute__ ((weak))
function matrix_rows (line 69) | inline
function matrix_cols (line 74) | inline
function matrix_init (line 79) | void matrix_init(void) {
function matrix_scan (line 85) | uint8_t matrix_scan(void)
function matrix_is_on (line 124) | inline
function matrix_row_t (line 130) | inline
function matrix_print (line 136) | void matrix_print(void)
function matrix_key_count (line 147) | uint8_t matrix_key_count(void)
FILE: keyboards/choc_taro/matrix.c
function select_row (line 33) | static void select_row(uint8_t row) {
function unselect_row (line 38) | static void unselect_row(uint8_t row) {
function unselect_rows (line 42) | static void unselect_rows(void) {
function select_col (line 48) | static void select_col(uint8_t col) {
function unselect_col (line 53) | static void unselect_col(uint8_t col) {
function unselect_cols (line 57) | static void unselect_cols(void) {
function init_pins (line 63) | static void init_pins(void) {
function read_cols_on_row (line 76) | static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t curr...
function read_rows_on_col (line 103) | static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t curr...
function matrix_init_custom (line 137) | void matrix_init_custom(void) {
function matrix_scan_custom (line 142) | bool matrix_scan_custom(matrix_row_t current_matrix[]) {
FILE: keyboards/choco60/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/christmas_tree/keymaps/default/keymap.c
type layers (line 20) | enum layers {
type custom_keycodes (line 25) | enum custom_keycodes {
function process_record_user (line 65) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/ck60i/ck60i.c
function encoder_update_kb (line 20) | bool encoder_update_kb(uint8_t index, bool clockwise) {
FILE: keyboards/ckeys/handwire_101/keymaps/default/keymap.c
type layers (line 19) | enum layers {
type custom_keycodes (line 29) | enum custom_keycodes {
function process_record_user (line 161) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/ckeys/obelus/keymaps/default/keymap.c
function process_record_user (line 109) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/ckeys/obelus/obelus.c
function matrix_init_kb (line 3) | void matrix_init_kb(void) {
FILE: keyboards/ckeys/thedora/keymaps/default/keymap.c
type layers (line 3) | enum layers {
function process_record_user (line 143) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function encoder_update_user (line 147) | bool encoder_update_user(uint8_t index, bool clockwise) {
FILE: keyboards/ckeys/washington/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
function encoder_update_user (line 42) | bool encoder_update_user(uint8_t index, bool clockwise) {
function oled_task_user (line 62) | void oled_task_user(void) {
FILE: keyboards/claw44/keymaps/default/keymap.c
type layer_number (line 23) | enum layer_number {
FILE: keyboards/claw44/keymaps/oled/keymap.c
type layer_number (line 24) | enum layer_number {
function render_layer_state (line 89) | void render_layer_state(void) {
function render_logo (line 108) | void render_logo(void) {
function set_keylog (line 119) | void set_keylog(uint16_t keycode, keyrecord_t *record) {
function oled_task_user (line 143) | void oled_task_user(void) {
function process_record_user (line 153) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function oled_rotation_t (line 160) | oled_rotation_t oled_init_user(oled_rotation_t rotation) {
FILE: keyboards/claw44/keymaps/via/keymap.c
type layer_number (line 23) | enum layer_number {
FILE: keyboards/clueboard/17/17.c
function backlight_init_ports (line 5) | void backlight_init_ports(void) {
function backlight_set (line 16) | void backlight_set(uint8_t level) {
FILE: keyboards/clueboard/2x1800/2018/keymaps/default_7u/keymap.c
function matrix_init_user (line 38) | void matrix_init_user(void) {
function matrix_scan_user (line 42) | void matrix_scan_user(void) {
FILE: keyboards/clueboard/2x1800/2018/keymaps/macroboard/keymap.c
type custom_keycodes (line 18) | enum custom_keycodes {
function process_record_user (line 54) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/clueboard/2x1800/2019/2019.c
function matrix_init_kb (line 18) | void matrix_init_kb(void) {
function check_encoder_buttons (line 40) | void check_encoder_buttons(void) {
function matrix_scan_kb (line 64) | void matrix_scan_kb(void) {
function process_record_kb (line 91) | bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
function led_update_kb (line 136) | bool led_update_kb(led_t led_state) {
function encoder_update_keymap (line 147) | __attribute__((weak)) bool encoder_update_keymap(uint8_t index, bool clo...
function encoder_update_user (line 148) | __attribute__((weak)) bool encoder_update_user(uint8_t index, bool clock...
function encoder_update_kb (line 150) | bool encoder_update_kb(uint8_t index, bool clockwise) {
FILE: keyboards/clueboard/2x1800/2019/2019.h
type TWOx1800_keycodes (line 20) | enum TWOx1800_keycodes {
FILE: keyboards/clueboard/2x1800/2021/2021.c
function matrix_scan_kb (line 24) | void matrix_scan_kb(void) {
function matrix_init_kb (line 32) | void matrix_init_kb(void) {
function encoder_update_keymap (line 95) | __attribute__ ((weak))
function encoder_update_kb (line 103) | bool encoder_update_kb(uint8_t index, bool clockwise) {
FILE: keyboards/clueboard/2x1800/2021/keymaps/default_7u/keymap.c
function matrix_init_user (line 38) | void matrix_init_user(void) {
function matrix_scan_user (line 42) | void matrix_scan_user(void) {
FILE: keyboards/clueboard/2x1800/2021/keymaps/signboard/keymap.c
type custom_keycodes (line 5) | enum custom_keycodes {
function process_record_user (line 25) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/clueboard/2x1800/2021/max7219.c
function max7219_write_all (line 53) | void max7219_write_all(void) {
function max7219_write_frame (line 68) | void max7219_write_frame(void) {
function max7219_message_sign (line 93) | void max7219_message_sign(uint8_t message[][6], size_t message_len) {
function max7219_message_sign_task (line 122) | void max7219_message_sign_task(bool loop_message) {
function max7219_write (line 157) | void max7219_write(int device_num, volatile uint8_t opcode, volatile uin...
function max7219_clear_display (line 176) | void max7219_clear_display(void) {
function max7219_display_test (line 189) | void max7219_display_test(int device_num, bool enabled) {
function max7219_init (line 201) | void max7219_init(void) {
function max7219_set_decode_mode (line 239) | void max7219_set_decode_mode(int device_num, int mode) {
function max7219_set_intensity (line 251) | void max7219_set_intensity(int device_num, int intensity) {
function max7219_set_led (line 265) | void max7219_set_led(int row, int column, bool state) {
function max7219_set_scan_limit (line 296) | void max7219_set_scan_limit(int device_num, int limit) {
function max7219_shutdown (line 310) | void max7219_shutdown(int device_num, bool shutdown) {
FILE: keyboards/clueboard/60/keymaps/default/keymap.c
type keyboard_layers (line 3) | enum keyboard_layers {
type custom_keycodes (line 9) | enum custom_keycodes {
function process_record_user (line 67) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/clueboard/60/keymaps/default_aek/keymap.c
type keyboard_layers (line 3) | enum keyboard_layers {
FILE: keyboards/clueboard/60/led.c
function backlight_init_ports (line 24) | void backlight_init_ports(void) {
function backlight_set (line 31) | void backlight_set(uint8_t level) {
FILE: keyboards/clueboard/66/keymaps/magicmonty/keymap.c
type custom_keycodes (line 43) | enum custom_keycodes {
function process_record_user (line 107) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
type layer_id (line 119) | enum layer_id {
function clueboard_set_led (line 130) | void clueboard_set_led(uint8_t id, uint8_t val) {
function clueboard_set_midi_led (line 170) | void clueboard_set_midi_led(uint8_t base_oct, uint8_t val)
function matrix_scan_user (line 196) | void matrix_scan_user(void) {
FILE: keyboards/clueboard/66/keymaps/muzfuz/keymap.c
type custom_keycodes (line 17) | enum custom_keycodes {
function process_record_user (line 60) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/clueboard/66/keymaps/smt/keymap.c
type planck_keycodes (line 13) | enum planck_keycodes {
function persistent_default_layer_set (line 105) | void persistent_default_layer_set(uint16_t default_layer) {
function process_record_user (line 110) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/clueboard/66/keymaps/tetris/keymap.c
type custom_keycodes (line 12) | enum custom_keycodes {
function process_record_user (line 54) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function matrix_scan_user (line 97) | void matrix_scan_user(void) {
function tetris_send_up (line 111) | void tetris_send_up(void) {
function tetris_send_left (line 114) | void tetris_send_left(void) {
function tetris_send_down (line 117) | void tetris_send_down(void) {
function tetris_send_right (line 120) | void tetris_send_right(void) {
function tetris_send_backspace (line 123) | void tetris_send_backspace(void) {
function tetris_send_delete (line 126) | void tetris_send_delete(void) {
function tetris_send_string (line 130) | void tetris_send_string(const char *s) {
function tetris_send_newline (line 148) | void tetris_send_newline(void) {
function tetris_get_keypress (line 152) | int tetris_get_keypress(void) {
FILE: keyboards/clueboard/66/keymaps/tetris/tetris_text.c
function clear_piece (line 36) | static void clear_piece(char piece[7][7]) {
function copy_piece_from_to (line 44) | static void copy_piece_from_to(char from[7][7], char to[7][7]) {
function rotate_piece (line 52) | static void rotate_piece(char piece[7][7]) {
function get_shape_char (line 72) | static char get_shape_char(int shape) {
function set_piece (line 85) | static void set_piece(char piece[7][7], int shape, int rotation) {
function send_deletes (line 186) | static void send_deletes(int deletes) {
function send_backspaces (line 192) | static void send_backspaces(int backspaces) {
function send_goto_xy (line 199) | static void send_goto_xy(int x, int y) {
function draw_row (line 218) | static void draw_row(char c, const char oldrow[7], const char newrow[7],...
function move_piece_from_to (line 254) | static void move_piece_from_to(char from[7][7], char to[7][7], int xadd,...
function draw_piece (line 266) | static void draw_piece(char c, int x, int y, char oldpiece[7][7], char p...
function draw_piece_moved (line 272) | static void draw_piece_moved(char c, int x, int y, char piece[7][7], int...
function is_piece_hitting (line 277) | static int is_piece_hitting(char board[20][10], char piece[7][7], int x,...
function add_piece_to_board (line 291) | static void add_piece_to_board(char piece[7][7], char board[20][10], int...
function draw_board_line (line 301) | static void draw_board_line(void) {
function init (line 306) | static void init(void) {
function get_piece_min_y (line 315) | static int get_piece_min_y(char piece[7][7]) {
function clear_lines (line 325) | static int clear_lines(char board[20][10]) {
function myrandom (line 369) | static uint8_t myrandom(uint8_t seed) {
function tetris_start (line 391) | void tetris_start(uint8_t seed) {
function tetris_tick (line 418) | int tetris_tick(int ms_since_previous_tick) {
FILE: keyboards/clueboard/66/rev2/rev2.c
function backlight_init_ports (line 4) | void backlight_init_ports(void) {
function backlight_set (line 17) | void backlight_set(uint8_t level) {
FILE: keyboards/clueboard/66/rev3/rev3.c
function backlight_init_ports (line 4) | void backlight_init_ports(void) {
function backlight_set (line 17) | void backlight_set(uint8_t level) {
FILE: keyboards/clueboard/66/rev4/rev4.c
function led_init_ports (line 3) | void led_init_ports(void) {
function led_update_kb (line 15) | bool led_update_kb(led_t led_state) {
FILE: keyboards/clueboard/66_hotswap/gen1/keymaps/default/keymap.c
type custom_keycodes (line 25) | enum custom_keycodes {
function process_record_user (line 79) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/clueboard/66_hotswap/prototype/keymaps/default/keymap.c
type custom_keycodes (line 25) | enum custom_keycodes {
function process_record_user (line 79) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/clueboard/66_hotswap/prototype/prototype.c
function backlight_init_ports (line 4) | void backlight_init_ports(void) {
function backlight_set (line 17) | void backlight_set(uint8_t level) {
FILE: keyboards/clueboard/card/card.c
function backlight_init_ports (line 7) | void backlight_init_ports(void)
function backlight_set (line 22) | void backlight_set(uint8_t level)
FILE: keyboards/clueboard/card/keymaps/default/keymap.c
type custom_keycodes (line 3) | enum custom_keycodes {
function process_record_user (line 32) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/coarse/ixora/keymaps/wntrmln/keymap.c
function matrix_init_user (line 16) | void matrix_init_user(void) {
function matrix_scan_user (line 20) | void matrix_scan_user(void) {
function process_record_user (line 24) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/cocoa40/keymaps/default/keymap.c
type layer_names (line 19) | enum layer_names {
FILE: keyboards/comet46/i2c.c
function i2c_delay (line 27) | inline static
function i2c_master_init (line 38) | void i2c_master_init(void) {
function i2c_master_start (line 50) | uint8_t i2c_master_start(uint8_t address) {
function i2c_master_stop (line 72) | void i2c_master_stop(void) {
function i2c_master_write (line 83) | uint8_t i2c_master_write(uint8_t data) {
function i2c_master_read (line 96) | uint8_t i2c_master_read(int ack) {
function i2c_reset_state (line 103) | void i2c_reset_state(void) {
function i2c_slave_init (line 107) | void i2c_slave_init(uint8_t address) {
function ISR (line 118) | ISR(TWI_vect) {
FILE: keyboards/comet46/i2c.h
function i2c_start_read (line 32) | static inline unsigned char i2c_start_read(unsigned char addr) {
function i2c_start_write (line 36) | static inline unsigned char i2c_start_write(unsigned char addr) {
FILE: keyboards/comet46/keymaps/default-rgbled/keymap.c
type comet46_layers (line 10) | enum comet46_layers
type custom_keycodes (line 20) | enum custom_keycodes {
function layer_state_t (line 143) | layer_state_t layer_state_set_user(layer_state_t state) {
function led_init (line 148) | void led_init(void) {
function matrix_init_user (line 171) | void matrix_init_user(void) {
function matrix_scan_user (line 175) | void matrix_scan_user(void) {
function process_record_user (line 204) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/comet46/keymaps/default/keymap.c
type comet46_layers (line 14) | enum comet46_layers
type custom_keycodes (line 24) | enum custom_keycodes {
function layer_state_t (line 147) | layer_state_t layer_state_set_user(layer_state_t state) {
function matrix_init_user (line 160) | void matrix_init_user(void) {
function matrix_scan_user (line 164) | void matrix_scan_user(void) {
function matrix_update (line 168) | void matrix_update(struct CharacterMatrix *dest, const struct CharacterM...
function render_status (line 175) | void render_status(struct CharacterMatrix *matrix) {
function iota_gfx_task_user (line 220) | void iota_gfx_task_user(void) {
function process_record_user (line 229) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/comet46/keymaps/satt/action_pseudo_lut.c
function action_pseudo_lut (line 13) | void action_pseudo_lut(keyrecord_t *record, uint8_t base_keymap_id, cons...
function convert_keycode (line 81) | uint16_t convert_keycode(const uint16_t (*keymap)[2], uint16_t keycode, ...
function get_shift_bit (line 120) | uint8_t get_shift_bit(uint16_t keycode) {
function add_shift_bit (line 129) | void add_shift_bit(uint16_t keycode) {
function del_shift_bit (line 137) | void del_shift_bit(uint16_t keycode) {
FILE: keyboards/comet46/keymaps/satt/keymap.c
type comet46_layers (line 16) | enum comet46_layers {
type custom_keycodes (line 26) | enum custom_keycodes {
function layer_state_t (line 167) | layer_state_t layer_state_set_user(layer_state_t state) {
function matrix_init_user (line 188) | void matrix_init_user(void) {
function matrix_scan_user (line 192) | void matrix_scan_user(void) {
function matrix_update (line 196) | void matrix_update(struct CharacterMatrix *dest, const struct CharacterM...
function render_status (line 203) | void render_status(struct CharacterMatrix *matrix) {
function iota_gfx_task_user (line 250) | void iota_gfx_task_user(void) {
function process_record_user (line 266) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/comet46/lib/keylogger.c
function set_keylog (line 270) | void set_keylog(uint16_t keycode)
FILE: keyboards/comet46/matrix.c
function matrix_init_kb (line 51) | __attribute__ ((weak))
function matrix_scan_kb (line 56) | __attribute__ ((weak))
function matrix_init_user (line 61) | __attribute__ ((weak))
function matrix_scan_user (line 65) | __attribute__ ((weak))
function matrix_rows (line 69) | inline
function matrix_cols (line 74) | inline
function matrix_init (line 79) | void matrix_init(void) {
function matrix_scan (line 85) | uint8_t matrix_scan(void)
function matrix_is_on (line 124) | inline
function matrix_row_t (line 130) | inline
function matrix_print (line 136) | void matrix_print(void)
function matrix_key_count (line 147) | uint8_t matrix_key_count(void)
FILE: keyboards/comet46/ssd1306.c
type CharacterMatrix (line 13) | struct CharacterMatrix
function _send_cmd1 (line 39) | static inline bool _send_cmd1(uint8_t cmd) {
function _send_cmd2 (line 65) | static inline bool _send_cmd2(uint8_t cmd, uint8_t opr) {
function _send_cmd3 (line 74) | static inline bool _send_cmd3(uint8_t cmd, uint8_t opr1, uint8_t opr2) {
function clear_display (line 88) | static void clear_display(void) {
function capture_sendchar (line 117) | static int8_t capture_sendchar(uint8_t c) {
function iota_gfx_init (line 128) | bool iota_gfx_init(bool rotate) {
function iota_gfx_off (line 178) | bool iota_gfx_off(void) {
function iota_gfx_on (line 188) | bool iota_gfx_on(void) {
function matrix_write_char_inner (line 198) | void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) {
function matrix_write_char (line 211) | void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) {
function iota_gfx_write_char (line 228) | void iota_gfx_write_char(uint8_t c) {
function matrix_write (line 232) | void matrix_write(struct CharacterMatrix *matrix, const char *data) {
function matrix_write_ln (line 240) | void matrix_write_ln(struct CharacterMatrix *matrix, const char *data) {
function iota_gfx_write (line 246) | void iota_gfx_write(const char *data) {
function matrix_write_P (line 250) | void matrix_write_P(struct CharacterMatrix *matrix, const char *data) {
function iota_gfx_write_P (line 261) | void iota_gfx_write_P(const char *data) {
function matrix_clear (line 265) | void matrix_clear(struct CharacterMatrix *matrix) {
function iota_gfx_clear_screen (line 271) | void iota_gfx_clear_screen(void) {
function matrix_render (line 275) | void matrix_render(struct CharacterMatrix *matrix) {
function iota_gfx_flush (line 317) | void iota_gfx_flush(void) {
function iota_gfx_task_user (line 321) | __attribute__ ((weak))
function iota_gfx_task (line 325) | void iota_gfx_task(void) {
function process_record_gfx (line 338) | bool process_record_gfx(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/comet46/ssd1306.h
type ssd1306_cmds (line 7) | enum ssd1306_cmds {
type CharacterMatrix (line 62) | struct CharacterMatrix {
type CharacterMatrix (line 68) | struct CharacterMatrix
type CharacterMatrix (line 82) | struct CharacterMatrix
type CharacterMatrix (line 83) | struct CharacterMatrix
type CharacterMatrix (line 84) | struct CharacterMatrix
type CharacterMatrix (line 85) | struct CharacterMatrix
type CharacterMatrix (line 86) | struct CharacterMatrix
type CharacterMatrix (line 87) | struct CharacterMatrix
type CharacterMatrix (line 88) | struct CharacterMatrix
FILE: keyboards/compound/keymaps/default/keymap.c
type _layer (line 20) | enum _layer {
FILE: keyboards/contra/keymaps/alper/keymap.c
type planck_layers (line 19) | enum planck_layers {
type planck_keycodes (line 28) | enum planck_keycodes {
function process_record_user (line 148) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/contra/keymaps/basic/keymap.c
type planck_layers (line 21) | enum planck_layers {
type planck_keycodes (line 29) | enum planck_keycodes {
function process_record_user (line 130) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/contra/keymaps/bramver/keymap.c
type emoji_map (line 18) | enum emoji_map {
function matrix_init_user (line 124) | void matrix_init_user(void) {
FILE: keyboards/contra/keymaps/deastiny/keymap.c
type planck_layers (line 22) | enum planck_layers {
type planck_keycodes (line 29) | enum planck_keycodes {
function process_record_user (line 111) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/contra/keymaps/default/keymap.c
type planck_layers (line 20) | enum planck_layers {
type planck_keycodes (line 30) | enum planck_keycodes {
function process_record_user (line 178) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/contra/keymaps/erovia/keymap.c
type planck_layers (line 5) | enum planck_layers {
type planck_keycodes (line 13) | enum planck_keycodes {
function process_record_user (line 127) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/contra/keymaps/maxr1998/keymap.c
type contra_layers (line 20) | enum contra_layers {
function process_record_user (line 137) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
function update_tri_layer_user (line 170) | void update_tri_layer_user(void) {
function led_set_user (line 179) | void led_set_user(uint8_t usb_led) {
FILE: keyboards/contra/keymaps/msiu/keymap.c
type planck_layers (line 5) | enum planck_layers {
type planck_keycodes (line 15) | enum planck_keycodes {
function process_record_user (line 131) | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
FILE: keyboards/contra/keymaps/ryanm101/keymap.c
type custom_keycodes (line 18) | enum custom_keycodes {
function paranthesis_dance (line 144) | void paranthesis_dance (qk_tap_dance_state_t *state, void *user_data) {
function curly_dance (line 154) | void curly_dance (qk_tap_dance_state_t *state, void *user_data) {
function square_dance (line 164) | void square_dance (qk_tap_dance_state_t *state, void *user_data) {
function angular_dance (line 174) | void angular_dance (qk_tap_dance_state_t *state, void *user_data) {
function tmux_dance (line 184) | void tmux_dance (qk_tap_dance_state_t *state, void *user_data) {
function cmd_dance (line 197) | void cmd_dance (qk_tap_dance_state_t *state, void *user_data) {
function cmd_sft_slash_pipe_down (line 222) | void cmd_sft_slash_pipe_down (qk_tap_dance_state_t *state, void *user_da...
function cmd_sft_slash_pipe_up (line 235) | void cmd_sft_slash_pipe_up (qk_tap_dance_state_t *state, void *user_data) {
FILE: keyboards/contra/keymaps/via/keymap.c
type planck_layers (line 18) | enum planck_layers {
FILE: keyboards/converter/adb_usb/led.c
function led_set (line 24) | void led_set(uint8_t usb_led)
FILE: keyboards/converter/adb_usb/matrix.c
function matrix_init_kb (line 41) | __attribute__ ((weak))
function matrix_scan_kb (line 46) | __attribute__ ((weak))
function matrix_init_user (line 51) | __attribute__ ((weak))
function matrix_scan_user (line 55) | __attribute__ ((weak))
function matrix_init (line 59) | void matrix_init(void)
function adb_mouse_task (line 87) | void adb_mouse_task(void)
function matrix_scan (line 145) | uint8_t matrix_scan(void)
function matrix_print (line 240) | void matrix_print(void){
function matrix_row_t (line 244) | inline
function register_key (line 250) | inline
FILE: keyboards/converter/hp_46010a/matrix.c
function matrix_init_quantum (line 53) | __attribute__ ((weak))
function matrix_scan_quantum (line 58) | __attribute__ ((weak))
function matrix_init_kb (line 63) | __attribute__ ((weak))
function matrix_scan_kb (line 68) | __attribute__ ((weak))
function matrix_init_user (line 73) | __attribute__ ((weak))
function matrix_scan_user (line 77) | __attribute__ ((weak))
function SCLK_increment (line 100) | inline
function Matrix_Reset (line 111) | inline
function Matrix_ReceiveByte (line 121) | inline
function Matrix_ThrowByte (line 136) | inline
function matrix_init (line 148) | void matrix_init () {
function matrix_scan
Copy disabled (too large)
Download .json
Condensed preview — 27595 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (84,832K chars).
[
{
"path": ".clang-format",
"chars": 673,
"preview": "---\nBasedOnStyle: Google\nAlignAfterOpenBracket: Align\nAlignConsecutiveAssignments: 'true'\nAlignConsecutiveDeclarations: "
},
{
"path": ".editorconfig",
"chars": 891,
"preview": "# EditorConfig helps developers define and maintain consistent coding styles between different editors and IDEs\n# editor"
},
{
"path": ".gitattributes",
"chars": 1454,
"preview": "# auto for anything unspecified\n* text=auto\n\n# sources\n*.c text\n*.cc text\n*.cxx text\n*.cpp text\n*.c++ text\n*.hpp text\n*."
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 1013,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve QMK Firmware.\ntitle: \"[Bug] \"\nlabels: bug, help wanted\nas"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 263,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: QMK Discord\n url: https://discord.gg/Uq7gcHh\n about: Ask ques"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 867,
"preview": "---\nname: Feature request\nabout: Suggest a new feature or changes to existing features.\ntitle: \"[Feature Request] \"\nlabe"
},
{
"path": ".github/ISSUE_TEMPLATE/other_issues.md",
"chars": 521,
"preview": "---\nname: Other issues\nabout: Anything else that doesn't fall into the above categories.\ntitle: ''\nlabels: help wanted, "
},
{
"path": ".github/ISSUE_TEMPLATE/zzz_blank.md",
"chars": 188,
"preview": "---\nname: Blank issue\nabout: If you're 100% sure that you don't need one of the other issue templates, use\n this one in"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 1517,
"preview": "<!--- Provide a general summary of your changes in the title above. -->\n\n<!--- This template is entirely optional and ca"
},
{
"path": ".github/labeler.yml",
"chars": 672,
"preview": "core:\n - quantum/**/*\n - tmk_core/**/*\n - drivers/**/*\n - tests/**/*\n - util/**/*\n - platforms/**/*\n - Makefile\n "
},
{
"path": ".github/stale.yml",
"chars": 2290,
"preview": "# Configuration for probot-stale - https://github.com/probot/stale\n\n# General configuration\n\n# Pull request specific con"
},
{
"path": ".github/workflows/api.yml",
"chars": 934,
"preview": "name: Update API Data\n\non:\n push:\n branches:\n - master\n paths:\n - 'keyboards/**'\n - 'layouts/community/*"
},
{
"path": ".github/workflows/auto_tag.yaml",
"chars": 635,
"preview": "name: Essential files modified\n\non:\n push:\n branches:\n - master\n paths:\n - quantum/**/*\n - tmk_core/**/*"
},
{
"path": ".github/workflows/build_bmp_default.yml",
"chars": 1526,
"preview": "# This is a basic workflow to help you get started with Actions\n\nname: Build default firmware for BLE Micro Pro\n\n# Contr"
},
{
"path": ".github/workflows/cli.yml",
"chars": 473,
"preview": "name: CLI CI\n\non:\n push:\n branches:\n - master\n - future\n pull_request:\n paths:\n - 'lib/python/**'\n -"
},
{
"path": ".github/workflows/develop_api.yml",
"chars": 940,
"preview": "name: Update Develop API Data\n\non:\n push:\n branches:\n - develop\n paths:\n - 'keyboards/**'\n - 'layouts/co"
},
{
"path": ".github/workflows/develop_update.yml",
"chars": 794,
"preview": "name: Update develop after master merge\n\non:\n push:\n branches:\n - master\n\n\njobs:\n develop_update:\n runs-on: u"
},
{
"path": ".github/workflows/docs.yml",
"chars": 929,
"preview": "name: Generate Docs\n\non:\n push:\n branches:\n - master\n paths:\n - 'tmk_core/**'\n - 'quantum/**'\n - 'pla"
},
{
"path": ".github/workflows/format.yaml",
"chars": 826,
"preview": "name: PR Lint Format\n\non:\n pull_request:\n paths:\n - 'drivers/**'\n - 'lib/arm_atsam/**'\n - 'lib/lib8tion/**'"
},
{
"path": ".github/workflows/labeler.yml",
"chars": 326,
"preview": "name: \"Pull Request Labeler\"\n\non:\n pull_request_target:\n types: [opened, synchronize, reopened, ready_for_review, lo"
},
{
"path": ".github/workflows/lint.yml",
"chars": 1353,
"preview": "name: PR Lint keyboards\n\non:\n pull_request:\n paths:\n - 'keyboards/**'\n\njobs:\n lint:\n runs-on: ubuntu-latest\n\n"
},
{
"path": ".gitignore",
"chars": 1206,
"preview": "# Junk files\n*.bak\n*.swp\n*~\n.DS_Store\n\n# Build artifacts\n.clang_complete\n.build/\n*.elf\n*.log\n*.lss\n*.lst\n*.map\n*.o\n*.sta"
},
{
"path": ".gitmodules",
"chars": 643,
"preview": "[submodule \"lib/chibios\"]\n\tpath = lib/chibios\n\turl = https://github.com/qmk/ChibiOS\n\tbranch = master\n[submodule \"lib/chi"
},
{
"path": ".vscode/extensions.json",
"chars": 259,
"preview": "// Suggested extensions\n{\n \"recommendations\": [\n \"EditorConfig.EditorConfig\",\n \"xaver.clang-format\",\n \"ms-vsco"
},
{
"path": ".vscode/settings.json",
"chars": 972,
"preview": "// Place your settings in this file to overwrite default and user settings.\n{\n // Unofficially, QMK uses spaces for i"
},
{
"path": "Dockerfile",
"chars": 100,
"preview": "FROM qmkfm/qmk_cli\n\nVOLUME /qmk_firmware\nWORKDIR /qmk_firmware\n\nCMD qmk compile -kb all -km default\n"
},
{
"path": "Doxyfile",
"chars": 8640,
"preview": "# Doxyfile 1.8.14\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org)"
},
{
"path": "LICENSE",
"chars": 18092,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 2, June 1991\n\n Copyright (C) 1989, 1991 Fr"
},
{
"path": "Makefile",
"chars": 21584,
"preview": "ifndef VERBOSE\n.SILENT:\nendif\n\n# Never run this makefile in parallel, as it could screw things up\n# It won't affect the "
},
{
"path": "Vagrantfile",
"chars": 3195,
"preview": "# -*- mode: ruby -*-\n# vi: set ft=ruby :\n\nVagrant.configure(2) do |config|\n # define a name instead of just 'default'\n "
},
{
"path": "api_data/_config.yml",
"chars": 27,
"preview": "theme: jekyll-theme-cayman\n"
},
{
"path": "api_data/readme.md",
"chars": 271,
"preview": "# QMK Keyboard Metadata\n\nThis directory contains machine parsable data about keyboards supported by QMK. The latest vers"
},
{
"path": "bin/qmk",
"chars": 1434,
"preview": "#!/usr/bin/env python3\n\"\"\"CLI wrapper for running QMK commands.\n\"\"\"\nimport os\nimport sys\nfrom pathlib import Path\n\n# Add"
},
{
"path": "book.json",
"chars": 1040,
"preview": "{\n \"structure\": {\n \"summary\": \"_summary.md\"\n },\n \"plugins\" : [\n \"edit-link\",\n \"forkmegithub\",\n"
},
{
"path": "bootloader.mk",
"chars": 5407,
"preview": "# Copyright 2017 Jack Humbert\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the te"
},
{
"path": "build_full_test.mk",
"chars": 1155,
"preview": "# Copyright 2017 Fred Sundvik\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the te"
},
{
"path": "build_json.mk",
"chars": 821,
"preview": "# Look for a json keymap file\nifneq (\"$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.json)\",\"\")\n KEYMAP_JSON := $(MAIN_KEYMA"
},
{
"path": "build_keyboard.mk",
"chars": 15513,
"preview": "# Determine what keyboard we are building and setup the build environment.\n#\n# We support folders up to 5 levels deep be"
},
{
"path": "build_layout.mk",
"chars": 1122,
"preview": "LAYOUTS_PATH := layouts\nLAYOUTS_REPOS := $(patsubst %/,%,$(sort $(dir $(wildcard $(LAYOUTS_PATH)/*/))))\n\ndefine SEARCH_L"
},
{
"path": "build_test.mk",
"chars": 1706,
"preview": "ifndef VERBOSE\n.SILENT:\nendif\n\n.DEFAULT_GOAL := all\n\ninclude common.mk\n\nTARGET=test/$(TEST)\n\nGTEST_OUTPUT = $(BUILD_DIR)"
},
{
"path": "common.mk",
"chars": 637,
"preview": "include message.mk\n\n# Directory common source files exist\nTOP_DIR = .\nTMK_DIR = tmk_core\nTMK_PATH = $(TMK_DIR)\nLIB_PATH "
},
{
"path": "common_features.mk",
"chars": 24432,
"preview": "# Copyright 2017 Fred Sundvik\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the te"
},
{
"path": "data/mappings/info_config.json",
"chars": 7768,
"preview": "# This file maps keys between `config.h` and `info.json`. It is used by QMK\n# to correctly and consistently map back and"
},
{
"path": "data/mappings/info_rules.json",
"chars": 1743,
"preview": "# This file maps keys between `rules.mk` and `info.json`. It is used by QMK\n# to correctly and consistently map back and"
},
{
"path": "data/mappings/keyboard_aliases.json",
"chars": 12560,
"preview": "{\n # Format for each entry:\n # <alias>: {\n # target: <keyboard_folder>,\n # layouts: {\n # "
},
{
"path": "data/schemas/api_keyboard.jsonschema",
"chars": 715,
"preview": "{\n \"$id\": \"qmk.api.keyboard.v1\",\n \"allOf\": [\n {\"$ref\": \"qmk.keyboard.v1\"},\n {\n \"propertie"
},
{
"path": "data/schemas/definitions.jsonschema",
"chars": 2356,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"qmk.definitions.v1\",\n \"title\": \"Common defini"
},
{
"path": "data/schemas/false.jsonschema",
"chars": 6,
"preview": "false\n"
},
{
"path": "data/schemas/keyboard.jsonschema",
"chars": 15455,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"qmk.keyboard.v1\",\n \"title\": \"Keyboard Informa"
},
{
"path": "data/schemas/keymap.jsonschema",
"chars": 724,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"qmk.keymap.v1\",\n \"title\": \"Keymap Information"
},
{
"path": "data/schemas/true.jsonschema",
"chars": 5,
"preview": "true\n"
},
{
"path": "data/templates/avr/config.h",
"chars": 4861,
"preview": "/*\nCopyright %YEAR% %YOUR_NAME%\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms"
},
{
"path": "data/templates/avr/readme.md",
"chars": 1120,
"preview": "# %KEYBOARD%\n\n\n\n*A short description of the keyboard/project*\n\n* Keyboard Main"
},
{
"path": "data/templates/avr/rules.mk",
"chars": 907,
"preview": "# MCU name\nMCU = atmega32u4\n\n# Bootloader selection\nBOOTLOADER = atmel-dfu\n\n# Build Options\n# change yes to no to disa"
},
{
"path": "data/templates/base/info.json",
"chars": 483,
"preview": "{\n \"keyboard_name\": \"%KEYBOARD%\",\n \"url\": \"\",\n \"maintainer\": \"%YOUR_NAME%\",\n \"width\": 3,\n \"height\": 2,\n "
},
{
"path": "data/templates/base/keyboard.c",
"chars": 710,
"preview": "/* Copyright %YEAR% %YOUR_NAME%\n *\n * This program is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "data/templates/base/keyboard.h",
"chars": 1145,
"preview": "/* Copyright %YEAR% %YOUR_NAME%\n *\n * This program is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "data/templates/base/keymaps/default/keymap.c",
"chars": 1867,
"preview": "/* Copyright %YEAR% %YOUR_NAME%\n *\n * This program is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "data/templates/base/keymaps/default/readme.md",
"chars": 36,
"preview": "# The default keymap for %KEYBOARD%\n"
},
{
"path": "data/templates/nrf/config.h",
"chars": 7940,
"preview": "/*\nCopyright %YEAR% %YOUR_NAME%\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms"
},
{
"path": "data/templates/nrf/ld/nrf52840_ao.ld",
"chars": 2575,
"preview": "/* Linker script to configure memory regions. */\n\nSEARCH_DIR(.)\nGROUP(-lgcc -lc -lnosys)\n\nMEMORY\n{\n FLASH (rx) : ORIGIN"
},
{
"path": "data/templates/nrf/readme.md",
"chars": 668,
"preview": "# %KEYBOARD%\n\n\n\nA short description of the keyboard/project\n\nKeyboard Maintain"
},
{
"path": "data/templates/nrf/rules.mk",
"chars": 1437,
"preview": "# MCU name\nMCU_FAMILY = NRF52\nMCU_SERIES = NRF52840\nMCU_LDSCRIPT = nrf52840_ao\nMCU = cortex-m4\nCUSTOM_MATRIX = yes # Thi"
},
{
"path": "data/templates/nrf/template.c",
"chars": 1500,
"preview": "/* Copyright %YEAR% %YOUR_NAME%\n *\n * This program is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "data/templates/ps2avrgb/config.h",
"chars": 4565,
"preview": "/*\nCopyright %YEAR% %YOUR_NAME%\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms"
},
{
"path": "data/templates/ps2avrgb/readme.md",
"chars": 1383,
"preview": "# %KEYBOARD%\n\n\n\n*A short description of the keyboard/project*\n\n* Keyboard Main"
},
{
"path": "data/templates/ps2avrgb/rules.mk",
"chars": 694,
"preview": "# MCU name\nMCU = atmega32a\n\n# Bootloader selection\nBOOTLOADER = bootloadhid\n\n# Build Options\n# change yes to no to dis"
},
{
"path": "disable_features.mk",
"chars": 879,
"preview": "# Unconditionally disable features that a keyboard advertises it doesn't support\n\nFEATURE_NAMES :=\nFEATURE_NAMES += ADAF"
},
{
"path": "docs/.nojekyll",
"chars": 0,
"preview": ""
},
{
"path": "docs/CNAME",
"chars": 11,
"preview": "docs.qmk.fm"
},
{
"path": "docs/ChangeLog/20190830.md",
"chars": 3394,
"preview": "# QMK Breaking Change - 2019 Aug 30\n\nFour times a year QMK runs a process for merging Breaking Changes. A Breaking Chang"
},
{
"path": "docs/ChangeLog/20200229.md",
"chars": 4192,
"preview": "# QMK Breaking Change - 2020 Feb 29 Changelog\n\nFour times a year QMK runs a process for merging Breaking Changes. A Brea"
},
{
"path": "docs/ChangeLog/20200530.md",
"chars": 13111,
"preview": "# QMK Breaking Change - 2020 May 30 Changelog\n\nFour times a year QMK runs a process for merging Breaking Changes. A Brea"
},
{
"path": "docs/ChangeLog/20200829.md",
"chars": 11743,
"preview": "# QMK Breaking Change - 2020 Aug 29 Changelog\n\nFour times a year QMK runs a process for merging Breaking Changes. A Brea"
},
{
"path": "docs/ChangeLog/20201128.md",
"chars": 9959,
"preview": "# QMK Breaking Change - 2020 Nov 28 Changelog\n\nFour times a year QMK runs a process for merging Breaking Changes. A Brea"
},
{
"path": "docs/ChangeLog/20210227.md",
"chars": 15215,
"preview": "# QMK Breaking Changes - 2021 February 27 Changelog\n\n## Changes Requiring User Action\n\nThe following keyboards have had "
},
{
"path": "docs/ChangeLog/20210529.md",
"chars": 15908,
"preview": "# QMK Breaking Changes - 2021 May 29 Changelog\n\n## Notable Changes :id=notable-changes\n\n### RGB Matrix support for split"
},
{
"path": "docs/ChangeLog/20210828.md",
"chars": 41801,
"preview": "# QMK Breaking Changes - 2021 August 28 Changelog\n\n## Notable Features :id=notable-features\n\n### Combo processing improv"
},
{
"path": "docs/README.md",
"chars": 1742,
"preview": "# Quantum Mechanical Keyboard Firmware\n\n## What is QMK Firmware?\n\nQMK (*Quantum Mechanical Keyboard*) is an open source "
},
{
"path": "docs/_langs.md",
"chars": 223,
"preview": "- Translations\n - [:uk: English](/)\n - [:cn: 中文](/zh-cn/)\n - [:es: Español](/es/)\n - [:fr: Français](/fr-fr/)\n - [:"
},
{
"path": "docs/_summary.md",
"chars": 7244,
"preview": "* Tutorial\n * [Introduction](newbs.md)\n * [Setup](newbs_getting_started.md)\n * [Building Your First Firmware](newbs_b"
},
{
"path": "docs/adc_driver.md",
"chars": 11951,
"preview": "# ADC Driver\n\nQMK can leverage the Analog-to-Digital Converter (ADC) on supported MCUs to measure voltages on certain pi"
},
{
"path": "docs/api_development_environment.md",
"chars": 134,
"preview": "# Development Environment Setup\n\nTo setup a development stack head over to the [qmk_web_stack](https://github.com/qmk/qm"
},
{
"path": "docs/api_development_overview.md",
"chars": 2158,
"preview": "# QMK Compiler Development Guide\n\nThis page attempts to introduce developers to the QMK Compiler. It does not go into ni"
},
{
"path": "docs/api_docs.md",
"chars": 4733,
"preview": "# QMK API\n\nThis page describes using the QMK API. If you are an application developer you can use this API to compile fi"
},
{
"path": "docs/api_overview.md",
"chars": 913,
"preview": "# QMK API\n\nThe QMK API provides an asynchronous API that Web and GUI tools can use to compile arbitrary keymaps for any "
},
{
"path": "docs/arm_debugging.md",
"chars": 6087,
"preview": "# ARM Debugging using Eclipse\n\nThis page describes how to setup debugging for ARM MCUs using an SWD adapter and open-sou"
},
{
"path": "docs/audio_driver.md",
"chars": 11139,
"preview": "# Audio Driver :id=audio-driver\n\nThe [Audio feature](feature_audio.md) breaks the hardware specifics out into separate, "
},
{
"path": "docs/breaking_changes.md",
"chars": 4162,
"preview": "# Breaking Changes\n\nThis document describes QMK's Breaking Change process. A Breaking Change is any change which modifie"
},
{
"path": "docs/breaking_changes_history.md",
"chars": 553,
"preview": "# Past Breaking Changes\n\nThis page links to all previous changelogs from the QMK Breaking Changes process.\n\n* [2021 Aug "
},
{
"path": "docs/breaking_changes_instructions.md",
"chars": 3583,
"preview": "# Breaking Changes: My Pull Request Was Flagged\n\nA QMK member may have replied to your pull request stating that your su"
},
{
"path": "docs/chibios_upgrade_instructions.md",
"chars": 2080,
"preview": "# ChibiOS Upgrade Procedure\n\nChibiOS and ChibiOS-Contrib need to be updated in tandem -- the latter has a branch tied to"
},
{
"path": "docs/cli.md",
"chars": 1974,
"preview": "# QMK CLI :id=qmk-cli\n\n## Overview :id=overview\n\nThe QMK CLI makes building and working with QMK keyboards easier. We ha"
},
{
"path": "docs/cli_commands.md",
"chars": 10077,
"preview": "# QMK CLI Commands\n\n# User Commands\n\n## `qmk compile`\n\nThis command allows you to compile firmware from any directory. Y"
},
{
"path": "docs/cli_configuration.md",
"chars": 4055,
"preview": "# QMK CLI Configuration\n\nThis document explains how `qmk config` works.\n\n# Introduction\n\nConfiguration for the QMK CLI i"
},
{
"path": "docs/cli_development.md",
"chars": 10908,
"preview": "# QMK CLI Development\n\nThis document has useful information for developers wishing to write new `qmk` subcommands.\n\n# Ov"
},
{
"path": "docs/cli_tab_complete.md",
"chars": 1021,
"preview": "# Tab Completion for QMK\n\nIf you are using Bash 4.2 or later, Zsh, or FiSH you can enable Tab Completion for the QMK CLI"
},
{
"path": "docs/coding_conventions_c.md",
"chars": 3593,
"preview": "# Coding Conventions (C)\n\nMost of our style is pretty easy to pick up on, but right now it's not entirely consistent. Yo"
},
{
"path": "docs/coding_conventions_python.md",
"chars": 12415,
"preview": "# Coding Conventions (Python)\n\nMost of our style follows PEP8 with some local modifications to make things less nit-pick"
},
{
"path": "docs/compatible_microcontrollers.md",
"chars": 3457,
"preview": "# Compatible Microcontrollers\n\nQMK runs on any USB-capable AVR or ARM microcontroller with enough flash space - generall"
},
{
"path": "docs/config_options.md",
"chars": 24621,
"preview": "# Configuring QMK\n\nQMK is nearly infinitely configurable. Wherever possible we err on the side of allowing users to cust"
},
{
"path": "docs/configurator_architecture.md",
"chars": 3785,
"preview": "# QMK Configurator Architecture\n\nThis page describes the web architecture behind QMK Configurator at a high level. If yo"
},
{
"path": "docs/configurator_default_keymaps.md",
"chars": 10666,
"preview": "# Adding Default Keymaps to QMK Configurator :id=adding-default-keymaps\n\nThis page covers how to add a default keymap fo"
},
{
"path": "docs/configurator_diagram.drawio",
"chars": 2750,
"preview": "<mxfile host=\"Electron\" modified=\"2021-08-09T19:46:29.036Z\" agent=\"5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, li"
},
{
"path": "docs/configurator_step_by_step.md",
"chars": 3164,
"preview": "# QMK Configurator: Step by Step\n\nThis page describes the steps for building your firmware in QMK Configurator.\n\n## Step"
},
{
"path": "docs/configurator_troubleshooting.md",
"chars": 1019,
"preview": "# Configurator Troubleshooting\n\n## My .json file is not working\n\nIf the .json file was generated with QMK Configurator, "
},
{
"path": "docs/contributing.md",
"chars": 12541,
"preview": "# How to Contribute\n\n👍🎉 First off, thanks for taking the time to read this and contribute! 🎉👍\n\nThird-party contributions"
},
{
"path": "docs/custom_matrix.md",
"chars": 2729,
"preview": "# Custom Matrix\n\nQMK provides a mechanism to supplement or replace the default matrix scanning routine with your own cod"
},
{
"path": "docs/custom_quantum_functions.md",
"chars": 20508,
"preview": "# How to Customize Your Keyboard's Behavior\n\nFor a lot of people a custom keyboard is about more than sending button pre"
},
{
"path": "docs/data_driven_config.md",
"chars": 6488,
"preview": "# Data Driven Configuration\n\nThis page describes how QMK's data driven JSON configuration system works. It is aimed at d"
},
{
"path": "docs/de/README.md",
"chars": 3008,
"preview": "# Quantum Mechanical Keyboard Firmware\n\n[](ht"
},
{
"path": "docs/de/_summary.md",
"chars": 5032,
"preview": "* [Anleitung für Anfänger](de/newbs.md)\n * [Erste Schritte](de/newbs_getting_started.md)\n * [Die erste Firmware](de/ne"
},
{
"path": "docs/de/cli.md",
"chars": 5321,
"preview": "# QMK CLI (Kommandozeile)\n\nDiese Seite beschreibt die Einrichtung und den Umgang mit dem QMK CLI (Kommandozeile).\n\n# Übe"
},
{
"path": "docs/de/driver_installation_zadig.md",
"chars": 5281,
"preview": "# Bootloader Treiber Installation mit Zadig\n\nQMK erscheint für den Host als normales HID Eingabegerät und benötigt desha"
},
{
"path": "docs/de/newbs.md",
"chars": 2095,
"preview": "# Anleitung für absolute Beginner\nQMK ist eine mächtige Open Source Firmware für mechanische Tastaturen. Mit QMK kannst "
},
{
"path": "docs/de/newbs_building_firmware.md",
"chars": 4517,
"preview": "# Eine eigene Firmware erstellen \n\nNachdem Du nun eine funktionierende Entwicklungsumgebung aufgesetzt hast, bist Du nun"
},
{
"path": "docs/de/newbs_flashing.md",
"chars": 17759,
"preview": "# Deine Tastatur flashen\n\nNachdem deine Firmware nun fertig ist musst Du Sie noch auf deine Tastatur flashen.\n\n## Flash-"
},
{
"path": "docs/de/newbs_getting_started.md",
"chars": 6932,
"preview": "# Einleitung\nGenau wie in einem Computer befindet sich auch in einer Tastatur ein Prozessor.\n\nDieser Prozessor führt Sof"
},
{
"path": "docs/de/newbs_learn_more_resources.md",
"chars": 701,
"preview": "# Lernmaterial\n\nDiese weiterführenden Ressourcen sind darauf ausgerichtet, Neulingen der QMK Commmunity mehr Information"
},
{
"path": "docs/de/newbs_testing_debugging.md",
"chars": 4515,
"preview": "# Testen und Debuggen\n\nNachdem Du deine Tastatur mit deiner angepassten Firmware geflasht hast, ist es nun an der Zeit s"
},
{
"path": "docs/documentation_best_practices.md",
"chars": 2171,
"preview": "# Documentation Best Practices\n\nThis page exists to document best practices when writing documentation for QMK. Followin"
},
{
"path": "docs/documentation_templates.md",
"chars": 1804,
"preview": "# Documentation Templates\n\nThis page documents the templates you should use when submitting new Keymaps and Keyboards to"
},
{
"path": "docs/driver_installation_zadig.md",
"chars": 8069,
"preview": "# Bootloader Driver Installation with Zadig\n\nQMK presents itself to the host as a regular HID keyboard device, and as su"
},
{
"path": "docs/easy_maker.md",
"chars": 2094,
"preview": "# Easy Maker - Build One-Off Projects In Configurator\n\nHave you ever needed an easy way to program a controller, such as"
},
{
"path": "docs/eeprom_driver.md",
"chars": 7274,
"preview": "# EEPROM Driver Configuration :id=eeprom-driver-configuration\n\nThe EEPROM driver can be swapped out depending on the nee"
},
{
"path": "docs/es/README.md",
"chars": 2890,
"preview": "# Firmware Quantum Mechanical Keyboard\n\n[](http"
},
{
"path": "docs/es/_summary.md",
"chars": 5278,
"preview": "* [Guía completa para novatos](es/newbs.md)\n * [Empezando](es/newbs_getting_started.md)\n * [Construyendo tu primer fir"
},
{
"path": "docs/es/hardware.md",
"chars": 488,
"preview": "# Hardware\n\nQMK es compatible con una variedad de hardware. Si tu procesador puede ser dirigido por [LUFA](https://www.f"
},
{
"path": "docs/es/hardware_avr.md",
"chars": 8312,
"preview": "# Teclados con Procesadores AVR\n\nEsta página describe el soporte para procesadores AVR en QMK. Los procesadores AVR incl"
},
{
"path": "docs/es/hardware_drivers.md",
"chars": 2278,
"preview": "# Controladores de hardware QMK\n\nQMK se utiliza en un montón de hardware diferente. Mientras que el soporte para los MCU"
},
{
"path": "docs/es/hardware_keyboard_guidelines.md",
"chars": 11858,
"preview": "# Pautas del teclado QMK\n\nDesde sus inicios, QMK ha crecido a pasos agigantados gracias a personas como tú que contribuy"
},
{
"path": "docs/es/newbs.md",
"chars": 1931,
"preview": "# La guía completa de QMK para novatos\n\nQMK es un poderoso firmware Open Source para tu teclado mecánico. Puedes utiliza"
},
{
"path": "docs/es/newbs_best_practices.md",
"chars": 8326,
"preview": "# Mejores prácticas\n\n## O, \"Cómo aprendí a dejar de preocuparme y amarle a Git.\"\n\nEste documento procura instruir a los "
},
{
"path": "docs/es/newbs_building_firmware.md",
"chars": 4266,
"preview": "# Construyendo tu primer firmware\n\nAhora que has configurado tu entorno de construcción estas listo para empezar a const"
},
{
"path": "docs/es/newbs_building_firmware_configurator.md",
"chars": 5020,
"preview": "# Configurador QMK\n\nEl [Configurador QMK](https://config.qmk.fm) es un entorno gráfico online que genera ficheros hexade"
},
{
"path": "docs/es/newbs_flashing.md",
"chars": 16919,
"preview": "# Flasheando tu teclado\n\nAhora que has construido tu fichero de firmware personalizado querrás flashear tu teclado. \n\n##"
},
{
"path": "docs/es/newbs_getting_started.md",
"chars": 6114,
"preview": "# Introducción\n\nEl teclado de tu computador tiene un procesador dentro de él, no muy distinto del que está dentro de tu "
},
{
"path": "docs/es/newbs_learn_more_resources.md",
"chars": 655,
"preview": "# Recursos de aprendizaje\n\nEstos recursos procuran dar miembros nuevos en la communidad QMK un mayor entendimiento de la"
},
{
"path": "docs/es/newbs_testing_debugging.md",
"chars": 4389,
"preview": "# Testeando y depurando\n\nUna vez que hayas flasheado tu teclado con un firmware personalizado estarás listo para probarl"
},
{
"path": "docs/faq_build.md",
"chars": 4403,
"preview": "# Frequently Asked Build Questions\n\nThis page covers questions about building QMK. If you haven't yet done so, you shoul"
},
{
"path": "docs/faq_debug.md",
"chars": 4853,
"preview": "# Debugging FAQ\n\nThis page details various common questions people have about troubleshooting their keyboards.\n\n## Debug"
},
{
"path": "docs/faq_general.md",
"chars": 3609,
"preview": "# Frequently Asked Questions\n\n## What is QMK?\n\n[QMK](https://github.com/qmk), short for Quantum Mechanical Keyboard, is "
},
{
"path": "docs/faq_keymap.md",
"chars": 7846,
"preview": "# Keymap FAQ\n\nThis page covers questions people often have about keymaps. If you haven't you should read [Keymap Overvie"
},
{
"path": "docs/faq_misc.md",
"chars": 5557,
"preview": "# Miscellaneous FAQ\n\n## How do I test my keyboard? :id=testing\n\nTesting your keyboard is usually pretty straightforward."
},
{
"path": "docs/feature_advanced_keycodes.md",
"chars": 11663,
"preview": "# Modifier Keys :id=modifier-keys\n\nThese allow you to combine a modifier with a keycode. When pressed, the keydown event"
},
{
"path": "docs/feature_audio.md",
"chars": 19542,
"preview": "# Audio\n\nYour keyboard can make sounds! If you've got a spare pin you can hook up a simple speaker and make it beep. You"
},
{
"path": "docs/feature_auto_shift.md",
"chars": 7663,
"preview": "# Auto Shift: Why Do We Need a Shift Key?\n\nTap a key and you get its character. Tap a key, but hold it *slightly* longer"
},
{
"path": "docs/feature_backlight.md",
"chars": 13314,
"preview": "# Backlighting :id=backlighting\n\nMany keyboards support backlit keys by way of individual LEDs placed through or underne"
},
{
"path": "docs/feature_bluetooth.md",
"chars": 3152,
"preview": "# Bluetooth\n\n## Bluetooth Known Supported Hardware\n\nCurrently Bluetooth support is limited to AVR based chips. For Bluet"
},
{
"path": "docs/feature_bootmagic.md",
"chars": 2700,
"preview": "# Bootmagic Lite :id=bootmagic-lite\n\nThe Bootmagic Lite feature that only handles jumping into the bootloader. This is g"
},
{
"path": "docs/feature_combo.md",
"chars": 16121,
"preview": "# Combos\n\nThe Combo feature is a chording type solution for adding custom actions. It lets you hit multiple keys at once"
},
{
"path": "docs/feature_command.md",
"chars": 5013,
"preview": "# Command\n\nCommand, formerly known as Magic, is a way to change your keyboard's behavior without having to flash or unpl"
},
{
"path": "docs/feature_debounce_type.md",
"chars": 8457,
"preview": "# Contact bounce / contact chatter\n\nMechanical switches often don't have a clean single transition between pressed and u"
},
{
"path": "docs/feature_digitizer.md",
"chars": 1462,
"preview": "## Digitizer\n\nThe digitizer HID interface allows setting the mouse cursor position at absolute coordinates, unlike the P"
},
{
"path": "docs/feature_dip_switch.md",
"chars": 2733,
"preview": "# DIP Switches\n\nDIP switches are supported by adding this to your `rules.mk`:\n\n DIP_SWITCH_ENABLE = yes\n\nand this to "
},
{
"path": "docs/feature_dynamic_macros.md",
"chars": 4694,
"preview": "# Dynamic Macros: Record and Replay Macros in Runtime\n\nQMK supports temporary macros created on the fly. We call these D"
},
{
"path": "docs/feature_encoders.md",
"chars": 3154,
"preview": "# Encoders\n\nBasic encoders are supported by adding this to your `rules.mk`:\n\n```make\nENCODER_ENABLE = yes\n```\n\nand this "
},
{
"path": "docs/feature_grave_esc.md",
"chars": 1988,
"preview": "# Grave Escape\n\nIf you're using a 60% keyboard, or any other layout with no F-row, you will have noticed that there is n"
},
{
"path": "docs/feature_haptic_feedback.md",
"chars": 13463,
"preview": "# Haptic Feedback\n\n## Haptic feedback rules.mk options\n\nThe following options are currently available for haptic feedbac"
},
{
"path": "docs/feature_hd44780.md",
"chars": 2900,
"preview": "# HD44780 LCD Displays\n\nThis is an integration of Peter Fleury's LCD library. This page will explain the basics. [For in"
},
{
"path": "docs/feature_joystick.md",
"chars": 7171,
"preview": "## Joystick\n\nThe keyboard can be made to be recognized as a joystick HID device by the operating system.\n\n!> Joystick su"
},
{
"path": "docs/feature_key_lock.md",
"chars": 1233,
"preview": "# Key Lock\n\nSometimes you may find yourself needing to hold down a specific key for a long period of time. Key Lock hold"
},
{
"path": "docs/feature_key_overrides.md",
"chars": 23312,
"preview": "# Key Overrides\n\nKey overrides allow you to override modifier-key combinations to send a different modifier-key combinat"
},
{
"path": "docs/feature_layers.md",
"chars": 12112,
"preview": "# Layers :id=layers\n\nOne of the most powerful and well used features of QMK Firmware is the ability to use layers. For "
},
{
"path": "docs/feature_layouts.md",
"chars": 3383,
"preview": "# Layouts: Using a Keymap with Multiple Keyboards\n\nThe `layouts/` folder contains different physical key layouts that ca"
},
{
"path": "docs/feature_leader_key.md",
"chars": 7615,
"preview": "# The Leader Key: A New Kind of Modifier\n\nIf you've ever used Vim, you know what a Leader key is. If not, you're about t"
},
{
"path": "docs/feature_led_indicators.md",
"chars": 5108,
"preview": "# LED Indicators\n\n?> Currently, this feature is not supported for split keyboards\n\nQMK provides methods to read 5 of th"
},
{
"path": "docs/feature_led_matrix.md",
"chars": 20349,
"preview": "# LED Matrix Lighting :id=led-matrix-lighting\n\nThis feature allows you to use LED matrices driven by external drivers. I"
},
{
"path": "docs/feature_macros.md",
"chars": 10898,
"preview": "# Macros\n\nMacros allow you to send multiple keystrokes when pressing just one key. QMK has a number of ways to define an"
},
{
"path": "docs/feature_midi.md",
"chars": 12219,
"preview": "# MIDI\n\n## Usage\n\nFirst, enable MIDI by adding the following to your `rules.mk`:\n\n```makefile\nMIDI_ENABLE = yes\n```\n\nThe"
},
{
"path": "docs/feature_mouse_keys.md",
"chars": 11438,
"preview": "# Mouse keys\n\nMouse keys is a feature that allows you to emulate a mouse using your keyboard. You can move the pointer a"
},
{
"path": "docs/feature_oled_driver.md",
"chars": 20614,
"preview": "# OLED Driver\n\n## Supported Hardware\n\nOLED modules using SSD1306 or SH1106 driver ICs, communicating over I2C.\nTested co"
},
{
"path": "docs/feature_pointing_device.md",
"chars": 3562,
"preview": "# Pointing Device :id=pointing-device\n\nPointing Device is a generic name for a feature intended to be generic: moving th"
},
{
"path": "docs/feature_ps2_mouse.md",
"chars": 9072,
"preview": "# PS/2 Mouse Support :id=ps2-mouse-support\n\nIts possible to hook up a PS/2 mouse (for example touchpads or trackpoints) "
},
{
"path": "docs/feature_rawhid.md",
"chars": 3914,
"preview": "# Raw HID\n\nRaw HID allows for bidirectional communication between QMK and the host computer over an HID interface. This "
},
{
"path": "docs/feature_rgb_matrix.md",
"chars": 43119,
"preview": "# RGB Matrix Lighting :id=rgb-matrix-lighting\n\nThis feature allows you to use RGB LED matrices driven by external driver"
},
{
"path": "docs/feature_rgblight.md",
"chars": 35497,
"preview": "# RGB Lighting\n\nQMK has the ability to control RGB LEDs attached to your keyboard. This is commonly called *underglow*, "
},
{
"path": "docs/feature_sequencer.md",
"chars": 5911,
"preview": "# Sequencer\n\nSince QMK has experimental support for MIDI, you can now turn your keyboard into a [step sequencer](https:/"
},
{
"path": "docs/feature_space_cadet.md",
"chars": 5488,
"preview": "# Space Cadet: The Future, Built In\n\nSteve Losh described the [Space Cadet Shift](https://stevelosh.com/blog/2012/10/a-m"
},
{
"path": "docs/feature_split_keyboard.md",
"chars": 19809,
"preview": "# Split Keyboard \n\nMany keyboards in the QMK Firmware repo are \"split\" keyboards. They use two controllers—one plugging "
},
{
"path": "docs/feature_st7565.md",
"chars": 13128,
"preview": "# ST7565 LCD Driver\n\n## Supported Hardware\n\nLCD modules using ST7565 driver IC, communicating over SPI.\n\n|Module "
},
{
"path": "docs/feature_stenography.md",
"chars": 8513,
"preview": "# Stenography in QMK :id=stenography-in-qmk\n\n[Stenography](https://en.wikipedia.org/wiki/Stenotype) is a method of writi"
},
{
"path": "docs/feature_swap_hands.md",
"chars": 2225,
"preview": "# Swap-Hands Action\n\nThe swap-hands action allows support for one-handed typing without requiring a separate layer. Set "
},
{
"path": "docs/feature_tap_dance.md",
"chars": 22933,
"preview": "# Tap Dance: A Single Key Can Do 3, 5, or 100 Different Things\n\n## Introduction :id=introduction\n\nHit the semicolon key "
},
{
"path": "docs/feature_terminal.md",
"chars": 2499,
"preview": "# Terminal\n\n> This feature is currently *huge*, and should probably only be put on boards with a lot of memory, or for f"
},
{
"path": "docs/feature_thermal_printer.md",
"chars": 325,
"preview": "# Thermal Printer\n\n<!-- FIXME: Describe thermal printers support here. -->\n\n## Thermal Printer Keycodes\n\n|Key |De"
},
{
"path": "docs/feature_unicode.md",
"chars": 19090,
"preview": "# Unicode Support\n\nUnicode characters can be input straight from your keyboard! There are some limitations, however.\n\nIn"
},
{
"path": "docs/feature_userspace.md",
"chars": 12017,
"preview": "# Userspace: Sharing Code Between Keymaps\n\nIf you use more than one keyboard with a similar keymap, you might see the be"
},
{
"path": "docs/feature_velocikey.md",
"chars": 1263,
"preview": "# Velocikey\n\nVelocikey is a feature that lets you control the speed of lighting effects (like the Rainbow Swirl effect) "
},
{
"path": "docs/feature_wpm.md",
"chars": 3260,
"preview": "# Word Per Minute (WPM) Calculcation\n\nThe WPM feature uses time between keystrokes to compute a rolling average words pe"
},
{
"path": "docs/flashing.md",
"chars": 15668,
"preview": "# Flashing Instructions and Bootloader Information\n\nThere are quite a few different types of bootloaders that keyboards "
},
{
"path": "docs/flashing_bootloadhid.md",
"chars": 2796,
"preview": "# BootloadHID Flashing Instructions and Bootloader Information\n\nps2avr(GB) boards use an ATmega32A microcontroller and a"
},
{
"path": "docs/fr-fr/ChangeLog/20190830.md",
"chars": 3794,
"preview": "# QMK Breaking Change - 30 août 2019\n\nQuatre fois par an, QMK lance un processus pour fusionner les Breaking Changes. Un"
},
{
"path": "docs/fr-fr/README.md",
"chars": 3161,
"preview": "# Quantum Mechanical Keyboard Firmware\n\n[](ht"
},
{
"path": "docs/fr-fr/_summary.md",
"chars": 5899,
"preview": "**En Français**\n\n* [Guide pour débutant complet](fr-fr/newbs.md)\n * [Pour débuter](fr-fr/newbs_getting_started.md)\n * "
},
{
"path": "docs/fr-fr/breaking_changes.md",
"chars": 4115,
"preview": "# Breaking changes\n\nCe document décrit le processus de QMK pour la gestion des breaking changes. Un breaking change est "
},
{
"path": "docs/fr-fr/cli.md",
"chars": 4936,
"preview": "# La CLI de QMK\n\nCette page décrit comment configurer et utiliser la CLI QMK.\n\n# Vue d'ensemble\n\nLa CLI de QMK permet de"
},
{
"path": "docs/fr-fr/cli_configuration.md",
"chars": 4541,
"preview": "# Configuration de QMK CLI\n\nCe document explique comment fonctionne la commande `qmk config`.\n\n# Introduction\n\nLa config"
},
{
"path": "docs/fr-fr/contributing.md",
"chars": 13592,
"preview": "# Comment contribuer\n\n👍🎉 Premièrement, merci de prendre le temps de lire ceci et de contribuer! 🎉👍\n\nLes contributions de"
},
{
"path": "docs/fr-fr/driver_installation_zadig.md",
"chars": 5305,
"preview": "# Installation du driver du bootloader avec Zadig\n\nVous n’aurez pas besoin de pilote particulier pour utiliser un clavie"
}
]
// ... and 27395 more files (download for full content)
About this extraction
This page contains the full source code of the sekigon-gonnoc/qmk_firmware GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 27595 files (73.6 MB), approximately 20.8M tokens, and a symbol index with 22688 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.