Categories
Uncategorized

Via & Vial Macropad Porting

Ok so I just ported my macropad and the planck keyboard to support via and vial and made a small video about the process, I know its a bit technical at times and using qmk msys on windows is not the most pleasant experience but this gets you started in building your own firmware the fastest if you are on a windows machine as the wsl2 implementation still changes a lot etc.

also the macropad now has a seperate version for the mx switch version as these are now recessed into the keyboard I also have some more plans with this macropad

? Commands used in the video guide:

1. generate ssh key
$ ssh-keygenut

2. read ssh key
$ cat .ssh/id_rsa.pub

3. clone vial qmk
$ git clone git@github.com:vial-kb/vial-qmk.git

4. clone the submodules
$ cd vial-qmk/ && make git-submodule && cd ..

5. setup qmk with vial as homefolder
$ qmk setup -H ./vial-qmk/

6. compile default keymap
$ qmk compile -kb 3by2 -km default

7. generate vial uid
$ python3 util/vial_generate_keyboard_uid.py

8. compile via & vial keymap
$ qmk compile -kb 3by2 -km via

Links used:

? Links

1. Via https://caniusevia.com

2. Vial https://get.vial.today

3. QMK msys https://github.com/qmk/qmk_distro_msy…

4. keyboard layout editor https://www.keyboard-layout-editor.com/

5. QMK toolbox https://github.com/qmk/qmk_toolbox/re…


BTW: the firmware does include some things that were not done at the time of filming the video you can take a peek and checkout some things I have planned with raw_hid

Categories
Uncategorized

Planck neo2 config

nothing fancy here just a place for my plank config files with neo2

but im planning to update these at some point as i last modified it in 2018

# keymap.c
#include "kb.h"

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

	KEYMAP(
		KC_ESC, KC_X, KC_V, KC_L, KC_C, KC_W, KC_K, KC_H, KC_G, KC_F, KC_Q, KC_BSPC, 
		KC_TAB, KC_U, KC_I, KC_A, KC_E, KC_O, KC_S, KC_N, KC_R, KC_T, KC_D, KC_Y, 
		KC_LSFT, M(0), M(1), M(2), KC_P, KC_Z, KC_B, KC_M, KC_COMM, KC_DOT, KC_J, KC_ENT, 
		MEH(KC_NO), HYPR(KC_NO), MO(4), KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, MO(2), MO(3), KC_TRNS, KC_LEFT, KC_RGHT),

	KEYMAP(
		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
		KC_TRNS, KC_SLSH, KC_MINS, KC_EQL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_TRNS, KC_TRNS, 
		KC_TRNS, KC_TRNS, TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

	KEYMAP(
		KC_TRNS, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_MINS, KC_7, KC_8, KC_9, KC_PLUS, KC_TRNS, 
		KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, M(3), KC_4, KC_5, KC_6, KC_COMM, KC_DOT, 
		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, M(4), KC_COLN, KC_1, KC_2, KC_3, KC_0, KC_TRNS, 
		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

	KEYMAP(
		KC_TRNS, M(5), KC_UNDS, KC_LBRC, KC_RBRC, KC_CIRC, KC_EXLM, KC_LABK, KC_RABK, KC_EQL, KC_AMPR, KC_TRNS, 
		KC_TRNS, KC_BSLS, KC_SLSH, KC_LCBR, KC_RCBR, KC_ASTR, KC_QUES, KC_LPRN, KC_RPRN, KC_MINS, KC_COLN, KC_AT, 
		KC_TRNS, KC_HASH, KC_DLR, KC_PIPE, KC_TILD, KC_GRV, KC_PLUS, KC_PERC, KC_DQUO, KC_QUOT, KC_SCLN, KC_TRNS, 
		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

	KEYMAP(
		TO(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, 
		KC_MPLY, KC_MPRV, KC_MNXT, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
		KC_CAPS, KC_TRNS, KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

};

const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
	keyevent_t event = record->event;

	switch (id) {
		case 0:
			if (record->event.pressed) {
				return MACRO( D(LALT), T(U), U(LALT), T(U), END );
			}
			break;
		case 1:
			if (record->event.pressed) {
				return MACRO( D(LALT), T(U), U(LALT), T(O), END );
			}
			break;
		case 2:
			if (record->event.pressed) {
				return MACRO( D(LALT), T(U), U(LALT), T(A), END );
			}
			break;
		case 3:
			if (record->event.pressed) {
				return MACRO( D(LSFT), D(LALT), T(2), U(LALT), U(LSFT), END );
			}
			break;
		case 4:
			if (record->event.pressed) {
				return MACRO( D(LGUI), D(Z), U(LGUI), END );
			}
			break;
		case 5:
			if (record->event.pressed) {
				return MACRO( D(LALT), T(SCLN), U(LALT), END );
			}
			break;
	}
	return MACRO_NONE;
}

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
	return true;
}

void led_set_user(uint8_t usb_led) {

	if (usb_led & (1 << USB_LED_NUM_LOCK)) {
		
	} else {
		
	}

	if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
		
	} else {
		
	}

	if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
		
	} else {
		
	}

	if (usb_led & (1 << USB_LED_COMPOSE)) {
		
	} else {
		
	}

	if (usb_led & (1 << USB_LED_KANA)) {
		
	} else {
		
	}

}
Categories
Keyboard builds

3D printed macropad

ok so this whole thing took quite a while to make and there were a lot of iterations to get to this design, while there is still room for improvement I think now is a good time to publish this version.

so I wanted to create a 3D printed hotswap plate so that I can start with a prototype frame and check if my design makes sense and try it without having a hard time swapping the frame for a new version, so this is a hotswap plate that integrates the diode and does not need soldering to connect rows and columns together (while you can still solder the connections where the clips are and use them like regular hotswap plates)

I built 2 versions, one for the MX switches and one for choc switches as I primarily use choc switches for my custom builds.

I got a lot more information about how this works in my Youtube video about them https://youtu.be/v9r5DKZLz68