about summary refs log tree commit diff stats
path: root/hm
diff options
context:
space:
mode:
Diffstat (limited to 'hm')
-rw-r--r--hm/default.nix2
-rw-r--r--hm/soispha/conf/default.nix1
-rw-r--r--hm/soispha/conf/nix-index/default.nix14
-rw-r--r--hm/soispha/conf/zsh/config/command_not_found.sh64
-rw-r--r--hm/soispha/conf/zsh/default.nix6
-rw-r--r--hm/soispha/default.nix2
6 files changed, 87 insertions, 2 deletions
diff --git a/hm/default.nix b/hm/default.nix
index 9ef5b92f..605c1fab 100644
--- a/hm/default.nix
+++ b/hm/default.nix
@@ -13,6 +13,7 @@
   # modules
   impermanence,
   nixVim,
+  nix-index-database,
 }: {
   home-manager = {
     useGlobalPkgs = true;
@@ -38,6 +39,7 @@
         
         impermanence
         nixVim
+        nix-index-database
         ;
     };
   };
diff --git a/hm/soispha/conf/default.nix b/hm/soispha/conf/default.nix
index 80d375c2..a6ab363b 100644
--- a/hm/soispha/conf/default.nix
+++ b/hm/soispha/conf/default.nix
@@ -24,6 +24,7 @@
     ./mumble
     ./neomutt
     ./nheko
+    ./nix-index
     ./npm
     ./nvim
     ./python
diff --git a/hm/soispha/conf/nix-index/default.nix b/hm/soispha/conf/nix-index/default.nix
new file mode 100644
index 00000000..eb8132d9
--- /dev/null
+++ b/hm/soispha/conf/nix-index/default.nix
@@ -0,0 +1,14 @@
+{...}: {
+  programs.nix-index = {
+    enable = true;
+    symlinkToCacheHome = true;
+
+    # Handled by myself (and the script is overridden)
+    enableBashIntegration = false;
+    enableZshIntegration = false;
+    enableFishIntegration = false;
+  };
+  programs.nix-index-database = {
+    comma.enable = false;
+  };
+}
diff --git a/hm/soispha/conf/zsh/config/command_not_found.sh b/hm/soispha/conf/zsh/config/command_not_found.sh
new file mode 100644
index 00000000..ae6de636
--- /dev/null
+++ b/hm/soispha/conf/zsh/config/command_not_found.sh
@@ -0,0 +1,64 @@
+#!/usr/bin/env dash
+
+# This was taken from the
+# `${pkgs.nix-index}/etc/profile.d/command-not-found.sh` file on 2024-02-28
+
+# 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() {
+    # 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=$(nix-locate --minimal --no-group --type x --type s --top-level --whole-name --at-root "/bin/$cmd")
+    len=$(echo "$attrs" | wc -l)
+
+    case "$len" in
+    0)
+        eprintln"$cmd: command not found"
+        ;;
+    1)
+        # If only one package provides this, then we can invoke it
+        # without asking the user.
+
+        # These will not return 127 if they worked correctly.
+
+        if nix build "$toplevel#$attrs" --no-link; then
+            nix shell "$toplevel#$attrs"
+            return $?
+        else
+            >&2 cat <<EOF
+Failed to build: '$toplevel#$attrs'
+$cmd: command not found
+EOF
+        fi
+        ;;
+    *)
+        >&2 cat <<EOF
+The program '$cmd' is currently not installed. It is provided by
+several packages. You can run it once with:
+EOF
+        counter=0
+        while read -r attr; do
+            eprintln "$(printf "%3s" "$counter")  nix shell $toplevel#$attr"
+            counter=$((counter + 1))
+        done <"$(ptmp "$attrs")"
+        ;;
+    esac
+
+    return 127 # command not found should always exit with 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 $?
+}
diff --git a/hm/soispha/conf/zsh/default.nix b/hm/soispha/conf/zsh/default.nix
index faff46c9..b43147e1 100644
--- a/hm/soispha/conf/zsh/default.nix
+++ b/hm/soispha/conf/zsh/default.nix
@@ -68,10 +68,12 @@
     initExtraFirst =
       builtins.readFile ./config/zsh-init.zsh
       # + builtins.readFile ./config/zsh-prompt.sh
+      + ''SHELL_LIBRARY_VERSION="2.1.1" source ${shell_library.rawLib.${system}}''
+      # NOTE: This must be before the insult, as we otherwise override the previous handler <2024-02-28>
+      + builtins.readFile ./config/command_not_found.sh
       + builtins.readFile ./config/command_not_found_insult.sh
       + builtins.readFile ./config/custom_cursor.zsh
-      + builtins.readFile "${pkgs.fzf}/share/fzf/key-bindings.zsh"
-      + ''SHELL_LIBRARY_VERSION="2.1.1" source ${shell_library.rawLib.${system}}'';
+      + builtins.readFile "${pkgs.fzf}/share/fzf/key-bindings.zsh";
 
     shellAliases = {
       ll = ". ll";
diff --git a/hm/soispha/default.nix b/hm/soispha/default.nix
index cae77d92..9811f600 100644
--- a/hm/soispha/default.nix
+++ b/hm/soispha/default.nix
@@ -1,6 +1,7 @@
 {
   impermanence,
   nixVim,
+  nix-index-database,
   ...
 }: let
   username = "soispha";
@@ -23,6 +24,7 @@ in {
 
     impermanence.nixosModules.home-manager.impermanence
     nixVim.homeManagerModules.nixvim
+    nix-index-database.hmModules.nix-index
   ];
 
   # I don't know what this does, but I've seen it a lot online, so it should be good, right?