{ user ? throw "user argument is required", home ? throw "home argument is required", }: { inputs, ... }: { home-manager.users.${user} = { programs = { direnv = { enable = true; silent = true; nix-direnv.enable = true; enableZshIntegration = true; }; zsh = { shellAliases.nde = "nix-direnv"; initExtra = '' nix-direnv() { if [ -z "$1" ]; then echo "Usage: nix-direnv " return 1 fi echo "use $1" > .envrc direnv allow } ''; }; }; # https://github.com/direnv/direnv/wiki/Customizing-cache-location xdg.configFile."direnv/direnvrc".text = '' declare -A direnv_layout_dirs direnv_layout_dir() { local hash path echo "''${direnv_layout_dirs[$PWD]:=$( hash="$(sha1sum - <<< "$PWD" | head -c40)" path="''${PWD//[^a-zA-Z0-9]/-}" echo "${home}/.cache/direnv/layouts/''${hash}''${path}" )}" } ''; }; environment.persistence = { "/persist"."${home}/.local/share/direnv/allow" = { }; "/cache"."${home}/.cache/direnv" = { }; }; }