{
  lib,
  config,
  ...
}:
let
  var = config.clan.core.vars.generators.state-version.files.version or { };
in
{
  options.clan.core.settings.state-version = {
    enable = lib.mkEnableOption "automatic state-version generation.

    The option will take the specified version, if one is already supplied through
    the config or generate one if not.
    ";
  };

  config = lib.mkIf (config.clan.core.settings.state-version.enable) {
    system.stateVersion = lib.mkDefault (lib.removeSuffix "\n" var.value);
    clan.core.vars.generators.state-version = {
      files.version = {
        secret = false;
        value = lib.mkDefault config.system.nixos.release;
      };
      runtimeInputs = [ ];
      script = ''
        echo -n ${config.system.stateVersion} > "$out"/version
      '';
    };
  };
}
