2020-09-11 01:25:28 -07:00
|
|
|
/* constants */
|
|
|
|
|
|
|
|
/* how tall the keyboard should be */
|
2021-08-22 12:38:10 +02:00
|
|
|
#define KBD_PIXEL_HEIGHT 240
|
2020-09-11 01:25:28 -07:00
|
|
|
|
|
|
|
/* if your layout leaves an empty margin, increase this to fix it */
|
2021-08-22 12:38:10 +02:00
|
|
|
#define KBD_PIXEL_OVERSCAN_WIDTH 5
|
2020-09-11 01:25:28 -07:00
|
|
|
|
2021-08-22 12:38:10 +02:00
|
|
|
/* Maximum number of keys */
|
|
|
|
#define KBD_POINTS 66
|
2020-09-11 01:25:28 -07:00
|
|
|
|
|
|
|
/* spacing between keys */
|
2021-08-22 12:38:10 +02:00
|
|
|
#define KBD_KEY_BORDER 2
|
2020-09-11 01:25:28 -07:00
|
|
|
|
|
|
|
#include "keyboard.h"
|
|
|
|
|
|
|
|
/* font (see `man fonts-conf` for instructions) */
|
|
|
|
static const char *fc_font_pattern =
|
2021-08-22 12:38:10 +02:00
|
|
|
"FiraMono Nerd Font:size=16:antialias=true:hinting=true";
|
2020-09-11 01:25:28 -07:00
|
|
|
|
|
|
|
/* layout declarations */
|
|
|
|
enum layout_names {
|
|
|
|
Basic = 0,
|
|
|
|
Special,
|
2021-08-22 22:43:29 +02:00
|
|
|
Simple,
|
2020-09-11 01:25:28 -07:00
|
|
|
NumLayouts,
|
|
|
|
};
|
|
|
|
|
2021-08-22 22:43:29 +02:00
|
|
|
static struct key keys_basic[], keys_special[], keys_simple[];
|
2020-09-11 01:25:28 -07:00
|
|
|
|
|
|
|
static struct layout layouts[NumLayouts] = {
|
|
|
|
[Basic] = {keys_basic},
|
|
|
|
[Special] = {keys_special},
|
2021-08-22 22:43:29 +02:00
|
|
|
[Simple] = {keys_simple},
|
2020-09-11 01:25:28 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
/* keyboard settings */
|
|
|
|
static struct kbd keyboard = {
|
|
|
|
/* default layout */
|
|
|
|
.layout = &layouts[Basic],
|
|
|
|
.scheme =
|
|
|
|
{
|
|
|
|
/* colors */
|
|
|
|
.bg = {.bgra = {15, 15, 15, 225}},
|
|
|
|
.fg = {.bgra = {45, 45, 45, 225}},
|
|
|
|
.high = {.bgra = {100, 100, 100, 225}},
|
|
|
|
.text = {.color = UINT32_MAX},
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
/* key layouts
|
|
|
|
*
|
|
|
|
* define keys like:
|
|
|
|
*
|
|
|
|
* `{
|
|
|
|
* "label",
|
|
|
|
* "SHIFT_LABEL",
|
|
|
|
* 1,
|
2021-08-22 12:38:10 +02:00
|
|
|
* [Code, Mod, Layout, EndRow, Last],
|
2020-09-11 01:25:28 -07:00
|
|
|
* [KEY_CODE, Modifier],
|
|
|
|
* [&layout]
|
|
|
|
* },`
|
|
|
|
*
|
|
|
|
* - label: normal label for key
|
|
|
|
*
|
|
|
|
* - shift_label: label for key in shifted (uppercase) layout
|
|
|
|
*
|
|
|
|
* - width: column width of key
|
|
|
|
*
|
|
|
|
* - type: what kind of action this key peforms (emit keycode, toggle modifier,
|
|
|
|
* switch layout, or end the layout)
|
|
|
|
*
|
|
|
|
* - code: key scancode or modifier name (see
|
|
|
|
* `/usr/include/linux/input-event-codes.h` for scancode names, and
|
|
|
|
* `keyboard.h` for modifiers)
|
|
|
|
*
|
|
|
|
* - layout: layout to switch to when key is pressed
|
|
|
|
*/
|
|
|
|
static struct key keys_basic[] = {
|
2021-08-22 12:38:10 +02:00
|
|
|
{"Esc", "Esc", 1.0, Code, KEY_ESC},
|
|
|
|
{"Tab", "Tab", 1.0, Code, KEY_TAB},
|
|
|
|
{"↑", "↑", 1.0, Code, KEY_UP},
|
|
|
|
{"↓", "↓", 1.0, Code, KEY_DOWN},
|
|
|
|
{"←", "←", 1.0, Code, KEY_LEFT},
|
|
|
|
{"→", "→", 1.0, Code, KEY_RIGHT},
|
|
|
|
{"'", "\"", 1.0, Code, KEY_APOSTROPHE},
|
|
|
|
{"/", "?", 1.0, Code, KEY_SLASH},
|
|
|
|
{";", ":", 1.0, Code, KEY_SEMICOLON},
|
|
|
|
{"`", "~", 1.0, Code, KEY_GRAVE},
|
|
|
|
{"", "", 0.0, EndRow},
|
|
|
|
|
|
|
|
{"1", "!", 1.0, Code, KEY_1},
|
|
|
|
{"2", "@", 1.0, Code, KEY_2},
|
|
|
|
{"3", "#", 1.0, Code, KEY_3},
|
|
|
|
{"4", "$", 1.0, Code, KEY_4},
|
|
|
|
{"5", "%", 1.0, Code, KEY_5},
|
|
|
|
{"6", "^", 1.0, Code, KEY_6},
|
|
|
|
{"7", "&", 1.0, Code, KEY_7},
|
|
|
|
{"8", "*", 1.0, Code, KEY_8},
|
|
|
|
{"9", "(", 1.0, Code, KEY_9},
|
|
|
|
{"0", ")", 1.0, Code, KEY_0},
|
|
|
|
{"-", "_", 1.0, Code, KEY_MINUS},
|
|
|
|
{"=", "+", 1.0, Code, KEY_EQUAL},
|
|
|
|
{"", "", 0.0, EndRow},
|
|
|
|
|
|
|
|
{"", "", 0.5, Pad},
|
|
|
|
{"q", "Q", 1.0, Code, KEY_Q},
|
|
|
|
{"w", "W", 1.0, Code, KEY_W},
|
|
|
|
{"e", "E", 1.0, Code, KEY_E},
|
|
|
|
{"r", "R", 1.0, Code, KEY_R},
|
|
|
|
{"t", "T", 1.0, Code, KEY_T},
|
|
|
|
{"y", "Y", 1.0, Code, KEY_Y},
|
|
|
|
{"u", "U", 1.0, Code, KEY_U},
|
|
|
|
{"i", "I", 1.0, Code, KEY_I},
|
|
|
|
{"o", "O", 1.0, Code, KEY_O},
|
|
|
|
{"p", "P", 1.0, Code, KEY_P},
|
|
|
|
{"", "", 0.0, EndRow},
|
|
|
|
|
|
|
|
{"Ct", "Ct", 1.0, Mod, Ctrl},
|
|
|
|
{"a", "A", 1.0, Code, KEY_A},
|
|
|
|
{"s", "S", 1.0, Code, KEY_S},
|
|
|
|
{"d", "D", 1.0, Code, KEY_D},
|
|
|
|
{"f", "F", 1.0, Code, KEY_F},
|
|
|
|
{"g", "G", 1.0, Code, KEY_G},
|
|
|
|
{"h", "H", 1.0, Code, KEY_H},
|
|
|
|
{"j", "J", 1.0, Code, KEY_J},
|
|
|
|
{"k", "K", 1.0, Code, KEY_K},
|
|
|
|
{"l", "L", 1.0, Code, KEY_L},
|
|
|
|
{"", "", 0.5, Pad},
|
|
|
|
{"", "", 0.0, EndRow},
|
|
|
|
|
|
|
|
{"⇧", "⇧", 1.5, Mod, Shift},
|
|
|
|
{"z", "Z", 1.0, Code, KEY_Z},
|
|
|
|
{"x", "X", 1.0, Code, KEY_X},
|
|
|
|
{"c", "C", 1.0, Code, KEY_C},
|
|
|
|
{"v", "V", 1.0, Code, KEY_V},
|
|
|
|
{"b", "B", 1.0, Code, KEY_B},
|
|
|
|
{"n", "N", 1.0, Code, KEY_N},
|
|
|
|
{"m", "M", 1.0, Code, KEY_M},
|
|
|
|
{"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
|
|
|
|
{"", "", 0.0, EndRow},
|
|
|
|
|
|
|
|
{"Sym", "Sym", 1.0, Layout, 0, &layouts[Special]},
|
|
|
|
{"Alt", "Alt", 1.0, Mod, AltGr},
|
|
|
|
{",", "<", 1.0, Code, KEY_COMMA},
|
|
|
|
{"", "", 4.0, Code, KEY_SPACE},
|
|
|
|
{".", ">", 1.0, Code, KEY_DOT},
|
|
|
|
{"Entr", "Entr", 2.0, Code, KEY_ENTER},
|
|
|
|
|
2020-09-11 01:25:28 -07:00
|
|
|
|
|
|
|
/* end of layout */
|
2021-08-22 12:38:10 +02:00
|
|
|
{"", "", 0.0, Last},
|
2020-09-11 01:25:28 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
static struct key keys_special[] = {
|
2021-08-22 12:38:10 +02:00
|
|
|
{"Esc", "Esc", 1.0, Code, KEY_ESC},
|
|
|
|
{"Tab", "Tab", 1.0, Code, KEY_TAB},
|
|
|
|
{"↑", "↑", 1.0, Code, KEY_UP},
|
|
|
|
{"↓", "↓", 1.0, Code, KEY_DOWN},
|
|
|
|
{"←", "←", 1.0, Code, KEY_LEFT},
|
|
|
|
{"→", "→", 1.0, Code, KEY_RIGHT},
|
|
|
|
{"⇈", "⇈", 1.0, Code, KEY_PAGEUP},
|
|
|
|
{"⇊", "⇊", 1.0, Code, KEY_PAGEDOWN},
|
|
|
|
{"⇤", "⇤", 1.0, Code, KEY_HOME},
|
|
|
|
{"⇥", "⇥", 1.0, Code, KEY_END},
|
|
|
|
{"", "", 0.0, EndRow},
|
|
|
|
|
|
|
|
{"1", "!", 1.0, Code, KEY_1},
|
|
|
|
{"2", "@", 1.0, Code, KEY_2},
|
|
|
|
{"3", "#", 1.0, Code, KEY_3},
|
|
|
|
{"4", "$", 1.0, Code, KEY_4},
|
|
|
|
{"5", "%", 1.0, Code, KEY_5},
|
|
|
|
{"6", "^", 1.0, Code, KEY_6},
|
|
|
|
{"7", "&", 1.0, Code, KEY_7},
|
|
|
|
{"8", "*", 1.0, Code, KEY_8},
|
|
|
|
{"9", "(", 1.0, Code, KEY_9},
|
|
|
|
{"0", ")", 1.0, Code, KEY_0},
|
|
|
|
{"", "", 0.0, EndRow},
|
|
|
|
|
2021-08-22 22:43:29 +02:00
|
|
|
{"", "", 1.0, Pad},
|
|
|
|
{"", "", 1.0, Pad},
|
|
|
|
{"", "", 1.0, Pad},
|
|
|
|
{"", "", 1.0, Pad},
|
|
|
|
{"", "", 1.0, Pad},
|
|
|
|
{"", "", 1.0, Pad},
|
|
|
|
{"", "", 1.0, Pad},
|
|
|
|
{"", "", 1.0, Pad},
|
|
|
|
{"", "", 1.0, Pad},
|
|
|
|
{"", "", 1.0, Pad},
|
2021-08-22 12:38:10 +02:00
|
|
|
{"", "", 0.0, EndRow},
|
|
|
|
|
|
|
|
{"Ct", "Ct", 2.0, Mod, Ctrl},
|
|
|
|
{"`", "~", 1.0, Code, KEY_GRAVE},
|
|
|
|
{"'", "\"", 1.0, Code, KEY_APOSTROPHE},
|
|
|
|
{"-", "_", 1.0, Code, KEY_MINUS},
|
|
|
|
{"=", "+", 1.0, Code, KEY_EQUAL},
|
|
|
|
{"[", "{", 1.0, Code, KEY_LEFTBRACE},
|
|
|
|
{"]", "}", 1.0, Code, KEY_RIGHTBRACE},
|
|
|
|
{"\\", "|", 1.0, Code, KEY_BACKSLASH},
|
|
|
|
{"Del", "Del", 1.0, Code, KEY_DELETE},
|
|
|
|
{"", "", 0.0, EndRow},
|
|
|
|
|
|
|
|
{"⇧", "⇧", 2.0, Mod, Shift},
|
|
|
|
{";", ":", 1.0, Code, KEY_SEMICOLON},
|
|
|
|
{"/", "?", 1.0, Code, KEY_SLASH},
|
2021-08-22 22:43:29 +02:00
|
|
|
{"", "", 1.0, Pad},
|
|
|
|
{"", "", 1.0, Pad},
|
|
|
|
{"", "", 1.0, Pad},
|
|
|
|
{"", "", 1.0, Pad},
|
|
|
|
{"", "", 1.0, Pad},
|
2021-08-22 12:38:10 +02:00
|
|
|
{"⌫", "⌫", 1.0, Code, KEY_BACKSPACE},
|
|
|
|
{"", "", 0.0, EndRow},
|
|
|
|
|
2021-08-22 22:43:29 +02:00
|
|
|
{"Abc", "Abc", 1.0, Layout, 0, &layouts[Simple]},
|
|
|
|
{"Alt", "Alt", 1.0, Mod, AltGr},
|
|
|
|
{",", "<", 1.0, Code, KEY_COMMA},
|
|
|
|
{"", "", 4.0, Code, KEY_SPACE},
|
|
|
|
{".", ">", 1.0, Code, KEY_DOT},
|
|
|
|
{"Entr", "Entr", 2.0, Code, KEY_ENTER},
|
|
|
|
|
|
|
|
/* end of layout */
|
|
|
|
{"", "", 0.0, Last},
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct key keys_simple[] = {
|
|
|
|
{"", "", 0.5, Pad},
|
|
|
|
{"q", "Q", 1.0, Code, KEY_Q},
|
|
|
|
{"w", "W", 1.0, Code, KEY_W},
|
|
|
|
{"e", "E", 1.0, Code, KEY_E},
|
|
|
|
{"r", "R", 1.0, Code, KEY_R},
|
|
|
|
{"t", "T", 1.0, Code, KEY_T},
|
|
|
|
{"y", "Y", 1.0, Code, KEY_Y},
|
|
|
|
{"u", "U", 1.0, Code, KEY_U},
|
|
|
|
{"i", "I", 1.0, Code, KEY_I},
|
|
|
|
{"o", "O", 1.0, Code, KEY_O},
|
|
|
|
{"p", "P", 1.0, Code, KEY_P},
|
|
|
|
{"", "", 0.0, EndRow},
|
|
|
|
|
|
|
|
{"Ct", "Ct", 1.0, Mod, Ctrl},
|
|
|
|
{"a", "A", 1.0, Code, KEY_A},
|
|
|
|
{"s", "S", 1.0, Code, KEY_S},
|
|
|
|
{"d", "D", 1.0, Code, KEY_D},
|
|
|
|
{"f", "F", 1.0, Code, KEY_F},
|
|
|
|
{"g", "G", 1.0, Code, KEY_G},
|
|
|
|
{"h", "H", 1.0, Code, KEY_H},
|
|
|
|
{"j", "J", 1.0, Code, KEY_J},
|
|
|
|
{"k", "K", 1.0, Code, KEY_K},
|
|
|
|
{"l", "L", 1.0, Code, KEY_L},
|
|
|
|
{"", "", 0.5, Pad},
|
|
|
|
{"", "", 0.0, EndRow},
|
|
|
|
|
|
|
|
{"⇧", "⇧", 1.5, Mod, Shift},
|
|
|
|
{"z", "Z", 1.0, Code, KEY_Z},
|
|
|
|
{"x", "X", 1.0, Code, KEY_X},
|
|
|
|
{"c", "C", 1.0, Code, KEY_C},
|
|
|
|
{"v", "V", 1.0, Code, KEY_V},
|
|
|
|
{"b", "B", 1.0, Code, KEY_B},
|
|
|
|
{"n", "N", 1.0, Code, KEY_N},
|
|
|
|
{"m", "M", 1.0, Code, KEY_M},
|
|
|
|
{"⌫", "⌫", 1.5, Code, KEY_BACKSPACE},
|
|
|
|
{"", "", 0.0, EndRow},
|
|
|
|
|
2021-08-22 12:38:10 +02:00
|
|
|
{"Abc", "Abc", 1.0, Layout, 0, &layouts[Basic]},
|
|
|
|
{"Alt", "Alt", 1.0, Mod, AltGr},
|
|
|
|
{",", "<", 1.0, Code, KEY_COMMA},
|
|
|
|
{"", "", 4.0, Code, KEY_SPACE},
|
|
|
|
{".", ">", 1.0, Code, KEY_DOT},
|
|
|
|
{"Entr", "Entr", 2.0, Code, KEY_ENTER},
|
2020-09-11 01:25:28 -07:00
|
|
|
|
2021-08-22 22:43:29 +02:00
|
|
|
|
2020-09-11 01:25:28 -07:00
|
|
|
/* end of layout */
|
2021-08-22 12:38:10 +02:00
|
|
|
{"", "", 0.0, Last},
|
2020-09-11 01:25:28 -07:00
|
|
|
};
|
2021-08-22 22:43:29 +02:00
|
|
|
|