From 8b5ef2cf08f39a6881dfee1335d5665a106d67e6 Mon Sep 17 00:00:00 2001 From: alfarel Date: Sat, 14 Mar 2026 20:17:19 -0400 Subject: [PATCH] wrapper/lib: init with mkMappingOption mkMappingOption wants to read a setting set in config without passing it every time, so it should be defined in config. --- modules/modules.nix | 1 + modules/neovim/mappings/options.nix | 4 +++- modules/wrapper/lib/config.nix | 20 ++++++++++++++++++++ modules/wrapper/lib/default.nix | 6 ++++++ modules/wrapper/lib/options.nix | 11 +++++++++++ 5 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 modules/wrapper/lib/config.nix create mode 100644 modules/wrapper/lib/default.nix create mode 100644 modules/wrapper/lib/options.nix diff --git a/modules/modules.nix b/modules/modules.nix index 1eca042a..654cd5ce 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -57,6 +57,7 @@ "rc" "warnings" "lazy" + "lib" ]; # Extra modules, such as deprecation warnings diff --git a/modules/neovim/mappings/options.nix b/modules/neovim/mappings/options.nix index 98e04a65..69ff9311 100644 --- a/modules/neovim/mappings/options.nix +++ b/modules/neovim/mappings/options.nix @@ -1,5 +1,5 @@ {lib, ...}: let - inherit (lib.options) mkOption literalMD; + inherit (lib.options) mkEnableOption mkOption literalMD; inherit (lib.types) either str listOf attrsOf nullOr submodule; inherit (lib.nvim.config) mkBool; @@ -57,6 +57,8 @@ }; in { options.vim = { + vendoredKeymaps = mkEnableOption "this project's vendored keymaps by default" // {default = true;}; + keymaps = mkOption { type = listOf mapType; description = "Custom keybindings."; diff --git a/modules/wrapper/lib/config.nix b/modules/wrapper/lib/config.nix new file mode 100644 index 00000000..54daf5d9 --- /dev/null +++ b/modules/wrapper/lib/config.nix @@ -0,0 +1,20 @@ +{ + config, + lib, + ... +}: let + inherit (lib.options) mkOption; + inherit (lib.types) nullOr str; +in { + config.vim.lib = { + mkMappingOption = description: default: + mkOption { + type = nullOr str; + default = + if config.vim.vendoredKeymaps + then default + else null; + inherit description; + }; + }; +} diff --git a/modules/wrapper/lib/default.nix b/modules/wrapper/lib/default.nix new file mode 100644 index 00000000..fe9e1b8e --- /dev/null +++ b/modules/wrapper/lib/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./config.nix + ./options.nix + ]; +} diff --git a/modules/wrapper/lib/options.nix b/modules/wrapper/lib/options.nix new file mode 100644 index 00000000..93b13f1a --- /dev/null +++ b/modules/wrapper/lib/options.nix @@ -0,0 +1,11 @@ +{lib, ...}: let + inherit (lib.options) mkOption; + inherit (lib.types) attrsOf raw; +in { + options.vim.lib = mkOption { + # The second type should be one without merge semantics and which allows function values. + type = attrsOf raw; + default = {}; + internal = true; + }; +}