Crear y flashear tu propio keymap con QMK firmware
Tags: qmk, keyboard, keymap, spanish
Published: 2021-05-09 21:37:30

---
title: Crear y flashear tu propio keymap con QMK firmware
published: true
description: Cómo flashear tu propio keymap con QMK firmware para evitar cambiar el idioma de entrada.
tags: qmk, keyboard, keymap, spanish
cover_image: https://user-images.githubusercontent.com/736191/47172655-0d0e9b80-d347-11e8-8a11-ccce9bf8d2b4.JPG
---

Hace unos meses compré un teclado dividido para mejorar la postura a la hora de escribir. La verdad es que la experiencia me gustó mucho. A pesar de que el cambio fue muy grande (mi teclado es un corne keyboard, por lo que es ortogonal) me acostumbré muy rápido.

Para el no que sepa de la existencia de los teclados divididos, aquí dejo un [git](https://github.com/diimdeep/awesome-split-keyboards) donde se pueden ver la multitud de teclados divididos que existen. Es un mundo gigante y, a modo de advertencia, digo que *de ahí no se sale*. Engancha muchísimo :D

Por dar un poco de contexto, para montarte un teclado de este tipo necesitas comprar todas las piezas (los hay ya montados):

* Cableado
* Placas 
* Switches
* Keycaps

Esto mínimo. Después, casi todos llevan pantallas oled, LEDs si son retroiluminados, escoger el switch que más te guste...  un sin fin de posibilidades. No estamos aquí para hablar de eso, así que os dejo un par de enlaces de canales que sigo que os darán una idea:

* [Hola Mundo](https://www.youtube.com/watch?v=PORNXyLBeB4) Me encanta este canal:D.

* [Nate Gentile](https://www.youtube.com/watch?v=ytPUe3NtS38)

## El problema

Bien, supongamos que ya tienes tu teclado nuevo montado. Probablemente los micros que trae ya vengan con un mapeo de las teclas ya flasheado, pero ese keymap estará en inglés. Ojo, esto no está mal en absoluto, de hecho, para programar a mi me resulta súper cómodo. Mi problema radica al cambiar de PC.

Cuando utilizo el ordenador de otra persona, mi portátil o el portátil de la empresa no doy una :( por que estoy acostumbrado a estar con el idioma de entrada en inglés. Así que, si necesito trabajar en otro, necesito andar instalando los paquetes de idioma y a ver, esto práctico práctico no es.

Entonces en estas estamos, con el teclado en inglés y queriendo escribir con el idioma de entrada en español. La solución sería fácil. Me busco un teclado en español y lo flasheo con la [qmk toolbox](https://github.com/qmk/qmk_toolbox). No encontre ninguna configuración en español para mi teclado, será que no se buscar :(.

## Lo que podría pasar como solución

Una solución que a mi no me resultó por lo de andar instalando los layout sería crear el tuyo propio. Lo de que no me servía me di cuenta una vez ya tenia todo hecho y funcionando por lo que os dejo una pequeña información de como lo hice.

Utilicé la herramienta de windows, lo cierto es que es sencilla, simplemente de creas tu layout ejecutas la herramienta y hace un .exe que puedes instalar en cualquier PC, después simplemente tendrías que [cambiar el idioma de entrada](https://support.microsoft.com/es-es/windows/administrar-la-entrada-y-la-configuraci%C3%B3n-de-idioma-en-windows-10-12a10cb4-8626-9b77-0ccb-5013e0c7c7a2).

* [Microsoft layout creator](https://www.microsoft.com/en-us/download/details.aspx?id=102134)
* [Altgr english layout](https://github.com/Luis-Art-Guerra/USKeyboardSetPlusSpanish)

## La solución real

Necesitaba tres cosas:

* No instalar nada cada vez que enchufaba el teclado.
* Trabajar con el idioma de entrada(layout) en español.
* Tener acceso fácil a los símbolos para programar.

Podía buscar cualquier keymap en el repositorio de [qmk firmware](https://github.com/qmk/qmk_firmware) y luego flashearlo en el teclado. Esto, sería lo más rápido, de hecho si quería una configuración concreta podía acudir a la [página](https://config.qmk.fm), configurar el teclado con una herramienta web y ya flashearlo. El único problema es que no tenía teclados es español, pero primero probar que la toolbox funciona.

### Flashear un .hex en el teclado

Tremendamente sencillo, tan soló es cargar el archivo en la aplicación, que se puede descargar [aquí](https://github.com/qmk/qmk_toolbox). Resetear el teclado y pinchar en flash:

![Flash keyboard toolbox](https://camo.githubusercontent.com/0569fe7e7935dc74fbe71e4162d02564c6fd88ad2ac2071788e24cf98469e210/68747470733a2f2f692e696d6775722e636f6d2f636652565759372e706e67)


### El camino "largo", crear y compilar tu propio keymap.

Para crear tu propio keymap lo más sencillo es copiar uno existente y modificarlo, pero para eso primero tenemos que instalar el entorno para poder desarrollar, en este caso estoy en el wsl de windows:

#### Setup

```bash
git clone https://github.com/qmk/qmk_firmware.git
cd qmk_firmware/
python3.9  -m venv venv
source venv/bin/activate
pip3 install qmk
qmk setup
```

Después con la siguiente línea puedes compilar un teclado en concreto, en este caso el crkbd con el keymap default:

```bash
qmk compile -kb crkbd/rev1 -km default
```

Este comando generará un .hex en la carpeta actual.

#### Los ficheros del keymap

```bash
> tree keyboards/crkbd/keymaps/mandrewcito/
keyboards/crkbd/keymaps/mandrewcito/
├── config.h
├── keymap.c
└── rules.mk
```

Esto es un copia de otro teclado, para así simplemente editar las teclas concretas a mapear, pero ¿que teclas y comó? Dependerá del teclado que tengas en mi caso eran las ISO inglesas a las ISO españolas, la distribución también puede ser ANSI, para una diferencia rápida, dejo la siguiente imagen:

![ISO vs ANSI](https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Physical_keyboard_layouts_comparison_ANSI_ISO.png/1280px-Physical_keyboard_layouts_comparison_ANSI_ISO.png)

**¿Cómo localizar las teclas que faltan?** Bajo la carpeta /quantum/keymap_extras están todos los keymaps mapeados del ISO en inglés a otros idiomas y nosotros utilizamos el keymap_spanish.h aquí podemos ver todas teclas y utilizar sólo la que nos faltan. Para el resto te teclas se pueden buscar en los ficheros de cabeceras o la solución fácil es utilizar la página de [qmk de configurar teclados](https://github.com/qmk/qmk_toolbox) y ver el código:
![QMK config](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8g4sm8jy50q79sw6ezd1.PNG)

Ahora simplemente necesitamos **editar el keymap.c** pero antes enseño una vista previa del [keymap_spanish.h](https://github.com/qmk/qmk_firmware/blob/9dea6f772077dc5c09daf40378e45884d29ab2e2/quantum/keymap_extras/keymap_spanish.h) para que se vea cómo localizar las teclas:

```c
// clang-format off

/*
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
 * │ º │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ ¡ │       │
 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
 * │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ` │ + │     │
 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
 * │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ñ │ ´ │ Ç │    │
 * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
 * │    │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │          │
 * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
 * │    │    │    │                        │    │    │    │    │
 * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
 */
// Row 1
#define ES_MORD KC_GRV  // º 
#define ES_1    KC_1    // 1
#define ES_2    KC_2    // 2
#define ES_3    KC_3    // 3
#define ES_4    KC_4    // 4
#define ES_5    KC_5    // 5
#define ES_6    KC_6    // 6
#define ES_7    KC_7    // 7
#define ES_8    KC_8    // 8
#define ES_9    KC_9    // 9
#define ES_0    KC_0    // 0
#define ES_QUOT KC_MINS // '
#define ES_IEXL KC_EQL  // ¡
```

Incluyendo este keymap_spanish.h en nuestro keymap.c podemos utilizar estas constantes para remapear las capas del teclado. Dejo un enlace a [mi keymap.c](https://github.com/mandrewcito/qmk_firmware/blob/master/keyboards/crkbd/keymaps/mandrewcito/keymap.c) aquí por si os es de utilidad, puedo dejar también el .hex si alguien lo pide, pero considero que la configuración de las teclas es algo bastante personal, debes de hacer muchas pruebas antes de quedarte con una distribución:

```c
#include QMK_KEYBOARD_H
#include "version.h"
#include "keymap_spanish.h"
// ......

```

La diferencia con otros keymaps, radica en que yo la mayoría de símbolos los tengo en una capa diferente. Así, de alguna manera palio la falta de teclas que tiene el corne:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/55bu8rh5dqoby8qhxu6h.PNG)


Dejo aquí el enlace al fork que hice para añadir mi teclado, en concreto al [commit](https://github.com/mandrewcito/qmk_firmware/commit/b06d416e40e068b862b58ece0f8b145827a3340f) donde subo los ficheros necesarios para compilar mi keymap. Compilarlo sería algo 
así:

```bash
qmk compile -kb crkbd/rev1 -km mandrewcito
```

Después solo sería flashear el archivo que se genera y listo.

La verdad es que no se si esto será de mucha utilidad, no es algo que sea extremadamente difícil pero a mi me llevo un ratín configurar todo y pasé por varios modelos fallidos. Así que si esto le sirve a alguien para no perder tanto tiempo como yo pues genial.

Cualquier pregunta me la dejáis por aquí :D

PD: Este post, y el keymap de mi teclado lo iré actualizando si encuentro alguna cosa más que vea que es de utilidad.