diff --git a/init.lua b/init.lua index 2514f9e..15e26e8 100644 --- a/init.lua +++ b/init.lua @@ -1,2 +1,7 @@ -- bootstrap lazy.nvim, LazyVim and your plugins -require("config.lazy") + +if vim.g.vscode then + require('config.lazyvscode') +else + require("config.lazy") +end diff --git a/lua/baremetal/flash.lua b/lua/baremetal/flash.lua new file mode 100644 index 0000000..3c24863 --- /dev/null +++ b/lua/baremetal/flash.lua @@ -0,0 +1,17 @@ +return{ + { + "folke/flash.nvim", + event = "VeryLazy", + ---@type Flash.Config + opts = {}, + modes = {search = {enabled = true}}, + -- stylua: ignore + keys = { + { "s", mode = { "n", "x", "o" }, function() require("flash").jump() end, desc = "Flash" }, + { "S", mode = { "n", "x", "o" }, function() require("flash").treesitter() end, desc = "Flash Treesitter" }, + -- { "r", mode = "o", function() require("flash").remote() end, desc = "Remote Flash" }, + -- { "R", mode = { "o", "x" }, function() require("flash").treesitter_search() end, desc = "Treesitter Search" }, + -- { "", mode = { "c" }, function() require("flash").toggle() end, desc = "Toggle Flash Search" }, + }, + } +} diff --git a/lua/baremetal/gitsigns.lua b/lua/baremetal/gitsigns.lua new file mode 100644 index 0000000..a2289de --- /dev/null +++ b/lua/baremetal/gitsigns.lua @@ -0,0 +1,59 @@ +return { + { + "lewis6991/gitsigns.nvim", + event = { "BufReadPre", "BufNewFile" }, + opts = { + signs = { + add = { text = '┃' }, + change = { text = '┃' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + untracked = { text = '┆' }, + }, + signs_staged = { + add = { text = '┃' }, + change = { text = '┃' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + untracked = { text = '┆' }, + }, + signs_staged_enable = true, + signcolumn = true, -- Toggle with `:Gitsigns toggle_signs` + numhl = false, -- Toggle with `:Gitsigns toggle_numhl` + linehl = false, -- Toggle with `:Gitsigns toggle_linehl` + word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff` + watch_gitdir = { + follow_files = true + }, + auto_attach = true, + attach_to_untracked = false, + current_line_blame = true, -- Toggle with `:Gitsigns toggle_current_line_blame` + current_line_blame_opts = { + virt_text = true, + virt_text_pos = 'eol', -- 'eol' | 'overlay' | 'right_align' + delay = 1000, + ignore_whitespace = false, + virt_text_priority = 100, + use_focus = true, + }, + current_line_blame_formatter = ', - ', + sign_priority = 6, + update_debounce = 100, + status_formatter = nil, -- Use default + max_file_length = 40000, -- Disable if file is longer than this (in lines) + preview_config = { + -- Options passed to nvim_open_win + border = 'single', + style = 'minimal', + relative = 'cursor', + row = 0, + col = 1 + }, + }, + config = function(_, opts) + require('gitsigns').setup(opts) + end + } +} diff --git a/lua/baremetal/lualine.lua b/lua/baremetal/lualine.lua new file mode 100644 index 0000000..366f840 --- /dev/null +++ b/lua/baremetal/lualine.lua @@ -0,0 +1,83 @@ +return { + { + 'nvim-lualine/lualine.nvim', + dependencies = { 'nvim-tree/nvim-web-devicons' }, + opts = { + options = { + theme = "auto", + }, + -- sections = { + -- lualine_c = { + -- -- 显示当前窗口编号(格式:[窗口号] 文件名) + -- function() + -- return "[" .. tostring(vim.api.nvim_win_get_number(0)) .. "] " .. vim.fn.expand("%:t") + -- end, + -- }, + -- }, + } + } +} + +-- local colors = { +-- blue = '#80a0ff', +-- cyan = '#79dac8', +-- black = '#080808', +-- white = '#c6c6c6', +-- red = '#ff5189', +-- violet = '#d183e8', +-- grey = '#303030', +-- } + +-- local bubbles_theme = { +-- normal = { +-- a = { fg = colors.black, bg = colors.violet }, +-- b = { fg = colors.white, bg = colors.grey }, +-- c = { fg = colors.white }, +-- }, + +-- insert = { a = { fg = colors.black, bg = colors.blue } }, +-- visual = { a = { fg = colors.black, bg = colors.cyan } }, +-- replace = { a = { fg = colors.black, bg = colors.red } }, + +-- inactive = { +-- a = { fg = colors.white, bg = colors.black }, +-- b = { fg = colors.white, bg = colors.black }, +-- c = { fg = colors.white }, +-- }, +-- } + +-- return { +-- { +-- 'nvim-lualine/lualine.nvim', +-- dependencies = { 'nvim-tree/nvim-web-devicons' }, +-- opts = { +-- options = { +-- theme = bubbles_theme, +-- component_separators = '', +-- section_separators = { left = '', right = '' }, +-- }, +-- }, +-- sections = { +-- lualine_a = { { 'mode', separator = { left = '' }, right_padding = 2 } }, +-- lualine_b = { 'filename', 'branch' }, +-- lualine_c = { +-- '%=', --[[ add your center components here in place of this comment ]] +-- }, +-- lualine_x = {}, +-- lualine_y = { 'filetype', 'progress' }, +-- lualine_z = { +-- { 'location', separator = { right = '' }, left_padding = 2 }, +-- }, +-- }, +-- inactive_sections = { +-- lualine_a = { 'filename' }, +-- lualine_b = {}, +-- lualine_c = {}, +-- lualine_x = {}, +-- lualine_y = {}, +-- lualine_z = { 'location' }, +-- }, +-- tabline = {}, +-- extensions = {}, +-- } +-- } diff --git a/lua/baremetal/nvim-surround.lua b/lua/baremetal/nvim-surround.lua new file mode 100644 index 0000000..95c49ab --- /dev/null +++ b/lua/baremetal/nvim-surround.lua @@ -0,0 +1,12 @@ +return{ + { + "kylechui/nvim-surround", + version = "^3.0.0", -- Use for stability; omit to use `main` branch for the latest features + event = "VeryLazy", + config = function() + require("nvim-surround").setup({ + -- Configuration here, or leave empty to use defaults + }) + end + } +} diff --git a/lua/baremetal/nvim-tree.lua b/lua/baremetal/nvim-tree.lua new file mode 100644 index 0000000..2918733 --- /dev/null +++ b/lua/baremetal/nvim-tree.lua @@ -0,0 +1,11 @@ +return { + "nvim-tree/nvim-tree.lua", + version = "*", + lazy = false, + dependencies = { + "nvim-tree/nvim-web-devicons", + }, + config = function() + require("nvim-tree").setup {} + end, + } \ No newline at end of file diff --git a/lua/baremetal/nvim-window.lua b/lua/baremetal/nvim-window.lua new file mode 100644 index 0000000..0032cd9 --- /dev/null +++ b/lua/baremetal/nvim-window.lua @@ -0,0 +1,9 @@ +return { + { + "yorickpeterse/nvim-window", + keys = { + { "w", "lua require('nvim-window').pick()", desc = "nvim-window: Jump to window" }, + }, + config = true, + } +} diff --git a/lua/baremetal/treesitter.lua b/lua/baremetal/treesitter.lua new file mode 100644 index 0000000..25f3434 --- /dev/null +++ b/lua/baremetal/treesitter.lua @@ -0,0 +1,115 @@ +return { + { + "nvim-treesitter/nvim-treesitter", + version = false, -- last release is way too old and doesn't work on Windows + build = ":TSUpdate", + event = { "VeryLazy" }, + lazy = vim.fn.argc(-1) == 0, -- load treesitter early when opening a file from the cmdline + init = function(plugin) + -- PERF: add nvim-treesitter queries to the rtp and it's custom query predicates early + -- This is needed because a bunch of plugins no longer `require("nvim-treesitter")`, which + -- no longer trigger the **nvim-treesitter** module to be loaded in time. + -- Luckily, the only things that those plugins need are the custom queries, which we make available + -- during startup. + require("lazy.core.loader").add_to_rtp(plugin) + require("nvim-treesitter.query_predicates") + end, + cmd = { "TSUpdateSync", "TSUpdate", "TSInstall" }, + keys = { + { "", desc = "Increment Selection" }, + { "", desc = "Decrement Selection", mode = "x" }, + }, + opts_extend = { "ensure_installed" }, + ---@type TSConfig + ---@diagnostic disable-next-line: missing-fields + opts = { + highlight = { enable = true }, + indent = { enable = true }, + ensure_installed = { + "bash", + "c", + "diff", + "html", + "javascript", + "jsdoc", + "json", + "jsonc", + "lua", + "luadoc", + "luap", + "markdown", + "markdown_inline", + "printf", + "python", + "query", + "regex", + "toml", + "tsx", + "typescript", + "vim", + "vimdoc", + "xml", + "yaml", + }, + incremental_selection = { + enable = true, + keymaps = { + init_selection = "", + node_incremental = "", + scope_incremental = false, + node_decremental = "", + }, + }, + textobjects = { + move = { + enable = true, + goto_next_start = { ["]f"] = "@function.outer", ["]c"] = "@class.outer", ["]a"] = "@parameter.inner" }, + goto_next_end = { ["]F"] = "@function.outer", ["]C"] = "@class.outer", ["]A"] = "@parameter.inner" }, + goto_previous_start = { ["[f"] = "@function.outer", ["[c"] = "@class.outer", ["[a"] = "@parameter.inner" }, + goto_previous_end = { ["[F"] = "@function.outer", ["[C"] = "@class.outer", ["[A"] = "@parameter.inner" }, + }, + }, + }, + -- ---@param opts TSConfig + -- config = function(_, opts) + -- if type(opts.ensure_installed) == "table" then + -- opts.ensure_installed = LazyVim.dedup(opts.ensure_installed) + -- end + -- require("nvim-treesitter.configs").setup(opts) + -- end, + }, + + { + "nvim-treesitter/nvim-treesitter-textobjects", + event = "VeryLazy", + enabled = true, + config = function() + -- If treesitter is already loaded, we need to run config again for textobjects + -- if LazyVim.is_loaded("nvim-treesitter") then + -- local opts = leLazyVim.opts("nvim-treesitter") + -- require("nvim-treesitter.configs").setup({ textobjects = opts.textobjects }) + -- end + + -- When in diff mode, we want to use the default + -- vim text objects c & C instead of the treesitter ones. + local move = require("nvim-treesitter.textobjects.move") ---@type table + local configs = require("nvim-treesitter.configs") + for name, fn in pairs(move) do + if name:find("goto") == 1 then + move[name] = function(q, ...) + if vim.wo.diff then + local config = configs.get_module("textobjects.move")[name] ---@type table + for key, query in pairs(config or {}) do + if q == query and key:find("[%]%[][cC]") then + vim.cmd("normal! " .. key) + return + end + end + end + return fn(q, ...) + end + end + end + end, + }, +} diff --git a/lua/baremetal/wichkey.lua b/lua/baremetal/wichkey.lua new file mode 100644 index 0000000..f65d844 --- /dev/null +++ b/lua/baremetal/wichkey.lua @@ -0,0 +1,91 @@ +return { + -- { + -- "folke/which-key.nvim", + -- event = "VeryLazy", + -- opts = { + -- -- your configuration comes here + -- -- or leave it empty to use the default settings + -- -- refer to the configuration section below + -- }, + -- keys = { + -- { + -- "?", + -- function() + -- require("which-key").show({ global = false }) + -- end, + -- desc = "Buffer Local Keymaps (which-key)", + -- }, + -- }, + -- }, + { + "folke/which-key.nvim", + event = "VeryLazy", + opts_extend = { "spec" }, + opts = { + preset = "helix", + defaults = {}, + spec = { + { + mode = { "n", "v" }, + -- { "", group = "tabs" }, + { "c", group = "code" }, + -- { "d", group = "debug" }, + -- { "dp", group = "profiler" }, + { "f", group = "file/find" }, + { "g", group = "git" }, + -- { "gh", group = "hunks" }, + { "q", group = "quit/session" }, + { "s", group = "search" }, + { "u", group = "ui", icon = { icon = "󰙵 ", color = "cyan" } }, + { "x", group = "diagnostics/quickfix", icon = { icon = "󱖫 ", color = "green" } }, + { "[", group = "prev" }, + { "]", group = "next" }, + { "g", group = "goto" }, + { "gs", group = "surround" }, + { "z", group = "fold" }, + { + "b", + group = "buffer", + expand = function() + return require("which-key.extras").expand.buf() + end, + }, + -- { + -- "w", + -- group = "windows", + -- proxy = "", + -- expand = function() + -- return require("which-key.extras").expand.win() + -- end, + -- }, + -- better descriptions + { "gx", desc = "Open with system app" }, + }, + }, + }, + keys = { + { + "?", + function() + require("which-key").show({ global = false }) + end, + desc = "Buffer Keymaps (which-key)", + }, + { + "", + function() + require("which-key").show({ keys = "", loop = true }) + end, + desc = "Window Hydra Mode (which-key)", + }, + }, + config = function(_, opts) + local wk = require("which-key") + wk.setup(opts) + if not vim.tbl_isempty(opts.defaults) then + -- LazyVim.warn("which-key: opts.defaults is deprecated. Please use opts.spec instead.") + wk.register(opts.defaults) + end + end, + }, +} diff --git a/lua/config/lazy.lua b/lua/config/lazy.lua index 2d85fc5..0bb73b4 100644 --- a/lua/config/lazy.lua +++ b/lua/config/lazy.lua @@ -1,141 +1,114 @@ local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end end vim.opt.rtp:prepend(lazypath) -if not vim.g.vscode then - require("lazy").setup({ - spec = { - -- add LazyVim and import its plugins - { "LazyVim/LazyVim", import = "lazyvim.plugins" }, - -- import/override with your plugins - { import = "plugins" }, - }, - defaults = { - -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. - -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. - lazy = false, - -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, - -- have outdated releases, which may break your Neovim install. - version = false, -- always use the latest git commit - -- version = "*", -- try installing the latest stable version for plugins that support semver - }, - install = { colorscheme = { "tokyonight", "habamax" } }, - checker = { - enabled = true, -- check for plugin updates periodically - notify = false, -- notify on update - }, -- automatically check for plugin updates - performance = { - rtp = { - -- disable some rtp plugins - disabled_plugins = { - "gzip", - -- "matchit", - -- "matchparen", - -- "netrwPlugin", - "tarPlugin", - "tohtml", - "tutor", - "zipPlugin", - }, - }, - }, - }) +if true then + require("lazy").setup({ + spec = { + -- add LazyVim and import its plugins + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + -- import/override with your plugins + { import = "lazyvim" }, + }, + defaults = { + -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. + -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. + lazy = false, + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = false, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + }, + install = { colorscheme = { "tokyonight", "habamax" } }, + checker = { + enabled = true, -- check for plugin updates periodically + notify = false, -- notify on update + }, -- automatically check for plugin updates + performance = { + rtp = { + -- disable some rtp plugins + disabled_plugins = { + "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + "tarPlugin", + "tohtml", + "tutor", + "zipPlugin", + }, + }, + }, + }) else - -- 1.options - -- Hint: use `:h