From 5335fe9f70c1c14495c696b9b738cbc9decaeff7 Mon Sep 17 00:00:00 2001 From: Benjamin Cerda Date: Wed, 27 May 2026 00:24:33 -0500 Subject: [PATCH] Initial commit --- .../preonic/keymaps/MindfulMinun/config.h | 30 +++ .../preonic/keymaps/MindfulMinun/keymap.c | 240 ++++++++++++++++++ .../preonic/keymaps/MindfulMinun/readme.md | 15 ++ .../preonic/keymaps/MindfulMinun/rules.mk | 4 + 4 files changed, 289 insertions(+) create mode 100644 keyboards/preonic/keymaps/MindfulMinun/config.h create mode 100644 keyboards/preonic/keymaps/MindfulMinun/keymap.c create mode 100644 keyboards/preonic/keymaps/MindfulMinun/readme.md create mode 100644 keyboards/preonic/keymaps/MindfulMinun/rules.mk diff --git a/keyboards/preonic/keymaps/MindfulMinun/config.h b/keyboards/preonic/keymaps/MindfulMinun/config.h new file mode 100644 index 0000000000..b29a12cdcf --- /dev/null +++ b/keyboards/preonic/keymaps/MindfulMinun/config.h @@ -0,0 +1,30 @@ +#pragma once + +#define AUDIO_CLICKY + +#ifdef AUDIO_ENABLE +# define STARTUP_SONG SONG(STARTUP_SOUND) +#endif + +#define MUSIC_MASK (keycode != KC_NO) + +/* + * MIDI options + */ + +/* 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 2 diff --git a/keyboards/preonic/keymaps/MindfulMinun/keymap.c b/keyboards/preonic/keymaps/MindfulMinun/keymap.c new file mode 100644 index 0000000000..6a1ba12e73 --- /dev/null +++ b/keyboards/preonic/keymaps/MindfulMinun/keymap.c @@ -0,0 +1,240 @@ +/* Copyright 2015-2021 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 . + */ + +#include QMK_KEYBOARD_H +#include "muse.h" + +// Layers, in the order we want them stacked. +enum preonic_layers { + _QWERTY, + _DVORAK, + _RAISE, + _LOWER, + _ADJUST +}; + +// Custom keycodes we can listen to +enum preonic_keycodes { + QWERTY = SAFE_RANGE, + DVORAK, + RAISE, + LOWER, + KITTY, + ACUTE, + TILDE + // ACNT, + // TLDE, + // UMLT, + // CDLA +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_DVORAK] = LAYOUT_preonic_grid( + KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC, + KC_TAB , KC_QUOT, KC_COMM, KC_DOT , KC_P , KC_Y , KC_F , KC_G , KC_C , KC_R , KC_L , KC_SLSH, + KC_GRV , KC_A , KC_O , KC_E , KC_U , KC_I , KC_D , KC_H , KC_T , KC_N , KC_S , KC_ENT , + KC_LSFT, KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_B , KC_M , KC_W , KC_V , KC_Z , KC_MINS, + KITTY , KC_LCTL, KC_LOPT, KC_LCMD, RAISE , KC_SPC , KC_SPC , LOWER , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT + ), + + [_QWERTY] = LAYOUT_preonic_grid( + KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC, + KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, + KC_GRV , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_ENT , + KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_QUOT, + KITTY , KC_LCTL, KC_LOPT, KC_LCMD, RAISE , KC_SPC , KC_SPC , LOWER , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT + ), + + [_RAISE] = LAYOUT_preonic_grid( + _______, KC_MPLY, KC_MPRV, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL , _______, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_RBRC, KC_BSLS, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, KC_EQL , + _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_BRID, KC_BRIU, KC_VOLU + ), + + [_LOWER] = LAYOUT_preonic_grid( + KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_RBRC, KC_BSLS, + _______, XXXXXXX, XXXXXXX, ACUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ACUTE, TILDE, XXXXXXX, _______, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MS_BTN1, MS_BTN2, MS_BTN3, _______, + _______, _______, _______, _______, _______, _______, _______, _______, MS_LEFT, MS_DOWN, MS_UP , MS_RGHT + ), + + [_ADJUST] = LAYOUT_preonic_grid( + _______, UG_TOGG, UG_NEXT, UG_HUEU, UG_SATU, UG_VALU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL , + _______, DM_REC1, DM_REC2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, + QK_LOCK, DM_PLY1, DM_PLY2, XXXXXXX, CK_TOGG, XXXXXXX, MI_TOGG, DVORAK , XXXXXXX, XXXXXXX, XXXXXXX, KC_ENT , // Must match + _______, XXXXXXX, XXXXXXX, XXXXXXX, AU_TOGG, XXXXXXX, XXXXXXX, QWERTY , XXXXXXX, XXXXXXX, XXXXXXX, _______, + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) + // [_TRANS] = LAYOUT_preonic_grid( + // _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, + // _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, + // _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, + // _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, + // _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + // ) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_QWERTY); + } + return false; + case DVORAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_DVORAK); + } + return false; + // case MIDI: + // if (record->event.pressed) { + // set_single_persistent_default_layer(_MIDI); + // } + // return false; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + case KITTY: + if (record->event.pressed) { + // SEND_STRING(":3"); + return false; + } + case ACUTE: + if (record->event.pressed) { + // Send a dead acute + return false; + } + case TILDE: + if (record->event.pressed) { + return false; + } + // case ACNT: + // PLAY_SONG(AG_NORM_SOUND); + // break; + // case TLDE: + // PLAY_SONG(AG_SWAP_SOUND); + // break; + // case UMLT: + // PLAY_SONG(GUITAR_SOUND); + // break; + // case CDLA: + // PLAY_SONG(VIOLIN_SOUND); + // break; + } + return true; +}; + +bool muse_mode = false; +uint8_t last_muse_note = 0; +uint16_t muse_counter = 0; +uint8_t muse_offset = 70; +uint16_t muse_tempo = 50; + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (muse_mode) { + if (IS_LAYER_ON(_RAISE)) { + if (clockwise) { + muse_offset++; + } else { + muse_offset--; + } + } else { + if (clockwise) { + muse_tempo+=1; + } else { + muse_tempo-=1; + } + } + } else { + if (clockwise) { + register_code(KC_PGDN); + unregister_code(KC_PGDN); + } else { + register_code(KC_PGUP); + unregister_code(KC_PGUP); + } + } + return true; +} + +bool dip_switch_update_user(uint8_t index, bool active) { + switch (index) { + case 0: + if (active) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + break; + case 1: + if (active) { + muse_mode = true; + } else { + muse_mode = false; + } + } + return true; +} + + +void matrix_scan_user(void) { +#ifdef AUDIO_ENABLE + if (muse_mode) { + if (muse_counter == 0) { + uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()]; + if (muse_note != last_muse_note) { + stop_note(compute_freq_for_midi_note(last_muse_note)); + play_note(compute_freq_for_midi_note(muse_note), 0xF); + last_muse_note = muse_note; + } + } + muse_counter = (muse_counter + 1) % muse_tempo; + } else { + if (muse_counter) { + stop_all_notes(); + muse_counter = 0; + } + } +#endif +} + +bool music_mask_user(uint16_t keycode) { + switch (keycode) { + case RAISE: + case LOWER: + return false; + default: + return true; + } +} diff --git a/keyboards/preonic/keymaps/MindfulMinun/readme.md b/keyboards/preonic/keymaps/MindfulMinun/readme.md new file mode 100644 index 0000000000..365d544d7f --- /dev/null +++ b/keyboards/preonic/keymaps/MindfulMinun/readme.md @@ -0,0 +1,15 @@ +# MindfulMinun's Preonic layout - largely based on the Planck's + +``` +sudo LANG=C make preonic/rev3:MindfulMinun:flash +``` + +``` +# Setup +# Install qmk on arch +paru qmk +# +qmk config user.qmk_home=~/Documentos/code/git/qmk +``` + +It's recommended to install `qmk` on arch diff --git a/keyboards/preonic/keymaps/MindfulMinun/rules.mk b/keyboards/preonic/keymaps/MindfulMinun/rules.mk new file mode 100644 index 0000000000..5980cde449 --- /dev/null +++ b/keyboards/preonic/keymaps/MindfulMinun/rules.mk @@ -0,0 +1,4 @@ +SRC += muse.c +AUDIO_ENABLE = yes +RGBLIGHT_ENABLE = yes +MOUSEKEY_ENABLE = yes