neovim

Personal neovim configuration files
git clone git://gtms.dev/neovim
Log | Files | Refs

qmk.lua (17633B)


      1 if pcall(require, 'qmk') then
      2   local group = vim.api.nvim_create_augroup('tms-qmk', {})
      3 
      4   vim.api.nvim_create_autocmd('BufEnter', {
      5     desc = 'Planck',
      6     group = group,
      7     pattern = '*/ergodox_ez/glow/*',
      8     callback = function()
      9       require('qmk').setup({
     10         name = 'LAYOUT_ergodox_pretty',
     11         auto_format_pattern = '*/ergodox_ez/glow/*',
     12         layout = {
     13           'x x x x x x x _ _ x x x x x x x',
     14           'x x x x x x x _ _ x x x x x x x',
     15           'x x x x x x _ _ _ _ x x x x x x',
     16           'x x x x x x x _ _ x x x x x x x',
     17           'x x x x x _ _ _ _ _ _ x x x x x',
     18           '_ _ _ _ _ x x _ _ x x _ _ _ _ _',
     19           '_ _ _ _ _ _ x _ _ x _ _ _ _ _ _',
     20           '_ _ _ _ x x x _ _ x x x _ _ _ _',
     21         },
     22         comment_preview = { keymap_overrides = { XXXXXXX = 'XX', KC_NO = 'XX' } },
     23       })
     24     end,
     25   })
     26 
     27   vim.api.nvim_create_autocmd('BufEnter', {
     28     desc = 'Planck',
     29     group = group,
     30     pattern = '*/planck/ez/glow/*keymap.c',
     31     callback = function()
     32       require('qmk').setup({
     33         name = 'LAYOUT_planck_grid',
     34         auto_format_pattern = '*/planck/ez/glow/*keymap.c',
     35         layout = {
     36           'x x x x x x x x x x x x',
     37           'x x x x x x x x x x x x',
     38           'x x x x x x x x x x x x',
     39           'x x x x x x x x x x x x',
     40         },
     41         comment_preview = { keymap_overrides = { XXXXXXX = 'XX', KC_NO = 'XX' } },
     42       })
     43     end,
     44   })
     45 
     46   vim.api.nvim_create_autocmd('BufEnter', {
     47     desc = 'Planck',
     48     group = group,
     49     pattern = '*/framework/ansi/*keymap.c',
     50     callback = function()
     51       require('qmk').setup({
     52         name = 'LAYOUT',
     53         auto_format_pattern = '*/framework/ansi/*keymap.c',
     54         layout = {
     55           'x x x x x x x x x x x x x x',
     56           'x x x x x x x x x x x x x x',
     57           'x x x x x x x x x x x x x x',
     58           'x x x x x x x x x x x x xx^',
     59           '^xx x x x x x x x x x x xx^',
     60           'x x x x xxx^xxx x x x x x x',
     61         },
     62         comment_preview = { keymap_overrides = { XXXXXXX = 'XX', KC_NO = 'XX' } },
     63       })
     64     end,
     65   })
     66 end
     67 
     68 if pcall(require, 'cmp') then
     69   local source = {}
     70   function source:complete(_, callback)
     71     callback({
     72       { label = 'KC_NO',             detail = [[Ignore this key (NOOP)]] },
     73       { label = 'KC_TRNS',           detail = [[Use the next lowest non-transparent key ]] },
     74       { label = 'KC_A',              detail = [[`a` and `A` ]] },
     75       { label = 'KC_B',              detail = [[`b` and `B` ]] },
     76       { label = 'KC_C',              detail = [[`c` and `C` ]] },
     77       { label = 'KC_D',              detail = [[`d` and `D` ]] },
     78       { label = 'KC_E',              detail = [[`e` and `E` ]] },
     79       { label = 'KC_F',              detail = [[`f` and `F` ]] },
     80       { label = 'KC_G',              detail = [[`g` and `G` ]] },
     81       { label = 'KC_H',              detail = [[`h` and `H` ]] },
     82       { label = 'KC_I',              detail = [[`i` and `I` ]] },
     83       { label = 'KC_J',              detail = [[`j` and `J` ]] },
     84       { label = 'KC_K',              detail = [[`k` and `K` ]] },
     85       { label = 'KC_L',              detail = [[`l` and `L` ]] },
     86       { label = 'KC_M',              detail = [[`m` and `M` ]] },
     87       { label = 'KC_N',              detail = [[`n` and `N` ]] },
     88       { label = 'KC_O',              detail = [[`o` and `O` ]] },
     89       { label = 'KC_P',              detail = [[`p` and `P` ]] },
     90       { label = 'KC_Q',              detail = [[`q` and `Q` ]] },
     91       { label = 'KC_R',              detail = [[`r` and `R` ]] },
     92       { label = 'KC_S',              detail = [[`s` and `S` ]] },
     93       { label = 'KC_T',              detail = [[`t` and `T` ]] },
     94       { label = 'KC_U',              detail = [[`u` and `U` ]] },
     95       { label = 'KC_V',              detail = [[`v` and `V` ]] },
     96       { label = 'KC_W',              detail = [[`w` and `W` ]] },
     97       { label = 'KC_X',              detail = [[`x` and `X` ]] },
     98       { label = 'KC_Y',              detail = [[`y` and `Y` ]] },
     99       { label = 'KC_Z',              detail = [[`z` and `Z` ]] },
    100       { label = 'KC_1',              detail = [[`1` and `!` ]] },
    101       { label = 'KC_2',              detail = [[`2` and `@` ]] },
    102       { label = 'KC_3',              detail = [[`3` and `#` ]] },
    103       { label = 'KC_4',              detail = [[`4` and `$` ]] },
    104       { label = 'KC_5',              detail = [[`5` and `%` ]] },
    105       { label = 'KC_6',              detail = [[`6` and `^` ]] },
    106       { label = 'KC_7',              detail = [[`7` and `&` ]] },
    107       { label = 'KC_8',              detail = [[`8` and `*` ]] },
    108       { label = 'KC_9',              detail = [[`9` and `(` ]] },
    109       { label = 'KC_0',              detail = [[`0` and `)` ]] },
    110       { label = 'KC_ENT',            detail = [[Return (Enter)]] },
    111       { label = 'KC_ESC',            detail = [[Escape]] },
    112       { label = 'KC_BSPC',           detail = [[Delete (Backspace)]] },
    113       { label = 'KC_TAB',            detail = [[Tab ]] },
    114       { label = 'KC_SPC',            detail = [[Spacebar]] },
    115       { label = 'KC_MINS',           detail = [[`-` and `_` ]] },
    116       { label = 'KC_EQL',            detail = [[`=` and `+` ]] },
    117       { label = 'KC_LBRC',           detail = [[`[` and `{` ]] },
    118       { label = 'KC_RBRC',           detail = [[`]` and `}` ]] },
    119       { label = 'KC_BSLS',           detail = [[`\` and `\]] },
    120       { label = 'KC_NUHS',           detail = [[Non-US `#` and `~`]] },
    121       { label = 'KC_SCLN',           detail = [[`;` and `:` ]] },
    122       { label = 'KC_QUOT',           detail = [[`'` and `"` ]] },
    123       { label = 'KC_GRV',            detail = [[<code>&#96;</code> and `~`]] },
    124       { label = 'KC_COMM',           detail = [[`,` and `<` ]] },
    125       { label = 'KC_DOT',            detail = [[`.` and `>` ]] },
    126       { label = 'KC_SLSH',           detail = [[`/` and `?` ]] },
    127       { label = 'KC_CAPS',           detail = [[Caps Lock ]] },
    128       { label = 'KC_F1',             detail = [[F1]] },
    129       { label = 'KC_F2',             detail = [[F2]] },
    130       { label = 'KC_F3',             detail = [[F3]] },
    131       { label = 'KC_F4',             detail = [[F4]] },
    132       { label = 'KC_F5',             detail = [[F5]] },
    133       { label = 'KC_F6',             detail = [[F6]] },
    134       { label = 'KC_F7',             detail = [[F7]] },
    135       { label = 'KC_F8',             detail = [[F8]] },
    136       { label = 'KC_F9',             detail = [[F9]] },
    137       { label = 'KC_F10',            detail = [[F10 ]] },
    138       { label = 'KC_F11',            detail = [[F11 ]] },
    139       { label = 'KC_F12',            detail = [[F12 ]] },
    140       { label = 'KC_PSCR',           detail = [[Print Screen]] },
    141       { label = 'KC_SCRL',           detail = [[Scroll Lock, Brightness Down (macOS)]] },
    142       { label = 'KC_PAUS',           detail = [[Pause, Brightness Up (macOS)]] },
    143       { label = 'KC_INS',            detail = [[Insert]] },
    144       { label = 'KC_HOME',           detail = [[Home]] },
    145       { label = 'KC_PGUP',           detail = [[Page Up ]] },
    146       { label = 'KC_DEL',            detail = [[Forward Delete]] },
    147       { label = 'KC_END',            detail = [[End ]] },
    148       { label = 'KC_PGDN',           detail = [[Page Down ]] },
    149       { label = 'KC_RGHT',           detail = [[Right Arrow ]] },
    150       { label = 'KC_LEFT',           detail = [[Left Arrow]] },
    151       { label = 'KC_DOWN',           detail = [[Down Arrow]] },
    152       { label = 'KC_UP',             detail = [[Up Arrow]] },
    153       { label = 'KC_NUM',            detail = [[Keypad Num Lock and Clear ]] },
    154       { label = 'KC_PSLS',           detail = [[Keypad `/`]] },
    155       { label = 'KC_PAST',           detail = [[Keypad `*`]] },
    156       { label = 'KC_PMNS',           detail = [[Keypad `-`]] },
    157       { label = 'KC_PPLS',           detail = [[Keypad `+`]] },
    158       { label = 'KC_PENT',           detail = [[Keypad Enter]] },
    159       { label = 'KC_P1',             detail = [[Keypad `1` and End]] },
    160       { label = 'KC_P2',             detail = [[Keypad `2` and Down Arrow ]] },
    161       { label = 'KC_P3',             detail = [[Keypad `3` and Page Down]] },
    162       { label = 'KC_P4',             detail = [[Keypad `4` and Left Arrow ]] },
    163       { label = 'KC_P5',             detail = [[Keypad `5`]] },
    164       { label = 'KC_P6',             detail = [[Keypad `6` and Right Arrow]] },
    165       { label = 'KC_P7',             detail = [[Keypad `7` and Home ]] },
    166       { label = 'KC_P8',             detail = [[Keypad `8` and Up Arrow ]] },
    167       { label = 'KC_P9',             detail = [[Keypad `9` and Page Up]] },
    168       { label = 'KC_P0',             detail = [[Keypad `0` and Insert ]] },
    169       { label = 'KC_PDOT',           detail = [[Keypad `.` and Delete ]] },
    170       { label = 'KC_NUBS',           detail = [[Non-US `\` and `\ ]] },
    171       { label = 'KC_APP',            detail = [[Application (Windows Context Menu Key)]] },
    172       { label = 'KC_KB_POWER',       detail = [[System Power]] },
    173       { label = 'KC_PEQL',           detail = [[Keypad `=`]] },
    174       { label = 'KC_F13',            detail = [[F13 ]] },
    175       { label = 'KC_F14',            detail = [[F14 ]] },
    176       { label = 'KC_F15',            detail = [[F15 ]] },
    177       { label = 'KC_F16',            detail = [[F16 ]] },
    178       { label = 'KC_F17',            detail = [[F17 ]] },
    179       { label = 'KC_F18',            detail = [[F18 ]] },
    180       { label = 'KC_F19',            detail = [[F19 ]] },
    181       { label = 'KC_F20',            detail = [[F20 ]] },
    182       { label = 'KC_F21',            detail = [[F21 ]] },
    183       { label = 'KC_F22',            detail = [[F22 ]] },
    184       { label = 'KC_F23',            detail = [[F23 ]] },
    185       { label = 'KC_F24',            detail = [[F24 ]] },
    186       { label = 'KC_EXEC',           detail = [[Execute ]] },
    187       { label = 'KC_HELP',           detail = [[Help]] },
    188       { label = 'KC_MENU',           detail = [[Menu]] },
    189       { label = 'KC_SLCT',           detail = [[Select]] },
    190       { label = 'KC_STOP',           detail = [[Stop]] },
    191       { label = 'KC_AGIN',           detail = [[Again ]] },
    192       { label = 'KC_UNDO',           detail = [[Undo]] },
    193       { label = 'KC_CUT',            detail = [[Cut ]] },
    194       { label = 'KC_COPY',           detail = [[Copy]] },
    195       { label = 'KC_PSTE',           detail = [[Paste ]] },
    196       { label = 'KC_FIND',           detail = [[Find]] },
    197       { label = 'KC_KB_MUTE',        detail = [[Mute]] },
    198       { label = 'KC_KB_VOLUME_UP',   detail = [[Volume Up ]] },
    199       { label = 'KC_KB_VOLUME_DOWN', detail = [[Volume Down ]] },
    200       { label = 'KC_LCAP',           detail = [[Locking Caps Lock ]] },
    201       { label = 'KC_LNUM',           detail = [[Locking Num Lock]] },
    202       { label = 'KC_LSCR',           detail = [[Locking Scroll Lock ]] },
    203       { label = 'KC_PCMM',           detail = [[Keypad `,`]] },
    204       { label = 'KC_KP_EQUAL_AS400', detail = [[Keypad `=` on AS/400 keyboards]] },
    205       { label = 'KC_INT1',           detail = [[International 1 ]] },
    206       { label = 'KC_INT2',           detail = [[International 2 ]] },
    207       { label = 'KC_INT3',           detail = [[International 3 ]] },
    208       { label = 'KC_INT4',           detail = [[International 4 ]] },
    209       { label = 'KC_INT5',           detail = [[International 5 ]] },
    210       { label = 'KC_INT6',           detail = [[International 6 ]] },
    211       { label = 'KC_INT7',           detail = [[International 7 ]] },
    212       { label = 'KC_INT8',           detail = [[International 8 ]] },
    213       { label = 'KC_INT9',           detail = [[International 9 ]] },
    214       { label = 'KC_LNG1',           detail = [[Language 1]] },
    215       { label = 'KC_LNG2',           detail = [[Language 2]] },
    216       { label = 'KC_LNG3',           detail = [[Language 3]] },
    217       { label = 'KC_LNG4',           detail = [[Language 4]] },
    218       { label = 'KC_LNG5',           detail = [[Language 5]] },
    219       { label = 'KC_LNG6',           detail = [[Language 6]] },
    220       { label = 'KC_LNG7',           detail = [[Language 7]] },
    221       { label = 'KC_LNG8',           detail = [[Language 8]] },
    222       { label = 'KC_LNG9',           detail = [[Language 9]] },
    223       { label = 'KC_ERAS',           detail = [[Alternate Erase ]] },
    224       { label = 'KC_SYRQ',           detail = [[SysReq/Attention]] },
    225       { label = 'KC_CNCL',           detail = [[Cancel]] },
    226       { label = 'KC_CLR',            detail = [[Clear ]] },
    227       { label = 'KC_PRIR',           detail = [[Prior ]] },
    228       { label = 'KC_RETN',           detail = [[Return]] },
    229       { label = 'KC_SEPR',           detail = [[Separator ]] },
    230       { label = 'KC_OUT',            detail = [[Out ]] },
    231       { label = 'KC_OPER',           detail = [[Oper]] },
    232       { label = 'KC_CLAG',           detail = [[Clear/Again ]] },
    233       { label = 'KC_CRSL',           detail = [[CrSel/Props ]] },
    234       { label = 'KC_EXSL',           detail = [[ExSel ]] },
    235       { label = 'KC_LCTL',           detail = [[Left Control]] },
    236       { label = 'KC_LSFT',           detail = [[Left Shift]] },
    237       { label = 'KC_LALT',           detail = [[Left Alt (Option) ]] },
    238       { label = 'KC_LGUI',           detail = [[Left GUI (Windows/Command/Meta key) ]] },
    239       { label = 'KC_RCTL',           detail = [[Right Control ]] },
    240       { label = 'KC_RSFT',           detail = [[Right Shift ]] },
    241       { label = 'KC_RALT',           detail = [[Right Alt (Option/AltGr)]] },
    242       { label = 'KC_RGUI',           detail = [[Right GUI (Windows/Command/Meta key)]] },
    243       { label = 'KC_PWR',            detail = [[System Power Down ]] },
    244       { label = 'KC_SLEP',           detail = [[System Sleep]] },
    245       { label = 'KC_WAKE',           detail = [[System Wake ]] },
    246       { label = 'KC_MUTE',           detail = [[Mute]] },
    247       { label = 'KC_VOLU',           detail = [[Volume Up ]] },
    248       { label = 'KC_VOLD',           detail = [[Volume Down ]] },
    249       { label = 'KC_MNXT',           detail = [[Next Track]] },
    250       { label = 'KC_MPRV',           detail = [[Previous Track]] },
    251       { label = 'KC_MSTP',           detail = [[Stop Track]] },
    252       { label = 'KC_MPLY',           detail = [[Play/Pause Track]] },
    253       { label = 'KC_MSEL',           detail = [[Launch Media Player ]] },
    254       { label = 'KC_EJCT',           detail = [[Eject ]] },
    255       { label = 'KC_MAIL',           detail = [[Launch Mail ]] },
    256       { label = 'KC_CALC',           detail = [[Launch Calculator ]] },
    257       { label = 'KC_MYCM',           detail = [[Launch My Computer]] },
    258       { label = 'KC_WSCH',           detail = [[Browser Search]] },
    259       { label = 'KC_WHOM',           detail = [[Browser Home]] },
    260       { label = 'KC_WBAK',           detail = [[Browser Back]] },
    261       { label = 'KC_WFWD',           detail = [[Browser Forward ]] },
    262       { label = 'KC_WSTP',           detail = [[Browser Stop]] },
    263       { label = 'KC_WREF',           detail = [[Browser Refresh ]] },
    264       { label = 'KC_WFAV',           detail = [[Browser Favorites ]] },
    265       { label = 'KC_MFFD',           detail = [[Next Track]] },
    266       { label = 'KC_MRWD',           detail = [[Previous Track]] },
    267       { label = 'KC_BRIU',           detail = [[Brightness Up ]] },
    268       { label = 'KC_BRID',           detail = [[Brightness Down ]] },
    269       { label = 'KC_CPNL',           detail = [[Open Control Panel]] },
    270       { label = 'KC_ASST',           detail = [[Launch Context-Aware Assistant]] },
    271       { label = 'MOD_LCTL',          detail = 'Left Control' },
    272       { label = 'MOD_LSFT',          detail = 'Left Shift' },
    273       { label = 'MOD_LALT',          detail = 'Left Alt' },
    274       { label = 'MOD_LGUI',          detail = 'Left GUI (Windows/Command/Meta key)' },
    275       { label = 'MOD_RCTL',          detail = 'Right Control' },
    276       { label = 'MOD_RSFT',          detail = 'Right Shift' },
    277       { label = 'MOD_RALT',          detail = 'Right Alt (AltGr)' },
    278       { label = 'MOD_RGUI',          detail = 'Right GUI (Windows/Command/Meta key)' },
    279       { label = 'MOD_HYPR',          detail = 'Hyper (Left Control, Shift, Alt and GUI)' },
    280       { label = 'MOD_MEH',           detail = 'Meh (Left Control, Shift, and Alt)' },
    281       { label = 'KC_TILD',           detail = '~' },
    282       { label = 'KC_EXLM',           detail = '!' },
    283       { label = 'KC_AT',             detail = '@' },
    284       { label = 'KC_HASH',           detail = '#' },
    285       { label = 'KC_DLR',            detail = '$' },
    286       { label = 'KC_PERC',           detail = '%' },
    287       { label = 'KC_CIRC',           detail = '^' },
    288       { label = 'KC_AMPR',           detail = '&' },
    289       { label = 'KC_ASTR',           detail = '*' },
    290       { label = 'KC_LPRN',           detail = '(' },
    291       { label = 'KC_RPRN',           detail = ')' },
    292       { label = 'KC_UNDS',           detail = '_' },
    293       { label = 'KC_PLUS',           detail = '+' },
    294       { label = 'KC_LCBR',           detail = '{' },
    295       { label = 'KC_RCBR',           detail = '}' },
    296       { label = 'KC_PIPE',           detail = [[\|]] },
    297       { label = 'KC_COLN',           detail = ':' },
    298       { label = 'KC_DQT',            detail = '"' },
    299       { label = 'KC_LT',             detail = '<' },
    300       { label = 'KC_GT',             detail = '>' },
    301       { label = 'KC_QUES',           detail = '?' },
    302     })
    303   end
    304 
    305   require('cmp').register_source('qmk_keys', source)
    306 
    307   vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, {
    308     pattern = '*/qmk_firmware/**',
    309     callback = function()
    310       require('cmp').setup.buffer {
    311         sources = {
    312           { name = 'qmk_keys' },
    313           { name = 'nvim_lsp' },
    314           { name = 'snippets' },
    315           { name = 'buffer',  keyword_length = 5 },
    316         },
    317       }
    318     end,
    319   })
    320 end