Kinto v1.0 Released
Kinto — Making Linux type like Mac, the zero effort solution.
Visit kinto.sh if you’d like to install it.
So I have finally reached a pretty major milestone with Kinto, users can now install a C based version of what was previously a fully bash scripted solution with a python installer and xprop. A newer python installer remains for now just to get it released quickly and to get some feedback, otherwise I would have wrote a gui installer as well.
One key difference I should also mention, at least for anyone that has used Kinto previous to v1.0, is that it no longer uses Super in the Cmd key position while using a terminal. That is simply not the default under linux, Ctrl+Shift is now the Cmd key default for all Terminals and it should have always been that way because that is what linux terminals most commonly use.
Major features added
- Unlimited keyboard configurations per App/category
- Dynamic Desktop Environment shortcut capabilities
I will now get into the details on how the JSON config files work as it is the heart of the program that users can easily interact with.
The json config file originally started out as a single file before I realized I needed to break them up into 2 parts, a more static defaults.json for keyboard specific info and the user_config.json file, which I encourage users to take a peek at.
Both can be extended, but to make changes to defaults.json you will also need to learn a few things about xkb or setxkbmap to be successful in making the changes you want.
Exploring defaults.json
In this file we have the following and their purpose
- defaultapps — Groups Application names (wm_class) together so you can later perform keyswaps.
- defaulttypes — Currently I am only aware of needing 3 major keyboard types, which are further extended to 6 keyboard defaults.
- defaults — Initial default configurations for the most common US based keyboard types.
defaults.json (abbreviated)
{"defaultapps":[{
"name":"term",
"appnames":[ "Gnome-terminal",..,"eterm" ]
}],
"defaulttypes":["windows","mac","chromebook"],
"defaults":[{
"id": 1,
"name":"Windows",
"type":"windows",
"active": false,
"description":"Standard Windows 104 Keyboards",
"gui":"setxkbmap ... kbd.mac.gui $DISPLAY",
"term":"setxkbmap... kbd.mac.term $DISPLAY",
"xkb_symbols_gui":"+altwin(ctrl_alt_win)+mac_gui(mac_levelssym)",
"xkb_symbols_term":"+altwin(swap_alt_win)+mac_term(mac_levelssym)",
"xkb_types_gui":"+mac_gui(addmac_levels)",
"xkb_types_term":""
},
...
{
"id": 3,
"name":"Mac Only",
"type":"mac",
"active": true,
"description":"Standard Mac Keyboards",
"gui":"setxkbmap ... kbd.mac.gui $DISPLAY",
"term":"setxkbmap ... kbd.mac.term $DISPLAY",
"xkb_symbols_gui":"+ctrl(swap_lwin_lctl)+ctrl(swap_rwin_rctl)+mac_gui(mac_levelssym)",
"xkb_symbols_term":"+altwin(alt_super_win)+mac_term(mac_levelssym)",
"xkb_types_gui":"+mac_gui(addmac_levels)",
"xkb_types_term":""
},
{
"id": 4,
"name":"Chromebook",
"type":"chromebook",
"active": false,
"description":"Standard Chromebook Keyboards",
"gui":"setxkbmap ... kbd.chromebook.gui $DISPLAY",
"term":"setxkbmap ... kbd.mac.term $DISPLAY",
"xkb_symbols_gui":"+chromebook(swap_lalt_lctrl)+mac_gui(mac_levelssym)",
"xkb_symbols_term":"+altwin(swap_alt_win)+mac_term(mac_levelssym)",
"xkb_types_gui":"+mac_gui(addmac_levels)",
"xkb_types_term":""
}
...]
}
Exploring user_config.json
In this file we have the following and their purpose
- config — contains the specific keyswapping commands that kintox11 will use based on the appnames filter array. Also designed for unlimited app categories and can easily run other setxkbmap commands as added.
- config[‘de’] —A numeric array that links to additional commands that can be ran to help the DE properly respond to user input no matter what application they are currently in. This connects to the ID of of the “de” objects in the same file.
- init — designed to run a specific command or set of commands when the service is initially ran.
- detypes — lists out all DE’s that are or will be supported by Kinto.
- de — contains all of the Dynamic Shortcut objects and tweaks.
user_config.json (abbreviated)
{"config":[{
"name":"gui",
"run":"setxkbmap ... kbd.mac.gui $DISPLAY",
"de":[2],
"appnames":[ "" ]
},
{
"name":"term",
"run":"setxkbmap ... kbd.mac.term $DISPLAY",
"de":[2],
"appnames":[ "Gnome-terminal",...,"io.elementary.terminal" ]
}],
"init": [1],
"detypes":["gnome2","gnome3","kde4","kde5","xfce","i3wm"],
"de":[{
"id": 1,
"type": ["gnome3"],
"active": false,
"intent":"init",
"name":"gnome-init",
"description":"Gnome - Remove Superkey Overlay keybinding to Activities Overview",
"run":"gsettings set org.gnome.mutter overlay-key ''",
"run_term":"",
"run_gui":""
},
{
"id": 2,
"type": ["gnome3"],
"active": false,
"intent":"gui_term",
"name":"Gnome Activities Overview",
"description":"Cmd+Space activates Activities Overview",
"run":"",
"run_term":"gsettings ... \"['<Control><Shift>Space']\"",
"run_gui":"gsettings ... \"['<Ctrl>Space']\""
},
{
"id": 3,
"type": ["kde5"],
"active": false,
"intent":"init",
"name":"kde-init",
"description":"KDE Plasma 5 - Removes Superkey Overlay from the Launcher Menu",
"run":"kwriteconfig5 ... reconfigure",
"run_term":"",
"run_gui":""
}]
}
Note: If you would like to add an additional terminal to the term appnames array then run this command. *updated* kintox11 will now show the appnames in the status so you can easily add more support.
systemctl --user status keyswap
The next release will also have a system tray icon to let the user know which mode Kinto is in and to give them the ability to stop or start the application from there. May also allow them to edit the json config file directly from a UI as well, but for now I hope this release will be appreciated as is and that others will start to contribute additional Dynamic Shortcuts, and xkb keyboard symbols and types to further the goals of making the typing experience on Linux to be more Mac like.