about summary refs log tree commit diff stats
path: root/modules/home/conf/nvim/plgs/lualine/default.nix
blob: 0b7895586822e93244f8eeb86d33a273fa12300c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
{...}: {
  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 {
    enable = true;
    iconsEnabled = true;
    theme = "nightfox";
    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 = [
        {
          name = "FugitiveHead";
          icon = "";
        }
        "diff"
        "diagnostics"
      ];
      lualine_c = ["filename"];
      lualine_x = ["searchcount" "filetype"];
      lualine_y = [
        "encoding"
        "fileformat"
        {name = get_mixed_indent;}
        {name = get_trailing_whitespace;}
      ];
      lualine_z = [{name = get_location_of_file;}];
    };
    inactiveSections = {
      lualine_a = [];
      lualine_b = [];
      lualine_c = ["filename"];
      lualine_x = [{name = get_location_of_file;}];
      lualine_y = [];
      lualine_z = [];
    };
    tabline = {};
    winbar = {};
    inactiveWinbar = {};

    # TODO: add all installed and supported extensions here
    extensions = [
      "toggleterm"
      #"fugitive" # TODO: maybe add this?
    ];
  };
}