nix-search
This commit is contained in:
parent
3368c8149f
commit
d3b2cb7fe3
@ -82,7 +82,6 @@
|
|||||||
# nix utils
|
# nix utils
|
||||||
nix-output-monitor
|
nix-output-monitor
|
||||||
nix-top
|
nix-top
|
||||||
nix-search-cli # nix-search
|
|
||||||
nix-diff
|
nix-diff
|
||||||
comma
|
comma
|
||||||
];
|
];
|
||||||
|
@ -106,7 +106,6 @@
|
|||||||
nurl
|
nurl
|
||||||
manix
|
manix
|
||||||
#comma # collides with nix-index-database
|
#comma # collides with nix-index-database
|
||||||
nix-search-cli # nix-search
|
|
||||||
devenv
|
devenv
|
||||||
nix-fast-build
|
nix-fast-build
|
||||||
nix-eval-jobs
|
nix-eval-jobs
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
nix-search() (
|
nix-search() (
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
flake="${1:-nixpkgs}"
|
local flake="${1:-nixpkgs}"; shift ||:
|
||||||
|
|
||||||
trace(){
|
trace(){
|
||||||
if [[ -t 2 ]]; then
|
if [[ -t 2 ]]; then
|
||||||
@ -14,21 +14,25 @@ nix-search() (
|
|||||||
command -v nix >/dev/null || die "ERROR: 'nix' not in PATH"
|
command -v nix >/dev/null || die "ERROR: 'nix' not in PATH"
|
||||||
command -v jq >/dev/null || die "ERROR: 'jq' not in PATH"
|
command -v jq >/dev/null || die "ERROR: 'jq' not in PATH"
|
||||||
command -v fzf >/dev/null || die "ERROR: 'fzf' not in PATH"
|
command -v fzf >/dev/null || die "ERROR: 'fzf' not in PATH"
|
||||||
command -v bat >/dev/null || die "ERROR: 'fzf' not in PATH"
|
command -v bat >/dev/null || die "ERROR: 'bat' not in PATH"
|
||||||
command -v tr >/dev/null || die "ERROR: 'tr' not in PATH"
|
command -v tr >/dev/null || die "ERROR: 'tr' not in PATH"
|
||||||
command -v sed >/dev/null || die "ERROR: 'sed' not in PATH"
|
command -v sed >/dev/null || die "ERROR: 'sed' not in PATH"
|
||||||
command -v grep >/dev/null || die "ERROR: 'grep' not in PATH"
|
command -v grep >/dev/null || die "ERROR: 'grep' not in PATH"
|
||||||
command -v sort >/dev/null || die "ERROR: 'sort' not in PATH"
|
command -v sort >/dev/null || die "ERROR: 'sort' not in PATH"
|
||||||
|
if [[ -t 1 ]] && ! command -v gum >/dev/null; then
|
||||||
|
trace "WARNING: 'gum' not in PATH, no action menu will be provided"
|
||||||
|
fi
|
||||||
|
|
||||||
nixpkgs=$(nix eval "$flake"#path --json | jq . -r) # --raw hangs?
|
# local nixpkgs=$(nix eval "$flake"#path --json | jq . -r) # --raw hangs?
|
||||||
cache="${XDG_CACHE_HOME:-"$HOME/.cache"}/nix-search-sh"
|
local nixpkgs=$(nix flake metadata "$flake" --json | jq .path -r)
|
||||||
|
local cachedir="${XDG_CACHE_HOME:-"$HOME/.cache"}/nix-search-sh"
|
||||||
|
|
||||||
export storepath="$cache"/"${flake//"/"/--}"/path
|
export storepath="$cachedir"/"${flake//"/"/--}"/path
|
||||||
export packages_json="$cache"/"${flake//"/"/--}"/packages.json
|
export packages_json="$cachedir"/"${flake//"/"/--}"/packages.json
|
||||||
export packages_tsv="$cache"/"${flake//"/"/--}"/packages.tsv
|
export packages_tsv="$cachedir"/"${flake//"/"/--}"/packages.tsv
|
||||||
|
|
||||||
if [[ ! -f "$storepath" || "$nixpkgs" != "$(cat "$storepath")" ]]; then
|
if [[ ! -f "$storepath" || "$nixpkgs" != "$(cat "$storepath")" ]]; then
|
||||||
mkdir -p "$cache"/"$flake"
|
mkdir -p "$cachedir"/"$flake"
|
||||||
|
|
||||||
# TODO: somehow inherit if user has configured allowUnfree and such in any file
|
# TODO: somehow inherit if user has configured allowUnfree and such in any file
|
||||||
trace "Indexing..."
|
trace "Indexing..."
|
||||||
@ -59,7 +63,7 @@ nix-search() (
|
|||||||
|
|
||||||
show-package() {
|
show-package() {
|
||||||
local attrpath="$(head -n1 <<<"$1")"
|
local attrpath="$(head -n1 <<<"$1")"
|
||||||
printf "%s\n" "(toggle preview with 'alt-enter')"
|
printf "%s\n" "(toggle preview with 'alt-enter', scroll with '{shift,alt}-{up,down}')"
|
||||||
printf "\n"
|
printf "\n"
|
||||||
|
|
||||||
grep -F -- $'--\t'"$attrpath"$'\t' "$packages_tsv" | cut -f4 | jq '. | [
|
grep -F -- $'--\t'"$attrpath"$'\t' "$packages_tsv" | cut -f4 | jq '. | [
|
||||||
@ -80,18 +84,73 @@ nix-search() (
|
|||||||
' -r | bat --style=plain --language yaml --color=always
|
' -r | bat --style=plain --language yaml --color=always
|
||||||
}
|
}
|
||||||
|
|
||||||
# attrpaths=$(
|
local fzf_config=(
|
||||||
cut <"$packages_tsv" -f2-3 | tr '\n' '\0' | tr '\t' '\n' \
|
--reverse
|
||||||
| fzf --read0 --print0 --gap 1 --reverse --bind 'ctrl-a:toggle-all' --bind 'alt-enter:toggle-preview' --multi --tiebreak=begin --preview "$(declare -f show-package); show-package {}" \
|
--bind 'ctrl-a:toggle-all'
|
||||||
| tr '\n\0' '\t\n' | cut -f1
|
--bind 'alt-enter:toggle-preview'
|
||||||
# )
|
# --bind 'shift-page-up:preview-page-up'
|
||||||
|
# --bind 'shift-page-down:preview-page-down'
|
||||||
|
# --bind 'ctrl-page-up:preview-page-up'
|
||||||
|
# --bind 'ctrl-page-down:preview-page-down'
|
||||||
|
--bind 'alt-up:preview-up'
|
||||||
|
--bind 'alt-down:preview-down'
|
||||||
|
--bind 'shift-up:preview-page-up'
|
||||||
|
--bind 'shift-down:preview-page-down'
|
||||||
|
)
|
||||||
|
|
||||||
# if [[ "$(wc -l <<<"$attrpaths")" -eq 1 ]]; then
|
local -a attributes
|
||||||
# trace " nix profile install $flake#$attrpaths"
|
readarray -d $'\n' -t attributes < <(
|
||||||
# trace " nix run $flake#$attrpaths"
|
cut <"$packages_tsv" -f2-3 | tr '\n' '\0' | tr '\t' '\n' \
|
||||||
# trace " nix shell $flake#$attrpaths^*"
|
| fzf --read0 --print0 --gap 1 --multi --tiebreak=begin "${fzf_config[@]}" --preview "$(declare -f show-package); show-package {}" \
|
||||||
# trace " nix-shell '<$flake>' -A $flake#$attrpaths"
|
| tr '\n\0' '\t\n' | cut -f1
|
||||||
# fi
|
)
|
||||||
|
|
||||||
# cat <<<"$attrpaths"
|
if [[ "${#attributes[@]}" -gt 0 ]]; then
|
||||||
|
if [[ ! -t 1 ]] || ! command -v gum >/dev/null; then
|
||||||
|
printf "%s\n" "${attributes[@]}"
|
||||||
|
else
|
||||||
|
local -a menu=(
|
||||||
|
"print : 'printf' the packages"
|
||||||
|
"print2 : 'printf' the packages with flake prefixed"
|
||||||
|
"build : 'nix-build' the packages"
|
||||||
|
"install : 'nix profile install' the packages"
|
||||||
|
# "enter : 'nix-shell' the packages and modify this environment"
|
||||||
|
"shell : 'nix shell ...' the packages"
|
||||||
|
"shell2 : 'nix shell ...^*' the packages"
|
||||||
|
"shell3 : 'nix-shell ...' the packages"
|
||||||
|
)
|
||||||
|
case "$(gum choose "${menu[@]}" | cut -d' ' -f1)" in
|
||||||
|
print)
|
||||||
|
printf "%s\n" "${attributes[@]}"
|
||||||
|
;;
|
||||||
|
print2)
|
||||||
|
printf "%s\n" "${attributes[@]/#/"$flake#"}"
|
||||||
|
;;
|
||||||
|
build)
|
||||||
|
if command -v nom-build >/dev/null; then
|
||||||
|
eval "nom-build '$nixpkgs' ${attributes[*]/#/-A }"
|
||||||
|
else
|
||||||
|
eval "nix-build '$nixpkgs' ${attributes[*]/#/-A }"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
install)
|
||||||
|
nix profile install "${attributes[@]/#/"$flake#"}"
|
||||||
|
;;
|
||||||
|
shell)
|
||||||
|
nix shell "${attributes[@]/#/"$flake#"}"
|
||||||
|
;;
|
||||||
|
shell2)
|
||||||
|
local -a attributes_all=("${attributes[@]/%/'^*'}")
|
||||||
|
nix shell "${attributes_all[@]/#/"$flake#"}"
|
||||||
|
;;
|
||||||
|
shell3)
|
||||||
|
eval "nix-shell '$nixpkgs' ${attributes[*]/#/-A }"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
die "unknown option"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
fi
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user