{ config, lib, ... }: let cfg = config.soispha.programs.nvim; in { home-manager.users.soispha.programs.nixvim.plugins.lualine = let get_location_of_file = { __raw = '' function() local file_lines = vim.fn.line('$'); local file_current_cursor_positon = vim.fn.getcurpos(); return file_current_cursor_positon[3] .. ":" .. file_current_cursor_positon[2] .. "/" .. file_lines end ''; }; get_trailing_whitespace = { __raw = '' function() local space = vim.fn.search([[\s\+$]], 'nwc') return space ~= 0 and "TW:" .. space or "" end ''; }; get_mixed_indent = { __raw = /* lua */ '' function() local space_pat = [[\v^ +]] local tab_pat = [[\v^\t+]] local space_indent = vim.fn.search(space_pat, 'nwc') local tab_indent = vim.fn.search(tab_pat, 'nwc') local mixed = (space_indent > 0 and tab_indent > 0) local mixed_same_line if not mixed then mixed_same_line = vim.fn.search([[\v^(\t+ | +\t)]], 'nwc') mixed = mixed_same_line > 0 end if not mixed then return "" end if mixed_same_line ~= nil and mixed_same_line > 0 then return 'MI:' .. mixed_same_line end local space_indent_cnt = vim.fn.searchcount({ pattern = space_pat, max_count = 1e3 }).total local tab_indent_cnt = vim.fn.searchcount({ pattern = tab_pat, max_count = 1e3 }).total if space_indent_cnt > tab_indent_cnt then return 'MI:' .. tab_indent else return 'MI:' .. space_indent end end ''; }; in lib.mkIf cfg.enable { enable = true; settings = { options = { iconsEnabled = true; theme = "nightfox"; }; # TODO: add all installed and supported extensions here extensions = [ "toggleterm" #"fugitive" # TODO: maybe add this? ]; componentSeparators = { left = ""; right = ""; }; sectionSeparators = { left = ""; right = ""; }; disabledFiletypes = { statusline = []; winbar = []; }; ignoreFocus = []; alwaysDivideMiddle = true; globalstatus = false; refresh = { statusline = 1000; tabline = 1000; winbar = 1000; }; sections = { lualine_a = ["mode"]; lualine_b = [ { __raw = '' {'FugitiveHead', icon = ""} ''; } "diff" "diagnostics" ]; lualine_c = ["filename"]; lualine_x = ["searchcount" "filetype"]; lualine_y = [ "encoding" "fileformat" get_mixed_indent get_trailing_whitespace ]; lualine_z = [get_location_of_file]; }; inactiveSections = { lualine_a = []; lualine_b = []; lualine_c = ["filename"]; lualine_x = [get_location_of_file]; lualine_y = []; lualine_z = []; }; tabline = {}; winbar = {}; inactiveWinbar = {}; }; }; }