aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSoispha <soispha@vhack.eu>2024-02-28 20:26:18 +0100
committerSoispha <soispha@vhack.eu>2024-02-28 20:26:18 +0100
commitc733f3326a34a57dfab4c17da659316fdb6eab6a (patch)
tree1f94d7c4ad524649dfe207a25c0c3781b2909476
parentchore(hm/soispha/conf/taskwarrior/projects): Update (diff)
downloadnixos-config-c733f3326a34a57dfab4c17da659316fdb6eab6a.zip
feat(hm): Add nix-index and associated command_not_found_handler
Diffstat (limited to '')
-rw-r--r--flake.lock21
-rw-r--r--flake.nix8
-rw-r--r--flake/default.nix2
-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
9 files changed, 118 insertions, 2 deletions
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 <<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?