Enable neovim through home-manager

- We need to set the default editor to just "nvim" not a particular path, as
  this allows us to override nvim in our home
- Add the mapleader bind to the start of init.vim
- As the leader is interpreted whenever we make a keybind, we must have it at
  the start or it won't be respected for some of our keybinds (but will be for
  others)
- Package the scrollbar plugin and install it
- Setup configs for stuff like treesitter, theme, COC, scrollbar etc.
- Add git capabilities to neovim
- Install fugitive, gitgutter and git-conflict, along with some other basic git
  stuff
- Allow mouse control in neovim
diff --git a/modules/neovim/neoformat/default.nix b/modules/neovim/neoformat/default.nix
new file mode 100644
index 0000000..c280010
--- /dev/null
+++ b/modules/neovim/neoformat/default.nix
@@ -0,0 +1,18 @@
+{
+  pkgs,
+  lib,
+  ...
+}: {
+  programs.neovim = {
+    plugins = with pkgs.vimPlugins; [
+      neoformat
+    ];
+    extraConfig = builtins.readFile ./setup.vim;
+    extraPackages = with pkgs; [
+      nodePackages.prettier
+      alejandra
+      rustfmt
+      shfmt
+    ];
+  };
+}
diff --git a/modules/neovim/neoformat/setup.vim b/modules/neovim/neoformat/setup.vim
new file mode 100644
index 0000000..e92db5a
--- /dev/null
+++ b/modules/neovim/neoformat/setup.vim
@@ -0,0 +1,4 @@
+" autocmd BufWritePre * undojoin | try | undojoin | Neoformat | catch /^Vim\%((\a\+)\)\=:E790/ | finally | silent Neoformat | endtry
+
+let g:shfmt_opt="-ci"
+let g:neoformat_try_node_exe = 1