about summary refs log tree commit diff stats
path: root/modules/by-name/nv/nvim/plgs/lualine/default.nix
blob: 7a69519bb3a55285c7bd25144283de16d2e4c39f (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
129
130
131
132
133
134
135
136
137
# nixos-config - My current NixOS configuration
#
# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
# SPDX-License-Identifier: GPL-3.0-or-later
#
# This file is part of my nixos-config.
#
# You should have received a copy of the License along with this program.
# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
{
  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 = {};
      };
    };
}