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

Categories
Uncategorized

Custom Datahand

so I started building a datahand prototype for one finger unit and instead of using optical switches it uses simple click buttons.

the levers use the click buttons and the bottom switch is a kailh low profile choc
its using these mini buttons


wHand Fusion File

also here is my work in progress fusion 360 file for download, if you want to collaborate I have a discord server setup here https://discord.gg/ctYr5BVF7b as I really would like to see this thing come to live.

the whole sketch thing is still more in the proof of concept stage and needs some bigger cleanups for a final version.

Categories
Uncategorized

Rofi bring window

i had the issue that i didn’t only need a window switcher but also a tool that would grab a window from a hidden workspace and bring it to the current one.

the rofi window switcher only switched my current workspace to be the one with the window I’m looking for but that’s just not enough.

but rofi is customizable so i added something with wmctrl

#!/bin/zsh
if [ $1 ]
then
	echo $1 | cut -d' ' -f1 | read h; herbstclient bring ${h:0:10}
else
	# just removing the hostname from the output as i dont need it in rofi
	wmctrl -l | sed 's/wDeskArch //g'
fi

this lists all open windows and i can fuzzy search with rofi in it and the herbstclient bring command brings the window to my current workspace.

then this is just added to my herbstluftwm autostart

hc keybind $Mod-t spawn rofi -modi grab:~/dotfiles/grabwindow.zsh -show grab
Categories
Uncategorized

ESP Matrix display

here is my Arduino Project for the ESP8266

second responsiveness & app transitions

download the Arduino Project here. would be cool if i hear from you if do do something cool with it. as always https://creativecommons.org/licenses/by/4.0/

Categories
Uncategorized

wSplit Keyboard

this is the split keyboard i build to have a still portable version of the planck as a split keyboard while gaining some perks from my expieriences from the ergogoxthanks to /u/winterNebs for the tip with homerow modifiers and of course vladislav for writing it: https://precondition.github.io/home-row-mods

(v1) here are the fusion360 file, the keymap.c and a folder of my simply modified lets split keyboard in qmk in case i forgot something im using the rev2 folder.

oh yeah license stuff https://creativecommons.org/licenses/by/4.0/

do whatever you like with it but if you do try adding attribution (just the fusion file) Im also glad to hear about anything you build with this happy building

UPDATE:

i just did a video with more details on this keyboard and the build process https://youtu.be/WmjB4KrfuN0

i also inserted a numberrow at the top and moved everything else down one row as tap and hold modifiers now work very nice.

I updated the firmware config a and cleaned up some parts so i recommend using the new firmware folder as an example config.

UPDATE version 3:

The wSplit now has vial support source is available in my fork for now

https://github.com/wlard/vial-qmk/tree/vial/keyboards/wsplit

Downloads

version 2

version 1