Skip to content

Instantly share code, notes, and snippets.

@sehrgut
Last active September 6, 2024 21:15
Show Gist options
  • Save sehrgut/622edc0f0e3a75bcff367c4cff2a436a to your computer and use it in GitHub Desktop.
Save sehrgut/622edc0f0e3a75bcff367c4cff2a436a to your computer and use it in GitHub Desktop.
Libra Mini VIA and Vial keyboard definitions

Libra Mini (putative) rev. 2 VIA and Vial keyboard definitions

The VIA and Vial keyboard definitions distributed by mysterious Gdrive links have several issues. First, there seems to have been an undocumented hardware revision since the circulating VIA definition was created, in which the productId was changed from 0x4C24 to 0x4C23. As well, the VIA v2 format was trivially updatable to VIA v3 compatibility. The attached files can be used for the putative rev. 2 boards with VIA and Vial respectively.

Board Revisions

  • rev. 1 productId=0x4C24 Likely first, as this revision is in older copies of the VIA definition.
  • rev. 2 productId=0x4C23 Likely second, as this revision is in all known released copies of the Vial definition, later than the earliest VIA definition; and as well represents boards currently shipping from AliExpress.

Troubleshooting

If your board is not detectable with these keyboard definitions, try changing the productId field to 0x4C24 or checking your USB bus to confirm the vendorId and productId of your board. If you discover a new productId in the wild, please submit an update to this repository.

License

No license or warranty is expressed or implied. It seems unlikely that the original files are currently being distributed by any original rightsholder, and distributing updated files that function with the boards currently being distributed with (and sometimes without) the unusable files is fair use in the United States as these files are 1) offered non-commercially and with no expectation of profit by both their originators and this repository, 2) factual and non-creative, as they simply express the physical layout of the product being configured, and 3) has no negative impact on commercial sales of the product, but rather, by extending the utility of the product, has a positive impact on its commercial sales.

Keywords: libra mini json, libra mini via, libra mini vial

{
"name": "Libra Mini rev. 2",
"vendorId": "0x4C4D",
"productId": "0x4C23",
"matrix": { "rows": 5, "cols": 14 },
"layouts": {
"labels": [
"Split Backspace",
"Joystick"
],
"keymap": [
[{"x":12.5},"0,11\n\n\n0,1","3,11\n\n\n0,1"],
[{"y":0.25,"x":0.25},"0,0","0,1",{"x":9.25},"0,10",{"w":2},"0,11\n\n\n0,0"],
[{"x":0.13,"w":1.25},"1,0","1,1",{"x":9.45},"1,10",{"x":0,"w":1.75},"1,11"],
[{"w":1.75},"2,0","2,1",{"x":8.75},"2,10","2,11",{"w":1.25},"3,10"],
[{"ry":4.5,"y":-0.25,"x":0.13,"w":1.25},"3,0","3,1",{"x":9.77,"w":1.25},"3,8\n\n\n1,0",{"x":0,"w":1.25},"3,9\n\n\n1,0"],
[{"y":0.25,"x":12.63,"w2":1.5,"h2":0.1,"x2":-0.5},"3,8\n\n\n1,1","3,9\n\n\n1,1"],
[{"y":-0.9,"x":11.5,"w":0.5,"h":0.5},"4,3\n\n\n1,1"],
[{"y":-0.5,"x":11,"w":0.5,"h":0.5},"4,6\n\n\n1,1",{"w":0.5,"h":0.5},"4,4\n\n\n1,1",{"w":0.5,"h":0.5},"4,7\n\n\n1,1"],
[{"r":8,"rx":1.25,"ry":1,"x":1.25},"0,2","0,3","0,4","0,5"],
[{"x":1.63},"1,2","1,3","1,4","1,5"],
[{"x":2},"2,2","2,3","2,4","2,5"],
[{"x":2.75,"w":1.25},"3,3",{"w":2},"3,4"],
[{"r":-8,"rx":9.75,"ry":6.75,"y":-5.25,"x":-1.75},"0,6","0,7","0,8","0,9"],
[{"x":-1.62},"1,6","1,7","1,8","1,9"],
[{"x":-2},"2,6","2,7","2,8","2,9"],
[{"x":-2,"w":2.25},"3,6",{"w":1.25},"3,7\n\n\n1,0"],
[{"y":0.25,"x":0.25},"3,7\n\n\n1,1"]
]
}
}
{
"name": "Libra Mini rev. 2",
"vendorId": "0x4C4D",
"productId": "0x4C23",
"vendorIdBk": "0x4C4D",
"productIdBk": "0x4C23",
"lighting": "none",
"matrix": { "rows": 5, "cols": 14 },
"layouts": {
"labels": [
"Split Backspace",
"Joystick"
],
"keymap": [
[{"x":12.5},"0,11\n\n\n0,1","3,11\n\n\n0,1"],
[{"y":0.25,"x":0.25},"0,0","0,1",{"x":9.25},"0,10",{"w":2},"0,11\n\n\n0,0"],
[{"x":0.13,"w":1.25},"1,0","1,1",{"x":9.45},"1,10",{"x":0,"w":1.75},"1,11"],
[{"w":1.75},"2,0","2,1",{"x":8.75},"2,10","2,11",{"w":1.25},"3,10"],
[{"ry":4.5,"y":-0.25,"x":0.13,"w":1.25},"3,0","3,1",{"x":9.77,"w":1.25},"3,8\n\n\n1,0",{"x":0,"w":1.25},"3,9\n\n\n1,0"],
[{"y":0.25,"x":12.63,"w2":1.5,"h2":0.1,"x2":-0.5},"3,8\n\n\n1,1","3,9\n\n\n1,1"],
[{"y":-0.9,"x":11.5,"w":0.5,"h":0.5},"4,3\n\n\n1,1"],
[{"y":-0.5,"x":11,"w":0.5,"h":0.5},"4,6\n\n\n1,1",{"w":0.5,"h":0.5},"4,4\n\n\n1,1",{"w":0.5,"h":0.5},"4,7\n\n\n1,1"],
[{"r":8,"rx":1.25,"ry":1,"x":1.25},"0,2","0,3","0,4","0,5"],
[{"x":1.63},"1,2","1,3","1,4","1,5"],
[{"x":2},"2,2","2,3","2,4","2,5"],
[{"x":2.75,"w":1.25},"3,3",{"w":2},"3,4"],
[{"r":-8,"rx":9.75,"ry":6.75,"y":-5.25,"x":-1.75},"0,6","0,7","0,8","0,9"],
[{"x":-1.62},"1,6","1,7","1,8","1,9"],
[{"x":-2},"2,6","2,7","2,8","2,9"],
[{"x":-2,"w":2.25},"3,6",{"w":1.25},"3,7\n\n\n1,0"],
[{"y":0.25,"x":0.25},"3,7\n\n\n1,1"]
],
"keymap2": [
[{"x":12.5},"0,11\n\n\n0,1","3,11\n\n\n0,1"],
[{"y":0.25,"x":0.25},"0,0","0,1",{"x":9.25},"0,10",{"w":2},"0,11\n\n\n0,0"],
[{"x":0.13,"w":1.25},"1,0","1,1",{"x":9.45},"1,10",{"x":0,"w":1.75},"1,11"],
[{"w":1.75},"2,0","2,1",{"x":8.75},"2,10","2,11",{"w":1.25},"3,10"],
[{"ry":4.5,"y":-0.25,"x":0.13,"w":1.25},"3,0","3,1",{"x":9.77,"w":1.25},"3,8\n\n\n1,0",{"x":0,"w":1.25},"3,9\n\n\n1,0"],
[{"y":0.25,"x":12.63,"w2":1.5,"h2":0.1,"x2":-0.5},"3,8\n\n\n1,1","3,9\n\n\n1,1"],
[{"y":-0.9,"x":11.5,"w":0.5,"h":0.5},"4,3\n\n\n1,1"],
[{"y":-0.75,"x":11,"w":0.5,"h":0.5},"4,6\n\n\n1,1",{"x":0.5,"w":0.5,"h":0.5},"4,7\n\n\n1,1"],
[{"y":-0.75,"x":11.5,"w":0.5,"h":0.5},"4,4\n\n\n1,1"],
[{"r":8,"rx":1.25,"ry":1,"x":1.25},"0,2","0,3","0,4","0,5"],
[{"x":1.63},"1,2","1,3","1,4","1,5"],
[{"x":2},"2,2","2,3","2,4","2,5"],
[{"x":2.75,"w":1.25},"3,3",{"w":2},"3,4"],
[{"r":-8,"rx":9.75,"ry":6.75,"y":-5.25,"x":-1.75},"0,6","0,7","0,8","0,9"],
[{"x":-1.62},"1,6","1,7","1,8","1,9"],
[{"x":-2},"2,6","2,7","2,8","2,9"],
[{"x":-2,"w":2.25},"3,6",{"w":1.25},"3,7\n\n\n1,0"],
[{"y":0.25,"x":0.25},"3,7\n\n\n1,1"]
]
}
}
@icemagistrate
Copy link

icemagistrate commented Sep 6, 2024

To start I'm a newbie in the custom keyboard, especially so on the software side. I just recently bought a Libra mini 40%/ i have tried loading both ".json" files. i see it load and show the joystick but on mapping it shows errors such as:

  1. Received invalid protocol version from device
    Device: LIBRE MINI
    Vid: Ox4C4D
    Pid: Ox4C23

  2. Fetching v2 definition failed
    Device: LIBRE MINI
    Vid: ox4C4D
    Pid: Ox4C23

I was able to sideload and edit it in Vial. but I would rather have it on Via, for easier management as I also have a keychron Q0 Plus.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment