{ config, lib, ... }:
with lib;

let
  cfg = config.custom-hm.direnv;
  changeCacheDir = ''
    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 "''${XDG_CACHE_HOME}/direnv/layouts/''${hash}''${path}"
        )}"
    }
  '';
in
{
  options.custom-hm.direnv = {
    enable = mkEnableOption "direnv";
  };
  config = {
    programs = mkIf cfg.enable {
      direnv = {
        enable = true;
        stdlib = changeCacheDir;
        nix-direnv.enable = true;
      };
    };
  };
}
