From e6f34faa53b5af7cbc497ab535ec3eefe0dd099c Mon Sep 17 00:00:00 2001 From: Daniel B Sherry Date: Mon, 23 Dec 2024 17:19:39 -0600 Subject: [PATCH] added bufferline and others --- lua/user/autopairs.lua | 33 ++++++++ lua/user/bufferline.lua | 167 +++++++++++++++++++++++++++++++++++++++ lua/user/colorscheme.lua | 5 +- lua/user/keymaps.lua | 3 + lua/user/nvim-tree.lua | 80 +++++++++++++++++++ lua/user/options.lua | 2 +- lua/user/plugins.lua | 15 +++- lua/user/telescope.lua | 31 -------- lua/user/treesitter.lua | 23 ++++++ 9 files changed, 323 insertions(+), 36 deletions(-) create mode 100644 lua/user/autopairs.lua create mode 100644 lua/user/bufferline.lua create mode 100644 lua/user/nvim-tree.lua create mode 100644 lua/user/treesitter.lua diff --git a/lua/user/autopairs.lua b/lua/user/autopairs.lua new file mode 100644 index 00000000..577e571e --- /dev/null +++ b/lua/user/autopairs.lua @@ -0,0 +1,33 @@ +-- Setup nvim-cmp. +local status_ok, npairs = pcall(require, "nvim-autopairs") +if not status_ok then + return +end + +npairs.setup { + check_ts = true, + ts_config = { + lua = { "string", "source" }, + javascript = { "string", "template_string" }, + java = false, + }, + disable_filetype = { "TelescopePrompt", "spectre_panel" }, + fast_wrap = { + map = "", + chars = { "{", "[", "(", '"', "'" }, + pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], "%s+", ""), + offset = 0, -- Offset from pattern match + end_key = "$", + keys = "qwertyuiopzxcvbnmasdfghjkl", + check_comma = true, + highlight = "PmenuSel", + highlight_grey = "LineNr", + }, +} + +local cmp_autopairs = require "nvim-autopairs.completion.cmp" +local cmp_status_ok, cmp = pcall(require, "cmp") +if not cmp_status_ok then + return +end +cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done { map_char = { tex = "" } }) diff --git a/lua/user/bufferline.lua b/lua/user/bufferline.lua new file mode 100644 index 00000000..7d98cf07 --- /dev/null +++ b/lua/user/bufferline.lua @@ -0,0 +1,167 @@ +local status_ok, bufferline = pcall(require, "bufferline") +if not status_ok then + return +end + +bufferline.setup { + options = { + numbers = "none", -- | "ordinal" | "buffer_id" | "both" | function({ ordinal, id, lower, raise }): string, + close_command = "Bdelete! %d", -- can be a string | function, see "Mouse actions" + right_mouse_command = "Bdelete! %d", -- can be a string | function, see "Mouse actions" + left_mouse_command = "buffer %d", -- can be a string | function, see "Mouse actions" + middle_mouse_command = nil, -- can be a string | function, see "Mouse actions" + -- NOTE: this plugin is designed with this icon in mind, + -- and so changing this is NOT recommended, this is intended + -- as an escape hatch for people who cannot bear it for whatever reason + indicator_icon = "▎", + buffer_close_icon = "", + -- buffer_close_icon = '', + modified_icon = "●", + close_icon = "", + -- close_icon = '', + left_trunc_marker = "", + right_trunc_marker = "", + --- name_formatter can be used to change the buffer's label in the bufferline. + --- Please note some names can/will break the + --- bufferline so use this at your discretion knowing that it has + --- some limitations that will *NOT* be fixed. + -- name_formatter = function(buf) -- buf contains a "name", "path" and "bufnr" + -- -- remove extension from markdown files for example + -- if buf.name:match('%.md') then + -- return vim.fn.fnamemodify(buf.name, ':t:r') + -- end + -- end, + max_name_length = 30, + max_prefix_length = 30, -- prefix used when a buffer is de-duplicated + tab_size = 21, + diagnostics = false, -- | "nvim_lsp" | "coc", + diagnostics_update_in_insert = false, + -- diagnostics_indicator = function(count, level, diagnostics_dict, context) + -- return "("..count..")" + -- end, + -- NOTE: this will be called a lot so don't do any heavy processing here + -- custom_filter = function(buf_number) + -- -- filter out filetypes you don't want to see + -- if vim.bo[buf_number].filetype ~= "" then + -- return true + -- end + -- -- filter out by buffer name + -- if vim.fn.bufname(buf_number) ~= "" then + -- return true + -- end + -- -- filter out based on arbitrary rules + -- -- e.g. filter out vim wiki buffer from tabline in your work repo + -- if vim.fn.getcwd() == "" and vim.bo[buf_number].filetype ~= "wiki" then + -- return true + -- end + -- end, + offsets = { { filetype = "NvimTree", text = "", padding = 1 } }, + show_buffer_icons = true, + show_buffer_close_icons = true, + show_close_icon = true, + show_tab_indicators = true, + persist_buffer_sort = true, -- whether or not custom sorted buffers should persist + -- can also be a table containing 2 custom separators + -- [focused and unfocused]. eg: { '|', '|' } + separator_style = "thin", -- | "thick" | "thin" | { 'any', 'any' }, + enforce_regular_tabs = true, + always_show_bufferline = true, + -- sort_by = 'id' | 'extension' | 'relative_directory' | 'directory' | 'tabs' | function(buffer_a, buffer_b) + -- -- add custom logic + -- return buffer_a.modified > buffer_b.modified + -- end + }, + highlights = { + fill = { + guifg = { attribute = "fg", highlight = "#ff0000" }, + guibg = { attribute = "bg", highlight = "TabLine" }, + }, + background = { + guifg = { attribute = "fg", highlight = "TabLine" }, + guibg = { attribute = "bg", highlight = "TabLine" }, + }, + + -- buffer_selected = { + -- guifg = {attribute='fg',highlight='#ff0000'}, + -- guibg = {attribute='bg',highlight='#0000ff'}, + -- gui = 'none' + -- }, + buffer_visible = { + guifg = { attribute = "fg", highlight = "TabLine" }, + guibg = { attribute = "bg", highlight = "TabLine" }, + }, + + close_button = { + guifg = { attribute = "fg", highlight = "TabLine" }, + guibg = { attribute = "bg", highlight = "TabLine" }, + }, + close_button_visible = { + guifg = { attribute = "fg", highlight = "TabLine" }, + guibg = { attribute = "bg", highlight = "TabLine" }, + }, + -- close_button_selected = { + -- guifg = {attribute='fg',highlight='TabLineSel'}, + -- guibg ={attribute='bg',highlight='TabLineSel'} + -- }, + + tab_selected = { + guifg = { attribute = "fg", highlight = "Normal" }, + guibg = { attribute = "bg", highlight = "Normal" }, + }, + tab = { + guifg = { attribute = "fg", highlight = "TabLine" }, + guibg = { attribute = "bg", highlight = "TabLine" }, + }, + tab_close = { + -- guifg = {attribute='fg',highlight='LspDiagnosticsDefaultError'}, + guifg = { attribute = "fg", highlight = "TabLineSel" }, + guibg = { attribute = "bg", highlight = "Normal" }, + }, + + duplicate_selected = { + guifg = { attribute = "fg", highlight = "TabLineSel" }, + guibg = { attribute = "bg", highlight = "TabLineSel" }, + gui = "italic", + }, + duplicate_visible = { + guifg = { attribute = "fg", highlight = "TabLine" }, + guibg = { attribute = "bg", highlight = "TabLine" }, + gui = "italic", + }, + duplicate = { + guifg = { attribute = "fg", highlight = "TabLine" }, + guibg = { attribute = "bg", highlight = "TabLine" }, + gui = "italic", + }, + + modified = { + guifg = { attribute = "fg", highlight = "TabLine" }, + guibg = { attribute = "bg", highlight = "TabLine" }, + }, + modified_selected = { + guifg = { attribute = "fg", highlight = "Normal" }, + guibg = { attribute = "bg", highlight = "Normal" }, + }, + modified_visible = { + guifg = { attribute = "fg", highlight = "TabLine" }, + guibg = { attribute = "bg", highlight = "TabLine" }, + }, + + separator = { + guifg = { attribute = "bg", highlight = "TabLine" }, + guibg = { attribute = "bg", highlight = "TabLine" }, + }, + separator_selected = { + guifg = { attribute = "bg", highlight = "Normal" }, + guibg = { attribute = "bg", highlight = "Normal" }, + }, + -- separator_visible = { + -- guifg = {attribute='bg',highlight='TabLine'}, + -- guibg = {attribute='bg',highlight='TabLine'} + -- }, + indicator_selected = { + guifg = { attribute = "fg", highlight = "LspDiagnosticsDefaultHint" }, + guibg = { attribute = "bg", highlight = "Normal" }, + }, + }, +} diff --git a/lua/user/colorscheme.lua b/lua/user/colorscheme.lua index e180a953..64832a44 100644 --- a/lua/user/colorscheme.lua +++ b/lua/user/colorscheme.lua @@ -1,7 +1,6 @@ -local colorscheme = 'default' +local colorscheme = "tokyonight" -local status_ok, _ = pcall(vim.cmd, 'colorscheme ' .. colorscheme) +local status_ok, _ = pcall(vim.cmd, "colorscheme " .. colorscheme) if not status_ok then - vim.notify('colorscheme ' .. colorscheme .. ' not found!') return end diff --git a/lua/user/keymaps.lua b/lua/user/keymaps.lua index ec910283..27e6d708 100644 --- a/lua/user/keymaps.lua +++ b/lua/user/keymaps.lua @@ -106,3 +106,6 @@ vim.keymap.set('n', 'sn', function() builtin.find_files { cwd = vim.fn.stdpath 'config' } end, { desc = '[S]earch [N]eovim files' }) +-- Nvimtree +keymap("n", "e", ":NvimTreeToggle", opts) +keymap("n", "f", ":Format", opts) diff --git a/lua/user/nvim-tree.lua b/lua/user/nvim-tree.lua new file mode 100644 index 00000000..4fbe99e5 --- /dev/null +++ b/lua/user/nvim-tree.lua @@ -0,0 +1,80 @@ +local status_ok, nvim_tree = pcall(require, "nvim-tree") +if not status_ok then + return +end + +local function my_on_attach(bufnr) + local api = require "nvim-tree.api" + + local function opts(desc) + return { desc = "nvim-tree: " .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true } + end + + -- default mappings + api.config.mappings.default_on_attach(bufnr) + + -- custom mappings + vim.keymap.set("n", "", api.tree.change_root_to_parent, opts("Up")) + vim.keymap.set("n", "?", api.tree.toggle_help, opts("Help")) + vim.keymap.set("n", "l", api.node.open.edit, opts("Open")) + vim.keymap.set("n", "h", api.node.navigate.parent_close, opts("close_node")) +end + + +-- set termguicolors to enable highlight groups +vim.opt.termguicolors = true + +-- OR setup with some options +nvim_tree.setup({ + on_attach = my_on_attach, + sort_by = "case_sensitive", + view = { + adaptive_size = true, + }, + hijack_cursor = true, + renderer = { + highlight_git = true, + root_folder_modifier = ":t", + icons = { + show = { + file = true, + folder = true, + folder_arrow = true, + git = true, + }, + glyphs = { + default = "", + symlink = "", + git = { + unstaged = "", + staged = "S", + unmerged = "", + renamed = "➜", + deleted = "", + untracked = "U", + ignored = "◌", + }, + folder = { + default = "", + open = "", + empty = "", + empty_open = "", + symlink = "", + }, + } + } + }, + filters = { + dotfiles = true, + }, + update_cwd = true, + diagnostics = { + enable = true, + icons = { + hint = "", + info = "", + warning = "", + error = "", + }, + }, +}) diff --git a/lua/user/options.lua b/lua/user/options.lua index 68636b6e..98db1d4c 100644 --- a/lua/user/options.lua +++ b/lua/user/options.lua @@ -16,7 +16,7 @@ local options = { splitbelow = true, -- force all horizontal splits to go below current window splitright = true, -- force all vertical splits to go to the right of current window swapfile = false, -- creates a swapfile - termguicolors = true, -- set term gui colors (most terminals support this) + termguicolors = true, -- set term gui colors (most terminals support this) timeoutlen = 1000, -- time to wait for a mapped sequence to complete (in milliseconds) undofile = true, -- enable persistent undo updatetime = 300, -- faster completion (4000ms default) diff --git a/lua/user/plugins.lua b/lua/user/plugins.lua index 9bfec7cf..3309b6c9 100644 --- a/lua/user/plugins.lua +++ b/lua/user/plugins.lua @@ -44,10 +44,15 @@ return packer.startup(function(use) use "wbthomason/packer.nvim" -- Have packer manage itself use "nvim-lua/popup.nvim" -- An implementation of the Popup API from vim in Neovim use "nvim-lua/plenary.nvim" -- Useful lua functions used ny lots of plugins - + use "windwp/nvim-autopairs" -- Autopairs + -- use "numToStr/Comment.nvim" -- Easily comment stuff + use 'kyazdani42/nvim-web-devicons' + use 'kyazdani42/nvim-tree.lua' -- Colorschemes -- use "lunarvim/colorschemes" -- A bunch of colorschemes you can try out use "lunarvim/darkplus.nvim" + use "akinsho/bufferline.nvim" + use "moll/vim-bbye" -- cmp plugins use "hrsh7th/nvim-cmp" -- The completion plugin @@ -73,6 +78,14 @@ return packer.startup(function(use) } use "nvim-telescope/telescope-media-files.nvim" + -- Treesitter + use { + "nvim-treesitter/nvim-treesitter", + run = ":TSUpdate", + } +-- use "p00f/nvim-ts-rainbow" +-- use "nvim-treesitter/playground" + -- Automatically set up your configuration after cloning packer.nvim -- Put this at the end after all plugins if PACKER_BOOTSTRAP then diff --git a/lua/user/telescope.lua b/lua/user/telescope.lua index e36adec8..07c6d523 100644 --- a/lua/user/telescope.lua +++ b/lua/user/telescope.lua @@ -8,37 +8,6 @@ telescope.load_extension('media_files') local actions = require "telescope.actions" local builtin = require 'telescope.builtin' --- -- Enable Telescope extensions if they are installed --- pcall(require('telescope').load_extension, 'fzf') --- pcall(require('telescope').load_extension, 'ui-select') --- --- --- -- Slightly advanced example of overriding default behavior and theme --- vim.keymap.set('n', '/', function() --- -- You can pass additional configuration to Telescope to change the theme, layout, etc. --- builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { --- winblend = 10, --- previewer = false, --- }) --- end, { desc = '[/] Fuzzily search in current buffer' }) --- --- -- It's also possible to pass additional configuration options. --- -- See `:help telescope.builtin.live_grep()` for information about particular keys --- vim.keymap.set('n', 's/', function() --- builtin.live_grep { --- grep_open_files = true, --- prompt_title = 'Live Grep in Open Files', --- } --- end, { desc = '[S]earch [/] in Open Files' }) --- --- -- Shortcut for searching your Neovim configuration files --- vim.keymap.set('n', 'sn', function() --- builtin.find_files { cwd = vim.fn.stdpath 'config' } --- end, { desc = '[S]earch [N]eovim files' }) --- end, --- }, --- - telescope.setup { defaults = { diff --git a/lua/user/treesitter.lua b/lua/user/treesitter.lua new file mode 100644 index 00000000..adffb3f6 --- /dev/null +++ b/lua/user/treesitter.lua @@ -0,0 +1,23 @@ +local status_ok, configs = pcall(require, "nvim-treesitter.configs") +if not status_ok then + return +end + +configs.setup { + ensure_installed = "all", -- one of "all", "maintained" (parsers with maintainers), or a list of languages + sync_install = false, -- install languages synchronously (only applied to `ensure_installed`) + ignore_install = { "" }, -- List of parsers to ignore installing + autopairs = { + enable = true, + }, + highlight = { + enable = true, -- false will disable the whole extension + disable = { "" }, -- list of language that will be disabled + additional_vim_regex_highlighting = true, + }, + indent = { enable = true, disable = { "yaml" } }, + context_commentstring = { + enable = true, + enable_autocmd = false, + }, +}