{
  lib,
  config,
  ...
}: let
  inherit
    (lib)
    mkEnableOption
    mkIf
    mkOption
    types
    ;
  cfg = config.impermanence;
in {
  imports = [];

  options.impermanence = {
    enable = mkEnableOption "impermanence";
    storagePath = mkOption {
      type = types.path;
      default = "/persist";
      description = "The path where persistent data is stored";
    };
    name = mkOption {
      type = types.str;
      default = "persist";
      description = "the name of the persistent data store";
    };
  };

  config = mkIf cfg.enable {
    environment.persistence.${cfg.name} = {
      persistentStoragePath = cfg.storagePath;
      directories = [
        "/var/log"
        "/var/lib/nixos"
      ];
      files = [
        "/etc/ssh/ssh_host_ed25519_key"
        "/etc/ssh/ssh_host_ed25519_key.pub"
        "/etc/ssh/ssh_host_rsa_key"
        "/etc/ssh/ssh_host_rsa_key.pub"
      ];
    };
    environment.etc.machine-id.source = "${cfg.storagePath}/machine-id";
  };
}