user_config.h 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737
  1. /*
  2. * License (GPL):
  3. This program is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation, either version 2 of the License, or
  6. (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program. If not, see <http://www.gnu.org/licenses/>.
  13. * © 2019,2020 by Jos Boersema
  14. *
  15. */
  16. // ------------------------------------- ⬇ --------------------------------------
  17. // Configuration:
  18. // ------------------------------------- ⬇ --------------------------------------
  19. // (For the non-coders:
  20. // “_Remove_” means to place ‛//’ in front of a line. The rest of the line becomes a comment.
  21. // Placing ‛//’ in front of a line, means whatever follows it will be ignored during compilation.
  22. // “_Activate_” means to *delete* the two ‛//’ in front. Now the rest of the line *will* be compiled
  23. // /* ... */ is another a way to turn “...” into being a comment which is ignored during compilation.
  24. // (The documentation here is geared toward people who have no understanding about programming.)
  25. /*
  26. --------------------------------------------------------------------------------------
  27. ----
  28. --
  29. -
  30. Table of Contents:
  31. -0- ➡ Compact configuration file ⬅
  32. -1- ➡ Letters / Numbers & Symbols layouts ⬅
  33. • Qwerty
  34. • Qwerty with Base arrows
  35. • Dvorak
  36. • Dvorak descramble mode
  37. • Colemak
  38. • Workman
  39. • Numpad
  40. -2- ➡ Eviscerations ( ① / ② ) ⬅
  41. • Single layout
  42. -3- ➡ Startup settings ⬅
  43. • Alternate Base
  44. • Leds on/off at startup.
  45. • Speed measuring
  46. • Text size counting ⬅
  47. -4- ➡ How many hardware keys 1st row ⬅
  48. -5- ⚠ ≠ Minivan ⬅
  49. -6- ➡ Defining the meaning of the additional hardware keys ⬅
  50. • Defining the additional key for 'South paw' (also called 'Command')
  51. • Defining 'Arrow' hardware layout additional keys
  52. -7- ➡ Arrows/Navigation cluster ⬅
  53. • Navigation cluster configuration
  54. • VI editor arrows
  55. -8- ➡ Number pad Configuration⬅
  56. -9- ➡ Speed measuring ⬅
  57. -10- ➡ Some alternative keys ⬅
  58. • Right Alt or hold(_RAR) on Base
  59. • GUI left/right
  60. • Alternate currency symbol
  61. • Check boxes or Pointers
  62. • Switch _ACC/_BON ⬅➡ *left* side _NSY/_DRA hold keys
  63. • Switch _PAD ⬅➡ _MOV on Left Shift toggle
  64. • Switch _FUN ⬅➡ _RAR on Right Shift toggle
  65. • “Switch spacebars”: ‛Space-bar’ ⬅➡ “‛Enter’ + ‛layer-hold _MOV’”
  66. -11- ➡ Eviscerations ( ② / ② ) ⬅
  67. • Removing the numbers pad _PAD layer
  68. • Removing one or more of the Unicode layers _ACC, _DRA or_BON
  69. • Removing groups of characters
  70. -12- ➡ Leds ⬅
  71. -
  72. --
  73. ----
  74. --------------------------------------------------------------------------------------
  75. */
  76. /* -0- ➡ Compact configuration file ⬅
  77. *
  78. * If you _activate_ this, this whole heavily documented configuration block below
  79. * gets skipped, and instead a bare bones configuration file with all these same options
  80. * gets read. There is no functional difference.
  81. *
  82. * (You can use the compact configuration if you like that better. It can make communicating
  83. * a configuration easier. The fully documented configuration is left in a state of default
  84. * when uploaded to QMK, so that it gives the most commonly used layout: Qwerty with Numpad,
  85. * basic 44 Minivan keys. The compact version its state is whatever it is.)
  86. */
  87. //#define MINIFAN_CONFIG_COMPACT // _Activate_ this, to load the configuration in ./minifan_config_compact.h (note: mini‛f’an).
  88. #ifndef MINIFAN_CONFIG_COMPACT // (don't alter this)
  89. /* -1- ➡ Letters / Numbers & Symbols layouts ⬅
  90. *
  91. * Here you can configure what letters layer (BASE layer), and number&symbols layer you
  92. * want. This is a dual layout system, so you can choose a second pair as well. You can
  93. * switch between them with a key on the _RAR layer. All the other layers are the same,
  94. * regardless of your choice in letter/number&symbol layers.
  95. *
  96. * The letters layer is the BASE layer, from which you also reach all other layers.
  97. * The letters it has is the alphabet in its simplest form: abcdefghijklmnopqrstuvwxyz.
  98. * The numbers & symbols layer has what you find on any regular keyboard: 123… !@#… []/…
  99. * The numbers & symbols layer is made to fit the Letters layer, due to small differences
  100. * between layouts like Qwerty and Dvorak (in this case the symbols ‛-’, ‛/’, ‛?’, and ‛_’).
  101. *
  102. * Example: A Qwerty letters layer, with a fitting numbers & symbols layer, as ‛Default’.
  103. * A Dvorak letters layer, with a fitting numbers & symbols layer, as ‛Alternate’.
  104. *
  105. * You will be asked to configure one layout as ‛Default’ and another as ‛Alternate’.
  106. *
  107. * A bases layout may have locally re-defined one or more of the common layers. If you
  108. * choose two bases layouts who re-define the same common layer locally, you will need
  109. * to choose either one by commenting out the other.
  110. */
  111. //
  112. // • Qwerty
  113. // (a regular Qwerty layout)
  114. // _Activate_ one of these two, _remove_ the other.
  115. #define BASE_QWERTY__DEF_BASE // _Activate_ if you want Qwerty on the ‛Default’ spot
  116. //#define BASE_QWERTY__ALT_BASE // _Activate_ if you want Qwerty on the ‛Alternate’ spot
  117. // Note: you still need to set if you have the additional ‛arrow’ hardware key. You
  118. // can ignore what it should be defined as, because it will be a plain arrow on Base.
  119. //
  120. // • Qwerty with Base arrows
  121. // (provides direct access to arrows)
  122. // _Activate_ one of these two, _remove_ the other.
  123. //#define BASE_QWERTY_BASEARROW__DEF_BASE // _Activate_ if you want Qwerty with Base arrows on the ‛Default’ spot
  124. //#define BASE_QWERTY_BASEARROW__ALT_BASE // _Activate_ if you want Qwerty with Base arrows on the ‛Alternate’ spot
  125. //
  126. // • Dvorak
  127. // (a regular Dvorak layout)
  128. // _Activate_ one of these two, _remove_ the other.
  129. //#define BASE_DVORAK__DEF_BASE // _Activate_ if you want Dvorak on the ‛Default’ spot
  130. //#define BASE_DVORAK__ALT_BASE // _Activate_ if you want Dvorak on the ‛Alternate’ spot
  131. //
  132. // • Dvorak descramble mode
  133. // (Dvorak for a computer already remapping to Dvorak)
  134. // This layout is only available on ‛Alternate’, because of the special _HALF_ descramble mode.
  135. //#define BASE_DVORAK_DESCRAMBLE__ALT_BASE // _Activate_ if you want Dvorak on the ‛Alternate’ spot
  136. //
  137. // • Colemak
  138. // (a regular Colemak layout)
  139. // _Activate_ one of these two, _remove_ the other.
  140. //#define BASE_COLEMAK__DEF_BASE // _Activate_ if you want Colemak on the ‛Default’ spot
  141. //#define BASE_COLEMAK__ALT_BASE // _Activate_ if you want Colemak on the ‛Alternate’ spot
  142. //
  143. // • Workman
  144. // (a regular Workman layout)
  145. // _Activate_ one of these two, _remove_ the other.
  146. //#define BASE_WORKMAN__DEF_BASE // _Activate_ if you want Workman on the ‛Default’ spot
  147. //#define BASE_WORKMAN__ALT_BASE // _Activate_ if you want Workman on the ‛Alternate’ spot
  148. //
  149. // • Numpad
  150. // (a numerical keypad, one for left hand and one for right hand)
  151. // _Activate_ to get Numpad on Alternate. There is no option for Numpad on ‛Default’ base.
  152. #define BASE_NUMPAD__ALT_BASE // _Activate_ if you want Numpad on the ‛Alternate’ spot
  153. // ➡ ➡ ➡ This Base layer has configuration options at the top of its file. See ./base_numpad.c
  154. //
  155. /* -2- ➡ Eviscerations ( ① / ② ) ⬅
  156. */
  157. /* • Single layout
  158. *
  159. * Removes the ‛Alternate’ base layers, and removes the switch key on _RAR.
  160. * ⚠ You have to not define a ‛Alternate’ base layer pair. Define only a ‛Default’ pair.
  161. */
  162. //#define MINIFAN_SINGLE_LAYOUT // _Activate_ to only have the ‛Default’ base layers, _remove_ to also have ‛Alternate’.
  163. /* -3- ➡ Startup settings ⬅
  164. */
  165. /* • Alternate Base
  166. *
  167. * You can define which of the two BASE layers is on when powering up the keyboard.
  168. */
  169. //#define STARTUP_ALTERNATE // Example: For BASES_QWERTY_DVORAK defined: _remove_ is startup in Qwerty, _active_ is
  170. // startup in Dvorak
  171. /* • Leds on/off at startup.
  172. */
  173. //#define STARTUP_SIDE_LEDS_OFF // _Activate_ to have side leds be off at keyboard startup (when you plug it in / computer powers on).
  174. //#define STARTUP_MID_LED_OFF // _Activate_ to have middle led be off at keyboard startup.
  175. //
  176. /* • Speed measuring
  177. */
  178. //#define STARTUP_SPEED // _Activate_ for default speed measuring on, _remove_ to set off at startup.
  179. //
  180. /* • Text size counting ⬅
  181. */
  182. //#define STARTUP_COUNT // _Activate_ for default character/word counting on, _remove_ to set off at startup.
  183. /* -4- ➡ How many hardware keys 1st row ⬅
  184. *
  185. * Define how many keys your keyboard has.
  186. */
  187. // Default (12x12x12x8 keys)
  188. //'Command' (12x12x12x9 keys) + key on the left
  189. //'Arrow' (12x12x12x9 keys) + key on the right
  190. //'South paw' + 'Arrow' (12x12x12x10 keys)
  191. //#define MORE_KEY__COMMAND // Additional key 1st row on the left. This hardware layout is called 'Command' or 'South paw'.
  192. //#define MORE_KEY__ARROW // Additional key 1st row (counting from row with space-bar) on the right, called 'Arrow' layout.
  193. //
  194. // See below for how to define your additional key(s).
  195. /* -5- ⚠ ≠ Minivan ⬅
  196. *
  197. * This section is for when you want to flash this keymap unto a board with more
  198. * keys than the Minivan has.
  199. *
  200. * Trans-Minivan keymap: 12x12x12x11, 12x12x12x12, 12x12x12x13 keys
  201. * Example board: Planck (12x12x12x12)
  202. *
  203. * It is assumed that you enabled MORE_KEY__ARROW and
  204. * MORE_KEY__COMMAND, to get to 12x12x12x10 keys. With this you
  205. * can get to one, two or three more keys on row 1, without manually
  206. * editing all layers. You could first edit the definition on layers that you have
  207. * a specific meaning for these keys, and let the rest be patched with the definitions
  208. * here.
  209. *
  210. * It can help to inspect the preprocessing with > gcc -E keymap.c | less
  211. *
  212. * Planck keyboard
  213. *
  214. * The identifier TRANSMINIVAN_MIDLEFT could help compile the layout on a Planck keyboard,
  215. * if it has a two unit large spacebar. You compile without TRANSMINIVAN_LEFTSIDE in that case.
  216. * All keys on the left, row 1 (closest to the user) shift one unit to the left, with TRANS_MIDLEFT
  217. * inserted on what would be the left key of the two unit spacebar (assuming that is a key).
  218. *
  219. * Other keyboards formats
  220. *
  221. * It is always possible to just padd the rows somewhere, if you have even more keys. On the other
  222. * hand, to try to cut this layout down to fewer keys than it has at minimum (12x12x12x8), is likely
  223. * going to reduce its functionality, and will require some puzzling to keep a well organized BASE
  224. * layer, and have “hold key” layer switching work correctly.
  225. *
  226. * FIXME: not been compiled or tested for any boards.
  227. */
  228. //#define TRANSMINIVAN_LAYOUT ....... // Set this to something with the needed amount of keycodes.
  229. // Your values are inserted here: [ _LTR ] = LAYOUT_redefined (
  230. // ^^^^^^^^^^^^^^^^ (throughout all layers)
  231. //#define TRANSMINIVAN_LEFTSIDE // _Activate_ to get yet one more key on the left side row 1
  232. #define TRANS_LEFT XXXXXXX // Define what the TRANSMINIVAN_LEFTSIDE key should be, where it is not otherwise defined.
  233. // (Ignored if TRANSMINIVAN_LEFTSIDE is _removed_).
  234. //
  235. //#define TRANSMINIVAN_MIDLEFT // _Activate_ to get yet one more key on the first key from center, row 1.
  236. #define TRANS_MIDLEFT XXXXXXX // Define what the TRANSMINIVAN_RIGHTSIDE key should be on all layers at once.
  237. // (Ignored if TRANSMINIVAN_MIDLEFT is _removed_).
  238. //
  239. //#define TRANSMINIVAN_RIGHTSIDE // _Activate_ to get yet one more key on the right side row 1
  240. #define TRANS_RIGHT XXXXXXX // Define what the TRANSMINIVAN_RIGHTSIDE key should be, where it is not otherwise defined.
  241. // (Ignored if TRANSMINIVAN_RIGHTSIDE is _removed_).
  242. /* -6- ➡ Defining the meaning of the additional hardware keys ⬅
  243. *
  244. * Some possibilities you might like:
  245. *
  246. * ① Number-pad and F-keys layers are only on a toggle. If you want them accessible on a hold key, you can use
  247. * these additional hardware keys. Make sure to use a transparent key on that location on those layers.
  248. *
  249. * ② You can use the right side additional key for quick access to an arrow/navigation cluster (see below).
  250. *
  251. * ③ Other uses, such as a delete key and/or a special interface key your system needs.
  252. */
  253. /* • Defining the additional key for 'South paw' (also called 'Command')
  254. *
  255. * Left side additional key. This is ignored if MORE_KEY__COMMAND is not defined.
  256. */
  257. // Configure here what this key is on the BASE layers (excluding Base Numpad compile option).
  258. //#define MORE_key1_BASE TG ( _RAR ) // _Activate_ this to get a toggle to layer _RAR. MO(_RAR) does not follow a BASE switch by ‛Other Base’.
  259. //#define MORE_key1_BASE KC_DEL // Could be useful if you like to toggle to certain layers and stay there for a while.
  260. #define MORE_key1_BASE KC__XGUI // (Default) (Using KC__XGUI makes sure it is the *other* GUI, relative to KC__YGUI.)
  261. //
  262. // Configure here what this key is on all other layers
  263. //#define MORE_key1 KC_DEL // Configure here what this key is on all other layers (and Base Numpad).
  264. #define MORE_key1 KC__XGUI // (Default)
  265. //
  266. //
  267. /* • Defining 'Arrow' hardware layout additional keys
  268. *
  269. * You can create an arrow-cluster with your additional MORE_key2 hardware key on the _MOV layer.
  270. * Either way: this new key can toggle to _MOV layer, with the key that on the _MOV layer becomes the down-arrow,
  271. * in the middle of an arrow cluster. To do that, uncomment MOREKEY2_ARROW_CLUSTER.
  272. * The keys that are by default defined on those keys on _MOV layer, will now be overwritten (they are not typically
  273. * that much used there).
  274. *
  275. * Arrow cluster for 'arrow' layout: _activate_ MOREKEY2_ARROW_CLUSTER and _activate_ #define MORE_key2 _MOV_UP
  276. * No arrow cluster for 'arrow' layout: _remove_ MOREKEY2_ARROW_CLUSTER, and set MORE_key2 to whatever you want.
  277. */
  278. #define MOREKEY2_ARROW_CLUSTER // Arrow cluster on _MOV layer. This is ignored if MORE_KEY__ARROW is not defined.
  279. // This will cost you 'Right Alt' and 'GUI' on the _MOV layer.
  280. //#define MOREKEY2_ADD_NAVIGATION // Additional navigation keys around arrow cluster MOREKEY2_ARROW_CLUSTER. Ignored if MOREKEY2_ARROW_CLUSTER is not defined.
  281. // Note: this will cause mouse buttons 'BTN4' and 'BTN5' on the _MOV layer to be moved.
  282. /*
  283. * Define the key you want on the additional key. Leave it to _MOV_UP if you want an arrow cluster, easily
  284. * accessed with this key.
  285. *
  286. * If you want to be able to type all arrow cluster keys with both GUI keys, than you cannot have this additional
  287. * arrow cluster around the ‛arrow’ additional hardware key, because it eats away the GUI just to the left of
  288. * that additional hardware key.
  289. *
  290. * For typing both GUIs with the navigation cluster, you also need the left side additional hardware key. In this
  291. * case, you can still set the optional hardware key on the right to _MOV_UP, but that is marginally useful
  292. * as you already have that on Left Shift.
  293. *
  294. * When aiming to type all normally available keys on a 100% keyboard with all modifiers including GUIs, you
  295. * could use the right hand side optional hardware key (‛arrow’), because it causes the right side GUI to be
  296. * available there. (This kind of stuff affects rare or even never used keyboard shortcuts.)
  297. */
  298. #define MORE_key2 _MOV_UP // Right side additional key. This is ignored if MORE_KEY__ARROW is not defined.
  299. //#define MORE_key2 KC_DEL // More or less a random suggestion. Harmonizes well with “.DEL” on Numbers Pad.
  300. // It is convenient to have an uncluttered Delete key on the Base layer.
  301. //#define MORE_key2 <...your choice...> // Right side additional key.
  302. //
  303. /* -7- ➡ Arrows/Navigation cluster ⬅
  304. */
  305. /* • Navigation cluster configuration
  306. *
  307. * _Activate_ below line to use a "WASD" type layout (on the spot where WASD is in Qwerty).
  308. * _Remove_ if you prefer a flat type layout, with arrows in a row, on the right hand.
  309. */
  310. #define ARROWS_TRIANGLE // Implies mouse is also similarly in a triangle.
  311. /*
  312. * • VI editor arrows
  313. *
  314. * Vi is a famous editor, with its own peculiar text cursor movement arrangement (arrows).
  315. * This option modifies the flat arrows layout on the right hand, to be like the “HJKL”
  316. * arrows in the editor vi(1). “HJKL” meaning: the 7th to 10th key on the 3rd row.
  317. * The arrows on the additional MOREKEY2_ARROW_CLUSTER also get harmonized to be like vi.
  318. */
  319. //#define VI_SWITCHERYDOO // You have to _remove_ ARROWS_TRIANGLE, or this gets ignored.
  320. /* -8- ➡ Number pad Configuration⬅
  321. *
  322. * This concerns the Numbers Pad layer, which is part of the common layers (not the Bse
  323. * layer, which also has a Numbers Pad option).
  324. *
  325. * There are two compile versions for the number pad layer ‛_PAD’, in the common layers.
  326. *
  327. * _Activate_ the below to have the numbers pad _PAD layer resemble the squared layout of
  328. * a numerical keyboard, allowing to type all numbers with the right hand.
  329. * _Remove_ the below to have the numbers in this layer follow the layout of the _NSY layer,
  330. * with the numbers on a line from left to right on the home row, across both hands.
  331. */
  332. //#define NUMPAD_COMMON_SQUARE // _Activate_ to resemble a one handed numerical keyboard.
  333. /* -9- ➡ Speed measuring ⬅
  334. */
  335. /*
  336. * Led color configuration. You can see the speed you have configured below directly on the keyboard,
  337. * after you compiled and flashed it.
  338. * Set speed measuring to <off>.
  339. * Hold the 'Report' key for one second, then release. The keyboard prints a number, which is the
  340. * amount of characters per second for which that color is then being shown. Hold it again for
  341. * a second, and it increments. Toggle speed measuring on/off to restart.
  342. * You can play with the below settings until you like the result.
  343. *
  344. * The default values (8, 160 respectively) are starting at blue, avoiding confusion with default
  345. * cyan for BASE layer, going to purple and further avoiding confusion with text size counting.
  346. * Very fast typers could reach red, and then it goes further to yellow, etc.
  347. */
  348. #define SPEED_COUNTDOWN 25 // After how many keypresses to update the effect(s).
  349. #define SPEED_HUE_STEP 8 // For each key/sec faster, the hue value of HSV goes this step further.
  350. #define SPEED_HUE_START 160 // The starting hue for 0 k/s (0 = 255 = red).
  351. /*
  352. * Speed report in words-per-minute (wpm) rather than keystrokes-per-second (k/s). wpm = k/s * ⁶⁰/₅ = k/s * 12
  353. */
  354. #define WORDS_PER_MINUTE // _Activate_ to get speed report in words-per-minute, _remove_ to get it in keystrokes-per-second (k/s).
  355. /* -10- ➡ Some alternative keys ⬅
  356. */
  357. /*
  358. * • Right Alt or hold(_RAR) on Base
  359. *
  360. * _Activate_ below line to get Right-Alt or Alt-Gr (same thing) on Base.
  361. * A short tap results in RAlt briefly pressed, plus Right-Arrow.
  362. * When pressed with another key, however short, results only in RAlt, and no Right-Arrow.
  363. * Held a little longer than tapping it, results in only RAlt being pressed, no Right-Arrow.
  364. *
  365. * _Remove_ to have a layer hold key to the _RAR layer there, instead of RAlt, together with tapped Right-Arrow.
  366. */
  367. //#define BASE_RIGHT_ALT // _Activate_ to get Right-Alt instead of _RAR on Base layer.
  368. /*
  369. * • GUI left/right
  370. *
  371. * _Activate_ below line to have LGUI (also called OS or Win key, etc) where RGUI is,
  372. * and RGUI where LGUI is.
  373. */
  374. //#define SWITCH_GUIS // _Activate_ this if you want LGUI on the BASE layer rather than RGUI, despite that spot being on the right.
  375. /*
  376. * • Alternate currency symbol
  377. *
  378. * _Activate_ the below to get a Euro symbol, where ƒ (Dutch Guilder) is on the default map (_DRA layer).
  379. */
  380. #define UNICODE_CURRENCY 0x20ac // Hex number, euro symbol €. The unicode hex number for position ƒ in the default keymap.
  381. /*
  382. * • Check boxes or Pointers
  383. *
  384. * You can have these symbols (checkboxes): ☐ ☒ ☑ 🗹
  385. * or these (pointers): ⮘ ⮙ ⮚ ⮛
  386. */
  387. //#define POINT_ON_CHECKBOXES // _Activate_ to get arrows, _remove_ to get checkboxes on _DRA layer.
  388. /*
  389. * • Switch _ACC/_BON and *left* side _NSY/_DRA hold keys
  390. *
  391. * If you type a lot of _ACC layer (accented keys), and not much _DRA layer, you might like to
  392. * switch the _ACC hold key, and the left side _NSY key, if you find it awkward to reach to the
  393. * left with your thumb. These two keys are next to each other. Only the Base layer is affected.
  394. */
  395. //#define SWITCH_HOLD_ACC_NSY // _Activate_ to switch the *left* _NSY and _ACC layer hold keys, on Base layer.
  396. /*
  397. * • Switch _PAD and _MOV on Left Shift toggle
  398. *
  399. * Recommended if you use _MOV more than _PAD
  400. */
  401. //#define SWITCH_LSHIFT_PAD_MOV // _Activate_ to make _MOV layer be on the fast tap, and _PAD on a short hold toggle
  402. /*
  403. * • Switch _FUN and _RAR on Right Shift toggle
  404. *
  405. * Recommended if you use _RAR more than _FUN
  406. */
  407. //#define SWITCH_RSHIFT_FUN_RAR // _Activate_ to make _RAR layer be on the fast tap, and _FUN on a short hold toggle
  408. /*
  409. * • “Switch spacebars”: ‛Space-bar’ ⬅➡ “‛Enter’ + ‛layer-hold _MOV’”
  410. *
  411. * Recommended if you usually type ‛Space-bar’ with your left hand.
  412. * These keys also switch on _MOV (movement) layer. Page-Up goes one spot to the left.
  413. */
  414. //#define SPACE_LEFT__ENTER_RIGHT // _Activate_ for ‛Space bar’ left, ‛Enter’ and ‛_MOV hold’ right hand.
  415. /* -11- ➡ Eviscerations ( ② / ② ) ⬅
  416. */
  417. /* • Removing the numbers pad _PAD layer
  418. *
  419. * You may have no use for this common layer, if you have a numerical keypad on the Alternate Base already.
  420. *
  421. * ⚠ Note: ./base_numpad.h can overrides this setting, if compiled with that ‛Base layers’.
  422. */
  423. //#define REMOVE_PAD // _Activate_ to strip out the _PAD layer, _remove_ to have the _PAD layer.
  424. //
  425. /* • Removing one or more of the Unicode layers _ACC, _DRA or_BON
  426. */
  427. /* Removes the _ACC layer, optionally redirect its key. This can save some 750 bytes.
  428. */
  429. //#define REMOVE_ACC // _Activate_ to strip out the _ACC layer, _remove_ to have the _ACC layer.
  430. /* Unless REMOVE_ACC is _active_, the next defines which redirect the _ACC key(s) are ignored. */
  431. //#define _ACC_KEY_ALT_LAYER _BON // _Activate_ to make the key(s) that normally goes to _ACC, go to _BON instead.
  432. //#define _ACC_KEY_ALT_LAYER _DRA // _Activate_ to make the key(s) that normally goes to _ACC, go to _DRA instead.
  433. /*
  434. *
  435. * Removes the _DRA layer, optionally redirect its key. Also saves some 750 bytes.
  436. */
  437. //#define REMOVE_DRA // _Activate_ to strip out the _DRA layer, _remove_ to have the _DRA layer.
  438. /* Unless REMOVE_DRA is _active_, the next defines which redirect the _DRA key(s) are ignored. */
  439. //#define _DRA_KEY_ALT_LAYER _ACC // _Activate_ to make the key(s) that normally goes to _ACC, go to _ACC instead.
  440. //#define _DRA_KEY_ALT_LAYER _BON // _Activate_ to make the key(s) that normally goes to _ACC, go to _BON instead.
  441. /*
  442. *
  443. * Removes the _BON layer, optionally redirect its key. Also saves some 750 bytes.
  444. */
  445. //#define REMOVE_BON // _Activate_ to strip out the _BON layer, _remove_ to have the _BON layer.
  446. /* Unless REMOVE_BON is _active_, the next defines which redirect the _BON key(s) are ignored. */
  447. //#define _BON_KEY_ALT_LAYER _ACC // _Activate_ to make the key(s) that normally goes to _BON, go to _ACC instead.
  448. //#define _BON_KEY_ALT_LAYER _DRA // _Activate_ to make the key(s) that normally goes to _BON, go to _DRA instead.
  449. /*
  450. *
  451. * • Removing groups of characters
  452. */
  453. /*
  454. * The below cut out an amount of symbols on a given layer, to simplify and/or reduce firmware size a little.
  455. */
  456. //#define ALL_DRA_BON_EVISCERATIONS // _Activate_ this to _remove_ the below all at once. (Seems to save only ±114 bytes)
  457. //
  458. #define BOX_DRAWINGS // _Activate_ to get box drawings on _BON. Horizontal lines (━─┄┅) on _DRA are not affected.
  459. // Affected on rows 2 and 3: ┣┫┏┗┃┇┛┓
  460. // Full, 3rd row, boxdr.: Ctrl ① ⬅ ② ⬇ ③ ➡ ④ ┏ ⑤ ┓ ⑥ ┃ ⑦ ┇ ⑧ ╋ ⑨ ⓪ ∞ —
  461. // Full, 2nd row, boxdr.: LSht ‹ › ÷ ☞ ┗ ≠ ┛ ✗ ┣ ✓ ┫ ⚠ « » RSht
  462. //
  463. // 3rd row, no boxdrawing: Ctrl ① ⬅ ② ⬇ ③ ➡ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⓪ ∞ —
  464. // 2nd row, no boxdrawing: LSht ‹ › ÷ ☞ ≠ ✗ ✓ ⚠ « » RSht
  465. //
  466. #define SUB_SCRIPT_NUMS // _Activate_ to get subscript numbers (₁₂₃…₀) on _DRA.
  467. // Affected on row 3: ₁₂₃₄₅₆₇₈₉₀
  468. // Thinned out 3rd row: xxx ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁰ xxx
  469. // Full 3rd row: xxx ¹₁ ²₂ ³₃ ⁴₄ ⁵₅ ⁶₆ ⁷₇ ⁸₈ ⁹₉ ⁰₀ xxx
  470. //
  471. #define FULL_DRA_2NDROW // _Activate_ to have symbols on all unshifted + shifted positions on _DRA, 2nd row.
  472. // Affected: 「 」 〇 § · 🗹 《 》
  473. // Full 2nd row: LSht 「━ 」─ °〇 •§ …· ☐ ☒ ☑ 🗹 ¿¡ 《┄ 》┅ Rsht
  474. // Thinned out 2nd row: LSht ━ ─ ° • … ☐ ☑ ☑ ¿¡ ┄ ┅ RSht
  475. //
  476. #define FULL_DRA_4THROW // _Activate_ to have symbols on all unshifted + shifted positions on _DRA, 4th row.
  477. // Affected 4th row: „ ≤ ≥ ∅ ¢ ƒ ❦ 🙂 🙁 👍 👎 ⁽ ₍ ⁾ ₎
  478. // Full 4th row: BASE “„ ”≤ £≥ ∅ ¢ ±ƒ ❦ ♥ 🙂🙁 👍👎 ⁽₍ ⁾₎ Bkspc
  479. // Thinned out 4th row: BASE “ ” £ ± ♥ Bkspc
  480. //
  481. #define FULL_BON_4THROW // _Activate_ to have symbols on all unshifted + shifted positions on _BON, 4th row.
  482. // Affected 4th row: 🛠 ¤ ∑ ‱ ٭ 😊 ⍨ ⃰ ⁻ ⁺ 🄯 ©
  483. // Full 4th row: BASE ‛🛠 ’⬆ ¤ 🄯 ∑ © ‰‱ ★٭ 😊⍨ × ⃰ √ ⁻⁺ Bkspc
  484. // Thinned out 4th row: BASE ‛ ’⬆ ‰ ★ × Bkspc
  485. //
  486. /* -12- ➡ Leds ⬅
  487. *
  488. * Leds off for the Default or Alternative Base Layer.
  489. * Implies: no indication on Default Base for: Caps-lock, typing speed,
  490. * typing amount done of a limit.
  491. * Speed / typing amount indicated by led will be visible by going to another layer.
  492. */
  493. //#define LEDS_OFF_BASE_DEF // _Activate_ to make leds dark when in ‛Default Base’ layer.
  494. //
  495. //#define LEDS_OFF_BASE_ALT // _Activate_ to make leds dark when in ‛Alternative Base’ layer.
  496. // ------------------------------------- ⬆ --------------------------------------
  497. // Below here no more comfortable configuration options.....
  498. // There may be configuration options in the layout ./bases_....h file you chose.
  499. // ------------------------------------- ⬆ --------------------------------------
  500. #else // (ignore this)
  501. # include "./minifan_config_compact.h"
  502. #endif // MINIFAN_CONFIG_COMPACT
  503. // ------------------------------------- ⬇ --------------------------------------
  504. // Base layer headers
  505. // ------------------------------------- ⬇ --------------------------------------
  506. // * Numpad *
  507. # if defined(BASE_NUMPAD__ALT_BASE)
  508. # include "./base_numpad.h" // Numbers pad header
  509. # endif
  510. // * Qwerty Base Arrow *
  511. # if defined(BASE_QWERTY_BASEARROW__DEF_BASE) || defined(BASE_QWERTY_BASEARROW__ALT_BASE)
  512. # include "./base_qwerty_basearrow.h" // Your Keymap header/configuration file.
  513. # endif
  514. // // ⬇ insert your ./base_YOUR_KEYMAP.h #include here:
  515. // * YOUR KEYMAP *
  516. // # if defined(BASE_YOUR_KEYMAP__DEF_BASE) || defined(BASE_YOUR_KEYMAP__ALT_BASE)
  517. // # include "./base_YOUR_KEYMAP.h" // Your Keymap header/configuration file.
  518. // # endif
  519. // // ⬆
  520. // ------------------------------------- ⬆ --------------------------------------
  521. // Base layer headers are best #included here, so the preprocessor statements
  522. // following the user configuration block can pick up on anything that was set.
  523. //
  524. // Example: base_numpad.h _activate_ ‛REMOVE_PAD’. Based upon that, the preprocessor
  525. // constant ‛_PAD’ is changed into ‛_FUN’ in the below statements.
  526. // ------------------------------------- ⬆ --------------------------------------
  527. // The below sets some things up based on the above #defines.
  528. // This is sort of a hack. It re-defines _ALT_BASE and _ALT_NSY to point to the same
  529. // layer as _DEF_BASE and _DEF_NSY, because there are quite a few references to the
  530. // former and putting #if then around each one complicated the code even more. If needed,
  531. // it can be changed later. This option already reduces firmware size, so we should be
  532. // well below the maximum.
  533. # ifdef MINIFAN_SINGLE_LAYOUT
  534. # define _ALT_BASE _DEF_BASE
  535. # define _ALT_NSY _DEF_NSY
  536. # endif
  537. // This triggers the compilation of Dvorak descramble mode.
  538. # ifdef BASE_DVORAK_DESCRAMBLE__ALT_BASE
  539. # define DVORAK_DESCRAMBLE
  540. # endif
  541. // Prevent likely erroneous configuration. If no 'Arrow' hardware layout, then not patching in an arrow cluster.
  542. # if !defined(MORE_KEY__ARROW) && defined(MOREKEY2_ARROW_CLUSTER)
  543. # undef MOREKEY2_ARROW_CLUSTER
  544. # endif
  545. # if !defined(MORE_KEY__ARROW) && defined(MOREKEY2_ADD_NAVIGATION)
  546. # undef MOREKEY2_ADD_NAVIGATION
  547. # endif
  548. # if !defined(MOREKEY2_ARROW_CLUSTER) && defined(MOREKEY2_ADD_NAVIGATION)
  549. # undef MOREKEY2_ADD_NAVIGATION // Only navigation keys, when the are arrows defined.
  550. # endif
  551. // When choosing 'triangle' arrows, then they go left. Not 'triangle' arrows, than right.
  552. # ifdef ARROWS_TRIANGLE
  553. /* _Activate_ below line to put the arrows on the left, comment out to have arrows right. */
  554. # define ARROWS_LEFT // Implies mouse is right
  555. # endif
  556. // Set up user GUI choice:
  557. # ifndef SWITCH_GUIS
  558. # define KC__XGUI KC_LGUI // Name logic is alphabetic order left to right …X (…) …Y in layout definitions..
  559. # define KC__YGUI KC_RGUI // .. meaning KC__XGUI is left on the keymap, KC__YGUI is right.
  560. # else
  561. # define KC__XGUI KC_RGUI
  562. # define KC__YGUI KC_LGUI
  563. # endif
  564. // Switch “spacebars”:
  565. # ifndef SPACE_LEFT__ENTER_RIGHT // standard
  566. # define LEFTCENTER_THUMB LT__MOV__KC_ENT
  567. # define RIGHTCENTER_THUMB KC_SPC
  568. # else
  569. # define LEFTCENTER_THUMB KC_SPC // reversed
  570. # define RIGHTCENTER_THUMB LT__MOV__KC_ENT
  571. # endif
  572. // Define the layout macro for the amount of hardware keys.
  573. // These for Minivan are defined up in the code tree.
  574. # if !defined(MORE_KEY__COMMAND) && !defined(MORE_KEY__ARROW)
  575. # define LAYOUT_redefined LAYOUT // Default (8 keys on 1st row)
  576. # endif
  577. # if !defined(MORE_KEY__COMMAND) && defined(MORE_KEY__ARROW)
  578. # define LAYOUT_redefined LAYOUT_arrow // Additional key 1st row on the right. 'Arrow'
  579. # endif
  580. # if defined(MORE_KEY__COMMAND) && !defined(MORE_KEY__ARROW)
  581. # define LAYOUT_redefined LAYOUT_command // Additional key 1st row on the left. 'Command'
  582. # endif
  583. # if defined(MORE_KEY__COMMAND) && defined(MORE_KEY__ARROW)
  584. # define LAYOUT_redefined LAYOUT_arrow_command // Additional keys 1st row both left and right. 'Arrow' + 'Command'
  585. # endif
  586. # ifdef TRANSMINIVAN_LAYOUT
  587. # undef LAYOUT_redefined
  588. # define LAYOUT_redefined TRANSMINIVAN_LAYOUT
  589. # endif
  590. // Process user config setting for speed measuring
  591. # ifdef STARTUP_SPEED
  592. # define SPEED_INIT_VALUE TRUE
  593. # else
  594. # define SPEED_INIT_VALUE FALSE
  595. # endif
  596. // Process user config setting for text size measuring
  597. # ifdef STARTUP_COUNT
  598. # define COUNT_INIT_VALUE TRUE
  599. # else
  600. # define COUNT_INIT_VALUE FALSE
  601. # endif
  602. // Get all key reductions at once
  603. # ifdef ALL_DRA_BON_EVISCERATIONS
  604. # ifdef BOX_DRAWINGS
  605. # undef BOX_DRAWINGS
  606. # endif
  607. # ifdef SUB_SCRIPT_NUMS
  608. # undef SUB_SCRIPT_NUMS
  609. # endif
  610. # ifdef FULL_DRA_2NDROW
  611. # undef FULL_DRA_2NDROW
  612. # endif
  613. # ifdef FULL_DRA_4THROW
  614. # undef FULL_DRA_4THROW
  615. # endif
  616. # ifdef FULL_BON_4THROW
  617. # undef FULL_BON_4THROW
  618. # endif
  619. # endif
  620. // This resolves compiling “TO (_BON)” on the _FUN layer.
  621. # ifdef REMOVE_BON
  622. # undef _BON
  623. # ifdef _BON_KEY_ALT_LAYER
  624. # define _BON _BON_KEY_ALT_LAYER // To what user wants
  625. # else
  626. # define _BON _FUN // void behavior
  627. # endif
  628. # endif
  629. // This resolves compiling “TO (_PAD)” on the _FUN layer.
  630. # ifdef REMOVE_PAD
  631. # undef _PAD
  632. # define _PAD _FUN // void behavior
  633. # endif
  634. // If the _ACC layer hold key has no function anymore because the layers _ACC and _BON to which it
  635. // switches have been removed, and no alternative use been set, that key reverts to being KC_DEL,
  636. // and the whole macro CHOLTAP_ACCE it normally activates gets cut.
  637. # if defined(REMOVE_ACC) \
  638. && !defined(_ACC_KEY_ALT_LAYER) \
  639. && defined(REMOVE_BON) \
  640. && !defined(_BON_KEY_ALT_LAYER)
  641. # define CHOLTAP_ACCE KC_DEL // replaces in the keymap
  642. # define CHOLTAP_ACCE_NOP // cuts CHOLTAP_ACCE out of macros
  643. # endif
  644. // Here all Unicode layers _ACC, _DRA and _BON have been removed, and none of their key(s) has
  645. // been re-assigned to a useful purpose. That makes that whole system redundant, so it is simplified.
  646. # if defined(REMOVE_ACC) \
  647. && !defined(_ACC_KEY_ALT_LAYER) \
  648. && defined(REMOVE_DRA) \
  649. && !defined(_DRA_KEY_ALT_LAYER) \
  650. && defined(REMOVE_BON) \
  651. && !defined(_BON_KEY_ALT_LAYER)
  652. # define CHOLTAP_ACCE KC_DEL // replaces in the keymap
  653. # define CHOLTAP_ACCE_NOP // cuts CHOLTAP_ACCE out of macros
  654. # define DUO_HOLD_BASIC // cuts out the long DUO_HOLD macro, replaces it with a simple 'descramble'-aware hold(_NSY/_DDN)
  655. # endif