comma/,
Farid Zakaria 60a4cf8ec5 Prefer local nix-index if present
The nix-index database offered in the derivation
may be more out of date than what is present on the
system.

In fact, prefer any local nix-index database to the prebuilt
database included with comma
2020-08-13 12:57:22 -07:00

52 lines
1.1 KiB
Bash
Executable File

#!/bin/bash
#
# usage example:
# $ , yarn --help
# This finds a derivation providing a bin/yarn, and runs it with `nix run`.
# If there are multiple candidates, the user chooses one using `fzy`.
set -euo pipefail
if [[ $# -lt 1 ]]; then
>&2 echo "usage: , <program> [arguments]"
exit 1
fi
if [[ "$1" == "--install" ]] || [[ "$1" == "-i" ]]; then
install=1
shift
else
install=""
fi
# if a nix-index exists locally; use that as it's likely much more recent
# than the prebuilt one.
database=$PREBUILT_NIX_INDEX_DB
if [ -f "${HOME}/.cache/nix-index/files" ]; then
database="${HOME}/.cache/nix-index"
fi
argv0=$1; shift
case "${argv0}" in
@OVERLAY_PACKAGES@)
attr="${argv0}"
;;
*)
attr="$(nix-locate --db "${database}" --top-level --minimal --at-root --whole-name "/bin/${argv0}")"
if [[ "$(echo "${attr}" | wc -l)" -ne 1 ]]; then
attr="$(echo "${attr}" | fzy)"
fi
;;
esac
if [[ -z $attr ]]; then
>&2 echo "no match"
exit 1
fi
if [[ -n $install ]]; then
nix-env -iA "nixpkgs.${attr%%.*}"
else
nix run "nixpkgs.${attr}" -c "${argv0}" "$@"
fi