diff --git a/configuration.nix b/configuration.nix index af62a944..6a489430 100644 --- a/configuration.nix +++ b/configuration.nix @@ -158,6 +158,7 @@ isMaximal: { whichKey.enable = true; cheatsheet.enable = true; hardtime-nvim.enable = isMaximal; + qmk.enable = false; # requires hardware specific options }; telescope.enable = true; diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index b677ae98..1aa1f14d 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -480,9 +480,12 @@ [roslyn-ls]: https://github.com/dotnet/vscode-csharp [jsonls]: https://github.com/microsoft/vscode/tree/1.101.2/extensions/json-language-features/server [jsonfmt]: https://github.com/caarlos0/jsonfmt +[qmk]: 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]. + +- Add [qmk] plugin in `vim.binds.qmk` with `enable` and `setupOpts`. diff --git a/modules/plugins/utility/binds/default.nix b/modules/plugins/utility/binds/default.nix index 43666cc9..cd755ac8 100644 --- a/modules/plugins/utility/binds/default.nix +++ b/modules/plugins/utility/binds/default.nix @@ -3,5 +3,6 @@ _: { ./which-key ./cheatsheet ./hardtime + ./qmk ]; } diff --git a/modules/plugins/utility/binds/qmk/config.nix b/modules/plugins/utility/binds/qmk/config.nix new file mode 100644 index 00000000..1f1ec258 --- /dev/null +++ b/modules/plugins/utility/binds/qmk/config.nix @@ -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"; + }]; + }; +} diff --git a/modules/plugins/utility/binds/qmk/default.nix b/modules/plugins/utility/binds/qmk/default.nix new file mode 100644 index 00000000..e58a97fa --- /dev/null +++ b/modules/plugins/utility/binds/qmk/default.nix @@ -0,0 +1,6 @@ +{...}: { + imports = [ + ./config.nix + ./qmk.nix + ]; +} diff --git a/modules/plugins/utility/binds/qmk/qmk.nix b/modules/plugins/utility/binds/qmk/qmk.nix new file mode 100644 index 00000000..f76aff90 --- /dev/null +++ b/modules/plugins/utility/binds/qmk/qmk.nix @@ -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 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 for more details + ''; + }; + }; + }; + }; +} diff --git a/npins/sources.json b/npins/sources.json index eec2fde9..0ec503ac 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -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": {