-
Notifications
You must be signed in to change notification settings - Fork 0
Configuration
AnaNeo is configured through two files, both next to the executable:
-
config.json– your settings. Created on first start, never included in a release package, so an update leaves it alone. -
layouts.json– the layouts themselves: which key produces what on which layer. See Editing layouts.
Neither requires rebuilding the program. Restart AnaNeo after editing.
There is a third file, config.default.json, which ships with every release and holds the defaults. On every start AnaNeo reads it, lays your config.json on top, and writes the result back to config.json. New options therefore appear in your file automatically, with their default value.
Arrays are replaced whole, not merged field by field. This is the one thing about the merge worth remembering, because it bites after updates: if your config.json already contains a "triggers" array, a newly shipped trigger will not appear in it, since your array wins entirely. The same applies to "composeModules".
The fix is to delete that one entry from your config.json and restart – the defaults are then merged in fresh. You lose your customisations to that array and nothing else.
For compose modules specifically, there is now a migration that handles this case; see Compose modules.
config.json carries a configVersion number. It answers the one question that inspecting the values cannot: has this config already seen a given migration step? It counts independently of the program version.
You never need to set it. It matters only if you are working on AnaNeo itself, where the rule is: a migration that adds something needs this marker, because without it there is no way to tell a default that was never changed from a value someone chose deliberately.
That distinction was learned the hard way. An early migration mapped the on-screen keyboard's old default colour scheme onto the new one, recognising the case by the value rather than by a marker – so anyone who deliberately chose the old scheme had it silently overwritten on every start, which made it impossible to select.
| Page | Covers |
|---|---|
| Locks and triggers |
locks – which modifiers can be locked, by which chord, and the fixed actions |
| On-screen keyboard |
osk – theme, ISO/ANSI, numpad, number row, modifier names |
| Compose modules |
composeModules, compose – which sequence files load, in what order |
| Hotkeys and blacklist |
hotkeys, blacklist – global shortcuts, and where to switch off automatically |
| One-handed mode |
oneHandedMode – mirror key and mirror map |
| Editing layouts |
layouts.json – layers, keys, keysyms, forced modifiers |
Everything not covered by a page above:
-
true(default) – AnaNeo replaces the native layout (QWERTZ or QWERTY) with the selected Neo layout. If the native layout is already Neo-related, AnaNeo leaves it alone and switches to extension mode instead. -
false– AnaNeo switches to extension mode when the native layout is Neo-related, and deactivates itself for all others.
The layout used in standalone mode: "AnNoted", "Noted", "Neo" or "NeoQwertz". Also selectable from the tray menu, which writes the choice back here.
Program language: "german" or "english". Affects the tray menu and messages, not the layouts.
-
true(default) – Mod3 and Mod4 key events are hidden from other programs in extension mode. This works around a Neo bug affecting Qt and GTK applications. -
false– programs see Mod3/Mod4 events. Needed if you want to bind functions to those keys inside an application.
-
true(default) – switch Numlock on automatically. Recommended whenever the keyboard has a real numeric keypad. -
false– leave it alone. Use this on laptops whose numeric block sits on the letter keys, where forcing Numlock causes trouble.
Each release ships one ZIP per layout. They differ only in config.default.json: the file is replaced with the matching config.[layout].json, so the package starts with that layout selected and with only those lock triggers that reach a layer in it. A trigger for a themed block would do nothing in a six-layer layout, so the six-layer packages do not offer it.
Building from source gives you config.default.json with the full trigger set.