Add functions to be loaded early-on in vim's startup
diff --git a/modules/neovim/zzz_earlyload/default.nix b/modules/neovim/zzz_earlyload/default.nix
index bb2381d..b8d6c57 100644
--- a/modules/neovim/zzz_earlyload/default.nix
+++ b/modules/neovim/zzz_earlyload/default.nix
@@ -1,6 +1,9 @@
 # The vim modules are sorted reverse alphabetically, so any extraConfig that is
 # put in here should hopefully be the first thing to be loaded. I'm using it to
 # set stuff like my mapleader
-{
-  programs.neovim.extraConfig = builtins.readFile ./settings.vim;
+{ lib, ...}: {
+  programs.neovim.extraConfig = lib.pipe [./settings.vim ./functions.vim] [
+    (map builtins.readFile)
+    (builtins.concatStringsSep "\n")
+  ];
 }
diff --git a/modules/neovim/zzz_earlyload/functions.vim b/modules/neovim/zzz_earlyload/functions.vim
new file mode 100644
index 0000000..d7a9e6f
--- /dev/null
+++ b/modules/neovim/zzz_earlyload/functions.vim
@@ -0,0 +1,10 @@
+fun! g:SetupCommandAlias(from, to)
+    exec 'cnoreabbrev <expr> '.a:from
+    \ .' ((getcmdtype() is# ":" && getcmdline() is# "'.a:from.'")'
+    \ .'? ("'.a:to.'") : ("'.a:from.'"))'
+endfun
+
+function g:Highlight(group, fg, bg)
+  exec ("autocmd ColorScheme onehalfdark highlight! " . a:group . " ctermfg=" . a:fg.cterm . " ctermbg=" . a:bg.cterm . " guifg=" . a:fg.gui . " guibg=" . a:bg.gui)
+endfunction
+