From 9d32c214dbdd66fff881d0d3aad91bde282bd37b Mon Sep 17 00:00:00 2001 From: teto <886074+teto@users.noreply.github.com> Date: Sun, 28 Dec 2025 20:39:56 +0100 Subject: [PATCH] neovim: let user insert snippets in init.lua It is a common complaint for users that they can't insert their own code where they want in the init.lua. --- modules/programs/neovim.nix | 55 ++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/modules/programs/neovim.nix b/modules/programs/neovim.nix index 15e0374a9..7abd53281 100644 --- a/modules/programs/neovim.nix +++ b/modules/programs/neovim.nix @@ -213,11 +213,17 @@ in extraLuaConfig = mkOption { type = types.lines; default = ""; - example = '' - vim.opt.nobackup = true + example = lib.literalExpression '' + let + nvimEarlyInit = lib.mkOrder 500 "set rtp+=vim.opt.rtp:prepend('/home/user/myplugin')"; + nvimLateInit = lib.mkAfter 1000 "vim.opt.signcolumn = 'auto:1-3'"; + in + lib.mkMerge [ nvimEarlyInit nvimLateInit ]; ''; description = '' - Custom lua lines. + Content to be added to {file}`init.lua`. + + To specify the order, use `lib.mkOrder`, `lib.mkBefore`, `lib.mkAfter`. ''; }; @@ -472,29 +478,28 @@ in shellAliases = mkIf cfg.vimdiffAlias { vimdiff = "nvim -d"; }; }; - xdg.configFile = - let - hasLuaConfig = lib.hasAttr "lua" config.programs.neovim.generatedConfigs; - luaRcContent = - lib.optionalString ( - wrappedNeovim'.initRc != "" - ) "vim.cmd [[source ${pkgs.writeText "nvim-init-home-manager.vim" wrappedNeovim'.initRc}]]\n" - + config.programs.neovim.extraLuaConfig - + lib.optionalString hasLuaConfig config.programs.neovim.generatedConfigs.lua; - in - lib.mkMerge ( - # writes runtime - (map (x: x.runtime) pluginsNormalized) - ++ [ - { - "nvim/init.lua" = mkIf (luaRcContent != "") { text = luaRcContent; }; + programs.neovim.extraLuaConfig = lib.mkMerge [ + (lib.mkIf (wrappedNeovim'.initRc != "") ( + lib.mkBefore "vim.cmd [[source ${pkgs.writeText "nvim-init-home-manager.vim" wrappedNeovim'.initRc}]]" + )) + (lib.mkIf (lib.hasAttr "lua" cfg.generatedConfigs) (lib.mkAfter cfg.generatedConfigs.lua)) + ]; - "nvim/coc-settings.json" = mkIf cfg.coc.enable { - source = jsonFormat.generate "coc-settings.json" cfg.coc.settings; - }; - } - ] - ); + xdg.configFile = lib.mkMerge ( + # writes runtime + (map (x: x.runtime) pluginsNormalized) + ++ [ + { + "nvim/init.lua" = mkIf (cfg.extraLuaConfig != "") { + text = cfg.extraLuaConfig; + }; + + "nvim/coc-settings.json" = mkIf cfg.coc.enable { + source = jsonFormat.generate "coc-settings.json" cfg.coc.settings; + }; + } + ] + ); } ); }