my dotfiles for arch
at main 136 lines 3.2 kB view raw
1local fallback_palette = { 2 color0 = "#191724", 3 color1 = "#eb6f92", 4 color2 = "#31748f", 5 color3 = "#f6c177", 6 color4 = "#9ccfd8", 7 color5 = "#c4a7e7", 8 color6 = "#ebbcba", 9 color7 = "#908caa", 10 color8 = "#26233a", 11 color9 = "#eb6f92", 12 color10 = "#31748f", 13 color11 = "#f6c177", 14 color12 = "#9ccfd8", 15 color13 = "#c4a7e7", 16 color14 = "#ebbcba", 17 color15 = "#e0def4", 18} 19 20local function build_theme() 21 local c = _G.matugen_palette or fallback_palette 22 local bg_base = "NONE" 23 local dark = "#000000" 24 local color = require("util.color") 25 26 return { 27 normal = { 28 a = { bg = c.color4, fg = dark, gui = "bold" }, 29 b = { bg = color.darken(c.color4, 50), fg = c.color15 }, 30 c = { bg = c.color0, fg = c.color15 }, 31 }, 32 insert = { 33 a = { bg = c.color2, fg = dark, gui = "bold" }, 34 b = { bg = color.darken(c.color2, 50), fg = c.color15 }, 35 }, 36 visual = { 37 a = { bg = c.color5, fg = dark, gui = "bold" }, 38 b = { bg = color.darken(c.color5, 50), fg = c.color15 }, 39 }, 40 replace = { 41 a = { bg = c.color3, fg = dark, gui = "bold" }, 42 b = { bg = color.darken(c.color3, 50), fg = c.color15 }, 43 }, 44 command = { 45 a = { bg = c.color1, fg = dark, gui = "bold" }, 46 b = { bg = color.darken(c.color1, 50), fg = c.color15 }, 47 }, 48 inactive = { 49 a = { bg = bg_base, fg = c.color7, gui = "bold" }, 50 b = { bg = bg_base, fg = c.color7 }, 51 }, 52 } 53end 54 55local function setup_macro_refresh(lualine) 56 vim.api.nvim_create_autocmd("RecordingEnter", { 57 callback = function() 58 lualine.refresh({ place = { "statusline" } }) 59 end, 60 }) 61 vim.api.nvim_create_autocmd("RecordingLeave", { 62 callback = function() 63 local timer = vim.loop.new_timer() 64 timer:start( 65 50, 66 0, 67 vim.schedule_wrap(function() 68 lualine.refresh({ place = { "statusline" } }) 69 end) 70 ) 71 end, 72 }) 73end 74 75local function macro_recording_status() 76 return { 77 "macro-recording", 78 fmt = function() 79 local register = vim.fn.reg_recording() 80 return register == "" and "" or "RECORDING @" .. register 81 end, 82 } 83end 84 85local function heart() 86 return [[♥ ]] 87end 88 89return { 90 "nvim-lualine/lualine.nvim", 91 event = "VeryLazy", 92 dependencies = { "nvim-tree/nvim-web-devicons" }, 93 init = function() 94 vim.opt.laststatus = 0 95 end, 96 config = function() 97 vim.opt.laststatus = 3 98 99 local lualine = require("lualine") 100 setup_macro_refresh(lualine) 101 102 local function do_setup() 103 lualine.setup({ 104 options = { 105 theme = build_theme(), 106 component_separators = "", 107 section_separators = { left = "", right = "" }, 108 disabled_filetypes = { "alpha" }, 109 }, 110 sections = { 111 lualine_a = { 112 { "mode", separator = { left = "", right = "" }, right_padding = 2 }, 113 macro_recording_status(), 114 }, 115 lualine_b = { "diff", "diagnostics" }, 116 lualine_c = { { "filename", path = 1 } }, 117 lualine_x = { "filetype" }, 118 lualine_y = { "progress" }, 119 lualine_z = { 120 { "location", separator = { left = "" }, left_padding = 2 }, 121 { heart, separator = { right = "" } }, 122 }, 123 }, 124 extensions = { "nvim-tree", "fzf" }, 125 }) 126 end 127 128 do_setup() 129 130 -- Re-setup lualine when matugen reloads theme 131 vim.api.nvim_create_autocmd("User", { 132 pattern = "MatugenReload", 133 callback = do_setup, 134 }) 135 end, 136}