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 $?