• Stars
    star
    1,069
  • Rank 43,234 (Top 0.9 %)
  • Language
    C
  • License
    MIT License
  • Created over 8 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The final version of the AI designed keyboard layout

Halmak Keyboard Layout

This is an AI designed keyboard layout that was built within the keyboard-genetics project. More details and a documented process can be found on the blog Nikolay Rocks.

Keyboard Layout

Features

  • Build based on the real world hand movements analysis
  • Nearly maximal possible typing efficiency
  • Very low overall fingers movement distance
  • Very low same finger / same hand usage overheads
  • Very low overall horizontal hands movement
  • Highly symmetrical design that accounts for individual fingers strength
  • Designed with the modern, web based English in mind

Comparisons

During the research I've identified the following results: in terms of efficiency

  • QWERTY - 0% (baseline)
  • Dvorak - +77%
  • Colemak - +84%
  • Workman - +101%
  • Halmak - +134%

Please refer to the article Halmak Reborn for the more detailed breakdown of the results.

All scripts are opensourced and can be verified in the keyboard-genetics repository.

The Name

The name is a combination of HAL-9000, as a reference to the layout being designed by an AI. And, Dvorak as a gratitude to Mr. Dvorak for his dedication to the layouts optimizations process. The letter m in between is just to make it sound nicer. Or is it!?...

Installation

  • Git clone all the stuff somewhere
  • Copy Halmak.bundle into your /Library/Keyboard Layouts folder (create if it is missing)
  • Sign out, Sign in
  • Go to the keyboard preferences and add the Halmak layout
  • Ask here in issues if nothing works

Android installation for physical keyboards

  1. Install Extra Physical Keyboard Layouts from the Play Store
    Source code is available on github
  2. Connect a physical keyboard to your Android device e.g. via bluetooth or OTG
  3. Select the Halmak layout in your system menu e.g. System > Language and Input > Physical keyboard > Keyboard Name

Integrations

Karabiner Elements

To enable virtual key mapping for Halmak on your macOS machine via Karabiner Elements, you can use the following configuration inside your simple_modifications section of your $HOME/.config/karabiner/karabiner.json file:

{ "from": { "key_code": "q" }, "to": [{ "key_code": "w" }] },
{ "from": { "key_code": "w" }, "to": [{ "key_code": "l" }] },
{ "from": { "key_code": "e" }, "to": [{ "key_code": "r" }] },
{ "from": { "key_code": "r" }, "to": [{ "key_code": "b" }] },
{ "from": { "key_code": "t" }, "to": [{ "key_code": "z" }] },
{ "from": { "key_code": "y" }, "to": [{ "key_code": "semicolon" }] },
{ "from": { "key_code": "u" }, "to": [{ "key_code": "q" }] },
{ "from": { "key_code": "i" }, "to": [{ "key_code": "u" }] },
{ "from": { "key_code": "o" }, "to": [{ "key_code": "d" }] },
{ "from": { "key_code": "p" }, "to": [{ "key_code": "j" }] },
{ "from": { "key_code": "a" }, "to": [{ "key_code": "s" }] },
{ "from": { "key_code": "s" }, "to": [{ "key_code": "h" }] },
{ "from": { "key_code": "d" }, "to": [{ "key_code": "n" }] },
{ "from": { "key_code": "f" }, "to": [{ "key_code": "t" }] },
{ "from": { "key_code": "g" }, "to": [{ "key_code": "comma" }] },
{ "from": { "key_code": "h" }, "to": [{ "key_code": "period" }] },
{ "from": { "key_code": "j" }, "to": [{ "key_code": "a" }] },
{ "from": { "key_code": "k" }, "to": [{ "key_code": "e" }] },
{ "from": { "key_code": "l" }, "to": [{ "key_code": "o" }] },
{ "from": { "key_code": "semicolon" }, "to": [{ "key_code": "i" }] },
{ "from": { "key_code": "z" }, "to": [{ "key_code": "f" }] },
{ "from": { "key_code": "x" }, "to": [{ "key_code": "m" }] },
{ "from": { "key_code": "c" }, "to": [{ "key_code": "v" }] },
{ "from": { "key_code": "v" }, "to": [{ "key_code": "c" }] },
{ "from": { "key_code": "b" }, "to": [{ "key_code": "slash" }] },
{ "from": { "key_code": "n" }, "to": [{ "key_code": "g" }] },
{ "from": { "key_code": "m" }, "to": [{ "key_code": "p" }] },
{ "from": { "key_code": "comma" }, "to": [{ "key_code": "x" }] },
{ "from": { "key_code": "period" }, "to": [{ "key_code": "k" }] },
{ "from": { "key_code": "slash" }, "to": [{ "key_code": "y" }] }

Kinesis Advantage 2

To enable native key mapping for Halmak on your Kinesis Advantage 2

  1. Download our 1_qwerty.txt file
  2. Program+Shift+Escape to enable power user mode (should see 4 LED flashes)
  3. Program+F1 to mount to the keyboard as a drive (should see a few flashes)
  4. Drag the downloaded 1_qwerty.txt file into ADVANTAGE2 / active
  5. Open Disk Utility, right-click on the drive, select Eject (must be "Eject", as unmount will not write the file)
  6. Program+F3 to enable QWERTY, then Program+1 to enable our Halmak modification of QWERTY

Refer to the Kinesis Advantage 2 support page for assistance.

Type Fu

To learn Halmak, we have an integration for Type Fu.

  1. Download our Halmak.tfl file
  2. Open Type Fu
  3. Preferences
  4. Keyboard
  5. Hamburger menu
  6. Import from File
  7. Select the file you downloaded from the first step

Copyright & License

Again, I'm not sure if there is a point to this. But I guess it's MIT.

Copyright (C) 2016 Nikolay Nemshilov

More Repositories

1

ruby-fighter

Street Fighter II in Ruby!
Ruby
536
star
2

git-wayback-machine

A simple script to quickly navigate a project's state through it's GIT history
Ruby
159
star
3

x-ray-machine

A logger/profiler that helps you to track heavy calls in rails apps
Ruby
141
star
4

keyboard-genetics

An attempt to solve the keyboard layouts efficiency analysis problem
JavaScript
135
star
5

right-rails

Ruby on Rails plugin for RightJS
Ruby
76
star
6

nikolay.rocks

My personal blog and stuff
CSS
64
star
7

graphql-mock

A client side GraphQL mocking library
TypeScript
61
star
8

express-yields

ES6 generators support for ExpressJS
JavaScript
58
star
9

frontcompiler

JavaScript/CSS/HTML sources compiler
Ruby
44
star
10

a-plus-forms

A+ forms. Would use again
JavaScript
37
star
11

sweet-logger

A concurrent requests happy logger for rails
Ruby
36
star
12

git-rainbow

A rainbow commits generator for git
Ruby
23
star
13

airplane-game-in-rubymotion

An iOS game example built with rubymotion and spritekit
Ruby
18
star
14

doubleagent

The ES7 async/await aware testing wrapper on top of secretagent
TypeScript
14
star
15

kinda-player

KindaPlayer is a simple HTML/CSS based music player
JavaScript
14
star
16

halmak-typefu

A Halmak support module for the TypeFu app
11
star
17

keyboard-analytics

an attempt to gain real-life hand movements data while typing on a keyboard
JavaScript
9
star
18

express-json-validator

JSON schema based validator middleware for express
JavaScript
8
star
19

save-your-dosh

Heroku dynos auto-scaling thing
Ruby
8
star
20

rockstar-layout

My custom, handcrafted, artisan keyboard layout for programmers
8
star
21

right-sudoku

RightJS based sudoku game
JavaScript
7
star
22

pentix.rb

Pentix Game In Ruby
Ruby
7
star
23

right-rails-demo

The RightRails plugin demo application
Ruby
7
star
24

shakker

Mano A Mano JavaScript Testing Suite
JavaScript
7
star
25

presentify

a simple CLI tool that turns a bunch of ruby files into a terminal based presentation
Ruby
6
star
26

db-nuker

Really fast database cleaner for mysql
Ruby
6
star
27

right-gallery

An ajaxed photo-gallery example implemented with RightJS and Ruby On Rails
JavaScript
6
star
28

typing-ninja

The falling letters game implemented in JavaScript and RightJS
JavaScript
6
star
29

really-tiny-router

A zero-whistles, minimalistic HTML5 router that supports push state
JavaScript
5
star
30

right-cards

RightJS based playing cards framework
JavaScript
5
star
31

acts_as_image_holder

Simple Rails plugin which handles image fields of models
Ruby
4
star
32

acts_as_uri_named

Rails plugin which handles an uri-name field in your models
Ruby
3
star
33

a-plus-forms-bootstrap

Bootstrap bindings for the A+ forms
JavaScript
3
star
34

lambda-genetics

A genetic algorithm that runs on aws lambda
TypeScript
3
star
35

react-hooks-preso

A short intro into react hooks and what they bring
JavaScript
3
star
36

meowtvapp-react

Reimplementation of the MeowTVApp in react-native
JavaScript
3
star
37

right-mines

Good old mines game implemented using RightJS
JavaScript
3
star
38

colorifier

Code Highlighting Tool for Lovely.IO
CoffeeScript
3
star
39

right-highcharts

RightJS Adapter for Highcharts
JavaScript
3
star
40

st_widgets

Standard widgets collection plugin for Rails
Ruby
3
star
41

assign_by

Simple Rails/ActiveRecord plugin extends associations functionality
Ruby
3
star
42

Nake

Ruby Rake/GNU Make like tasks management tool for NodeJS
JavaScript
3
star
43

nippo

Hiragana and katakana alphabets training application in JavaScript
JavaScript
3
star
44

searchable_by

ActiveRecord plugin which will generate named scopes for quick search
Ruby
3
star
45

makeitmagical

Just a fun project and investigation into GM features in Node.JS
JavaScript
3
star
46

the-log

Svelte
2
star
47

typefu-rockstar-support

The Rockstar keyboard layout support for the TypeFu app
2
star
48

osom-tables

Rails friendly, ajax tables engine
Ruby
2
star
49

osom-area

Advanced textarea wrapper for lovely.io
CoffeeScript
2
star
50

typescript-preso

A short intro into typescript types system
2
star
51

minitest-mustwonted

rspec like must/wont matchers engine for minutest
Ruby
2
star
52

nanny

Nanny is a little UI walkthrough package for Lovely.IO
CoffeeScript
2
star
53

rorosyd-2014-05-13

Code examples for my talk at rorosyd on May 13, 2014
Ruby
2
star
54

a-plus-forms-json-validator

JSON Schemas based validation for the a+ forms
JavaScript
2
star
55

jsminer

the well known mines game web-implementation with JavaScript/HTML/CSS
JavaScript
2
star
56

glyph-icons

Drop in styles package for lovely.io with the glyph icons collection
CoffeeScript
2
star
57

mini-fetch

A minimalistic fetch interface polyfill
JavaScript
2
star
58

hook-me-up

like redux-saga but with react hooks and async/await
TypeScript
1
star
59

serve-like-a-pro

A minimalistic production ready server for static sites
JavaScript
1
star
60

node-time

A proof of concept that nodejs can response in sub-millisecond time
JavaScript
1
star
61

jazzup-your-rails

Jazz Up Your Rails
Ruby
1
star
62

totally-awesome-tests

Like totally awesome testing framework
Ruby
1
star
63

ducky

A simple data mapper for duckdb in Python
Python
1
star
64

farce

A simple actor system implementation in Python for IO heavy distributed systems
Python
1
star