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 + )}" +}