Skip to content

Commit

Permalink
Engram[mer] - Arno's Engram layout for programmers
Browse files Browse the repository at this point in the history
  • Loading branch information
sunaku committed Sep 11, 2022
0 parents commit 664e50f
Show file tree
Hide file tree
Showing 9 changed files with 518 additions and 0 deletions.
89 changes: 89 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Engram[mer] - [Arno's Engram] layout for programmers

This is a programmer-friendly adaptation of [Arno's Engram] keyboard
layout. It helps maintain cross-proficiency with standard keyboards:

* Shifted pairs are standard (e.g. quotes don't shift to parentheses).
* Semicolon is placed relative to comma and period just like standard.
* Equals and square brackets are placed near their standard locations.

In addition, application shortcuts that assume standard shifted pairs,
such as Control-Equals for the "zoom in" operation, now work properly.

>*Legend: Gold is [Arno's Engram]; Blue is Engram-like; Pink is new.*
>![Rendering of this layout on a standard 60% keyboard.](layout.png)
>![Rendering of this layout on an ortholinear keyboard.](ortho.png)
>
> `~ 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 0) [{ ]}
> bB yY oO uU '" ;: lL dD wW vV zZ =+ \|
> cC iI eE aA ,< .> hH tT sS nN qQ
> gG xX jJ kK -_ /? rR mM fF pP
[Arno's Engram]: https://engram.dev

## Linux setup

Install:

cd linux/
sudo make install
echo Now restart your graphical session.

Activate:

setxkbmap -layout us -variant engrammer # one layout; no switch
setxkbmap -layout us,us -variant engrammer,basic # dual layout switching

Repair (e.g. whenever a system-wide XKB package upgrade reverts installation):

cd linux/
sudo make reinstall
echo Now restart your graphical session.

Uninstall:

cd linux/
sudo make uninstall
echo Now restart your graphical session.

## Windows setup

You can [download a pre-built installation package](
https://github.com/sunaku/engrammer/releases/download/windows/engrammer.zip
) or build one yourself, like this:

1. Install the official _Microsoft Keyboard Layout Creator_ app: [MSKLC version 1.4](
https://www.microsoft.com/en-us/download/details.aspx?id=102134
).

2. Launch the MSKLC app and open up the `windows\engrammer.klc` source file.

3. From the "Project" menu, select the "Build DLL and Setup Package" action.

4. Open the resulting build directory and run the `setup.exe` installer file.

## License

Released under the same terms as [Arno's Engram]:

> MIT License
>
> Copyright 2021 Arno Klein
>
> Permission is hereby granted, free of charge, to any person obtaining a copy
> of this software and associated documentation files (the "Software"), to deal
> in the Software without restriction, including without limitation the rights
> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> copies of the Software, and to permit persons to whom the Software is
> furnished to do so, subject to the following conditions:
>
> The above copyright notice and this permission notice shall be included in
> all copies or substantial portions of the Software.
>
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> SOFTWARE.
183 changes: 183 additions & 0 deletions layout.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
[
[
{
"p": "CHICKLET",
"a": 5
},
"~\n`",
"!\n1",
"@\n2",
"#\n3",
"$\n4",
"%\n5",
"^\n6",
"&\n7",
"*\n8",
"(\n9",
")\n0",
{
"c": "#dca2c8"
},
"{\n[",
"}\n]",
{
"c": "#cccccc",
"a": 7,
"w": 2
},
"Backspace"
],
[
{
"w": 1.5
},
"Tab",
{
"c": "#f5d793"
},
"B",
"Y",
"O",
"U",
{
"c": "#9dc3cb",
"a": 5
},
"\"\n'",
{
"c": "#dca2c8"
},
":\n;",
{
"c": "#f5d793",
"a": 7
},
"L",
"D",
"W",
"V",
"Z",
{
"c": "#dca2c8",
"a": 5
},
"+\n=",
{
"c": "#cccccc",
"w": 1.5
},
"|\n\\"
],
[
{
"a": 7,
"w": 1.75
},
"Caps Lock",
{
"c": "#f5d793"
},
"C",
"I",
"E",
{
"n": true
},
"A",
{
"c": "#9dc3cb",
"a": 5
},
"<\n,",
">\n.",
{
"c": "#f5d793",
"a": 7,
"n": true
},
"H",
"T",
"S",
"N",
"Q",
{
"c": "#cccccc",
"w": 2.25
},
"Enter"
],
[
{
"w": 2.25
},
"Shift",
{
"c": "#f5d793"
},
"G",
{
"c": "#cccccc"
},
"X",
{
"c": "#f5d793"
},
"J",
"K",
{
"a": 5
},
"_\n-",
{
"c": "#9dc3cb"
},
"?\n/",
{
"c": "#f5d793",
"a": 7
},
"R",
"M",
"F",
"P",
{
"c": "#cccccc",
"w": 2.75
},
"Shift"
],
[
{
"w": 1.25
},
"Ctrl",
{
"w": 1.25
},
"Win",
{
"w": 1.25
},
"Alt",
{
"w": 6.25
},
"",
{
"w": 1.25
},
"Alt",
{
"w": 1.25
},
"Win",
{
"w": 1.25
},
"Menu",
{
"w": 1.25
},
"Ctrl"
]
]
Binary file added layout.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
19 changes: 19 additions & 0 deletions linux/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
TARGET_SYMBOLS := /usr/share/X11/xkb/symbols/us
SOURCE_SYMBOLS := usr-share-X11-xkb-symbols-us
TARGET_RULES := /usr/share/X11/xkb/rules/evdev.xml
SOURCE_RULES := usr-share-X11-xkb-rules-evdev

all: reinstall

install: $(SOURCE_SYMBOLS) $(TARGET_SYMBOLS) $(SOURCE_RULES) $(TARGET_RULES)
cat $(SOURCE_SYMBOLS) >> $(TARGET_SYMBOLS)
sed -i "$$(awk '/variantList/{ print NR; exit }' $(TARGET_RULES)) r $(SOURCE_RULES)" $(TARGET_RULES)

uninstall: $(TARGET_SYMBOLS) $(TARGET_RULES)
sed -i '/ ENGRAMMER BEGIN /,/ ENGRAMMER END /d' $^

reinstall:
$(MAKE) uninstall
$(MAKE) install

.PHONY: all install uninstall reinstall
8 changes: 8 additions & 0 deletions linux/usr-share-X11-xkb-rules-evdev
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<!-- ENGRAMMER BEGIN -->
<variant>
<configItem>
<name>engrammer</name>
<description>English (Arno's Engram[mer] 2.0)</description>
</configItem>
</variant>
<!-- ENGRAMMER END -->
66 changes: 66 additions & 0 deletions linux/usr-share-X11-xkb-symbols-us
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
// ENGRAMMER BEGIN ////////////////////////////////////////
//
// Arno's Engram[mer] 2.0 - adapted from https://engram.dev
//
// `~ 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 0) [{ ]}
// bB yY oO uU '" ;: lL dD wW vV zZ =+ \|
// cC iI eE aA ,< .> hH tT sS nN qQ
// gG xX jJ kK -_ /? rR mM fF pP
//
partial alphanumeric_keys
xkb_symbols "engrammer"
{
include "us(basic)"

key <TLDE> { [ grave, asciitilde ] }; // `~
key <AE01> { [ 1, exclam ] }; // 1!
key <AE02> { [ 2, at ] }; // 2@
key <AE03> { [ 3, numbersign ] }; // 3#
key <AE04> { [ 4, dollar ] }; // 4$
key <AE05> { [ 5, percent ] }; // 5%
key <AE06> { [ 6, asciicircum] }; // 6^
key <AE07> { [ 7, ampersand ] }; // 7&
key <AE08> { [ 8, asterisk ] }; // 8*
key <AE09> { [ 9, parenleft ] }; // 9(
key <AE10> { [ 0, parenright ] }; // 0)
key <AE11> { [ bracketleft, braceleft ] }; // [{
key <AE12> { [ bracketright, braceright ] }; // ]}

key <AD01> { [ b, B ] }; // bB
key <AD02> { [ y, Y ] }; // yY
key <AD03> { [ o, O ] }; // oO
key <AD04> { [ u, U ] }; // uU
key <AD05> { [ apostrophe, quotedbl ] }; // '"
key <AD06> { [ semicolon, colon ] }; // ;:
key <AD07> { [ l, L ] }; // lL
key <AD08> { [ d, D ] }; // dD
key <AD09> { [ w, W ] }; // wW
key <AD10> { [ v, V ] }; // vV
key <AD11> { [ z, Z ] }; // zZ
key <AD12> { [ equal, plus ] }; // =+
key <BKSL> { [ backslash, bar ] }; // \|

key <AC01> { [ c, C ] }; // cC
key <AC02> { [ i, I ] }; // iI
key <AC03> { [ e, E ] }; // eE
key <AC04> { [ a, A ] }; // aA
key <AC05> { [ comma, less ] }; // ,<
key <AC06> { [ period, greater ] }; // .>
key <AC07> { [ h, H ] }; // hH
key <AC08> { [ t, T ] }; // tT
key <AC09> { [ s, S ] }; // sS
key <AC10> { [ n, N ] }; // nN
key <AC11> { [ q, Q ] }; // qQ

key <AB01> { [ g, G ] }; // gG
key <AB02> { [ x, X ] }; // xX
key <AB03> { [ j, J ] }; // jJ
key <AB04> { [ k, K ] }; // kK
key <AB05> { [ minus, underscore ] }; // -_
key <AB06> { [ slash, question ] }; // /?
key <AB07> { [ r, R ] }; // rR
key <AB08> { [ m, M ] }; // mM
key <AB09> { [ f, F ] }; // fF
key <AB10> { [ p, P ] }; // pP
};
// ENGRAMMER END //////////////////////////////////////////
Loading

0 comments on commit 664e50f

Please sign in to comment.