From c733f3326a34a57dfab4c17da659316fdb6eab6a Mon Sep 17 00:00:00 2001 From: Soispha Date: Wed, 28 Feb 2024 20:26:18 +0100 Subject: feat(hm): Add nix-index and associated command_not_found_handler --- hm/soispha/conf/zsh/config/command_not_found.sh | 64 +++++++++++++++++++++++++ hm/soispha/conf/zsh/default.nix | 6 ++- 2 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 hm/soispha/conf/zsh/config/command_not_found.sh (limited to 'hm/soispha/conf/zsh') 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 <&2 cat < + + 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"; -- cgit 1.4.1