binds/qmk: init (#1083)

* binds/qmk: init

Create the `vim.binds.qmk` module with `enable` and `setupOpts`.

* Clean up release notes

Add consistent style and formatting to release notes

Co-authored-by: raf <raf@notashelf.dev>

* Clean up release notes (again)

* binks/qmk: remove unneeded function

* binds/qmk: Rename to `vim.utility.qmk`

Move the `vim.binds.qmk` module to `vim.utility.qmk`.

* utility/qmk: add defaults and asserts

Add default values and assertions for required options.

* utility/qmk: rename to utility/qmk-nvim

* utility/qmk-nvim: improve assertion readability

* utility/qmk-nvim: Fix links broken in module rename

* Fix release notes

* Add final newline to release notes

---------

Co-authored-by: raf <raf@notashelf.dev>
This commit is contained in:
Poseidon 2025-08-20 01:19:57 -05:00 committed by GitHub
commit b7d321fd88
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 111 additions and 6 deletions

View file

@ -192,6 +192,7 @@ isMaximal: {
vim-wakatime.enable = false;
diffview-nvim.enable = true;
yanky-nvim.enable = false;
qmk-nvim.enable = false; # requires hardware specific options
icon-picker.enable = isMaximal;
surround.enable = isMaximal;
leetcode-nvim.enable = isMaximal;

View file

@ -482,12 +482,11 @@
[jsonfmt]: https://github.com/caarlos0/jsonfmt
[superhtml]: https://github.com/kristoff-it/superhtml
[htmlHTML]: https://github.com/htmlhint/HTMLHint
[qmk-nvim]: https://github.com/codethread/qmk.nvim
- Add just support under `vim.languages.just` using [just-lsp].
- Add [roslyn-ls] to the `vim.languages.csharp` module.
- Added json support under `vim.languages.json` using [jsonls] and [jsonfmt].
- Added advanced HTML support with [superhtml] for lsp and formatting and
[htmlHINT] for diagnostics.
- Add JSON support under `vim.languages.json` using [jsonls] and [jsonfmt].
- Add advanced HTML support under `vim.languages.html` using [superhtml] and
[htmlHINT].
- Add QMK support under `vim.utility.qmk-nvim` via [qmk-nvim].

View file

@ -18,6 +18,7 @@
./oil-nvim
./outline
./preview
./qmk-nvim
./sleuth
./smart-splits
./snacks-nvim

View file

@ -0,0 +1,36 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkIf;
inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.dag) entryAfter;
cfg = config.vim.utility.qmk-nvim;
in {
config = mkIf cfg.enable {
vim = {
startPlugins = ["qmk-nvim"];
pluginRC.qmk-nvim = entryAfter ["nvim-notify"] ''
require('qmk').setup(${toLuaObject cfg.setupOpts})
'';
};
assertions = [
{
assertion = cfg.setupOpts.variant == "qmk" && cfg.setupOpts.comment_preview.position != "inside";
message = "comment_preview.position can only be set to inside when using the qmk layoyt";
}
{
assertion = cfg.setupOpts.name != null;
message = "qmk-nvim requires 'vim.utility.qmk.setupOpts.name' to be set.";
}
{
assertion = cfg.setupOpts.layout != null;
message = "qmk-nvim requires 'vim.utility.qmk.setupOpts.layout' to be set.";
}
];
};
}

View file

@ -0,0 +1,6 @@
{
imports = [
./config.nix
./qmk-nvim.nix
];
}

View file

@ -0,0 +1,49 @@
{lib, ...}: let
inherit (lib.options) mkOption mkEnableOption;
inherit (lib.types) attrsOf nullOr enum lines str;
inherit (lib.nvim.types) mkPluginSetupOption;
in {
options.vim.utility.qmk-nvim = {
enable = mkEnableOption "QMK and ZMK keymaps in nvim";
setupOpts = mkPluginSetupOption "qmk.nvim" {
name = mkOption {
type = nullOr str;
default = null;
description = "The name of the layout";
};
layout = mkOption {
type = nullOr lines;
default = null;
description = ''
The keyboard key layout
see <https://github.com/codethread/qmk.nvim?tab=readme-ov-file#Layout> for more details
'';
};
variant = mkOption {
type = enum ["qmk" "zmk"];
default = "qmk";
description = "Chooses the expected hardware target";
};
comment_preview = {
position = mkOption {
type = enum ["top" "bottom" "inside" "none"];
default = "top";
description = "Controls the position of the preview";
};
keymap_overrides = mkOption {
type = attrsOf str;
default = {};
description = ''
Key codes to text replacements
see <https://github.com/codethread/qmk.nvim/blob/main/lua/qmk/config/key_map.lua> for more details
'';
};
};
};
};
}

View file

@ -2186,6 +2186,19 @@
"url": "https://github.com/kevinhwang91/promise-async/archive/119e8961014c9bfaf1487bf3c2a393d254f337e2.tar.gz",
"hash": "0q4a0rmy09hka6zvydzjj2gcm2j5mlbrhbxfcdjj33ngpblkmqzm"
},
"qmk-nvim": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "codethread",
"repo": "qmk.nvim"
},
"branch": "main",
"submodules": false,
"revision": "3c804c1480991e4837514900b22b9358cfd64fa1",
"url": "https://github.com/codethread/qmk.nvim/archive/3c804c1480991e4837514900b22b9358cfd64fa1.tar.gz",
"hash": "03fsx6qsn8b36jp5m0fkdla6gkkzdv2j18y378y3cqpjclgq995a"
},
"rainbow-delimiters-nvim": {
"type": "Git",
"repository": {