More neovim settings updates
diff --git a/modules/neovim/coc/default.nix b/modules/neovim/coc/default.nix
index d119954..cfdfda9 100644
--- a/modules/neovim/coc/default.nix
+++ b/modules/neovim/coc/default.nix
@@ -12,11 +12,23 @@
     coc = {
       enable = true;
       settings = {
+        diagnostic.floatConfig = {
+          border = true;
+          rounded = true;
+        };
+        signature.floatConfig = {
+          border = true;
+          rounded = true;
+        };
+        hover.floatConfig = {
+          border = true;
+          rounded = true;
+        };
         suggest.floatConfig = {
           border = true;
           rounded = true;
         };
-        "suggest.noselect" = false;
+        "suggest.noselect" = true;
         "cSpell.checkOnlyEnabledfileTypes" = false;
         "diagnostic.virtualText" = true;
         "diagnostic.virtualTextCurrentLineOnly" = false;
@@ -35,6 +47,7 @@
             code_blocks = false;
             tables = false;
           };
+          MD024.siblings_only = true;
         };
         languageserver = {
           nix = {
@@ -42,6 +55,10 @@
             filetypes = ["nix"];
           };
         };
+        "snippets.extends" = {
+          markdown = ["tex"];
+        };
+        "snippets.autoTrigger" = false;
       };
     };
     plugins = with pkgs.vimPlugins; [
@@ -55,6 +72,7 @@
       coc-go
       coc-markdownlint
       coc-texlab
+      coc-pyright
 
       # Spellchecker
       nixpkgs-minion.legacyPackages.${system}.vimPlugins.coc-spell-checker
@@ -68,7 +86,7 @@
       vim-snippets
       coc-snippets
 
-      # General utils
+      # General utilities
       coc-pairs
     ];
     extraConfig = lib.pipe [./keybinds.vim ./theme.vim] [
@@ -82,22 +100,31 @@
       rust-analyzer
       texlab
       omnisharp-roslyn
+      nodePackages.pyright
+      (python3.withPackages (pyPkgs:
+        with pyPkgs; [
+          pycodestyle
+          black
+          rope
+        ]))
     ];
   };
-  home.file = lib.pipe ./snippets [
-    builtins.readDir
-    builtins.attrNames
-    (map
-      (f: {
-        name = ".config/nvim/UltiSnips/${f}";
-        value = {
-          source = ./snippets + "/${f}";
-          target = ".config/nvim/UltiSnips/${f}";
-        };
-      }))
-    builtins.listToAttrs
-    lib.traceValSeq
-  ] // {
-    ".config/coc/placeholder".text = "";
-  };
+  home.file =
+    lib.pipe ./snippets [
+      builtins.readDir
+      builtins.attrNames
+      (map
+        (f: {
+          name = ".config/nvim/UltiSnips/${f}";
+          value = {
+            source = ./snippets + "/${f}";
+            target = ".config/nvim/UltiSnips/${f}";
+          };
+        }))
+      builtins.listToAttrs
+      lib.traceValSeq
+    ]
+    // {
+      ".config/coc/placeholder".text = "";
+    };
 }
diff --git a/modules/neovim/coc/keybinds.vim b/modules/neovim/coc/keybinds.vim
index 0116a91..ae7e174 100644
--- a/modules/neovim/coc/keybinds.vim
+++ b/modules/neovim/coc/keybinds.vim
@@ -1,5 +1,5 @@
-nmap <silent> ]c :call CocAction('diagnosticNext')<cr>
-nmap <silent> [c :call CocAction('diagnosticPrevious')<cr>
+nmap <silent> ]c :silent! call CocAction('diagnosticNext')<cr>
+nmap <silent> [c :silent! call CocAction('diagnosticPrevious')<cr>
 nmap <silent> <Leader>fs <Plug>(coc-codeaction-selected)
 nmap <silent> <Leader>fb <Plug>(coc-codeaction)
 nmap <silent> <Leader>ff <Plug>(coc-codeaction-cursor)
@@ -29,7 +29,6 @@
 
 snoremap <nowait><silent> <Tab> <Esc>:call UltiSnips#JumpForwards()<cr>
 snoremap <nowait><silent> <S-Tab> <Esc>:call UltiSnips#JumpForwards()<cr>
-inoremap <silent><silent> <C-s> <Esc>l:Snippets<cr>
 
 
 function! s:show_documentation()
@@ -41,3 +40,8 @@
 endfunction
 
 nnoremap <silent> K :call <SID>show_documentation()<CR>
+
+command Snippets CocFzfList snippets
+
+autocmd FileType tex let b:coc_pairs = [["$", "$"]]
+autocmd FileType markdown let b:coc_pairs = [["$", "$"]]
diff --git a/modules/neovim/coc/snippets/markdown.snippets b/modules/neovim/coc/snippets/markdown.snippets
index c5c7f21..041cddc 100644
--- a/modules/neovim/coc/snippets/markdown.snippets
+++ b/modules/neovim/coc/snippets/markdown.snippets
@@ -24,27 +24,23 @@
 # Online reference: https://github.com/SirVer/ultisnips/blob/master/doc/UltiSnips.txt
 
 snippet latex "A latex block" w
-$${0}$
+$${VISUAL}${1}$${0}
 endsnippet
 
 snippet dydx "The derivative" i
-\frac{dy}{dx}
+\frac{d${1:y}}{d${2:x}}${0}
 endsnippet
 
-snippet dydt "The derivative of `y` WRT `t`" i
-\frac{dy}{dx}
+snippet derivative "The derivative" i
+\frac{d${1:y}}{d${2:x}}${0}
 endsnippet
 
-snippet dydx "The derivative of `x` WRT `t`" i
-\frac{dy}{dx}
+snippet inti "Integrate indefinitely" i
+\int ${1} \text{ d}${2:x}${0}
 endsnippet
 
-snippet iidx "Integrate indefinitely with respect to x" i
-\int ${0} \text{ d}x
-endsnippet
-
-snippet iddx "Integrate definitely with respect to x" i
-\int{${0}}{${1}}${2} \text{ d}x
+snippet intd "Integrate definitely" i
+\int{${1}}{${2}}${3} \text{ d}${4:x}${0}
 endsnippet
 
 snippet ihat "The I vector" i
@@ -55,12 +51,12 @@
 \hat{\bm{j}}
 endsnippet
 
-snippet vec "A vector" i
-\bm{${0}}
+snippet vecbold "A vector" i
+\bm{${1}}${0}
 endsnippet
 
-snippet col "A column vector" i
-\begin{bmatrix}${0}\end{bmatrix}
+snippet veccol2 "A 2-tall column vector" i
+\begin{pmatrix} ${1} \\\\ ${2} \end{pmatrix}${0}
 endsnippet
 
 snippet nl "A latex newline (e.g. for column vectors)" i
@@ -68,7 +64,7 @@
 endsnippet
 
 snippet d2ydx2 "The second derivative" i
-\frac{d^2y}{dx^2}
+\frac{d^2${1:y}}{d${2:x}^2}${0}
 endsnippet
 
 snippet nospell "Disable spellcheck on the visually-selected region"
@@ -77,6 +73,10 @@
 <!-- spell-checker:enable -->
 endsnippet
 
-snippet normaldistribution "A normal distribution" w
-X\sim N(${0:mean}, ${1:variance})
+snippet normaldistribution "A normal distribution" i
+X\sim N(${1:mean}, ${2:variance})${0}
+endsnippet
+
+snippet 2x2matrix "A 2 by 2 matrix" i
+\begin{bmatrix} ${1} & ${2} \\\\ ${3} & ${4} \end{bmatrix}${0}
 endsnippet
diff --git a/modules/neovim/coc/theme.vim b/modules/neovim/coc/theme.vim
index dae527c..a5f52f5 100644
--- a/modules/neovim/coc/theme.vim
+++ b/modules/neovim/coc/theme.vim
@@ -11,3 +11,8 @@
 call g:Highlight("CocPumMenu", g:transparent, g:black)
 call g:Highlight("CocFloating", g:transparent, g:black)
 call g:Highlight("CocSearch", g:red, g:transparent)
+
+call g:Highlight("DiagnosticVirtualTextInfo", g:darkblue, g:transparent)
+call g:Highlight("DiagnosticVirtualTextHint", g:darkblue, g:transparent)
+call g:Highlight("DiagnosticVirtualTextWarn", g:darkyellow, g:transparent)
+call g:Highlight("DiagnosticVirtualTextError", g:darkred, g:transparent)
diff --git a/modules/neovim/coc/trouble.lua b/modules/neovim/coc/trouble.lua
deleted file mode 100644
index ede4963..0000000
--- a/modules/neovim/coc/trouble.lua
+++ /dev/null
@@ -1,3 +0,0 @@
-require("trouble").setup {
-  use_diagnostic_signs = true,
-}
diff --git a/modules/neovim/hardtime/hardtime.vim b/modules/neovim/hardtime/hardtime.vim
index 1f0df2c..29fcc48 100644
--- a/modules/neovim/hardtime/hardtime.vim
+++ b/modules/neovim/hardtime/hardtime.vim
@@ -1,5 +1,5 @@
 let g:hardtime_default_on = 1
-let g:list_of_disabled_keys = ["<UP>", "<DOWN>", "<LEFT>", "<RIGHT>"]
+let g:list_of_disabled_keys = ["<UP>", "<DOWN>", "<LEFT>", "<RIGHT>", "<C-UP>", "<C-DOWN>", "<C-LEFT>", "<C-RIGHT>"]
 let g:hardtime_showmsg = 1
 let g:hardtime_allow_different_key = 1
 
diff --git a/modules/neovim/indentation/indentation.vim b/modules/neovim/indentation/indentation.vim
index 54812cc..7535f00 100644
--- a/modules/neovim/indentation/indentation.vim
+++ b/modules/neovim/indentation/indentation.vim
@@ -1,6 +1,5 @@
-set tabstop=4
+set tabstop=2
 set shiftwidth=0
-set ve+=onemore
 
 exec "highlight IndentBlanklineContextChar ctermfg=" . g:white.cterm . " guifg=" . g:white.gui . " ctermbg=NONE guibg=NONE"
 exec "highlight IndentBlanklineContextStart ctermfg=NONE guifg=NONE guisp=white ctermbg=NONE guibg=NONE gui=underline term=underline"
diff --git a/modules/neovim/remote/default.nix b/modules/neovim/remote/default.nix
new file mode 100644
index 0000000..8986bad
--- /dev/null
+++ b/modules/neovim/remote/default.nix
@@ -0,0 +1,17 @@
+{pkgs, ...}: {
+  programs = {
+    neovim = {
+      extraConfig = builtins.readFile ./remote.vim;
+      extraPackages = [
+        pkgs.neovim-remote
+      ];
+    };
+    zsh.initExtra = ''
+      if [ ! -z "$NVIM" ]; then
+        alias nvim="${pkgs.neovim-remote}/bin/nvr"
+        alias vim="${pkgs.neovim-remote}/bin/nvr"
+        alias vi="${pkgs.neovim-remote}/bin/nvr"
+      fi
+    '';
+  };
+}
diff --git a/modules/neovim/remote/remote.vim b/modules/neovim/remote/remote.vim
new file mode 100644
index 0000000..ac2e5a4
--- /dev/null
+++ b/modules/neovim/remote/remote.vim
@@ -0,0 +1,6 @@
+autocmd FileType gitcommit,gitrebase,gitconfig set bufhidden=delete
+
+if has('nvim')
+  let $GIT_EDITOR = 'nvr -cc split --remote-wait'
+  let $EDITOR = 'nvr'
+endif
diff --git a/modules/neovim/venn/default.nix b/modules/neovim/venn/default.nix
new file mode 100644
index 0000000..dae9bc6
--- /dev/null
+++ b/modules/neovim/venn/default.nix
@@ -0,0 +1,10 @@
+{pkgs, ...}: {
+  programs.neovim = {
+    plugins = [
+      pkgs.vimPlugins.venn-nvim
+    ];
+    extraConfig = ''
+      source ${./venn.lua}
+    '';
+  };
+}
diff --git a/modules/neovim/venn/venn.lua b/modules/neovim/venn/venn.lua
new file mode 100644
index 0000000..2a71e39
--- /dev/null
+++ b/modules/neovim/venn/venn.lua
@@ -0,0 +1,27 @@
+-- venn.nvim: enable or disable keymappings
+function _G.Toggle_venn()
+    local venn_enabled = vim.inspect(vim.b.venn_enabled)
+    if venn_enabled == "nil" then
+        vim.b.venn_enabled = true
+        vim.cmd[[setlocal ve=all]]
+        -- draw a line on HJKL keystokes
+        vim.cmd("call HardTimeOff()")
+        vim.api.nvim_buf_set_keymap(0, "n", "J", "<C-v>j:VBox<CR>", {noremap = true})
+        vim.api.nvim_buf_set_keymap(0, "n", "K", "<C-v>k:VBox<CR>", {noremap = true})
+        vim.api.nvim_buf_set_keymap(0, "n", "L", "<C-v>l:VBox<CR>", {noremap = true})
+        vim.api.nvim_buf_set_keymap(0, "n", "H", "<C-v>h:VBox<CR>", {noremap = true})
+        -- draw a box by pressing "f" with visual selection
+        vim.api.nvim_buf_set_keymap(0, "v", "f", ":VBox<CR>", {noremap = true})
+        print("Enabled draw-mode") 
+    else
+        vim.cmd("call HardTimeOn()")
+        vim.cmd[[setlocal ve=]]
+        vim.cmd[[mapclear <buffer>]]
+        vim.b.venn_enabled = nil
+        print("Disabled draw-mode")
+    end
+end
+-- toggle keymappings for venn using <leader>v
+vim.api.nvim_set_keymap('n', '<leader>d', ":lua Toggle_venn()<CR>", { noremap = true})
+vim.api.nvim_set_keymap('n', '<leader>v', ":lua Toggle_venn()<CR>", { noremap = true})
+
diff --git a/modules/neovim/vimpager/default.nix b/modules/neovim/vimpager/default.nix
index 3d73eb2..311c878 100644
--- a/modules/neovim/vimpager/default.nix
+++ b/modules/neovim/vimpager/default.nix
@@ -2,8 +2,8 @@
   home = {
     packages = [pkgs.nvimpager];
     shellAliases = {
-      less = "${pkgs.nvimpager}/bin/nvimpager";
-      zless = "${pkgs.nvimpager}/bin/nvimpager";
+      less = "${pkgs.nvimpager}/bin/nvimpager -p";
+      zless = "${pkgs.nvimpager}/bin/nvimpager -p";
       vimpager = "${pkgs.nvimpager}/bin/nvimpager";
     };
     sessionVariables = {
diff --git a/modules/neovim/wiki/wiki.vim b/modules/neovim/wiki/wiki.vim
index 13f6a33..e891588 100644
--- a/modules/neovim/wiki/wiki.vim
+++ b/modules/neovim/wiki/wiki.vim
@@ -7,12 +7,23 @@
 let g:wiki_map_create_page = 'WikiCreateTransform'
 function WikiCreateTransform(name) abort
   let l:name = wiki#get_root() . '/' . a:name
+  let g:lastWikiOriginalName = substitute(a:name, "\.private$", "", "")
   " If the file is new, then append the current date
   return filereadable(l:name)
         \ ? a:name
         \ : a:name =~ ".*\.private$"
-        \ ? substitute(substitute(a:name, " ", "_", "g"), "\.private$", "", "") . "_" . strftime("%Y%m%d") . ".private"
-        \ : substitute(a:name, " ", "_", "g") . '_' . strftime('%Y%m%d')
+        \ ? substitute(g:lastWikiOriginalName, " ", "_", "g") . "_" . strftime("%Y%m%d") . ".private"
+        \ : substitute(g:lastWikiOriginalName, " ", "_", "g") . '_' . strftime('%Y%m%d')
 endfunction
 
+
+function! TemplateFallback(context)
+  call append(0, ['# ' . g:lastWikiOriginalName, ''])
+endfunction
+
+let g:wiki_templates = [
+      \ { 'match_func': {x -> v:true},
+      \   'source_func': function('TemplateFallback')},
+      \]
+
 nnoremap <silent> <Leader>wf :WikiFzfPages<CR>