From 8b98f07862ddbffbfc93bb7507ffae524fcfef5c Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Wed, 3 Sep 2025 14:44:46 +0300 Subject: [PATCH] wrapper/build: add option examples; put evaluated values in `literalExpression` Signed-off-by: NotAShelf Change-Id: I6a6a69648220a65886994d4cac67f634a61815d5 --- modules/wrapper/build/config.nix | 47 ++++++++++++++++++------- modules/wrapper/environment/options.nix | 22 ++++++------ 2 files changed, 44 insertions(+), 25 deletions(-) diff --git a/modules/wrapper/build/config.nix b/modules/wrapper/build/config.nix index a1807388..03c42787 100644 --- a/modules/wrapper/build/config.nix +++ b/modules/wrapper/build/config.nix @@ -22,9 +22,7 @@ passthru.vimPlugin = false; }; - # build a vim plugin with the given name and arguments - # if the plugin is nvim-treesitter, warn the user to use buildTreesitterPlug - # instead + # Build a Vim plugin with the given name and arguments. buildPlug = attrs: let pin = getPin attrs.pname; in @@ -36,6 +34,7 @@ // attrs ); + # Build a given Treesitter grammar. buildTreesitterPlug = grammars: vimPlugins.nvim-treesitter.withPlugins (_: grammars); pluginBuilders = { @@ -48,6 +47,9 @@ doCheck = false; }; + # Get plugins built from source from self.packages + # If adding a new plugin to be built from source, it must also be inherited + # here. inherit (inputs.self.packages.${pkgs.stdenv.system}) blink-cmp avante-nvim; }; @@ -71,29 +73,38 @@ # Wrap the user's desired (unwrapped) Neovim package with arguments that'll be used to # generate a wrapped Neovim package. neovim-wrapped = inputs.mnw.lib.wrap {inherit pkgs;} { + appName = "nvf"; neovim = config.vim.package; + initLua = config.vim.builtLuaConfigRC; + luaFiles = config.vim.extraLuaFiles; + + # Plugin configurations plugins = { start = buildConfigPlugins config.vim.startPlugins; opt = buildConfigPlugins config.vim.optPlugins; }; - appName = "nvf"; - extraBinPath = config.vim.extraPackages; - initLua = config.vim.builtLuaConfigRC; - luaFiles = config.vim.extraLuaFiles; + + # Providers for Neovim providers = { + ruby.enable = config.vim.withRuby; + nodeJs.enable = config.vim.withNodeJs; python3 = { enable = config.vim.withPython3; extraPackages = ps: map (flip builtins.getAttr ps) config.vim.python3Packages; }; - ruby.enable = config.vim.withRuby; - nodeJs.enable = config.vim.withNodeJs; }; + + # Aliases to link `nvim` to aliases = lib.optional config.vim.viAlias "vi" ++ lib.optional config.vim.vimAlias "vim"; + # Additional packages or Lua packages to be made available to Neovim + extraBinPath = config.vim.extraPackages; extraLuaPackages = ps: map (flip builtins.getAttr ps) config.vim.luaPackages; }; + # A store path representing the built Lua configuration. dummyInit = pkgs.writeText "nvf-init.lua" config.vim.builtLuaConfigRC; + # Additional helper scripts for printing and displaying nvf configuration # in your commandline. printConfig = pkgs.writers.writeDashBin "nvf-print-config" "cat ${dummyInit}"; @@ -106,10 +117,20 @@ paths = [neovim-wrapped printConfig printConfigPath]; postBuild = "echo Helpers added"; - # Allow evaluating config.vim, i.e., config.vim from the packages' passthru - # attribute. For example, packages.x86_64-linux.neovim.passthru.neovimConfig - # will return the configuration in full. - passthru.neovimConfig = config.vim; + passthru = { + # Allow evaluating config.vim, i.e., config.vim from the packages' passthru + # attribute. For example, packages.x86_64-linux.neovim.passthru.neovimConfig + # will return the configuration in full. + neovimConfig = config.vim; + + # Also expose the helper scripts in passthru. + nvfPrintConfig = printConfig; + nvfPrintConfigPath = printConfigPath; + + # In systems where we only have a package and no module, this can be used + # to access the built init.lua + initLua = dummyInit; + }; meta = neovim-wrapped.meta diff --git a/modules/wrapper/environment/options.nix b/modules/wrapper/environment/options.nix index c401f506..d3b28b0f 100644 --- a/modules/wrapper/environment/options.nix +++ b/modules/wrapper/environment/options.nix @@ -3,7 +3,7 @@ lib, ... }: let - inherit (lib.options) mkOption mkEnableOption literalMD; + inherit (lib.options) mkOption mkEnableOption literalMD literalExpression; inherit (lib.types) package bool str listOf attrsOf; inherit (lib.nvim.types) pluginsOpt extraPluginType; in { @@ -11,6 +11,7 @@ in { package = mkOption { type = package; default = pkgs.neovim-unwrapped; + defaultText = literalExpression "pkgs.neovim-unwrapped"; description = '' The neovim package to use for the wrapper. This corresponds to the package that will be wrapped @@ -27,21 +28,20 @@ in { viAlias = mkOption { type = bool; default = true; + example = false; description = "Enable the `vi` alias for `nvim`"; }; vimAlias = mkOption { type = bool; default = true; + example = false; description = "Enable the `vim` alias for `nvim`"; }; startPlugins = pluginsOpt { default = ["plenary-nvim"]; - example = '' - [pkgs.vimPlugins.telescope-nvim] - ''; - + example = literalExpression "[pkgs.vimPlugins.telescope-nvim]"; description = '' List of plugins to load on startup. This is used internally to add plugins to Neovim's runtime. @@ -54,9 +54,7 @@ in { optPlugins = pluginsOpt { default = []; - example = '' - [pkgs.vimPlugins.vim-ghost] - ''; + example = literalExpression "[pkgs.vimPlugins.vim-ghost]"; description = '' List of plugins to optionally load on startup. @@ -108,7 +106,7 @@ in { ''; }; - # this defaults to `true` in the wrapper + # This defaults to `true` in the wrapper # and since we pass this value to the wrapper # with an inherit, it should be `true` here as well withRuby = @@ -120,14 +118,14 @@ in { }; withNodeJs = mkEnableOption '' - NodeJs support in the Neovim wrapper + NodeJS support in the Neovim wrapper ''; luaPackages = mkOption { type = listOf str; default = []; example = ''["magick" "serpent"]''; - description = "List of lua packages to install"; + description = "List of Lua packages to install"; }; withPython3 = mkEnableOption '' @@ -144,7 +142,7 @@ in { pluginOverrides = mkOption { type = attrsOf package; default = {}; - example = '' + example = literalExpression '' { lazydev-nvim = pkgs.fetchFromGitHub { owner = "folke";