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 --- flake.lock | 21 ++++++++ flake.nix | 8 ++++ flake/default.nix | 2 + hm/default.nix | 2 + hm/soispha/conf/default.nix | 1 + hm/soispha/conf/nix-index/default.nix | 14 ++++++ hm/soispha/conf/zsh/config/command_not_found.sh | 64 +++++++++++++++++++++++++ hm/soispha/conf/zsh/default.nix | 6 ++- hm/soispha/default.nix | 2 + 9 files changed, 118 insertions(+), 2 deletions(-) create mode 100644 hm/soispha/conf/nix-index/default.nix create mode 100644 hm/soispha/conf/zsh/config/command_not_found.sh diff --git a/flake.lock b/flake.lock index a0dbc208..08b38b5e 100644 --- a/flake.lock +++ b/flake.lock @@ -381,6 +381,26 @@ "type": "github" } }, + "nix-index-database": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1708830466, + "narHash": "sha256-nGKe3Y1/jkLR2eh1aRSVBtKadMBNv8kOnB52UXqRy6A=", + "owner": "nix-community", + "repo": "nix-index-database", + "rev": "f070c7eeec3bde8c8c8baa9c02b6d3d5e114d73b", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-index-database", + "type": "github" + } + }, "nixVim": { "inputs": { "flake-compat": [ @@ -642,6 +662,7 @@ "home-manager": "home-manager", "impermanence": "impermanence", "lanzaboote": "lanzaboote", + "nix-index-database": "nix-index-database", "nixVim": "nixVim", "nixos-generators": "nixos-generators", "nixpkgs": "nixpkgs", diff --git a/flake.nix b/flake.nix index 401f8b10..6d899f55 100644 --- a/flake.nix +++ b/flake.nix @@ -158,6 +158,12 @@ pre-commit-hooks-nix.follows = "pre-commit-hooks"; }; }; + nix-index-database = { + url = "github:nix-community/nix-index-database"; + inputs = { + nixpkgs.follows = "nixpkgs"; + }; + }; # my configs templates = { @@ -242,6 +248,7 @@ disko, lanzaboote, nixVim, + nix-index-database, # external dependencies user_js, treefmt-nix, @@ -284,6 +291,7 @@ serverphone disko lanzaboote + nix-index-database # external dependencies treefmt-nix diff --git a/flake/default.nix b/flake/default.nix index 185286eb..b50b34fc 100644 --- a/flake/default.nix +++ b/flake/default.nix @@ -15,6 +15,7 @@ serverphone, disko, lanzaboote, + nix-index-database, # external dependencies user_js, treefmt-nix, @@ -46,6 +47,7 @@ impermanence nixVim + nix-index-database ; }; defaultModules = [ 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 <&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"; 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? -- cgit 1.4.1