feat(nvim)!: add mini-nvim

This commit is contained in:
Moritz Böhme 2023-05-28 18:23:25 +02:00
parent a66a17984e
commit 1366bf3e08
Signed by: moritz
GPG key ID: 970C6E89EB0547A9
17 changed files with 104 additions and 321 deletions

View file

@ -34,21 +34,12 @@
# Neovim
neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay";
bufferline-nvim.flake = false;
bufferline-nvim.url = "github:akinsho/bufferline.nvim";
cmp-async-path.url = "github:FelipeLema/cmp-async-path";
cmp-async-path.flake = false;
comment-box-nvim.flake = false;
comment-box-nvim.url = "github:LudoPinelli/comment-box.nvim";
copilot-lua.flake = false;
copilot-lua.url = "github:zbirenbaum/copilot.lua";
gitignore-nvim.flake = false;
gitignore-nvim.url = "github:wintermute-cell/gitignore.nvim";
lspsaga-nvim.flake = false;
lspsaga-nvim.url = "github:glepnir/lspsaga.nvim";

View file

@ -75,7 +75,6 @@ in
lsp_lines-nvim
lspkind-nvim
lspsaga-nvim-original
lualine-lsp-progress
luasnip
nui-nvim
nvim-cmp
@ -87,7 +86,6 @@ in
popup-nvim
promise-async
vim-fugitive
vim-lion
vim-tmux-navigator
] ++ pluginsWithConfig;
};

View file

@ -22,10 +22,10 @@ vim.api.nvim_create_autocmd("InsertEnter", {
require("copilot_cmp").setup()
local default_sources = {
{ name = "async_path", priority = 4 },
{ name = "copilot", priority = 3 },
{ name = "async_path", priority = 1 },
{ name = "copilot", priority = 2 },
{ name = "luasnip", priority = 2 },
{ name = "nvim_lsp", priority = 4 },
{ name = "nvim_lsp", priority = 3 },
}
cmp.setup({
@ -75,8 +75,8 @@ vim.api.nvim_create_autocmd("InsertEnter", {
cmp.setup.filetype("org", {
sources = vim.tbl_deep_extend("force", default_sources, {
{ name = "buffer", priority = 5 },
{ name = "orgmode", priority = 5 },
{ name = "buffer", priority = 1 },
{ name = "orgmode", priority = 3 },
}),
})
end,

View file

@ -1,2 +0,0 @@
vim.opt.termguicolors = true
require("bufferline").setup()

View file

@ -1,6 +1,17 @@
require("catppuccin").setup({
compile_path = vim.fn.stdpath("cache") .. "/catppuccin", -- fix issue of writing to nix store
integrations = {
gitsigns = true,
lsp_saga = true,
mini = true,
noice = true,
cmp = true,
native_lsp = {
enabled = true,
},
treesitter = true,
telescope = true,
lsp_trouble = true,
which_key = true,
},
})

View file

@ -1 +0,0 @@
require("Comment").setup()

View file

@ -6,3 +6,6 @@ vim.api.nvim_create_autocmd("VimEnter", {
desc = "Disable Copilot by default on startup",
command = "Copilot disable",
})
require("which-key").register({
c = { "<cmd>Copilot toggle<cr>", "Toggle Copilot" },
}, { prefix = "<leader>t" })

View file

@ -1,9 +0,0 @@
require("dashboard").setup({
theme = "hyper",
config = {
packages = { enable = false },
week_header = {
enable = true,
},
},
})

View file

@ -1,44 +0,0 @@
require("lualine").setup({
options = {
icons_enabled = true,
theme = "auto",
component_separators = "|",
section_separators = { left = "", right = "" },
disabled_filetypes = {
statusline = {},
winbar = {},
},
ignore_focus = {},
always_divide_middle = true,
globalstatus = false,
refresh = {
statusline = 1000,
tabline = 1000,
winbar = 1000,
},
},
sections = {
lualine_a = {
{ "mode", separator = { left = "" }, right_padding = 2 },
},
lualine_b = { "branch", "diff", "diagnostics" },
lualine_c = { "filename", "lsp_progress" },
lualine_x = { "encoding", "fileformat", "filetype" },
lualine_y = { "progress" },
lualine_z = {
{ "location", separator = { right = "" }, left_padding = 2 },
},
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = { "filename" },
lualine_x = { "location" },
lualine_y = {},
lualine_z = {},
},
tabline = {},
winbar = {},
inactive_winbar = {},
extensions = {},
})

View file

@ -0,0 +1,72 @@
require("mini.align").setup()
require("mini.comment").setup()
require("mini.surround").setup()
require("mini.move").setup()
require("mini.pairs").setup()
require("mini.starter").setup()
require("mini.tabline").setup()
local tabline_current = vim.api.nvim_get_hl(0, { name = "MiniTablineCurrent" })
vim.api.nvim_set_hl(0, "MiniTablineCurrent", {
fg = tabline_current.fg,
bg = tabline_current.bg,
bold = true,
italic = true,
})
require("mini.statusline").setup({
content = {
active = function()
local mode, mode_hl = MiniStatusline.section_mode({ trunc_width = 120 })
local git = MiniStatusline.section_git({ trunc_width = 75 })
local diagnostics = MiniStatusline.section_diagnostics({ trunc_width = 75 })
local filename = MiniStatusline.section_filename({ trunc_width = 140 })
local fileinfo = MiniStatusline.section_fileinfo({ trunc_width = 120 })
local location = MiniStatusline.section_location({ trunc_width = 75 })
local mode_hl_inverse = mode_hl .. "Inverse"
-- Usage of `MiniStatusline.combine_groups()` ensures highlighting and
-- correct padding with spaces between groups (accounts for 'missing'
-- sections, etc.)
return MiniStatusline.combine_groups({
{ hl = mode_hl_inverse, strings = {} },
"",
{ hl = mode_hl, strings = { mode } },
{ hl = "MiniStatuslineDevinfo", strings = { git, diagnostics } },
"%<", -- Mark general truncate point
{ hl = "MiniStatuslineFilename", strings = { filename } },
"%=", -- End left alignment
{ hl = "MiniStatuslineFileinfo", strings = { fileinfo } },
{ hl = mode_hl, strings = { location } },
{ hl = mode_hl_inverse, strings = {} },
"",
})
end,
},
})
local MiniStatuslineModes = {
"MiniStatuslineModeInsert",
"MiniStatuslineModeNormal",
"MiniStatuslineModeReplace",
"MiniStatuslineModeVisual",
"MiniStatuslineModeCommand",
"MiniStatuslineModeOther",
}
for _, mode_hl in ipairs(MiniStatuslineModes) do
local hl_table = vim.api.nvim_get_hl(0, { name = mode_hl })
local fg = hl_table.fg
hl_table.fg = hl_table.bg
hl_table.bg = fg
vim.api.nvim_set_hl(0, mode_hl .. "Inverse", hl_table)
end
local animate = require("mini.animate")
local animation = {
timing = animate.gen_timing.quadratic({ duration = 100, unit = "total" }),
}
animate.setup({
cursor = animation,
scroll = { enable = false },
resize = animation,
open = animation,
close = animation,
})

View file

@ -1,195 +0,0 @@
-- Unless you are still migrating, remove the deprecated commands from v1.x
vim.cmd([[ let g:neo_tree_remove_legacy_commands = 1 ]])
require("neo-tree").setup({
close_if_last_window = true, -- Close Neo-tree if it is the last window left in the tab
popup_border_style = "rounded",
enable_git_status = true,
enable_diagnostics = true,
open_files_do_not_replace_types = { "terminal", "trouble", "qf" }, -- when opening files, do not use windows containing these filetypes or buftypes
sort_case_insensitive = false, -- used when sorting files and directories in the tree
sort_function = nil, -- use a custom function for sorting files and directories in the tree
-- sort_function = function (a,b)
-- if a.type == b.type then
-- return a.path > b.path
-- else
-- return a.type > b.type
-- end
-- end , -- this sorts files and directories descendantly
default_component_configs = {
container = {
enable_character_fade = true,
},
indent = {
indent_size = 2,
padding = 1, -- extra padding on left hand side
-- indent guides
with_markers = true,
indent_marker = "",
last_indent_marker = "",
highlight = "NeoTreeIndentMarker",
-- expander config, needed for nesting files
with_expanders = nil, -- if nil and file nesting is enabled, will enable expanders
expander_collapsed = "",
expander_expanded = "",
expander_highlight = "NeoTreeExpander",
},
icon = {
folder_closed = "",
folder_open = "",
folder_empty = "",
-- The next two settings are only a fallback, if you use nvim-web-devicons and configure default icons there
-- then these will never be used.
default = "*",
highlight = "NeoTreeFileIcon",
},
modified = {
symbol = "[+]",
highlight = "NeoTreeModified",
},
name = {
trailing_slash = false,
use_git_status_colors = true,
highlight = "NeoTreeFileName",
},
git_status = {
symbols = {
-- Change type
added = "", -- or "✚", but this is redundant info if you use git_status_colors on the name
modified = "", -- or "", but this is redundant info if you use git_status_colors on the name
deleted = "", -- this can only be used in the git_status source
renamed = "", -- this can only be used in the git_status source
-- Status type
untracked = "",
ignored = "",
unstaged = "",
staged = "",
conflict = "",
},
},
},
window = {
position = "left",
width = 40,
mapping_options = {
noremap = true,
nowait = true,
},
mappings = {
["<cr>"] = "open",
["<esc>"] = "revert_preview",
["P"] = { "toggle_preview", config = { use_float = false } },
["S"] = "open_split",
["s"] = "open_vsplit",
["t"] = "open_tabnew",
["C"] = "close_node",
["z"] = "close_all_nodes",
["a"] = {
"add",
-- this command supports BASH style brace expansion ("x{a,b,c}" -> xa,xb,xc). see `:h neo-tree-file-actions` for details
-- some commands may take optional config options, see `:h neo-tree-mappings` for details
config = {
show_path = "none", -- "none", "relative", "absolute"
},
},
["A"] = "add_directory", -- also accepts the optional config.show_path option like "add". this also supports BASH style brace expansion.
["d"] = "delete",
["r"] = "rename",
["y"] = "copy_to_clipboard",
["x"] = "cut_to_clipboard",
["p"] = "paste_from_clipboard",
["c"] = "copy", -- takes text input for destination, also accepts the optional config.show_path option like "add":
["m"] = "move", -- takes text input for destination, also accepts the optional config.show_path option like "add".
["q"] = "close_window",
["R"] = "refresh",
["?"] = "show_help",
["<"] = "prev_source",
[">"] = "next_source",
},
},
nesting_rules = {},
filesystem = {
filtered_items = {
visible = false, -- when true, they will just be displayed differently than normal items
hide_dotfiles = true,
hide_gitignored = true,
hide_hidden = true, -- only works on Windows for hidden files/directories
hide_by_name = {
--"node_modules"
},
hide_by_pattern = { -- uses glob style patterns
--"*.meta",
--"*/src/*/tsconfig.json",
},
always_show = { -- remains visible even if other settings would normally hide it
--".gitignored",
},
never_show = { -- remains hidden even if visible is toggled to true, this overrides always_show
--".DS_Store",
--"thumbs.db"
},
never_show_by_pattern = { -- uses glob style patterns
--".null-ls_*",
},
},
follow_current_file = false, -- This will find and focus the file in the active buffer every
-- time the current file is changed while the tree is open.
group_empty_dirs = false, -- when true, empty folders will be grouped together
hijack_netrw_behavior = "disabled", -- netrw disabled, opening a directory opens neo-tree
-- in whatever position is specified in window.position
-- "open_current", -- netrw disabled, opening a directory opens within the
-- window like netrw would, regardless of window.position
-- "disabled", -- netrw left alone, neo-tree does not handle opening dirs
use_libuv_file_watcher = false, -- This will use the OS level file watchers to detect changes
-- instead of relying on nvim autocmd events.
window = {
mappings = {
["<bs>"] = "navigate_up",
["."] = "set_root",
["H"] = "toggle_hidden",
["/"] = "fuzzy_finder",
["D"] = "fuzzy_finder_directory",
["#"] = "fuzzy_sorter", -- fuzzy sorting using the fzy algorithm
["f"] = "filter_on_submit",
["<c-x>"] = "clear_filter",
["[g"] = "prev_git_modified",
["]g"] = "next_git_modified",
},
fuzzy_finder_mappings = { -- define keymaps for filter popup window in fuzzy_finder_mode
["<S-tab>"] = "move_cursor_up",
["<tab>"] = "move_cursor_down",
},
},
},
buffers = {
follow_current_file = true, -- This will find and focus the file in the active buffer every
-- time the current file is changed while the tree is open.
group_empty_dirs = true, -- when true, empty folders will be grouped together
show_unloaded = true,
window = {
mappings = {
["bd"] = "buffer_delete",
["<bs>"] = "navigate_up",
["."] = "set_root",
},
},
},
git_status = {
window = {
position = "float",
mappings = {
["A"] = "git_add_all",
["gu"] = "git_unstage_file",
["ga"] = "git_add_file",
["gr"] = "git_revert_file",
["gc"] = "git_commit",
["gp"] = "git_push",
["gg"] = "git_commit_and_push",
},
},
},
})
require("which-key").register({
t = { "<cmd>Neotree toggle reveal<cr>", "Neotree" },
}, { prefix = "<leader>t", silent = true })

View file

@ -17,42 +17,25 @@ null_ls.setup({
},
})
-- disable cspell initially
-- disable (c)spell initially
null_ls.disable("cspell")
null_ls.disable("spell")
-- make sources toggle able
require("which-key").register({
n = {
name = "null-ls",
c = {
s = {
function()
null_ls.toggle("spell")
end,
"spell",
},
S = {
function()
null_ls.toggle("cspell")
end,
"cspell",
},
g = {
function()
null_ls.toggle("gitsigns")
end,
"gitsigns",
},
s = {
function()
null_ls.toggle("shellcheck")
end,
"shellcheck",
},
S = {
function()
null_ls.toggle("statix")
end,
"statix",
},
d = {
function()
null_ls.toggle("deadnix")
end,
"deadnix",
},
},
}, { prefix = "<leader>t" })

View file

@ -1,5 +0,0 @@
require("nvim-autopairs").setup()
-- If you want insert `(` after select function or method item
local cmp_autopairs = require("nvim-autopairs.completion.cmp")
require("cmp").event:on("confirm_done", cmp_autopairs.on_confirm_done())

View file

@ -1 +0,0 @@
require("nvim-surround").setup()

View file

@ -1 +1,4 @@
require("oil").setup()
require("which-key").register({
d = { require("oil").toggle_float, "directory (oil)" },
}, { prefix = "<leader>t" })

View file

@ -1,4 +0,0 @@
require("telescope").load_extension("zoxide")
require("which-key").register({
z = { "<cmd>Telescope zoxide list<cr>", "Find location (Zoxide)" },
}, { prefix = "<leader>f" })

View file

@ -26,27 +26,10 @@ with lib.my;
src = inputs.lspsaga-nvim;
});
cmp-async-path = prev.vimPlugins.cmp-path.overrideAttrs (old: {
cmp-async-path = prev.vimPlugins.cmp-path.overrideAttrs (_: {
pname = "cmp-async-path";
version = mkVersionInput inputs.cmp-async-path;
src = inputs.cmp-async-path;
});
comment-box-nvim = prev.vimUtils.buildVimPluginFrom2Nix {
pname = "comment-box-nvim";
version = mkVersionInput inputs.comment-box-nvim;
src = inputs.comment-box-nvim;
};
gitignore-nvim = prev.vimUtils.buildVimPluginFrom2Nix {
pname = "gitignore-nvim";
version = mkVersionInput inputs.gitignore-nvim;
src = inputs.gitignore-nvim;
};
bufferline-nvim = prev.vimPlugins.bufferline-nvim.overrideAttrs (_: {
version = mkVersionInput inputs.bufferline-nvim;
src = inputs.bufferline-nvim;
});
};
}