about summary refs log tree commit diff stats
path: root/modules/by-name/nv/nvim/plgs/lualine/default.nix
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-11-09 12:35:44 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-11-09 12:54:51 +0100
commit2122a01f99c6da466b8f0f55c965c11a9043d117 (patch)
tree6c1697afc30a5bb72635bda7db9b5610386a5b71 /modules/by-name/nv/nvim/plgs/lualine/default.nix
parentfix(pkgs/stamp): Fallback to `dot-license` (diff)
downloadnixos-config-2122a01f99c6da466b8f0f55c965c11a9043d117.tar.gz
nixos-config-2122a01f99c6da466b8f0f55c965c11a9043d117.zip
refactor(modules/legacy/conf/nvim): Move to `by-name`
Diffstat (limited to 'modules/by-name/nv/nvim/plgs/lualine/default.nix')
-rw-r--r--modules/by-name/nv/nvim/plgs/lualine/default.nix128
1 files changed, 128 insertions, 0 deletions
diff --git a/modules/by-name/nv/nvim/plgs/lualine/default.nix b/modules/by-name/nv/nvim/plgs/lualine/default.nix
new file mode 100644
index 00000000..2f3bb552
--- /dev/null
+++ b/modules/by-name/nv/nvim/plgs/lualine/default.nix
@@ -0,0 +1,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 = {};
+      };
+    };
+}