Skip to content

Instantly share code, notes, and snippets.

@71
Last active November 16, 2021 22:26
Show Gist options
  • Save 71/2437a7f556db6cd4c259bd4d27083ab2 to your computer and use it in GitHub Desktop.
Save 71/2437a7f556db6cd4c259bd4d27083ab2 to your computer and use it in GitHub Desktop.
My personal keyboard layout, named after its WASD replacement YATH.
; AutoHotKey script that sends the right symbols to Windows.
; Useful, since I can reprogram most of my keys on my keyboard, but not special characters.
#NoEnv
SendMode Input
$1::Send {1}
$2::Send {2}
$3::Send {3}
$4::Send {4}
$5::Send {5}
$=::Send {+}
$/::Send {*}
$6::Send {6}
$7::Send {7}
$8::Send {8}
$9::Send {9}
$0::Send {0}
$!::Send {!}
$@::Send {<}
$#::Send {>}
$$::Send {/}
$%::Send {|}
$+::Send {$}
$?::Send {@}
$^::Send {^}
$&::Send {=}
$*::Send {&}
$(::Send {?}
$)::Send {#}
${::Send [
$}::Send ]
$[::Send {`{}
$]::Send {`}}
$\::Send {`%}
$|::Send {\}
$<::Send (
$>::Send )
module Main exposing (..)
import Html exposing (Html, Attribute, beginnerProgram, text, div, input, br)
import Html.Attributes exposing (..)
import Html.Events exposing (onInput)
import Char
import Set
import String
baseLayout = "~12345+*67890xyd.,{qmlu(-'hateb<fsnoiwvgpkjrc)z"
++ "%`[_&^@\\#}:]$XYD/=?QMLU\";|HATEB!FSNOIPVGWKJRC>Z"
layout = "~12345+*67890xyd,.zqmlu{}%atheb-fsnoipvgwkjrc;'"
++ "`!<>/|$@^=&?#XYD()ZQMLU[]\\ATHEB_FSNOIPVGWKJRC:\""
main =
beginnerProgram
{ model = layout
, view = view
, update = update
}
-- UPDATE
type Msg = LayoutUpdated String
update (LayoutUpdated content) oldContent = content
-- VIEW
spec i =
case i of
13 -> [ (div [ largeStyle ] []), (br [] []), (div [ largeStyle ] []) ]
26 -> [ (br [] []), (div [ largerStyle ] []) ]
37 -> [ (div [ largerStyle ] []), (br [] []), (div [ largestStyle ] []) ]
47 -> [ (div [ largestStyle ] []) ]
n -> []
box l u =
if (String.all Char.isUpper u) then
[ (text u) ]
else
[ (text u), (br [] []), (text l) ]
disp lower upper i brk =
case (if brk then [] else spec i) of
[] -> if (String.length lower) == i then
[]
else
let l = (String.slice i (i + 1) lower) in
let u = (String.slice i (i + 1) upper) in
(div [ keyStyle ] (box l u)) :: (disp lower upper (i + 1) False)
ss -> ss ++ (disp lower upper i True)
display layout =
let l = String.length layout in
if l == 94 then
let mid = l // 2 in disp (String.left mid layout) (String.right mid layout) 0 False
else
[]
duplicates layout =
let chars = String.toList layout in
List.filter (\c -> ((String.indices (String.fromChar c) layout) |> List.length) > 1) chars
|> String.fromList
missing layout =
let lChars = layout |> String.toList |> Set.fromList in
let bChars = baseLayout |> String.toList |> Set.fromList in
(Set.diff bChars lChars) |> Set.toList |> String.fromList
view layout =
div []
[ input [ value layout, onInput LayoutUpdated, inputStyle ] []
, text ("Missing: " ++ (missing layout))
, br [] []
, text ("Duplicates: " ++ (duplicates layout))
, br [] []
, div [ outputStyle ] (display layout)
]
-- STYLE
inputStyle =
style
[ ( "width", "100%" )
, ( "height", "40px" )
, ( "padding", "10px 0" )
, ( "font-size", "1.2em" )
, ( "text-align", "center" )
, ( "font-family", "monospace" )
]
outputStyle =
style
[ ( "width", "100%" )
, ( "height", "40px" )
, ( "padding", "10px 0" )
, ( "font-size", "1.2em" )
, ( "text-align", "center" )
, ( "font-family", "monospace" )
]
mkKeyStyle w =
style
[ ( "border", "1px solid black" )
, ( "border-radius", "3px" )
, ( "margin", "3px" )
, ( "padding", ".8em" )
, ( "text-align", "center" )
, ( "display", "inline-flex" )
, ( "vertical-align", "middle" )
, ( "justify-content", "center" )
, ( "align-items", "center" )
, ( "width", w )
, ( "height", "2.4em" )
]
keyStyle = mkKeyStyle "2.4em"
largeStyle = mkKeyStyle "2.9em"
largerStyle = mkKeyStyle "4.95em"
largestStyle = mkKeyStyle "7.2em"
KBD YATH "YATH"
COPYRIGHT "(c) 2018-2021 Gregoire Geis"
COMPANY "None"
LOCALENAME "en-US"
LOCALEID "00000409"
VERSION 1.0
SHIFTSTATE
0 //Column 4
1 //Column 5 : Shft
2 //Column 6 : Ctrl
LAYOUT ;an extra '@' at the end is a dead key
//SC VK_ Cap 0 1 2
//-- ---- ---- ---- ---- ----
02 1 0 1 0021 -1 // DIGIT ONE, EXCLAMATION MARK, <none>
03 2 0 2 003c -1 // DIGIT TWO, LESS-THAN SIGN, <none>
04 3 0 3 003e -1 // DIGIT THREE, GREATER-THAN SIGN, <none>
05 4 0 4 002f -1 // DIGIT FOUR, SOLIDUS, <none>
06 5 0 5 007c -1 // DIGIT FIVE, VERTICAL LINE, <none>
07 OEM_1 0 002b 0024 -1 // PLUS SIGN, DOLLAR SIGN, <none>
08 OEM_2 0 002a 0040 -1 // ASTERISK, COMMERCIAL AT, <none>
09 6 0 6 005e -1 // DIGIT SIX, CIRCUMFLEX ACCENT, <none>
0a 7 0 7 003d -1 // DIGIT SEVEN, EQUALS SIGN, <none>
0b 8 0 8 0026 -1 // DIGIT EIGHT, AMPERSAND, <none>
0c 9 0 9 003f -1 // DIGIT NINE, QUESTION MARK, <none>
0d 0 0 0 0023 -1 // DIGIT ZERO, NUMBER SIGN, <none>
10 X 1 x X -1 // LATIN SMALL LETTER X, LATIN CAPITAL LETTER X, <none>
11 Y 1 y Y -1 // LATIN SMALL LETTER Y, LATIN CAPITAL LETTER Y, <none>
12 D 1 d D -1 // LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, <none>
13 OEM_3 0 002c 0028 -1 // COMMA, LEFT PARENTHESIS, <none>
14 OEM_4 0 002e 0029 -1 // FULL STOP, RIGHT PARENTHESIS, <none>
15 Z 1 z Z -1 // LATIN SMALL LETTER Z, LATIN CAPITAL LETTER Z, <none>
16 Q 1 q Q -1 // LATIN SMALL LETTER Q, LATIN CAPITAL LETTER Q, <none>
17 M 1 m M -1 // LATIN SMALL LETTER M, LATIN CAPITAL LETTER M, <none>
18 L 1 l L -1 // LATIN SMALL LETTER L, LATIN CAPITAL LETTER L, <none>
19 U 1 u U -1 // LATIN SMALL LETTER U, LATIN CAPITAL LETTER U, <none>
1a OEM_5 0 007b 005b -1 // LEFT CURLY BRACKET, LEFT SQUARE BRACKET, <none>
1b OEM_6 0 007d 005d -1 // RIGHT CURLY BRACKET, RIGHT SQUARE BRACKET, <none>
1e A 1 a A -1 // LATIN SMALL LETTER A, LATIN CAPITAL LETTER A, <none>
1f T 1 t T -1 // LATIN SMALL LETTER T, LATIN CAPITAL LETTER T, <none>
20 H 1 h H -1 // LATIN SMALL LETTER H, LATIN CAPITAL LETTER H, <none>
21 E 1 e E -1 // LATIN SMALL LETTER E, LATIN CAPITAL LETTER E, <none>
22 B 1 b B -1 // LATIN SMALL LETTER B, LATIN CAPITAL LETTER B, <none>
23 OEM_7 0 002d 005f -1 // HYPHEN-MINUS, LOW LINE, <none>
24 F 1 f F -1 // LATIN SMALL LETTER F, LATIN CAPITAL LETTER F, <none>
25 S 1 s S -1 // LATIN SMALL LETTER S, LATIN CAPITAL LETTER S, <none>
26 N 1 n N -1 // LATIN SMALL LETTER N, LATIN CAPITAL LETTER N, <none>
27 O 1 o O -1 // LATIN SMALL LETTER O, LATIN CAPITAL LETTER O, <none>
28 I 1 i I -1 // LATIN SMALL LETTER I, LATIN CAPITAL LETTER I, <none>
29 OEM_MINUS 0 007e 0060 -1 // TILDE, GRAVE ACCENT, <none>
2b OEM_PLUS 0 0025 005c -1 // PERCENT SIGN, REVERSE SOLIDUS, <none>
2c P 1 p P -1 // LATIN SMALL LETTER P, LATIN CAPITAL LETTER P, <none>
2d V 1 v V -1 // LATIN SMALL LETTER V, LATIN CAPITAL LETTER V, <none>
2e G 1 g G -1 // LATIN SMALL LETTER G, LATIN CAPITAL LETTER G, <none>
2f W 1 w W -1 // LATIN SMALL LETTER W, LATIN CAPITAL LETTER W, <none>
30 K 1 k K -1 // LATIN SMALL LETTER K, LATIN CAPITAL LETTER K, <none>
31 J 1 j J -1 // LATIN SMALL LETTER J, LATIN CAPITAL LETTER J, <none>
32 R 1 r R -1 // LATIN SMALL LETTER R, LATIN CAPITAL LETTER R, <none>
33 C 1 c C -1 // LATIN SMALL LETTER C, LATIN CAPITAL LETTER C, <none>
34 OEM_COMMA 0 003b 003a -1 // SEMICOLON, COLON, <none>
35 OEM_PERIOD 0 0027 0022 -1 // APOSTROPHE, QUOTATION MARK, <none>
39 SPACE 0 0020 0020 -1 // SPACE, SPACE, <none>
53 DECIMAL 0 002e 002e -1 // FULL STOP, FULL STOP,
KEYNAME
01 Esc
0e Backspace
0f Tab
1c Enter
1d Ctrl
2a Shift
36 "Right Shift"
37 "Num *"
38 Alt
39 Space
3a "Caps Lock"
3b F1
3c F2
3d F3
3e F4
3f F5
40 F6
41 F7
42 F8
43 F9
44 F10
45 Pause
46 "Scroll Lock"
47 "Num 7"
48 "Num 8"
49 "Num 9"
4a "Num -"
4b "Num 4"
4c "Num 5"
4d "Num 6"
4e "Num +"
4f "Num 1"
50 "Num 2"
51 "Num 3"
52 "Num 0"
53 "Num Del"
54 "Sys Req"
57 F11
58 F12
7c F13
7d F14
7e F15
7f F16
80 F17
81 F18
82 F19
83 F20
84 F21
85 F22
86 F23
87 F24
KEYNAME_EXT
1c "Num Enter"
1d "Right Ctrl"
35 "Num /"
37 "Prnt Scrn"
38 "Right Alt"
45 "Num Lock"
46 Break
47 Home
48 Up
49 "Page Up"
4b Left
4d Right
4f End
50 Down
51 "Page Down"
52 Insert
53 Delete
54 <00>
56 Help
5b "Left Windows"
5c "Right Windows"
5d Application
DESCRIPTIONS
0409 YATH
LANGUAGENAMES
0409 English (United States)
ENDKBD

YATH

Greg's personal keyboard layout

This layout was originally built using a modified version of the White Keyboard Layout program with a personalized data-set, and further customized manually to accomodate some needs I had.

It can be visualized and modified using this Elm app.

It was built when I switched from a 102-keys keyboard to a 60% mechanical keyboard, and after realizing that neither Qwerty, Azerty, Dvorak, Colemak nor Workman would satisfy me (for reasons listed by Michael White).

xkb_keymap "yath" {
xkb_keycodes { include "xfree86+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_geometry { include "pc" };
xkb_symbols "basic" {
include "pc+us"
name[group1] = "Speech-impaired Pirate";
key <TLDE> { [ asciitilde, grave ] };
key <AE01> { [ 1, exclam ] };
key <AE02> { [ 2, less ] };
key <AE03> { [ 3, greater ] };
key <AE04> { [ 4, slash ] };
key <AE05> { [ 5, bar ] };
key <AE06> { [ plus, dollar ] };
key <AE07> { [ asterisk, at ] };
key <AE08> { [ 6, asciicircum ] };
key <AE09> { [ 7, equal ] };
key <AE10> { [ 8, ampersand ] };
key <AE11> { [ 9, question ] };
key <AE12> { [ 0, ssharp ] };
key <AD01> { [ x, X ] };
key <AD02> { [ y, Y ] };
key <AD03> { [ d, D ] };
key <AD04> { [ comma, parenleft ] };
key <AD05> { [ period, parenright ] };
key <AD06> { [ z, Z ] };
key <AD07> { [ q, Q ] };
key <AD08> { [ m, M ] };
key <AD09> { [ l, L ] };
key <AD10> { [ u, U ] };
key <AD11> { [ braceleft, bracketleft ] };
key <AD12> { [ braceright, bracketright ] };
key <AD13> { [ percent, backslash ] };
key <AC01> { [ a, A ] };
key <AC02> { [ t, T ] };
key <AC03> { [ h, H ] };
key <AC04> { [ e, E ] };
key <AC05> { [ b, B ] };
key <AC06> { [ minus, underscore ] };
key <AC07> { [ f, F ] };
key <AC08> { [ s, S ] };
key <AC09> { [ n, N ] };
key <AC10> { [ o, O ] };
key <AC11> { [ i, I ] };
key <AB01> { [ p, P ] };
key <AB02> { [ v, V ] };
key <AB03> { [ g, G ] };
key <AB04> { [ w, W ] };
key <AB05> { [ k, K ] };
key <AB06> { [ j, J ] };
key <AB07> { [ r, R ] };
key <AB08> { [ c, C ] };
key <AB09> { [ semicolon, colon ] };
key <AB10> { [ apostrophe, quotedbl ] };
key <BKSL> { [ backslash, bar ] };
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment