From 2248d3a237067b75d31a42c4eeb7b1471601f28e Mon Sep 17 00:00:00 2001 From: js0ny Date: Sun, 9 Feb 2025 18:27:53 +0000 Subject: [PATCH] nvim changes * refractor(nvim-lualine): lualine in powerline style * feat(nvim, emacs): Org Mode Integrations Setup * feat(nvim): C-w keymaps * feat(wezterm): Change tab bar to top * feat(nvim): catppuccin integrations * feat(nvim-cmp): Icon supports --- tools/doom/org.el | 7 ++ tools/nvim/lua/config/colors.lua | 69 ++++++++++--- tools/nvim/lua/config/colorscheme.lua | 2 +- tools/nvim/lua/config/icons.lua | 27 +++++ tools/nvim/lua/config/options.lua | 3 + tools/nvim/lua/keymaps/init.lua | 2 + tools/nvim/lua/keymaps/modifier.lua | 10 ++ tools/nvim/lua/plugins/appearance.lua | 23 ++++- tools/nvim/lua/plugins/lsp.lua | 21 +++- tools/nvim/lua/plugins/mod/bufferline.lua | 6 ++ .../lua/plugins/mod/lualine/components.lua | 98 ++++++------------- tools/nvim/lua/plugins/mod/lualine/init.lua | 94 +++++++++++------- tools/nvim/lua/plugins/mod/nvim-cmp.lua | 7 ++ tools/wezterm/tab.lua | 2 +- 14 files changed, 244 insertions(+), 127 deletions(-) create mode 100644 tools/nvim/lua/keymaps/modifier.lua diff --git a/tools/doom/org.el b/tools/doom/org.el index 53ea48d..2a698b5 100644 --- a/tools/doom/org.el +++ b/tools/doom/org.el @@ -19,6 +19,13 @@ ;; Initial Visibility (setq org-startup-folded "show2levels") + ;; Log into drawer + (setq org-log-into-drawer "LOGBOOK") + + ;; + + (setq org-todo-keywords '((sequence "TODO(t)" "NEXT(n)" "WAIT(w@/!)" "|" "DONE(d!)" "CANCELLED(c@)") + (sequence "[ ](T)" "[-](P)" "[?](Q)" "|" "[X](D)"))) ;; Keymaps (map! :map org-mode-map diff --git a/tools/nvim/lua/config/colors.lua b/tools/nvim/lua/config/colors.lua index 84ded53..4c41bd1 100644 --- a/tools/nvim/lua/config/colors.lua +++ b/tools/nvim/lua/config/colors.lua @@ -1,17 +1,58 @@ -- This file *currently* contains the colorscheme for lualine (status line) -local colors = { - bg = "#202328", - fg = "#bbc2cf", - yellow = "#ECBE7B", - cyan = "#008080", - darkblue = "#081633", - green = "#98be65", - orange = "#FF8800", - violet = "#a9a1e1", - magenta = "#c678dd", - purple = "#c678dd", - blue = "#51afef", - red = "#ec5f67", + +local M = {} +-- Mocha +M.scheme = { + rosewater = "#f5e0dc", + flamingo = "#f2cdcd", + pink = "#f5c2e7", + mauve = "#cba6f7", + red = "#f38ba8", + maroon = "#eba0ac", + peach = "#fab387", + yellow = "#f9e2af", + green = "#a6e3a1", + teal = "#94e2d5", + sky = "#89dceb", + sapphire = "#74c7ec", + blue = "#89b4fa", + lavender = "#b4befe", + text = "#cdd6f4", + subtext1 = "#bac2de", + subtext0 = "#a6adc8", + overlay2 = "#9399b2", + overlay1 = "#7f849c", + overlay0 = "#6c7086", + surface2 = "#585b70", + surface1 = "#45475a", + surface0 = "#313244", + base = "#1e1e2e", + mantle = "#181825", + crust = "#11111b", +} +M.accent = M.scheme.pink + +M.mode = { + n = M.scheme.sky, + i = M.scheme.green, + v = M.scheme.mauve, + [""] = M.scheme.mauve, + V = M.scheme.mauve, + c = M.scheme.mauve, + no = M.scheme.red, + s = M.scheme.orange, + S = M.scheme.orange, + [""] = M.scheme.orange, + ic = M.scheme.yellow, + R = M.scheme.violet, + Rv = M.scheme.violet, + cv = M.scheme.red, + ce = M.scheme.red, + r = M.scheme.cyan, + rm = M.scheme.cyan, + ["r?"] = M.scheme.cyan, + ["!"] = M.scheme.red, + t = M.scheme.red, } -return colors +return M diff --git a/tools/nvim/lua/config/colorscheme.lua b/tools/nvim/lua/config/colorscheme.lua index ac73bfa..8740356 100644 --- a/tools/nvim/lua/config/colorscheme.lua +++ b/tools/nvim/lua/config/colorscheme.lua @@ -1,2 +1,2 @@ -- Change the colorscheme here, use SPACE u i or :Telescope colorscheme to change colorscheme -vim.cmd.colorscheme("catppuccin-mocha") +vim.cmd.colorscheme("catppuccin") diff --git a/tools/nvim/lua/config/icons.lua b/tools/nvim/lua/config/icons.lua index 0923833..12a634f 100644 --- a/tools/nvim/lua/config/icons.lua +++ b/tools/nvim/lua/config/icons.lua @@ -17,6 +17,33 @@ local M = { Rename = "", Branch = "", }, + lsp_kind = { + Text = "󰉿", + Method = "󰆧", + Function = "󰊕", + Constructor = "", + Field = "󰜢", + Variable = "󰀫", + Class = "󰠱", + Interface = "", + Module = "", + Property = "󰜢", + Unit = "󰑭", + Value = "󰎠", + Enum = "", + Keyword = "󰌋", + Snippet = "", + Color = "󰏘", + File = "󰈙", + Reference = "󰈇", + Folder = "󰉋", + EnumMember = "", + Constant = "󰏿", + Struct = "󰙅", + Event = "", + Operator = "󰆕", + TypeParameter = "󰅲", + }, } return M diff --git a/tools/nvim/lua/config/options.lua b/tools/nvim/lua/config/options.lua index 8405050..ebedc25 100644 --- a/tools/nvim/lua/config/options.lua +++ b/tools/nvim/lua/config/options.lua @@ -45,7 +45,10 @@ opt.termguicolors = true opt.foldmethod = "expr" -- Folding provided by treesitter opt.foldexpr = "nvim_treesitter#foldexpr()" +-- Disable fold at start +opt.foldlevelstart = 99 opt.foldlevel = 99 +opt.foldenable = false opt.foldlevelstart = 1 -- Disable status line: Use `lualine` instead diff --git a/tools/nvim/lua/keymaps/init.lua b/tools/nvim/lua/keymaps/init.lua index 7db8106..b75cb58 100644 --- a/tools/nvim/lua/keymaps/init.lua +++ b/tools/nvim/lua/keymaps/init.lua @@ -8,6 +8,7 @@ local keymaps_general = vim.tbl_extend("force", {}, require("keymaps.leaders"), -- Tables cannot be merged since `mode` are set in some keymaps of `keymaps_basic` local keymaps_basic = require("keymaps.basic") local keymaps_buffer = require("keymaps.buffer") +local keymaps_modifier = require("keymaps.modifier") -- local keymaps_leader = require("keymaps.leaders") -- local keymaps_lsp = require("keymaps.lspkeys") @@ -15,6 +16,7 @@ utils.set_keymaps(keymaps_general) utils.set_keymaps(keymaps_basic) utils.set_keymaps(keymaps_nvim_tree_general) utils.set_keymaps(keymaps_buffer) +utils.set_keymaps(keymaps_modifier) M.nvim_tree_keymaps = require("keymaps.nvim-tree").plugin diff --git a/tools/nvim/lua/keymaps/modifier.lua b/tools/nvim/lua/keymaps/modifier.lua new file mode 100644 index 0000000..cfcd38d --- /dev/null +++ b/tools/nvim/lua/keymaps/modifier.lua @@ -0,0 +1,10 @@ +local keymaps_modifier = { + -- Use C-w to move between windows + { keys = "h", cmd = "h", opts = { desc = "left Window" } }, + { keys = "n", cmd = "j", opts = { desc = "Down Window" } }, + { keys = "e", cmd = "k", opts = { desc = "Up Window" } }, + { keys = "i", cmd = "l", opts = { desc = "Right Window" } }, + { keys = "", cmd = "Telescope commands", opts = { desc = "Commands" } }, +} + +return keymaps_modifier diff --git a/tools/nvim/lua/plugins/appearance.lua b/tools/nvim/lua/plugins/appearance.lua index f6b4204..ded26c6 100644 --- a/tools/nvim/lua/plugins/appearance.lua +++ b/tools/nvim/lua/plugins/appearance.lua @@ -1,6 +1,21 @@ return { -- Colorschemes - { "catppuccin/nvim", name = "catppuccin" }, + { + "catppuccin/nvim", + name = "catppuccin", + config = function() + require("catppuccin").setup({ + floavor = "auto", + background = { + light = "latte", + dark = "mocha", + }, + styles = { + -- keywords = { "underline" }, + }, + }) + end, + }, { "olimorris/onedarkpro.nvim" }, { "rebelot/kanagawa.nvim" }, -- Highlight objects under the cursor @@ -24,10 +39,10 @@ return { }) end, }, - { import = "plugins.mod.alpha-nvim" }, -- Dashboard + { import = "plugins.mod.alpha-nvim" }, -- Dashboard { import = "plugins.mod.winbar-nvim" }, -- Breadcrumb - { import = "plugins.mod.bufferline" }, -- Buffer Top Bar - { -- Git Blames, Changes + { import = "plugins.mod.bufferline" }, -- Buffer Top Bar + { -- Git Blames, Changes "lewis6991/gitsigns.nvim", config = function() require("gitsigns").setup({ diff --git a/tools/nvim/lua/plugins/lsp.lua b/tools/nvim/lua/plugins/lsp.lua index a5e3c4a..ed3f607 100644 --- a/tools/nvim/lua/plugins/lsp.lua +++ b/tools/nvim/lua/plugins/lsp.lua @@ -24,7 +24,7 @@ return { require("luasnip").config.setup({ enable_autosnippets = true }) end, }, - { "williamboman/mason.nvim", config = true }, + { "williamboman/mason.nvim", config = true }, { "williamboman/mason-lspconfig.nvim", lazy = false, @@ -38,6 +38,7 @@ return { mason_lspconfig.setup({ ensure_installed = servers, + automatic_installation = false, }) end, }, @@ -47,6 +48,12 @@ return { "NoahTheDuke/vim-just", ft = { "just" }, }, + { + "akinsho/org-bullets.nvim", + config = function() + require("org-bullets").setup() + end, + }, { "nvim-orgmode/orgmode", event = "VeryLazy", @@ -54,8 +61,16 @@ return { config = function() -- Setup orgmode require("orgmode").setup({ - org_agenda_files = "~/orgfiles/**/*", - org_default_notes_file = "~/orgfiles/refile.org", + org_agenda_files = "~/OrgFiles/tasks/*", + org_default_notes_file = "~/OrgFiles/tasks/inbox.org", + org_archive_location = "~/OrgFiles/archive/%s_archive::", + org_todo_keywords = { "TODO(t)", "NEXT(n)", "WAIT(w)", "|", "DONE(d)", "CANCELLED(c)" }, + org_hide_leading_stars = true, + org_hide_emphasis_markers = true, + org_log_into_drawer = "LOGBOOK", + org_highlight_latex_and_related = "native", + org_startup_indented = true, + org_deadline_warning_days = 10, }) -- NOTE: If you are using nvim-treesitter with ~ensure_installed = "all"~ option diff --git a/tools/nvim/lua/plugins/mod/bufferline.lua b/tools/nvim/lua/plugins/mod/bufferline.lua index 0993078..bde9588 100644 --- a/tools/nvim/lua/plugins/mod/bufferline.lua +++ b/tools/nvim/lua/plugins/mod/bufferline.lua @@ -1,9 +1,14 @@ return { "akinsho/bufferline.nvim", dependencies = "nvim-tree/nvim-web-devicons", -- 图标支持 + after = "catppuccin", config = function() require("bufferline").setup({ options = { + indicator = { + icon = "▎", -- this should be omitted if indicator style is not 'icon' + style = "icon", + }, diagnostics = "nvim_lsp", diagnostics_indicator = function(count, level, diagnostics_dict, context) local icon = level:match("error") and " " or " " @@ -19,6 +24,7 @@ return { }, separator_style = "thin", }, + highlights = require("catppuccin.groups.integrations.bufferline").get(), }) end, } diff --git a/tools/nvim/lua/plugins/mod/lualine/components.lua b/tools/nvim/lua/plugins/mod/lualine/components.lua index df2a593..daa319e 100644 --- a/tools/nvim/lua/plugins/mod/lualine/components.lua +++ b/tools/nvim/lua/plugins/mod/lualine/components.lua @@ -13,61 +13,17 @@ local function diff_source() end end -local conditions = { - buffer_not_empty = function() - return vim.fn.empty(vim.fn.expand("%:t")) ~= 1 - end, - hide_in_width = function() - return vim.fn.winwidth(0) > 80 - end, - check_git_workspace = function() - local filepath = vim.fn.expand("%:p:h") - local gitdir = vim.fn.finddir(".git", filepath .. ";") - return gitdir and #gitdir > 0 and #gitdir < #filepath - end, -} -local mode_color = { - n = colors.blue, - i = colors.green, - v = colors.magenta, - [""] = colors.magenta, - V = colors.magenta, - c = colors.magenta, - no = colors.red, - s = colors.orange, - S = colors.orange, - [""] = colors.orange, - ic = colors.yellow, - R = colors.violet, - Rv = colors.violet, - cv = colors.red, - ce = colors.red, - r = colors.cyan, - rm = colors.cyan, - ["r?"] = colors.cyan, - ["!"] = colors.red, - t = colors.red, -} - -local mode_color_bg = function() - return { fg = colors.bg, bg = mode_color[vim.fn.mode()] } -end - --- local mode_color_fg = function() --- return { fg = mode_color[vim.fn.mode()] } --- end - M.mode = { function() return "" end, - color = mode_color_bg, + -- color = mode_color_bg, } M.git = { "branch", icon = icons.git.Branch, - color = { fg = colors.violet, gui = "bold" }, + color = { fg = colors.scheme.violet, gui = "bold" }, } M.diagnostics = { @@ -99,31 +55,31 @@ M.lsp = { return msg end, icon = icons.lsp, - color = { fg = colors.yellow, gui = "italic" }, + color = { fg = colors.scheme.yellow, gui = "italic" }, } M.filetype = { function() return vim.bo.filetype end, - color = { fg = colors.blue, gui = "bold" }, + color = { fg = colors.scheme.blue, gui = "bold" }, } M.eol = { function() return vim.bo.eol == true and icons.eol or "" end, - color = { fg = colors.red }, + color = { fg = colors.scheme.red }, } M.command = { "command", - color = { fg = colors.green, gui = "bold" }, + color = { fg = colors.scheme.green, gui = "bold" }, } M.encoding = { "o:encoding", - color = { fg = colors.green, gui = "bold" }, + color = { fg = colors.scheme.green, gui = "bold" }, } M.indent = { @@ -134,17 +90,6 @@ M.indent = { padding = 1, } --- M.diff = { --- "diff", --- -- Is it me or the symbol for modified us really weird --- symbols = { added = " ", modified = "󰝤 ", removed = " " }, --- diff_color = { --- added = { fg = colors.green }, --- modified = { fg = colors.orange }, --- removed = { fg = colors.red }, --- }, --- cond = conditions.hide_in_width, --- } M.diff = { "diff", source = diff_source, @@ -156,13 +101,34 @@ M.diff = { }, padding = { left = 2, right = 1 }, diff_color = { - added = { fg = colors.green }, - modified = { fg = colors.yellow }, - removed = { fg = colors.red }, + added = { fg = colors.scheme.green }, + modified = { fg = colors.scheme.yellow }, + removed = { fg = colors.scheme.red }, }, cond = nil, } -M.progress = { "progress", color = mode_color_bg } +M.progress = { + "progress", +} + +-- local conditions = { +-- buffer_not_empty = function() +-- return vim.fn.empty(vim.fn.expand("%:t")) ~= 1 +-- end, +-- hide_in_width = function() +-- return vim.fn.winwidth(0) > 80 +-- end, +-- check_git_workspace = function() +-- local filepath = vim.fn.expand("%:p:h") +-- local gitdir = vim.fn.finddir(".git", filepath .. ";") +-- return gitdir and #gitdir > 0 and #gitdir < #filepath +-- end, +-- } +-- local mode_color = colors.mode +-- +-- local mode_color_bg = function() +-- return { fg = colors.mantle, bg = mode_color[vim.fn.mode()] } +-- end return M diff --git a/tools/nvim/lua/plugins/mod/lualine/init.lua b/tools/nvim/lua/plugins/mod/lualine/init.lua index 6a4b2cc..d7cb9d2 100644 --- a/tools/nvim/lua/plugins/mod/lualine/init.lua +++ b/tools/nvim/lua/plugins/mod/lualine/init.lua @@ -5,6 +5,11 @@ local lualine = require("lualine") local colors = require("config.colors") local components = require("plugins.mod.lualine.components") +--[[ +VSCode Style: +Remote | Git Branch | Diagnostics | Command | | MID | | Line:Column | Indent | Encoding | EOL | File Type LSP | Notifications +--]] + -- Config local config = { options = { @@ -12,25 +17,65 @@ local config = { statusline = { "NvimTree", "alpha" }, }, -- Disable sections and component separators - component_separators = "", - section_separators = "", + component_separators = { left = "", right = "" }, + section_separators = { left = "", right = "" }, theme = { -- We are going to use lualine_c an lualine_x as left and -- right section. Both are highlighted by c theme . So we -- are just setting default looks o statusline - normal = { c = { fg = colors.fg, bg = colors.bg } }, - inactive = { c = { fg = colors.fg, bg = colors.bg } }, + -- normal = { c = { fg = colors.mantle, bg = colors.mantle } }, + -- visual = { c = { fg = colors.mantle, bg = colors.mauve } }, + -- normal = { c = { fg = colors.mantle, bg = colors.sapphire } }, + inactive = { c = { fg = colors.mantle, bg = colors.mantle } }, + normal = { + a = { + fg = colors.scheme.mantle, + bg = colors.mode.n, + }, + b = { + bg = colors.scheme.surface2, + }, + c = { + bg = colors.scheme.crust, + }, + }, + visual = { + a = { + fg = colors.scheme.mantle, + bg = colors.mode.v, + }, + }, + insert = { + a = { + fg = colors.scheme.mantle, + bg = colors.mode.i, + }, + }, }, }, sections = { -- these are to remove the defaults - lualine_a = {}, - lualine_b = {}, - lualine_y = {}, - lualine_z = {}, - -- These will be filled later - lualine_c = {}, - lualine_x = {}, + lualine_a = { + components.mode, + }, + lualine_b = { + components.diff, + }, + lualine_c = { + components.diagnostics, + }, + lualine_x = { + components.indent, + components.encoding, + components.eol, + }, + lualine_y = { + components.filetype, + components.lsp, + }, + lualine_z = { + components.progress, + }, }, inactive_sections = { -- these are to remove the defaults @@ -43,31 +88,4 @@ local config = { }, } --- Inserts a component in lualine_c at left section -local function ins_left(component) - table.insert(config.sections.lualine_c, component) -end - --- Inserts a component in lualine_x at right section -local function ins_right(component) - table.insert(config.sections.lualine_x, component) -end - ---[[ -VSCode Style: -Remote | Git Branch | Diagnostics | Command | | MID | | Line:Column | Indent | Encoding | EOL | File Type LSP | Notifications ---]] - -ins_left(components.mode) -ins_left(components.diff) -ins_left(components.git) -ins_left(components.diagnostics) -ins_left(components.command) -ins_right(components.indent) -ins_right(components.encoding) -ins_right(components.eol) -ins_right(components.filetype) -ins_right(components.lsp) -ins_right(components.progress) - lualine.setup(config) diff --git a/tools/nvim/lua/plugins/mod/nvim-cmp.lua b/tools/nvim/lua/plugins/mod/nvim-cmp.lua index b8a7140..834ae8d 100644 --- a/tools/nvim/lua/plugins/mod/nvim-cmp.lua +++ b/tools/nvim/lua/plugins/mod/nvim-cmp.lua @@ -31,8 +31,15 @@ return { local raw_keymaps = require("keymaps").cmp_nvim_keymaps(cmp.mapping) local mapped = set_keymaps(raw_keymaps) + local kind_icons = require("config.icons").lsp_kind -- 配置 nvim-cmp cmp.setup({ + formatting = { + format = function(entry, vim_item) + vim_item.kind = string.format("%s %s", kind_icons[vim_item.kind] or "", vim_item.kind) + return vim_item + end, + }, snippet = { expand = function(args) require("luasnip").lsp_expand(args.body) diff --git a/tools/wezterm/tab.lua b/tools/wezterm/tab.lua index b26ac33..2a1e8a3 100644 --- a/tools/wezterm/tab.lua +++ b/tools/wezterm/tab.lua @@ -90,7 +90,7 @@ tabline.setup({ return function(config) config.hide_tab_bar_if_only_one_tab = true - config.tab_bar_at_bottom = true + config.tab_bar_at_bottom = false -- If set to false, the tab bar will be terminal-like config.use_fancy_tab_bar = false config.colors = {