From 5dc8842dbc877d66afbfb447f09b87e44237515a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Sat, 30 Jan 2021 12:12:56 +0100 Subject: [PATCH 1/2] get rid of gnugrep dependency --- direnvrc | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/direnvrc b/direnvrc index df5b65b..23eca67 100644 --- a/direnvrc +++ b/direnvrc @@ -118,6 +118,21 @@ use_flake() { _nix_export_or_unset TEMPDIR "$old_tempdir" } +_nix_extract_direnv() { + local found_direnv + found_direnv=0 + while read -r line; do + if [[ "$found_direnv" == "1" ]]; then + echo "$line" + break + elif [[ "$line" == "_____direnv_____" ]]; then + found_direnv=1 + else + echo "$line" >&2 + fi + done +} + use_nix() { local path layout_dir path=$("${NIX_BIN_PREFIX}nix-instantiate" --find-file nixpkgs) @@ -157,13 +172,12 @@ use_nix() { then [[ -d "$layout_dir" ]] || mkdir -p "$layout_dir" local dump_cmd tmp - dump_cmd="echo -n _____direnv_____; \"$direnv\" dump bash" + dump_cmd="echo _____direnv_____; \"$direnv\" dump bash" tmp=$("${NIX_BIN_PREFIX}nix-shell" \ "${experimental_flags[@]}" \ --show-trace --pure "$@" --run "$dump_cmd") # show original shell hook output - echo "$tmp" | grep -vP '(?<=_____direnv_____).*' - echo "$tmp" | grep -oP '(?<=_____direnv_____).*' > "$cache" + echo "$tmp" | _nix_extract_direnv >&2 > "$cache" update_drv=1 else log_status using cached derivation From 991ea66bb86f5f188f4d5292aa2283458436b5b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Sat, 30 Jan 2021 12:13:52 +0100 Subject: [PATCH 2/2] fix nix shells with different nix version If shell.nix contains its own nix version, our version check might no longer work. --- default.nix | 2 +- direnvrc | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/default.nix b/default.nix index f108b17..b9059c3 100644 --- a/default.nix +++ b/default.nix @@ -7,8 +7,8 @@ stdenv.mkDerivation { src = ./.; postPatch = '' + sed -i "2iNIX_BIN_PREFIX=${nixFlakes}/bin/" direnvrc substituteInPlace direnvrc \ - --replace "\''${NIX_BIN_PREFIX:-}" "\''${NIX_BIN_PREFIX:-${nixFlakes}/bin/}" \ --replace "grep" "${gnugrep}/bin/grep" ''; diff --git a/direnvrc b/direnvrc index 23eca67..50141de 100644 --- a/direnvrc +++ b/direnvrc @@ -1,6 +1,9 @@ # shellcheck shell=bash -NIX_BIN_PREFIX=${NIX_BIN_PREFIX:-} +if [[ -z ${NIX_BIN_PREFIX:-} ]]; then + NIX_BIN_PREFIX=$(command -v nix-shell) + NIX_BIN_PREFIX="${NIX_BIN_PREFIX%/*}/" +fi _nix_export_or_unset() { local key=$1 value=$2 @@ -138,7 +141,7 @@ use_nix() { path=$("${NIX_BIN_PREFIX}nix-instantiate" --find-file nixpkgs) layout_dir=$(direnv_layout_dir) local experimental_flags=() - if nix-shell --experimental-features '' --version 2>/dev/null >&2; then + if "${NIX_BIN_PREFIX}nix-shell" --experimental-features '' --version 2>/dev/null >&2; then experimental_flags+=('--experimental-features' 'nix-command flakes') fi