Use a cached version of nix-index
diff --git a/modules/nix-index.nix b/modules/nix-index.nix
index 9ed29fe..f36da69 100644
--- a/modules/nix-index.nix
+++ b/modules/nix-index.nix
@@ -1,10 +1,16 @@
 { pkgs
 , username
+, nix-index-database
 , ...
 }: {
-  home.programs.nix-index = {
-    enable = true;
-    enableZshIntegration = true;
+  home.imports = [ nix-index-database.hmModules.nix-index ];
+
+  home.programs = {
+    nix-index = {
+      enable = true;
+      enableZshIntegration = true;
+    };
+    command-not-found.enable = false;
   };
 
   config.environment.persistence."/nix/persist".users.${username}.directories = [ ".cache/nix-index" ];
diff --git a/patches/nix-index/better-command-not-found.patch b/patches/nix-index/better-command-not-found.patch
deleted file mode 100644
index a21b007..0000000
--- a/patches/nix-index/better-command-not-found.patch
+++ /dev/null
@@ -1,162 +0,0 @@
-From 5c53c16ed4634acca31c637c077363abacc7e3b4 Mon Sep 17 00:00:00 2001
-From: Skyler <skyler3665@gmail.com>
-Date: Thu, 15 Sep 2022 14:08:26 +0100
-Subject: [PATCH] Update command-not-found.sh
-
----
- command-not-found.sh | 129 +++++--------------------------------------
- 1 file changed, 14 insertions(+), 115 deletions(-)
-
-diff --git a/command-not-found.sh b/command-not-found.sh
-index e542c49..ad87a91 100755
---- a/command-not-found.sh
-+++ b/command-not-found.sh
-@@ -1,134 +1,33 @@
- #!/bin/sh
-+# From https://gist.github.com/InternetUnexplorer/58e979642102d66f57188764bbf11701
- 
--# for bash 4
--# this will be called when a command is entered
--# but not found in the user’s path + environment
- command_not_found_handle () {
--
--    # TODO: use "command not found" gettext translations
--
--    # taken from http://www.linuxjournal.com/content/bash-command-not-found
--    # - do not run when inside Midnight Commander or within a Pipe
-     if [ -n "${MC_SID-}" ] || ! [ -t 1 ]; then
-         >&2 echo "$1: command not found"
-         return 127
-     fi
- 
--    toplevel=nixpkgs # nixpkgs should always be available even in NixOS
--    cmd=$1
--    attrs=$(@out@/bin/nix-locate --minimal --no-group --type x --type s --top-level --whole-name --at-root "/bin/$cmd")
--    len=$(echo -n "$attrs" | grep -c "^")
-+    echo -n "searching nix-index..."
-+    ATTRS=$(@nix-locate@ --minimal --no-group --type x --type s --top-level --whole-name --at-root "/bin/$1")
- 
--    case $len in
-+    case `echo -n "$ATTRS" | grep -c "^"` in
-         0)
--            >&2 echo "$cmd: command not found"
--            ;;
--        1)
--            # if only 1 package provides this, then we can invoke it
--            # without asking the users if they have opted in with one
--            # of 2 environment variables
--
--            # they are based on the ones found in
--            # command-not-found.sh:
--
--            #   NIX_AUTO_INSTALL : install the missing command into the
--            #                      user’s environment
--            #   NIX_AUTO_RUN     : run the command transparently inside of
--            #                      nix shell
--
--            # these will not return 127 if they worked correctly
--
--            if ! [ -z "${NIX_AUTO_INSTALL-}" ]; then
--                >&2 cat <<EOF
--The program '$cmd' is currently not installed. It is provided by
--the package '$toplevel.$attrs', which I will now install for you.
--EOF
--                if [ -e "$HOME/.nix-profile/manifest.json" ]; then
--                    nix profile install $toplevel#$attrs
--                else
--                    nix-env -iA $toplevel.$attrs
--                fi
--                if [ "$?" -eq 0 ]; then
--                    $@ # TODO: handle pipes correctly if AUTO_RUN/INSTALL is possible
--                    return $?
--                else
--                    >&2 cat <<EOF
--Failed to install $toplevel.attrs.
--$cmd: command not found
--EOF
--                fi
--            elif ! [ -z "${NIX_AUTO_RUN-}" ]; then
--                nix-build --no-out-link -A $attrs "<$toplevel>"
--                if [ "$?" -eq 0 ]; then
--                    # how nix-shell handles commands is weird
--                    # $(echo $@) is need to handle this
--                    nix-shell -p $attrs --run "$(echo $@)"
--                    return $?
--                else
--                    >&2 cat <<EOF
--Failed to install $toplevel.attrs.
--$cmd: command not found
--EOF
--                fi
--            else
--                if [ -e "$HOME/.nix-profile/manifest.json" ]; then
--                    >&2 cat <<EOF
--The program '$cmd' is currently not installed. You can install it
--by typing:
--  nix profile install $toplevel#$attrs
--
--Or run it once with:
--  nix run $toplevel#$attrs --command ...
--EOF
--                else
--                    >&2 cat <<EOF
--The program '$cmd' is currently not installed. You can install it
--by typing:
--  nix-env -iA $toplevel.$attrs
--
--Or run it once with:
--  nix-shell -p $attrs --run ...
--EOF
--                fi
--            fi
-+            >&2 echo -ne "$(@tput@ el1)\r"
-+            >&2 echo "$1: command not found"
-             ;;
-         *)
--            >&2 cat <<EOF
--The program '$cmd' is currently not installed. It is provided by
--several packages. You can install it by typing one of the following:
--EOF
--
--            # ensure we get each element of attrs
--            # in a cross platform way
--            while read attr; do
--                if [ -e "$HOME/.nix-profile/manifest.json" ]; then
--                    >&2 echo "  nix profile install $toplevel#$attr"
--                else
--                    >&2 echo "  nix-env -iA $toplevel.$attr"
--                fi
--            done <<< "$attrs"
--
--            >&2 cat <<EOF
--
--Or run it once with:
--EOF
--
--            while read attr; do
--                if [ -e "$HOME/.nix-profile/manifest.json" ]; then
--                    >&2 echo "  nix run $toplevel#$attr --command ..."
--                else
--                    >&2 echo "  nix-shell -p $attr --run ..."
--                fi
--            done <<< "$attrs"
--            ;;
-+            >&2 echo -ne "$(@tput@ el1)\r"
-+            >&2 echo "The program ‘$(@tput@ setaf 4)$1$(@tput@ sgr0)’ is currently not installed."
-+            >&2 echo "You can use one of the following commands to open it in an ephemeral shell:"
-+            while read ATTR; do
-+                ATTR=$(echo "$ATTR" | sed 's|\.out$||') # Strip trailing '.out'
-+                >&2 echo "  nix shell $(@tput@ setaf 12)nixpkgs#$(@tput@ setaf 4)$ATTR$(@tput@ sgr0)"
-+            done <<< "$ATTRS"
-     esac
- 
--    return 127 # command not found should always exit with 127
-+    return 127
- }
- 
--# for zsh...
--# we just pass it to the bash handler above
--# apparently they work identically
- command_not_found_handler () {
-     command_not_found_handle $@
-     return $?