From 71651618566fb03fa9acedbee6276c3e14d3bad3 Mon Sep 17 00:00:00 2001 From: cjurgell Date: Wed, 13 Aug 2025 14:13:05 -0500 Subject: [PATCH] fix ts --- flake.nix | 2 + nix/mkNeovim.nix | 340 ++++++++++++++++++------------------ nix/neovim-overlay.nix | 44 ++--- nix/plugin-overlay.nix | 29 +++ nvim/colors/iofq.lua | 4 +- nvim/init.lua | 1 + nvim/lua/config/autocmd.lua | 14 +- nvim/lua/config/init.lua | 7 +- nvim/lua/plugins/lsp.lua | 1 + nvim/lua/plugins/misc.lua | 15 +- 10 files changed, 234 insertions(+), 223 deletions(-) create mode 100644 nix/plugin-overlay.nix diff --git a/flake.nix b/flake.nix index 260a049..68da80f 100644 --- a/flake.nix +++ b/flake.nix @@ -39,6 +39,7 @@ systems = builtins.attrNames nixpkgs.legacyPackages; # This is where the Neovim derivation is built. + plugin-overlay = import ./nix/plugin-overlay.nix { inherit inputs; }; neovim-overlay = import ./nix/neovim-overlay.nix { inherit inputs; }; in flake-utils.lib.eachSystem systems ( @@ -49,6 +50,7 @@ config.allowUnfree = true; overlays = [ inputs.neovim-nightly-overlay.overlays.default + plugin-overlay neovim-overlay # This adds a function can be used to generate a .luarc.json # containing the Neovim API all plugins in the workspace directory. diff --git a/nix/mkNeovim.nix b/nix/mkNeovim.nix index 956f2c3..7d2e3a6 100644 --- a/nix/mkNeovim.nix +++ b/nix/mkNeovim.nix @@ -7,195 +7,191 @@ pkgs-wrapNeovim ? pkgs, }: with lib; - { - # NVIM_APPNAME - Defaults to 'nvim' if not set. - # If set to something else, this will also rename the binary. - appName ? null, - # The Neovim package to wrap - neovim-unwrapped ? pkgs-wrapNeovim.neovim-unwrapped, - plugins ? [], # List of plugins - # List of dev plugins (will be bootstrapped) - useful for plugin developers - # { name = ; url = ; } - devPlugins ? [], - # Regexes for config files to ignore, relative to the nvim directory. - # e.g. [ "^plugin/neogit.lua" "^ftplugin/.*.lua" ] - ignoreConfigRegexes ? [], - extraPackages ? [], # Extra runtime dependencies (e.g. ripgrep, ...) - # The below arguments can typically be left as their defaults - # Additional lua packages (not plugins), e.g. from luarocks.org. - # e.g. p: [p.jsregexp] - extraLuaPackages ? p: [], - extraPython3Packages ? p: [], # Additional python 3 packages - withPython3 ? false, # Build Neovim with Python 3 support? - withRuby ? false, # Build Neovim with Ruby support? - withNodeJs ? false, # Build Neovim with NodeJS support? - withSqlite ? true, # Add sqlite? This is a dependency for some plugins - # You probably don't want to create vi or vim aliases - # if the appName is something different than "nvim" - viAlias ? appName == "nvim", # Add a "vi" binary to the build output as an alias? - vimAlias ? appName == "nvim", # Add a "vim" binary to the build output as an alias? - wrapRc ? true, - }: let - # This is the structure of a plugin definition. - # Each plugin in the `plugins` argument list can also be defined as this attrset - defaultPlugin = { - plugin = null; # e.g. nvim-lspconfig - config = null; # plugin config - # If `optional` is set to `false`, the plugin is installed in the 'start' packpath - # set to `true`, it is installed in the 'opt' packpath, and can be lazy loaded with - # ':packadd! {plugin-name} - optional = false; - runtime = {}; - }; +{ + # NVIM_APPNAME - Defaults to 'nvim' if not set. + # If set to something else, this will also rename the binary. + appName ? "nvim", + # The Neovim package to wrap + neovim-unwrapped ? pkgs-wrapNeovim.neovim-unwrapped, + plugins ? [ ], # List of plugins + # List of dev plugins (will be bootstrapped) - useful for plugin developers + # { name = ; url = ; } + devPlugins ? [ ], + # Regexes for config files to ignore, relative to the nvim directory. + # e.g. [ "^plugin/neogit.lua" "^ftplugin/.*.lua" ] + ignoreConfigRegexes ? [ ], + extraPackages ? [ ], # Extra runtime dependencies (e.g. ripgrep, ...) + # The below arguments can typically be left as their defaults + # Additional lua packages (not plugins), e.g. from luarocks.org. + # e.g. p: [p.jsregexp] + extraLuaPackages ? p: [ ], + extraPython3Packages ? p: [ ], # Additional python 3 packages + withPython3 ? false, # Build Neovim with Python 3 support? + withRuby ? false, # Build Neovim with Ruby support? + withNodeJs ? false, # Build Neovim with NodeJS support? + withSqlite ? true, # Add sqlite? This is a dependency for some plugins + # You probably don't want to create vi or vim aliases + # if the appName is something different than "nvim" + viAlias ? appName == "nvim", # Add a "vi" binary to the build output as an alias? + vimAlias ? appName == "nvim", # Add a "vim" binary to the build output as an alias? + wrapRc ? true, +}: +let + # This is the structure of a plugin definition. + # Each plugin in the `plugins` argument list can also be defined as this attrset + defaultPlugin = { + plugin = null; # e.g. nvim-lspconfig + config = null; # plugin config + # If `optional` is set to `false`, the plugin is installed in the 'start' packpath + # set to `true`, it is installed in the 'opt' packpath, and can be lazy loaded with + # ':packadd! {plugin-name} + optional = false; + runtime = { }; + }; - externalPackages = extraPackages ++ (optionals withSqlite [pkgs.sqlite]); + externalPackages = extraPackages ++ (optionals withSqlite [ pkgs.sqlite ]); - # Map all plugins to an attrset { plugin = ; config = ; optional = ; ... } - normalizedPlugins = map (x: - defaultPlugin - // ( - if x ? plugin - then x - else {plugin = x;} - )) - plugins; + # Map all plugins to an attrset { plugin = ; config = ; optional = ; ... } + normalizedPlugins = map (x: defaultPlugin // (if x ? plugin then x else { plugin = x; })) plugins; - # This nixpkgs util function creates an attrset - # that pkgs.wrapNeovimUnstable uses to configure the Neovim build. - neovimConfig = pkgs-wrapNeovim.neovimUtils.makeNeovimConfig { - inherit - extraPython3Packages - withPython3 - withRuby - withNodeJs - viAlias - vimAlias - ; - plugins = normalizedPlugins; - }; + # This nixpkgs util function creates an attrset + # that pkgs.wrapNeovimUnstable uses to configure the Neovim build. + neovimConfig = pkgs-wrapNeovim.neovimUtils.makeNeovimConfig { + inherit + extraPython3Packages + withPython3 + withRuby + withNodeJs + viAlias + vimAlias + ; + plugins = normalizedPlugins; + }; - packDir = pkgs.neovimUtils.packDir { - myNeovimPackages = pkgs.neovimUtils.normalizedPluginsToVimPackage normalizedPlugins; - }; + packDir = pkgs.neovimUtils.packDir { + myNeovimPackages = pkgs.neovimUtils.normalizedPluginsToVimPackage normalizedPlugins; + }; - # This uses the ignoreConfigRegexes list to filter - # the nvim directory - nvimRtpSrc = let + # This uses the ignoreConfigRegexes list to filter + # the nvim directory + nvimRtpSrc = + let src = ../nvim; in - lib.cleanSourceWith { - inherit src; - name = "nvim-rtp-src"; - filter = path: tyoe: let + lib.cleanSourceWith { + inherit src; + name = "nvim-rtp-src"; + filter = + path: tyoe: + let srcPrefix = toString src + "/"; relPath = lib.removePrefix srcPrefix (toString path); in - lib.all (regex: builtins.match regex relPath == null) ignoreConfigRegexes; - }; - - # Split runtimepath into 3 directories: - # - lua, to be prepended to the rtp at the beginning of init.lua - # - nvim, containing plugin, ftplugin, ... subdirectories - # - after, to be sourced last in the startup initialization - # See also: https://neovim.io/doc/user/starting.html - nvimRtp = stdenv.mkDerivation { - name = "nvim-rtp"; - src = nvimRtpSrc; - - buildPhase = '' - mkdir -p $out/ - ''; - - installPhase = '' - cp -r . $out/ - ''; + lib.all (regex: builtins.match regex relPath == null) ignoreConfigRegexes; }; - # The final init.lua content that we pass to the Neovim wrapper. - # It wraps the user init.lua, prepends the lua lib directory to the RTP - # and prepends the nvim and after directory to the RTP - initLua = - '' - LAZY_OPTS = { - performance = { - reset_packpath = false, - rtp = { - reset = false, - disabled_plugins = { - "netrwPlugin", - "tutor", - }, - }, - }, - dev = { - path = "${packDir}/pack/myNeovimPackages/start", - patterns = {""}, - }, - checker = { - enabled = false, - }, - install = { missing = false, }, - spec = {{ import = "plugins" }}, - } - vim.opt.rtp:prepend('${nvimRtp}') - '' - + (builtins.readFile ../nvim/init.lua); + # Split runtimepath into 3 directories: + # - lua, to be prepended to the rtp at the beginning of init.lua + # - nvim, containing plugin, ftplugin, ... subdirectories + # - after, to be sourced last in the startup initialization + # See also: https://neovim.io/doc/user/starting.html + nvimRtp = stdenv.mkDerivation { + name = "nvim-rtp"; + src = nvimRtpSrc; - # Add arguments to the Neovim wrapper script - extraMakeWrapperArgs = builtins.concatStringsSep " " ( - # Set the NVIM_APPNAME environment variable - (optional ( - appName != "nvim" && appName != null && appName != "" - ) ''--set NVIM_APPNAME "${appName}"'') - # Add external packages to the PATH - ++ (optional (externalPackages != []) ''--prefix PATH : "${makeBinPath externalPackages}"'') - # Set the LIBSQLITE_CLIB_PATH if sqlite is enabled - ++ (optional withSqlite ''--set LIBSQLITE_CLIB_PATH "${pkgs.sqlite.out}/lib/libsqlite3.so"'') - # Set the LIBSQLITE environment variable if sqlite is enabled - ++ (optional withSqlite ''--set LIBSQLITE "${pkgs.sqlite.out}/lib/libsqlite3.so"'') - ); + buildPhase = '' + mkdir -p $out/ + ''; - luaPackages = neovim-unwrapped.lua.pkgs; - resolvedExtraLuaPackages = extraLuaPackages luaPackages; + installPhase = '' + cp -r . $out/ + ''; + }; - # Native Lua libraries - extraMakeWrapperLuaCArgs = - optionalString (resolvedExtraLuaPackages != []) + # The final init.lua content that we pass to the Neovim wrapper. + # It wraps the user init.lua, prepends the lua lib directory to the RTP + # and prepends the nvim and after directory to the RTP + initLua = '' + LAZY_OPTS = { + performance = { + reset_packpath = false, + rtp = { + reset = false, + disabled_plugins = { + "netrwPlugin", + "tutor", + }, + }, + }, + dev = { + path = "${packDir}/pack/myNeovimPackages/start", + patterns = {""}, + }, + checker = { + enabled = false, + }, + install = { missing = false, }, + spec = {{ import = "plugins" }}, + } + vim.opt.rtp:prepend('${nvimRtp}') + '' + + (builtins.readFile ../nvim/init.lua); + + # Add arguments to the Neovim wrapper script + extraMakeWrapperArgs = builtins.concatStringsSep " " ( + # Set the NVIM_APPNAME environment variable + (optional ( + appName != "nvim" && appName != null && appName != "" + ) ''--set NVIM_APPNAME "${appName}"'') + # Add external packages to the PATH + ++ (optional (externalPackages != [ ]) ''--prefix PATH : "${makeBinPath externalPackages}"'') + # Set the LIBSQLITE_CLIB_PATH if sqlite is enabled + ++ (optional withSqlite ''--set LIBSQLITE_CLIB_PATH "${pkgs.sqlite.out}/lib/libsqlite3.so"'') + # Set the LIBSQLITE environment variable if sqlite is enabled + ++ (optional withSqlite ''--set LIBSQLITE "${pkgs.sqlite.out}/lib/libsqlite3.so"'') + ); + + luaPackages = neovim-unwrapped.lua.pkgs; + resolvedExtraLuaPackages = extraLuaPackages luaPackages; + + # Native Lua libraries + extraMakeWrapperLuaCArgs = + optionalString (resolvedExtraLuaPackages != [ ]) ''--suffix LUA_CPATH ";" "${ - concatMapStringsSep ";" luaPackages.getLuaCPath resolvedExtraLuaPackages - }"''; + concatMapStringsSep ";" luaPackages.getLuaCPath resolvedExtraLuaPackages + }"''; - # Lua libraries - extraMakeWrapperLuaArgs = - optionalString (resolvedExtraLuaPackages != []) + # Lua libraries + extraMakeWrapperLuaArgs = + optionalString (resolvedExtraLuaPackages != [ ]) ''--suffix LUA_PATH ";" "${ - concatMapStringsSep ";" luaPackages.getLuaPath resolvedExtraLuaPackages - }"''; + concatMapStringsSep ";" luaPackages.getLuaPath resolvedExtraLuaPackages + }"''; - # wrapNeovimUnstable is the nixpkgs utility function for building a Neovim derivation. - neovim-wrapped = pkgs-wrapNeovim.wrapNeovimUnstable neovim-unwrapped ( - neovimConfig - // { - luaRcContent = initLua; - wrapperArgs = - escapeShellArgs neovimConfig.wrapperArgs - + " " - + extraMakeWrapperArgs - + " " - + extraMakeWrapperLuaCArgs - + " " - + extraMakeWrapperLuaArgs; - wrapRc = wrapRc; - } - ); + # wrapNeovimUnstable is the nixpkgs utility function for building a Neovim derivation. + neovim-wrapped = pkgs-wrapNeovim.wrapNeovimUnstable neovim-unwrapped ( + neovimConfig + // { + luaRcContent = initLua; + wrapperArgs = + escapeShellArgs neovimConfig.wrapperArgs + + " " + + extraMakeWrapperArgs + + " " + + extraMakeWrapperLuaCArgs + + " " + + extraMakeWrapperLuaArgs; + wrapRc = wrapRc; + } + ); - isCustomAppName = appName != null && appName != "nvim"; - in - neovim-wrapped.overrideAttrs (oa: { - buildPhase = - oa.buildPhase - # If a custom NVIM_APPNAME has been set, rename the `nvim` binary - + lib.optionalString isCustomAppName '' - mv $out/bin/nvim $out/bin/${lib.escapeShellArg appName} - ''; - }) + isCustomAppName = appName != null && appName != "nvim"; +in +neovim-wrapped.overrideAttrs (oa: { + buildPhase = + oa.buildPhase + # If a custom NVIM_APPNAME has been set, rename the `nvim` binary + + lib.optionalString isCustomAppName '' + mv $out/bin/nvim $out/bin/${lib.escapeShellArg appName} + ''; +}) diff --git a/nix/neovim-overlay.nix b/nix/neovim-overlay.nix index 00e3dd1..204e118 100644 --- a/nix/neovim-overlay.nix +++ b/nix/neovim-overlay.nix @@ -3,28 +3,13 @@ final: prev: with final.pkgs.lib; let - pkgs = final; - pkgs-wrapNeovim = prev; + mkNeovim = prev.callPackage ./mkNeovim.nix { pkgs-wrapNeovim = prev; }; - mkNvimPlugin = - src: pname: - pkgs.vimUtils.buildVimPlugin { - inherit pname src; - version = src.lastModifiedDate; - }; - mkNeovim = pkgs.callPackage ./mkNeovim.nix { inherit pkgs-wrapNeovim; }; - - dart-nvim-git = mkNvimPlugin inputs.dart "dart.nvim"; - nvim-treesitter-textobjects-git = mkNvimPlugin inputs.nvim-treesitter-textobjects "nvim-treesitter-textobjects"; - nvim-treesitter-git = pkgs.vimPlugins.nvim-treesitter.overrideAttrs (old: { - src = inputs.nvim-treesitter; - }); - - all-plugins = with pkgs.vimPlugins; [ + plugins = with final.vimPlugins; [ blink-cmp blink-ripgrep-nvim conform-nvim - dart-nvim-git + dart-nvim diffview-nvim eyeliner-nvim friendly-snippets @@ -33,22 +18,21 @@ let nvim-autopairs nvim-lint nvim-lspconfig - nvim-treesitter-git.withAllGrammars + nvim-treesitter.withAllGrammars nvim-treesitter-context - nvim-treesitter-textobjects-git - nvim-treesitter-textsubjects + nvim-treesitter-textobjects quicker-nvim refactoring-nvim render-markdown-nvim snacks-nvim ]; - basePackages = with pkgs; [ + basePackages = with final; [ ripgrep fd ]; # Extra packages that should be included on nixos but don't need to be bundled - extraPackages = with pkgs; [ + extraPackages = with final; [ # linters yamllint jq @@ -69,26 +53,20 @@ let in { nvim-pkg = mkNeovim { - plugins = all-plugins; - appName = "nvim"; + inherit plugins; extraPackages = basePackages ++ extraPackages; - withNodeJs = false; - withSqlite = true; }; nvim-min-pkg = mkNeovim { - plugins = all-plugins; - appName = "nvim"; + inherit plugins; extraPackages = basePackages; - withNodeJs = false; - withSqlite = true; }; # This is meant to be used within a devshell. # Instead of loading the lua Neovim configuration from # the Nix store, it is loaded from $XDG_CONFIG_HOME/nvim-dev nvim-dev = mkNeovim { - plugins = all-plugins; + inherit plugins; extraPackages = basePackages ++ extraPackages; appName = "nvim-dev"; wrapRc = false; @@ -96,6 +74,6 @@ in # This can be symlinked in the devShell's shellHook nvim-luarc-json = final.mk-luarc-json { - plugins = all-plugins; + inherit plugins; }; } diff --git a/nix/plugin-overlay.nix b/nix/plugin-overlay.nix new file mode 100644 index 0000000..9a51a54 --- /dev/null +++ b/nix/plugin-overlay.nix @@ -0,0 +1,29 @@ +{ inputs, ... }: +final: prev: +let + mkNvimPlugin = + src: pname: + prev.vimUtils.buildVimPlugin { + inherit pname src; + version = src.lastModifiedDate; + }; +in +{ + vimPlugins = prev.vimPlugins.extend ( + final': prev': { + dart-nvim = mkNvimPlugin inputs.dart "dart.nvim"; + nvim-treesitter-textobjects = mkNvimPlugin inputs.nvim-treesitter-textobjects "nvim-treesitter-textobjects"; + nvim-treesitter = prev'.nvim-treesitter.overrideAttrs (old: rec { + src = inputs.nvim-treesitter; + name = "${old.pname}-${src.rev}"; + postPatch = ""; + # ensure runtime queries get linked to RTP (:TSInstall does this too) + buildPhase = " + mkdir -p $out/queries + cp -a $src/runtime/queries/* $out/queries + "; + nvimSkipModules = [ "nvim-treesitter._meta.parsers" ]; + }); + } + ); +} diff --git a/nvim/colors/iofq.lua b/nvim/colors/iofq.lua index 0f9db6f..be525d8 100644 --- a/nvim/colors/iofq.lua +++ b/nvim/colors/iofq.lua @@ -468,8 +468,8 @@ hi(0, 'MiniTablineVisible', { bg = '#1d3337', fg = '#cbd9d8' }) hi(0, 'MiniTablineModifiedVisible', { bg = '#587b7b', fg = '#1d3337' }) hi(0, 'MiniTablineTabpagesection', { bg = '#152528', bold = true, fg = '#e6eaea' }) hi(0, 'MiniTablineFill', { link = 'TabLineFill' }) --- hi(0, 'MiniTablineHidden', { bg = '#1d3337', fg = '#587b7b' }) --- hi(0, 'MiniTablineModifiedHidden', { bg = '#587b7b', fg = '#1d3337' }) +hi(0, 'MiniTablineHidden', { bg = '#1d3337', fg = '#587b7b' }) +hi(0, 'MiniTablineModifiedHidden', { bg = '#587b7b', fg = '#1d3337' }) hi(0, 'MiniTestEmphasis', { bold = true }) hi(0, 'MiniTestFail', { bold = true, fg = '#e85c51' }) hi(0, 'MiniTestPass', { bold = true, fg = '#7aa4a1' }) diff --git a/nvim/init.lua b/nvim/init.lua index a4da977..622287b 100644 --- a/nvim/init.lua +++ b/nvim/init.lua @@ -29,5 +29,6 @@ if not LAZY_OPTS then } end vim.cmd('packadd cfilter') +vim.cmd('colorscheme iofq') require('lazy').setup(LAZY_OPTS) require('config') diff --git a/nvim/lua/config/autocmd.lua b/nvim/lua/config/autocmd.lua index 6184e7a..d40ad17 100644 --- a/nvim/lua/config/autocmd.lua +++ b/nvim/lua/config/autocmd.lua @@ -82,24 +82,24 @@ vim.api.nvim_create_autocmd('FileType', { map('[c', function() require('treesitter-context').go_to_context(vim.v.count1) - end, { desc = 'jump to TS context' }) + end, { buffer = bufnr, desc = 'jump to TS context' }) map(']f', function() require('nvim-treesitter-textobjects.move').goto_next_start('@function.outer', 'textobjects') - end, { desc = 'next function def' }) + end, { buffer = bufnr, desc = 'next function def' }) map('[f', function() require('nvim-treesitter-textobjects.move').goto_previous_start('@function.outer', 'textobjects') - end, { desc = 'prev function def' }) + end, { buffer = bufnr, desc = 'prev function def' }) map(']a', function() require('nvim-treesitter-textobjects.move').goto_next_start('@parameter.inner', 'textobjects') - end, { desc = 'next param def' }) + end, { buffer = bufnr, desc = 'next param def' }) map('[a', function() require('nvim-treesitter-textobjects.move').goto_previous_start('@parameter.inner', 'textobjects') - end, { desc = 'prev param def' }) + end, { buffer = bufnr, desc = 'prev param def' }) map('a]', function() require('nvim-treesitter-textobjects.swap').swap_next('@parameter.inner') - end, { desc = 'swap next arg' }) + end, { buffer = bufnr, desc = 'swap next arg' }) map('a[', function() require('nvim-treesitter-textobjects.swap').swap_previous('@parameter.inner') - end, { desc = 'swap prev arg' }) + end, { buffer = bufnr, desc = 'swap prev arg' }) end, }) diff --git a/nvim/lua/config/init.lua b/nvim/lua/config/init.lua index 2e6a1fd..f9ba85f 100644 --- a/nvim/lua/config/init.lua +++ b/nvim/lua/config/init.lua @@ -19,7 +19,6 @@ vim.opt.tabstop = 2 -- 2 space tabs are based vim.opt.updatetime = 250 -- decrease update time vim.opt.virtualedit = 'onemore' vim.opt.winborder = 'rounded' -vim.cmd('colorscheme iofq') -- Configure Neovim diagnostic messages vim.diagnostic.config { @@ -32,5 +31,7 @@ vim.diagnostic.config { source = 'if_many', }, } -require('config.keymaps') -require('config.autocmd') +vim.schedule(function() + require('config.autocmd') + require('config.keymaps') +end) diff --git a/nvim/lua/plugins/lsp.lua b/nvim/lua/plugins/lsp.lua index 4301885..6015930 100644 --- a/nvim/lua/plugins/lsp.lua +++ b/nvim/lua/plugins/lsp.lua @@ -8,6 +8,7 @@ return { 'phpactor', 'gopls', 'lua_ls', + 'basedpyright', } vim.api.nvim_create_autocmd('LspAttach', { diff --git a/nvim/lua/plugins/misc.lua b/nvim/lua/plugins/misc.lua index dda4e34..7dacf20 100644 --- a/nvim/lua/plugins/misc.lua +++ b/nvim/lua/plugins/misc.lua @@ -1,7 +1,8 @@ return { { 'iofq/dart.nvim', - event = 'VeryLazy', + lazy = false, + priority = 1001, config = true, }, { @@ -13,15 +14,12 @@ return { 'nvim-treesitter/nvim-treesitter', event = 'VeryLazy', branch = 'main', - main = 'nvim-treesitter.configs', - config = true, dependencies = { { 'nvim-treesitter/nvim-treesitter-textobjects', branch = 'main', config = true, }, - 'RRethy/nvim-treesitter-textsubjects', { 'nvim-treesitter/nvim-treesitter-context', opts = { @@ -49,6 +47,7 @@ return { 'sindrets/diffview.nvim', event = 'VeryLazy', opts = { + use_icons = false, enhanced_diff_hl = true, default_args = { DiffviewOpen = { '--imply-local' }, @@ -105,12 +104,16 @@ return { { 'stevearc/quicker.nvim', event = 'VeryLazy', - config = true, + opts = { + follow = { + enabled = true, + }, + }, keys = { { 'qf', function() - require('quicker').toggle() + require('quicker').toggle { max_height = 20 } end, desc = 'Toggle qflist', },