diff --git a/patches/nix-index/better-command-not-found.patch b/patches/nix-index/better-command-not-found.patch
new file mode 100644
index 0000000..a21b007
--- /dev/null
+++ b/patches/nix-index/better-command-not-found.patch
@@ -0,0 +1,162 @@
+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 $?
