From d998429cb8364d50f62fadb0c686a8c0bc651b96 Mon Sep 17 00:00:00 2001 From: iofq Date: Sun, 6 Jul 2025 21:11:29 -0500 Subject: [PATCH] snacks rice + new colorscheme --- nix/mkNeovim.nix | 340 ++++++------- nix/neovim-overlay.nix | 20 +- nvim/colors/iofq.lua | 704 +++++++++++++++++++++++++++ nvim/lsp/gopls.lua | 1 + nvim/lsp/lua_ls.lua | 8 +- nvim/lua/config/init.lua | 7 +- nvim/lua/plugins/lib/minidiff_jj.lua | 52 +- nvim/lua/plugins/lib/session_jj.lua | 60 ++- nvim/lua/plugins/lib/snacks.lua | 26 + nvim/lua/plugins/lib/snacks_jj.lua | 1 + nvim/lua/plugins/lsp.lua | 54 +- nvim/lua/plugins/mini.lua | 34 +- nvim/lua/plugins/misc.lua | 34 +- nvim/lua/plugins/snacks.lua | 146 ++---- nvim/lua/plugins/treesitter.lua | 8 +- 15 files changed, 1068 insertions(+), 427 deletions(-) create mode 100644 nvim/colors/iofq.lua create mode 100644 nvim/lua/plugins/lib/snacks.lua diff --git a/nix/mkNeovim.nix b/nix/mkNeovim.nix index a7cc6f0..956f2c3 100644 --- a/nix/mkNeovim.nix +++ b/nix/mkNeovim.nix @@ -7,195 +7,195 @@ 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 ? 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 = {}; + }; - 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; + 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/ + ''; }; - # 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/lua - mkdir -p $out/ftplugin - ''; - - installPhase = '' - cp -r lua $out/ - rm -r lua - cp -r ftplugin $out/ - rm -r ftplugin - ''; - }; - - # 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 = true, - rtp = { - disabled_plugins = { - "netrwPlugin", - "tutor", + # 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); + 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"'') - ); + # 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; + luaPackages = neovim-unwrapped.lua.pkgs; + resolvedExtraLuaPackages = extraLuaPackages luaPackages; - # Native Lua libraries - extraMakeWrapperLuaCArgs = - optionalString (resolvedExtraLuaPackages != [ ]) + # 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 d3e6df7..f95bed6 100644 --- a/nix/neovim-overlay.nix +++ b/nix/neovim-overlay.nix @@ -1,15 +1,18 @@ # This overlay, when applied to nixpkgs, adds the final neovim derivation to nixpkgs. -{inputs}: final: prev: -with final.pkgs.lib; let +{ inputs }: +final: prev: +with final.pkgs.lib; +let pkgs = final; pkgs-wrapNeovim = prev; - mkNvimPlugin = src: pname: + mkNvimPlugin = + src: pname: pkgs.vimUtils.buildVimPlugin { inherit pname src; version = src.lastModifiedDate; }; - mkNeovim = pkgs.callPackage ./mkNeovim.nix {inherit pkgs-wrapNeovim;}; + mkNeovim = pkgs.callPackage ./mkNeovim.nix { inherit pkgs-wrapNeovim; }; all-plugins = with pkgs.vimPlugins; [ blink-cmp @@ -20,11 +23,11 @@ with final.pkgs.lib; let friendly-snippets lazy-nvim mini-nvim - nightfox-nvim nvim-lint nvim-lspconfig nvim-treesitter-context nvim-treesitter-textobjects + nvim-treesitter-textsubjects nvim-treesitter.withAllGrammars quicker-nvim refactoring-nvim @@ -35,6 +38,7 @@ with final.pkgs.lib; let basePackages = with pkgs; [ ripgrep + fd ]; # Extra packages that should be included on nixos but don't need to be bundled extraPackages = with pkgs; [ @@ -54,14 +58,14 @@ with final.pkgs.lib; let #other jujutsu - fd ]; -in { +in +{ nvim-pkg = mkNeovim { plugins = all-plugins; appName = "nvim"; extraPackages = basePackages ++ extraPackages; - withNodeJs = true; + withNodeJs = false; }; nvim-min-pkg = mkNeovim { diff --git a/nvim/colors/iofq.lua b/nvim/colors/iofq.lua new file mode 100644 index 0000000..5d32f8f --- /dev/null +++ b/nvim/colors/iofq.lua @@ -0,0 +1,704 @@ +-- Made with 'mini.colors' module of https://github.com/echasnovski/mini.nvim + +if vim.g.colors_name ~= nil then + vim.cmd('highlight clear') +end +vim.g.colors_name = 'iofq' + +-- Highlight groups +local hi = vim.api.nvim_set_hl + +hi(0, '@attribute', { link = 'Constant' }) +hi(0, '@character.special', { link = 'SpecialChar' }) +hi(0, '@comment.error', { bg = '#e85c51', fg = '#152528' }) +hi(0, '@comment.note', { bg = '#5a93aa', fg = '#152528' }) +hi(0, '@comment.todo', { bg = '#7aa4a1', fg = '#152528' }) +hi(0, '@comment.warning', { bg = '#fda47f', fg = '#152528' }) +hi(0, '@conditional', { link = 'Conditional' }) +hi(0, '@constant.builtin', { fg = '#ff9664' }) +hi(0, '@constant.macro', { link = 'Macro' }) +hi(0, '@constructor', { fg = '#a1cdd8' }) +hi(0, '@constructor.lua', { fg = '#cbd9d8' }) +hi(0, '@diff.delta', { link = 'diffChanged' }) +hi(0, '@diff.minus', { link = 'diffRemoved' }) +hi(0, '@diff.plus', { link = 'diffAdded' }) +hi(0, '@exception', { link = 'Exception' }) +hi(0, '@field', { fg = '#5a93aa' }) +hi(0, '@field.rust', { fg = '#cbd9d8' }) +hi(0, '@float', { link = 'Float' }) +hi(0, '@function.builtin', { fg = '#e85c51' }) +hi(0, '@function.macro', { fg = '#e85c51' }) +hi(0, '@include', { link = 'Include' }) +hi(0, '@keyword.conditional', { link = 'Conditional' }) +hi(0, '@keyword.conditional.ternary', { link = 'Conditional' }) +hi(0, '@keyword.exception', { link = 'Exception' }) +hi(0, '@keyword.function', { fg = '#ad5c7c' }) +hi(0, '@keyword.import', { link = 'Include' }) +hi(0, '@keyword.operator', { fg = '#cbd9d8' }) +hi(0, '@keyword.repeat', { link = 'Repeat' }) +hi(0, '@keyword.return', { fg = '#e85c51' }) +hi(0, '@keyword.storage', { link = 'StorageClass' }) +hi(0, '@label.json', { fg = '#73a3b7' }) +hi(0, '@lsp.type.boolean', { link = '@boolean' }) +hi(0, '@lsp.type.builtinType', { link = '@type.builtin' }) +hi(0, '@lsp.type.comment', { link = '@comment' }) +hi(0, '@lsp.type.enum', { link = '@type' }) +hi(0, '@lsp.type.enumMember', { link = '@constant' }) +hi(0, '@lsp.type.escapeSequence', { link = '@string.escape' }) +hi(0, '@lsp.type.formatSpecifier', { link = '@punctuation.special' }) +hi(0, '@lsp.type.interface', { fg = '#eb746b' }) +hi(0, '@lsp.type.keyword', { link = '@keyword' }) +hi(0, '@lsp.type.namespace', { link = '@module' }) +hi(0, '@lsp.type.number', { link = '@number' }) +hi(0, '@lsp.type.operator', { link = '@operator' }) +hi(0, '@lsp.type.parameter', { link = '@parameter' }) +hi(0, '@lsp.type.property', { link = '@property' }) +hi(0, '@lsp.type.selfKeyword', { link = '@variable.builtin' }) +hi(0, '@lsp.type.typeAlias', { link = '@type.definition' }) +hi(0, '@lsp.type.unresolvedReference', { link = '@error' }) +hi(0, '@lsp.type.variable', {}) +hi(0, '@lsp.typemod.class.defaultLibrary', { link = '@type.builtin' }) +hi(0, '@lsp.typemod.enum.defaultLibrary', { link = '@type.builtin' }) +hi(0, '@lsp.typemod.enumMember.defaultLibrary', { link = '@constant.builtin' }) +hi(0, '@lsp.typemod.function.defaultLibrary', { link = '@function.builtin' }) +hi(0, '@lsp.typemod.keyword.async', { link = '@keyword.coroutine' }) +hi(0, '@lsp.typemod.macro.defaultLibrary', { link = '@function.builtin' }) +hi(0, '@lsp.typemod.method.defaultLibrary', { link = '@function.builtin' }) +hi(0, '@lsp.typemod.operator.injected', { link = '@operator' }) +hi(0, '@lsp.typemod.string.injected', { link = '@string' }) +hi(0, '@lsp.typemod.type.defaultLibrary', { link = '@type.builtin' }) +hi(0, '@lsp.typemod.variable.defaultLibrary', { link = '@variable.builtin' }) +hi(0, '@lsp.typemod.variable.injected', { link = '@variable' }) +hi(0, '@markup', { fg = '#e6eaea' }) +hi(0, '@markup.heading', { link = 'Title' }) +hi(0, '@markup.heading.1.delimiter.vimdoc', { nocombine = true, sp = '#e6eaea', underdouble = true }) +hi(0, '@markup.heading.2.delimiter.vimdoc', { nocombine = true, sp = '#e6eaea', underline = true }) +hi(0, '@markup.italic', { link = 'Italic' }) +hi(0, '@markup.link', { bold = true, fg = '#ad5c7c' }) +hi(0, '@markup.link.label', { link = 'Special' }) +hi(0, '@markup.link.url', { fg = '#ff9664', italic = true, underline = true }) +hi(0, '@markup.list', { fg = '#afd4de' }) +hi(0, '@markup.list.checked', { fg = '#7aa4a1' }) +hi(0, '@markup.list.unchecked', { fg = '#fda47f' }) +hi(0, '@markup.math', { fg = '#73a3b7' }) +hi(0, '@markup.quote', { fg = '#cbd9d8' }) +hi(0, '@markup.raw', { fg = '#a1cdd8', italic = true }) +hi(0, '@markup.raw.block', { fg = '#cb7985' }) +hi(0, '@markup.strikethrough', { fg = '#e6eaea', strikethrough = true }) +hi(0, '@markup.strong', { bold = true, fg = '#c54e45' }) +hi(0, '@markup.underline', { link = 'Underline' }) +hi(0, '@module', { fg = '#afd4de' }) +hi(0, '@namespace', { fg = '#afd4de' }) +hi(0, '@number.float', { link = 'Float' }) +hi(0, '@parameter', { fg = '#afd4de' }) +hi(0, '@property', { fg = '#5a93aa' }) +hi(0, '@punctuation.bracket', { fg = '#cbd9d8' }) +hi(0, '@punctuation.delimiter', { fg = '#cbd9d8' }) +hi(0, '@punctuation.special', { fg = '#afd4de' }) +hi(0, '@repeat', { link = 'Repeat' }) +hi(0, '@storageclass', { link = 'StorageClass' }) +hi(0, '@string.escape', { bold = true, fg = '#fdb292' }) +hi(0, '@string.regex', { fg = '#fdb292' }) +hi(0, '@string.regexp', { fg = '#fdb292' }) +hi(0, '@string.special', { link = 'Special' }) +hi(0, '@string.special.url', { fg = '#ff9664', italic = true, underline = true }) +hi(0, '@tag', { fg = '#ad5c7c' }) +hi(0, '@tag.attribute', { fg = '#73a3b7', italic = true }) +hi(0, '@tag.delimiter', { fg = '#afd4de' }) +hi(0, '@text', { fg = '#e6eaea' }) +hi(0, '@text.danger', { bg = '#e85c51', fg = '#152528' }) +hi(0, '@text.diff.add', { link = 'diffAdded' }) +hi(0, '@text.diff.delete', { link = 'diffRemoved' }) +hi(0, '@text.emphasis', { link = 'Italic' }) +hi(0, '@text.literal', { fg = '#a1cdd8', italic = true }) +hi(0, '@text.math', { fg = '#73a3b7' }) +hi(0, '@text.note', { bg = '#5a93aa', fg = '#152528' }) +hi(0, '@text.reference', { bold = true, fg = '#ad5c7c' }) +hi(0, '@text.strike', { fg = '#e6eaea', strikethrough = true }) +hi(0, '@text.strong', { bold = true, fg = '#c54e45' }) +hi(0, '@text.title', { link = 'Title' }) +hi(0, '@text.todo', { bg = '#7aa4a1', fg = '#152528' }) +hi(0, '@text.todo.checked', { fg = '#7aa4a1' }) +hi(0, '@text.todo.unchecked', { fg = '#fda47f' }) +hi(0, '@text.underline', { link = 'Underline' }) +hi(0, '@text.warning', { bg = '#fda47f', fg = '#152528' }) +hi(0, '@type.builtin', { fg = '#afd4de' }) +hi(0, '@variable', { fg = '#ebebeb' }) +hi(0, '@variable.builtin', { fg = '#e85c51' }) +hi(0, '@variable.member', { fg = '#5a93aa' }) +hi(0, '@variable.parameter', { fg = '#afd4de' }) +hi(0, 'AerialGuide', { fg = '#2d4f56' }) +hi(0, 'AerialLine', { link = 'Search' }) +hi(0, 'AlphaButtons', { fg = '#a1cdd8' }) +hi(0, 'AlphaFooter', { fg = '#5a93aa' }) +hi(0, 'AlphaHeader', { fg = '#73a3b7' }) +hi(0, 'AlphaHeaderLabel', { fg = '#ff8349' }) +hi(0, 'AlphaShortcut', { fg = '#ff8349' }) +hi(0, 'BlinkCmpCursorLineDocumentationHack', { bg = '#254147' }) +hi(0, 'BlinkCmpCursorLineMenuHack', { bg = '#425e5e' }) +hi(0, 'BlinkCmpDoc', { bg = '#0f1c1e', fg = '#e6eaea' }) +hi(0, 'BlinkCmpDocBorder', { bg = '#0f1c1e', fg = '#293e40' }) +hi(0, 'BlinkCmpGhostText', { link = 'String' }) +hi(0, 'BlinkCmpKindClass', { link = 'Type' }) +hi(0, 'BlinkCmpKindConstant', { link = '@constant' }) +hi(0, 'BlinkCmpKindConstructor', { link = 'Function' }) +hi(0, 'BlinkCmpKindDefault', { fg = '#cbd9d8' }) +hi(0, 'BlinkCmpKindEnum', { link = 'Constant' }) +hi(0, 'BlinkCmpKindEnumMember', { link = '@field' }) +hi(0, 'BlinkCmpKindEvent', { link = 'Constant' }) +hi(0, 'BlinkCmpKindField', { link = '@field' }) +hi(0, 'BlinkCmpKindFunction', { link = 'Function' }) +hi(0, 'BlinkCmpKindInterface', { link = 'Constant' }) +hi(0, 'BlinkCmpKindKeyword', { link = 'Identifier' }) +hi(0, 'BlinkCmpKindMethod', { link = 'Function' }) +hi(0, 'BlinkCmpKindModule', { link = '@namespace' }) +hi(0, 'BlinkCmpKindOperator', { link = 'Operator' }) +hi(0, 'BlinkCmpKindProperty', { link = '@property' }) +hi(0, 'BlinkCmpKindReference', { link = 'Keyword' }) +hi(0, 'BlinkCmpKindSnippet', { fg = '#cbd9d8' }) +hi(0, 'BlinkCmpKindStruct', { link = 'Type' }) +hi(0, 'BlinkCmpKindTypeParameter', { link = '@field' }) +hi(0, 'BlinkCmpKindUnit', { link = 'Constant' }) +hi(0, 'BlinkCmpKindValue', { link = 'Keyword' }) +hi(0, 'BlinkCmpKindVariable', { link = '@variable' }) +hi(0, 'BlinkCmpLabel', { fg = '#e6eaea' }) +hi(0, 'BlinkCmpLabelDeprecated', { fg = '#587b7b', strikethrough = true }) +hi(0, 'BlinkCmpLabelDetail', { link = 'Comment' }) +hi(0, 'BlinkCmpLabelMatch', { fg = '#73a3b7' }) +hi(0, 'Bold', { bold = true }) +hi(0, 'Boolean', { link = 'Number' }) +hi(0, 'BufferCurrent', { bg = '#587b7b', fg = '#e6eaea' }) +hi(0, 'BufferCurrentIndex', { bg = '#587b7b', fg = '#5a93aa' }) +hi(0, 'BufferCurrentMod', { bg = '#587b7b', fg = '#fda47f' }) +hi(0, 'BufferCurrentSign', { bg = '#587b7b', fg = '#5a93aa' }) +hi(0, 'BufferCurrentTarget', { bg = '#587b7b', fg = '#e85c51' }) +hi(0, 'BufferInactive', { bg = '#0f1c1e', fg = '#6d7f8b' }) +hi(0, 'BufferInactiveIndex', { bg = '#0f1c1e', fg = '#6d7f8b' }) +hi(0, 'BufferInactiveMod', { bg = '#0f1c1e', fg = '#383835' }) +hi(0, 'BufferInactiveSign', { bg = '#0f1c1e', fg = '#254147' }) +hi(0, 'BufferInactiveTarget', { bg = '#0f1c1e', fg = '#e85c51' }) +hi(0, 'BufferTabpage', { bg = '#0f1c1e', fg = '#254147' }) +hi(0, 'BufferTabpages', { bg = '#0f1c1e' }) +hi(0, 'BufferVisible', { bg = '#0f1c1e', fg = '#e6eaea' }) +hi(0, 'BufferVisibleIndex', { bg = '#0f1c1e', fg = '#5a93aa' }) +hi(0, 'BufferVisibleMod', { bg = '#0f1c1e', fg = '#fda47f' }) +hi(0, 'BufferVisibleSign', { bg = '#0f1c1e', fg = '#5a93aa' }) +hi(0, 'BufferVisibleTarget', { bg = '#0f1c1e', fg = '#e85c51' }) +hi(0, 'Character', { link = 'String' }) +hi(0, 'CmpDocumentation', { bg = '#0f1c1e', fg = '#e6eaea' }) +hi(0, 'CmpDocumentationBorder', { bg = '#0f1c1e', fg = '#293e40' }) +hi(0, 'CmpItemAbbr', { fg = '#e6eaea' }) +hi(0, 'CmpItemAbbrDeprecated', { fg = '#587b7b', strikethrough = true }) +hi(0, 'CmpItemAbbrMatch', { fg = '#73a3b7' }) +hi(0, 'CmpItemAbbrMatchFuzzy', { fg = '#73a3b7' }) +hi(0, 'CmpItemKindClass', { link = 'Type' }) +hi(0, 'CmpItemKindConstant', { link = '@constant' }) +hi(0, 'CmpItemKindConstructor', { link = 'Function' }) +hi(0, 'CmpItemKindDefault', { fg = '#cbd9d8' }) +hi(0, 'CmpItemKindEnum', { link = 'Constant' }) +hi(0, 'CmpItemKindEnumMember', { link = '@field' }) +hi(0, 'CmpItemKindEvent', { link = 'Constant' }) +hi(0, 'CmpItemKindField', { link = '@field' }) +hi(0, 'CmpItemKindFunction', { link = 'Function' }) +hi(0, 'CmpItemKindInterface', { link = 'Constant' }) +hi(0, 'CmpItemKindKeyword', { link = 'Identifier' }) +hi(0, 'CmpItemKindMethod', { link = 'Function' }) +hi(0, 'CmpItemKindModule', { link = '@namespace' }) +hi(0, 'CmpItemKindOperator', { link = 'Operator' }) +hi(0, 'CmpItemKindProperty', { link = '@property' }) +hi(0, 'CmpItemKindReference', { link = 'Keyword' }) +hi(0, 'CmpItemKindSnippet', { fg = '#cbd9d8' }) +hi(0, 'CmpItemKindStruct', { link = 'Type' }) +hi(0, 'CmpItemKindTypeParameter', { link = '@field' }) +hi(0, 'CmpItemKindUnit', { link = 'Constant' }) +hi(0, 'CmpItemKindValue', { link = 'Keyword' }) +hi(0, 'CmpItemKindVariable', { link = '@variable' }) +hi(0, 'CmpItemMenu', { link = 'Comment' }) +hi(0, 'CocInlayHint', { bg = '#1d3337', fg = '#6d7f8b' }) +hi(0, 'ColorColumn', { bg = '#1d3337' }) +hi(0, 'Comment', { fg = '#6d7f8b' }) +hi(0, 'Conceal', { fg = '#2d4f56' }) +hi(0, 'Conditional', { fg = '#b97490' }) +hi(0, 'Constant', { fg = '#ff9664' }) +hi(0, 'CurSearch', { link = 'IncSearch' }) +hi(0, 'Cursor', { bg = '#e6eaea', fg = '#152528' }) +hi(0, 'CursorColumn', { link = 'CursorLine' }) +hi(0, 'CursorLine', { bg = '#254147' }) +hi(0, 'CursorLineNr', { bold = true, fg = '#fda47f' }) +hi(0, 'DapUIBreakpointsCurrentLine', { bold = true, fg = '#7aa4a1' }) +hi(0, 'DapUIBreakpointsDisabledLine', { fg = '#6d7f8b' }) +hi(0, 'DapUIBreakpointsInfo', { fg = '#5a93aa' }) +hi(0, 'DapUIBreakpointsLine', { link = 'DapUILineNumber' }) +hi(0, 'DapUIBreakpointsPath', { fg = '#afd4de' }) +hi(0, 'DapUIDecoration', { fg = '#587b7b' }) +hi(0, 'DapUIFloatBorder', { link = 'FloatBorder' }) +hi(0, 'DapUIFrameName', { link = 'Normal' }) +hi(0, 'DapUILineNumber', { link = 'Number' }) +hi(0, 'DapUIModifiedValue', { bold = true, fg = '#ebebeb' }) +hi(0, 'DapUIScope', { fg = '#afd4de' }) +hi(0, 'DapUISource', { link = 'Keyword' }) +hi(0, 'DapUIStoppedThread', { fg = '#afd4de' }) +hi(0, 'DapUIThread', { link = 'String' }) +hi(0, 'DapUIType', { link = 'Type' }) +hi(0, 'DapUIValue', { fg = '#ebebeb' }) +hi(0, 'DapUIVariable', { fg = '#ebebeb' }) +hi(0, 'DapUIWatchesEmpty', { fg = '#e85c51' }) +hi(0, 'DapUIWatchesError', { fg = '#e85c51' }) +hi(0, 'DapUIWatchesValue', { fg = '#fda47f' }) +hi(0, 'DashboardCenter', { link = 'String' }) +hi(0, 'DashboardFooter', { fg = '#ff9664', italic = true }) +hi(0, 'DashboardHeader', { link = 'Title' }) +hi(0, 'DashboardShortCut', { link = 'Identifier' }) +hi(0, 'Delimiter', { link = 'Special' }) +hi(0, 'DiagnosticError', { fg = '#e85c51' }) +hi(0, 'DiagnosticHint', { fg = '#7aa4a1' }) +hi(0, 'DiagnosticInfo', { fg = '#5a93aa' }) +hi(0, 'DiagnosticOk', { fg = '#7aa4a1' }) +hi(0, 'DiagnosticUnderlineError', { sp = '#e85c51', undercurl = true }) +hi(0, 'DiagnosticUnderlineHint', { sp = '#7aa4a1', undercurl = true }) +hi(0, 'DiagnosticUnderlineInfo', { sp = '#5a93aa', undercurl = true }) +hi(0, 'DiagnosticUnderlineOk', { sp = '#7aa4a1', undercurl = true }) +hi(0, 'DiagnosticUnderlineWarn', { sp = '#fda47f', undercurl = true }) +hi(0, 'DiagnosticVirtualTextError', { bg = '#352d2e', fg = '#e85c51' }) +hi(0, 'DiagnosticVirtualTextHint', { bg = '#24383a', fg = '#7aa4a1' }) +hi(0, 'DiagnosticVirtualTextInfo', { bg = '#1f353c', fg = '#5a93aa' }) +hi(0, 'DiagnosticVirtualTextOk', { bg = '#24383a', fg = '#7aa4a1' }) +hi(0, 'DiagnosticVirtualTextWarn', { bg = '#383835', fg = '#fda47f' }) +hi(0, 'DiagnosticWarn', { fg = '#fda47f' }) +hi(0, 'DiffAdd', { bg = '#293e40' }) +hi(0, 'DiffChange', { bg = '#31474b' }) +hi(0, 'DiffDelete', { bg = '#4a3332' }) +hi(0, 'DiffText', { bg = '#466066' }) +hi(0, 'DiffviewDiffAddAsDelete', { bg = '#4a3332' }) +hi(0, 'DiffviewDim1', { fg = '#6d7f8b' }) +hi(0, 'DiffviewFilePanelCounter', { bold = true, fg = '#a1cdd8' }) +hi(0, 'DiffviewFilePanelFileName', { fg = '#e6eaea' }) +hi(0, 'DiffviewFilePanelTitle', { bold = true, fg = '#b97490' }) +hi(0, 'DiffviewPrimary', { fg = '#73a3b7' }) +hi(0, 'DiffviewSecondary', { fg = '#7aa4a1' }) +hi(0, 'Directory', { fg = '#73a3b7' }) +hi(0, 'EndOfBuffer', { fg = '#152528' }) +hi(0, 'Error', { fg = '#e85c51' }) +hi(0, 'ErrorMsg', { fg = '#e85c51' }) +hi(0, 'Exception', { link = 'Keyword' }) +hi(0, 'EyelinerDimmed', { fg = '#6d7f8b' }) +hi(0, 'EyelinerPrimary', { underline = true }) +hi(0, 'EyelinerSecondary', { bold = true, underline = true }) +hi(0, 'FernBranchText', { fg = '#5a93aa' }) +hi(0, 'FidgetTask', { link = 'LineNr' }) +hi(0, 'FidgetTitle', { link = 'Title' }) +hi(0, 'FloatBorder', { fg = '#587b7b' }) +hi(0, 'FocusedSymbol', { link = 'Search' }) +hi(0, 'FoldColumn', { fg = '#587b7b' }) +hi(0, 'Folded', { bg = '#1d3337', fg = '#587b7b' }) +hi(0, 'Function', { fg = '#73a3b7' }) +hi(0, 'GitGutterAdd', { fg = '#7aa4a1' }) +hi(0, 'GitGutterChange', { fg = '#fda47f' }) +hi(0, 'GitGutterDelete', { fg = '#e85c51' }) +hi(0, 'GitSignsAdd', { fg = '#7aa4a1' }) +hi(0, 'GitSignsChange', { fg = '#fda47f' }) +hi(0, 'GitSignsDelete', { fg = '#e85c51' }) +hi(0, 'GlyphPalette0', { fg = '#2f3239' }) +hi(0, 'GlyphPalette1', { fg = '#e85c51' }) +hi(0, 'GlyphPalette10', { fg = '#8eb2af' }) +hi(0, 'GlyphPalette11', { fg = '#fdb292' }) +hi(0, 'GlyphPalette12', { fg = '#73a3b7' }) +hi(0, 'GlyphPalette13', { fg = '#b97490' }) +hi(0, 'GlyphPalette14', { fg = '#afd4de' }) +hi(0, 'GlyphPalette15', { fg = '#eeeeee' }) +hi(0, 'GlyphPalette2', { fg = '#7aa4a1' }) +hi(0, 'GlyphPalette3', { fg = '#fda47f' }) +hi(0, 'GlyphPalette4', { fg = '#5a93aa' }) +hi(0, 'GlyphPalette5', { fg = '#ad5c7c' }) +hi(0, 'GlyphPalette6', { fg = '#a1cdd8' }) +hi(0, 'GlyphPalette7', { fg = '#eeeeee' }) +hi(0, 'GlyphPalette8', { fg = '#4e5157' }) +hi(0, 'GlyphPalette9', { fg = '#eb746b' }) +hi(0, 'HopNextKey', { bold = true, fg = '#a1cdd8' }) +hi(0, 'HopNextKey1', { bold = true, fg = '#5a93aa' }) +hi(0, 'HopNextKey2', { fg = '#4d7d90' }) +hi(0, 'HopUnmatched', { fg = '#6d7f8b' }) +hi(0, 'Identifier', { fg = '#a1cdd8' }) +hi(0, 'IncSearch', { bg = '#7aa4a1', fg = '#152528' }) +hi(0, 'IndentBlanklineChar', { fg = '#254147' }) +hi(0, 'IndentBlanklineContextChar', { fg = '#ebebeb' }) +hi(0, 'IndentBlanklineContextStart', { sp = '#ebebeb', underline = true }) +hi(0, 'IndentBlanklineIndent1', { fg = '#cb7985' }) +hi(0, 'IndentBlanklineIndent2', { fg = '#5a93aa' }) +hi(0, 'IndentBlanklineIndent3', { fg = '#ff8349' }) +hi(0, 'IndentBlanklineIndent4', { fg = '#a1cdd8' }) +hi(0, 'IndentBlanklineIndent5', { fg = '#e85c51' }) +hi(0, 'IndentBlanklineIndent6', { fg = '#fda47f' }) +hi(0, 'Italic', { italic = true }) +hi(0, 'Keyword', { fg = '#ad5c7c' }) +hi(0, 'Label', { link = 'Conditional' }) +hi(0, 'LazyButtonActive', { link = 'TabLineSel' }) +hi(0, 'LazyDimmed', { link = 'LineNr' }) +hi(0, 'LazyProp', { link = 'LineNr' }) +hi(0, 'LeapBackdrop', { fg = '#6d7f8b' }) +hi(0, 'LeapLabelPrimary', { bg = '#d38d97', fg = '#152528' }) +hi(0, 'LeapLabelSecondary', { bg = '#afd4de', fg = '#152528' }) +hi(0, 'LeapMatch', { bg = '#d38d97', fg = '#152528' }) +hi(0, 'LightspeedGreyWash', { fg = '#6d7f8b' }) +hi(0, 'LineNr', { fg = '#587b7b' }) +hi(0, 'LspCodeLens', { fg = '#6d7f8b' }) +hi(0, 'LspCodeLensSeparator', { fg = '#587b7b' }) +hi(0, 'LspFloatWinBorder', { fg = '#587b7b' }) +hi(0, 'LspFloatWinNormal', { bg = '#0f1c1e' }) +hi(0, 'LspInlayHint', { bg = '#1d3337', fg = '#6d7f8b' }) +hi(0, 'LspReferenceRead', { bg = '#293e40' }) +hi(0, 'LspReferenceText', { bg = '#293e40' }) +hi(0, 'LspReferenceWrite', { bg = '#293e40' }) +hi(0, 'LspSagaBorderTitle', { link = 'Title' }) +hi(0, 'LspSagaCodeActionBorder', { fg = '#587b7b' }) +hi(0, 'LspSagaCodeActionContent', { link = 'String' }) +hi(0, 'LspSagaCodeActionTitle', { link = 'Title' }) +hi(0, 'LspSagaDefPreviewBorder', { fg = '#587b7b' }) +hi(0, 'LspSagaFinderSelection', { fg = '#293e40' }) +hi(0, 'LspSagaHoverBorder', { fg = '#587b7b' }) +hi(0, 'LspSagaRenameBorder', { fg = '#587b7b' }) +hi(0, 'LspSagaSignatureHelpBorder', { fg = '#e85c51' }) +hi(0, 'LspSignatureActiveParameter', { fg = '#425e5e' }) +hi(0, 'LspTroubleCount', { bg = '#587b7b', fg = '#ad5c7c' }) +hi(0, 'LspTroubleNormal', { bg = '#0f1c1e', fg = '#587b7b' }) +hi(0, 'LspTroubleText', { fg = '#cbd9d8' }) +hi(0, 'MatchParen', { bold = true, fg = '#fda47f' }) +hi(0, 'MiniAnimateCursor', { nocombine = true, reverse = true }) +hi(0, 'MiniAnimateNormalFloat', { link = 'NormalFloat' }) +hi(0, 'MiniClueBorder', { link = 'FloatBorder' }) +hi(0, 'MiniClueDescGroup', { link = 'DiagnosticFloatingWarn' }) +hi(0, 'MiniClueDescSingle', { link = 'NormalFloat' }) +hi(0, 'MiniClueNextKey', { link = 'DiagnosticFloatingHint' }) +hi(0, 'MiniClueNextKeyWithPostkeys', { link = 'DiagnosticFloatingError' }) +hi(0, 'MiniClueSeparator', { link = 'DiagnosticFloatingInfo' }) +hi(0, 'MiniClueTitle', { link = 'FloatTitle' }) +hi(0, 'MiniCompletionActiveParameter', { underline = true }) +hi(0, 'MiniCursorword', { link = 'LspReferenceText' }) +hi(0, 'MiniCursorwordCurrent', { link = 'LspReferenceText' }) +hi(0, 'MiniDepsChangeAdded', { link = 'diffAdded' }) +hi(0, 'MiniDepsChangeRemoved', { link = 'diffRemoved' }) +hi(0, 'MiniDepsHint', { link = 'DiagnosticHint' }) +hi(0, 'MiniDepsInfo', { link = 'DiagnosticInfo' }) +hi(0, 'MiniDepsMsgBreaking', { link = 'DiagnosticWarn' }) +hi(0, 'MiniDepsPlaceholder', { link = 'Comment' }) +hi(0, 'MiniDepsTitle', { link = 'Title' }) +hi(0, 'MiniDepsTitleError', { bg = '#e85c51', fg = '#0f1c1e' }) +hi(0, 'MiniDepsTitleSame', { link = 'DiffText' }) +hi(0, 'MiniDepsTitleUpdate', { bg = '#7aa4a1', fg = '#0f1c1e' }) +hi(0, 'MiniDiffOverAdd', { link = 'DiffAdd' }) +hi(0, 'MiniDiffOverChange', { link = 'DiffText' }) +hi(0, 'MiniDiffOverContext', { link = 'DiffChange' }) +hi(0, 'MiniDiffOverDelete', { link = 'DiffDelete' }) +hi(0, 'MiniDiffSignAdd', { fg = 'green', bold = true }) +hi(0, 'MiniDiffSignChange', { fg = 'green', bold = true }) +hi(0, 'MiniDiffSignDelete', { fg = 'red', bold = true }) +hi(0, 'MiniFilesBorder', { link = 'FloatBorder' }) +hi(0, 'MiniFilesBorderModified', { link = 'DiagnosticFloatingWarn' }) +hi(0, 'MiniFilesCursorLine', { link = 'CursorLine' }) +hi(0, 'MiniFilesDirectory', { link = 'Directory' }) +hi(0, 'MiniFilesFile', { fg = '#e6eaea' }) +hi(0, 'MiniFilesNormal', { link = 'NormalFloat' }) +hi(0, 'MiniFilesTitle', { link = 'FloatTitle' }) +hi(0, 'MiniFilesTitleFocused', { bold = true, fg = '#e6eaea' }) +hi(0, 'MiniHipatternsFixme', { bg = '#e85c51', bold = true, fg = '#0f1c1e' }) +hi(0, 'MiniHipatternsHack', { bg = '#fda47f', bold = true, fg = '#0f1c1e' }) +hi(0, 'MiniHipatternsNote', { bg = '#5a93aa', bold = true, fg = '#0f1c1e' }) +hi(0, 'MiniHipatternsTodo', { bg = '#7aa4a1', bold = true, fg = '#0f1c1e' }) +hi(0, 'MiniIconsAzure', { fg = '#73a3b7' }) +hi(0, 'MiniIconsBlue', { fg = '#5a93aa' }) +hi(0, 'MiniIconsCyan', { fg = '#a1cdd8' }) +hi(0, 'MiniIconsGreen', { fg = '#7aa4a1' }) +hi(0, 'MiniIconsGrey', { fg = '#eaeeee' }) +hi(0, 'MiniIconsOrange', { fg = '#ff8349' }) +hi(0, 'MiniIconsPurple', { fg = '#ad5c7c' }) +hi(0, 'MiniIconsRed', { fg = '#e85c51' }) +hi(0, 'MiniIconsYellow', { fg = '#fda47f' }) +hi(0, 'MiniIndentscopePrefix', { nocombine = true }) +hi(0, 'MiniIndentscopeSymbol', { link = 'Delimiter' }) +hi(0, 'MiniJump', { bg = '#ad5c7c', fg = '#0f1c1e' }) +hi(0, 'MiniJump2dDim', { link = 'Comment' }) +hi(0, 'MiniJump2dSpot', { bold = true, fg = '#a1cdd8' }) +hi(0, 'MiniJump2dSpotAhead', { bg = '#0f1c1e', fg = '#4d7d90', nocombine = true }) +hi(0, 'MiniJump2dSpotUnique', { bold = true, fg = '#fda47f' }) +hi(0, 'MiniMapNormal', { link = 'NormalFloat' }) +hi(0, 'MiniMapSymbolCount', { link = 'Special' }) +hi(0, 'MiniMapSymbolLine', { link = 'Title' }) +hi(0, 'MiniMapSymbolView', { link = 'Delimiter' }) +hi(0, 'MiniNotifyBorder', { link = 'FloatBorder' }) +hi(0, 'MiniNotifyNormal', { link = 'NormalFloat' }) +hi(0, 'MiniNotifyTitle', { link = 'FloatTitle' }) +hi(0, 'MiniOperatorsExchangeFrom', { link = 'IncSearch' }) +hi(0, 'MiniPickBorder', { link = 'FloatBorder' }) +hi(0, 'MiniPickBorderBusy', { link = 'DiagnosticFloatingWarn' }) +hi(0, 'MiniPickBorderText', { link = 'FloatTitle' }) +hi(0, 'MiniPickHeader', { link = 'DiagnosticFloatingHint' }) +hi(0, 'MiniPickIconDirectory', { link = 'Directory' }) +hi(0, 'MiniPickIconFile', { link = 'MiniPickNormal' }) +hi(0, 'MiniPickMatchCurrent', { link = 'CursorLine' }) +hi(0, 'MiniPickMatchMarked', { link = 'Visual' }) +hi(0, 'MiniPickMatchRanges', { link = 'DiagnosticFloatingHint' }) +hi(0, 'MiniPickNormal', { link = 'NormalFloat' }) +hi(0, 'MiniPickPreviewLine', { link = 'CursorLine' }) +hi(0, 'MiniPickPreviewRegion', { link = 'IncSearch' }) +hi(0, 'MiniPickPrompt', { link = 'DiagnosticFloatingInfo' }) +hi(0, 'MiniStarterCurrent', { nocombine = true }) +hi(0, 'MiniStarterFooter', { fg = '#ff9664', italic = true }) +hi(0, 'MiniStarterHeader', { link = 'Title' }) +hi(0, 'MiniStarterInactive', { link = 'Comment' }) +hi(0, 'MiniStarterItem', { link = 'Normal' }) +hi(0, 'MiniStarterItemBullet', { fg = '#587b7b' }) +hi(0, 'MiniStarterItemPrefix', { fg = '#cb7985' }) +hi(0, 'MiniStarterQuery', { fg = '#7aa4a1' }) +hi(0, 'MiniStarterSection', { fg = '#e85c51' }) +hi(0, 'MiniStatuslineDevinfo', { bg = '#1d3337', fg = '#cbd9d8' }) +hi(0, 'MiniStatuslineFileinfo', { bg = '#1d3337', fg = '#cbd9d8' }) +hi(0, 'MiniStatuslineFilename', { link = 'StatusLine' }) +hi(0, 'MiniStatuslineInactive', { link = 'StatusLineNC' }) +hi(0, 'MiniStatuslineModeCommand', { bg = '#fda47f', bold = true, fg = '#0f1c1e' }) +hi(0, 'MiniStatuslineModeInsert', { bg = '#7aa4a1', bold = true, fg = '#0f1c1e' }) +hi(0, 'MiniStatuslineModeNormal', { bg = '#a1cdd8', bold = true, fg = '#0f1c1e' }) +hi(0, 'MiniStatuslineModeOther', { bg = '#5a93aa', bold = true, fg = '#0f1c1e' }) +hi(0, 'MiniStatuslineModeReplace', { bg = '#e85c51', bold = true, fg = '#0f1c1e' }) +hi(0, 'MiniStatuslineModeVisual', { bg = '#ad5c7c', bold = true, fg = '#0f1c1e' }) +hi(0, 'MiniSurround', { link = 'IncSearch' }) +hi(0, 'MiniTablineCurrent', { bg = '#2d4f56', bold = true, fg = '#cbd9d8' }) +hi(0, 'MiniTablineFill', { link = 'TabLineFill' }) +hi(0, 'MiniTablineHidden', { bg = '#1d3337', fg = '#587b7b' }) +hi(0, 'MiniTablineModifiedCurrent', { bg = '#cbd9d8', bold = true, fg = '#2d4f56' }) +hi(0, 'MiniTablineModifiedHidden', { bg = '#587b7b', fg = '#1d3337' }) +hi(0, 'MiniTablineModifiedVisible', { bg = '#cbd9d8', fg = '#1d3337' }) +hi(0, 'MiniTablineTabpagesection', { bg = '#152528', bold = true, fg = '#e6eaea' }) +hi(0, 'MiniTablineVisible', { bg = '#1d3337', fg = '#cbd9d8' }) +hi(0, 'MiniTestEmphasis', { bold = true }) +hi(0, 'MiniTestFail', { bold = true, fg = '#e85c51' }) +hi(0, 'MiniTestPass', { bold = true, fg = '#7aa4a1' }) +hi(0, 'MiniTrailspace', { bg = '#e85c51' }) +hi(0, 'ModeMsg', { bold = true, fg = '#fda47f' }) +hi(0, 'ModesCopy', { bg = '#fda47f' }) +hi(0, 'ModesDelete', { bg = '#e85c51' }) +hi(0, 'ModesInsert', { bg = '#a1cdd8' }) +hi(0, 'ModesVisual', { bg = '#ad5c7c' }) +hi(0, 'MoreMsg', { bold = true, fg = '#5a93aa' }) +hi(0, 'NagicIconsOperator', { link = 'Operator' }) +hi(0, 'NavicIconsBoolean', { link = 'Boolean' }) +hi(0, 'NavicIconsClass', { link = 'Type' }) +hi(0, 'NavicIconsConstant', { link = 'Constant' }) +hi(0, 'NavicIconsConstructor', { link = 'Function' }) +hi(0, 'NavicIconsEnum', { link = 'Constant' }) +hi(0, 'NavicIconsEnumMember', { link = '@field' }) +hi(0, 'NavicIconsEvent', { link = 'Constant' }) +hi(0, 'NavicIconsField', { link = '@field' }) +hi(0, 'NavicIconsFile', { link = 'Directory' }) +hi(0, 'NavicIconsFunction', { link = 'Function' }) +hi(0, 'NavicIconsInterface', { link = 'Constant' }) +hi(0, 'NavicIconsKey', { link = 'Identifier' }) +hi(0, 'NavicIconsMethod', { link = 'Function' }) +hi(0, 'NavicIconsModule', { link = '@namespace' }) +hi(0, 'NavicIconsNamespace', { link = '@namespace' }) +hi(0, 'NavicIconsNull', { link = 'Type' }) +hi(0, 'NavicIconsNumber', { link = 'Number' }) +hi(0, 'NavicIconsObject', { link = '@namespace' }) +hi(0, 'NavicIconsPackage', { link = '@namespace' }) +hi(0, 'NavicIconsProperty', { link = '@property' }) +hi(0, 'NavicIconsString', { link = 'String' }) +hi(0, 'NavicIconsStruct', { link = 'Type' }) +hi(0, 'NavicIconsTypeParameter', { link = '@field' }) +hi(0, 'NavicIconsVariable', { link = '@variable' }) +hi(0, 'NavicSeparator', { fg = '#2d4f56' }) +hi(0, 'NavicText', { fg = '#e6eaea' }) +hi(0, 'NeoTreeDimText', { link = 'Conceal' }) +hi(0, 'NeoTreeDirectoryIcon', { fg = '#5a93aa' }) +hi(0, 'NeoTreeDirectoryName', { fg = '#5a93aa' }) +hi(0, 'NeoTreeDotfile', { fg = '#4d7d90' }) +hi(0, 'NeoTreeFileName', { fg = '#cbd9d8' }) +hi(0, 'NeoTreeFileNameOpened', { fg = '#e6eaea' }) +hi(0, 'NeoTreeGitAdded', { fg = '#7aa4a1' }) +hi(0, 'NeoTreeGitConflict', { fg = '#ff8349', italic = true }) +hi(0, 'NeoTreeGitDeleted', { fg = '#e85c51' }) +hi(0, 'NeoTreeGitIgnored', { fg = '#6d7f8b' }) +hi(0, 'NeoTreeGitModified', { fg = '#fda47f' }) +hi(0, 'NeoTreeGitUntracked', { fg = '#934e69' }) +hi(0, 'NeoTreeIndentMarker', { fg = '#2d4f56' }) +hi(0, 'NeoTreeNormal', { fg = '#e6eaea' }) +hi(0, 'NeoTreeNormalNC', { link = 'NeoTreeNormal' }) +hi(0, 'NeoTreeRootName', { bold = true, fg = '#ff8349' }) +hi(0, 'NeoTreeSymbolicLinkTarget', { fg = '#ad6771' }) +hi(0, 'NeogitBranch', { fg = '#fda47f' }) +hi(0, 'NeogitDiffAdd', { fg = '#7aa4a1' }) +hi(0, 'NeogitDiffAddHighlight', { bg = '#293e40' }) +hi(0, 'NeogitDiffContextHighlight', { bg = '#1d3337' }) +hi(0, 'NeogitDiffDelete', { fg = '#e85c51' }) +hi(0, 'NeogitDiffDeleteHighlight', { bg = '#4a3332' }) +hi(0, 'NeogitHunkHeader', { bg = '#254147', fg = '#5a93aa' }) +hi(0, 'NeogitHunkHeaderHighlight', { bg = '#293e40', fg = '#5a93aa' }) +hi(0, 'NeogitNotificationError', { fg = '#e85c51' }) +hi(0, 'NeogitNotificationInfo', { fg = '#5a93aa' }) +hi(0, 'NeogitNotificationWarning', { fg = '#fda47f' }) +hi(0, 'NeogitRemote', { fg = '#7aa4a1' }) +hi(0, 'NeotestAdapterName', { bold = true, fg = '#cb7985' }) +hi(0, 'NeotestDir', { fg = '#a1cdd8' }) +hi(0, 'NeotestExpandMarker', { link = 'Conceal' }) +hi(0, 'NeotestFailed', { fg = '#e85c51' }) +hi(0, 'NeotestFile', { fg = '#5a93aa' }) +hi(0, 'NeotestFocused', { underline = true }) +hi(0, 'NeotestIndent', { link = 'Conceal' }) +hi(0, 'NeotestMarked', { bold = true, fg = '#e6eaea' }) +hi(0, 'NeotestNamespace', { fg = '#89aeb8' }) +hi(0, 'NeotestPassed', { fg = '#7aa4a1' }) +hi(0, 'NeotestRunning', { fg = '#ff8349' }) +hi(0, 'NeotestSkipped', { fg = '#fda47f' }) +hi(0, 'NeotestTest', { link = 'Normal' }) +hi(0, 'NonText', { fg = '#2d4f56' }) +hi(0, 'Normal', { fg = '#e6eaea' }) +hi(0, 'NormalFloat', { bg = '#0f1c1e', fg = '#e6eaea' }) +hi(0, 'NormalNC', { fg = '#e6eaea' }) +hi(0, 'NotifyBackground', { link = 'NormalFloat' }) +hi(0, 'NotifyDEBUGBorder', { fg = '#486565' }) +hi(0, 'NotifyDEBUGIcon', { link = 'NotifyDEBUGTitle' }) +hi(0, 'NotifyDEBUGTitle', { fg = '#7aa4a1' }) +hi(0, 'NotifyERRORBorder', { fg = '#7e413d' }) +hi(0, 'NotifyERRORIcon', { link = 'NotifyERRORTitle' }) +hi(0, 'NotifyERRORTitle', { fg = '#e85c51' }) +hi(0, 'NotifyINFOBorder', { fg = '#385c69' }) +hi(0, 'NotifyINFOIcon', { link = 'NotifyINFOTitle' }) +hi(0, 'NotifyINFOTitle', { fg = '#5a93aa' }) +hi(0, 'NotifyTRACEBorder', { fg = '#2d4f56' }) +hi(0, 'NotifyTRACEIcon', { link = 'NotifyTRACETitle' }) +hi(0, 'NotifyTRACETitle', { fg = '#6d7f8b' }) +hi(0, 'NotifyWARNBorder', { fg = '#896554' }) +hi(0, 'NotifyWARNIcon', { link = 'NotifyWARNTitle' }) +hi(0, 'NotifyWARNTitle', { fg = '#fda47f' }) +hi(0, 'Number', { fg = '#ff8349' }) +hi(0, 'NvimTreeEmptyFolderName', { fg = '#587b7b' }) +hi(0, 'NvimTreeFolderIcon', { fg = '#5a93aa' }) +hi(0, 'NvimTreeFolderName', { fg = '#5a93aa' }) +hi(0, 'NvimTreeGitDeleted', { fg = '#e85c51' }) +hi(0, 'NvimTreeGitDirty', { fg = '#fda47f' }) +hi(0, 'NvimTreeGitMerge', { fg = '#ff8349' }) +hi(0, 'NvimTreeGitNew', { fg = '#7aa4a1' }) +hi(0, 'NvimTreeGitRenamed', { link = 'NvimTreeGitDeleted' }) +hi(0, 'NvimTreeGitStaged', { link = 'NvimTreeGitStaged' }) +hi(0, 'NvimTreeImageFile', { fg = '#c8c8c8' }) +hi(0, 'NvimTreeIndentMarker', { fg = '#2d4f56' }) +hi(0, 'NvimTreeNormal', { fg = '#e6eaea' }) +hi(0, 'NvimTreeOpenedFile', { fg = '#d38d97' }) +hi(0, 'NvimTreeOpenedFolderName', { fg = '#73a3b7' }) +hi(0, 'NvimTreeRootFolder', { bold = true, fg = '#ff8349' }) +hi(0, 'NvimTreeSpecialFile', { fg = '#a1cdd8' }) +hi(0, 'NvimTreeSymlink', { fg = '#ad6771' }) +hi(0, 'NvimTreeVertSplit', { link = 'VertSplit' }) +hi(0, 'Operator', { fg = '#cbd9d8' }) +hi(0, 'Pmenu', { bg = '#293e40', fg = '#e6eaea' }) +hi(0, 'PmenuSel', { bg = '#425e5e' }) +hi(0, 'PmenuThumb', { bg = '#425e5e' }) +hi(0, 'PounceAccept', { bg = '#ff9664', fg = '#152528' }) +hi(0, 'PounceAcceptBest', { bg = '#afd4de', fg = '#152528' }) +hi(0, 'PounceGap', { bg = '#293e40', fg = '#e6eaea' }) +hi(0, 'PounceMatch', { bg = '#425e5e', fg = '#e6eaea' }) +hi(0, 'PreProc', { fg = '#d38d97' }) +hi(0, 'Question', { link = 'MoreMsg' }) +hi(0, 'QuickFixLine', { link = 'CursorLine' }) +hi(0, 'RainbowDelimiterBlue', { fg = '#5a93aa' }) +hi(0, 'RainbowDelimiterCyan', { fg = '#a1cdd8' }) +hi(0, 'RainbowDelimiterGreen', { fg = '#7aa4a1' }) +hi(0, 'RainbowDelimiterOrange', { fg = '#ff8349' }) +hi(0, 'RainbowDelimiterPurple', { fg = '#ad5c7c' }) +hi(0, 'RainbowDelimiterRed', { fg = '#e85c51' }) +hi(0, 'RainbowDelimiterYellow', { fg = '#fda47f' }) +hi(0, 'Repeat', { link = 'Conditional' }) +hi(0, 'Search', { bg = '#425e5e', fg = '#e6eaea' }) +hi(0, 'SignColumn', { fg = '#587b7b' }) +hi(0, 'SignColumnSB', { link = 'SignColumn' }) +hi(0, 'SignifySignAdd', { fg = '#7aa4a1' }) +hi(0, 'SignifySignChange', { fg = '#fda47f' }) +hi(0, 'SignifySignDelete', { fg = '#e85c51' }) +hi(0, 'SnacksBackdrop', { bg = '#000000' }) +hi(0, 'SnacksImageMath', { fg = '#73a3b7' }) +hi(0, 'SnacksPickerDir', { fg = '#cccccc' }) +hi(0, 'Sneak', { bg = '#ad5c7c', fg = '#0f1c1e' }) +hi(0, 'SneakScope', { bg = '#293e40' }) +hi(0, 'Special', { fg = '#73a3b7' }) +hi(0, 'SpecialKey', { link = 'NonText' }) +hi(0, 'SpellBad', { sp = '#e85c51', undercurl = true }) +hi(0, 'SpellCap', { sp = '#fda47f', undercurl = true }) +hi(0, 'SpellLocal', { sp = '#5a93aa', undercurl = true }) +hi(0, 'SpellRare', { sp = '#5a93aa', undercurl = true }) +hi(0, 'Statement', { fg = '#ad5c7c' }) +hi(0, 'StatusLine', { bg = 'none' }) +hi(0, 'StatusLineNC', { bg = 'none' }) +hi(0, 'String', { fg = '#7aa4a1' }) +hi(0, 'Substitute', { bg = '#e85c51', fg = '#152528' }) +hi(0, 'SymbolOutlineConnector', { link = 'Conceal' }) +hi(0, 'TSRainbowBlue', { fg = '#5a93aa' }) +hi(0, 'TSRainbowCyan', { fg = '#a1cdd8' }) +hi(0, 'TSRainbowGreen', { fg = '#7aa4a1' }) +hi(0, 'TSRainbowOrange', { fg = '#ff8349' }) +hi(0, 'TSRainbowRed', { fg = '#e85c51' }) +hi(0, 'TSRainbowViolet', { fg = '#ad5c7c' }) +hi(0, 'TSRainbowYellow', { fg = '#fda47f' }) +hi(0, 'TabLine', { bg = '#1d3337', fg = '#cbd9d8' }) +hi(0, 'TablineFill', { bg = 'none' }) +hi(0, 'TabLineSel', { bg = '#587b7b', fg = '#152528' }) +hi(0, 'TelescopeBorder', { fg = '#2d4f56' }) +hi(0, 'TelescopeMatching', { link = 'Search' }) +hi(0, 'TelescopeSelection', { link = 'CursorLine' }) +hi(0, 'TelescopeSelectionCaret', { fg = '#7aa4a1' }) +hi(0, 'Title', { bold = true, fg = '#73a3b7' }) +hi(0, 'Todo', { bg = '#5a93aa', fg = '#152528' }) +hi(0, 'Type', { fg = '#fda47f' }) +hi(0, 'Visual', { bg = '#293e40' }) +hi(0, 'WarningMsg', { fg = '#fda47f' }) +hi(0, 'WhichKey', { link = 'Identifier' }) +hi(0, 'WhichKeyDesc', { link = 'Keyword' }) +hi(0, 'WhichKeyFloat', { link = 'NormalFloat' }) +hi(0, 'WhichKeyGroup', { link = 'Function' }) +hi(0, 'WhichKeySeparator', { link = 'Comment' }) +hi(0, 'WhichKeySeperator', { link = 'Comment' }) +hi(0, 'WhichKeyValue', { link = 'Comment' }) +hi(0, 'Whitespace', { fg = '#254147' }) +hi(0, 'WildMenu', { link = 'Pmenu' }) +hi(0, 'WinBar', { bold = true, fg = '#587b7b' }) +hi(0, 'WinBarNC', { bold = true, fg = '#587b7b' }) +hi(0, 'WinSeparator', { fg = '#0f1c1e' }) +hi(0, 'diffAdded', { fg = '#7aa4a1' }) +hi(0, 'diffChanged', { fg = '#fda47f' }) +hi(0, 'diffFile', { fg = '#5a93aa' }) +hi(0, 'diffIndexLine', { fg = '#d38d97' }) +hi(0, 'diffLine', { fg = '#ff9664' }) +hi(0, 'diffNewFile', { fg = '#7aa4a1' }) +hi(0, 'diffOldFile', { fg = '#fda47f' }) +hi(0, 'diffRemoved', { fg = '#e85c51' }) +hi(0, 'illuminatedWordRead', { link = 'LspReferenceText' }) +hi(0, 'illuminatedWordText', { link = 'LspReferenceText' }) +hi(0, 'illuminatedWordWrite', { link = 'LspReferenceText' }) +hi(0, 'lCursor', { link = 'Cursor' }) +hi(0, 'qfFileName', { link = 'Directory' }) +hi(0, 'qfLineNr', { link = 'LineNr' }) +hi(0, 'rainbowcol1', { fg = '#e85c51' }) +hi(0, 'rainbowcol2', { fg = '#fda47f' }) +hi(0, 'rainbowcol3', { fg = '#7aa4a1' }) +hi(0, 'rainbowcol4', { fg = '#5a93aa' }) +hi(0, 'rainbowcol5', { fg = '#a1cdd8' }) +hi(0, 'rainbowcol6', { fg = '#ad5c7c' }) +hi(0, 'rainbowcol7', { fg = '#cb7985' }) +hi(0, 'typescriptParens', { fg = '#cbd9d8' }) + +-- Terminal colors +local g = vim.g + +g.terminal_color_0 = '#2f3239' +g.terminal_color_1 = '#e85c51' +g.terminal_color_2 = '#7aa4a1' +g.terminal_color_3 = '#fda47f' +g.terminal_color_4 = '#5a93aa' +g.terminal_color_5 = '#ad5c7c' +g.terminal_color_6 = '#a1cdd8' +g.terminal_color_7 = '#ebebeb' +g.terminal_color_8 = '#4e5157' +g.terminal_color_9 = '#eb746b' +g.terminal_color_10 = '#8eb2af' +g.terminal_color_11 = '#fdb292' +g.terminal_color_12 = '#73a3b7' +g.terminal_color_13 = '#b97490' +g.terminal_color_14 = '#afd4de' +g.terminal_color_15 = '#eeeeee' diff --git a/nvim/lsp/gopls.lua b/nvim/lsp/gopls.lua index 46d47d8..38f2b64 100644 --- a/nvim/lsp/gopls.lua +++ b/nvim/lsp/gopls.lua @@ -1,3 +1,4 @@ +---@type vim.lsp.Config return { settings = { gopls = { diff --git a/nvim/lsp/lua_ls.lua b/nvim/lsp/lua_ls.lua index a2244c8..f71f2bd 100644 --- a/nvim/lsp/lua_ls.lua +++ b/nvim/lsp/lua_ls.lua @@ -18,6 +18,12 @@ return { }) end, settings = { - Lua = {}, + Lua = { + hint = { + enable = true, + arrayIndex = 'Enable', + setType = true, + }, + }, }, } diff --git a/nvim/lua/config/init.lua b/nvim/lua/config/init.lua index 1f048e1..a2a90d3 100644 --- a/nvim/lua/config/init.lua +++ b/nvim/lua/config/init.lua @@ -24,6 +24,7 @@ vim.opt.tabstop = 2 -- 2 space tabs are based vim.opt.updatetime = 250 -- decrease update time vim.opt.virtualedit = 'onemore' vim.opt.winborder = 'single' +vim.cmd('colorscheme iofq') -- Switch tab length on the fly vim.keymap.set('n', '\\t', function() @@ -44,7 +45,7 @@ vim.api.nvim_create_autocmd('BufWinEnter', { if vim.bo[event.buf].filetype == 'help' then vim.cmd.only() vim.keymap.set('n', 'q', vim.cmd.bdelete, { noremap = true, silent = true }) - vim.bo.buflisted = true + vim.bo.buflisted = false end end, }) @@ -87,6 +88,10 @@ vim.keymap.set('n', '', vim.cmd.bprev, { noremap = true, silent = true }) vim.keymap.set('v', '<', '', '>gv') vim.keymap.set({ 'v', 'n' }, 'q:', '') +vim.keymap.set('n', 'gq', vim.cmd.bdelete, { noremap = true, silent = true, desc = 'close buffer' }) +vim.keymap.set('n', 'gQ', function() + vim.cmd('bufdo bdelete') +end, { noremap = true, silent = true, desc = 'close all buffers' }) -- resize splits if window got resized vim.api.nvim_create_autocmd({ 'VimResized' }, { diff --git a/nvim/lua/plugins/lib/minidiff_jj.lua b/nvim/lua/plugins/lib/minidiff_jj.lua index e638676..c71654f 100644 --- a/nvim/lua/plugins/lib/minidiff_jj.lua +++ b/nvim/lua/plugins/lib/minidiff_jj.lua @@ -1,14 +1,14 @@ local diff = require('mini.diff') -local JJ = { +local M = { cache = {}, jj_cache = {}, } -JJ.get_buf_realpath = function(buf_id) +M.get_buf_realpath = function(buf_id) return vim.loop.fs_realpath(vim.api.nvim_buf_get_name(buf_id)) or '' end -JJ.jj_start_watching_tree_state = function(buf_id, path) +M.jj_start_watching_tree_state = function(buf_id, path) local stdout = vim.loop.new_pipe() local args = { 'workspace', 'root', '--ignore-working-copy' } local spawn_opts = { @@ -19,11 +19,11 @@ JJ.jj_start_watching_tree_state = function(buf_id, path) local on_not_in_jj = vim.schedule_wrap(function() if not vim.api.nvim_buf_is_valid(buf_id) then - JJ.cache[buf_id] = nil + M.cache[buf_id] = nil return end diff.fail_attach(buf_id) - JJ.jj_cache[buf_id] = {} + M.jj_cache[buf_id] = {} end) local process, stdout_feed = nil, {} @@ -37,20 +37,20 @@ JJ.jj_start_watching_tree_state = function(buf_id, path) -- Set up index watching local jj_dir_path = table.concat(stdout_feed, ''):gsub('\n+$', '') .. '/.jj/working_copy' - JJ.jj_setup_tree_state_watch(buf_id, jj_dir_path) + M.jj_setup_tree_state_watch(buf_id, jj_dir_path) -- Set reference text immediately - JJ.jj_set_ref_text(buf_id) + M.jj_set_ref_text(buf_id) end process = vim.loop.spawn('jj', spawn_opts, on_exit) - JJ.jj_read_stream(stdout, stdout_feed) + M.jj_read_stream(stdout, stdout_feed) end -JJ.jj_setup_tree_state_watch = function(buf_id, jj_dir_path) +M.jj_setup_tree_state_watch = function(buf_id, jj_dir_path) local buf_fs_event, timer = vim.loop.new_fs_event(), vim.loop.new_timer() local buf_jj_set_ref_text = function() - JJ.jj_set_ref_text(buf_id) + M.jj_set_ref_text(buf_id) end local watch_tree_state = function(_, filename, _) @@ -63,11 +63,11 @@ JJ.jj_setup_tree_state_watch = function(buf_id, jj_dir_path) end buf_fs_event:start(jj_dir_path, { recursive = false }, watch_tree_state) - JJ.jj_invalidate_cache(JJ.jj_cache[buf_id]) - JJ.jj_cache[buf_id] = { fs_event = buf_fs_event, timer = timer } + M.jj_invalidate_cache(M.jj_cache[buf_id]) + M.jj_cache[buf_id] = { fs_event = buf_fs_event, timer = timer } end -JJ.jj_set_ref_text = vim.schedule_wrap(function(buf_id) +M.jj_set_ref_text = vim.schedule_wrap(function(buf_id) if not vim.api.nvim_buf_is_valid(buf_id) then return end @@ -77,7 +77,7 @@ JJ.jj_set_ref_text = vim.schedule_wrap(function(buf_id) end) -- NOTE: Do not cache buffer's name to react to its possible rename - local path = JJ.get_buf_realpath(buf_id) + local path = M.get_buf_realpath(buf_id) if path == '' then return buf_set_ref_text {} end @@ -105,10 +105,10 @@ JJ.jj_set_ref_text = vim.schedule_wrap(function(buf_id) end process = vim.loop.spawn('jj', spawn_opts, on_exit) - JJ.jj_read_stream(stdout, stdout_feed) + M.jj_read_stream(stdout, stdout_feed) end) -JJ.jj_read_stream = function(stream, feed) +M.jj_read_stream = function(stream, feed) local callback = function(err, data) if data ~= nil then return table.insert(feed, data) @@ -121,7 +121,7 @@ JJ.jj_read_stream = function(stream, feed) stream:read_start(callback) end -JJ.jj_invalidate_cache = function(cache) +M.jj_invalidate_cache = function(cache) if cache == nil then return end @@ -129,26 +129,26 @@ JJ.jj_invalidate_cache = function(cache) pcall(vim.loop.timer_stop, cache.timer) end -local jj = function() +M.gen_source = function() local attach = function(buf_id) -- Try attaching to a buffer only once - if JJ.jj_cache[buf_id] ~= nil then + if M.jj_cache[buf_id] ~= nil then return false end -- - Possibly resolve symlinks to get data from the original repo - local path = JJ.get_buf_realpath(buf_id) + local path = M.get_buf_realpath(buf_id) if path == '' then return false end - JJ.jj_cache[buf_id] = {} - JJ.jj_start_watching_tree_state(buf_id, path) + M.jj_cache[buf_id] = {} + M.jj_start_watching_tree_state(buf_id, path) end local detach = function(buf_id) - local cache = JJ.jj_cache[buf_id] - JJ.jj_cache[buf_id] = nil - JJ.jj_invalidate_cache(cache) + local cache = M.jj_cache[buf_id] + M.jj_cache[buf_id] = nil + M.jj_invalidate_cache(cache) end local apply_hunks = function(_, _) @@ -162,4 +162,4 @@ local jj = function() apply_hunks = apply_hunks, } end -return jj +return M diff --git a/nvim/lua/plugins/lib/session_jj.lua b/nvim/lua/plugins/lib/session_jj.lua index db6a271..31429dc 100644 --- a/nvim/lua/plugins/lib/session_jj.lua +++ b/nvim/lua/plugins/lib/session_jj.lua @@ -1,7 +1,8 @@ local M = {} -M.load = function() +sessions = require('mini.sessions') + +M.get_id = function() local jj_root = vim.system({ 'jj', 'workspace', 'root' }):wait() - local sessions = require('mini.sessions') if jj_root.code ~= 0 then return @@ -19,29 +20,42 @@ M.load = function() '--no-graph', }) :wait() - local branch = vim.trim(string.gsub(result.stdout, '[\n*]', '')) + local branch = vim.trim(string.gsub(result.stdout, '[\n*]', '')) -- trim newlines and unpushed indicator local root = vim.trim(string.gsub(jj_root.stdout, '\n', '')) - local jj_sesh = string.gsub(string.format('jj:%s:%s', root, branch), '[./]', '-') - if jj_sesh ~= '' then - vim.opt.shadafile = vim.fn.stdpath('data') .. '/myshada/' .. jj_sesh .. '.shada' - for name, _ in pairs(sessions.detected) do - if name == jj_sesh then - vim.ui.select({ - 'No', - 'Yes', - }, { prompt = 'Session found at ' .. jj_sesh .. ', load it?' }, function(c) - if c == 'Yes' then - -- load session (buffers, etc) as well as shada (marks) - sessions.read(jj_sesh) - vim.cmd('rshada') - vim.notify('loaded jj session: ' .. jj_sesh) - end - end) - return - end + local id = string.gsub(string.format('jj:%s:%s', root, branch), '[./]', '-') -- slugify + return id +end + +M.check_exists = function(id) + for name, _ in pairs(sessions.detected) do + if name == id then + return true end - vim.cmd('wshada') - sessions.write(jj_sesh) + end + return false +end + +M.load = function() + local id = M.get_id() + if id == '' then + return + end + vim.opt.shadafile = vim.fn.stdpath('data') .. '/myshada/' .. id .. '.shada' + if M.check_exists(id) then + vim.ui.select({ + 'Yes', + 'No', + }, { prompt = 'Session found at ' .. id .. ', load it?' }, function(c) + if c == 'Yes' then + -- load session (buffers, etc) as well as shada (marks) + sessions.read(id) + vim.cmd('rshada') + vim.notify('loaded jj session: ' .. id) + end + end) + else + vim.cmd('wshada') -- create session if it did not exist + sessions.write(id) end end diff --git a/nvim/lua/plugins/lib/snacks.lua b/nvim/lua/plugins/lib/snacks.lua new file mode 100644 index 0000000..8945232 --- /dev/null +++ b/nvim/lua/plugins/lib/snacks.lua @@ -0,0 +1,26 @@ +M = {} +M.marks = function() + return { + finder = 'vim_marks', + format = 'file', + ['local'] = false, + global = true, + actions = { + markdel = function(picker) + for _, item in ipairs(picker:selected()) do + vim.cmd.delmarks { args = { item.label } } + end + vim.cmd('wshada') + picker.list:set_selected() + picker.list:set_target() + picker:find() + end, + }, + win = { + list = { + keys = { ['dd'] = 'markdel' }, + }, + }, + } +end +return M diff --git a/nvim/lua/plugins/lib/snacks_jj.lua b/nvim/lua/plugins/lib/snacks_jj.lua index 87dc12e..33a71e0 100644 --- a/nvim/lua/plugins/lib/snacks_jj.lua +++ b/nvim/lua/plugins/lib/snacks_jj.lua @@ -67,6 +67,7 @@ function M.revs() Snacks.picker.util.cmd(cmd, function() Snacks.notify('Checking out revision: ' .. item.rev, { title = 'Snacks Picker' }) vim.cmd.checktime() + require('plugins.lib.session_jj').load() end, { cwd = item.cwd }) end end diff --git a/nvim/lua/plugins/lsp.lua b/nvim/lua/plugins/lsp.lua index 09c5a0a..2d3f6ea 100644 --- a/nvim/lua/plugins/lsp.lua +++ b/nvim/lua/plugins/lsp.lua @@ -8,7 +8,7 @@ return { follow = false, auto_close = false, win = { - size = 0.25, + size = 0.33, position = 'right', type = 'split', }, @@ -17,7 +17,6 @@ return { { 'gre', 'Trouble diagnostics toggle', - noremap = true, desc = 'Trouble diagnostics', }, }, @@ -25,10 +24,6 @@ return { { 'neovim/nvim-lspconfig', event = 'VeryLazy', - dependencies = { - 'folke/trouble.nvim', - 'saghen/blink.cmp', - }, config = function() vim.lsp.enable { 'nil_ls', @@ -40,53 +35,36 @@ return { vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('UserLspConfig', {}), callback = function(ev) - local bufnr = ev.buf local client = vim.lsp.get_client_by_id(ev.data.client_id) if not client then return end + vim.keymap.set('n', 'grg', 'Trouble lsp toggle', { buffer = ev.buf, desc = 'Trouble LSP' }) vim.keymap.set( 'n', - 'grt', - 'Trouble lsp toggle focus=true ', - { buffer = ev.buf, noremap = true, silent = true, desc = 'Trouble LSP ' } - ) - vim.keymap.set( - 'n', - 'grs', - 'Trouble lsp_document_symbols toggle win.position=left ', - { buffer = ev.buf, noremap = true, silent = true, desc = 'Trouble LSP symbols' } - ) - vim.keymap.set( - 'n', - 'grd', - 'Trouble lsp_definitions toggle ', - { buffer = ev.buf, noremap = true, silent = true, desc = 'Trouble LSP definition' } - ) - vim.keymap.set( - 'n', - 'grr', - 'Trouble lsp_references toggle ', - { buffer = ev.buf, noremap = true, silent = true, desc = 'Trouble LSP definition' } - ) - vim.keymap.set( - 'n', - 'grl', - vim.lsp.codelens.run, - { buffer = ev.buf, noremap = true, silent = true, desc = 'vim.lsp.codelens.run()' } + 'gO', + 'Trouble lsp_document_symbols win.position=left', + { buffer = ev.buf, desc = 'Trouble LSP symbols' } ) + vim.keymap.set('n', 'grd', function() + Snacks.picker.lsp_definitions { focus = 'list' } + end, { buffer = ev.buf, desc = 'LSP definition' }) + vim.keymap.set('n', 'grr', function() + Snacks.picker.lsp_references { focus = 'list' } + end, { buffer = ev.buf, desc = 'LSP definition' }) vim.keymap.set('n', 'grh', function() vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled()) - end, { buffer = ev.buf, noremap = true, silent = true, desc = 'LSP hints toggle' }) + end, { buffer = ev.buf, desc = 'LSP hints toggle' }) + vim.keymap.set('n', 'grl', vim.lsp.codelens.run, { buffer = ev.buf, desc = 'vim.lsp.codelens.run()' }) -- Auto-refresh code lenses if client.server_capabilities.codeLensProvider then vim.api.nvim_create_autocmd({ 'InsertLeave', 'TextChanged' }, { - group = vim.api.nvim_create_augroup(string.format('lsp-%s-%s', bufnr, client.id), {}), + group = vim.api.nvim_create_augroup(string.format('lsp-%s-%s', ev.buf, client.id), {}), callback = function() - vim.lsp.codelens.refresh { bufnr = bufnr } + vim.lsp.codelens.refresh { bufnr = ev.buf } end, - buffer = bufnr, + buffer = ev.buf, }) vim.lsp.codelens.refresh() end diff --git a/nvim/lua/plugins/mini.lua b/nvim/lua/plugins/mini.lua index e6a6895..a495465 100644 --- a/nvim/lua/plugins/mini.lua +++ b/nvim/lua/plugins/mini.lua @@ -1,7 +1,6 @@ return { { 'echasnovski/mini.nvim', - dependencies = 'nvim-treesitter/nvim-treesitter-textobjects', lazy = false, keys = { { @@ -23,13 +22,11 @@ return { { 'gb', 'Git blame -- %', - noremap = true, desc = 'git blame', }, { 'gg', ':Git ', - noremap = true, desc = 'git command', }, { @@ -40,6 +37,13 @@ return { noremap = true, desc = 'mini session select', }, + { + '\\z', + function() + require('mini.misc').zoom() + end, + desc = 'mini zoom', + }, }, config = function() require('mini.basics').setup { mappings = { windows = true } } @@ -99,16 +103,17 @@ return { require('mini.surround').setup() require('mini.splitjoin').setup { detect = { separator = '[,;\n]' } } - local sessions = require('mini.sessions') - sessions.setup { + require('mini.sessions').setup { file = '', autowrite = true, verbose = { write = false, }, } - if #vim.fn.argv() == 0 then - require('plugins.lib.session_jj').load() + local jj_sesh = require('plugins.lib.session_jj') + local jj_id = jj_sesh.get_id() + if jj_sesh.check_exists(jj_id) then + Snacks.notify('Existing session for ' .. jj_id) end local jump = require('mini.jump2d') @@ -130,7 +135,7 @@ return { diff.setup { options = { wrap_goto = true }, source = { - jj(), + jj.gen_source(), diff.gen_source.git(), }, } @@ -170,10 +175,14 @@ return { width_preview = 50, }, } - vim.keymap.set('n', 'nc', files.open, { noremap = true, desc = 'minifiles open' }) + vim.keymap.set('n', 'nc', files.open, { desc = 'minifiles open' }) vim.api.nvim_create_autocmd('User', { pattern = 'MiniFilesBufferCreate', callback = function(args) + vim.keymap.set('n', 'nc', function() + files.synchronize() + files.close() + end, { buffer = args.data.buf_id }) vim.keymap.set('n', '`', function() local cur_entry_path = MiniFiles.get_fs_entry().path local cur_directory = vim.fs.dirname(cur_entry_path) @@ -181,7 +190,12 @@ return { end, { buffer = args.data.buf_id }) end, }) - + vim.api.nvim_create_autocmd('User', { + pattern = 'MiniFilesActionRename', + callback = function(event) + Snacks.rename.on_rename_file(event.data.from, event.data.to) + end, + }) local multi = require('mini.keymap').map_multistep multi({ 'i' }, '', { 'minipairs_bs' }) multi({ 'i', 's' }, '', { 'blink_accept', 'vimsnippet_next', 'increase_indent' }) diff --git a/nvim/lua/plugins/misc.lua b/nvim/lua/plugins/misc.lua index 9849c9e..484e7b9 100644 --- a/nvim/lua/plugins/misc.lua +++ b/nvim/lua/plugins/misc.lua @@ -39,53 +39,21 @@ return { }, }, keys = { - { 'nb', vim.cmd.DiffviewOpen, noremap = true, desc = 'diffview open' }, + { 'nb', vim.cmd.DiffviewOpen, desc = 'diffview open' }, { 'nh', 'DiffviewFileHistory %', mode = { 'n', 'v' }, - noremap = true, desc = 'diffview history', }, { 'nH', 'DiffviewFileHistory', mode = { 'n', 'v' }, - noremap = true, desc = 'diffview history', }, }, }, - { - 'EdenEast/nightfox.nvim', - lazy = false, - priority = 1000, - opts = { - options = { - transparent = true, - terminal_colors = true, - modules = { - 'mini', - 'treesitter', - 'neogit', - 'native_lsp', - 'diagnostic', - 'modes', - }, - }, - }, - config = function(_, opts) - require('nightfox').setup(opts) - vim.cmd('colorscheme terafox') - vim.api.nvim_set_hl(0, 'StatusLine', { bg = 'none' }) - vim.api.nvim_set_hl(0, 'StatusLineNC', { bg = 'none' }) - vim.api.nvim_set_hl(0, 'TablineFill', { bg = 'none' }) - vim.api.nvim_set_hl(0, 'MiniDiffSignAdd', { fg = 'green', bold = true }) - vim.api.nvim_set_hl(0, 'MiniDiffSignDelete', { fg = 'red', bold = true }) - vim.api.nvim_set_hl(0, 'MiniDiffSignChange', { fg = 'green', bold = true }) - vim.api.nvim_set_hl(0, 'BlinkCmpGhostText', { link = 'String' }) - end, - }, { 'ThePrimeagen/refactoring.nvim', event = 'VeryLazy', diff --git a/nvim/lua/plugins/snacks.lua b/nvim/lua/plugins/snacks.lua index a6206a0..718a647 100644 --- a/nvim/lua/plugins/snacks.lua +++ b/nvim/lua/plugins/snacks.lua @@ -1,47 +1,53 @@ return { { 'folke/snacks.nvim', - dependencies = { - 'folke/trouble.nvim', - }, lazy = false, priority = 1000, opts = { bigfile = { enabled = true }, - bufdelete = { enabled = true }, quickfile = { enabled = true }, - notifier = { enabled = true }, + notifier = { + enabled = true, + timeout = 5000, + }, + styles = { + notification = { + wo = { wrap = true }, + }, + }, terminal = { enabled = true }, indent = { enabled = true }, input = { enabled = true }, words = { enabled = true }, picker = { enabled = true, - matcher = { frecency = true }, - layout = { - preset = function() - return vim.o.columns >= 120 and 'telescope' or 'vertical' - end, + matcher = { + frecency = true, + history_bonus = true, }, + layout = 'ivy_split', sources = { files = { hidden = true }, grep = { hidden = true }, explorer = { hidden = true }, git_files = { untracked = true }, - smart = { - multi = { 'buffers', 'recent', 'files' }, + lsp_symbols = { + filter = { default = true }, + layout = 'left', + }, + smart = { + multi = { + require('plugins.lib.snacks').marks(), + { source = 'buffers', current = false }, + 'recent', + { source = 'files', hidden = true }, + }, }, - }, - actions = { - trouble_open = function(...) - return require('trouble.sources.snacks').actions.trouble_open.action(...) - end, }, win = { input = { keys = { ['wq'] = { 'close', mode = 'i' }, - [''] = { 'trouble_open', mode = { 'n', 'i' } }, }, }, list = { @@ -52,10 +58,6 @@ return { }, }, }, - config = function(_, opts) - require('snacks').setup(opts) - vim.api.nvim_set_hl(0, 'SnacksPickerDir', { fg = '#cccccc' }) - end, keys = { { '', @@ -63,7 +65,6 @@ return { Snacks.terminal.toggle() end, mode = { 'n', 't' }, - noremap = true, desc = 'terminal open', }, { @@ -72,7 +73,6 @@ return { Snacks.terminal.toggle('$SHELL') end, mode = { 'n', 't' }, - noremap = true, desc = 'terminal open', }, { @@ -80,7 +80,6 @@ return { function() Snacks.words.jump(1, true) end, - noremap = true, desc = 'next reference', }, { @@ -88,51 +87,21 @@ return { function() Snacks.words.jump(-1, true) end, - noremap = true, desc = 'next reference', }, { - '\\z', - function() - if Snacks.dim.enabled then - Snacks.dim.disable() - else - Snacks.dim.enable() - end - end, - noremap = true, - desc = 'next reference', - }, - { - 'gq', - function() - Snacks.bufdelete() - end, - noremap = true, - silent = true, - }, - { - 'gQ', - function() - Snacks.bufdelete.other() - end, - noremap = true, - silent = true, - }, - { - 'ff', + '', function() + vim.cmd.delmarks { args = { '0-9' } } Snacks.picker.smart() end, - noremap = true, - desc = 'Fuzzy find files', + desc = 'Fuzzy find smart', }, { 'fe', function() Snacks.explorer() end, - noremap = true, desc = 'snacks explorer', }, { @@ -140,8 +109,13 @@ return { function() Snacks.picker.git_files() end, - noremap = true, - silent = true, + desc = 'Fuzzy find git files', + }, + { + 'ff', + function() + Snacks.picker.files() + end, desc = 'Fuzzy find files', }, { @@ -149,8 +123,6 @@ return { function() Snacks.picker.grep() end, - noremap = true, - silent = true, desc = 'Fuzzy find grep', }, { @@ -158,8 +130,6 @@ return { function() Snacks.picker.grep_word() end, - noremap = true, - silent = true, desc = 'Fuzzy find grep word', }, { @@ -167,8 +137,6 @@ return { function() Snacks.picker.pickers() end, - noremap = true, - silent = true, desc = 'See all pickers', }, { @@ -176,8 +144,6 @@ return { function() Snacks.picker.undo() end, - noremap = true, - silent = true, desc = 'Pick undotree', }, { @@ -185,8 +151,6 @@ return { function() Snacks.picker.jumps() end, - noremap = true, - silent = true, desc = 'Pick jumps', }, { @@ -194,17 +158,13 @@ return { function() Snacks.picker.resume() end, - noremap = true, - silent = true, desc = 'Fuzzy find resume', }, { - '', + 'fb', function() Snacks.picker.buffers() end, - noremap = true, - silent = true, desc = 'Fuzzy find buffers', }, { @@ -212,44 +172,14 @@ return { function() Snacks.picker.notifications() end, - noremap = true, - silent = true, desc = 'pick notifications', }, { 'fm', function() vim.cmd.delmarks { args = { '0-9' } } - Snacks.picker.pick { - finder = 'vim_marks', - format = 'file', - ['local'] = false, - global = true, - actions = { - markdel = function(picker) - for _, item in ipairs(picker:selected()) do - vim.cmd.delmarks { args = { item.label } } - end - vim.cmd('wshada') - picker.list:set_selected() - picker.list:set_target() - picker:find() - end, - }, - win = { - input = { - keys = { - [''] = { 'markdel', mode = { 'n', 'i' } }, - }, - }, - list = { - keys = { ['dd'] = 'markdel' }, - }, - }, - } + Snacks.picker.pick(require('plugins.lib.snacks').marks()) end, - noremap = true, - silent = true, desc = 'pick global marks', }, { @@ -257,8 +187,6 @@ return { function() require('plugins.lib.snacks_jj').status() end, - noremap = true, - silent = true, desc = 'pick notifications', }, { @@ -266,8 +194,6 @@ return { function() require('plugins.lib.snacks_jj').revs() end, - noremap = true, - silent = true, desc = 'pick notifications', }, }, diff --git a/nvim/lua/plugins/treesitter.lua b/nvim/lua/plugins/treesitter.lua index ad22ccd..ddb5da9 100644 --- a/nvim/lua/plugins/treesitter.lua +++ b/nvim/lua/plugins/treesitter.lua @@ -11,6 +11,7 @@ return { }, }, 'nvim-treesitter/nvim-treesitter-textobjects', + 'RRethy/nvim-treesitter-textsubjects', }, config = function() require('nvim-treesitter.configs').setup { @@ -49,13 +50,6 @@ return { }, }, }, - incremental_selection = { - enable = true, - keymaps = { - node_incremental = 'v', - node_decremental = '', - }, - }, } end, },