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