diff --git a/docs/release-notes/rl-0.7.md b/docs/release-notes/rl-0.7.md index 0d607f93..21edbddc 100644 --- a/docs/release-notes/rl-0.7.md +++ b/docs/release-notes/rl-0.7.md @@ -143,10 +143,10 @@ configuration formats. - Add [neo-tree.nvim] as an alternative file-tree plugin. It will be available under `vim.filetree.neo-tree`, similar to nvimtree. -- Add `nvf-print-config` & `nvf-print-config-path` helper scripts to Neovim +- Add `print-nvf-config` & `print-nvf-config-path` helper scripts to Neovim closure. Both of those scripts have been automatically added to your PATH upon using neovimConfig or `programs.nvf.enable`. - - `nvf-print-config` will display your `init.lua`, in full. - - `nvf-print-config-path` will display the path to _a clone_ of your + - `print-nvf-config` will display your `init.lua`, in full. + - `print-nvf-config-path` will display the path to _a clone_ of your `init.lua`. This is not the path used by the Neovim wrapper, but an identical clone. diff --git a/flake.lock b/flake.lock index 1851eb71..de29be39 100644 --- a/flake.lock +++ b/flake.lock @@ -69,11 +69,11 @@ }, "mnw": { "locked": { - "lastModified": 1723419050, - "narHash": "sha256-Eb8jBUgHwpte+bGsqeXNbKMBfZaDB7RiPQwyb1vzJK8=", + "lastModified": 1722191188, + "narHash": "sha256-YF//iMALbrd2Ni9aju7w8NniH16Qz6RFTRD6md5UkDc=", "owner": "Gerg-L", "repo": "mnw", - "rev": "e625f5965567f16102bc52897c7600dcde53c6c3", + "rev": "c7b289f3f5a31b6e744be37d83fc231816621231", "type": "github" }, "original": { @@ -939,22 +939,6 @@ "type": "github" } }, - "plugin-new-file-template-nvim": { - "flake": false, - "locked": { - "lastModified": 1721518222, - "narHash": "sha256-g0IjJrHRXw7U9goVLzVYUyHBSsDZGHMpi3YZPhg64zA=", - "owner": "otavioschwanck", - "repo": "new-file-template.nvim", - "rev": "6ac66669dbf2dc5cdee184a4fe76d22465ca67e8", - "type": "github" - }, - "original": { - "owner": "otavioschwanck", - "repo": "new-file-template.nvim", - "type": "github" - } - }, "plugin-noice-nvim": { "flake": false, "locked": { @@ -1878,7 +1862,6 @@ "plugin-neo-tree-nvim": "plugin-neo-tree-nvim", "plugin-neocord": "plugin-neocord", "plugin-neodev-nvim": "plugin-neodev-nvim", - "plugin-new-file-template-nvim": "plugin-new-file-template-nvim", "plugin-noice-nvim": "plugin-noice-nvim", "plugin-none-ls": "plugin-none-ls", "plugin-nui-nvim": "plugin-nui-nvim", diff --git a/modules/default.nix b/modules/default.nix index 1ae3b034..227cf205 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -7,65 +7,84 @@ inputs: { extraModules ? [], }: let inherit (pkgs) vimPlugins; + inherit (pkgs.vimUtils) buildVimPlugin; inherit (lib.strings) isString toString; inherit (lib.lists) filter map concatLists; + inherit (lib.attrsets) recursiveUpdate getAttr; + inherit (lib.asserts) assertMsg; # import modules.nix with `check`, `pkgs` and `lib` as arguments # check can be disabled while calling this file is called # to avoid checking in all modules - nvimModules = import ./modules.nix {inherit pkgs check lib;}; + nvimModules = import ./modules.nix { + inherit pkgs check lib; + }; # evaluate the extended library with the modules # optionally with any additional modules passed by the user module = lib.evalModules { - specialArgs = extraSpecialArgs // {modulesPath = toString ./.;}; + specialArgs = recursiveUpdate {modulesPath = toString ./.;} extraSpecialArgs; modules = concatLists [[configuration] nvimModules extraModules]; }; # alias to the internal configuration vimOptions = module.config.vim; - noBuildPlug = {pname, ...} @ attrs: let - src = inputs."plugin-${attrs.pname}"; - in - { - version = src.shortRev or src.shortDirtyRev or "dirty"; - outPath = src; - passthru.vimPlugin = false; - } - // attrs; - # build a vim plugin with the given name and arguments # if the plugin is nvim-treesitter, warn the user to use buildTreesitterPlug # instead - buildPlug = attrs: let - src = inputs."plugin-${attrs.pname}"; + buildPlug = {pname, ...} @ attrs: let + src = getAttr ("plugin-" + pname) inputs; in - pkgs.vimUtils.buildVimPlugin ( - { - version = src.shortRev or src.shortDirtyRev or "dirty"; + pkgs.stdenvNoCC.mkDerivation ({ inherit src; + version = src.shortRev or src.shortDirtyRev or "dirty"; + installPhase = '' + runHook preInstall + + mkdir -p $out + cp -r . $out + + runHook postInstall + ''; } - // attrs - ); + // attrs); + + noBuildPlug = {pname, ...} @ attrs: let + input = getAttr ("plugin-" + pname) inputs; + in + { + version = input.shortRev or input.shortDirtyRev or "dirty"; + outPath = getAttr ("plugin-" + pname) inputs; + } + // attrs; buildTreesitterPlug = grammars: vimPlugins.nvim-treesitter.withPlugins (_: grammars); - pluginBuilders = { - nvim-treesitter = buildTreesitterPlug vimOptions.treesitter.grammars; - flutter-tools-patched = buildPlug { - pname = "flutter-tools"; - patches = [../patches/flutter-tools.patch]; - }; - }; - buildConfigPlugins = plugins: - map ( - plug: - if (isString plug) - then pluginBuilders.${plug} or (noBuildPlug {pname = plug;}) - else plug - ) (filter (f: f != null) plugins); + map + (plug: ( + if (isString plug) + then + ( + if (plug == "nvim-treesitter") + then (buildTreesitterPlug vimOptions.treesitter.grammars) + else if (plug == "flutter-tools-patched") + then + ( + buildPlug + { + pname = "flutter-tools"; + patches = [../patches/flutter-tools.patch]; + } + ) + else noBuildPlug {pname = plug;} + ) + else plug + )) + (filter + (f: f != null) + plugins); # built (or "normalized") plugins that are modified builtStartPlugins = buildConfigPlugins vimOptions.startPlugins; @@ -75,7 +94,7 @@ inputs: { }) (buildConfigPlugins vimOptions.optPlugins); # additional Lua and Python3 packages, mapped to their respective functions - # to conform to the format mnw expects. end user should + # to conform to the format makeNeovimConfig expects. end user should # only ever need to pass a list of packages, which are modified # here extraLuaPackages = ps: map (x: ps.${x}) vimOptions.luaPackages; @@ -85,7 +104,7 @@ inputs: { # generate a wrapped Neovim package. neovim-wrapped = inputs.mnw.lib.wrap pkgs { neovim = vimOptions.package; - plugins = builtStartPlugins ++ builtOptPlugins; + plugins = concatLists [builtStartPlugins builtOptPlugins]; appName = "nvf"; extraBinPath = vimOptions.extraPackages; initLua = vimOptions.builtLuaConfigRC; @@ -95,11 +114,20 @@ inputs: { inherit extraLuaPackages extraPython3Packages; }; - dummyInit = pkgs.writeText "nvf-init.lua" vimOptions.builtLuaConfigRC; # Additional helper scripts for printing and displaying nvf configuration # in your commandline. - printConfig = pkgs.writers.writeDashBin "nvf-print-config" "cat ${dummyInit}"; - printConfigPath = pkgs.writers.writeDashBin "nvf-print-config-path" "echo -n ${dummyInit}"; + printConfig = pkgs.writers.writeDashBin "print-nvf-config" '' + cat << EOF + ${vimOptions.builtLuaConfigRC} + EOF + ''; + + printConfigPath = pkgs.writers.writeDashBin "print-nvf-config-path" '' + realpath ${pkgs.writeTextFile { + name = "nvf-init.lua"; + text = vimOptions.builtLuaConfigRC; + }} + ''; in { inherit (module) options config; inherit (module._module.args) pkgs; @@ -109,7 +137,7 @@ in { neovim = pkgs.symlinkJoin { name = "nvf-with-helpers"; paths = [neovim-wrapped printConfig printConfigPath]; - postBuild = "echo Helpers added"; + postBuild = "echo helpers added"; meta = { description = "Wrapped version of Neovim with additional helper scripts"; diff --git a/modules/wrapper/rc/config.nix b/modules/wrapper/rc/config.nix index 78edb597..be299f3b 100644 --- a/modules/wrapper/rc/config.nix +++ b/modules/wrapper/rc/config.nix @@ -5,8 +5,9 @@ }: let inherit (builtins) map mapAttrs filter; inherit (lib.options) mkOption; - inherit (lib.attrsets) mapAttrsToList filterAttrs getAttrs attrValues attrNames; + inherit (lib.attrsets) filterAttrs getAttrs attrValues attrNames; inherit (lib.strings) concatLines concatMapStringsSep; + inherit (lib.misc) mapAttrsFlatten; inherit (lib.trivial) showWarnings; inherit (lib.types) str nullOr; inherit (lib.generators) mkLuaInline; @@ -82,7 +83,7 @@ in { config = let filterNonNull = attrs: filterAttrs (_: value: value != null) attrs; globalsScript = - mapAttrsToList (name: value: "vim.g.${name} = ${toLuaObject value}") + mapAttrsFlatten (name: value: "vim.g.${name} = ${toLuaObject value}") (filterNonNull cfg.globals); extraPluginConfigs = resolveDag {