From 828f036e26f947f58e639b70301c984246bcf4c7 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Sat, 19 Apr 2025 13:03:24 +0200 Subject: ... --- overlays/nix-direnv/default.nix | 53 ++++++++++++++++++++++++++++++ overlays/nix-direnv/static-nix.patch | 62 ++++++++++++++++++++++++++++++++++++ user-profiles/direnv.nix | 9 ++---- 3 files changed, 117 insertions(+), 7 deletions(-) create mode 100644 overlays/nix-direnv/default.nix create mode 100644 overlays/nix-direnv/static-nix.patch diff --git a/overlays/nix-direnv/default.nix b/overlays/nix-direnv/default.nix new file mode 100644 index 00000000..7c488e4e --- /dev/null +++ b/overlays/nix-direnv/default.nix @@ -0,0 +1,53 @@ +{ final, prev, ... }: { + nix-direnv = prev.resholve.mkDerivation rec { + pname = "nix-direnv"; + version = "3.0.6"; + + patches = [ + ./static-nix.patch + ]; + + src = prev.fetchFromGitHub { + owner = "nix-community"; + repo = "nix-direnv"; + rev = version; + hash = "sha256-oNqhPqgQT92yxbKmcgX4F3e2yTUPyXYG7b2xQm3TvQw="; + }; + + installPhase = '' + runHook preInstall + install -m400 -D direnvrc $out/share/nix-direnv/direnvrc + runHook postInstall + ''; + + solutions = { + default = { + scripts = [ "share/nix-direnv/direnvrc" ]; + interpreter = "none"; + inputs = with final; [ coreutils nix-monitored ]; + fake = { + builtin = [ + "PATH_add" + "direnv_layout_dir" + "has" + "log_error" + "log_status" + "watch_file" + ]; + function = [ + # not really a function - this is in an else branch for macOS/homebrew that + # cannot be reached when built with nix + "shasum" + ]; + }; + keep = { + "$cmd" = true; + "$direnv" = true; + }; + execer = [ + "cannot:${prev.lib.getExe' final.nix-monitored "nix"}" + ]; + }; + }; + }; +} diff --git a/overlays/nix-direnv/static-nix.patch b/overlays/nix-direnv/static-nix.patch new file mode 100644 index 00000000..5de8193f --- /dev/null +++ b/overlays/nix-direnv/static-nix.patch @@ -0,0 +1,62 @@ +diff --git i/direnvrc w/direnvrc +index ddac0f5..fbcade6 100644 +--- i/direnvrc ++++ w/direnvrc +@@ -29,10 +29,8 @@ _nix_direnv_warning() { + + _nix_direnv_error() { log_error "${_NIX_DIRENV_LOG_PREFIX}$*"; } + +-_nix_direnv_nix="" +- + _nix() { +- ${_nix_direnv_nix} --extra-experimental-features "nix-command flakes" "$@" ++ nix --extra-experimental-features "nix-command flakes" "$@" + } + + _require_version() { +@@ -55,34 +53,6 @@ _require_cmd_version() { + _require_version "$cmd" "${BASH_REMATCH[1]}" "$required" + } + +-_nix_direnv_resolve_nix() { +- local ambient_nix +- +- if ambient_nix=$(command -v nix); then +- if _require_cmd_version "${ambient_nix}" "${NIX_MIN_VERSION}"; then +- echo "${ambient_nix}" +- return 0 +- else +- _nix_direnv_warning "Nix version in PATH is too old, wanted ${NIX_MIN_VERSION}+, got $(${ambient_nix} --version), will attempt fallback" +- fi +- else +- _nix_direnv_warning "Could not find Nix in PATH, will attempt fallback" +- fi +- +- if [ -n "${NIX_DIRENV_FALLBACK_NIX}" ]; then +- if _require_cmd_version "${NIX_DIRENV_FALLBACK_NIX}" "${NIX_MIN_VERSION}"; then +- echo "${NIX_DIRENV_FALLBACK_NIX}" +- return 0 +- else +- _nix_direnv_error "Fallback Nix version is too old, wanted ${NIX_MIN_VERSION}+, got $(${NIX_DIRENV_FALLBACK_NIX} --version)" +- return 1 +- fi +- else +- _nix_direnv_error "Could not find fallback Nix binary, please add Nix to PATH or set NIX_DIRENV_FALLBACK_NIX" +- return 1 +- fi +-} +- + _nix_direnv_preflight() { + if [[ -z $direnv ]]; then + # shellcheck disable=2016 +@@ -102,10 +72,6 @@ _nix_direnv_preflight() { + fi + fi + +- if ! _nix_direnv_nix=$(_nix_direnv_resolve_nix); then +- return 1 +- fi +- + local layout_dir + layout_dir=$(direnv_layout_dir) + diff --git a/user-profiles/direnv.nix b/user-profiles/direnv.nix index 3cc1af3e..7887d765 100644 --- a/user-profiles/direnv.nix +++ b/user-profiles/direnv.nix @@ -1,14 +1,9 @@ -{ userName, pkgs, ... }: +{ userName, ... }: { home-manager.users.${userName} = { programs.direnv = { enable = true; - nix-direnv = { - enable = true; - package = pkgs.nix-direnv.override { - nix = pkgs.nix-monitored; - }; - }; + nix-direnv.enable = true; }; }; } -- cgit v1.2.3