From fd62e8aa32315bba39d6fe817288f88c3998ab7d Mon Sep 17 00:00:00 2001 From: punkfairie Date: Sat, 30 Nov 2024 19:57:51 -0800 Subject: [PATCH] feat: fuck pretty paths --- nvim/lua/lib/lazyvim/lualine.lua | 155 --------------------------- nvim/lua/plugins/ui/lualine-nvim.lua | 22 +++- 2 files changed, 17 insertions(+), 160 deletions(-) delete mode 100644 nvim/lua/lib/lazyvim/lualine.lua diff --git a/nvim/lua/lib/lazyvim/lualine.lua b/nvim/lua/lib/lazyvim/lualine.lua deleted file mode 100644 index 417edfb..0000000 --- a/nvim/lua/lib/lazyvim/lualine.lua +++ /dev/null @@ -1,155 +0,0 @@ --- https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/util/lualine.lua - -local lazy_util = require('lib.lazy.util') -local lazyvim_root = require('lib.lazyvim.root') -local lazyvim_ui = require('lib.lazyvim.ui') - ----@class lib.lazyvim.lualine -local M = {} - ----@param component any ----@param text string ----@param hl_group? string ----@return string -function M.format(component, text, hl_group) - text = text:gsub('%%', '%%%%') - - if not hl_group or hl_group == '' then - return text - end - - ---@type table - component.hl_cache = component.hl_cache or {} - local lualine_hl_group = component.hl_cache[hl_group] - - if not lualine_hl_group then - local utils = require('lualine.utils.utils') - - ---@type string[] - local gui = vim.tbl_filter(function(x) - return x - end, { - utils.extract_highlight_colors(hl_group, 'bold') and 'bold', - utils.extract_highlight_colors(hl_group, 'italic') and 'italic', - }) - - lualine_hl_group = component:create_hl({ - fg = utils.extract_highlight_colors(hl_group, 'fg'), - gui = #gui > 0 and table.concat(gui, ',') or nil, - }, 'LV_' .. hl_group) --[[@as string]] - - component.hl_cache[hl_group] = lualine_hl_group - end - - return component:format_hl(lualine_hl_group) - .. text - .. component:get_default_hl() -end - ----@param opts? {relative: "cwd"|"root", modified_hl: string?, directory_hl: string?, filename_hl: string?, modified_sign: string?, readonly_icon: string?, length: number?} -function M.pretty_path(opts) - opts = vim.tbl_extend('force', { - relative = 'cwd', - modified_hl = 'MatchParen', - directory_hl = '', - filename_hl = 'Bold', - modified_sign = '', - readonly_icon = ' 󰌾 ', - length = 3, - }, opts or {}) - - return function(self) - local path = vim.fn.expand('%:p') --[[@as string]] - - if path == '' then - return '' - end - - path = lazy_util.norm(path) - local root = lazyvim_root.get({ normalize = true }) - local cwd = lazyvim_root.cwd() - - if opts.relative == 'cwd' and path:find(cwd, 1, true) == 1 then - path = path:sub(#cwd + 2) - elseif path:find(root, 1, true) == 1 then - path = path:sub(#root + 2) - end - - local sep = package.config:sub(1, 1) - local parts = vim.split(path, '[\\/]') - - if opts.length == 0 then - parts = parts - elseif #parts > opts.length then - parts = - { parts[1], '…', unpack(parts, #parts - opts.length + 2, #parts) } - end - - if opts.modified_hl and vim.bo.modified then - parts[#parts] = parts[#parts] .. opts.modified_sign - parts[#parts] = M.format(self, parts[#parts], opts.modified_h1) - else - parts[#parts] = M.format(self, parts[#parts], opts.filename_hl) - end - - local dir = '' - - if #parts > 1 then - dir = table.concat({ unpack(parts, 1, #parts - 1) }, sep) - dir = M.format(self, dir .. sep, opts.directory_hl) - end - - local readonly = '' - - if vim.bo.readonly then - readonly = M.format(self, opts.readonly_icon, opts.modified_hl) - end - - return dir .. parts[#parts] .. readonly - end -end - ----@param opts? {cwd:false, subdirectory:true, parent:true, other:true, icon?:string} -function M.root_dir(opts) - opts = vim.tbl_extend('force', { - cwd = false, - subdirectory = true, - parent = true, - other = true, - icon = '󱉭 ', - color = function() - return lazyvim_ui.fg('Special') - end, - }, opts or {}) - - local function get() - local cwd = lazyvim_root.cwd() - local root = lazyvim_root.get({ normalize = true }) - local name = vim.fs.basename(root) - - if root == cwd then - return opts.cwd and name - elseif root:find(cwd, 1, true) == 1 then - -- Root is subdirectory or cwd. - return opts.subdirectory and name - elseif cwd:find(root, 1, true) == 1 then - -- Root is parent directory of cwd. - return opts.parent and name - else - -- Root and cwd are not related. - return opts.other and name - end - end - - return { - function() - return (opts.icon and opts.icon .. ' ') .. get() - end, - cond = function() - return type(get()) == 'string' - end, - color = opts.color, - } -end - -return M diff --git a/nvim/lua/plugins/ui/lualine-nvim.lua b/nvim/lua/plugins/ui/lualine-nvim.lua index f3d2343..45bb338 100644 --- a/nvim/lua/plugins/ui/lualine-nvim.lua +++ b/nvim/lua/plugins/ui/lualine-nvim.lua @@ -20,7 +20,6 @@ return { end end, after = function() - local lazyvim_lualine = require('lib.lazyvim.lualine') local lazyvim_ui = require('lib.lazyvim.ui') local icons = require('icons') @@ -43,7 +42,6 @@ return { lualine_b = { 'branch' }, lualine_c = { - lazyvim_lualine.root_dir(), { 'diagnostics', symbols = { @@ -59,17 +57,31 @@ return { separator = '', padding = { left = 1, right = 0 }, }, - { lazyvim_lualine.pretty_path() }, + { + 'filename', + path = 4, + symbols = { readonly = ' 󰌾 ', modified = '' }, + }, }, lualine_x = { { function() - return require('noice').api.status.command.get() + ---@alias NoiceStatusOv {has:(fun():boolean), get:(fun():string), get_hl:(fun():string)} + + return require('noice') + .api + .status + .command --[[@as NoiceStatusOv]] + .get() end, cond = function() return package.loaded['noice'] - and require('noice').api.status.command.has() + and require('noice') + .api + .status + .command --[[@as NoiceStatusOv]] + .has() end, color = function() return lazyvim_ui.fg('Statement')