From 77d4a53df26e92c74c531b0047f39cd250dfd75c Mon Sep 17 00:00:00 2001 From: Armel van Ravels Date: Fri, 30 Jan 2026 17:22:19 +0100 Subject: [PATCH] Add direnv config --- programs/direnv.nix | 6 +++--- programs/direnv/direnvrc | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 programs/direnv/direnvrc diff --git a/programs/direnv.nix b/programs/direnv.nix index 5cbb80c..0028306 100644 --- a/programs/direnv.nix +++ b/programs/direnv.nix @@ -6,8 +6,8 @@ enableZshIntegration = true; nix-direnv.enable = true; }; - - home.sessionVariables = { - DIRENV_CACHE = "${config.home.homeDirectory}/.cache/direnv"; + + home.file.".config/direnv/direnvrc" = { + source = ./direnv/direnvrc; }; } diff --git a/programs/direnv/direnvrc b/programs/direnv/direnvrc new file mode 100644 index 0000000..d7950e3 --- /dev/null +++ b/programs/direnv/direnvrc @@ -0,0 +1,15 @@ +# Place in ~/.config/direnv/direnvrc + +# Two things to know: +# * `direnv_layour_dir` is called once for every {.direnvrc,.envrc} sourced +# * The indicator for a different direnv file being sourced is a different $PWD value +# This means we can hash $PWD to get a fully unique cache path for any given environment + +: ${XDG_CACHE_HOME:=$HOME/.cache} +declare -A direnv_layout_dirs +direnv_layout_dir() { + echo "${direnv_layout_dirs[$PWD]:=$( + echo -n "$XDG_CACHE_HOME"/direnv/layouts/ + echo -n "$PWD" | sha1sum | cut -d ' ' -f 1 + )}" +}