about summary refs log tree commit diff stats
path: root/modules/home/conf/nvim/plgs/lualine/default.nix
blob: 54d20380f4c69f1b5e2de01aac42f37dad6985dd (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
115
116
117
118
119
120
121
{...}: {
  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;

    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 = {};
    };
  };
}