binds/qmk: init

Create the `vim.binds.qmk` module with `enable` and `setupOpts`.
This commit is contained in:
Cool-Game-Dev 2025-08-13 20:05:08 -05:00
commit ef9609c207
No known key found for this signature in database
7 changed files with 101 additions and 0 deletions

View file

@ -3,5 +3,6 @@ _: {
./which-key
./cheatsheet
./hardtime
./qmk
];
}

View file

@ -0,0 +1,26 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkIf;
inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.dag) entryAfter;
cfg = config.vim.binds.qmk;
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 == "zmk") && !(cfg.setupOpts.comment_preview.position == "inside");
message = "comment_preview.position can only be set to inside when using the qmk layoyt";
}];
};
}

View file

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

View file

@ -0,0 +1,51 @@
{
config,
lib,
...
}: let
inherit (lib.options) mkOption mkEnableOption;
inherit (lib.types) attrsOf enum lines str;
inherit (lib.nvim.types) mkPluginSetupOption;
in {
options.vim.binds.qmk = {
enable = mkEnableOption "QMK and ZMK keymaps in nvim";
setupOpts = mkPluginSetupOption "qmk.nvim" {
name = mkOption {
type = str;
description = "The name of the layout";
};
layout = mkOption {
type = lines;
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
'';
};
};
};
};
}