about summary refs log tree commit diff stats
path: root/modules/home.legacy/conf/nvim/autocmds/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/home.legacy/conf/nvim/autocmds/default.nix')
-rw-r--r--modules/home.legacy/conf/nvim/autocmds/default.nix124
1 files changed, 124 insertions, 0 deletions
diff --git a/modules/home.legacy/conf/nvim/autocmds/default.nix b/modules/home.legacy/conf/nvim/autocmds/default.nix
new file mode 100644
index 00000000..a8f00bdc
--- /dev/null
+++ b/modules/home.legacy/conf/nvim/autocmds/default.nix
@@ -0,0 +1,124 @@
+{config, ...}: {
+  programs.nixvim = {
+    autoGroups = {
+      cursor_off = {clear = true;};
+      colorcolumn_toggle = {clear = true;};
+      numbertoggle = {clear = true;};
+      coloroverride = {clear = true;};
+      highlight_on_yank = {clear = true;};
+      create_dir = {clear = true;};
+    };
+    autoCmd = [
+      {
+        # Taken from: https://github.com/jghauser/mkdir.nvim
+        event = ["BufWritePre"];
+        pattern = ["*"];
+        callback = {
+          __raw = ''
+            function()
+              -- Get current filename, get full path (:p) and leave only the head (:h)
+              local dir = vim.fn.expand('<afile>:p:h')
+
+              -- This handles URLs using netrw. See ':help netrw-transparent' for details.
+              if dir:find('%l+://') == 1 then
+                return
+              end
+
+              if vim.fn.isdirectory(dir) == 0 then
+                vim.fn.mkdir(dir, 'p')
+              end
+            end
+          '';
+        };
+        group = "create_dir";
+        desc = "Create the directory of the target file on write";
+      }
+      {
+        event = ["TextYankPost"];
+        pattern = ["*"];
+        callback = {
+          __raw = ''
+            function()
+              vim.highlight.on_yank()
+            end
+          '';
+        };
+        group = "highlight_on_yank";
+        desc = "Highlight the yanked text";
+      }
+      {
+        event = ["BufWritePre"];
+        pattern = ["*"];
+        command = ''
+          ks | if search("\\s\\+$", 'n') != 0 | :%s/\s\+$// | endif | 's
+        '';
+        desc = ''
+          Remove trailing whitespace on safe
+          :%s/\s\+$\| \+\ze\t//g >> For trailing spaces and spaces before tabstops
+        '';
+      }
+
+      {
+        event = ["WinLeave"];
+        pattern = ["*"];
+        command = "set nocursorline"; # TODO: possible also nocursorcolumn
+        group = "cursor_off";
+        desc = "Display cursorline and cursorcolumn ONLY in active window.";
+      }
+      {
+        event = ["WinEnter"];
+        pattern = ["*"];
+        command = "set cursorline"; # TODO: possible also cursorcolumn
+        group = "cursor_off";
+        desc = "Display cursorline and cursorcolumn ONLY in active window.";
+      }
+
+      {
+        event = ["InsertEnter"];
+        pattern = ["*"];
+        command = "set colorcolumn=${config.programs.nixvim.opts.colorcolumn}";
+        group = "colorcolumn_toggle";
+        desc = "Only activate the colorcolumn when focused";
+      }
+      {
+        event = ["BufLeave" "FocusLost" "InsertLeave" "WinLeave"];
+        pattern = ["*"];
+        command = "set colorcolumn=0";
+        group = "colorcolumn_toggle";
+        desc = "Only activate the colorcolumn when focused";
+      }
+
+      {
+        event = ["BufEnter" "FocusGained" "InsertLeave" "WinEnter"];
+        pattern = ["*"];
+        command = "if &nu && mode() != \"i\" | set rnu   | endif";
+        group = "numbertoggle";
+        desc = "Change line numbers, when not focused";
+      }
+      {
+        event = ["BufLeave" "FocusLost" "InsertEnter" "WinLeave"];
+        pattern = ["*"];
+        command = "if &nu | set nornu | endif";
+        group = "numbertoggle";
+        desc = "Change line numbers, when not focused";
+      }
+
+      {
+        # Override LineNr
+        event = ["ColorScheme"];
+        pattern = ["*"];
+        command = "highlight LineNr  ctermfg=DarkGrey guifg=DarkGrey ";
+        group = "coloroverride";
+        desc = "Changes Line number colors";
+      }
+      {
+        # Override CursorLineNr
+        event = ["ColorScheme"];
+        pattern = ["*"];
+        command = "highlight CursorLineNr  ctermfg=White guifg=White ";
+        group = "coloroverride";
+        desc = "Changes Line number colors";
+      }
+    ];
+  };
+}