mirror of
https://github.com/iofq/nvim.nix.git
synced 2026-01-23 08:55:16 -06:00
remove unused nix code
This commit is contained in:
parent
8922491578
commit
9a955d86a0
7 changed files with 196 additions and 387 deletions
154
nix/mkNeovim.nix
154
nix/mkNeovim.nix
|
|
@ -1,150 +1,40 @@
|
||||||
# Function for creating a Neovim derivation
|
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
stdenv,
|
|
||||||
# Set by the overlay to ensure we use a compatible version of `wrapNeovimUnstable`
|
|
||||||
pkgs-wrapNeovim ? pkgs,
|
|
||||||
}:
|
}:
|
||||||
with lib;
|
|
||||||
{
|
{
|
||||||
# NVIM_APPNAME - Defaults to 'nvim' if not set.
|
name ? "nvim",
|
||||||
# If set to something else, this will also rename the binary.
|
plugins ? [ ],
|
||||||
appName ? "nvim",
|
packages ? [ ],
|
||||||
# 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 = <plugin-name>; url = <git-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,
|
wrapRc ? true,
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
# This is the structure of a plugin definition.
|
isNvim = (name == "nvim");
|
||||||
# Each plugin in the `plugins` argument list can also be defined as this attrset
|
nvimRtp = pkgs.stdenv.mkDerivation {
|
||||||
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 ]);
|
|
||||||
|
|
||||||
# Map all plugins to an attrset { plugin = <plugin>; config = <config>; optional = <tf>; ... }
|
|
||||||
|
|
||||||
# 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 = (pkgs.neovimUtils.normalizePlugins plugins);
|
|
||||||
};
|
|
||||||
|
|
||||||
packDir = pkgs.neovimUtils.packDir {
|
|
||||||
iofq = pkgs.neovimUtils.normalizedPluginsToVimPackage (pkgs.neovimUtils.normalizePlugins plugins);
|
|
||||||
};
|
|
||||||
|
|
||||||
nvimRtp = stdenv.mkDerivation {
|
|
||||||
name = "nvim-rtp";
|
name = "nvim-rtp";
|
||||||
src = ../nvim;
|
src = ../nvim;
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out/
|
mkdir -p $out/
|
||||||
cp -r . $out/
|
cp -r . $out/
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
# The final init.lua content that we pass to the Neovim wrapper.
|
wrapperArgs = ''
|
||||||
# It wraps the user init.lua, prepends the lua lib directory to the RTP
|
--set NVIM_APPNAME "${name}"
|
||||||
# and prepends the nvim and after directory to the RTP
|
--prefix PATH : "${lib.makeBinPath packages}"
|
||||||
initLua = ''
|
--set LIBSQLITE_CLIB_PATH "${pkgs.sqlite.out}/lib/libsqlite3.so"
|
||||||
vim.opt.rtp:prepend('${nvimRtp}')
|
--set LIBSQLITE "${pkgs.sqlite.out}/lib/libsqlite3.so"
|
||||||
''
|
|
||||||
+ 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
|
|
||||||
}"'';
|
|
||||||
|
|
||||||
# Lua libraries
|
|
||||||
extraMakeWrapperLuaArgs =
|
|
||||||
optionalString (resolvedExtraLuaPackages != [ ])
|
|
||||||
''--suffix LUA_PATH ";" "${
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
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}
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
neovimConfig = pkgs.neovimUtils.makeNeovimConfig {
|
||||||
|
wrapRc = wrapRc;
|
||||||
|
withPython3 = false;
|
||||||
|
vimAlias = isNvim;
|
||||||
|
plugins = (pkgs.neovimUtils.normalizePlugins plugins);
|
||||||
|
customLuaRC = ''vim.opt.rtp:prepend('${nvimRtp}')'' + builtins.readFile ../nvim/init.lua;
|
||||||
|
extraMakeWrapperArgs = wrapperArgs;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
(pkgs.wrapNeovimUnstable pkgs.neovim-unwrapped (neovimConfig)).overrideAttrs (oa: {
|
||||||
|
buildPhase = oa.buildPhase + lib.optionalString (!isNvim) ''mv $out/bin/nvim $out/bin/${name}'';
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,11 @@
|
||||||
# This overlay, when applied to nixpkgs, adds the final neovim derivation to nixpkgs.
|
# This overlay, when applied to nixpkgs, adds the final neovim derivation to nixpkgs.
|
||||||
{ inputs }:
|
{ inputs }:
|
||||||
final: prev:
|
final: prev:
|
||||||
with final.pkgs.lib;
|
|
||||||
let
|
let
|
||||||
mkNeovim = prev.callPackage ./mkNeovim.nix { pkgs-wrapNeovim = prev; };
|
mkNeovim = prev.callPackage ./mkNeovim.nix { pkgs = prev; };
|
||||||
dart-nvim = inputs.dart.packages.x86_64-linux.default;
|
dart-nvim = inputs.dart.packages.x86_64-linux.default;
|
||||||
|
|
||||||
plugins = with final.vimPlugins; [
|
plugins = with prev.vimPlugins; [
|
||||||
blink-cmp
|
blink-cmp
|
||||||
blink-ripgrep-nvim
|
blink-ripgrep-nvim
|
||||||
conform-nvim
|
conform-nvim
|
||||||
|
|
@ -23,12 +22,13 @@ let
|
||||||
snacks-nvim
|
snacks-nvim
|
||||||
];
|
];
|
||||||
|
|
||||||
basePackages = with final; [
|
basePackages = with prev; [
|
||||||
|
sqlite
|
||||||
ripgrep
|
ripgrep
|
||||||
fd
|
fd
|
||||||
];
|
];
|
||||||
# Extra packages that should be included on nixos but don't need to be bundled
|
# Extra packages that should be included on nixos but don't need to be bundled
|
||||||
extraPackages = with final; [
|
extraPackages = with prev; [
|
||||||
# linters
|
# linters
|
||||||
yamllint
|
yamllint
|
||||||
jq
|
jq
|
||||||
|
|
@ -47,25 +47,21 @@ in
|
||||||
{
|
{
|
||||||
nvim-pkg = mkNeovim {
|
nvim-pkg = mkNeovim {
|
||||||
inherit plugins;
|
inherit plugins;
|
||||||
extraPackages = basePackages ++ extraPackages;
|
packages = basePackages ++ extraPackages;
|
||||||
};
|
};
|
||||||
|
|
||||||
nvim-min-pkg = mkNeovim {
|
nvim-min-pkg = mkNeovim {
|
||||||
inherit plugins;
|
inherit plugins;
|
||||||
extraPackages = basePackages;
|
packages = basePackages;
|
||||||
};
|
};
|
||||||
|
|
||||||
# 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 {
|
nvim-dev = mkNeovim {
|
||||||
inherit plugins;
|
inherit plugins;
|
||||||
extraPackages = basePackages ++ extraPackages;
|
packages = basePackages ++ extraPackages;
|
||||||
appName = "nvim-dev";
|
name = "nvim-dev";
|
||||||
wrapRc = false;
|
wrapRc = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
# This can be symlinked in the devShell's shellHook
|
|
||||||
nvim-luarc-json = final.mk-luarc-json {
|
nvim-luarc-json = final.mk-luarc-json {
|
||||||
inherit plugins;
|
inherit plugins;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
vim.cmd('colorscheme iofq')
|
||||||
|
|
||||||
vim.g.mapleader = ' '
|
vim.g.mapleader = ' '
|
||||||
vim.opt.autowrite = true
|
vim.opt.autowrite = true
|
||||||
vim.opt.backspace = 'indent,eol,start'
|
vim.opt.backspace = 'indent,eol,start'
|
||||||
|
|
@ -42,8 +44,22 @@ vim.lsp.enable {
|
||||||
'basedpyright',
|
'basedpyright',
|
||||||
}
|
}
|
||||||
|
|
||||||
vim.cmd('colorscheme iofq')
|
local map = vim.keymap.set
|
||||||
require('keymaps')
|
map('n', '\\t', function() -- Switch tab length on the fly
|
||||||
|
vim.o.tabstop = vim.o.tabstop == 8 and 2 or 2 * vim.o.tabstop
|
||||||
|
vim.notify('tabstop: ' .. vim.o.tabstop)
|
||||||
|
end)
|
||||||
|
map({ 'v', 'i' }, 'wq', '<esc>l')
|
||||||
|
map('v', '<', '<gv')
|
||||||
|
map('v', '>', '>gv')
|
||||||
|
map('n', 'n', 'nzz', { noremap = true })
|
||||||
|
map('n', 'N', 'Nzz', { noremap = true })
|
||||||
|
map('n', '<C-u>', '<C-u>zz', { noremap = true })
|
||||||
|
map('n', '<C-d>', '<C-d>zz', { noremap = true })
|
||||||
|
map('n', 'gq', vim.cmd.bdelete, { noremap = true })
|
||||||
|
map('n', 'gQ', function()
|
||||||
|
vim.cmd('bufdo bdelete')
|
||||||
|
end, { noremap = true })
|
||||||
|
|
||||||
require('autocmd')
|
require('autocmd')
|
||||||
require('mini')
|
|
||||||
require('plugins')
|
require('plugins')
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,26 @@
|
||||||
|
local cmd = vim.api.nvim_create_autocmd
|
||||||
-- open :h in buffers
|
-- open :h in buffers
|
||||||
vim.api.nvim_create_autocmd('BufWinEnter', {
|
cmd('FileType', {
|
||||||
pattern = '*',
|
group = vim.api.nvim_create_augroup('help', { clear = true }),
|
||||||
callback = function(event)
|
pattern = 'help',
|
||||||
if vim.bo[event.buf].filetype == 'help' then
|
callback = function(_)
|
||||||
vim.cmd.only()
|
vim.cmd.only()
|
||||||
vim.keymap.set('n', 'q', vim.cmd.bdelete, { noremap = true, silent = true })
|
vim.keymap.set('n', 'q', vim.cmd.bdelete, { noremap = true })
|
||||||
vim.bo.buflisted = false
|
vim.bo.buflisted = false
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- resize splits if window got resized
|
-- resize splits if window got resized
|
||||||
vim.api.nvim_create_autocmd({ 'VimResized' }, {
|
cmd({ 'VimResized' }, {
|
||||||
group = vim.api.nvim_create_augroup('resize_splits', { clear = true }),
|
group = vim.api.nvim_create_augroup('resize_splits', { clear = true }),
|
||||||
callback = function()
|
callback = function()
|
||||||
local current_tab = vim.fn.tabpagenr()
|
|
||||||
vim.cmd('tabdo wincmd =')
|
vim.cmd('tabdo wincmd =')
|
||||||
vim.cmd('tabnext ' .. current_tab)
|
vim.cmd('tabnext ' .. vim.fn.tabpagenr())
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Check if we need to reload the file when it changed
|
-- Check if we need to reload the file when it changed
|
||||||
vim.api.nvim_create_autocmd({ 'FocusGained', 'TermClose', 'TermLeave' }, {
|
cmd({ 'FocusGained', 'TermClose', 'TermLeave' }, {
|
||||||
group = vim.api.nvim_create_augroup('check_reload', { clear = true }),
|
group = vim.api.nvim_create_augroup('check_reload', { clear = true }),
|
||||||
callback = function()
|
callback = function()
|
||||||
if vim.o.buftype ~= 'nofile' then
|
if vim.o.buftype ~= 'nofile' then
|
||||||
|
|
@ -31,36 +30,36 @@ vim.api.nvim_create_autocmd({ 'FocusGained', 'TermClose', 'TermLeave' }, {
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Init treesitter
|
-- Init treesitter
|
||||||
vim.api.nvim_create_autocmd('FileType', {
|
cmd('FileType', {
|
||||||
callback = function(event)
|
callback = function(event)
|
||||||
local bufnr = event.buf
|
local bufnr = event.buf
|
||||||
|
|
||||||
vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
|
vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
|
||||||
pcall(vim.treesitter.start, bufnr)
|
pcall(vim.treesitter.start, bufnr)
|
||||||
|
|
||||||
vim.keymap.set({'v','n'}, ']]', function()
|
vim.keymap.set({ 'v', 'n' }, ']]', function()
|
||||||
require('nvim-treesitter-textobjects.move').goto_next_start('@function.outer', 'textobjects')
|
require('nvim-treesitter-textobjects.move').goto_next_start('@function.outer', 'textobjects')
|
||||||
end, { buffer = bufnr, desc = 'next function def' })
|
end, { buffer = bufnr })
|
||||||
vim.keymap.set({'v','n'}, '[[', function()
|
vim.keymap.set({ 'v', 'n' }, '[[', function()
|
||||||
require('nvim-treesitter-textobjects.move').goto_previous_start('@function.outer', 'textobjects')
|
require('nvim-treesitter-textobjects.move').goto_previous_start('@function.outer', 'textobjects')
|
||||||
end, { buffer = bufnr, desc = 'prev function def' })
|
end, { buffer = bufnr })
|
||||||
vim.keymap.set({'v','n'}, ']a', function()
|
vim.keymap.set({ 'v', 'n' }, ']a', function()
|
||||||
require('nvim-treesitter-textobjects.move').goto_next_start('@parameter.inner', 'textobjects')
|
require('nvim-treesitter-textobjects.move').goto_next_start('@parameter.inner', 'textobjects')
|
||||||
end, { buffer = bufnr, desc = 'next param def' })
|
end, { buffer = bufnr })
|
||||||
vim.keymap.set({'v','n'}, '[a', function()
|
vim.keymap.set({ 'v', 'n' }, '[a', function()
|
||||||
require('nvim-treesitter-textobjects.move').goto_previous_start('@parameter.inner', 'textobjects')
|
require('nvim-treesitter-textobjects.move').goto_previous_start('@parameter.inner', 'textobjects')
|
||||||
end, { buffer = bufnr, desc = 'prev param def' })
|
end, { buffer = bufnr })
|
||||||
vim.keymap.set({'v','n'}, ']A', function()
|
vim.keymap.set({ 'v', 'n' }, ']A', function()
|
||||||
require('nvim-treesitter-textobjects.swap').swap_next('@parameter.inner')
|
require('nvim-treesitter-textobjects.swap').swap_next('@parameter.inner')
|
||||||
end, { buffer = bufnr, desc = 'swap next arg' })
|
end, { buffer = bufnr })
|
||||||
vim.keymap.set({'v','n'}, '[A', function()
|
vim.keymap.set({ 'v', 'n' }, '[A', function()
|
||||||
require('nvim-treesitter-textobjects.swap').swap_previous('@parameter.inner')
|
require('nvim-treesitter-textobjects.swap').swap_previous('@parameter.inner')
|
||||||
end, { buffer = bufnr, desc = 'swap prev arg' })
|
end, { buffer = bufnr })
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Init LSP
|
-- Init LSP
|
||||||
vim.api.nvim_create_autocmd('LspAttach', {
|
cmd('LspAttach', {
|
||||||
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
|
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
|
||||||
callback = function(ev)
|
callback = function(ev)
|
||||||
local client = vim.lsp.get_client_by_id(ev.data.client_id)
|
local client = vim.lsp.get_client_by_id(ev.data.client_id)
|
||||||
|
|
@ -69,24 +68,20 @@ vim.api.nvim_create_autocmd('LspAttach', {
|
||||||
end
|
end
|
||||||
vim.keymap.set('n', 'gO', function()
|
vim.keymap.set('n', 'gO', function()
|
||||||
Snacks.picker.lsp_symbols { focus = 'list' }
|
Snacks.picker.lsp_symbols { focus = 'list' }
|
||||||
end, { buffer = ev.buf, desc = 'LSP symbols' })
|
end, { buffer = ev.buf })
|
||||||
|
|
||||||
vim.keymap.set('n', 'grh', function()
|
vim.keymap.set('n', 'grh', function()
|
||||||
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
|
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
|
||||||
end, { buffer = ev.buf, desc = 'LSP hints toggle' })
|
end, { buffer = ev.buf })
|
||||||
vim.keymap.set('n', 'grl', vim.lsp.codelens.run, { buffer = ev.buf, desc = 'vim.lsp.codelens.run()' })
|
vim.keymap.set('n', 'grl', vim.lsp.codelens.run, { buffer = ev.buf })
|
||||||
|
|
||||||
vim.keymap.set('n', 'gre', function()
|
vim.keymap.set('n', 'gre', vim.diagnostic.setloclist, { buffer = ev.buf })
|
||||||
vim.diagnostic.setloclist()
|
vim.keymap.set('n', 'grE', vim.diagnostic.setqflist, { buffer = ev.buf })
|
||||||
end, { buffer = ev.buf, desc = 'LSP buffer diagnostics' })
|
|
||||||
vim.keymap.set('n', 'grE', function()
|
|
||||||
vim.diagnostic.setqflist()
|
|
||||||
end, { buffer = ev.buf, desc = 'LSP diagnostics' })
|
|
||||||
|
|
||||||
-- Auto-refresh code lenses
|
-- Auto-refresh code lenses
|
||||||
if client:supports_method('textDocument/codeLens') or client.server_capabilities.codeLensProvider then
|
if client:supports_method('textDocument/codeLens') or client.server_capabilities.codeLensProvider then
|
||||||
vim.lsp.codelens.refresh { bufnr = ev.buf }
|
vim.lsp.codelens.refresh { bufnr = ev.buf }
|
||||||
vim.api.nvim_create_autocmd({ 'InsertLeave', 'TextChanged' }, {
|
cmd({ 'InsertLeave', 'TextChanged' }, {
|
||||||
callback = function()
|
callback = function()
|
||||||
vim.lsp.codelens.refresh { bufnr = ev.buf }
|
vim.lsp.codelens.refresh { bufnr = ev.buf }
|
||||||
end,
|
end,
|
||||||
|
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
-- Switch tab length on the fly
|
|
||||||
vim.keymap.set('n', '\\t', function()
|
|
||||||
vim.o.tabstop = vim.o.tabstop == 8 and 2 or 2 * vim.o.tabstop
|
|
||||||
vim.notify('tabstop: ' .. vim.o.tabstop)
|
|
||||||
end, { silent = true, desc = 'toggle tabstop' })
|
|
||||||
vim.keymap.set({ 'v', 'i' }, 'wq', '<esc>l', { noremap = true, silent = true })
|
|
||||||
vim.keymap.set('v', '<', '<gv')
|
|
||||||
vim.keymap.set('v', '>', '>gv')
|
|
||||||
vim.keymap.set('n', 'n', 'nzz', { noremap = true })
|
|
||||||
vim.keymap.set('n', 'N', 'Nzz', { noremap = true })
|
|
||||||
vim.keymap.set('n', '<C-u>', '<C-u>zz', { noremap = true })
|
|
||||||
vim.keymap.set('n', '<C-d>', '<C-d>zz', { noremap = true })
|
|
||||||
vim.keymap.set('v', '<A-j>', ":m '>+1<CR>gv=gv", { desc = 'move selection down' })
|
|
||||||
vim.keymap.set('v', '<A-k>', ":m '<-2<CR>gv=gv", { desc = 'move selection up' })
|
|
||||||
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' })
|
|
||||||
|
|
@ -1,73 +0,0 @@
|
||||||
require('mini.basics').setup { mappings = { windows = true } }
|
|
||||||
require('mini.icons').setup()
|
|
||||||
|
|
||||||
vim.schedule(function()
|
|
||||||
require('mini.align').setup()
|
|
||||||
require('mini.pairs').setup()
|
|
||||||
require('mini.surround').setup()
|
|
||||||
require('mini.splitjoin').setup { detect = { separator = '[,;\n]' } }
|
|
||||||
|
|
||||||
local ai = require('mini.ai')
|
|
||||||
ai.setup {
|
|
||||||
n_lines = 300,
|
|
||||||
custom_textobjects = {
|
|
||||||
i = require('mini.extra').gen_ai_spec.indent(),
|
|
||||||
a = ai.gen_spec.treesitter { a = '@parameter.outer', i = '@parameter.inner' },
|
|
||||||
f = ai.gen_spec.treesitter { a = '@function.outer', i = '@function.inner' },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
require('mini.git').setup()
|
|
||||||
vim.keymap.set('n', '<leader>go', function()
|
|
||||||
return MiniGit.show_at_cursor()
|
|
||||||
end, { noremap = true, desc = 'git show at cursor' })
|
|
||||||
vim.keymap.set('n', '<leader>gb', '<Cmd>Git blame -- %<CR>', { desc = 'git blame' })
|
|
||||||
|
|
||||||
local jump = require('mini.jump2d')
|
|
||||||
jump.setup {
|
|
||||||
view = { n_steps_ahead = 1, dim = true },
|
|
||||||
spotter = jump.gen_spotter.vimpattern(),
|
|
||||||
}
|
|
||||||
|
|
||||||
local diff = require('mini.diff')
|
|
||||||
diff.setup {
|
|
||||||
source = {
|
|
||||||
require('lib.minidiff_jj').gen_source(),
|
|
||||||
diff.gen_source.git(),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
vim.keymap.set('n', '<leader>gp', function()
|
|
||||||
MiniDiff.toggle_overlay(0)
|
|
||||||
end, { noremap = true, desc = 'git diff overlay' })
|
|
||||||
|
|
||||||
local files = require('mini.files')
|
|
||||||
files.setup {
|
|
||||||
mappings = {
|
|
||||||
go_in_plus = '<CR>',
|
|
||||||
},
|
|
||||||
windows = {
|
|
||||||
preview = true,
|
|
||||||
width_preview = 50,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
vim.keymap.set('n', '<leader>nc', function()
|
|
||||||
MiniFiles.open(vim.api.nvim_buf_get_name(0), false) -- open current buffer's dir
|
|
||||||
MiniFiles.reveal_cwd()
|
|
||||||
end, { desc = 'minifiles open' })
|
|
||||||
|
|
||||||
vim.keymap.set('n', '`', function()
|
|
||||||
local _, cur_entry_path = pcall(MiniFiles.get_fs_entry().path)
|
|
||||||
local cur_directory = vim.fs.dirname(cur_entry_path)
|
|
||||||
if cur_directory ~= '' then
|
|
||||||
vim.fn.chdir(cur_directory)
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- pass file rename events to LSP
|
|
||||||
vim.api.nvim_create_autocmd('User', {
|
|
||||||
pattern = 'MiniFilesActionRename',
|
|
||||||
callback = function(event)
|
|
||||||
Snacks.rename.on_rename_file(event.data.from, event.data.to)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end)
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
local map = vim.keymap.set
|
||||||
|
|
||||||
|
require('mini.basics').setup { mappings = { windows = true } }
|
||||||
|
require('mini.icons').setup()
|
||||||
|
|
||||||
require('dart').setup {
|
require('dart').setup {
|
||||||
tabline = {
|
tabline = {
|
||||||
label_marked_fg = 'cyan',
|
label_marked_fg = 'cyan',
|
||||||
|
|
@ -30,6 +35,7 @@ require('snacks').setup {
|
||||||
},
|
},
|
||||||
smart = {
|
smart = {
|
||||||
multi = {
|
multi = {
|
||||||
|
'buffers',
|
||||||
{ source = 'files', hidden = true },
|
{ source = 'files', hidden = true },
|
||||||
{ source = 'git_files', untracked = true },
|
{ source = 'git_files', untracked = true },
|
||||||
},
|
},
|
||||||
|
|
@ -38,73 +44,39 @@ require('snacks').setup {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
vim.keymap.set({ 'n', 't' }, '<C-\\>', function()
|
map({ 'n', 't' }, '<C-\\>', Snacks.terminal.toggle)
|
||||||
Snacks.terminal.toggle()
|
map('n', '<leader>ff', Snacks.picker.smart)
|
||||||
end, { desc = 'terminal open' })
|
map('n', '<leader><leader>', Snacks.picker.smart)
|
||||||
|
map('n', '<leader>fa', Snacks.picker.grep)
|
||||||
|
map('n', '<leader>f8', Snacks.picker.grep_word)
|
||||||
|
map('n', '<leader>f?', Snacks.picker.pickers)
|
||||||
|
map('n', '<leader>fu', Snacks.picker.undo)
|
||||||
|
map('n', '<leader>fj', Snacks.picker.jumps)
|
||||||
|
map('n', '<leader>f.', Snacks.picker.resume)
|
||||||
|
map('n', '<leader>fb', Snacks.picker.buffers)
|
||||||
|
map('n', '<leader>fq', Snacks.picker.qflist)
|
||||||
|
map('n', '<leader>jf', require('lib.snacks_jj').status)
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>ff', function()
|
|
||||||
Snacks.picker.smart()
|
|
||||||
end, { desc = 'Fuzzy find smart' })
|
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>fa', function()
|
|
||||||
Snacks.picker.grep()
|
|
||||||
end, { desc = 'Fuzzy find grep' })
|
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>f8', function()
|
|
||||||
Snacks.picker.grep_word()
|
|
||||||
end, { desc = 'Fuzzy find grep word' })
|
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>f?', function()
|
|
||||||
Snacks.picker.pickers()
|
|
||||||
end, { desc = 'See all pickers' })
|
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>fu', function()
|
|
||||||
Snacks.picker.undo()
|
|
||||||
end, { desc = 'Pick undotree' })
|
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>fj', function()
|
|
||||||
Snacks.picker.jumps()
|
|
||||||
end, { desc = 'Pick jumps' })
|
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>f.', function()
|
|
||||||
Snacks.picker.resume()
|
|
||||||
end, { desc = 'Fuzzy find resume' })
|
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>fb', function()
|
|
||||||
Snacks.picker.buffers()
|
|
||||||
end, { desc = 'Fuzzy find buffers' })
|
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>fq', function()
|
|
||||||
Snacks.picker.qflist()
|
|
||||||
end, { desc = 'pick quickfix list' })
|
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>jf', function()
|
|
||||||
require('lib.snacks_jj').status()
|
|
||||||
end, { desc = 'pick notifications' })
|
|
||||||
vim.schedule(function()
|
vim.schedule(function()
|
||||||
require('nvim-treesitter').setup()
|
require('nvim-treesitter').setup()
|
||||||
require('nvim-treesitter-textobjects').setup()
|
require('nvim-treesitter-textobjects').setup()
|
||||||
require('render-markdown').setup()
|
require('render-markdown').setup()
|
||||||
|
|
||||||
require('refactoring').setup()
|
require('refactoring').setup()
|
||||||
vim.keymap.set('n', '<leader>rr', function()
|
map('n', '<leader>rr', require('refactoring').select_refactor)
|
||||||
require('refactoring').select_refactor()
|
map('n', '<leader>rv', function()
|
||||||
end, { desc = 'Refactor' })
|
|
||||||
vim.keymap.set('n', '<leader>rv', function()
|
|
||||||
require('refactoring').refactor('Inline Variable')
|
require('refactoring').refactor('Inline Variable')
|
||||||
end, { desc = 'Inline Variable' })
|
end)
|
||||||
|
|
||||||
require('quicker').setup()
|
require('quicker').setup()
|
||||||
vim.keymap.set('n', '<leader>qf', function()
|
map('n', '<leader>qf', function()
|
||||||
require('quicker').toggle { max_height = 20 }
|
require('quicker').toggle { max_height = 20 }
|
||||||
end, { desc = 'Toggle qflist' })
|
end)
|
||||||
|
|
||||||
|
local close = { { { 'n' }, 'q', vim.cmd.DiffviewClose, { desc = 'Close Diffview' } } }
|
||||||
require('diffview').setup {
|
require('diffview').setup {
|
||||||
use_icons = false,
|
|
||||||
enhanced_diff_hl = true,
|
enhanced_diff_hl = true,
|
||||||
default_args = {
|
default_args = { DiffviewOpen = { '--imply-local' } },
|
||||||
DiffviewOpen = { '--imply-local' },
|
|
||||||
},
|
|
||||||
view = {
|
view = {
|
||||||
merge_tool = {
|
merge_tool = {
|
||||||
layout = 'diff4_mixed',
|
layout = 'diff4_mixed',
|
||||||
|
|
@ -112,21 +84,19 @@ vim.schedule(function()
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
keymaps = {
|
keymaps = {
|
||||||
view = {
|
view = close,
|
||||||
{ { 'n' }, 'q', vim.cmd.DiffviewClose, { desc = 'Close Diffview' } },
|
file_panel = close,
|
||||||
},
|
file_history_panel = close,
|
||||||
file_panel = {
|
|
||||||
{ { 'n' }, 'q', vim.cmd.DiffviewClose, { desc = 'Close Diffview' } },
|
|
||||||
},
|
|
||||||
file_history_panel = {
|
|
||||||
{ { 'n' }, 'q', vim.cmd.DiffviewClose, { desc = 'Close Diffview' } },
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>nb', vim.cmd.DiffviewOpen, { desc = 'diffview open' })
|
map('n', '<leader>nb', vim.cmd.DiffviewOpen)
|
||||||
vim.keymap.set('n', '<leader>nH', vim.cmd.DiffviewFileHistory, { desc = 'diffview history' })
|
map('n', '<leader>nH', vim.cmd.DiffviewFileHistory)
|
||||||
vim.keymap.set('n', '<leader>nh', '<cmd>DiffviewFileHistory %<cr>', { desc = 'diffview history' })
|
map('n', '<leader>nh', '<cmd>DiffviewFileHistory %<cr>')
|
||||||
|
map('n', '<leader>go', function()
|
||||||
|
local id = vim.fn.expand('<cword>')
|
||||||
|
vim.cmd('DiffviewOpen ' .. id .. '~1' .. '..' .. id)
|
||||||
|
end)
|
||||||
|
|
||||||
require('conform').setup {
|
require('conform').setup {
|
||||||
notify_no_formatters = false,
|
notify_no_formatters = false,
|
||||||
|
|
@ -146,14 +116,14 @@ vim.schedule(function()
|
||||||
return { timeout_ms = 1500, lsp_format = 'fallback' }
|
return { timeout_ms = 1500, lsp_format = 'fallback' }
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
vim.keymap.set('n', '\\f', function()
|
map('n', '\\f', function()
|
||||||
vim.b.disable_autoformat = not vim.b.disable_autoformat
|
vim.b.disable_autoformat = not vim.b.disable_autoformat
|
||||||
vim.notify(string.format('Buffer formatting disabled: %s', vim.b.disable_autoformat))
|
vim.notify(string.format('Buffer formatting disabled: %s', vim.b.disable_autoformat))
|
||||||
end, { desc = 'toggle buffer formatting' })
|
end)
|
||||||
vim.keymap.set('n', '\\F', function()
|
map('n', '\\F', function()
|
||||||
vim.g.disable_autoformat = not vim.g.disable_autoformat
|
vim.g.disable_autoformat = not vim.g.disable_autoformat
|
||||||
vim.notify(string.format('Global formatting disabled: %s', vim.g.disable_autoformat))
|
vim.notify(string.format('Global formatting disabled: %s', vim.g.disable_autoformat))
|
||||||
end, { desc = 'toggle global formatting' })
|
end)
|
||||||
|
|
||||||
require('lint').linters_by_ft = {
|
require('lint').linters_by_ft = {
|
||||||
docker = { 'hadolint' },
|
docker = { 'hadolint' },
|
||||||
|
|
@ -180,36 +150,10 @@ vim.schedule(function()
|
||||||
enabled = function()
|
enabled = function()
|
||||||
return not vim.tbl_contains({ 'snacks_picker_input' }, vim.bo.filetype)
|
return not vim.tbl_contains({ 'snacks_picker_input' }, vim.bo.filetype)
|
||||||
end,
|
end,
|
||||||
fuzzy = {
|
|
||||||
sorts = {
|
|
||||||
'exact',
|
|
||||||
'score',
|
|
||||||
'sort_text',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
sources = {
|
sources = {
|
||||||
default = {
|
default = { 'lsp', 'snippets', 'ripgrep', 'buffer' },
|
||||||
'lsp',
|
|
||||||
'path',
|
|
||||||
'snippets',
|
|
||||||
'ripgrep',
|
|
||||||
'buffer',
|
|
||||||
},
|
|
||||||
providers = {
|
providers = {
|
||||||
lsp = {
|
lsp = { fallbacks = {} }, -- include buffer even when LSP is active
|
||||||
fallbacks = {}, -- include buffer even when LSP is active
|
|
||||||
score_offset = 10,
|
|
||||||
},
|
|
||||||
snippets = {
|
|
||||||
score_offset = -10,
|
|
||||||
},
|
|
||||||
path = {
|
|
||||||
opts = {
|
|
||||||
get_cwd = function(_)
|
|
||||||
return vim.fn.getcwd() -- use nvim pwd instead of current file pwd
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
ripgrep = {
|
ripgrep = {
|
||||||
module = 'blink-ripgrep',
|
module = 'blink-ripgrep',
|
||||||
name = 'rg',
|
name = 'rg',
|
||||||
|
|
@ -219,35 +163,94 @@ vim.schedule(function()
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
cmdline = {
|
cmdline = {
|
||||||
completion = {
|
completion = { menu = { auto_show = true } },
|
||||||
menu = {
|
|
||||||
auto_show = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
completion = {
|
completion = {
|
||||||
documentation = {
|
documentation = { auto_show = true },
|
||||||
auto_show = true,
|
|
||||||
auto_show_delay_ms = 500,
|
|
||||||
},
|
|
||||||
menu = {
|
menu = {
|
||||||
draw = {
|
draw = {
|
||||||
treesitter = { 'lsp' },
|
|
||||||
columns = {
|
columns = {
|
||||||
{ 'label', 'label_description', gap = 1 },
|
{ 'label', 'label_description', gap = 1 },
|
||||||
{ 'source_name', 'kind', gap = 1 },
|
{ 'source_name', 'kind', gap = 1 },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
trigger = {
|
|
||||||
show_on_keyword = true,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
signature = {
|
signature = {
|
||||||
enabled = true,
|
enabled = true,
|
||||||
trigger = {
|
trigger = { show_on_insert = true },
|
||||||
show_on_insert = true,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
vim.schedule(function()
|
||||||
|
require('mini.align').setup()
|
||||||
|
require('mini.pairs').setup()
|
||||||
|
require('mini.surround').setup()
|
||||||
|
require('mini.splitjoin').setup { detect = { separator = '[,;\n]' } }
|
||||||
|
|
||||||
|
local ai = require('mini.ai')
|
||||||
|
ai.setup {
|
||||||
|
n_lines = 300,
|
||||||
|
custom_textobjects = {
|
||||||
|
i = require('mini.extra').gen_ai_spec.indent(),
|
||||||
|
a = ai.gen_spec.treesitter { a = '@parameter.outer', i = '@parameter.inner' },
|
||||||
|
f = ai.gen_spec.treesitter { a = '@function.outer', i = '@function.inner' },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
require('mini.git').setup()
|
||||||
|
map('n', '<leader>gb', '<Cmd>Git blame -- %<CR>')
|
||||||
|
|
||||||
|
local jump = require('mini.jump2d')
|
||||||
|
jump.setup {
|
||||||
|
view = { n_steps_ahead = 1, dim = true },
|
||||||
|
spotter = jump.gen_spotter.vimpattern(),
|
||||||
|
}
|
||||||
|
|
||||||
|
local diff = require('mini.diff')
|
||||||
|
diff.setup {
|
||||||
|
source = {
|
||||||
|
require('lib.minidiff_jj').gen_source(),
|
||||||
|
diff.gen_source.git(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
map('n', '<leader>gp', MiniDiff.toggle_overlay)
|
||||||
|
|
||||||
|
require('mini.files').setup {
|
||||||
|
mappings = { go_in_plus = '<CR>' },
|
||||||
|
windows = {
|
||||||
|
preview = true,
|
||||||
|
width_preview = 50,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
map('n', '<leader>nc', function()
|
||||||
|
MiniFiles.open(vim.api.nvim_buf_get_name(0), false) -- open current buffer's dir
|
||||||
|
MiniFiles.reveal_cwd()
|
||||||
|
end)
|
||||||
|
vim.api.nvim_create_autocmd('User', {
|
||||||
|
pattern = 'MiniFilesBufferCreate',
|
||||||
|
callback = function(args)
|
||||||
|
map('n', '<leader>nc', function()
|
||||||
|
MiniFiles.synchronize()
|
||||||
|
MiniFiles.close()
|
||||||
|
end, { buffer = args.data.buf_id })
|
||||||
|
map('n', '`', function()
|
||||||
|
local _, cur_entry_path = pcall(MiniFiles.get_fs_entry().path)
|
||||||
|
local cur_directory = vim.fs.dirname(cur_entry_path)
|
||||||
|
if cur_directory ~= '' then
|
||||||
|
vim.fn.chdir(cur_directory)
|
||||||
|
end
|
||||||
|
end, { buffer = args.data.buf_id })
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- pass file rename events to LSP
|
||||||
|
vim.api.nvim_create_autocmd('User', {
|
||||||
|
group = vim.api.nvim_create_augroup('snacks_rename', { clear = true }),
|
||||||
|
pattern = 'MiniFilesActionRename',
|
||||||
|
callback = function(event)
|
||||||
|
Snacks.rename.on_rename_file(event.data.from, event.data.to)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue