about summary refs log tree commit diff stats
path: root/modules/by-name/nv/nvim/plgs/lualine/default.nix
blob: 2f3bb552bb2ada1967f528720c7f5751f005a859 (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
122
123
124
125
126
127
128
{
  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 = {};
      };
    };
}