{ pkgs, lib, config, ... }:
let
  cfg = config.nix;
  inherit (lib) types;
  # Alternative which does not need to re-export envvars when called via sudo.
  # But this is maybe more clear to just (re-)export envvars.
  # And anyway, using NIX_CONF_DIR=${cfg.nixConf} directly does not work,
  # maybe because of filesystem restriction access set by nix, I don't know.
  /*
    nix = pkgs.writeShellScriptBin "nix" ''
      NIX_CONF_DIR=${cfg.nixConf} \
      NIX_SSL_CERT_FILE="${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" \
      SSL_CERT_FILE="${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" \
      ${pkgs.nix}/bin/nix "$@"
    '';
    */
in
{
  options.nix = {
    enable = lib.mkEnableOption "nix";
    nixConf = lib.mkOption {
      type = types.lines;
      apply = s: pkgs.writeText "nix.conf" s;
      default = ''
        auto-optimise-store = true
      '';
      description = ''
        Nix's nix.conf content.
      '';
    };
  };
  config = lib.mkIf cfg.enable {
    #nix-shell.buildInputs = [ nix ];
    nix-shell.shellHook = ''
      # nix
      # NOTE: linking NIX_CONF_DIR directly to ${cfg.nixConf} does not work.
      mkdir -p "$PWD"/.config/nix
      ln -fns ${cfg.nixConf} "$PWD"/.config/nix/nix.conf
      export NIX_CONF_DIR="$PWD"/.config/nix
      export NIX_SSL_CERT_FILE="${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"
      export SSL_CERT_FILE="${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"
    '';
  };
}