/* Copyright 2018 Yann Hodique @sigma 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 . */ #include "sigma.h" userspace_config_t runtime_userspace_config; userspace_config_t stored_userspace_config; __attribute__ ((weak)) void matrix_init_keymap(void) {} __attribute__ ((weak)) void startup_keymap(void) {} __attribute__ ((weak)) void shutdown_keymap(void) {} __attribute__ ((weak)) void suspend_power_down_keymap(void) {} __attribute__ ((weak)) void suspend_wakeup_init_keymap(void) {} __attribute__ ((weak)) void matrix_scan_keymap(void) {} __attribute__ ((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; } __attribute__ ((weak)) bool process_record_secrets(uint16_t keycode, keyrecord_t *record) { return true; } __attribute__ ((weak)) uint32_t layer_state_set_keymap (uint32_t state) { return state; } __attribute__ ((weak)) uint32_t default_layer_state_set_keymap (uint32_t state) { return state; } __attribute__ ((weak)) void led_set_keymap(uint8_t usb_led) {} void set_os(uint8_t os) { runtime_userspace_config.os_target = os; switch (os) { case _OS_MACOS: set_unicode_input_mode(UC_OSX); break; case _OS_LINUX: set_unicode_input_mode(UC_LNX); break; case _OS_WINDOWS: set_unicode_input_mode(UC_WIN); break; } } void matrix_init_user(void) { stored_userspace_config.raw = eeconfig_read_user(); runtime_userspace_config.raw = stored_userspace_config.raw; set_os(runtime_userspace_config.os_target); } void store_userspace_config(void) { eeconfig_update_user(stored_userspace_config.raw); } LEADER_EXTERNS(); void matrix_scan_user(void) { LEADER_DICTIONARY() { leading = false; leader_end(); SEQ_TWO_KEYS(KC_F1, KC_L) { set_os(_OS_LINUX); } SEQ_TWO_KEYS(KC_F1, KC_M) { set_os(_OS_MACOS); } SEQ_TWO_KEYS(KC_F1, KC_W) { set_os(_OS_WINDOWS); } SEQ_TWO_KEYS(KC_F1, KC_S) { stored_userspace_config.raw = runtime_userspace_config.raw; store_userspace_config(); } } } bool process_record_user(uint16_t keycode, keyrecord_t *record) { uint8_t os_target = runtime_userspace_config.os_target; bool pressed = record->event.pressed; switch (keycode) { case KC_QWERTY: if (pressed) { set_single_persistent_default_layer(_QWERTY); } return false; break; case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader if (!pressed) { send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP #if defined(__ARM__) ":dfu-util" #elif defined(BOOTLOADER_DFU) ":dfu" #elif defined(BOOTLOADER_HALFKAY) ":teensy" #elif defined(BOOTLOADER_CATERINA) ":avrdude" #endif // bootloader options SS_TAP(X_ENTER)), 10); } return false; break; case EPRM: // Resets EEPROM if (pressed) { eeconfig_init(); default_layer_set(1UL<