# HG changeset patch # User Meredith Howard # Date 1683531392 18000 # Node ID 0ae7864c4ad8eeb4a7de6d48796e5e182cf7ffbd # Parent 7f6a94dd56ee7173955e3e91492f90a5700b5446 add basic nix alternative for stubs diff --git a/.lib/sh/stubexec.sh b/.lib/sh/stubexec.sh --- a/.lib/sh/stubexec.sh +++ b/.lib/sh/stubexec.sh @@ -38,11 +38,23 @@ stubexec() { if [ -x "$real_bin" ]; then exec "$real_bin" "$@" fi + try_nix_run "$@" install_it touch "$(realbin "$0")" # In case of no updates stubexec "$@" } +has() { + type "$1" >/dev/null 2>&1 +} + +try_nix_run() { + if [ "${nix_ref:-}" ] && has nix; then + # FIXME: this can be GC'd and doesn't allow running alternate commands + exec nix run "$nix_ref" -- "$@" + fi +} + bina_install() { local github_repo="$1" mkdir -p ~/.local/bin diff --git a/.lib/stubs/direnv b/.lib/stubs/direnv --- a/.lib/stubs/direnv +++ b/.lib/stubs/direnv @@ -1,6 +1,8 @@ #!/bin/sh set -eu +nix_ref='nixpkgs#direnv' + install_it() { mkdir -p ~/.local/bin curl -fsSL https://direnv.net/install.sh | diff --git a/.lib/stubs/fzf b/.lib/stubs/fzf --- a/.lib/stubs/fzf +++ b/.lib/stubs/fzf @@ -1,6 +1,8 @@ #!/bin/sh set -eu +nix_ref='nixpkgs#fzf' + install_it() { bina_install "junegunn/fzf" } diff --git a/.lib/stubs/just b/.lib/stubs/just --- a/.lib/stubs/just +++ b/.lib/stubs/just @@ -1,6 +1,8 @@ #!/bin/sh set -eu +nix_ref='nixpkgs#just' + install_it() { bina_install "casey/just" # cargo install just diff --git a/.lib/stubs/stow b/.lib/stubs/stow --- a/.lib/stubs/stow +++ b/.lib/stubs/stow @@ -1,6 +1,8 @@ #!/bin/sh set -eu +nix_ref='nixpkgs#stow' + install_it() { cpanm -n Stow asdf reshim perl || : diff --git a/.lib/stubs/tectonic b/.lib/stubs/tectonic --- a/.lib/stubs/tectonic +++ b/.lib/stubs/tectonic @@ -2,6 +2,7 @@ set -eu age_limit=30 +nix_ref='nixpkgs#tectonic' install_it() { mkdir -p ~/.local/bin